/* ============================================================
   POLICES AUTO-HEBERGEES
   Arimo et Raleway servis depuis /assets/fonts, plus aucune
   requete vers Google. Format WOFF2 uniquement, sous-ensemble
   latin (latin + latin-ext pour Raleway).
   Arimo n'existe pas en graisse 800 : la face 700 couvre la
   plage 700-800 pour eviter un faux gras synthetique.
   ============================================================ */
@font-face{
  font-family:'Arimo';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('../assets/fonts/arimo-latin-400.woff2') format('woff2');
}
@font-face{
  font-family:'Arimo';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('../assets/fonts/arimo-latin-600.woff2') format('woff2');
}
@font-face{
  font-family:'Arimo';
  font-style:normal;
  font-weight:700 800;
  font-display:swap;
  src:url('../assets/fonts/arimo-latin-700.woff2') format('woff2');
}
@font-face{
  font-family:'Raleway';
  font-style:normal;
  font-weight:400;
  font-display:swap;
  src:url('../assets/fonts/raleway-latin-400.woff2') format('woff2');
}
@font-face{
  font-family:'Raleway';
  font-style:normal;
  font-weight:500;
  font-display:swap;
  src:url('../assets/fonts/raleway-latin-500.woff2') format('woff2');
}
@font-face{
  font-family:'Raleway';
  font-style:normal;
  font-weight:600;
  font-display:swap;
  src:url('../assets/fonts/raleway-latin-600.woff2') format('woff2');
}
@font-face{
  font-family:'Raleway';
  font-style:normal;
  font-weight:700;
  font-display:swap;
  src:url('../assets/fonts/raleway-latin-700.woff2') format('woff2');
}

