  /* Tokens : source unique dans cogestim-design-tokens.css (lié ci-dessus).
     Home n'a plus de :root local — il consomme les tokens partagés. */
  *{box-sizing:border-box}
  html,body{margin:0;padding:0}
  body{
    font-family:var(--sans);
    color:var(--ink);
    background:var(--paper);
    font-size:var(--cog-fs-body);
    line-height:1.65;
    -webkit-font-smoothing:antialiased;
    text-rendering:optimizeLegibility;
  }
  img{display:block;max-width:100%;height:auto}
  a{color:inherit;text-decoration:none}
  button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;padding:0}

  /* ——— .wrap / .h1-.h4 / .em / .lab / .body / .micro / .link / .circle-cta ———
     Déplacés : ce sont des primitives socle (base.css) et des composants CTA
     (components.css §A) — Home les consomme désormais via la chaîne
     tokens → base → components (voir <head>), plus de copie locale.
     NB audit : cette copie locale utilisait par erreur var(--cog-fs-cap)
     (14.5px, cran de corps) au lieu de var(--cog-fs-cta) (14px, le bon
     token CTA) sur .link et .navlist — écart de 0.5px, invisible, corrigé
     de fait par le passage à la source unique. */

  /* ═══════════════ HERO — BARRE ASSISTÉE PAR IA ═══════════════
     Langage naturel : comprend l'intention et oriente (pas de chat).
     Style aligné sur le héro (verre dépoli sombre, filet clair). */
  .nls{width:100%;max-width:660px;margin-top:72px}

  /* — État 1/2 : la barre — */
  .nls-bar{
    display:flex;align-items:center;gap:14px;
    padding:6px 4px 20px 2px;
    border:0;border-bottom:1px solid var(--cog-on-dark);border-radius:0;
    background:transparent;
    transition:border-color .35s ease;
  }
  .nls-bar:focus-within{
    border-bottom-color:var(--cog-on-dark);
    background:transparent;
    box-shadow:none;
  }
  /* repère IA discret (sparkle) */
  .nls-spark{flex-shrink:0;width:var(--icon-lg);height:var(--icon-lg);color:var(--cog-on-dark);display:inline-flex;transition:color .35s ease}
  .nls-bar:focus-within .nls-spark{color:var(--cog-on-dark)}
  .nls-spark svg{width:var(--icon-lg);height:var(--icon-lg);stroke:currentColor;fill:none;stroke-width:var(--icon-stroke);stroke-linecap:round;stroke-linejoin:round}
  .nls-input{
    flex:1;min-width:0;border:0;outline:0;background:transparent;
    font-family:var(--sans);font-size:var(--cog-fs-body-lg);font-weight:400;color:var(--cog-on-dark);
    letter-spacing:.005em;padding:14px 0;
  }
  /* ⭑ .nls-go supprimé, remplacé par .circle-cta (LIBRARY §A4, composant
     unique) — migration cosmétique uniquement (ce n'est pas un envoi de
     lead). Ne reste ici que ce que .circle-cta ne couvre pas : la taille
     d'icône propre à la barre IA et l'état busy piloté par JS via #nlsGo
     (id, donc non affecté par le renommage de classe).
     MAJ 31/07 (audit Home, constat M2) : la règle `#nlsGo svg` est supprimée.
     Elle était morte — un style inline width/height la neutralisait — et la
     géométrie du chevron appartient au composant (.circle-cta svg,
     components.css §A4). Ne reste que l'état busy. */
  #nlsGo[aria-busy="true"]{pointer-events:none;opacity:.55}
  .nls-hint{margin-top:16px;font-family:var(--sans);font-style:italic;font-weight:400;font-size:var(--cog-fs-sm);color:var(--cog-on-dark)}

  /* — État 3 : réflexion IA (inline, sobre) — */
  .nls-think{
    display:flex;align-items:center;gap:13px;
    margin-top:18px;padding-left:24px;
    font-family:var(--sans);font-size:var(--cog-fs-cap);font-style:italic;
    color:var(--cog-on-dark-a90);
    opacity:0;transform:translateY(4px);
    transition:opacity .4s ease, transform .4s ease;
  }
  .nls-think.show{opacity:1;transform:none}
  .nls-think .dots{display:inline-flex;gap:5px}
  .nls-think .dots i{
    width:6px;height:6px;border-radius:var(--radius-full);background:var(--magenta);
    display:inline-block;animation:nlsPulse 1.1s ease-in-out infinite;
  }
  .nls-think .dots i:nth-child(2){animation-delay:.18s;background:var(--grad)}
  .nls-think .dots i:nth-child(3){animation-delay:.36s;background:var(--red)}
  @keyframes nlsPulse{0%,100%{opacity:.25;transform:scale(.75)}45%{opacity:1;transform:scale(1)}}
  @media (prefers-reduced-motion:reduce){.nls-think .dots i{animation:none;opacity:.8}}

  /* — Zone de réponse (états A/B/C/D) — §A nls-zone-reponse (portage 28/09) — */
  .nls-answer{margin-top:20px;opacity:0;transform:translateY(6px);transition:opacity .45s ease, transform .45s ease}
  .nls-answer.show{opacity:1;transform:none}
  .nls-answer-lead{
    font-family:var(--sans);font-size:var(--cog-fs-body);line-height:1.55;
    color:var(--cog-on-dark-a90);max-width:54ch;margin:0 0 16px;padding-left:2px;
  }
  .nls-answer-lead b{font-weight:600;color:var(--cog-on-dark)}

  /* chips destinations — toutes outline (amendement Luis 28/09 : plus de .primary visuel) */
  .nls-dests{display:flex;flex-wrap:wrap;gap:12px}
  .nls-dest{
    display:inline-flex;align-items:center;gap:10px;
    padding:12px 20px;border-radius:var(--radius-pill);
    border:1px solid var(--cog-on-dark-a50);
    background:var(--cog-on-dark-a10);
    font-family:var(--sans);font-size:var(--cog-fs-cap);font-weight:500;color:var(--cog-on-dark);
    letter-spacing:.01em;cursor:pointer;white-space:nowrap;
    transition:background .3s ease, border-color .3s ease, gap .3s ease, transform .3s ease;
  }
  .nls-dest svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:var(--icon-stroke);opacity:.8;transition:transform .3s ease}
  .nls-dest:hover{background:var(--cog-on-dark-a30);border-color:var(--cog-on-dark-a90);gap:14px;transform:translateY(-1px)}
  .nls-dest:focus-visible{outline:2px solid var(--cog-on-dark);outline-offset:3px}
  /* .primary conservé sans consommateur — flag REST inchangé, pas de rendu visuel */
  .nls-dest.primary{background-image:var(--grad);border-color:transparent;color:var(--cog-white);box-shadow:var(--shadow-btn)}
  .nls-dest.primary:hover{filter:brightness(1.04);box-shadow:var(--shadow-btn-hover)}

  /* .nls-more : bouton « Explorer nos services » (vague uniquement) + lien contact */
  .nls-more{display:flex;flex-direction:column;align-items:flex-start;gap:14px;margin-top:18px}
  .nls-more .link.invert{font-size:var(--cog-fs-sm)}

  /* — Placeholder rotatif (exemple de formulation, passif) — */
  .nls-input::placeholder{color:var(--cog-on-dark);opacity:1;font-style:italic;transition:opacity .45s ease}
  .nls.ph-swap .nls-input::placeholder{opacity:0}

  /* zone de saisie : cursor:text (dette UX 25/09) */
  .nls-bar{cursor:text}
  .nls-hint{cursor:text}

  @media (max-width:560px){
    .nls{margin-top:30px}
    .nls-bar{padding-left:18px;gap:10px}
    .nls-input{font-size:var(--cog-fs-body);padding:12px 0}
    .nls-dests{flex-direction:column;align-items:stretch}
    .nls-dest{justify-content:space-between}
  }

  /* .cap-it / header.site / .nav / .brand / .navlist / .navtools / .vsep / .lang
     — déplacés dans base.css (socle header/nav, chargé via <head>).
     NB audit : `.navlist .burger` et sa variante on-dark ci-dessus ciblaient
     un sélecteur mort — le burger réel (partials/header.html) est dans
     .navtools, jamais dans .navlist. Supprimé avec le reste, aucune perte. */

  /* ——— Header : overlay du héro sombre. Reste = template partials/header.html ——— */
  header.site{position:fixed;left:0;right:0;width:100%}

  /* ——— HERO — image background ——— */
  .hero{
    position:relative;
    min-height:100vh;min-height:100svh; /* §2.8 amendé 25/09 : Home = display plein viewport — var(--cog-hero-h-display) */
    overflow:hidden;
    color:var(--cog-on-dark);
    /* CSS fallback (Lavaux dusk) visible si la vidéo ne charge pas */
    background:
      radial-gradient(70% 24% at 55% 58%, rgba(217,151,103,.25) 0%, rgba(217,151,103,0) 70%),
      var(--cog-grad-scene);
    display:flex;flex-direction:column;justify-content:flex-end;
    padding:clamp(80px,9.5vw,140px) 0 clamp(60px,7vw,96px);
  }
  /* background image */
  .hero-video,.hero-img{
    position:absolute;inset:0;width:100%;height:100%;
    object-fit:cover;z-index:0;
  }
  /* Fade-in vidéo de fond (cogestim-hero-video.js) : .is-fading posée par le JS seul, jamais d'opacity:0 sans JS. */
  .hero-video.is-fading{opacity:0}
  .hero-video.is-playing{opacity:1;transition:opacity .4s ease}
  @media (prefers-reduced-motion:reduce){
    .hero-video{display:none}
  }
  /* darkening overlay for legibility */
  .hero-overlay{
    position:absolute;inset:0;z-index:1;
    background:
      /* bottom heavy gradient for text */
      linear-gradient(180deg, rgba(20,18,22,.5) 0%, rgba(20,18,22,.12) 16%, rgba(20,18,22,0) 34%, rgba(20,18,22,.42) 68%, rgba(20,18,22,.72) 100%),
      /* left side darken */
      linear-gradient(90deg, rgba(20,18,22,.55) 0%, rgba(20,18,22,.2) 35%, rgba(20,18,22,0) 65%);
  }
  /* subtle film grain */
  .hero-overlay::after{
    content:"";position:absolute;inset:0;
    background-image:radial-gradient(circle at 50% 50%, rgba(255,255,255,.025) .6px, transparent .7px);
    background-size:4px 4px;
    mix-blend-mode:overlay;pointer-events:none;
  }
  .hero .wrap{position:relative;z-index:2;width:100%;display:flex;flex-direction:column;gap:48px}

  .hero-type{max-width:none}
  .hero-type h1{max-width:20ch}
  .hero-type h1{
    font-family:var(--sans);font-weight:300;
    font-size:clamp(40px,5.5vw,86px);line-height:1.04;letter-spacing:-.012em;
    color:var(--cog-on-dark);margin:0;text-wrap:balance;
    text-shadow:0 1px 30px rgba(0,0,0,.25);
  }
  .hero-type h1 .em{
    color:var(--cog-on-dark);
    font-style:italic;font-weight:400;
    padding-bottom:4px; /* respiration sous le soulignement dégradé (ex-inline) */
  }
  .hero-type .sub{
    margin-top:34px;
    font-family:var(--sans);font-style:italic;font-weight:400;
    font-size:clamp(18px,1.5vw,22px);line-height:1.45;color:var(--cog-on-dark-a90);
    max-width:58ch;
  }

  /* bottom strip on video */
  .hero-bot{
    display:flex;justify-content:space-between;align-items:center;gap:24px;
    padding-top:24px;
    font-family:var(--sans);font-size:var(--cog-fs-xs);letter-spacing:var(--cog-ls-display);text-transform:uppercase;color:var(--cog-on-dark-a70);
  }
  .hero-bot .left{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
  .hero-bot .left b{color:var(--cog-on-dark-a70);font-weight:600;letter-spacing:var(--cog-ls-display)}
  .hero-bot .left .dot{width:3px;height:3px;background:var(--red);border-radius:var(--radius-full);display:inline-block}
  .hero-bot .scroll-mini{display:inline-flex;align-items:center;gap:12px;color:var(--cog-on-dark)}
  .hero-bot .scroll-mini .ln{width:1px;height:30px;background:var(--cog-on-dark-a50);position:relative;overflow:hidden}
  .hero-bot .scroll-mini .ln::after{
    content:"";position:absolute;left:0;width:100%;height:50%;top:-100%;
    background:var(--cog-on-dark);
    animation:slidev 2.6s ease-in-out infinite;
  }
  @keyframes slidev{0%{top:-100%}55%,100%{top:120%}}

  @media (max-width:920px){
    .hero-bot .left .dot:nth-of-type(2), .hero-bot .left span:nth-of-type(4), .hero-bot .left span:nth-of-type(5){display:none}
  }

  /* ——— Sections base ——— */
  section{padding:var(--sec-y) 0}
  .sec-head{display:flex;flex-direction:column;gap:28px;margin-bottom:72px}
  .sec-head.center{align-items:center;text-align:center}
  .sec-head h2{max-width:30ch}
  .sec-head.center h2{max-width:24ch}
  .sec-head.center h2,.sec-head.center .body{margin-top:8px} /* ex-inline, préserve le rythme lab→titre→intro */

  /* ——— 01 — Parcours vendeur ——— */
  .doors{
    display:grid;grid-template-columns:1fr 1fr;gap:clamp(32px,5vw,72px);
    margin-top:24px;
  }
  .door{display:flex;flex-direction:column;gap:24px;position:relative}
  .door .ph{
    position:relative;aspect-ratio:5/4;overflow:hidden;background:var(--paper-deep);
  }
  .door .ph img{width:100%;height:100%;object-fit:cover;transition:transform 1.8s cubic-bezier(.2,.7,.2,1)}
  .door:hover .ph img{transform:scale(1.035)}
  .door .ph.ph-fill{
    background:
      repeating-linear-gradient(135deg, transparent 0 12px, var(--cog-ink-a05) 12px 13px),
      var(--paper-deep);
  }
  .door .meta-row{
    display:flex;align-items:center;justify-content:space-between;gap:16px;margin-top:8px;
  }
  .door .surtitle{
    font-family:var(--sans);font-size:var(--cog-fs-xs);letter-spacing:var(--cog-ls-lab-lg);text-transform:uppercase;
    color:var(--ink-mute);
  }
  .door h3{margin:6px 0 0;max-width:16ch}
  .door p{margin:0;color:var(--ink-soft);font-size:var(--cog-fs-cap);line-height:1.6;max-width:42ch}
  .door .foot{margin-top:auto;padding-top:8px;display:flex;align-items:center;justify-content:space-between}
  @media (max-width:768px){.doors{grid-template-columns:1fr}}

  /* ——— 02 — Pourquoi (paper-warm) ——— */
  .warm{background:var(--paper-warm)}
  .why{
    display:grid;grid-template-columns:1.15fr 1fr;gap:clamp(48px,7vw,120px);align-items:start;
  }
  .why h2{max-width:28ch;margin-top:24px}
  .why .body{margin-top:32px}
  .why .body p{margin:0 0 18px}
  .why .foot{margin-top:32px}

  .why-visual{position:relative}
  .why-visual .ph{
    aspect-ratio:4/5;overflow:hidden;background:var(--paper-deep);
    position:relative;
  }
  .why-visual .ph.ph-fill{
    background:
      repeating-linear-gradient(135deg, transparent 0 12px, var(--cog-ink-a05) 12px 13px),
      var(--paper-deep);
  }
  .why-visual .cap{
    font-family:var(--sans);font-style:italic;font-weight:400;
    font-size:var(--cog-fs-cap);color:var(--ink-soft);margin-top:14px;letter-spacing:.005em;
  }
  .why-visual .cap::before{content:"— "}

  .pillars{
    margin-top:clamp(80px,9vw,128px);
    display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(28px,3vw,56px);
    border-top:1px solid var(--rule);padding-top:48px;
    position:relative;
  }
  .pillars::before{display:none}
  .pillar{display:flex;flex-direction:column;gap:14px}
  .pillar .n{
    font-family:var(--sans);font-weight:300;font-size:clamp(40px,4vw,56px);line-height:.9;color:var(--ink);
    letter-spacing:-.01em;
  }
  .pillar h4{margin:4px 0 0}
  .pillar p{margin:0;color:var(--ink-soft);font-size:var(--cog-fs-cap);line-height:1.55}
  @media (max-width:1024px){.why{grid-template-columns:1fr}.pillars{grid-template-columns:1fr 1fr}}

  /* ——— Chiffres — figures-band : anatomie LIBRARY (flex + .fb-sep), voir
     cogestim-components.css §L11. Taille standard uniquement depuis le 22/07
     (--xl écartée, uniformité du composant) — Home ne garde ici que sa
     décoration locale (filigrane girafe) et le positionnement. ——— */
  .figures-band{position:relative;overflow:hidden}
  .figures-band::after{
    content:"";position:absolute;top:0;right:0;bottom:0;
    width:min(58%,760px);
    background:url('<?php echo esc_url( get_theme_file_uri( 'assets/img/giraffe-pattern.png' ) ); ?>') right center / cover no-repeat;
    -webkit-mask:linear-gradient(90deg,transparent 0%,#000 38%,#000 100%);
            mask:linear-gradient(90deg,transparent 0%,#000 38%,#000 100%);
    mix-blend-mode:multiply;opacity:.55;pointer-events:none;z-index:0;
  }
  .figures-band > .wrap{position:relative;z-index:1}

  /* ——— 03 — Pilotage (dark night) ——— */
  .dark{background:var(--night);color:var(--paper-warm)}
  .dark .lab{color:var(--cog-on-dark-a70)}
  .dark .body{color:var(--cog-on-dark-a70)}
  .dark .h2{color:var(--paper-warm)}
  .dark .h2 .em{color:var(--paper-warm)}
  /* Réalisations — carousel */
  .real-head{
    display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap;
    margin-top:clamp(80px,9vw,128px);
    padding-bottom:22px;
    border-bottom:1px solid var(--cog-on-dark-a10);
    position:relative;
  }
  .real-head::before{display:none}
  .real-head .ttl{display:flex;flex-direction:column;gap:14px}
  .real-head h3{
    font-family:var(--sans);font-weight:300;font-size:clamp(28px,2.8vw,40px);line-height:1.05;letter-spacing:-.003em;
    color:var(--paper-warm);margin:0;max-width:22ch;
  }
  .real-head h3 em{font-style:italic;font-weight:400;color:var(--paper-warm)}
  .real-head .big{
    display:flex;align-items:baseline;gap:.4em;flex-wrap:wrap;margin:0;
    color:var(--paper-warm);font-family:var(--sans);font-weight:300;letter-spacing:-.01em;
  }
  .real-head .big .num{font-size:clamp(64px,8vw,120px);line-height:.85;font-weight:300;position:relative;display:inline-flex;align-items:flex-start}
  .real-head .big .num sup{font-size:.34em;font-weight:300;top:.1em;margin-left:.04em}
  .real-head .big .txt{font-size:clamp(22px,2.4vw,34px);font-weight:300;line-height:1.05}
  /* ⭑ RELEVÉ avant passe d'uniformisation trait/couleur (03/07) :
     - Toggles agences (Home), FAQ (Acheter/Courtage), caractéristiques
       (Fiche-bien) et flèches carousel/services-head (Home), .door .arr
       (Courtage) : AUCUN override local — héritent déjà du seul jeu de
       valeurs de la LIBRARY (border 1px var(--color-border-strong), icône
       var(--color-text), stroke-width 1.4 partout, bar 1.4px). Conformes.
     - Seul écart trouvé : les flèches carousel de #real-head (section
       .dark) redéfinissaient localement border-color/color avec des tokens
       on-dark ad hoc + un #fff en dur au hover — remplacé ci-dessous par le
       modificateur LIBRARY .invert (déjà tokenisé, même construction que
       .circle-cta de base, juste des tokens on-dark). Plus aucune couleur
       ni épaisseur locale sur un .circle-cta dans le projet. */
  .real-head .arrows{display:flex;gap:10px}

  .real-scroll{
    margin:36px calc(var(--gut)*-1) 0 0;
    padding:0 var(--gut) 0 0;
    overflow-x:auto;overflow-y:hidden;
    scroll-snap-type:x proximity;scroll-behavior:smooth;
    scrollbar-width:none;
  }
  .real-scroll::-webkit-scrollbar{display:none}
  .real-track{
    display:grid;grid-auto-flow:column;
    grid-auto-columns:calc((100% - 2 * 28px) / 3);
    gap:clamp(20px,2.6vw,32px);
  }
  .real-track > .proj{scroll-snap-align:start;display:flex;flex-direction:column;gap:12px}
  .real-track > .proj .ph{aspect-ratio:4/5;overflow:hidden;background:var(--cog-bg-scene-dark);position:relative;cursor:pointer}
  .real-track > .proj .ph img{width:100%;height:100%;object-fit:cover;transition:transform 1.6s ease}
  .real-track > .proj:hover .ph img{transform:scale(1.04)}
  .real-track > .proj .play{
    position:absolute;top:18px;left:18px;width:50px;height:50px;border-radius:var(--radius-full);
    background:rgba(255,255,255,.92);display:flex;align-items:center;justify-content:center;
    transition:background .3s ease,transform .3s ease;z-index:2;
  }
  .real-track > .proj .play svg{width:var(--icon-sm);height:var(--icon-sm);margin-left:2px;color:var(--icon-strong)}
  .real-track > .proj:hover .play{background:var(--cog-white);transform:scale(1.08)}
  .real-track > .proj .name{font-family:var(--sans);font-weight:500;font-size:20px;line-height:1.15;color:var(--paper-warm);margin-top:4px}
  .real-track > .proj .loc{font-family:var(--sans);font-size:var(--cog-fs-xs);letter-spacing:var(--cog-ls-lab-lg);text-transform:uppercase;color:var(--cog-on-dark-a50)}
  /* Cartes dynamiques (13/10) : .loc/.name deviennent des liens vers la fiche, rendu inchangé. */
  .real-track > .proj a.loc,.real-track > .proj a.name{text-decoration:none}
  .real-track > .proj a.name:hover,.real-track > .proj a.loc:hover{text-decoration:underline;text-underline-offset:3px}
  .real-track > .proj .ph:not([data-video]){cursor:default}

  .real-foot{
    margin-top:36px;display:flex;justify-content:flex-start;
  }


  @media (max-width:1024px){.real-track{grid-auto-columns:calc((100% - 24px) / 2)}}
  @media (max-width:560px){.real-track{grid-auto-columns:88%}}

  /* ——— Investir avec Cogestim (paper-warm section) ——— */
  .invest{position:relative}
  .invest-grid{
    display:grid;grid-template-columns:1.05fr 1fr;
    gap:clamp(40px,5vw,96px);align-items:stretch;
  }
  .invest-grid .ttl-col{display:flex;flex-direction:column;gap:24px;align-self:stretch;justify-content:center}
  .invest-grid h3{
    font-family:var(--sans);font-weight:300;
    font-size:clamp(34px,3.8vw,58px);line-height:1.08;letter-spacing:-.005em;
    color:var(--ink);margin:0;max-width:32ch;text-wrap:balance;
  }
  .invest-grid p{color:var(--ink-soft);margin:8px 0 0;font-family:var(--sans);font-size:var(--cog-fs-cap);line-height:1.7;max-width:48ch}

  /* ⭑ Passe 8 : .iform .field / .iform .field.sel (souligné, placeholder seul)
     SUPPRIMÉS — remplacés par .field--boxed / .field-lab / .field-in
     (LIBRARY, cogestim-components.css §L1/L3). Ne reste ici que la mise en
     page propre à ce formulaire (grille 2 colonnes, pied de formulaire). */
  .iform{display:flex;flex-direction:column;gap:30px}
  /* Sous-grille de rangée (même correctif que hero-courtage, arbitrage 04/08) :
     les paires label/input partagent les mêmes pistes de ligne, pour rester
     alignées même si un label wrap sur 2 lignes. Ne restyle pas .field--boxed
     (LIBRARY) — n'ajuste que son placement dans ce conteneur. */
  .iform-row{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:repeat(2,auto);gap:clamp(20px,2.4vw,40px)}
  .iform-row .field--boxed{display:grid;grid-template-rows:subgrid;grid-row:span 2;row-gap:var(--space-3)}
  /* ⭑ Passe 8 (02/07, décision finale) : « S'inscrire » repasse en .btn
     (pilule dégradée, libellé) — .circle-cta n'est plus jamais un submit
     (voir LIBRARY §A5). .iform-foot ne pose que la mise en page du pied :
     mentions caps à gauche, bouton à droite, aucun style de .btn ici. */
  .iform-foot{display:flex;justify-content:space-between;align-items:center;gap:24px 32px;margin-top:4px;flex-wrap:wrap;row-gap:18px}
  .iform-tags{flex:1;display:flex;flex-wrap:wrap;gap:10px 22px;min-width:200px}
  .iform-tags span{
    font-family:var(--sans);font-size:var(--cog-fs-2xs);letter-spacing:var(--cog-ls-lab);text-transform:uppercase;
    color:var(--ink-mute);line-height:1.4;white-space:nowrap;
  }
  /* Formulaire câblé (29/10) : état succès = registre .msg-done du site (le module
     cogestim-contact-form.js pose .sent sur le <form>), erreur d'envoi via .form-error (components).
     Lien politique près du bouton. Scopé .invest : aucun effet ailleurs. */
  .invest .iform .msg-done{display:none;align-items:center;gap:12px;font-family:var(--sans);font-weight:500;font-size:var(--cog-fs-body,18px);color:var(--ink)}
  .invest .iform .msg-done svg{width:var(--icon-lg);height:var(--icon-lg);stroke:var(--icon-accent);fill:none;stroke-width:var(--icon-stroke);stroke-linecap:round;stroke-linejoin:round;flex:0 0 auto}
  .invest .iform.sent > :not(.msg-done){display:none}
  .invest .iform.sent .msg-done{display:flex}
  .invest .iform .form-error[hidden]{display:none}
  .invest .iform .form-privacy{margin:0}
  .invest .iform .form-privacy a{font-family:var(--sans);font-size:var(--cog-fs-legal);color:var(--ink-soft);text-decoration:underline;text-underline-offset:2px}
  /* Rangée prénom/nom (sous-grille 2 pistes) : le message d'erreur sort du flux, sous le champ,
     dans l'espace de la rangée (gap .iform 30px) — sinon il tombe sur la piste de l'input. */
  .invest .iform-row .field--boxed{position:relative}
  .invest .iform-row .field-msg{position:absolute;top:100%;left:0;margin-top:var(--space-2)}
  @media (max-width:920px){.invest-grid{grid-template-columns:1fr;gap:40px;align-items:start}}
  @media (max-width:560px){.iform-row{grid-template-columns:1fr;grid-template-rows:none;gap:22px}.iform-row .field--boxed{display:flex;flex-direction:column;grid-row:auto}}

  /* ——— 05 — Témoignages ——— */
  .testi-stage{display:none;grid-template-columns:5fr 7fr;gap:clamp(40px,6vw,96px);align-items:center;min-height:480px;animation:fade .5s ease}
  .testi-stage.active{display:grid}
  @keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
  .testi-ph{aspect-ratio:4/5;background:var(--paper-deep);overflow:hidden;position:relative}
  .testi-ph img{width:100%;height:100%;object-fit:cover}
  .testi-ph.ph-fill{
    background:
      repeating-linear-gradient(135deg, transparent 0 12px, var(--cog-ink-a05) 12px 13px),
      var(--paper-deep);
  }
  /* Glyphe de citation = .vt-glyph de cogestim-components.css (même guillemet que les cartes .vtesti). Seul l'espacement sous le glyphe est local (gap 16px des cartes). */
  .testi-stage .vt-glyph{margin-bottom:16px}
  .testi-quote{
    font-family:var(--sans);font-style:italic;font-weight:400;
    font-size:clamp(24px,2.6vw,36px);line-height:1.32;color:var(--ink);
    max-width:26ch;margin:0;text-wrap:pretty;
  }
  .testi-meta{margin-top:36px;padding-top:24px;border-top:1px solid var(--rule);position:relative}
  .testi-meta .name{font-family:var(--sans);font-weight:500;font-size:var(--cog-fs-body-lg);letter-spacing:.005em;color:var(--ink)}
  .testi-meta .role{font-family:var(--sans);font-size:var(--cog-fs-sm);color:var(--ink-soft);letter-spacing:.02em;margin-top:4px}
  .testi-meta .role b{color:var(--ink);font-weight:500}

  .testi-ctrl{
    display:flex;justify-content:space-between;align-items:center;
    margin-top:56px;
  }
  .testi-count{font-family:var(--sans);font-weight:300;color:var(--ink-soft);font-size:var(--cog-fs-body-lg);letter-spacing:.02em}
  .testi-count b{color:var(--ink);font-weight:400}
  .testi-arr{display:flex;gap:12px}
  @media (max-width:768px){.testi-stage.active{grid-template-columns:1fr}.testi-ph{aspect-ratio:5/4}
    /* 06/11 : case paysage en mobile, ancrage haut des portraits */
    .testi-ph img{object-position:50% 10%}}

  /* ——— 05 — Autres services : DÉPLACÉ vers cogestim-components.css §L27
     (25/08, 4e occurrence du pattern « bloc réutilisé hors Home » — remède
     établi en §L22 home-pilotage, 18/08). ——— */

  /* ——— 06 — Réseau : DÉPLACÉ vers cogestim-components.css §L28 (même passe). ——— */

  /* ——— CTA final ——— */
  .cta-final{
    position:relative;overflow:hidden;
    min-height:min(82vh,760px);
    color:var(--cog-on-dark);
    display:flex;flex-direction:column;justify-content:center;
    text-align:center;
    padding:clamp(80px,10vw,140px) 0;
    background:var(--cog-bg-scene-dark);
  }
  .cta-final-img{
    position:absolute;inset:0;width:100%;height:100%;
    object-fit:cover;object-position:center 60%;z-index:0;
  }
  .cta-final::before{
    content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
    background:
      linear-gradient(180deg, rgba(26,26,31,.40) 0%, rgba(26,26,31,.30) 40%, rgba(26,26,31,.80) 82%, var(--cog-ink) 100%),
      radial-gradient(120% 96% at 50% 44%, rgba(26,26,31,0) 30%, rgba(26,26,31,.5) 100%);
  }
  .cta-final .cta-divider{
    position:absolute;bottom:0;left:50%;transform:translateX(-50%);z-index:2;
    width:min(var(--maxw), calc(100% - var(--gut)*2));height:1px;
    background:var(--cog-on-dark-a10);
  }
  .cta-final .horizon-cta{display:none}
  .cta-final .wrap{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center}
  .cta-final .lab-row{
    display:flex;flex-direction:column;align-items:center;gap:14px;margin-bottom:30px;
  }
  .cta-final .lab-row .l{
    font-family:var(--sans);font-size:var(--cog-fs-lab);letter-spacing:var(--cog-ls-lab-lg);text-transform:uppercase;
    color:var(--cog-on-dark-a90);font-weight:500;
  }
  .cta-final .lab-row .l-rule{display:none}
  .cta-final h2{
    font-family:var(--sans);font-weight:300;
    font-size:clamp(48px,6vw,88px);line-height:1.02;letter-spacing:-.008em;
    color:var(--cog-on-dark);margin:0 auto;max-width:16ch;text-wrap:balance;
    text-shadow:0 1px 30px rgba(0,0,0,.35);
  }
  .cta-final h2 .em{
    color:var(--cog-on-dark);font-style:italic;font-weight:400;
  }
  .cta-final .sub{
    margin:28px auto 0;
    font-family:var(--sans);font-size:var(--cog-fs-body-lg);line-height:1.6;font-weight:300;
    color:var(--cog-on-dark-a90);max-width:48ch;
  }
  .cta-final .actions{
    margin-top:48px;display:flex;align-items:center;justify-content:center;gap:40px;flex-wrap:wrap;
  }
  .cta-final .actions .sep{
    width:3px;height:3px;background:var(--cog-on-dark-a50);border-radius:var(--radius-full);
  }
  .cta-final .ph-note{
    position:absolute;right:var(--gut);bottom:32px;z-index:2;
    font-family:ui-monospace,'SF Mono',Menlo,monospace;
    font-size:var(--cog-fs-2xs);letter-spacing:var(--cog-ls-display);text-transform:uppercase;
    color:var(--cog-on-dark-a50);
    display:flex;align-items:center;gap:10px;
  }
  .cta-final .ph-note::before{content:"";width:24px;height:1px;background:var(--cog-on-dark-a50)}
  .cta-final .ph-note b{color:var(--cog-on-dark-a90);font-weight:500;letter-spacing:var(--cog-ls-lab-lg)}