:root{
    color-scheme: light only;
    --orange-50:#FFF4EF;
    --orange-100:#FEE7DB;
    --orange-200:#FDCBB6;
    --orange-300:#F9AA85;
    --orange-400:#F58652;
    --orange-500:#EB6226;
    --orange-600:#D8561F;
    --orange-700:#BF4A1A;
    --orange-800:#9C3B14;
    --orange-900:#6F290D;

    --bg:#FAF9F7;
    --surface:#FFFFFF;
    --anthracite:#1F2937;
    --text-main:#222222;
    --text-soft:#666666;

    --font-head:'Arimo', Arial, sans-serif;
    --font-body:'Raleway', sans-serif;

    --radius:14px;
    /* Gouttiere laterale unique : toute page du site borne son contenu sur cette valeur. */
    --gutter:28px;
    /* Coche blanche des listes a puces. L'ancienne valeur se referencait elle-meme
       (--check: var(--check)), donc invalide : les pastilles orange restaient vides. */
    --check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6L9 17l-5-5'/%3E%3C/svg%3E");
    --shadow-soft: 0 10px 30px -12px rgba(31,41,55,0.18);
  }

  :root{
    /* Rythme vertical : une seule echelle fluide pour tout le site. */
    --space-section: clamp(72px, 8.5vw, 112px);
    --space-block:   clamp(64px, 7.5vw, 100px);
    /* Echelle typographique : trois niveaux, tous fluides. */
    --h-section: clamp(1.85rem, 2.8vw, 2.4rem);
    --h-block:   clamp(1.45rem, 2.1vw, 1.85rem);
  }
  *{margin:0; padding:0; box-sizing:border-box;}
  /* Le header est fixe (~100px) : sans cette marge, toute ancre atterrit CACHEE dessous. */
  /* En em et non en px : l'en-tete fixe grandit avec le texte, un decalage
     fixe laisserait le titre vise cache derriere la barre. Critere 2.4.11. */
  [id]{scroll-margin-top:7.5em;}
  /* Lien d'evitement (WCAG 2.4.1, niveau A) : invisible a la souris,
     apparait au premier appui sur Tab pour sauter la navigation. */
  .skip-link{
    position:fixed; top:-120px; left:16px; z-index:2000;
    background:var(--anthracite); color:#fff;
    font-family:var(--font-head); font-weight:700; font-size:.9rem;
    padding:13px 22px; border-radius:12px;
    box-shadow:0 10px 26px -8px rgba(31,41,55,.55);
    transition:top .25s ease;
  }
  .skip-link:focus{top:16px;}
  /* La cible recoit le focus sans afficher de contour disgracieux */
  main[tabindex="-1"]:focus{outline:none;}
  html{scroll-behavior:smooth; overflow-x:hidden; overflow-x:clip; width:100%;}
  /* Filet de securite : une adresse e-mail ou une URL longue ne doit jamais
     pousser la largeur d'une colonne, y compris a fort grossissement. */
  body{overflow-wrap:break-word;
   
    font-family:var(--font-body);
    color:var(--text-main);
    background:var(--bg);
    line-height:1.6;
    -webkit-font-smoothing:antialiased;
    overflow-x:hidden; overflow-x:clip; width:100%;
  }
  h1,h2,h3,h4{font-family:var(--font-head); color:var(--anthracite); line-height:1.15; font-weight:700;}

  /* ---- Protection anti dark-mode forcé (navigateurs mobiles) ----
     Réaffirme explicitement le thème clair quand le système est en mode sombre,
     pour empêcher toute inversion automatique des couleurs. */
  @media (prefers-color-scheme: dark){
    html, body{background:var(--bg) !important; color:var(--text-main) !important;}
    h1,h2,h3,h4{color:var(--anthracite) !important;}
    .zone-section .section-head h2{color:#fff !important;}
    .service-cta h2,.svc-head h2,.svc-head h3,.hero-content h1,.plans-head h2,.plan h3,.network-intro h2,.svc-head h3 a,.about-engagements .method-head h2,.engagement h3,.formula-rank,.about-photo-label,.idcard-body h2,.aside-card-dark h2,.legal-identite h2{color:#fff !important;}
      .footer-col h3{color:var(--orange-300) !important;}
      .footer-identity strong{color:#fff !important;}
    .hero-content h1 .accent,.page-head h1 .accent,.method-head h2 .accent{color:var(--orange-500) !important;}
    .plans-head h2 .accent,.network-intro h2 .accent,.about-engagements .method-head h2 .accent{color:var(--orange-400) !important;}
    .plan-claim,.plan-list li,.plans-note,.plans-domains-note{color:inherit;}
    .hero-subtitle{color:rgba(255,255,255,.94) !important;}
    .svc-body p,.svc-list li,.page-intro,
    .method-head p,.method-steps li p,.service-cta p{color:inherit;}
  }
  a{text-decoration:none; color:inherit;}
  ul{list-style:none;}
  img{max-width:100%; display:block;}
  /* REGLE : tout contenu de page passe par .container (ou reprend --gutter),
     afin que toutes les pages, actuelles et futures, s'alignent sur la meme bordure. */
  .container{max-width:1180px; margin:0 auto; padding:0 var(--gutter);}
  .eyebrow{
    display:inline-block; max-width:100%; font-family:var(--font-head); font-weight:700; letter-spacing:.18em;
    text-transform:uppercase; font-size:.82rem; color:var(--orange-700); margin-bottom:14px;
  }
  :focus-visible{outline:3px solid var(--orange-700); outline-offset:3px;}

  /* ---------- HEADER ---------- */
  header{
    position:fixed; top:14px; left:50%; transform:translateX(-50%);
    width:calc(100% - 32px); max-width:1320px; z-index:1000;
    border-radius:20px; padding:14px 10px;
    background:rgba(30,22,18,.14);
    backdrop-filter:blur(24px) saturate(200%);
    -webkit-backdrop-filter:blur(24px) saturate(200%);
    border:1px solid rgba(255,255,255,.22);
    box-shadow:0 8px 32px -10px rgba(0,0,0,.22), inset 0 1px 0 rgba(255,255,255,.28);
    transition:background .4s ease, padding .4s ease, box-shadow .4s ease, border-color .4s ease, top .4s ease;
  }
  header .container{display:flex; align-items:center; justify-content:space-between; min-width:0;}
  /* Filet de derniere instance : sur une fenetre basse, une barre fixe qui a
     grandi avec le texte mangerait l'essentiel de l'ecran. Elle redevient
     alors une barre normale qui defile avec la page. Le seuil est en em,
     donc il se declenche quand le texte grandit, pas seulement sur petit ecran. */
  @media (max-height:22em){
    header{position:absolute; top:14px;}
    html.menu-open body{position:static;}
  }
  /* Texte tres agrandi sur ecran etroit : le CTA de la barre pousse le bouton
     du menu hors de l'ecran. Le seuil, en em, ne se declenche jamais a taille
     de texte normale, meme sur un 320 px. Le CTA reste accessible dans le menu,
     ou il figure deja avec le numero de telephone. */
  /* Selecteur porte par header : le bloc mobile a 47.5em, plus loin dans le
     fichier, remet display:flex sur .header-actions. */
  @media (max-width:15em){
    header .header-actions{display:none;}
  }
  header.scrolled{
    background:rgba(255,255,255,.32);
    backdrop-filter:blur(28px) saturate(200%);
    -webkit-backdrop-filter:blur(28px) saturate(200%);
    border-color:rgba(255,255,255,.5);
    box-shadow:0 8px 30px -10px rgba(31,41,55,.16), inset 0 1px 0 rgba(255,255,255,.55);
  }
  header.compact{
    top:10px; padding:10px 10px;
  }

  /* ---- Mode page interne (fond blanc cassé) : header clair dès le chargement ----
     Réutilise exactement l'apparence de .scrolled, indépendamment du défilement,
     car il n'y a pas de photo sombre derrière le header sur ces pages. */
  body.theme-light header{
    background:rgba(255,255,255,.32);
    backdrop-filter:blur(28px) saturate(200%);
    -webkit-backdrop-filter:blur(28px) saturate(200%);
    border-color:rgba(255,255,255,.5);
    box-shadow:0 8px 30px -10px rgba(31,41,55,.16), inset 0 1px 0 rgba(255,255,255,.55);
  }
  /* Pages claires : logo noir au repos, orange apres scroll (meme mecanique que l'accueil) */
  body.theme-light .brand-logo-white{opacity:0;}
  body.theme-light nav.main-nav > ul > li > a{color:var(--anthracite);}
  /* Au repos, le survol du menu suit le logo et le CTA : surbrillance anthracite.
     Apres scroll, la regle header.scrolled reprend la main et repasse en orange. */
  body.theme-light nav.main-nav > ul > li > a:hover{background:rgba(31,41,55,.10); color:var(--anthracite);}
  body.theme-light .header-actions .btn-primary{background:var(--anthracite); color:#fff; box-shadow:0 8px 20px -8px rgba(31,41,55,.45);}
  body.theme-light .header-actions .btn-primary:hover{background:#171F29;}
  body.theme-light .burger span{background:var(--anthracite);}
  /* Contenu des pages internes : dégage le header fixe */
  .page-main{padding-top:130px; padding-bottom:80px; min-height:60vh;}
  @media (max-width:47.5em){ .page-main{padding-top:110px; padding-bottom:60px;} [id]{scroll-margin-top:6.25em;} }

  /* ---------- PAGE SERVICES ---------- */
  .page-head{max-width:720px; margin:0 auto 72px; text-align:center;}
  /* ---------- ICONE DU PILIER, CHAPEAU DES PAGES PILIERS ----------
     Rappel visuel de la carte cliquee sur l'accueil et sur la page mere.
     Portee strictement limitee a .page-head : les cartes de l'accueil et de la
     page Services ne sont pas touchees.
     Trois mouvements : la tuile se pose, la courbe se trace, un reflet balaie.
     Uniquement transform, opacity et stroke-dashoffset, donc aucun recalcul de
     mise en page et aucun decalage cumulatif.
     Le reflet ne boucle pas indefiniment, trois passages puis arret, pour rester
     hors du champ du critere 2.2.2 sur les contenus en mouvement.
     Pas d'animation-fill-mode sur la tuile : la valeur finale des images cles
     est identique au style declare, ce qui laisse le survol reprendre la main. */
  .page-head .svc-icon{
    margin:0 auto 18px; overflow:hidden;
    animation:pilierPose .9s cubic-bezier(.2,.9,.25,1.05);
  }
  .page-head .svc-icon::after{
    content:""; position:absolute; inset:0; z-index:2; pointer-events:none;
    background:linear-gradient(100deg, transparent 22%, rgba(255,255,255,.5) 50%, transparent 78%);
    transform:translateX(-150%);
    animation:pilierReflet 2.8s ease-in-out 1.15s 3;
  }
  .page-head .svc-icon svg{position:relative; z-index:3;}
  /* Les deux traces portent pathLength="100" dans le SVG : la longueur reelle du
     chemin est donc normalisee, et ces deux regles valent pour les quatre glyphes
     des pages piliers sans mesurer quoi que ce soit. */
  .page-head .svc-icon .trace-1{
    stroke-dasharray:100; stroke-dashoffset:100;
    animation:pilierTrace 1.05s cubic-bezier(.65,.05,.36,1) .5s forwards;
  }
  .page-head .svc-icon .trace-2{
    stroke-dasharray:100; stroke-dashoffset:100;
    animation:pilierTrace .55s ease-out 1.4s forwards;
  }
  .page-head .svc-icon:hover{
    transform:rotate(-8deg) scale(1.08);
    box-shadow:0 14px 30px -10px rgba(235,98,38,.75);
  }
  @keyframes pilierPose{
    0%{opacity:0; transform:translateY(16px) scale(.84) rotate(-12deg);}
    55%{opacity:1;}
    100%{opacity:1; transform:translateY(0) scale(1) rotate(0deg);}
  }
  @keyframes pilierTrace{to{stroke-dashoffset:0;}}
  @keyframes pilierReflet{
    0%{transform:translateX(-150%);}
    50%,100%{transform:translateX(150%);}
  }
  /* ---------- NAVIGATION ----------
     Aucun menu deroulant dans l'en-tete : il exigerait du JavaScript et le motif
     ARIA complet du bouton de menu, pour une portee que le pied de page et la
     barre laterale couvrent deja. Le menu burger, lui, est la navigation
     principale sur telephone : il doit exposer les pages piliers. */
  /* Sous-groupe : meme fond opaque et meme rayon que les entrees principales,
     pour rester lisible sur le panneau translucide. La hierarchie est portee par
     le retrait, le filet orange et une taille de texte inferieure, pas par un gris
     plus clair, qui aurait fait chuter le contraste. */
  .mobile-menu-sub{
    display:flex; flex-direction:column; gap:6px;
    margin:6px 0 4px 16px; padding-left:14px;
    border-left:2px solid var(--orange-300);
  }
  .mobile-menu-sub a{
    display:flex; align-items:center; width:100%; min-height:44px;
    font-family:var(--font-head); font-weight:600; font-size:.95rem;
    color:#111111; background:var(--bg); padding:10px 16px; border-radius:12px;
    box-shadow:0 3px 10px -5px rgba(0,0,0,.28);
    transition:transform .18s ease;
  }
  .mobile-menu-sub a:hover{transform:translateX(-3px);}
  .mobile-menu-sub a[aria-current="page"]{
    color:#fff; background:var(--anthracite); box-shadow:none;
  }
  /* ---------- ACCORDEON DU MENU BURGER ----------
     <details> natif : ouverture au clavier, etat expose aux technologies
     d'assistance, et aucun JavaScript a charger ni a autoriser.
     La hauteur est animee par ::details-content, avec interpolate-size porte par
     l'accordeon seul et non par la racine, pour ne rien changer ailleurs.
     @supports : sans le support, l'accordeon s'ouvre d'un coup, jamais casse. */
  .mobile-acc{width:100%;}
  .mobile-acc > summary{
    display:flex; align-items:center; justify-content:space-between; gap:12px;
    width:100%; min-height:56px; padding:14px 20px;
    font-family:var(--font-head); font-weight:700; font-size:1.02rem;
    color:#111111; background:var(--bg); border-radius:14px;
    box-shadow:0 6px 18px -8px rgba(0,0,0,.34);
    cursor:pointer; list-style:none;
  }
  .mobile-acc > summary::-webkit-details-marker{display:none;}
  .mobile-acc > summary::marker{content:"";}
  .mobile-acc > summary:focus-visible{outline:3px solid var(--orange-700); outline-offset:3px;}
  .mobile-acc-chevron{
    width:9px; height:9px; flex:0 0 auto;
    border-right:2px solid var(--orange-700); border-bottom:2px solid var(--orange-700);
    transform:rotate(45deg) translateY(-2px);
    transition:transform .32s cubic-bezier(.22,.9,.32,1);
  }
  .mobile-acc[open] > summary .mobile-acc-chevron{transform:rotate(-135deg) translateY(-2px);}

  @supports (interpolate-size:allow-keywords){
    .mobile-acc{interpolate-size:allow-keywords;}
    .mobile-acc::details-content{
      block-size:0; overflow:hidden; opacity:0;
      transition:block-size .34s cubic-bezier(.22,.9,.32,1), opacity .26s ease,
                 content-visibility .34s allow-discrete;
      content-visibility:hidden;
    }
    .mobile-acc[open]::details-content{
      block-size:auto; opacity:1; content-visibility:visible;
    }
    @media (prefers-reduced-motion:reduce){
      .mobile-acc::details-content{transition:none;}
    }
  }

  /* Sous-groupe du pied de page : il ne doit surtout pas heriter des cartes
     blanches du menu mobile, illisibles sur l'anthracite. Meme grammaire que les
     liens voisins, avec retrait et filet orange pour marquer la dependance. */
  .footer-villes{
    display:flex; flex-direction:column;
    margin:2px 0 4px 2px; padding-left:12px;
    border-left:2px solid rgba(235,98,38,.55);
  }
  .footer-villes a{
    display:flex; align-items:center; min-height:44px; padding:0;
    font-size:.92rem; color:rgba(255,255,255,.78);
    transition:color .2s ease, transform .2s ease;
  }
  .footer-villes a:hover{color:var(--orange-300); transform:translateX(3px);}
  .footer-villes a[aria-current="page"]{color:var(--orange-300); font-weight:700;}

  /* Page en cours dans la barre laterale : ancree en anthracite, non cliquable
     a l'oeil mais conservee comme lien pour rester un repere lisible. */
  .pillar-nav a[aria-current="page"]{
    background:var(--anthracite); border-color:var(--anthracite); color:#fff;
  }
  .pillar-nav a[aria-current="page"]:hover{transform:none; color:#fff;}

  /* ---------- VARIABLE GRADUEE PAR PILIER ----------
     Reprise du principe deja present sur les quatre cartes de service : le
     second point du degrade anthracite s'assombrit d'un pilier au suivant, dans
     l'ordre canonique. L'ecart est imperceptible cote a cote, mais il empeche
     les quatre pages d'etre quatre fois la meme page, sans jamais introduire de
     hierarchie entre les piliers. */
  .zone-section.pilier-finance{background:linear-gradient(135deg, var(--anthracite), #19212C);}
  .zone-section.pilier-web{background:linear-gradient(135deg, var(--anthracite), #18202A);}
  .zone-section.pilier-branding{background:linear-gradient(135deg, var(--anthracite), #171E29);}
  .zone-section.pilier-social{background:linear-gradient(135deg, var(--anthracite), #161D27);}

  /* ---------- ANIMATIONS D'ACCENT ----------
     Regle que je m'impose ici : rien ne se cache et rien ne s'efface. Le texte
     est lisible a pleine opacite des la premiere image, meme pour un visiteur
     qui ne defilera jamais. Ne bougent que les elements d'accent de la charte,
     les filets orange et les numeros.
     Tout est en CSS, par animation-timeline : aucun JavaScript, donc rien a
     executer ni a autoriser dans une politique de securite. Seuls scaleX,
     translateY et scale sont animes, donc aucun recalcul de mise en page.
     Portee limitee aux classes .filet et .filet-num, qui n'existent que sur les
     pages ou elles sont posees. */

  /* Survol : la ligne avance et sa puce grossit. Fonctionne partout, sans
     dependre du support des animations liees au defilement. */
  .local-index.filet li{transition:transform .3s ease;}
  .local-index.filet li:hover{transform:translateX(5px);}
  .local-index.filet dfn::before{transition:transform .3s ease;}
  .local-index.filet li:hover dfn::before{transform:scale(1.7);}

  @supports (animation-timeline:view()){
    @media (prefers-reduced-motion:no-preference){
      /* Les filets se tracent de gauche a droite en cascade. Le filet declare
         devient transparent et un calque le remplace, uniquement ici. */
      .local-index.filet li{position:relative; border-bottom-color:transparent;}
      .local-index.filet li::after{
        content:""; position:absolute; bottom:-1px; left:0; right:0; height:1px;
        background:var(--orange-200); transform:scaleX(0); transform-origin:0 50%;
        animation:accentTrace .9s linear both;
        animation-timeline:view(); animation-range:entry 6% cover 30%;
      }
      .local-index.filet li:nth-child(2)::after{animation-range:entry 6% cover 38%;}
      .local-index.filet li:nth-child(3)::after{animation-range:entry 6% cover 46%;}
      .local-index.filet li:nth-child(4)::after{animation-range:entry 6% cover 54%;}

      /* Les numeros se levent, un par un. Le titre et le texte ne bougent pas. */
      .filet-num .engagement-num{
        animation:accentLeve .7s linear both;
        animation-timeline:view(); animation-range:entry 8% cover 30%;
      }
      .filet-num > *:nth-child(2) .engagement-num{animation-range:entry 8% cover 40%;}
      .filet-num > *:nth-child(3) .engagement-num{animation-range:entry 8% cover 50%;}

      /* Le mot accentue du titre se souligne une fois, apres le trace de l'icone.
         Le filet est un fond degrade et non un pseudo-element en absolu : un mot
         accentue qui passe a la ligne est decoupe en plusieurs fragments, et un
         pseudo-element en absolu ne sait pas les suivre. C'etait le cas de
         « pilotage d'entreprise » sur la page Finance, ou le soulignement ne
         s'affichait pas. Avec box-decoration-break:clone, chaque fragment recoit
         son propre filet et les deux se tracent ensemble. */
      .page-head .svc-icon ~ h1 .accent{
        background-image:linear-gradient(var(--orange-300), var(--orange-300));
        background-repeat:no-repeat; background-position:0 100%;
        background-size:0% 3px; padding-bottom:3px;
        -webkit-box-decoration-break:clone; box-decoration-break:clone;
        animation:accentSouligne .9s cubic-bezier(.65,.05,.36,1) 2s forwards;
      }
    }
  }
  @keyframes accentTrace{to{transform:scaleX(1);}}
  @keyframes accentSouligne{to{background-size:100% 3px;}}
  @keyframes accentLeve{
    from{transform:translateY(12px); opacity:.35;}
    to{transform:none; opacity:1;}
  }

  /* Mouvement reduit : etat final affiche d'emblee, courbe entierement tracee. */
  @media (prefers-reduced-motion: reduce){
    .page-head .svc-icon{animation:none;}
    .page-head .svc-icon::after{display:none;}
    .page-head .svc-icon .trace-1,
    .page-head .svc-icon .trace-2{animation:none; stroke-dashoffset:0;}
  }
  .page-head h1{font-size:clamp(2.1rem, 4.4vw, 2.9rem); margin:16px 0 22px; line-height:1.1; letter-spacing:-.02em;}
  .page-head .accent{color:var(--orange-500);}
  .page-intro{color:var(--text-soft); font-size:1.12rem; line-height:1.65;}

  /* Grille de cartes */
  .services-cards{
    display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:24px;
    max-width:960px; margin:0 auto;
  }
  .svc-card{
    display:flex; flex-direction:column;
    background:var(--surface); border:1px solid var(--gris-clair, #E5E7EB); border-radius:22px; overflow:hidden;
    box-shadow:0 1px 2px rgba(31,41,55,.06), 0 8px 24px -16px rgba(31,41,55,.25);
    transition:transform .4s cubic-bezier(.22,.9,.32,1), box-shadow .4s ease, border-color .4s ease;
  }
  .svc-card:hover{
    transform:translateY(-6px);
    box-shadow:0 2px 4px rgba(31,41,55,.08), 0 30px 60px -24px rgba(31,41,55,.4);
    border-color:var(--orange-200);
  }
  /* En-tête coloré : icône + titre sur la même ligne */
  .svc-head{
    display:flex; align-items:center; gap:16px; padding:24px 26px;
    position:relative; overflow:hidden;
    box-shadow:inset 0 -2px 0 rgba(235,98,38,.5);
    transition:box-shadow .4s ease;
  }
  .svc-card:hover .svc-head{box-shadow:inset 0 -2px 0 rgba(235,98,38,1);}
  /* Flux fluide horizontal : nappe orange discrète + fin voile lumineux */
  .svc-head::before{
    content:""; position:absolute; inset:-35% -14%; pointer-events:none;
    background:
      radial-gradient(40% 60% at 18% 45%, rgba(235,98,38,.20), transparent 70%),
      radial-gradient(36% 56% at 78% 60%, rgba(235,98,38,.12), transparent 72%);
    filter:blur(18px);
    animation:svcVapor 12s ease-in-out infinite;
  }
  .svc-head::after{
    content:""; position:absolute; top:-20%; bottom:-20%; left:-70%; width:55%; pointer-events:none;
    background:linear-gradient(100deg, transparent, rgba(255,255,255,.10), transparent);
    transform:skewX(-16deg); filter:blur(8px);
    animation:svcSheen 8s ease-in-out infinite;
  }
  .svc-card:hover .svc-head::before{animation-duration:8s;}
  .svc-card:hover .svc-head::after{animation-duration:4.5s;}
  @keyframes svcVapor{
    0%   {transform:translateX(-7%) translateY(0);}
    50%  {transform:translateX(7%) translateY(-3%);}
    100% {transform:translateX(-7%) translateY(0);}
  }
  @keyframes svcSheen{
    0%      {left:-70%;}
    55%     {left:125%;}
    100%    {left:125%;}
  }
  @media (prefers-reduced-motion: reduce){
    .svc-cta-arrow,
    .svc-head::before, .svc-head::after,
    .zone-pulse::before, .zone-pulse::after,
    .footer-social a::after,
    .header-actions .btn-primary::after, .btn::after{animation:none;}
  }
  .svc-icon{
    flex:0 0 auto; width:54px; height:54px; border-radius:15px;
    display:flex; align-items:center; justify-content:center;
    background:var(--orange-500); color:#fff;
    box-shadow:0 8px 20px -8px rgba(235,98,38,.6);
    transition:transform .35s cubic-bezier(.34,1.56,.64,1);
    position:relative; z-index:1;
  }
  .svc-card:hover .svc-icon{transform:rotate(-8deg) scale(1.08);}
  .svc-head h2, .svc-head h3{font-size:1.3rem; letter-spacing:-.01em; color:var(--bg); margin:0; position:relative; z-index:1;}
  /* En-têtes anthracite (charte : contraste premium) avec légère nuance par service */
  /* Les 4 en-tetes partent tous de l'anthracite de la charte (#1F2937).
     Seule la profondeur d'arrivee varie, et chaque arrivee est un assombrissement
     pur de cette meme couleur : aucune teinte hors palette. */
  .svc-finance .svc-head{background:linear-gradient(135deg, var(--anthracite), #19212C);}
  .svc-web .svc-head{background:linear-gradient(135deg, var(--anthracite), #18202A);}
  .svc-branding .svc-head{background:linear-gradient(135deg, var(--anthracite), #171E29);}
  .svc-social .svc-head{background:linear-gradient(135deg, var(--anthracite), #161D27);}
  /* Corps de carte */
  .svc-body{flex:1 1 auto; display:flex; flex-direction:column; padding:24px 26px 28px; background:#F4F4F5; border-top:1px solid var(--orange-100);}
  .svc-body > p{color:var(--text-soft); font-size:.98rem; line-height:1.55; margin-bottom:20px;}
  .svc-list{list-style:none; display:flex; flex-direction:column; gap:11px;}
  .svc-list li{
    position:relative; padding-left:28px; font-size:.92rem; color:var(--text-main); line-height:1.4;
  }
  .svc-list li::before{
    content:""; position:absolute; left:0; top:1px; width:17px; height:17px; border-radius:50%;
    background:var(--orange-500);
    background-image:var(--check);
    background-repeat:no-repeat; background-position:center; background-size:11px;
    transform:scale(.85); opacity:.9;
    transition:transform .3s cubic-bezier(.34,1.56,.64,1), opacity .3s ease;
  }
  .svc-card:hover .svc-list li::before{transform:scale(1); opacity:1;}

  /* CTA contextuel en pied de carte (sortie de conversion par levier) */
  .svc-cta{
    margin-top:auto; padding-top:20px; align-self:flex-start;
    display:inline-flex; align-items:center; gap:8px; min-height:44px;
    font-family:'Arimo',sans-serif; font-weight:700; font-size:.95rem;
    color:var(--orange-700); text-decoration:none;
  }
  .svc-cta:hover{color:var(--orange-800);}
  .svc-cta-arrow{transition:transform .25s ease;}
  .svc-cta:hover .svc-cta-arrow{transform:translateX(4px);}

  /* Numéro de téléphone sous le bouton du bloc contact */
  .cta-phone{
    margin-top:16px; font-size:.95rem; color:var(--text-soft);
  }
  .cta-phone a{
    display:inline-flex; align-items:center; min-height:44px;
    color:var(--orange-700); font-weight:700; text-decoration:none;
  }
  .cta-phone a:hover{color:var(--orange-800); text-decoration:underline;}
  .service-cta .cta-phone{color:rgba(255,255,255,.82);}
  .service-cta .cta-phone a{color:#fff;}

  /* Méthode en étapes */
  .method{max-width:960px; margin:var(--space-block) auto 0;}
  .method-head{max-width:640px; margin:0 auto 44px; text-align:center;}
  .method-head h2{font-size:var(--h-section); margin:14px 0 16px; letter-spacing:-.01em;}
  .method-head .accent{color:var(--orange-500);}
  .method-head p{color:var(--text-soft); font-size:1.02rem; line-height:1.6;}
  /* Frise reliee : le fil orange materialise la progression d'une etape a l'autre.
     Plus de cartes a filet : l'orange redevient un accent, conformement a la charte. */
  .method-steps{
    list-style:none; display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:20px;
  }
  .method-steps li{position:relative; padding:0 8px; text-align:center;}
  .method-steps li::after{
    content:""; position:absolute; z-index:0; top:18px; height:2px;
    left:calc(50% + 27px); width:calc(100% - 34px);
    background:linear-gradient(90deg, var(--orange-300), var(--orange-200));
  }
  .method-steps li:last-child::after{content:none;}
  .method-steps li:hover::after{background:linear-gradient(90deg, var(--orange-400), var(--orange-300));}
  .step-num{
    position:relative; z-index:1;
    display:flex; align-items:center; justify-content:center;
    width:38px; height:38px; border-radius:50%; margin:0 auto 16px;
    box-shadow:0 0 0 6px var(--bg), 0 8px 18px -8px rgba(235,98,38,.55);
    transition:transform .35s cubic-bezier(.34,1.56,.64,1), box-shadow .35s ease;
    background:var(--orange-500); color:#fff; font-family:var(--font-head); font-weight:800; font-size:1.2rem;
  }
  .method-steps h3{font-size:1.08rem; margin-bottom:6px;}
  .method-steps li p{color:var(--text-soft); font-size:.9rem; line-height:1.45;}
  /* Le livrable de chaque etape : rend la promesse tangible.
     Meme motif que les puces des formules (libelle orange en capitales, valeur en dessous). */
  /* Le livrable n'est plus annonce par un mot repete quatre fois : la convention est
     posee une fois dans le chapeau, puis rappelee par un signal visuel (filet + icone). */
  .method-steps li p.step-livrable{
    margin-top:16px; padding-top:13px;
    border-top:1px solid var(--gris-clair, #E5E7EB);
    display:flex; align-items:flex-start; justify-content:center; gap:8px;
    font-size:.85rem; line-height:1.4; font-weight:600; color:var(--text-main);
  }
  .step-livrable-icon{
    flex:0 0 auto; width:15px; height:15px; margin-top:2px; color:var(--orange-700);
    transition:transform .35s cubic-bezier(.34,1.56,.64,1);
  }
  .method-steps li:hover .step-livrable-icon{transform:scale(1.12);}
  .method-steps li:hover .step-livrable{border-top-color:var(--orange-200);}
  /* Reservee aux lecteurs d'ecran : conserve le lien semantique etape -> livrable */
  .sr-only{
    position:absolute; width:1px; height:1px; padding:0; margin:-1px;
    overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0;
  }

  /* CTA final */
  .service-cta{
    max-width:960px; margin:var(--space-block) auto 0; text-align:center;
    background:var(--anthracite); color:#fff; padding:56px 40px; border-radius:28px;
  }
  .service-cta h2{color:#fff; font-size:var(--h-section); margin-bottom:12px; letter-spacing:-.01em;}
  .service-cta p{color:rgba(255,255,255,.82); margin-bottom:28px; font-size:1.05rem;}

  /* ---------- ACCOMPAGNEMENT MENSUEL (abonnements) ---------- */
  .plans{max-width:960px; margin:var(--space-block) auto 0; background:var(--anthracite); border-radius:28px; padding:56px 40px;}
  .plans-head{max-width:640px; margin:0 auto 44px; text-align:center;}
  .plans-head .eyebrow{background:rgba(235,98,38,.16); color:var(--orange-300); padding:6px 14px; border-radius:999px;}
  .plans-head h2{color:#fff; font-size:var(--h-section); margin:14px 0 16px; letter-spacing:-.01em;}
  .plans-head .accent{color:var(--orange-400);}
  .plans-head p{color:rgba(255,255,255,.8); font-size:1.02rem; line-height:1.6;}
  .plans-grid{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:20px;}
  .plan{
    background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.14); border-radius:20px;
    padding:30px 28px 32px;
    transition:transform .4s cubic-bezier(.22,.9,.32,1), background .4s ease, border-color .4s ease;
  }
  .plan:hover{transform:translateY(-5px); background:rgba(255,255,255,.1); border-color:var(--orange-400);}
  .plan-head{display:flex; align-items:center; gap:13px; margin-bottom:16px;}
  .plan-icon{
    flex:0 0 auto; width:42px; height:42px; border-radius:13px;
    display:flex; align-items:center; justify-content:center;
    background:var(--orange-500); color:#fff; box-shadow:0 8px 18px -8px rgba(235,98,38,.7);
    transition:transform .35s cubic-bezier(.34,1.56,.64,1);
  }
  .plan:hover .plan-icon{transform:rotate(-8deg) scale(1.08);}
  .plan h3{color:var(--bg); font-size:1.15rem; margin:0; letter-spacing:-.01em;}
  .plan-claim{color:rgba(255,255,255,.78); font-size:.94rem; line-height:1.5; margin-bottom:18px;}
  .plan-list{list-style:none; display:flex; flex-direction:column; gap:15px;}
  .plan-list li{position:relative; padding-left:28px;}
  /* Le pilier en libelle, la promesse en dessous : les 4 activites se lisent d'un coup d'oeil */
  .plan-list li strong{
    display:block; margin-bottom:2px; color:var(--orange-300);
    font-family:var(--font-head); font-weight:700; font-size:.79rem;
    letter-spacing:.06em; text-transform:uppercase;
  }
  .plan-list li span{display:block; font-size:.91rem; line-height:1.45; color:rgba(255,255,255,.9);}
  .plan-list li::before{
    content:""; position:absolute; left:0; top:0; width:16px; height:16px; border-radius:50%;
    background:var(--orange-500);
    background-image:var(--check);
    background-repeat:no-repeat; background-position:center; background-size:10px;
    transform:scale(.85); opacity:.9;
    transition:transform .3s cubic-bezier(.34,1.56,.64,1), opacity .3s ease;
  }
  .plan:hover .plan-list li::before{transform:scale(1); opacity:1;}
  /* Formules : rail comparatif, volontairement different des sous-cartes
     de la zone d'intervention de l'accueil qui reutilisent .plan. */
  .formulas{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr);}
  .formula{padding-right:44px;}
  .formula-plus{padding-right:0; padding-left:44px; border-left:1px solid rgba(255,255,255,.16);}
  .formula-rank{
    font-family:var(--font-head); font-weight:800; font-size:1.45rem;
    color:#fff; letter-spacing:-.01em; margin-bottom:0;
  }
  .formula-plus .formula-rank{color:var(--orange-400);}
  .formula-rank::after{
    content:""; display:block; width:38px; height:3px; border-radius:2px;
    background:var(--orange-500); margin:13px 0 16px;
  }
  .formula-claim{color:rgba(255,255,255,.82); font-size:.98rem; line-height:1.6; margin-bottom:24px;}
  .formula-list{list-style:none; display:flex; flex-direction:column; gap:15px;}
  .formula-list li{display:grid; gap:3px;}
  .formula-list strong{
    font-family:var(--font-head); font-weight:700; font-size:.85rem;
    color:var(--orange-300); letter-spacing:.01em;
  }
  .formula-list span{color:rgba(255,255,255,.78); font-size:.92rem; line-height:1.5;}

  .plans-note{margin:32px auto 0; max-width:680px; text-align:center; color:rgba(255,255,255,.72); font-size:.94rem; line-height:1.6;}
  /* Passerelle depuis les 4 cartes : signale l'offre recurrente sans hierarchiser les services */
  .plans-bridge{max-width:960px; margin:26px auto 0; text-align:center; color:var(--text-soft); font-size:.98rem; line-height:1.6;}
  .plans-bridge a{color:var(--orange-700); font-weight:700; border-bottom:1px solid var(--orange-200); transition:color .25s ease, border-color .25s ease;}
  .plans-bridge a:hover{color:var(--orange-800); border-color:var(--orange-500);}
  /* Domaines couverts : lecture immediate du perimetre */
  /* Domaines couverts : information, pas action. Ces libelles etaient en pastilles
     arrondies avec bordure, graisse 700 et voile lumineux anime, soit exactement la
     signature des CTA du site : ils paraissaient cliquables sans l'etre, et cohabitaient
     sur la meme page avec la barre d'ancres, elle bel et bien cliquable.
     Nouvelle forme : icone + libelle sur une seule ligne, separes par un filet fin.
     Aucun fond, aucune bordure, aucun rayon, aucune animation. */
  .plans-domains{
    display:flex; flex-wrap:wrap; justify-content:center; align-items:center;
    gap:6px 0; margin-bottom:14px;
  }
  .plan-domain{
    display:inline-flex; align-items:center; gap:10px; padding:4px 22px;
    color:var(--bg); font-family:var(--font-head); font-weight:600;
    font-size:.92rem; letter-spacing:-.005em;
  }
  .plan-domain + .plan-domain{box-shadow:inset 1px 0 0 rgba(255,255,255,.22);}
  .plan-domain svg{width:17px; height:17px; flex:0 0 auto; color:var(--orange-400);}
  .plans-domains-note{text-align:center; color:rgba(255,255,255,.62); font-size:.86rem; margin:0 0 32px;}
  .plans-note strong{color:#fff;}
  @media (max-width:55em){ .plans-grid{grid-template-columns:minmax(0,1fr); gap:14px;} }

  @media (max-width:47.5em){
    .page-head{margin-bottom:48px;}
    .page-intro{font-size:1rem;}
    .services-cards{grid-template-columns:minmax(0,1fr); gap:18px;}
    .svc-head{padding:20px 22px;}
    .svc-body{padding:22px 22px 24px;}
    /* Sur mobile la frise bascule a la verticale */
    .method-steps{grid-template-columns:minmax(0,1fr); gap:28px;}
    .method-steps li{text-align:left; padding:0 0 0 58px;}
    .method-steps li::after{
      top:44px; bottom:-28px; left:18px; width:2px; height:auto;
      background:linear-gradient(180deg, var(--orange-300), var(--orange-200));
    }
    .step-num{position:absolute; left:0; top:0; margin:0;}
    .method-steps li p.step-livrable{justify-content:flex-start;}
    .service-cta{margin-top:56px; padding:40px 24px; border-radius:22px;}
    .plans{padding:40px 24px; border-radius:22px;}
    .plans-head{margin-bottom:30px;}
    .plans-note{margin-top:24px; font-size:.88rem;}
    .plan{padding:24px 20px 26px;}
    .plans-domains{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px 8px; justify-items:center;}
    .plan-domain{font-size:.85rem; padding:0; gap:8px;}
    .plan-domain + .plan-domain{box-shadow:none;}
    .plans-domains-note{margin-bottom:24px;}
    .plans-bridge{font-size:.92rem;}
  }
  .brand{display:flex; align-items:center; gap:10px;}
  .brand-logo-swap{position:relative; display:inline-block; width:126px; height:58px; transition:width .35s ease, height .35s ease;}
  header.compact .brand-logo-swap{width:100px; height:46px;}
  .brand-logo-swap img{
    position:absolute; top:0; left:0; width:126px; height:58px; max-width:none; transition:opacity .4s ease, width .35s ease, height .35s ease;
  }
  header.compact .brand-logo-swap img{width:100px; height:46px;}
  .brand-logo-white{opacity:1;}
  .brand-logo-black{opacity:1;}
  .brand-logo-orange{opacity:0;}
  header.scrolled .brand-logo-white{opacity:0;}
  header.scrolled .brand-logo-black{opacity:0;}
  header.scrolled .brand-logo-orange{opacity:1;}

  nav.main-nav{display:flex; align-items:center; gap:8px; min-width:0;}
  nav.main-nav > ul{display:flex; align-items:center; gap:4px; min-width:0; flex-wrap:wrap;}
  .mobile-menu{display:none;}
  .menu-backdrop{display:none;}
  /* Verrou de defilement, menu mobile ouvert.
     La regle est portee par <html> : body{overflow:hidden} n'a aucun effet ici,
     car html porte deja overflow-x:hidden, ce qui coupe la propagation vers la fenetre.
     Le body passe en position fixe (seule methode fiable sur iOS Safari) et le JS
     memorise puis restitue la position de defilement. */
  html.menu-open{overflow:hidden;}
  html.menu-open body{position:fixed; left:0; right:0; width:100%; overflow:hidden;}
  nav.main-nav > ul > li > a{
    font-family:var(--font-head); font-weight:600; font-size:.92rem; color:#fff;
    padding:10px 16px; border-radius:999px; display:inline-flex; align-items:center; gap:6px;
    transition:background .3s ease, color .3s ease;
  }
  nav.main-nav > ul > li > a:hover{background:rgba(255,255,255,.16); color:#fff;}
  header.scrolled nav.main-nav > ul > li > a{color:var(--anthracite);}
  header.scrolled nav.main-nav > ul > li > a:hover{background:var(--orange-50); color:var(--orange-700);}

  .btn{
    font-family:var(--font-head); font-weight:700; font-size:.9rem; padding:12px 24px; border-radius:999px;
    display:inline-flex; align-items:center; justify-content:center; gap:8px;
    transition:transform .2s ease, box-shadow .2s ease, background .2s ease, color .2s ease;
    position:relative; overflow:hidden; isolation:isolate;
    /* Neutralisation des styles natifs : indispensable des qu'un CTA est un
       <button> et non un <a>, sinon la bordure en relief du navigateur
       apparait et le curseur ne devient pas une main. */
    -webkit-appearance:none; appearance:none;
    border:0; background:none; color:inherit; cursor:pointer;
    line-height:1.25; text-align:center; text-decoration:none;
  }
  /* Enfoncement au clic : le CTA repond au doigt comme a la souris. */
  .btn:active{transform:translateY(1px) scale(.99);}
  /* Mise en valeur commune a tous les CTA : le voile passe DERRIERE le libelle,
     les couleurs des boutons restent inchangees. */
  .btn::after{
    content:""; position:absolute; top:-25%; bottom:-25%; left:-70%; width:55%;
    pointer-events:none; z-index:-1;
    background:linear-gradient(100deg, transparent, rgba(255,255,255,.30), transparent);
    transform:skewX(-16deg); filter:blur(7px);
    animation:svcSheen 8s ease-in-out infinite;
  }
  .btn:hover::after{animation-duration:4.5s;}
  /* Boutons poses sur fond clair : le voile s'inverse pour rester perceptible */
  .btn-ghost::after{background:linear-gradient(100deg, transparent, rgba(31,41,55,.16), transparent);}
  .hero-content .btn-ghost::after{background:linear-gradient(100deg, transparent, rgba(255,255,255,.30), transparent);}
  .btn-primary{background:var(--orange-700); color:#fff; box-shadow:0 8px 20px -6px rgba(191,74,26,.5);}
  .btn-primary:hover{
    background:var(--orange-800); transform:translateY(-2px);
    box-shadow:0 14px 28px -8px rgba(191,74,26,.55);
  }
  .btn-primary:active{box-shadow:0 5px 14px -6px rgba(191,74,26,.5);}
  /* Anneau de focus contraste : un contour orange sur un bouton orange ne se
     voit pas. Double anneau, clair puis fonce, lisible sur tous les fonds. */
  .btn-primary:focus-visible{
    outline:none;
    box-shadow:0 0 0 3px #FAF9F7, 0 0 0 6px var(--anthracite), 0 8px 20px -6px rgba(191,74,26,.5);
  }
  .btn-ghost:focus-visible{outline:3px solid var(--orange-700); outline-offset:3px;}

  .header-actions .btn-primary{
    background:#fff; color:#111111; box-shadow:0 8px 20px -8px rgba(31,41,55,.25);
    transition:background .4s ease, color .4s ease, transform .2s ease, box-shadow .2s ease;
    position:relative; overflow:hidden; isolation:isolate;
  }
  .header-actions .btn-primary:hover{background:#fff; color:#111111; transform:translateY(-2px); box-shadow:0 14px 28px -10px rgba(31,41,55,.3);}
  /* Voile lumineux du CTA : meme mecanique que les en-tetes de cartes Services.
     La teinte du voile s'adapte a chaque version du bouton (blanc, anthracite, orange). */
  .header-actions .btn-primary::after{
    content:""; position:absolute; top:-25%; bottom:-25%; left:-70%; width:55%;
    pointer-events:none; z-index:-1;
    background:linear-gradient(100deg, transparent, rgba(31,41,55,.16), transparent);
    transform:skewX(-16deg); filter:blur(7px);
    animation:svcSheen 8s ease-in-out infinite;
  }
  .header-actions .btn-primary:hover::after{animation-duration:4.5s;}
  body.theme-light .header-actions .btn-primary::after,
  header.scrolled .header-actions .btn-primary::after{
    background:linear-gradient(100deg, transparent, rgba(255,255,255,.30), transparent);
  }
  header.scrolled .header-actions .btn-primary{background:var(--orange-700); color:#fff; box-shadow:0 8px 20px -6px rgba(191,74,26,0.5);}
  header.scrolled .header-actions .btn-primary:hover{background:var(--orange-800);}
  .btn-ghost{border:1.5px solid var(--anthracite); color:var(--anthracite);}
  .hero-content .btn-ghost{border-color:#fff; color:#fff;}
  .hero-content .btn-ghost:hover{background:rgba(255,255,255,.15); transform:translateY(-2px);}
  .btn-ghost:hover{background:var(--anthracite); color:#fff; transform:translateY(-2px);}

  .burger{display:none; background:none; border:none; cursor:pointer; padding:8px; position:relative; z-index:1002;}
  .burger span{display:block; width:24px; height:2px; background:#fff; margin:5px 0; transition:background .3s ease;}
  header.scrolled .burger span{background:var(--anthracite);}

  /* ---------- HERO ---------- */
  .hero{
    position:relative; overflow:hidden; min-height:100vh; display:flex; align-items:center;
    padding-top:110px; padding-bottom:70px;
  }
  .hero-photo{
    position:absolute; inset:0; width:100%; height:100%; object-fit:cover; object-position:20% 42%; z-index:0;
  }
  .hero-scrim{
    position:absolute; inset:0; z-index:1;
    background:linear-gradient(180deg, rgba(15,10,8,.42) 0%, rgba(15,10,8,.2) 30%, rgba(15,10,8,.28) 70%, rgba(15,10,8,.4) 100%);
  }
  .hero-divider-line{
    position:absolute; left:0; right:0; bottom:0; height:1px; z-index:3; pointer-events:none;
    background:rgba(31,41,55,.1);
  }
  .hero-center{
    position:relative; z-index:5;
    min-height:calc(100vh - 180px);
    display:flex; align-items:center; text-align:left;
    width:100%;
    /* bord gauche = aligne sur le bord du header (pilule 1320px).
       bord droit = l'encart prend 64% de l'espace disponible, la silhouette garde les 36% restants.
       Sa position depend du recadrage de la photo (cover 2400x1600) : max() couvre les deux cas.
       Le 2e terme du min() garantit un encart d'au moins 360px. */
    padding-left:max(16px, 50% - 660px);
    padding-right:min(
      calc(100% - 0.36 * max(16px, 50% - 660px) - 0.64 * max(50.4vw, 45.6vh + 20vw)),
      calc(100% - max(16px, 50% - 660px) - 360px));
  }
  .hero-content .eyebrow{background:rgba(255,255,255,.85); padding:6px 14px; border-radius:999px; backdrop-filter:blur(6px);}
  .hero-content h1{
    font-size:clamp(2.6rem, 4.6vw, 4.4rem);font-size:min(clamp(2.6rem, 4.6vw, 4.4rem), 15cqi); margin:0 0 18px; color:#fff; letter-spacing:-.01em; line-height:1.05;
    text-shadow:0 4px 24px rgba(0,0,0,.45);
  }
  .hero-content h1 em, .hero-content h1 .accent{font-style:normal; color:var(--orange-500);}
  .hero-subtitle{
    font-family:var(--font-body); font-weight:500; font-size:1.12rem; line-height:1.55; color:rgba(255,255,255,.94);
    margin:0 0 34px; text-shadow:0 2px 14px rgba(0,0,0,.35);
  }
  .hero-content{
    width:100%; container-type:inline-size; text-align:left; flex:0 0 auto; align-self:center; margin:0;
    background:rgba(20,15,13,.34);
    backdrop-filter:blur(22px) saturate(180%); -webkit-backdrop-filter:blur(22px) saturate(180%);
    border:1px solid rgba(255,255,255,.2);
    box-shadow:0 20px 50px -16px rgba(0,0,0,.35), inset 0 1px 0 rgba(255,255,255,.22);
    padding:clamp(30px, 2.4vw, 40px); border-radius:32px;
  }
  .hero-actions{display:flex; gap:14px; flex-wrap:wrap; margin-bottom:30px; justify-content:flex-start;}
  .hero-actions .btn{padding:14px 22px; white-space:nowrap;}
  /* Encart etroit (photo mise en avant) : CTA empiles pleine largeur, primaire en tete */
  @container (max-width:26.25em){
    .hero-actions{flex-direction:column; align-items:stretch; gap:12px;}
    .hero-actions .btn{width:100%; justify-content:center;}
  }
  .hero-zone{
    display:flex; flex-direction:column; gap:8px; width:100%; color:var(--anthracite);
    background:rgba(255,255,255,.96); backdrop-filter:blur(6px); padding:14px 18px; border-radius:18px;
    border:1px solid var(--orange-200); text-align:left; box-sizing:border-box;
  }
  .hero-zone-main{display:flex; align-items:center; gap:11px;}
  .hzl-icon{width:20px; height:20px; color:var(--orange-500); flex:0 0 auto;}
  .hero-zone-head{font-family:var(--font-head); font-weight:700; font-size:.95rem; color:var(--anthracite); letter-spacing:-.005em;}
  .hero-zone-head strong{color:var(--orange-700); font-weight:800;}
  .hero-zone-note{
    display:flex; align-items:flex-start; gap:8px;
    font-family:var(--font-body); font-weight:500; font-size:.76rem; color:var(--text-soft);
    padding-top:8px; border-top:1px solid var(--orange-100); line-height:1.35;
  }
  .hzl-pin{width:12px; height:12px; color:var(--orange-300); flex:0 0 auto; margin-top:1px;}

  /* ---------- SECTIONS GENERIC ---------- */
  section{padding:var(--space-section) 0;}
  .section-head{max-width:640px; margin:0 auto 60px; text-align:center;}
  .section-head h2{font-size:var(--h-section);}
  .section-head p{color:var(--text-soft); margin-top:16px; font-size:1.02rem;}

  /* ---------- SERVICES ---------- */
  /* Accueil : meme vocabulaire que les cartes de la page Services, en version compacte.
     Les regles .svc-* sont partagees, seules les dimensions changent ici. */
  .services-grid{display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:20px;}
  .services-grid .svc-head{gap:12px; padding:18px 20px;}
  .services-grid .svc-icon{width:44px; height:44px; border-radius:13px;}
  .services-grid .svc-head h3{font-size:1.02rem;}
  .services-grid .svc-body{padding:20px 20px 24px;}
  .services-grid .svc-body > p{font-size:.9rem; line-height:1.5; margin-bottom:0;}
  /* Encart de verre : regroupe les 4 expertises et le CTA pour signaler
     que l'ensemble renvoie vers la page Services. */

  #services::before{
    content:""; position:absolute; inset:0; pointer-events:none;
    background:
      radial-gradient(46% 42% at 14% 22%, rgba(235,98,38,.13), transparent 70%),
      radial-gradient(42% 46% at 88% 74%, rgba(31,41,55,.09), transparent 72%);
  }
  #services > .container{position:relative;}
  .expertise-panel{
    background:rgba(255,255,255,.5);
    backdrop-filter:blur(20px) saturate(170%); -webkit-backdrop-filter:blur(20px) saturate(170%);
    border:1px solid rgba(255,255,255,.75); border-radius:28px; padding:34px;
    box-shadow:0 1px 2px rgba(31,41,55,.05), 0 28px 64px -34px rgba(31,41,55,.4);
  }
  .section-cta{text-align:center; margin-top:32px;}
  .section-cta-note{color:var(--text-soft); font-size:.95rem; margin-bottom:18px;}
  /* Fil d'Ariane des pages internes */
  .breadcrumb{
    display:flex; align-items:center; gap:9px; margin-bottom:14px;
    font-family:var(--font-head); font-size:.86rem; color:var(--text-soft);
  }
  .breadcrumb a{display:inline-flex; align-items:center; min-height:44px; color:var(--orange-700); font-weight:700;}
  .breadcrumb a:hover{color:var(--orange-800); text-decoration:underline;}
  .breadcrumb span[aria-current]{color:var(--text-main); font-weight:700;}

  /* ---------- ZONE GEO ---------- */
  /* Meme grammaire que les autres blocs anthracite (.plans, .service-cta) :
     carte de 960px centree, rayon 28px, padding 56/40, textes en blanc translucide. */
  .zone-section{
    max-width:960px; margin:0 auto; background:var(--anthracite); color:#fff;
    border-radius:28px; padding:56px 40px;
  }
  /* Chapeau : strictement calque sur .plans-head (pastille, taille de titre, respirations). */
  .zone-section .section-head{max-width:640px; margin:0 auto 40px;}
  .zone-section .eyebrow{
    background:rgba(235,98,38,.16); color:var(--orange-300);
    padding:6px 14px; border-radius:999px; margin-bottom:0;
  }
  .zone-section .section-head h2{color:#fff; font-size:2rem; margin:14px 0 16px; letter-spacing:-.01em;}
  .zone-section .section-head .accent{color:var(--orange-400);}
  .zone-section .section-head p{color:rgba(255,255,255,.8); font-size:1.02rem; line-height:1.6; margin-top:0;}
  /* Bandeau de chiffres : composition verticale centree, l'icone coiffe la donnee.
     Trois valeurs numeriques homogenes, lues en une seconde. */
  /* Deux reperes plutot que trois : meme rythme a 2 colonnes que les cartes en dessous. */
  .zone-stats{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; margin-bottom:20px;}
  .zone-stat{
    display:flex; flex-direction:column; align-items:center; text-align:center; gap:6px;
    background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.14);
    border-radius:18px; padding:26px 18px 24px;
    transition:background .4s ease, border-color .4s ease, transform .4s cubic-bezier(.22,.9,.32,1);
  }
  .zone-stat:hover{background:rgba(255,255,255,.1); border-color:var(--orange-400); transform:translateY(-4px);}
  .zone-stat-icon{
    display:flex; align-items:center; justify-content:center; width:44px; height:44px;
    border-radius:50%; margin-bottom:6px; color:var(--orange-400);
    background:rgba(255,255,255,.08); border:1px solid rgba(255,255,255,.16);
    transition:transform .4s cubic-bezier(.34,1.56,.64,1), color .4s ease;
  }
  .zone-stat:hover .zone-stat-icon{transform:scale(1.1); color:var(--orange-300);}
  .zone-stat-icon svg{width:22px; height:22px;}
  .zone-stat strong{
    display:block; font-family:var(--font-head); font-size:1.75rem;
    color:#fff; letter-spacing:-.02em; line-height:1.1;
  }
  .zone-stat-label{display:block; font-size:.84rem; line-height:1.4; color:rgba(255,255,255,.7); max-width:190px;}
  /* Ondes concentriques sur la pastille distanciel : materialise la portee du travail a distance. */
  /* IMPORTANT : sans position:relative ici, le 'inset:0' des ondes se resout sur le bloc
     conteneur initial (la fenetre entiere) et le scale(1.95) cree un debordement horizontal. */
  .zone-pulse{position:relative;}
  .zone-pulse::before, .zone-pulse::after{
    content:""; position:absolute; inset:0; border-radius:inherit;
    border:2px solid var(--orange-400); opacity:0; pointer-events:none;
    animation:zoneWave 3.4s cubic-bezier(.22,.7,.35,1) infinite;
  }
  .zone-pulse::after{animation-delay:1.7s;}
  @keyframes zoneWave{
    0%{transform:scale(1); opacity:.5;}
    70%{opacity:0;}
    100%{transform:scale(1.95); opacity:0;}
  }
  /* Villes couvertes : sortie de bas de cadre vers les pages locales.
     Meme grammaire que les pastilles sociales du footer (999px, cible 44px,
     bordure blanche translucide qui passe a l'orange au survol).
     Ajouter une ville = une ligne <li>, aucun autre reglage. */
  .zone-cities{
    margin-top:26px; padding-top:24px;
    border-top:1px solid rgba(255,255,255,.14);
    display:flex; flex-wrap:wrap; align-items:center; gap:12px 16px;
  }
  .zone-cities-title{
    margin:0; font-family:var(--font-head); font-weight:700; font-size:.78rem;
    letter-spacing:.09em; text-transform:uppercase; color:var(--orange-300);
  }
  .zone-city-list{display:flex; flex-wrap:wrap; gap:10px; list-style:none; margin:0; padding:0;}
  .zone-city{
    display:inline-flex; align-items:center; gap:8px; min-height:44px; padding:0 16px;
    border-radius:999px; color:#fff;
    font-family:var(--font-head); font-weight:700; font-size:.85rem;
    background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.16);
    transition:background .3s ease, border-color .3s ease, transform .35s cubic-bezier(.34,1.56,.64,1), box-shadow .3s ease;
  }
  .zone-city svg{width:15px; height:15px; flex:0 0 auto; color:var(--orange-400); transition:color .3s ease;}
  .zone-city:hover{
    background:rgba(255,255,255,.12); border-color:var(--orange-400);
    transform:translateY(-3px); box-shadow:0 12px 24px -12px rgba(0,0,0,.55);
  }
  .zone-city:hover svg{color:var(--orange-300);}
  .zone-city:focus-visible{outline:2px solid var(--orange-300); outline-offset:3px;}
  @media (max-width:35em){ .zone-cities{flex-direction:column; align-items:flex-start; gap:14px;} }
  @media (max-width:47.5em){ .zone-stats{grid-template-columns:minmax(0,1fr); gap:10px;} }

  /* ---------- WHY / VALUES ---------- */

  /* ---------- CTA ---------- */

  /* ---------- REALISATIONS ---------- */
  .works{padding:90px 0 0;}
  .works-grid{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:22px;}
  .work{
    display:flex; flex-direction:column; background:var(--surface);
    border:1px solid var(--gris-clair, #E5E7EB); border-radius:22px; padding:28px 26px 26px;
    box-shadow:0 1px 2px rgba(31,41,55,.04), 0 18px 40px -30px rgba(31,41,55,.35);
    transition:transform .4s cubic-bezier(.22,.9,.32,1), box-shadow .4s ease, border-color .4s ease;
  }
  .work:hover{transform:translateY(-5px); border-color:var(--orange-300);
    box-shadow:0 1px 2px rgba(31,41,55,.05), 0 26px 52px -30px rgba(31,41,55,.45);}
  .work-tag{
    align-self:flex-start; font-family:var(--font-head); font-weight:700; font-size:.72rem;
    letter-spacing:.07em; text-transform:uppercase; color:var(--orange-700);
    background:var(--orange-50); border:1px solid var(--orange-100);
    padding:6px 12px; border-radius:999px; margin-bottom:16px;
  }
  .work h3{font-size:1.1rem; margin-bottom:10px; letter-spacing:-.01em;}
  .work > p{color:var(--text-soft); font-size:.92rem; line-height:1.55;}
  .work-result{
    margin-top:auto; padding-top:14px; border-top:1px solid var(--gris-clair, #E5E7EB);
    color:var(--text-main) !important; font-size:.9rem;
  }
  .work:hover .work-result{border-top-color:var(--orange-200);}
  @media (max-width:61.25em){ .works-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);} }
  @media (max-width:40em){ .works{padding-top:64px;} .works-grid{grid-template-columns:minmax(0,1fr);} }

  /* ---------- FOOTER ----------
     Bandeau anthracite pleine largeur : il clot la page et se distingue de la section
     CTA qui le precede (carte arrondie encastree). Present a l'identique sur toutes les pages. */
  footer{
    position:relative; overflow:hidden; margin-top:96px;
    background:var(--anthracite); color:rgba(255,255,255,.72);
    padding:52px 0 20px; font-size:.9rem;
  }
  /* Halos tres doux : donnent de la profondeur sans surface orange */
  footer::before{
    content:""; position:absolute; inset:0; pointer-events:none;
    background:
      radial-gradient(38% 62% at 6% 0%, rgba(235,98,38,.17), transparent 70%),
      radial-gradient(34% 58% at 94% 100%, rgba(235,98,38,.09), transparent 72%);
  }
  /* Filet signature : rappelle le fil orange de la frise methode */
  footer::after{
    content:""; position:absolute; top:0; left:0; right:0; height:3px;
    background:linear-gradient(90deg, var(--orange-700), var(--orange-500), var(--orange-300), transparent);
  }
  footer .container{position:relative; z-index:1;}
  .footer-top{display:grid; grid-template-columns:minmax(0,1.1fr) minmax(0,2fr); gap:48px; margin-bottom:30px;}
  .footer-brand{max-width:380px;}
  .footer-identity{display:flex; align-items:center; gap:14px; margin-bottom:18px; min-width:0;}
  .footer-identity > div{min-width:0;}
  /* Le mark est un carre 220x252 : on respecte son ratio et on ne le deforme pas. */
  .footer-logo{
    height:56px; width:auto; flex:0 0 auto; display:block;
    box-shadow:0 12px 26px -12px rgba(235,98,38,.7);
  }
  .footer-identity strong{
    display:block; font-family:var(--font-head); font-size:1.16rem;
    color:#fff; letter-spacing:-.01em;
  }
  .footer-identity span{display:block; font-size:.85rem; color:var(--orange-300); margin-top:2px;}
  .footer-pitch{line-height:1.6; margin-bottom:0; color:rgba(255,255,255,.7);}
  /* Reseaux sociaux : glyphes PLEINS (et non en contour) pour rester nets a petite taille,
     dans une pastille carree arrondie qui fait echo au mark de la marque. */
  /* Bande horizontale dediee : l'intitule a gauche, les reseaux a droite, sur toute
     la largeur du footer. Les pilules sont NOMMEES plutot qu'icones seules, un libelle
     visible augmentant nettement le taux de clic par rapport a un pictogramme isole. */
  .footer-connect{
    display:flex; align-items:center; justify-content:space-between;
    flex-wrap:wrap; gap:16px; padding:12px 0;
    border-top:1px solid rgba(255,255,255,.14);
  }
  .footer-connect-title{
    margin:0; font-family:var(--font-head); font-weight:700; font-size:.78rem;
    letter-spacing:.09em; text-transform:uppercase; color:var(--orange-300);
  }
  .footer-social{display:flex; flex-wrap:wrap; gap:10px;}
  .footer-social a{
    position:relative; overflow:hidden; isolation:isolate;
    display:inline-flex; align-items:center; gap:9px; min-height:48px; padding:0 18px;
    border-radius:999px; color:#fff;
    font-family:var(--font-head); font-weight:700; font-size:.85rem;
    background:rgba(255,255,255,.10); border:1px solid rgba(255,255,255,.22);
    transition:background .3s ease, border-color .3s ease, transform .35s cubic-bezier(.34,1.56,.64,1), box-shadow .3s ease;
  }
  .footer-social a:hover{
    background:var(--orange-700); border-color:var(--orange-500);
    transform:translateY(-3px); box-shadow:0 12px 24px -10px rgba(191,74,26,.85);
  }
  /* Meme voile lumineux que les CTA : attire l'oeil sans clignoter */
  .footer-social a::after{
    content:""; position:absolute; top:-30%; bottom:-30%; left:-70%; width:55%;
    pointer-events:none; z-index:-1;
    background:linear-gradient(100deg, transparent, rgba(255,255,255,.28), transparent);
    transform:skewX(-16deg); filter:blur(7px);
    animation:svcSheen 7s ease-in-out infinite;
  }
  .footer-social li:nth-child(2) a::after{animation-delay:1.2s;}
  .footer-social li:nth-child(3) a::after{animation-delay:2.4s;}
  .footer-social a:hover::after{animation-duration:4s;}
  .footer-social svg{width:18px; height:18px; display:block; flex:0 0 auto; shape-rendering:geometricPrecision;}
  .footer-cols{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:30px;}
  .footer-col h3{
    font-family:var(--font-head); font-size:.78rem; letter-spacing:.09em;
    text-transform:uppercase; color:var(--orange-300); margin-bottom:10px;
  }
  /* Enfants DIRECTS uniquement : les liens sociaux sont dans un <ul> imbrique
     et gardent leur propre style de pastille. */
  /* CIBLES TACTILES DU FOOTER : 44px minimum sur tout element cliquable
     (WCAG 2.1 AAA, Apple HIG 44pt, Material 48dp). La hauteur passe par min-height
     et non par du padding, pour ne pas gonfler le rythme vertical.
     Regle valable pour toute page presente et a venir : le footer est partage. */
  .footer-col > a{
    display:flex; align-items:center; min-height:44px; padding:0;
    color:rgba(255,255,255,.78);
  }
  /* Les lignes non cliquables gardent une hauteur naturelle : la contrainte de 44px
     ne vaut que pour les cibles interactives. */
  .footer-col > span{display:block; padding:5px 0; color:rgba(255,255,255,.78);}
  .footer-col > a{transition:color .2s ease, transform .2s ease;}
  .footer-col > a:hover{color:var(--orange-300); transform:translateX(3px);}
  .footer-bottom{
    min-width:0;
    padding-top:8px;
    display:flex; justify-content:space-between; align-items:center; flex-wrap:wrap; gap:12px;
    font-size:.83rem; color:rgba(255,255,255,.6);
  }
  .footer-legal{display:flex; gap:22px; flex-wrap:wrap;}
  .footer-legal a{
    display:inline-flex; align-items:center; min-height:44px;
    color:rgba(255,255,255,.74); transition:color .2s ease;
  }
  .footer-legal a:hover{color:var(--orange-300); text-decoration:underline;}
  /* Sous 380px, la gouttiere se resserre partout a la fois (conteneur, hero, sections). */
  @media (max-width:23.75em){ :root{--gutter:20px;} }
  @media (max-width:55em){
    .footer-top{grid-template-columns:minmax(0,1fr); gap:30px;}
    .footer-brand{max-width:none;}
  }
  /* Mobile : le footer est resserre sur toutes ses dimensions (paddings, interlignes,
     tailles) pour ne plus depasser la hauteur d'un ecran. */
  @media (max-width:40em){
    footer{margin-top:64px; padding:32px 0 14px; font-size:.86rem;}
    .footer-top{gap:22px; margin-bottom:20px;}
    .footer-identity{gap:12px; margin-bottom:14px;}
    .footer-logo{height:46px;}
    .footer-identity strong{font-size:1.05rem;}
    .footer-identity span{font-size:.8rem;}
    .footer-pitch{font-size:.86rem; line-height:1.55;}
    .footer-connect{padding:10px 0; gap:8px;}
    .footer-connect-title{font-size:.74rem;}
    .footer-social{gap:8px;}
    .footer-social a{padding:9px 14px; font-size:.8rem;}
    .footer-social svg{width:16px; height:16px;}
    .footer-cols{grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:12px 20px;}
    /* La colonne de contact prend toute la largeur : les deux pilules restent cote a cote */
    .footer-cols .footer-col:last-child{grid-column:1 / -1;}
    .footer-col h3{font-size:.72rem; margin-bottom:6px;}

    .footer-bottom{flex-direction:column; align-items:flex-start; padding-top:6px; gap:2px; font-size:.78rem;}
    .footer-legal{gap:16px;}
  }

  /* ---------- RESPONSIVE ---------- */
  @media (max-width:61.25em){
    .about-photo-col{--ph:222px;}
    .hero-photo{object-position:center 45%;}
    /* Le hero rejoint la gouttiere commune : il etait le seul bloc a 20px. */
    .hero-center{flex-direction:column; align-items:center; text-align:center; padding-left:var(--gutter); padding-right:var(--gutter); min-height:auto;}
    .hero-content{width:100%; max-width:560px; margin:0 auto; padding:32px 28px; text-align:center; align-self:stretch;}
    .hero-actions{justify-content:center; flex-wrap:wrap;}
    .hero-scrim{background:linear-gradient(180deg, rgba(20,14,12,.5) 0%, rgba(20,14,12,.35) 55%, rgba(20,14,12,.55) 100%);}
    .services-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
  }
  @media (max-width:47.5em){
    nav.main-nav{display:none;}
    .mobile-menu{
      position:fixed; top:108px; right:0; height:auto; max-height:calc(100vh - 132px); max-height:calc(100dvh - 132px); width:80%; max-width:340px;
      background:rgba(30,22,18,.14);
      backdrop-filter:blur(24px) saturate(200%); -webkit-backdrop-filter:blur(24px) saturate(200%);
      border:1px solid rgba(255,255,255,.22); border-radius:20px;
      box-shadow:0 8px 32px -10px rgba(0,0,0,.22), inset 0 1px 0 rgba(255,255,255,.28);
      display:flex; flex-direction:column; align-items:stretch; padding:0;
      /* Ouverture par descente + fondu. L'ancienne version se garait hors ecran a droite
         (translateX 100%+40px) : un element position:fixed hors cadre n'est PAS clippe par
         overflow-x:hidden et provoque un panoramique horizontal sur mobile. */
      transform:translateY(-14px) scale(.98); transform-origin:top right;
      opacity:0; visibility:hidden;
      transition:transform .4s cubic-bezier(.22,.9,.32,1), opacity .3s ease, visibility .4s,
                 background .4s ease, border-color .4s ease, box-shadow .4s ease;
      overflow:hidden; margin-right:20px; z-index:999;
    }
    /* Le flou reste sur le panneau, qui ne bouge pas. Seul ce calque defile, ce
       qui evite au navigateur de recalculer le backdrop-filter a chaque image. */
    .mobile-menu-scroll{
      flex:1 1 auto; min-height:0; width:100%;
      display:flex; flex-direction:column; align-items:flex-start; gap:12px; padding:24px;
      overflow-y:auto; overscroll-behavior:contain;
      -webkit-overflow-scrolling:touch;
      scrollbar-width:thin; scrollbar-color:rgba(255,255,255,.45) transparent;
    }
    .mobile-menu-scroll::-webkit-scrollbar{width:6px;}
    .mobile-menu-scroll::-webkit-scrollbar-thumb{
      background:rgba(255,255,255,.45); border-radius:3px;
    }
    .mobile-menu.open{transform:translateY(0) scale(1); opacity:1; visibility:visible;}
    /* Le panneau suit le header qui se compacte au defilement. */
    .mobile-menu.scrolled{top:96px; max-height:calc(100vh - 120px); max-height:calc(100dvh - 120px);}
    /* Voile : concentre l'attention sur le panneau et offre une surface de fermeture. */
    .menu-backdrop{
      display:block; position:fixed; inset:0; z-index:998;
      background:rgba(20,14,12,.5);
      backdrop-filter:blur(2px); -webkit-backdrop-filter:blur(2px);
      opacity:0; visibility:hidden; pointer-events:none;
      transition:opacity .35s ease, visibility .35s;
    }
    .menu-backdrop.open{opacity:1; visibility:visible; pointer-events:auto;}
    .mobile-menu-close-row{display:flex; justify-content:flex-end; align-items:center; width:100%; height:44px; margin-bottom:4px;}
    .mobile-nav-close{
      display:inline-flex; align-items:center; justify-content:center; cursor:pointer;
      width:44px; height:44px; color:#fff;
      background:var(--orange-500); border:none; border-radius:50%;
      box-shadow:0 6px 16px -6px rgba(235,98,38,.55);
      transition:background .2s ease, transform .15s ease, box-shadow .2s ease;
    }
    .mobile-nav-close:hover{background:var(--orange-600); box-shadow:0 8px 20px -6px rgba(235,98,38,.7);}
    .mobile-nav-close:active{transform:scale(.92);}
    .mobile-menu-scroll > a{
      display:flex; align-items:center; width:100%;
      font-family:var(--font-head); font-weight:700; font-size:1.08rem; letter-spacing:-.01em;
      color:#111111; background:var(--bg); padding:16px 18px; border-radius:16px;
      box-shadow:0 4px 14px -6px rgba(0,0,0,.3);
      transition:transform .18s ease, box-shadow .18s ease;
    }
    .mobile-menu-scroll > a::after{
      content:"→"; margin-left:auto; opacity:.45; color:var(--orange-700);
      transition:opacity .18s ease, transform .18s ease;
    }
    .mobile-menu-scroll > a:hover{transform:translateX(-3px) scale(1.02); box-shadow:0 8px 22px -6px rgba(0,0,0,.4);}
    .mobile-menu-scroll > a:hover::after{opacity:1; transform:translateX(3px);}
    /* Entree en cascade. On anime "translate" et non "transform" pour ne pas
       neutraliser le transform du survol une fois l'animation terminee. */
    @keyframes menuItemIn{from{opacity:0; translate:0 -9px;} to{opacity:1; translate:0 0;}}
    .mobile-menu.open > a,
    .mobile-menu.open .mobile-menu-cta{animation:menuItemIn .4s cubic-bezier(.22,.9,.32,1) both;}
    .mobile-menu.open > a:nth-of-type(1){animation-delay:.05s;}
    .mobile-menu.open > a:nth-of-type(2){animation-delay:.11s;}
    .mobile-menu.open > a:nth-of-type(3){animation-delay:.17s;}
    .mobile-menu.open .mobile-menu-cta{animation-delay:.23s;}
    /* CTA du menu : meme bouton que partout ailleurs, en pleine largeur */
    .mobile-menu-cta{
      width:100%; margin-top:14px; padding-top:16px;
      border-top:1px solid rgba(255,255,255,.3);
    }
    .mobile-menu.scrolled .mobile-menu-cta{border-top-color:rgba(31,41,55,.16);}
    /* Meme carte que les liens : contraste garanti quel que soit le fond derriere le verre. */
    .mobile-menu-tel{
      display:flex; align-items:center; justify-content:center; gap:9px;
      width:100%; min-height:44px; margin-top:10px;
      background:var(--bg); border-radius:16px; padding:12px 18px;
      font-family:var(--font-head); font-weight:700; font-size:.95rem;
      color:#111111; box-shadow:0 4px 14px -6px rgba(0,0,0,.3);
    }
    .mobile-menu.scrolled .mobile-menu-tel{box-shadow:0 4px 14px -6px rgba(31,41,55,.3);}
    .mobile-menu-tel svg{color:var(--orange-700); flex:0 0 auto;}
    .mobile-menu-cta .btn{width:100%; justify-content:center; padding:16px 18px; font-size:1rem;}
    /* Page courante : reperage visuel en complement de aria-current */
    .mobile-menu-scroll > a[aria-current="page"]{box-shadow:inset 3px 0 0 var(--orange-700), 0 4px 14px -6px rgba(0,0,0,.3);}
    .mobile-menu.scrolled > a[aria-current="page"]{box-shadow:inset 3px 0 0 var(--orange-700), 0 4px 14px -6px rgba(31,41,55,.3);}

    /* Thème clair : quand la page derrière est en blanc cassé (au scroll),
       le panneau reprend le liquid glass clair du header */
    .mobile-menu.scrolled{
      background:rgba(255,255,255,.32);
      backdrop-filter:blur(28px) saturate(200%); -webkit-backdrop-filter:blur(28px) saturate(200%);
      border-color:rgba(255,255,255,.5);
      box-shadow:0 8px 30px -10px rgba(31,41,55,.16), inset 0 1px 0 rgba(255,255,255,.55);
    }
    .mobile-menu.scrolled > a{
      background:var(--bg); color:#111111;
      box-shadow:0 4px 14px -6px rgba(31,41,55,.3);
    }
    .mobile-menu.scrolled > a::after{color:var(--orange-600);}
    .mobile-menu.scrolled > a:hover{transform:translateX(-3px) scale(1.02); box-shadow:0 8px 22px -6px rgba(31,41,55,.4);}
    /* Icône décorative masquée sur mobile : hero épuré, centré sur le message,
       et aucun risque de débordement sur les petits écrans */
    .hero-center{padding-top:0;}
    .header-actions{display:flex; margin-left:auto; margin-right:8px; flex:0 0 auto;}
    .header-actions .btn-primary{padding:9px 14px; font-size:.8rem; white-space:nowrap;}
    header.compact .header-actions .btn-primary{padding:7px 12px; font-size:.76rem;}
    .burger{display:block; flex:0 0 auto;}
    /* Header mobile : structure robuste, aucun chevauchement en position agrandie ou compacte */
    header .container{gap:8px;}
    .brand{flex:0 0 auto; min-width:0;}
    .brand-logo-swap{width:80px; height:37px;}
    .brand-logo-swap img{width:80px; height:37px;}
    header.compact .brand-logo-swap{width:69px; height:32px;}
    header.compact .brand-logo-swap img{width:69px; height:32px;}
    .hero-content{padding:26px 20px;}
    .hero-content h1{margin-bottom:14px;}
    .hero-subtitle{margin-bottom:26px;}
    .hero-actions{margin-bottom:24px; gap:10px;}
    /* Badge zone : proportionné au texte compact du cadre sur mobile */
    .hero-zone{padding:12px 14px; gap:7px; border-radius:14px;}
    .hero-zone-main{gap:9px;}
    .hzl-icon{width:17px; height:17px;}
    .hero-zone-head{font-size:.86rem;}
    .hero-zone-note{font-size:.72rem; gap:7px; padding-top:7px;}
    .hzl-pin{width:11px; height:11px;}
    .services-grid{grid-template-columns:minmax(0,1fr);}
    .expertise-panel{padding:18px; border-radius:22px;}
    .section-cta{margin-top:26px;}
    .breadcrumb{font-size:.8rem; margin-bottom:20px;}
    .zone-section{margin:0; padding:40px 22px; border-radius:22px;}
  }

  /* Barre d'ancres des 4 piliers (page Services) */
  .pillar-nav{
    display:flex; flex-wrap:wrap; justify-content:center; gap:10px;
    max-width:860px; margin:0 auto 56px;
  }
  .pillar-nav a{
    display:inline-flex; align-items:center; min-height:44px; padding:0 20px;
    background:#fff; border:1px solid var(--orange-100); border-radius:999px;
    font-family:var(--font-head); font-weight:700; font-size:.88rem;
    color:var(--orange-700); text-decoration:none;
    transition:border-color .25s ease, color .25s ease, transform .25s ease;
  }
  .pillar-nav a:hover{
    color:var(--orange-800); border-color:var(--orange-300); transform:translateY(-2px);
  }

  /* Cartes d'expertises cliquables (accueil) */
  .svc-card-link{position:relative;}
  .svc-card-link .svc-head h3 a{color:inherit; text-decoration:none;}
  .svc-card-link .svc-head h3 a::after{content:""; position:absolute; inset:0; z-index:3;}
  .svc-card-link:focus-within{outline:3px solid var(--orange-700); outline-offset:4px; border-radius:22px;}
  .svc-card-link .svc-head h3 a:focus-visible{outline:none;}

  /* Glyphes du bandeau de réassurance */
  .fact-icon{
    display:flex; align-items:center; justify-content:center;
    width:46px; height:46px; margin:0 auto 14px;
    border-radius:50%; background:var(--orange-50); color:var(--orange-500);
  }

  /* ---------- SORTIES DE CONVERSION INTERMEDIAIRES ----------
     Disposition horizontale : la phrase de contexte a gauche, le bouton a droite.
     Choix volontaire, elle n'ajoute qu'une seule ligne de hauteur, ce qui permet
     de placer un CTA sans alourdir la page. Le filet superieur signale une
     conclusion de bloc, pas un nouveau bloc. */
  .inline-cta{
    display:flex; flex-wrap:wrap; align-items:center; gap:16px 24px;
    margin-top:32px; padding-top:26px; border-top:1px solid var(--orange-100);
  }
  .inline-cta p{
    flex:1 1 300px; margin:0; color:var(--text-main);
    font-size:.98rem; line-height:1.55;
  }
  .inline-cta .btn{flex:0 0 auto;}
  .inline-cta-center{
    max-width:820px; margin-left:auto; margin-right:auto;
    justify-content:center; text-align:center;
  }
  .inline-cta-center p{flex:0 1 auto;}
  .inline-cta-dark{
    border-top-color:rgba(255,255,255,.2);
    justify-content:center; text-align:center;
  }
  .inline-cta-dark p{flex:0 1 auto; color:rgba(255,255,255,.86);}

  /* ---------- REVELATION AU DEFILEMENT ----------
     Filet de securite : la classe .reveal n'est posee que par le JS, apres
     verification du support. Sans JS, sans IntersectionObserver ou en mouvement
     reduit, aucun contenu n'est masque et tout s'affiche normalement.
     On anime uniquement opacity et translate, les deux seules proprietes
     composees par le GPU : aucun recalcul de mise en page, donc aucun
     decalage cumulatif (CLS) et aucun cout de rendu mesurable. */
  html.js-reveal .reveal{opacity:0; translate:0 18px;}
  html.js-reveal .reveal.is-visible{
    opacity:1; translate:0 0;
    transition:opacity .55s ease, translate .55s cubic-bezier(.22,.9,.32,1);
  }

  /* ---------- CHIFFRES ----------
     Raleway a des chiffres etroits et peu differencies : sur une suite longue
     comme un SIREN, un numero de TVA ou un telephone, la lecture devient
     penible. Arimo, deja dans la charte comme police de titres, a des chiffres
     larges et nettement distincts.
     Les valeurs numeriques passent donc en Arimo, avec des chiffres a chasse
     fixe pour que les colonnes s'alignent, et un leger interlettrage.
     Le corps de texte, lui, reste integralement en Raleway. */
  .num{
    font-family:var(--font-head);
    /* Graisse heritee, jamais imposee. */
    font-weight:inherit;
    /* Compensation optique. A graisse et taille nominales egales, Arimo pese
       plus lourd que Raleway : hauteur d'x superieure, chasse plus large et
       traits plus epais. On la reduit donc de 5 % et on l'aere davantage, ce
       qui ramene sa densite apparente au niveau du texte courant. La taille
       est en em pour suivre automatiquement le contexte ou elle est posee. */
    font-size:.95em;
    letter-spacing:.035em;
    font-variant-numeric:tabular-nums lining-nums;
    font-feature-settings:"tnum" 1, "lnum" 1;
  }
  .num a{font-family:inherit; font-weight:inherit; letter-spacing:inherit;}

  /* ---------- PAGE 404 ---------- */
  .erreur-liens{
    max-width:820px; margin:0 auto var(--space-block);
    display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:18px;
  }
  .erreur-carte{
    display:block; padding:26px 28px; background:#fff;
    border:1px solid var(--orange-100); border-radius:22px; text-decoration:none;
    transition:transform .25s ease, border-color .25s ease, box-shadow .25s ease;
  }
  .erreur-carte:hover{
    transform:translateY(-3px); border-color:var(--orange-300);
    box-shadow:0 18px 38px -26px rgba(31,41,55,.4);
  }
  .erreur-num{
    display:block; font-family:var(--font-head); font-weight:800; font-size:.8rem;
    letter-spacing:.06em; color:var(--orange-500); margin-bottom:10px;
  }
  .erreur-titre{
    display:block; font-family:var(--font-head); font-weight:700; font-size:1.1rem;
    color:var(--anthracite); margin-bottom:7px; letter-spacing:-.005em;
  }
  .erreur-texte{display:block; color:var(--text-soft); font-size:.93rem; line-height:1.55;}
  @media (max-width:40em){
    .erreur-liens{grid-template-columns:minmax(0,1fr); gap:14px;}
    .erreur-carte{padding:22px 22px;}
  }

  /* ---------- PAGE MENTIONS LEGALES ---------- */
  /* Panneaux depliables construits sur <details>/<summary>, donc sans une ligne
     de JavaScript : le clavier, les lecteurs d'ecran et la recherche dans la
     page fonctionnent nativement, et le contenu reste dans le document meme
     replie. Le titre reste un <h2>, la structure du document est preservee. */
  .legal{max-width:880px; margin:0 auto; display:flex; flex-direction:column; gap:22px;}

  /* Carte d'identite : les mentions que l'on vient reellement chercher sont
     donnees d'emblee, sur l'aplat anthracite du site. Le reste, qui releve du
     texte juridique, se replie dans le document numerote en dessous. */
  .legal-identite{
    display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:48px;
    background:var(--anthracite); border-radius:28px; padding:44px 40px;
    box-shadow:0 26px 52px -34px rgba(31,41,55,.55);
  }
  .legal-identite h2{color:#fff; font-size:1.1rem; margin-bottom:22px; letter-spacing:-.005em;}
  .identite-col{min-width:0;}
  .identite-list{display:flex; flex-direction:column; gap:15px;}
  .identite-list dt{
    font-family:var(--font-head); font-weight:700; font-size:.71rem;
    text-transform:uppercase; letter-spacing:.13em; color:var(--orange-300);
    margin-bottom:3px;
  }
  .identite-list dd{
    color:#fff; font-size:.96rem; line-height:1.5;
    font-variant-numeric:tabular-nums lining-nums;
  }
  .identite-list a{color:#fff; text-decoration:underline; text-underline-offset:3px;}
  .identite-list a:hover{color:var(--orange-300);}
  .identite-note{
    color:rgba(255,255,255,.7); font-size:.88rem; line-height:1.6; margin-top:20px;
  }

  /* Document : un seul objet continu, les panneaux separes par un filet.
     Sept cartes empilees fragmentaient la page, un document numerote se lit. */
  .legal-doc{
    background:#fff; border:1px solid var(--orange-100);
    border-radius:22px; overflow:hidden;
  }
  .legal-num{
    font-family:var(--font-head); font-weight:800; font-size:.8rem;
    letter-spacing:.06em; color:var(--orange-500); min-width:22px;
  }
  .legal-panel + .legal-panel{border-top:1px solid var(--orange-100);}
  .legal-panel[open]{background:#FFFCFA;}
  .legal-panel summary{
    display:grid; grid-template-columns:auto minmax(0,1fr) auto; align-items:center; gap:18px;
    min-height:68px; padding:16px 28px; cursor:pointer;
    list-style:none; transition:background .2s ease;
  }
  .legal-panel summary::-webkit-details-marker{display:none;}
  .legal-panel summary::marker{content:"";}
  .legal-panel summary:hover{background:var(--orange-50);}
  .legal-panel summary:focus-visible{outline:3px solid var(--orange-700); outline-offset:-3px;}
  .legal-panel summary h2{
    font-size:1.06rem; margin:0; letter-spacing:-.005em; line-height:1.35;
  }
  .legal-chevron{
    flex:0 0 auto; width:11px; height:11px; margin-right:4px;
    border-right:2px solid var(--orange-700); border-bottom:2px solid var(--orange-700);
    border-radius:0 0 2px 0;
    transform:rotate(45deg) translate(-2px,-2px);
    transition:transform .3s cubic-bezier(.22,.9,.32,1);
  }
  .legal-panel[open] .legal-chevron{transform:rotate(-135deg) translate(-2px,-2px);}
  .legal-panel-body{padding:2px 28px 30px 68px;}
  .legal-panel-body h3{
    font-size:1.02rem; margin:26px 0 10px; color:var(--anthracite); letter-spacing:-.005em;
  }
  .legal-panel-body h3:first-child{margin-top:6px;}
  .legal-panel-body p{color:var(--text-soft); line-height:1.75; margin-bottom:14px;}
  .legal-panel-body p:last-child{margin-bottom:0;}
  .legal-panel-body a{color:var(--orange-700); text-decoration:underline;}
  .legal-panel-body a:hover{color:var(--orange-800);}
  .legal-maj{font-size:.9rem; opacity:.85; margin-top:22px !important;}
  @media (max-width:40em){
    .legal-identite{grid-template-columns:minmax(0,1fr); gap:34px; padding:34px 24px; border-radius:22px;}
    .legal-panel summary{padding:14px 20px; gap:13px;}
    .legal-panel summary h2{font-size:.98rem;}
    .legal-panel-body{padding:2px 20px 26px 51px;}
  }

  /* ---------- PAGE CONTACT ----------
     Le formulaire occupe la colonne principale, les moyens de contact direct
     la colonne d'appoint. Chaque champ porte une etiquette visible : le seul
     texte d'aide dans un champ (placeholder) disparait des qu'on tape, ce qui
     penalise les lecteurs d'ecran comme les personnes distraites. */
  .contact-layout{
    max-width:960px; margin:0 auto; display:grid;
    grid-template-columns:minmax(0,1fr) 336px; gap:52px; align-items:start;
  }

  .contact-form-zone{
    min-width:0; background:#fff; border:1px solid var(--orange-100);
    border-radius:22px; padding:30px 30px 34px;
  }
  .contact-form-zone > h2{font-size:1.12rem; margin-bottom:8px; letter-spacing:-.005em;}
  .form-chapeau{color:var(--text-soft); font-size:.95rem; line-height:1.6; margin-bottom:28px;}
  .form-block{border:0; margin:0 0 34px;}
  .form-block:last-of-type{margin-bottom:26px;}
  .form-block legend{
    font-family:var(--font-head); font-weight:700; font-size:1.06rem;
    color:var(--anthracite); margin-bottom:16px; padding:0;
  }
  .form-row{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:18px;}
  .form-row + .form-row{margin-top:18px;}
  .field{display:flex; flex-direction:column; min-width:0;}
  .field label{
    font-family:var(--font-head); font-weight:600; font-size:.92rem;
    color:var(--text-main); margin-bottom:7px;
  }
  .req{color:var(--orange-700); font-weight:700;}
  .opt{color:var(--text-soft); font-weight:400; font-size:.86rem;}
  .field input, .field textarea{
    font-family:var(--font-body); font-size:1rem; color:var(--text-main);
    background:#fff; border:1px solid #DDD9D4; border-radius:14px;
    padding:13px 16px; min-height:50px; width:100%;
    transition:border-color .2s ease, box-shadow .2s ease;
  }
  .field textarea{min-height:auto; line-height:1.6; resize:vertical;}
  .field input:hover, .field textarea:hover{border-color:var(--orange-200);}
  .field input:focus, .field textarea:focus{
    outline:none; border-color:var(--orange-500);
    box-shadow:0 0 0 3px rgba(235,98,38,.16);
  }
  .field input:focus-visible, .field textarea:focus-visible{outline:none;}
  .form-hint{font-size:.88rem; color:var(--text-soft); margin-top:8px; line-height:1.5;}
  .form-block > .form-hint{margin:-8px 0 14px;}

  /* Cases a cocher : la case seule fait 20px, mais l'etiquette entiere est
     cliquable et la ligne fait 44px de haut, cible tactile conforme. */
  .choix{list-style:none; display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:10px;}
  .choix li{display:flex;}
  .choix input{position:absolute; opacity:0; width:1px; height:1px;}
  .choix label{
    flex:1; display:flex; align-items:center; gap:12px; min-height:52px;
    padding:0 18px; background:#fff; border:1px solid #DDD9D4; border-radius:14px;
    font-family:var(--font-head); font-weight:600; font-size:.94rem;
    color:var(--text-main); cursor:pointer;
    transition:border-color .2s ease, background .2s ease;
  }
  .choix label::before{
    content:""; flex:0 0 auto; width:21px; height:21px; border-radius:7px;
    border:1.5px solid #C9C4BE; background:#fff;
    background-repeat:no-repeat; background-position:center; background-size:12px;
    transition:background-color .2s ease, border-color .2s ease;
  }
  .choix label:hover{border-color:var(--orange-200);}
  .choix input:checked + label{border-color:var(--orange-500); background:var(--orange-50);}
  .choix input:checked + label::before{
    background-color:var(--orange-500); border-color:var(--orange-500);
    background-image:var(--check);
  }
  .choix input:focus-visible + label{outline:3px solid var(--orange-700); outline-offset:3px;}

  /* Rappel d'erreur du groupe de cases, reduit a une ligne. Il n'apparait
     qu'apres une tentative d'envoi infructueuse et porte role="alert", donc il
     est annonce aux lecteurs d'ecran. Le supprimer completement laisserait un
     bouton qui ne fait rien sans explication, ce qui contrevient au critere
     WCAG 3.3.1 sur l'identification des erreurs de saisie. */
  .form-erreur{
    display:flex; align-items:center; gap:8px;
    margin:-4px 0 14px;
    color:var(--orange-700); font-family:var(--font-head);
    font-weight:700; font-size:.88rem;
  }
  .form-erreur::before{
    content:"!"; flex:0 0 auto;
    display:flex; align-items:center; justify-content:center;
    width:17px; height:17px; border-radius:50%;
    background:var(--orange-700); color:#fff;
    font-family:var(--font-head); font-weight:800; font-size:.72rem;
  }
  .choix.en-erreur label{border-color:var(--orange-300);}

  .pot-de-miel{position:absolute; left:-9999px; width:1px; height:1px; overflow:hidden;}
  .form-rgpd{
    font-size:.88rem; color:var(--text-soft); line-height:1.6;
    border-top:1px solid var(--orange-100); padding-top:20px; margin-bottom:22px;
  }
  .form-rgpd a{color:var(--orange-700); text-decoration:underline;}
  .form-rgpd a:hover{color:var(--orange-800);}
  /* Le bouton d'envoi reprend la forme de tous les autres boutons du site :
     largeur au contenu, aligne a gauche. En pleine largeur, il etait le seul
     du site a s'etirer sur toute une colonne, ce qui le faisait lire comme un
     element d'application mobile et non comme un CTA MYDCT. */
  .form-submit{align-self:flex-start;}
  .form{display:flex; flex-direction:column;}
  .form fieldset, .form > p{align-self:stretch;}
  .form-obligatoire{display:block; margin-top:6px; font-size:.88rem;}

  /* Retour apres envoi, affiche par le script au retour de contact.php */
  .form-etat{
    display:none; align-items:flex-start; gap:14px;
    border-radius:18px; padding:20px 22px; margin-bottom:34px;
    font-size:.98rem; line-height:1.6;
  }
  .form-etat.visible{display:flex;}
  /* Quatre registres de retour, un par nature de message :
     vert = succes, rouge = erreur, bleu = information, orange = avertissement.
     La couleur n'est jamais seule porteuse de sens : chaque bandeau porte un
     pictogramme et un titre en toutes lettres (WCAG 1.4.1). Contrastes AA. */
  .form-etat::before{
    content:"!"; flex:0 0 auto; margin-top:2px;
    display:flex; align-items:center; justify-content:center;
    width:22px; height:22px; border-radius:50%;
    color:#fff; font-family:var(--font-head); font-weight:800; font-size:.82rem;
  }
  .form-etat-succes{background:#F0F7F1; border:1px solid #C4E0CA; color:#205C2C;}
  .form-etat-succes::before{content:"\2713"; background:#2E7D3A;}
  .form-etat-erreur{background:#FDF2F2; border:1px solid #F3C9C9; color:#7A2626;}
  .form-etat-erreur::before{background:#B93B3B;}
  .form-etat-info{background:#EFF4FB; border:1px solid #C9D8EE; color:#1F4E8C;}
  .form-etat-info::before{content:"i"; background:#2F6BB3; font-style:italic;}
  .form-etat-avert{background:var(--orange-50); border:1px solid var(--orange-200); color:var(--orange-800);}
  .form-etat-avert::before{background:var(--orange-700);}
  .form-etat strong{display:block; font-family:var(--font-head); margin-bottom:4px;}

  /* Colonne d'appoint */
  .contact-aside{display:flex; flex-direction:column; gap:18px;}
  .aside-card{
    background:#fff; border:1px solid var(--orange-100);
    border-radius:22px; padding:28px 26px;
  }
  .aside-card h2{font-size:1.12rem; margin-bottom:14px; letter-spacing:-.005em;}
  .aside-card p{color:var(--text-soft); font-size:.95rem; line-height:1.6; margin-bottom:20px;}
  .aside-card .btn{width:100%; justify-content:center;}
  .aside-card-dark{background:var(--anthracite); border-color:transparent;}
  .aside-card-dark h2{color:#fff; margin-top:14px;}
  .aside-card-dark p{color:rgba(255,255,255,.82);}
  .aside-card-dark .eyebrow{
    background:rgba(235,98,38,.16); color:var(--orange-300);
    padding:6px 14px; border-radius:999px;
  }
  .aside-card-soft{background:#F4F4F5; border-color:#E5E7EB;}

  .aside-list{list-style:none; display:flex; flex-direction:column; gap:6px;}
  .aside-list li{display:flex; align-items:center; gap:13px; min-height:44px;}
  .aside-ico{
    flex:0 0 auto; display:flex; align-items:center; justify-content:center;
    width:36px; height:36px; border-radius:50%;
    background:var(--orange-50); color:var(--orange-500);
  }
  .aside-list a{
    font-family:var(--font-head); font-weight:700; font-size:.98rem;
    color:var(--orange-700); text-decoration:none;
  }
  .aside-list a:hover{color:var(--orange-800); text-decoration:underline;}
  .aside-texte{color:var(--text-soft); font-size:.9rem; line-height:1.5;}

  .aside-etapes{
    list-style:none; counter-reset:etape;
    display:flex; flex-direction:column; gap:14px;
  }
  .aside-etapes li{
    counter-increment:etape; position:relative; padding-left:38px;
    font-size:.93rem; color:var(--text-soft); line-height:1.55;
  }
  .aside-etapes li::before{
    content:counter(etape); position:absolute; left:0; top:-1px;
    width:25px; height:25px; border-radius:50%;
    display:flex; align-items:center; justify-content:center;
    background:var(--orange-500); color:#fff;
    font-family:var(--font-head); font-weight:700; font-size:.8rem;
  }

  /* ---------- PAGE A PROPOS ---------- */
  /* Carte d'identite : le bloc portrait faisait deux choses a la fois, presenter
     un homme et raconter une origine, d'ou le desequilibre entre une colonne
     photo courte et cinq paragraphes. Les deux roles sont separes : une fiche
     horizontale pour la personne, puis une colonne de lecture pour le recit,
     calibree sur la longueur de ligne confortable (environ 70 signes). */
  .about-identity{max-width:960px; margin:0 auto;}
  .idcard{
    position:relative; display:grid; grid-template-columns:auto minmax(0,1fr);
    align-items:center; background:var(--anthracite);
    border-radius:28px; overflow:hidden; padding:0;
    box-shadow:0 26px 52px -34px rgba(31,41,55,.55);
  }
  /* Anneau en degrade conique : l'orange tourne autour du portrait, du vif au
     clair puis au sombre, ce qui donne l'impression d'une lumiere qui glisse
     sur un anneau plutot que d'un simple contour de couleur unie.
     Le rembourrage forme l'anneau, l'ombre anthracite du visuel menage un
     interstice pour que l'anneau se lise comme une piece detachee. */
  .idcard-photo{
    position:relative; width:250px; height:250px; margin:48px 0 48px 48px;
    border-radius:50%; padding:8px;
    background:var(--orange-500);
    background:conic-gradient(from 205deg,
      var(--orange-600) 0deg, var(--orange-500) 70deg, var(--orange-300) 160deg,
      var(--orange-500) 250deg, var(--orange-600) 360deg);
  }
  /* Halo tres diffus : le meme procede que le footer, il pose l'anneau dans
     l'aplat anthracite au lieu de le laisser flotter. */
  .idcard-photo::before{
    content:""; position:absolute; z-index:0; inset:-26px; border-radius:50%;
    background:radial-gradient(circle at 50% 50%, rgba(235,98,38,.34), rgba(235,98,38,0) 66%);
  }
  .idcard-photo picture{
    position:relative; z-index:1; display:block; width:100%; height:100%;
    border-radius:50%; overflow:hidden;
    box-shadow:0 0 0 3px var(--anthracite);
  }
  .idcard-photo img{
    width:100%; height:100%; border-radius:50%;
    object-fit:cover; object-position:50% 30%; display:block;
  }
  .idcard-body{padding:48px 48px 48px 44px;}
  .idcard-body .eyebrow{
    background:rgba(235,98,38,.16); color:var(--orange-300);
    padding:6px 14px; border-radius:999px;
  }
  /* Le nom devient l'element dominant de la carte. */
  .idcard-body h2{
    color:#fff; font-size:clamp(1.9rem, 3.2vw, 2.7rem); line-height:1.05;
    margin:16px 0 8px; letter-spacing:-.025em;
  }
  .idcard-role{
    font-family:var(--font-head); font-weight:700; font-size:.98rem;
    color:var(--orange-300); margin:0;
  }
  .idcard-role::after{
    content:""; display:block; width:34px; height:3px; border-radius:2px;
    background:var(--orange-500); margin:18px 0;
  }
  .idcard-pitch{color:rgba(255,255,255,.84); line-height:1.7; margin:0;}

  .about-lede{max-width:640px; margin:var(--space-block) auto 0;}
  .about-lede p{color:var(--text-soft); font-size:1.02rem; line-height:1.8; margin-bottom:24px;}
  .about-lede p:last-child{margin-bottom:0;}
  /* Une phrase mise en valeur par paragraphe : le lecteur qui survole capte
     l'argument sans lire, celui qui lit n'est pas gene. Jamais plus d'une. */
  .about-lede strong{color:var(--anthracite); font-weight:700;}
  /* Chapeau : porte d'entree du recit, plus grand et plus contraste. */
  .lede-first{font-size:1.14rem; color:var(--text-main); line-height:1.7;}
  /* La reponse quitte le fil du recit. Les deux premiers paragraphes posent un
     diagnostic, celui-ci annonce ce que vous faites : il devient un objet a
     part, sur fond blanc, deborde legerement de la colonne de lecture et porte
     une barre orange. Le lecteur qui ne lit rien voit au moins ce bloc. */
  .lede-reponse{
    position:relative; margin:36px -36px; padding:30px 34px;
    background:#fff; border-radius:20px;
    box-shadow:0 18px 40px -30px rgba(31,41,55,.4);
  }
  .lede-reponse::before{
    content:""; position:absolute; left:0; top:22px; bottom:22px; width:4px;
    border-radius:0 4px 4px 0; background:var(--orange-500);
  }
  .lede-reponse-label{
    display:block; font-family:var(--font-head); font-weight:700;
    text-transform:uppercase; letter-spacing:.14em; font-size:.72rem;
    color:var(--orange-700); margin-bottom:12px;
  }
  .lede-reponse p{color:var(--text-main); font-size:1.04rem; margin-bottom:0;}

  /* Note personnelle : elle ferme la page comme une signature, donc centree,
     resserree, et separee du recit par un losange plutot que par un filet. */
  .lede-note{
    position:relative; max-width:520px; margin:44px auto 0 !important;
    padding-top:60px; text-align:center; font-size:.95rem;
  }
  /* Marque de fin d'article : un filet qui s'eteint a ses deux extremites et
     s'interrompt au centre, avec le symbole de la marque pose dans la coupure.
     C'est le procede du colophon en edition, la ou un simple losange n'etait
     qu'un ornement. Le fichier est deja charge par ailleurs, donc gratuit. */
  .lede-note::before{
    content:""; position:absolute; top:22px; left:50%; transform:translateX(-50%);
    width:250px; height:1px;
    background:linear-gradient(90deg,
      transparent 0%, var(--orange-200) 24%, transparent 41%,
      transparent 59%, var(--orange-200) 76%, transparent 100%);
  }
  .lede-note::after{
    content:""; position:absolute; top:8px; left:50%; transform:translateX(-50%);
    width:25px; height:29px; opacity:.9;
    background:url("../assets/img/logo-icon.png") center/contain no-repeat;
  }

  .about-portrait{
    max-width:960px; margin:0 auto; display:grid;
    grid-template-columns:clamp(300px, 33vw, 356px) minmax(0,1fr); gap:52px; align-items:start;
  }
  /* Portrait : composition en carte, et non cadre autour d'une photo.
     Un panneau anthracite occupe le bas de la colonne, le portrait chevauche
     son bord superieur a mi-hauteur et deborde donc vers le haut. Son liseré
     est de la couleur du fond de page : invisible sur la moitie haute, il
     decoupe nettement la moitie basse posee sur l'anthracite. Le portrait
     semble sortir du cadre, et la fonction trouve sa place dans le panneau. */
  .about-photo-col{
    margin-top:6px;
    /* Diametre du portrait. Le chevauchement du panneau en depend directement,
       il est donc calcule et non recopie : une seule valeur a regler. */
    --ph:256px;
    position:relative; display:flex; flex-direction:column; align-items:center;
    width:100%; padding-bottom:30px;
  }
  .about-photo-col::before{
    content:""; position:absolute; z-index:0; left:0; right:0; bottom:0;
    top:calc(var(--ph) / 2);
    background:var(--anthracite); border-radius:28px;
    box-shadow:0 26px 52px -34px rgba(31,41,55,.55);
  }
  .about-photo-wrap{position:relative; z-index:1; width:var(--ph); height:var(--ph);}
  .about-photo{
    position:relative; z-index:2; width:var(--ph); height:var(--ph); border-radius:50%;
    background:var(--orange-50); border:4px solid var(--bg);
  }
  .about-photo img{width:100%; height:100%; border-radius:50%; object-fit:cover; display:block;}
  .about-photo picture{display:block; width:100%; height:100%;}
  /* Legende du portrait. L'ancienne pastille anthracite arrondie imitait un bouton
     alors qu'elle n'est pas cliquable : sur ce site, toute forme en 999px est un CTA.
     Ici, filet orange + texte anthracite sur le fond de page : contraste maximal
     et aucune promesse d'interaction. */
  .about-photo-label{
    position:relative; z-index:1; margin-top:22px; text-align:center;
    font-family:var(--font-head); font-weight:700; font-size:1rem;
    color:#fff; letter-spacing:-.005em;
  }
  .about-photo-label::before{
    content:""; display:block; width:34px; height:3px; border-radius:2px;
    background:var(--orange-500); margin:0 auto 12px;
  }
  .about-text h2{font-size:var(--h-block); margin:12px 0 18px; letter-spacing:-.01em;}
  .about-text p{color:var(--text-soft); line-height:1.7; margin-bottom:16px;}
  .about-text p:last-child{margin-bottom:0;}
  .about-text .btn{margin-top:26px;}

  /* Pour qui : grille éditoriale */
  .about-audience{max-width:960px; margin:var(--space-block) auto 0;}
  /* Trame de losanges : l'ornement reprend exactement la forme du separateur
     du chapelet ci-dessous, donc le motif derive de la ponctuation du contenu
     au lieu d'etre rapporte. Aplats minuscules, degrade d'opacite vers le bas.
     Purement decoratif, masque aux technologies d'assistance. overflow:hidden
     sur la section empeche tout debordement horizontal de la page. */

  /* Sections hotes : contexte de positionnement + contenu au-dessus du motif */


  /* Chapelet typographique : les secteurs se lisent comme une phrase, separes
     par un losange orange. Pas de grille, pas de cartes, pas d'effet catalogue. */
  .audience-line{
    list-style:none; display:flex; flex-wrap:wrap; justify-content:center; align-items:center;
    gap:2px 24px; max-width:820px; margin:0 auto; text-align:center;
  }
  .audience-line li{
    position:relative; padding:8px 0;
    font-family:var(--font-head); font-weight:700; font-size:1.14rem;
    color:var(--anthracite); letter-spacing:-.005em;
  }
  /* Entree en cascade des secteurs. Choix assume contre un bandeau defilant :
     une animation perpetuelle tomberait sous le critere WCAG 2.2.2 (pouvoir
     mettre en pause) et occuperait le compositeur en continu sur mobile.
     Ici l'animation se joue une seule fois puis ne coute plus rien. */
  html.js-reveal .audience-line li{
    opacity:0; translate:0 10px;
    transition:opacity .5s ease, translate .5s cubic-bezier(.22,.9,.32,1);
  }
  html.js-reveal .about-audience.is-visible .audience-line li{opacity:1; translate:0 0;}
  html.js-reveal .about-audience.is-visible .audience-line li:nth-child(1){transition-delay:0.06s;}
  html.js-reveal .about-audience.is-visible .audience-line li:nth-child(2){transition-delay:0.12s;}
  html.js-reveal .about-audience.is-visible .audience-line li:nth-child(3){transition-delay:0.18s;}
  html.js-reveal .about-audience.is-visible .audience-line li:nth-child(4){transition-delay:0.24s;}
  html.js-reveal .about-audience.is-visible .audience-line li:nth-child(5){transition-delay:0.30s;}
  html.js-reveal .about-audience.is-visible .audience-line li:nth-child(6){transition-delay:0.36s;}
  html.js-reveal .about-audience.is-visible .audience-line li:nth-child(7){transition-delay:0.42s;}
  html.js-reveal .about-audience.is-visible .audience-line li:nth-child(8){transition-delay:0.48s;}
  .audience-line li + li::before{
    content:""; position:absolute; left:-14px; top:50%; margin-top:-3px;
    width:6px; height:6px; border-radius:1px; background:var(--orange-500);
    transform:rotate(45deg);
  }

  /* Le nom et la baseline */
  .about-story{
    max-width:960px; margin:var(--space-block) auto 0; background:#fff;
    border:1px solid var(--orange-100); border-radius:28px; padding:56px 40px;
    display:grid; grid-template-columns:auto minmax(0,1fr); gap:30px; align-items:start;
  }
  .about-story-mark{padding-top:3px;}
  .about-story-mark img{display:block;}
  .about-story h2{font-size:var(--h-block); margin:0 0 16px; letter-spacing:-.01em;}
  .about-story h2 .accent{color:var(--orange-500);}
  .about-story p{color:var(--text-soft); line-height:1.7; margin-bottom:14px;}
  .about-story p:last-child{margin-bottom:0;}

  .about-engagements{
    max-width:960px; margin:var(--space-block) auto 0;
    background:var(--anthracite); border-radius:28px; padding:56px 40px;
  }
  .about-engagements .method-head{margin-bottom:44px;}
  .about-engagements .eyebrow{
    background:rgba(235,98,38,.16); color:var(--orange-300);
    padding:6px 14px; border-radius:999px;
  }
  .about-engagements .method-head h2{color:#fff;}
  .about-engagements .method-head .accent{color:var(--orange-400);}
  .about-engagements .method-head p{color:rgba(255,255,255,.8);}

  /* Adéquation */
  .about-fit{max-width:960px; margin:var(--space-block) auto 0;}
  /* Un seul panneau scinde en deux versants plutot que deux cartes jumelles :
     l'objet se lit comme un arbitrage unique, pas comme une comparaison d'offres. */
  .fit-panel{
    display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr);
    background:#FFFCFA; border:1px solid var(--orange-100);
    border-radius:28px; overflow:hidden;
    box-shadow:0 20px 46px -30px rgba(31,41,55,.3);
  }
  .fit-side{padding:44px 40px;}
  .fit-side-no{background:#F4F4F5; border-left:1px solid var(--orange-100);}
  .fit-side h3{font-size:1.06rem; margin-bottom:22px; letter-spacing:-.005em;}
  .fit-side-no h3{color:var(--text-soft);}
  .fit-yes, .fit-no{list-style:none; display:flex; flex-direction:column; gap:15px;}
  .fit-yes li, .fit-no li{
    position:relative; padding-left:30px; font-size:.95rem; line-height:1.5;
  }
  .fit-yes li{color:var(--text-main);}
  .fit-yes li::before{
    content:""; position:absolute; left:0; top:2px; width:19px; height:19px;
    border-radius:50%; background:var(--orange-500);
    background-image:var(--check); background-repeat:no-repeat;
    background-position:center; background-size:11px;
  }
  .fit-no li{color:var(--text-soft);}
  .fit-no li::before{
    content:""; position:absolute; left:2px; top:11px;
    width:15px; height:2px; border-radius:2px; background:#9AA0A6;
  }
  .fit-note{
    max-width:640px; margin:26px auto 0; text-align:center;
    font-size:.92rem; color:var(--text-soft); line-height:1.6;
  }

  /* Réassurance */
  .about-facts{
    max-width:960px; margin:var(--space-block) auto 0; padding-top:34px;
    border-top:1px solid #E5E7EB;
    display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:18px;
  }
  .fact{text-align:center;}
  .fact + .fact{box-shadow:inset 1px 0 0 #E5E7EB;}
  .fact-label{
    display:block; font-family:var(--font-head); font-weight:700;
    text-transform:uppercase; letter-spacing:.14em; font-size:.7rem;
    color:var(--orange-700); margin-bottom:9px;
  }
  .fact-value{
    font-family:var(--font-head); font-weight:700; font-size:1.02rem;
    color:var(--anthracite);
  }

  /* Parcours : composition éditoriale en deux colonnes */
  .about-path{
    max-width:960px; margin:var(--space-block) auto 0; display:grid;
    grid-template-columns:296px minmax(0,1fr); gap:56px; align-items:start;
  }
  .about-path .method-head{max-width:none; margin:0; text-align:left;}
  .about-path .method-head h2{font-size:var(--h-block); margin:12px 0 0;}
  .path-body{position:relative; padding-top:4px;}
  .path-body p{color:var(--text-soft); line-height:1.75; margin-bottom:18px;}
  .path-lead{
    font-size:1.12rem; line-height:1.65;
    color:var(--text-main) !important; font-weight:500;
  }
  .path-pull{
    margin:28px 0 26px; padding:24px 0;
    border-top:1px solid var(--orange-100); border-bottom:1px solid var(--orange-100);
  }
  .path-pull p{
    font-family:var(--font-head); font-weight:700; font-size:1.3rem; line-height:1.4;
    letter-spacing:-.01em; color:var(--anthracite) !important; margin-bottom:0;
  }
  .path-pull .accent{color:var(--orange-500);}
  .path-body p:last-child{margin-bottom:0;}

  /* Engagements numérotés */
  .engagements-grid{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:30px;}
  .engagement{padding-top:18px; border-top:2px solid rgba(255,255,255,.18);}
  .engagement-num{
    display:block; font-family:var(--font-head); font-weight:800; font-size:2.1rem;
    line-height:1; letter-spacing:-.02em; color:var(--orange-400); margin-bottom:14px;
  }
  .engagement h3{font-size:1.12rem; margin-bottom:10px; color:#fff;}
  .engagement p{color:rgba(255,255,255,.78); font-size:.94rem; line-height:1.65;}

  /* Réseau : intro + personnes */
  /* Les deux colonnes s'etirent sur la meme hauteur : les cartes de personnes
     commencent et finissent exactement ou commence et finit le texte de gauche.
     Sans cela, la colonne de droite s'arretait plus haut et l'ensemble paraissait
     flotter. Le calage de 4px pose plus tot etait un pansement : il alignait les
     hauts mais decalait les bas d'autant. */
  .network-grid{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:44px; align-items:stretch;}
  .network-intro .eyebrow{
    background:rgba(235,98,38,.16); color:var(--orange-300);
    padding:6px 14px; border-radius:999px;
  }
  .network-intro h2{color:#fff; font-size:var(--h-block); margin:14px 0 16px; letter-spacing:-.01em;}
  .network-intro h2 .accent{color:var(--orange-400);}
  .network-intro p{color:rgba(255,255,255,.8); line-height:1.65; margin-bottom:14px;}
  .network-intro p:last-child{margin-bottom:0;}
  .network-note{font-size:.94rem; color:rgba(255,255,255,.68);}
  .network-people{list-style:none; display:grid; grid-auto-rows:1fr; gap:16px; height:100%;}
  .network-people li{min-width:0;}
  .person{
    display:grid; grid-template-columns:auto minmax(0,1fr); gap:18px; align-items:center;
    background:rgba(255,255,255,.06); border:1px solid rgba(255,255,255,.14);
    border-radius:22px; padding:22px 22px;
  }
  .person-avatar-photo{padding:0; overflow:hidden; background:rgba(255,255,255,.08);}
  .person-avatar-photo picture{display:block; width:100%; height:100%;}
  .person-avatar-photo img{width:100%; height:100%; border-radius:50%; object-fit:cover; display:block;}
  .person-avatar{
    width:80px; height:80px; border-radius:50%; flex:0 0 auto;
    box-shadow:0 0 0 2px rgba(255,255,255,.14);
    display:flex; align-items:center; justify-content:center;
    background:rgba(235,98,38,.2); color:var(--orange-300);
    font-family:var(--font-head); font-weight:800; font-size:.95rem;
  }
  .person strong{
    display:block; color:#fff; font-family:var(--font-head);
    font-size:1.05rem; margin-bottom:5px;
  }
  .person-role{
    display:block; color:var(--orange-300); font-size:.86rem;
    font-weight:600; margin-bottom:5px;
  }
  .person-scope{display:block; color:rgba(255,255,255,.72); font-size:.86rem; line-height:1.5;}

  /* Palier tablette. Deux grilles seulement posaient probleme entre 760 et
     980px : trois colonnes d'engagements tombaient a 31 signes par ligne, et
     les cartes de personnes du reseau n'avaient plus la place pour leur texte
     a cote d'un avatar de 80px. Elles se degroupent, avec une largeur plafonnee
     pour ne pas basculer dans l'exces inverse, des lignes trop longues. */
  @media (max-width:56.25em){
    .engagements-grid{grid-template-columns:minmax(0,1fr); gap:24px; max-width:560px; margin:0 auto;}
    .network-grid{grid-template-columns:minmax(0,1fr); gap:30px;}
    .network-intro, .network-people{max-width:560px; margin-left:auto; margin-right:auto;}
    .fit-panel{grid-template-columns:minmax(0,1fr);}
    .fit-side-no{border-left:0; border-top:1px solid var(--orange-100);}
    .fit-side{max-width:600px; margin-left:auto; margin-right:auto;}
  }
  @media (max-width:61.25em){
    .contact-layout{grid-template-columns:minmax(0,1fr); gap:40px;}
    .contact-aside{display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:18px; align-items:start;}
    .aside-card-dark{grid-column:1 / -1;}
  }
  @media (max-width:47.5em){
    .contact-aside{grid-template-columns:minmax(0,1fr);}
    .form-row{grid-template-columns:minmax(0,1fr); gap:16px;}
    .choix{grid-template-columns:minmax(0,1fr);}
    .form-block legend{font-size:1rem;}
    .aside-card{padding:24px 22px;}
    .idcard{grid-template-columns:minmax(0,1fr); justify-items:center; text-align:center; border-radius:22px;}
    .idcard-photo{width:200px; height:200px; margin:40px 0 0; padding:6px;}
    .idcard-photo::before{inset:-18px;}
    .idcard-body{padding:26px 24px 38px;}
    .idcard-role::after{margin-left:auto; margin-right:auto;}
    .idcard-role::after{margin-left:auto; margin-right:auto;}
    .about-lede p{font-size:1rem; margin-bottom:20px;}
    .lede-first{font-size:1.08rem;}
    .lede-reponse{margin:30px 0; padding:26px 24px; border-radius:18px;}
    .lede-reponse p{font-size:1rem;}
    .lede-note{margin-top:34px !important; padding-top:52px;}
    .lede-note::before{width:186px; top:18px;}
    .lede-note::after{width:22px; height:25px; top:6px;}
    .inline-cta{margin-top:26px; padding-top:22px; gap:14px;}
    .inline-cta p{flex:1 1 100%;}
    .inline-cta .btn{width:100%; justify-content:center;}
    .form-submit{align-self:stretch; justify-content:center;}
    .formulas{grid-template-columns:minmax(0,1fr); gap:30px;}
    .formula{padding-right:0;}
    .formula-plus{padding-left:0; padding-top:30px; border-left:0; border-top:1px solid rgba(255,255,255,.16);}
    .about-engagements{padding:40px 24px; border-radius:22px;}
    .pillar-nav{gap:8px; margin-bottom:40px;}
    .pillar-nav a{font-size:.82rem; padding:0 16px;}
    .about-portrait{grid-template-columns:minmax(0,1fr); gap:30px; text-align:center; justify-items:center;}
    .about-path{grid-template-columns:minmax(0,1fr); gap:26px;}
    .about-path .method-head{text-align:center;}
    .path-lead{font-size:1.05rem;}
    .path-pull p{font-size:1.12rem;}
    .engagements-grid{grid-template-columns:minmax(0,1fr); gap:26px;}
    .network-grid{grid-template-columns:minmax(0,1fr); gap:28px;}
    .about-photo-col{--ph:200px; width:min(284px, 100%); padding-bottom:26px;}
    .about-photo-col::before{border-radius:24px;}
    .about-photo{border-width:3px;}
    .about-photo-label{margin-top:18px; font-size:.95rem;}
    .about-story{grid-template-columns:minmax(0,1fr); gap:20px; padding:40px 24px;}
    .fit-panel{grid-template-columns:minmax(0,1fr);}
    .fit-side{padding:34px 24px;}
    .fit-side-no{border-left:0; border-top:1px solid var(--orange-100);}
    .audience-line{gap:0 18px;}
    .audience-line li{font-size:1.02rem;}
    .audience-line li + li::before{left:-11px;}
    .about-facts{grid-template-columns:minmax(0,1fr); gap:0; padding-top:26px;}
    .fact{display:block; text-align:center; padding:22px 2px;}
    .fact + .fact{box-shadow:inset 0 1px 0 #E5E7EB;}
    .fact-icon{width:44px; height:44px; margin:0 auto 12px;}
    .person-avatar{width:66px; height:66px;}
  }

  @media (prefers-reduced-motion: reduce){
    .mobile-menu.open > a,
    .mobile-menu.open .mobile-menu-cta{animation:none !important; opacity:1 !important; translate:none !important;}
  }
  @media (prefers-reduced-motion: reduce){
    html.js-reveal .reveal{opacity:1 !important; translate:none !important;}
    html.js-reveal .audience-line li{opacity:1 !important; translate:none !important; transition:none !important;}
  }
  @media (prefers-reduced-motion: reduce){
    .btn:hover, .btn:active{transform:none !important;}
  }
  @media (prefers-reduced-motion: reduce){
    .legal-chevron{transition:none !important;}
  }
  @media (prefers-reduced-motion: reduce){
    *{animation-duration:0.001ms !important; transition-duration:0.001ms !important;}
  }

  /* ------------------------------------------------------------------
     Index des piliers (pages locales)
     Rappel de perimetre, pas un catalogue : les cartes Services restent
     l'unique traitement du catalogue. Ici quatre lignes, nom du pilier a
     gauche en Arimo, application locale a droite, separees par un filet.
     ------------------------------------------------------------------ */
  .local-index{
    list-style:none; margin:28px 0 0; padding:0;
    border-top:1px solid var(--orange-100);
  }
  .local-index li{
    display:grid; grid-template-columns:210px minmax(0,1fr); gap:10px 32px;
    align-items:baseline;
    padding:20px 0; border-bottom:1px solid var(--orange-100);
  }
  .local-index dfn{
    font-family:var(--font-head); font-weight:700; font-style:normal;
    font-size:1.02rem; color:var(--anthracite); line-height:1.35;
  }
  .local-index dfn::before{
    content:""; display:inline-block; vertical-align:middle;
    width:7px; height:7px; margin-right:10px; border-radius:50%;
    background:var(--orange-500);
  }
  .local-index p{
    margin:0; color:var(--text-soft); font-size:.98rem; line-height:1.7;
  }
  @media (max-width:47.5em){
    .local-index li{grid-template-columns:minmax(0,1fr); gap:6px; padding:18px 0;}
  }

  /* Lien en pleine prose.
     Meme grammaire que .plans-bridge a, seul traitement de lien en prose
     deja present sur le site : orange d'action, graisse Arimo, filet fin
     sous le mot. Pas de soulignement natif, pas de fleche : la page compte
     deja ses relances, un lien de corps de texte n'a pas a se comporter
     comme un bouton. */
  .local-link{
    display:inline-flex; align-items:center; min-height:44px;
    font-family:var(--font-head); font-weight:700;
    color:var(--orange-700);
    border-bottom:1px solid var(--orange-200);
    transition:color .25s ease, border-color .25s ease;
  }
  .local-link:hover{color:var(--orange-800); border-color:var(--orange-500);}
  .local-link:focus-visible{
    outline:2px solid var(--orange-700); outline-offset:3px; border-radius:4px;
  }

  /* ------------------------------------------------------------------
     Composition des pages locales
     Le titre de section passe en colonne laterale et devient collant :
     le lecteur garde le repere sous les yeux, et la page perd la hauteur
     que couterait un titre empile au-dessus de chaque bloc.
     ------------------------------------------------------------------ */
  .local-body{max-width:1040px; margin:0 auto;}
  .local-section{
    display:grid; grid-template-columns:250px minmax(0,1fr); gap:40px;
    padding:38px 0; border-top:1px solid var(--orange-100);
  }
  .local-section:first-child{border-top:0; padding-top:0;}
  .local-section-head{position:sticky; top:112px; align-self:start;}
  .local-section-head h2{
    font-size:var(--h-block); margin:12px 0 0; letter-spacing:-.01em;
    color:var(--anthracite);
  }
  .local-section-body > p{color:var(--text-soft); line-height:1.75; margin-bottom:16px;}
  .local-section-body > p:last-child{margin-bottom:0;}
  .local-section-body .path-lead{margin-bottom:18px;}

  /* Etapes : ici la numerotation porte une information, l'ordre du deroule. */
  .local-steps{
    list-style:none; display:grid; grid-template-columns:repeat(3,minmax(0,1fr));
    gap:26px; margin:0; padding:0;
  }
  .local-step{padding-top:16px; border-top:2px solid var(--orange-100);}
  .local-step-num{
    display:block; font-family:var(--font-head); font-weight:800; font-size:1.6rem;
    line-height:1; letter-spacing:-.02em; color:var(--orange-700); margin-bottom:10px;
  }
  .local-step h3{font-size:1.02rem; margin:0 0 8px; color:var(--anthracite);}
  .local-step p{margin:0; color:var(--text-soft); font-size:.93rem; line-height:1.65;}

  .local-steps + p{margin-top:22px;}

  @media (max-width:56.25em){
    .local-section{grid-template-columns:minmax(0,1fr); gap:14px; padding:30px 0;}
    .local-section-head{position:static; top:auto;}
    .local-steps{grid-template-columns:minmax(0,1fr); gap:20px;}
  }
  @media (prefers-reduced-motion: reduce){
    .local-section-head{position:static;}
  }

  /* Panneau de rupture (pages locales)
     Une section sur cinq sort de la grille a deux colonnes : carte blanche sur
     le fond blanc casse, titre centre, index en deux colonnes. Le but est de
     casser la regularite au milieu du defilement, sans introduire de grammaire
     etrangere au site (carte blanche = formulaire de contact, titre centre =
     .section-head). */
  .local-panel{
    background:#fff; border:1px solid var(--gris-clair, #E5E7EB);
    border-radius:28px; padding:46px 44px; margin:38px 0;
  }
  .local-panel .section-head{max-width:600px; margin:0 auto 34px;}
  .local-panel .section-head h2{font-size:var(--h-block); margin:12px 0 14px;}
  .local-panel .section-head p{color:var(--text-soft); line-height:1.6;}
  .local-panel .local-index{
    display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); column-gap:44px;
    margin-top:0; border-top:0;
  }
  .local-panel .local-index li{grid-template-columns:minmax(0,1fr); gap:6px; align-items:start;}
  .local-panel .local-index li:nth-child(-n+2){border-top:1px solid var(--orange-100);}
  .local-panel > p{margin:26px 0 0; text-align:center;}
  .local-panel .inline-cta{margin-top:26px;}

  @media (max-width:56.25em){
    .local-panel{padding:32px 24px; margin:26px 0; border-radius:22px;}
    .local-panel .local-index{grid-template-columns:minmax(0,1fr); column-gap:0;}
    .local-panel .local-index li:nth-child(-n+2){border-top:0;}
    .local-panel .local-index li:first-child{border-top:1px solid var(--orange-100);}
  }
