/* ==========================================================================
   BEESECURE — site.css : système de design COMPLET du site beesecure.ma
   Aucune dépendance, aucune étape de build. Chargé sur toutes les pages :
     <link rel="stylesheet" href="/assets/css/site.css?v=N">
     <link rel="stylesheet" href="/assets/css/pages.css?v=N">
   (N : même valeur dans toutes les pages, incrémentée à chaque modification)
   Mode d'emploi, exemples HTML et règles : /_dev/STYLEGUIDE.md

   RÈGLES
   - Ce fichier est le SOCLE COMMUN : ne pas le modifier pour une seule page.
     Les styles propres à une page vont dans pages.css, dans le bloc de son lot.
   - Contrastes de texte ≥ 4,5:1 (WCAG AA) : n'utiliser que les rôles
     (--fg, --fg-2, --fg-3, --accent-text, --link) pour le texte.
   - Bouton primaire = fond orange + texte BLEU MARINE. Jamais de texte blanc sur orange.
   - CSP stricte : aucun attribut style="" dans les pages ; toute variation passe
     par une classe (ex. .d-1 … .d-6 pour les délais d'apparition).

   SOMMAIRE
     0. Polices (Manrope variable 200-800, Michroma capitales)
     1. Jetons de design (:root) et rôles adaptatifs (clair / sombre)
     2. Base, typographie, liens, focus
     3. Mise en page : container, sections, grilles, split, piles
     4. Titres de section, sur-titres, chapeaux
     5. Boutons et liens fléchés
     6. Hexagones : tuiles d'icônes, puces, motif nid d'abeille
     7. En-tête, navigation, sélecteur de langue
     8. Méga-menu « Expertises »
     9. Menu mobile plein écran
    10. Héros d'accueil
    11. Héros compact de page + fil d'Ariane
    12. Référentiels de l'accueil (liste statique groupée, sans défilement)
    13. Cartes (simple, cliquable, sombre, expertise, appel)
    14. Filtres et onglets
    15. Méthode interactive (4 étapes) et frise d'étapes
    16. Accordéon / FAQ
    17. Livrables, schéma illustratif (pyramide), puces de référentiels, listes
    18. Secteurs, piliers, engagements, repères réglementaires
    19. Widget d'orientation « Par où commencer ? »
    20. Bandeau d'appel à l'action
    21. Formulaires et états d'envoi
    22. Alertes, tableaux
    23. Prose (pages légales, guide réglementaire) + sommaire collant
    24. Pied de page
    25. Page 404
    26. Utilitaires
    27. Apparitions au défilement
    28. Mouvement réduit
    29. Impression
   ========================================================================== */

/* --------------------------------------------------------------------------
   0. POLICES — auto-hébergées (licences OFL dans /assets/fonts/)
   -------------------------------------------------------------------------- */
@font-face {
  font-family: "Manrope";
  src: url("/assets/fonts/manrope-variable.woff2") format("woff2");
  font-weight: 200 800;
  font-style: normal;
  font-display: swap;
}
/* Michroma : police du logo. Sous-ensemble capitales/chiffres. Réservée aux
   petits sur-titres en capitales espacées (.eyebrow--brand), avec parcimonie. */
@font-face {
  font-family: "Michroma";
  src: url("/assets/fonts/michroma-capitales.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

/* --------------------------------------------------------------------------
   1. JETONS DE DESIGN
   -------------------------------------------------------------------------- */
:root {
  /* Marque */
  --navy: #092F4E;           /* bleu marine de marque */
  --navy-600: #0D3A5F;
  --navy-500: #164A74;
  --night: #06192B;          /* nuit : héros, sections profondes */
  --night-2: #071E33;
  --night-3: #041321;        /* pied de page */
  --orange: #FF7618;         /* orange de marque */
  --orange-light: #FF994F;   /* survols et petits textes orange SUR FOND SOMBRE */
  --orange-dark: #B94F00;    /* petits textes orange SUR FOND CLAIR (5,0:1 sur blanc) */
  --orange-tint: #FFF1E6;
  --orange-tint-2: #FFE2CC;

  /* Neutres froids, légèrement bleutés */
  --ink: #0B1E30;            /* texte principal sur clair (16:1) */
  --ink-2: #33475B;          /* texte secondaire (9:1) */
  --ink-3: #536579;          /* texte discret (5,9:1 blanc · 5,4:1 papier) */
  --line: #DCE3EA;
  --line-2: #C3CEDA;         /* filets décoratifs (1,6:1 : jamais pour la limite d'un champ) */
  --field-border: #7B8A99;   /* bordure des champs de saisie (3,5:1 sur blanc, WCAG 1.4.11) */
  --mist: #EEF2F6;
  --paper: #F6F4EF;          /* papier très légèrement chaud */
  --white: #FFFFFF;

  /* Sur fond sombre */
  --on-dark: #FFFFFF;
  --on-dark-2: #C6D2DE;      /* 11:1 sur nuit */
  --on-dark-3: #93A6BA;      /* 7,1:1 sur nuit · 5,5:1 sur marine */
  --line-dark: rgba(255, 255, 255, .12);
  --line-dark-2: rgba(255, 255, 255, .22);
  --glass: rgba(255, 255, 255, .045);
  --glass-2: rgba(255, 255, 255, .08);

  /* États */
  --ok: #0F7A4A;   --ok-bg: #E7F5EE;   --ok-dark: #5FD39C;
  --warn: #8A5A00; --warn-bg: #FFF4DB;
  --ko: #B42318;   --ko-bg: #FDECEA;   --ko-dark: #FF9C92;
  --info: #0B5CAD; --info-bg: #E8F1FB;

  /* Rôles ADAPTATIFS (redéfinis par .theme-dark et les sections sombres) */
  --bg: var(--white);
  --fg: var(--ink);
  --fg-2: var(--ink-2);
  --fg-3: var(--ink-3);
  --heading: var(--navy);
  --surface: var(--white);
  --surface-2: var(--mist);
  --border: var(--line);
  --border-2: var(--line-2);
  --accent-text: var(--orange-dark);
  --link: var(--navy);
  --focus: var(--navy);
  --hex-bg: var(--orange-tint);
  --hex-bd: rgba(255, 118, 24, .38);
  --hex-fg: var(--navy);

  /* Typographie */
  --font: "Manrope", system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
  --font-brand: "Michroma", "Manrope", system-ui, sans-serif;
  --fs-display: clamp(2.5rem, 1.4rem + 4.6vw, 5rem);
  --fs-h1: clamp(2.2rem, 1.3rem + 3.2vw, 4rem);
  --fs-h2: clamp(1.95rem, 1.3rem + 2.2vw, 3.25rem);
  --fs-h3: clamp(1.2rem, 1.08rem + .45vw, 1.45rem);
  --fs-h4: 1.125rem;
  --fs-lead: clamp(1.0625rem, .98rem + .4vw, 1.3rem);
  --fs-body: 1.0625rem;      /* 17 px */
  --fs-sm: .9375rem;         /* 15 px */
  --fs-xs: .8125rem;         /* 13 px */
  --lh-tight: 1.06;
  --lh-head: 1.15;
  --lh-body: 1.65;
  --tracking-tight: -.032em;
  --tracking-head: -.022em;
  --tracking-caps: .14em;

  /* Espacements (base 4 / 8 px) */
  --s-1: .25rem; --s-2: .5rem; --s-3: .75rem; --s-4: 1rem; --s-5: 1.5rem;
  --s-6: 2rem; --s-7: 2.5rem; --s-8: 3rem; --s-9: 4rem; --s-10: 5rem;
  --s-11: 6rem; --s-12: 8rem;
  --section-y: clamp(4.5rem, 2.6rem + 6vw, 8rem);
  --gap: clamp(1rem, .6rem + 1.4vw, 1.75rem);

  /* Mise en page */
  --container: 1280px;
  --gutter: clamp(1.25rem, 4vw, 2.5rem);
  --header-h: 76px;

  /* Rayons */
  --r-xs: 4px; --r-sm: 6px; --r-md: 10px; --r-lg: 16px; --r-xl: 24px; --r-pill: 999px;

  /* Ombres (teintées nuit) */
  --sh-1: 0 1px 2px rgba(6, 25, 43, .06), 0 1px 1px rgba(6, 25, 43, .04);
  --sh-2: 0 18px 40px -18px rgba(6, 25, 43, .28), 0 2px 6px rgba(6, 25, 43, .05);
  --sh-3: 0 40px 80px -30px rgba(6, 25, 43, .5);
  --sh-glow: 0 0 0 1px rgba(255, 118, 24, .35), 0 18px 50px -20px rgba(255, 118, 24, .45);

  /* Plans (z-index) */
  --z-base: 1; --z-raised: 10; --z-mobile: 90; --z-header: 100; --z-mega: 110; --z-skip: 1000;

  /* Mouvement */
  --ease: cubic-bezier(.2, .7, .2, 1);
  --ease-out: cubic-bezier(.16, 1, .3, 1);
  --dur: .25s;
  --dur-slow: .6s;

  /* Hexagone (pointe en haut, comme le logo) */
  --hexagon: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
}
@media (max-width: 1279px) { :root { --header-h: 68px; } }
/* Mobile : pages plus courtes (voir aussi .section-head §4 et .mt-10 §26) */
@media (max-width: 559px) { :root { --section-y: 3.5rem; } }

/* Rôles sombres : héros, sections sombres, pied, menu mobile, cartes sombres */
.theme-dark,
.section--dark,
.section--night,
.hero,
.page-hero,
.site-footer,
.mobile-menu,
.cta-band {
  --fg: var(--on-dark);
  --fg-2: var(--on-dark-2);
  --fg-3: var(--on-dark-3);
  --heading: var(--on-dark);
  --surface: var(--glass);
  --surface-2: var(--glass-2);
  --border: var(--line-dark);
  --border-2: var(--line-dark-2);
  --accent-text: var(--orange-light);
  --link: var(--on-dark);
  --focus: var(--orange-light);
  --hex-bg: #10314F;
  --hex-bd: rgba(255, 153, 79, .55);
  --hex-fg: var(--orange-light);
  color: var(--fg);
}
/* Retour au clair à l'intérieur d'une zone sombre (ex. carte blanche sur fond nuit) */
.theme-light {
  --fg: var(--ink); --fg-2: var(--ink-2); --fg-3: var(--ink-3); --heading: var(--navy);
  --surface: var(--white); --surface-2: var(--mist); --border: var(--line); --border-2: var(--line-2);
  --accent-text: var(--orange-dark); --link: var(--navy); --focus: var(--navy);
  --hex-bg: var(--orange-tint); --hex-bd: rgba(255, 118, 24, .38); --hex-fg: var(--navy);
  color: var(--fg);
}

/* --------------------------------------------------------------------------
   2. BASE
   -------------------------------------------------------------------------- */
*, *::before, *::after { box-sizing: border-box; }
html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--header-h) + 1rem);
}
body {
  margin: 0;
  min-height: 100vh;
  font-family: var(--font);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  font-weight: 450;
  color: var(--fg);
  background: var(--white);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  font-feature-settings: "kern" 1;
  overflow-x: hidden;
}
@supports (overflow: clip) { body { overflow-x: clip; } }
body.menu-open { overflow: hidden; }
img, svg, video, picture { display: block; max-width: 100%; }
img { height: auto; }
svg { flex: none; }
button, input, select, textarea { font: inherit; color: inherit; letter-spacing: inherit; }
button { cursor: pointer; }
:where(ul, ol)[role="list"], :where(ul, ol).reset { list-style: none; margin: 0; padding: 0; }
address { font-style: normal; }
[hidden] { display: none !important; }
::selection { background: var(--orange); color: var(--navy); }

h1, h2, h3, h4, h5, h6 {
  margin: 0;
  font-weight: 800;
  line-height: var(--lh-head);
  letter-spacing: var(--tracking-head);
  color: var(--heading);
  text-wrap: balance;
}
h1, .h1 { font-size: var(--fs-h1); line-height: var(--lh-tight); letter-spacing: var(--tracking-tight); }
h2, .h2 { font-size: var(--fs-h2); line-height: 1.08; letter-spacing: var(--tracking-tight); }
h3, .h3 { font-size: var(--fs-h3); }
h4, .h4 { font-size: var(--fs-h4); letter-spacing: -.01em; }
p { margin: 0; text-wrap: pretty; }
p + p { margin-top: 1em; }
strong, b { font-weight: 700; }
small { font-size: var(--fs-sm); }

a { color: var(--link); text-decoration-thickness: 1.5px; text-underline-offset: .22em; }
a:hover { text-decoration-color: var(--orange); }

:focus-visible { outline: 3px solid var(--focus); outline-offset: 3px; border-radius: var(--r-xs); }
:focus:not(:focus-visible) { outline: none; }
/* <main id="contenu" tabindex="-1"> reçoit le focus du lien d'évitement : pas de cadre autour de toute la page */
main:focus, main:focus-visible { outline: none; }

/* Lien d'évitement */
.skip-link {
  position: fixed; left: 1rem; top: -100px; z-index: var(--z-skip);
  padding: .75rem 1.1rem; border-radius: var(--r-sm);
  background: var(--orange); color: var(--navy); font-weight: 700; text-decoration: none;
  transition: top var(--dur) var(--ease);
}
.skip-link:focus { top: 1rem; outline: 3px solid var(--white); }

/* --------------------------------------------------------------------------
   3. MISE EN PAGE
   -------------------------------------------------------------------------- */
.container {
  width: 100%;
  max-width: calc(var(--container) + 2 * var(--gutter));
  margin-inline: auto;
  padding-inline: var(--gutter);
}
.container--narrow { --container: 860px; }
.container--mid { --container: 1080px; }
.container--wide { --container: 1440px; }

main { display: block; }
.section {
  position: relative;
  padding-block: var(--section-y);
  background: var(--bg);
  color: var(--fg);
}
.section--tight { padding-block: calc(var(--section-y) * .62); }
.section--flush-top { padding-top: 0; }
.section--flush-bottom { padding-bottom: 0; }
.section--paper { --bg: var(--paper); }
.section--mist { --bg: var(--mist); }
.section--dark { --bg: var(--navy); }
.section--night { --bg: var(--night); }
.section--bordered { border-top: 1px solid var(--border); }
/* Motif nid d'abeille discret, en fond de section (sombre ou claire) */
.section--ruche { isolation: isolate; overflow: hidden; }
.section--ruche::before {
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: url("/assets/img/motifs/ruche-marine.svg") repeat;
  background-size: 48px 83.14px;
  -webkit-mask-image: radial-gradient(ellipse 70% 80% at 85% 20%, #000 0%, transparent 70%);
  mask-image: radial-gradient(ellipse 70% 80% at 85% 20%, #000 0%, transparent 70%);
}
.section--dark.section--ruche::before,
.section--night.section--ruche::before { background-image: url("/assets/img/motifs/ruche-clair.svg"); }
.section--ruche > * { position: relative; }

/* Grilles */
.grid { display: grid; gap: var(--gap); }
.grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.grid--auto { grid-template-columns: repeat(auto-fill, minmax(min(100%, 280px), 1fr)); }
@media (max-width: 1099px) { .grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .grid--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 719px) { .grid--2, .grid--3, .grid--4 { grid-template-columns: minmax(0, 1fr); } }

/* Grille 12 colonnes (≥ 960 px) */
.grid-12 { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--gap); }
.grid-12 > * { grid-column: 1 / -1; }
@media (min-width: 960px) {
  .span-3 { grid-column: span 3; } .span-4 { grid-column: span 4; } .span-5 { grid-column: span 5; }
  .span-6 { grid-column: span 6; } .span-7 { grid-column: span 7; } .span-8 { grid-column: span 8; }
  .span-9 { grid-column: span 9; } .span-12 { grid-column: 1 / -1; }
  .start-2 { grid-column-start: 2; } .start-7 { grid-column-start: 7; } .start-8 { grid-column-start: 8; }
}

/* Deux colonnes asymétriques */
.split {
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  gap: clamp(2rem, 1rem + 4vw, 5.5rem);
  align-items: start;
}
.split--even { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.split--wide-left { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
.split--narrow-left { grid-template-columns: minmax(0, 4fr) minmax(0, 8fr); }
/* Colonne étroite (≈ 400 px) : titre plafonné ; viser ≤ 25 caractères */
.split--narrow-left > :first-child h2 { font-size: clamp(1.95rem, 1.3rem + 1.6vw, 2.75rem); }
.split--center { align-items: center; }
.split__sticky { position: sticky; top: calc(var(--header-h) + 2rem); }
@media (max-width: 959px) {
  .split, .split--even, .split--wide-left, .split--narrow-left { grid-template-columns: minmax(0, 1fr); }
  .split__sticky { position: static; }
}

.stack > * + * { margin-top: var(--stack, 1rem); }
.stack--lg { --stack: 1.75rem; }
.stack--sm { --stack: .5rem; }
.cluster { display: flex; flex-wrap: wrap; align-items: center; gap: var(--cluster-gap, .75rem); }
.cluster--lg { --cluster-gap: 1rem 1.25rem; }

/* --------------------------------------------------------------------------
   4. TITRES DE SECTION
   -------------------------------------------------------------------------- */
.eyebrow {
  display: inline-flex; align-items: center; gap: .65rem;
  margin: 0 0 1.1rem;
  font-size: var(--fs-xs); font-weight: 750; line-height: 1.3;
  letter-spacing: var(--tracking-caps); text-transform: uppercase;
  color: var(--accent-text);
}
.eyebrow::before {
  content: ""; flex: none; width: 10px; height: 11.55px;
  background: var(--orange); clip-path: var(--hexagon);
}
.eyebrow--plain::before { display: none; }
.eyebrow--brand { font-family: var(--font-brand); font-weight: 400; font-size: .75rem; letter-spacing: .2em; line-height: 1.7; }
.section-head { max-width: 780px; margin-bottom: clamp(2.5rem, 1.8rem + 2.5vw, 4rem); }
.section-head > h2 + p, .section-head > h2 + .lead { margin-top: 1.25rem; }
.section-head--center { margin-inline: auto; text-align: center; }
.section-head--center .eyebrow { justify-content: center; }
.section-head--split {
  max-width: none;
  display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, .85fr);
  gap: 1.5rem clamp(2rem, 5vw, 6rem); align-items: end;
}
.section-head--split .section-head__aside { padding-bottom: .35rem; }
.section-head--split .section-head__aside > * + * { margin-top: 1.25rem; }
@media (max-width: 959px) { .section-head--split { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 559px) { .section-head { margin-bottom: 2rem; } }
.lead { font-size: var(--fs-lead); line-height: 1.6; color: var(--fg-2); font-weight: 450; }
.text-accent { color: var(--accent-text); }
.text-orange { color: var(--orange); }   /* grands titres uniquement (≥ 24 px) */
.muted { color: var(--fg-3); }
.title-display { font-size: var(--fs-display); line-height: 1.02; letter-spacing: -.038em; font-weight: 800; }

/* --------------------------------------------------------------------------
   5. BOUTONS ET LIENS FLÉCHÉS
   -------------------------------------------------------------------------- */
.btn {
  --btn-bg: var(--surface-2);
  --btn-fg: var(--fg);
  --btn-bd: transparent;
  position: relative;
  display: inline-flex; align-items: center; justify-content: center; gap: .6rem;
  min-height: 48px; padding: .7rem 1.35rem;
  border: 1.5px solid var(--btn-bd); border-radius: var(--r-sm);
  background: var(--btn-bg); color: var(--btn-fg);
  font-size: 1rem; font-weight: 700; line-height: 1.2; letter-spacing: -.005em;
  text-decoration: none; text-align: center; white-space: nowrap;
  transition: background-color var(--dur) var(--ease), color var(--dur) var(--ease),
              border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease), transform var(--dur) var(--ease);
}
.btn:hover { text-decoration: none; }
.btn:active { transform: translateY(1px); }
.btn[disabled], .btn[aria-disabled="true"] { opacity: .6; cursor: not-allowed; }
/* Primaire : fond orange, texte BLEU MARINE (5,1:1) */
.btn--primary { --btn-bg: var(--orange); --btn-fg: var(--navy); --btn-bd: var(--orange); }
.btn--primary:hover { --btn-bg: var(--orange-light); --btn-bd: var(--orange-light); box-shadow: 0 10px 30px -12px rgba(255, 118, 24, .7); }
/* Secondaire : marine plein (sur fond clair) */
.btn--secondary { --btn-bg: var(--navy); --btn-fg: var(--white); --btn-bd: var(--navy); }
.btn--secondary:hover { --btn-bg: var(--navy-500); --btn-bd: var(--navy-500); }
/* Fantôme : contour, s'adapte au fond (rôles) */
.btn--ghost { --btn-bg: transparent; --btn-fg: var(--fg); --btn-bd: var(--border-2); }
.btn--ghost:hover { --btn-bd: var(--fg); --btn-bg: var(--surface-2); }
/* Sur fond sombre : contour clair */
.btn--on-dark { --btn-bg: rgba(255, 255, 255, .04); --btn-fg: var(--white); --btn-bd: rgba(255, 255, 255, .34); }
.btn--on-dark:hover { --btn-bg: rgba(255, 255, 255, .1); --btn-bd: var(--white); }
.btn--sm { min-height: 40px; padding: .5rem 1rem; font-size: var(--fs-sm); }
.btn--lg { min-height: 56px; padding: .95rem 1.7rem; font-size: 1.0625rem; }
.btn--block { display: flex; width: 100%; }
.btn__arrow { width: 18px; height: 18px; transition: transform var(--dur) var(--ease); }
.btn:hover .btn__arrow, .btn:focus-visible .btn__arrow { transform: translateX(3px); }
.btn__arrow--down { transform: rotate(90deg); }
.btn:hover .btn__arrow--down { transform: rotate(90deg) translateX(3px); }
.btn-row { display: flex; flex-wrap: wrap; gap: .75rem 1rem; align-items: center; }
@media (max-width: 479px) {
  .btn-row--stack { flex-direction: column; align-items: stretch; }
  .btn-row--stack .btn { width: 100%; white-space: normal; }
  .btn--lg { padding-inline: 1.1rem; font-size: 1rem; }
}

.link-arrow {
  display: inline-flex; align-items: center; gap: .5rem;
  font-weight: 700; color: var(--link);
  text-decoration: underline; text-decoration-color: transparent;
  text-decoration-thickness: 2px; text-underline-offset: .32em;
  transition: text-decoration-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
.link-arrow svg { width: 18px; height: 18px; color: var(--accent-text); transition: transform var(--dur) var(--ease); }
.link-arrow:hover, .link-arrow:focus-visible { text-decoration-color: var(--orange); }
.link-arrow:hover svg, .link-arrow:focus-visible svg { transform: translateX(4px); }
.link-arrow--sm { font-size: var(--fs-sm); }
/* Cibles tactiles ≥ 44 px : téléphone, tablette et tout écran tactile.
   Seulement les vrais liens (pas les <span class="link-arrow"> décoratifs des cartes). */
@media (max-width: 959px), (pointer: coarse) {
  a.link-arrow { min-height: 44px; }
}

/* --------------------------------------------------------------------------
   6. HEXAGONES
   -------------------------------------------------------------------------- */
/* Tuile d'icône hexagonale : <span class="hex"><svg class="icon">…</svg></span> */
.hex {
  --hex-size: 56px;
  position: relative; flex: none;
  display: inline-grid; place-items: center;
  width: var(--hex-size); height: calc(var(--hex-size) * 1.1547);
  color: var(--hex-fg);
}
.hex::before, .hex::after { content: ""; position: absolute; clip-path: var(--hexagon); transition: background-color var(--dur) var(--ease); }
.hex::before { inset: 0; background: var(--hex-bd); }
.hex::after { inset: 1.5px; background: var(--hex-bg); }
.hex > svg, .hex > .icon { position: relative; z-index: 1; width: 46%; height: auto; }
.hex--sm { --hex-size: 40px; }
.hex--lg { --hex-size: 76px; }
.hex--xl { --hex-size: 104px; }
.hex--solid { --hex-bg: var(--orange); --hex-bd: var(--orange); --hex-fg: var(--navy); }
.hex--navy { --hex-bg: var(--navy); --hex-bd: var(--navy); --hex-fg: var(--orange); }
.hex--num { font-weight: 800; font-size: calc(var(--hex-size) * .3); letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.hex--num > span { position: relative; z-index: 1; }

/* Icônes SVG en ligne : trait 1,75 px, couleur du texte */
.icon { width: 24px; height: 24px; fill: none; stroke: currentColor; stroke-width: 1.75; stroke-linecap: round; stroke-linejoin: round; }
.icon--sm { width: 18px; height: 18px; }
.icon--lg { width: 32px; height: 32px; }

/* Motif nid d'abeille seul (bloc décoratif) */
.ruche { background: url("/assets/img/motifs/ruche-marine.svg") repeat; background-size: 48px 83.14px; }
.theme-dark .ruche, .ruche--clair { background-image: url("/assets/img/motifs/ruche-clair.svg"); }
.ruche--orange { background-image: url("/assets/img/motifs/ruche-orange.svg"); }

/* --------------------------------------------------------------------------
   7. EN-TÊTE
   L'en-tête est FIXE et transparent sur le héros sombre ; il devient opaque
   (.is-scrolled, posé par site.js) dès que la page défile.
   Page sans héros sombre : ajouter .site-header--solid sur <header>.
   -------------------------------------------------------------------------- */
.site-header {
  --fg: var(--on-dark); --focus: var(--orange-light);
  position: fixed; inset: 0 0 auto 0; z-index: var(--z-header);
  height: var(--header-h);
  color: var(--on-dark);
  border-bottom: 1px solid transparent;
  transition: background-color .35s var(--ease), border-color .35s var(--ease), box-shadow .35s var(--ease);
}
.site-header::before {   /* voile très léger pour garder le menu lisible sur n'importe quelle image */
  content: ""; position: absolute; inset: 0 0 -30px 0; pointer-events: none; z-index: -1;
  background: linear-gradient(to bottom, rgba(6, 25, 43, .55), rgba(6, 25, 43, 0));
  transition: opacity .35s var(--ease);
}
.site-header.is-scrolled,
.site-header--solid,
.site-header.is-mega-open,
body.menu-open .site-header {
  background: rgba(6, 25, 43, .97);   /* bleu nuit franc : à .93 sur fond blanc, il virait au gris ardoise */
  border-bottom-color: rgba(255, 255, 255, .08);
  box-shadow: 0 10px 30px -18px rgba(0, 0, 0, .6);
}
@supports ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
  .site-header.is-scrolled, .site-header--solid {
    background: rgba(6, 25, 43, .97);
    -webkit-backdrop-filter: saturate(150%) blur(16px);
    backdrop-filter: saturate(150%) blur(16px);
  }
}
.site-header.is-scrolled::before, .site-header--solid::before, .site-header.is-mega-open::before, body.menu-open .site-header::before { opacity: 0; }
.site-header__inner { height: 100%; display: flex; align-items: center; gap: 1.5rem; }

.brand { display: inline-flex; align-items: center; flex: none; min-height: 44px; border-radius: var(--r-xs); }
.brand img { height: 42px; width: auto; }
@media (max-width: 1279px) { .brand img { height: 36px; } }

.nav { margin-left: auto; display: flex; align-items: center; }
.nav__list { display: flex; align-items: center; gap: .125rem; margin: 0; padding: 0; list-style: none; }
.nav__link {
  position: relative;
  display: inline-flex; align-items: center; gap: .35rem;
  height: 44px; padding: 0 .8rem;
  border: 0; border-radius: var(--r-sm); background: transparent;
  color: rgba(255, 255, 255, .86);
  font-size: .9375rem; font-weight: 600; letter-spacing: -.005em; white-space: nowrap;
  text-decoration: none;
  transition: color var(--dur) var(--ease), background-color var(--dur) var(--ease);
}
.nav__link:hover, .nav__link[aria-expanded="true"] { color: var(--white); background: rgba(255, 255, 255, .07); }
.nav__link::after {
  content: ""; position: absolute; left: .8rem; right: .8rem; bottom: 4px; height: 2px;
  background: var(--orange); border-radius: 2px;
  transform: scaleX(0); transform-origin: left; transition: transform .3s var(--ease);
}
.nav__link[aria-current="page"], .nav__trigger.is-current { color: var(--white); }
.nav__link[aria-current="page"]::after, .nav__trigger.is-current::after { transform: scaleX(1); }
.nav__chevron { width: 14px; height: 14px; transition: transform .25s var(--ease); }
.nav__trigger[aria-expanded="true"] .nav__chevron { transform: rotate(180deg); }

.header-actions { display: flex; align-items: center; gap: .75rem; margin-left: .5rem; }
.header-cta { min-height: 42px; padding: .55rem 1.05rem; font-size: .9375rem; }
/* Un seul bouton primaire par zone visible : tant que l'en-tête est transparent (au-dessus
   du héros, qui porte déjà le bouton orange), le bouton d'en-tête est en contour. Il
   redevient orange dès que la page défile (.is-scrolled) ou que le méga-menu est ouvert. */
.site-header:not(.is-scrolled):not(.is-mega-open):not(.site-header--solid) .header-cta { --btn-bg: transparent; --btn-fg: var(--white); --btn-bd: rgba(255, 255, 255, .34); box-shadow: none; }
.site-header:not(.is-scrolled):not(.is-mega-open):not(.site-header--solid) .header-cta:hover { --btn-bg: var(--orange); --btn-fg: var(--navy); --btn-bd: var(--orange); }
/* Sur /contact.html, le bouton mène à la page elle-même (aria-current posé par propager-partials) :
   masqué, pour ne pas doubler le bouton orange « Envoyer le message ». Même règle au pied (§24). */
.header-cta[aria-current="page"] { display: none; }

/* Sélecteur de langue FR / EN */
.lang-switch {
  display: inline-flex; align-items: center; gap: 2px; padding: 3px;
  border: 1px solid rgba(255, 255, 255, .24); border-radius: var(--r-pill);
}
.lang-switch button {
  min-width: 36px; height: 30px; padding: 0 .55rem;
  border: 0; border-radius: var(--r-pill); background: transparent;
  color: rgba(255, 255, 255, .78); font-size: .75rem; font-weight: 800; letter-spacing: .08em;
  transition: background-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
.lang-switch button:hover { color: var(--white); }
.lang-switch button[aria-pressed="true"] { background: var(--white); color: var(--navy); }

/* Bouton du menu mobile */
.burger {
  display: none;
  align-items: center; justify-content: center; gap: .55rem;
  min-width: 44px; height: 44px; padding: 0 .75rem; margin-left: auto;
  border: 1px solid rgba(255, 255, 255, .26); border-radius: var(--r-sm);
  background: transparent; color: var(--white);
  font-size: .875rem; font-weight: 700;
}
.burger__lines { position: relative; width: 18px; height: 12px; }
.burger__lines span {
  position: absolute; left: 0; width: 100%; height: 2px; border-radius: 2px; background: currentColor;
  transition: transform .3s var(--ease), opacity .2s var(--ease), top .3s var(--ease);
}
.burger__lines span:nth-child(1) { top: 0; }
.burger__lines span:nth-child(2) { top: 5px; }
.burger__lines span:nth-child(3) { top: 10px; }
.burger[aria-expanded="true"] .burger__lines span:nth-child(1) { top: 5px; transform: rotate(45deg); }
.burger[aria-expanded="true"] .burger__lines span:nth-child(2) { opacity: 0; }
.burger[aria-expanded="true"] .burger__lines span:nth-child(3) { top: 5px; transform: rotate(-45deg); }

@media (max-width: 1279px) {
  .nav, .header-actions { display: none; }
  .burger { display: inline-flex; }
  /* Sans JavaScript, le bouton Menu ne peut rien ouvrir : il cède la place à un lien de même
     aspect (a.burger.nav-fallback) vers le plan du site du pied de page (#plan-du-site). */
  .js .nav-fallback, html:not(.js) button.burger { display: none; }
}
.burger.nav-fallback { text-decoration: none; }
@media (max-width: 379px) { .burger__label { display: none; } }
/* Sans JavaScript, ≥ 1280 px : le méga-menu s'ouvre au survol et au clavier (focus) */
@media (min-width: 1280px) {
  html:not(.js) [data-mega]:hover .mega,
  html:not(.js) [data-mega]:focus-within .mega { opacity: 1; visibility: visible; transform: none; transition-delay: 0s; }
}

/* --------------------------------------------------------------------------
   8. MÉGA-MENU « EXPERTISES »  (dans <header> : position absolue sous l'en-tête)
   -------------------------------------------------------------------------- */
.mega {
  position: absolute; left: 0; right: 0; top: 100%;
  z-index: var(--z-mega);
  --fg: var(--ink); --fg-2: var(--ink-2); --fg-3: var(--ink-3); --heading: var(--navy);
  --border: var(--line); --accent-text: var(--orange-dark); --link: var(--navy); --focus: var(--navy);
  --hex-bg: var(--orange-tint); --hex-bd: rgba(255, 118, 24, .38); --hex-fg: var(--navy);
  background: var(--white); color: var(--ink);
  border-top: 1px solid var(--line);
  box-shadow: 0 40px 80px -30px rgba(6, 25, 43, .55);
  opacity: 0; visibility: hidden; transform: translateY(-6px);
  transition: opacity .22s var(--ease), transform .3s var(--ease-out), visibility 0s linear .3s;
}
.mega.is-open { opacity: 1; visibility: visible; transform: none; transition-delay: 0s; }
.mega__inner {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr)) minmax(0, 1.08fr);
  gap: 2rem 2.25rem;
  padding-block: 2.25rem 2.5rem;
}
.mega__label {
  display: flex; align-items: center; gap: .55rem;
  margin: 0 0 .9rem; padding-bottom: .8rem; border-bottom: 1px solid var(--line);
  font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps); text-transform: uppercase;
  color: var(--orange-dark);
}
.mega__label::before { content: ""; width: 8px; height: 9.24px; background: var(--orange); clip-path: var(--hexagon); }
.mega__list { list-style: none; margin: 0; padding: 0; display: grid; gap: .25rem; }
.mega__link {
  display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .9rem; align-items: start;
  padding: .75rem .8rem; margin-inline: -.8rem;
  border-radius: var(--r-md); text-decoration: none; color: var(--ink);
  transition: background-color var(--dur) var(--ease);
}
.mega__link:hover, .mega__link:focus-visible { background: var(--mist); }
.mega__link .hex { --hex-size: 38px; margin-top: .1rem; }
.mega__link:hover .hex { --hex-bg: var(--orange); --hex-bd: var(--orange); }
.mega__title { display: block; font-weight: 750; font-size: 1rem; line-height: 1.3; color: var(--navy); letter-spacing: -.01em; }
.mega__desc { display: block; margin-top: .2rem; font-size: .875rem; line-height: 1.45; color: var(--ink-3); }
.mega__link[aria-current="page"] { background: var(--orange-tint); }
.mega__link[aria-current="page"] .mega__title { color: var(--orange-dark); }
.mega__card {
  position: relative; overflow: hidden; isolation: isolate;
  display: flex; flex-direction: column; gap: .8rem;
  padding: 1.6rem 1.6rem 1.5rem; border-radius: var(--r-lg);
  background: var(--navy); color: var(--on-dark);
  --fg: var(--on-dark); --link: var(--on-dark); --accent-text: var(--orange-light); --focus: var(--orange-light);
}
.mega__card::before {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background: url("/assets/img/motifs/ruche-clair.svg") repeat; background-size: 36px 62.35px;
  -webkit-mask-image: linear-gradient(200deg, #000 10%, transparent 70%); mask-image: linear-gradient(200deg, #000 10%, transparent 70%);
}
.mega__card::after {
  content: ""; position: absolute; right: -40px; top: -40px; width: 160px; height: 160px; z-index: -1;
  background: radial-gradient(circle, rgba(255, 118, 24, .45), transparent 65%);
}
.mega__card-title { font-size: 1.25rem; font-weight: 800; letter-spacing: -.02em; color: var(--white); }
.mega__card-text { font-size: .9375rem; line-height: 1.5; color: var(--on-dark-2); }
.mega__card-links { margin-top: auto; display: grid; gap: .55rem; padding-top: .4rem; }
.mega__card .link-arrow svg { color: var(--orange-light); }
.mega__foot {
  grid-column: 1 / -1;
  display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 1rem;
  padding-top: 1.25rem; border-top: 1px solid var(--line);
  font-size: .875rem; color: var(--ink-3);
}

/* --------------------------------------------------------------------------
   9. MENU MOBILE PLEIN ÉCRAN  (HORS de <header> : le flou casse position:fixed)
   -------------------------------------------------------------------------- */
.mobile-menu {
  position: fixed; inset: 0; z-index: var(--z-mobile);
  display: flex; flex-direction: column;
  padding: calc(var(--header-h) + 1rem) var(--gutter) calc(1.75rem + env(safe-area-inset-bottom));
  background: var(--night);
  overflow-y: auto; overscroll-behavior: contain;
  opacity: 0; visibility: hidden;
  transition: opacity .28s var(--ease), visibility 0s linear .28s;
}
.mobile-menu::before {
  content: ""; position: fixed; inset: 0; z-index: -1; pointer-events: none;
  background: url("/assets/img/motifs/ruche-clair.svg") repeat; background-size: 48px 83.14px;
  -webkit-mask-image: radial-gradient(ellipse 80% 50% at 100% 100%, #000, transparent 70%);
  mask-image: radial-gradient(ellipse 80% 50% at 100% 100%, #000, transparent 70%);
}
.mobile-menu.is-open { opacity: 1; visibility: visible; transition-delay: 0s; }
.mobile-menu__nav { flex: 1 0 auto; }
.mobile-menu__list { list-style: none; margin: 0; padding: 0; }
.mobile-menu__list > li { border-bottom: 1px solid var(--line-dark); }
.mobile-menu__link, .mobile-menu__acc > summary {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  min-height: 60px; padding: .6rem 0;
  color: var(--white); text-decoration: none;
  font-size: 1.3125rem; font-weight: 750; letter-spacing: -.02em;
  list-style: none; cursor: pointer;
}
.mobile-menu__acc > summary::-webkit-details-marker { display: none; }
.mobile-menu__link[aria-current="page"] { color: var(--orange-light); }
.mobile-menu__chev { width: 20px; height: 20px; color: var(--orange-light); transition: transform .25s var(--ease); }
.mobile-menu__acc[open] .mobile-menu__chev { transform: rotate(180deg); }
.mobile-menu__group { padding: .25rem 0 1rem; }
.mobile-menu__group-label {
  margin: .9rem 0 .35rem; font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps);
  text-transform: uppercase; color: var(--orange-light);
}
.mobile-menu__sub { list-style: none; margin: 0; padding: 0; }
.mobile-menu__sub a {
  display: flex; align-items: center; min-height: 44px; padding: .35rem 0 .35rem .9rem;
  border-left: 2px solid var(--line-dark);
  color: var(--on-dark-2); font-size: 1.0625rem; font-weight: 600; text-decoration: none;
}
.mobile-menu__sub a:hover, .mobile-menu__sub a[aria-current="page"] { color: var(--white); border-left-color: var(--orange); }
.mobile-menu__foot { display: grid; gap: 1.1rem; padding-top: 1.75rem; }
.mobile-menu__meta { display: flex; align-items: center; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }
.mobile-menu__mail { color: var(--on-dark-2); font-weight: 600; text-decoration: none; min-height: 44px; display: inline-flex; align-items: center; }
.mobile-menu__mail:hover { color: var(--white); }
@media (min-width: 1280px) { .mobile-menu { display: none; } }

/* --------------------------------------------------------------------------
   10. HÉROS D'ACCUEIL
   -------------------------------------------------------------------------- */
.hero {
  position: relative; isolation: isolate; overflow: hidden;
  display: flex; flex-direction: column;
  min-height: clamp(680px, 100svh, 960px);
  padding-top: calc(var(--header-h) + clamp(2.5rem, 7.5vh, 6rem));
  padding-bottom: clamp(1.75rem, 3vw, 2.5rem);
  background: var(--night);
}
.hero__media { position: absolute; inset: 0; z-index: -3; }
.hero__media picture, .hero__media img { position: absolute; inset: 0; width: 100%; height: 100%; }
.hero__media img { object-fit: cover; object-position: 70% 45%; }
@media (min-width: 1200px) { .hero__media { left: 9%; } .hero__glow { left: 72%; } }
@media (min-width: 720px) and (max-width: 1199px) { .hero__media { left: 22%; } .hero__glow { left: 75%; } }
.hero__media::after {   /* lisibilité du texte : voile à gauche et en bas */
  content: ""; position: absolute; inset: 0;
  background:
    linear-gradient(90deg, rgba(6, 25, 43, .97) 0%, rgba(6, 25, 43, .9) 26%, rgba(6, 25, 43, .45) 52%, rgba(6, 25, 43, 0) 72%),
    linear-gradient(0deg, rgba(6, 25, 43, .96) 0%, rgba(6, 25, 43, 0) 34%);
}
/* lueur qui « respire » sur l'alvéole orange du visuel (décorative) */
.hero__glow {
  position: absolute; left: 69%; top: 42%; width: 34vw; height: 34vw; max-width: 560px; max-height: 560px;
  transform: translate(-50%, -50%); border-radius: 50%; z-index: 1; pointer-events: none;
  background: radial-gradient(circle, rgba(255, 118, 24, .38) 0%, rgba(255, 118, 24, .1) 40%, transparent 68%);
  mix-blend-mode: screen; opacity: .55;
  animation: hero-breathe 7s ease-in-out infinite;
}
@keyframes hero-breathe { 0%, 100% { opacity: .35; transform: translate(-50%, -50%) scale(.94); } 50% { opacity: .75; transform: translate(-50%, -50%) scale(1.04); } }
.hero__ruche {
  position: absolute; inset: 0; z-index: -2; pointer-events: none;
  background: url("/assets/img/motifs/ruche-clair.svg") repeat; background-size: 48px 83.14px;
  -webkit-mask-image: radial-gradient(ellipse 55% 70% at 8% 30%, rgba(0, 0, 0, .9), transparent 72%);
  mask-image: radial-gradient(ellipse 55% 70% at 8% 30%, rgba(0, 0, 0, .9), transparent 72%);
}
.hero__inner { flex: 1; display: flex; flex-direction: column; justify-content: space-between; gap: clamp(2.5rem, 6vh, 5rem); }
.hero__content { max-width: 760px; }
.hero__title { font-size: var(--fs-display); line-height: 1.01; letter-spacing: -.04em; font-weight: 800; color: var(--white); }
.hero__title > span { display: block; }
.hero__accent { color: var(--orange); }
.hero__lead { max-width: 660px; margin-top: clamp(1.4rem, 2.5vw, 2rem); font-size: var(--fs-lead); line-height: 1.6; color: var(--on-dark-2); }
.hero__actions { margin-top: clamp(1.75rem, 3vw, 2.5rem); }
/* Faits vérifiés (bas du héros) */
.hero__facts {
  list-style: none; margin: 0; padding: 0;
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  border-top: 1px solid var(--line-dark-2);
}
.fact { padding: 1.35rem 1.5rem 0 0; display: flex; flex-direction: column; gap: .3rem; }
.fact + .fact { padding-left: 1.5rem; border-left: 1px solid var(--line-dark); }
.fact__value { font-size: clamp(1.75rem, 1.3rem + 1.5vw, 2.5rem); font-weight: 800; line-height: 1.05; letter-spacing: -.03em; color: var(--white); font-variant-numeric: tabular-nums; }
.fact__value .unit { color: var(--orange); }
.fact__label { font-size: var(--fs-sm); line-height: 1.45; color: var(--on-dark-2); max-width: 30ch; text-wrap: balance; }
/* Animation d'entrée du héros (CSS seul : visible même sans JavaScript) */
.hero-in { animation: hero-in .9s var(--ease-out) both; }
.hero-in.d-1 { animation-delay: .08s; } .hero-in.d-2 { animation-delay: .16s; } .hero-in.d-3 { animation-delay: .24s; }
.hero-in.d-4 { animation-delay: .32s; } .hero-in.d-5 { animation-delay: .44s; } .hero-in.d-6 { animation-delay: .56s; }
@keyframes hero-in { from { opacity: 0; transform: translateY(22px); } to { opacity: 1; transform: none; } }
.hero__media img { animation: hero-zoom 2.4s var(--ease-out) both; }
@keyframes hero-zoom { from { transform: scale(1.06); opacity: .4; } to { transform: none; opacity: 1; } }

@media (max-width: 719px) {
  .hero { min-height: 0; padding-top: calc(var(--header-h) + min(62vw, 300px)); }
  .hero__media { inset: 0 0 auto 0; height: min(118vw, 560px); }
  .hero__media img { object-position: 58% 40%; }
  .hero__media::after {
    background:
      linear-gradient(0deg, var(--night) 0%, rgba(6, 25, 43, .88) 30%, rgba(6, 25, 43, .25) 62%, rgba(6, 25, 43, .5) 100%);
  }
  .hero__glow { left: 58%; top: 34%; width: 90vw; height: 90vw; }
  .hero__ruche { -webkit-mask-image: linear-gradient(180deg, transparent 30%, rgba(0, 0, 0, .7) 70%, transparent); mask-image: linear-gradient(180deg, transparent 30%, rgba(0, 0, 0, .7) 70%, transparent); }
  .hero__inner { gap: 2.5rem; }
  .hero__facts { grid-template-columns: minmax(0, 1fr); }
  .fact, .fact + .fact { display: grid; grid-template-columns: 7.75rem minmax(0, 1fr); align-items: baseline; gap: 1rem; padding: .9rem 0; border-left: 0; }
  .fact + .fact { border-top: 1px solid var(--line-dark); }
  .fact__value { font-size: 1.375rem; }
}
/* Sur-titre Michroma sur 2 lignes (390 px) : lignes équilibrées, puce alignée sur la 1re ligne */
@media (max-width: 479px) {
  .hero .eyebrow--brand { align-items: flex-start; text-wrap: balance; }
  .hero .eyebrow--brand::before { margin-top: calc((1.7em - 11.55px) / 2); }
}

/* --------------------------------------------------------------------------
   11. HÉROS COMPACT DE PAGE + FIL D'ARIANE
   -------------------------------------------------------------------------- */
.page-hero {
  position: relative; isolation: isolate; overflow: hidden;
  padding-top: calc(var(--header-h) + clamp(1.5rem, 3vw, 2.5rem));
  padding-bottom: clamp(3.5rem, 2rem + 4vw, 6rem);
  background: var(--night);
}
/* Pas de photo dans les héros de page : le visuel fort (photo nid d'abeille) est réservé au
   héros d'accueil (.hero) et au bandeau d'appel final (.cta-band). Ici : motif + lueur. */
.page-hero::before {   /* motif nid d'abeille, à droite */
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: url("/assets/img/motifs/ruche-clair.svg") repeat; background-size: 48px 83.14px;
  -webkit-mask-image: radial-gradient(ellipse 55% 90% at 100% 20%, #000, transparent 70%);
  mask-image: radial-gradient(ellipse 55% 90% at 100% 20%, #000, transparent 70%);
}
.page-hero::after {    /* lueur orange discrète, en haut à droite */
  content: ""; position: absolute; right: -12%; top: -30%; width: 760px; height: 760px; z-index: -2; pointer-events: none;
  background: radial-gradient(closest-side, rgba(255, 118, 24, .26), rgba(255, 118, 24, .08) 45%, transparent 72%);
}
/* Colonnes calées en haut : le sur-titre et le titre tombent au même endroit sur toutes les pages,
   quelle que soit la hauteur de l'encadré « En bref ». */
.page-hero__grid {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 400px);
  gap: clamp(2rem, 5vw, 5rem); align-items: start;
  margin-top: clamp(1.75rem, 3vw, 2.75rem);
}
.page-hero__grid--single { grid-template-columns: minmax(0, 820px); }
.page-hero__title { font-size: var(--fs-h1); line-height: 1.04; letter-spacing: -.035em; color: var(--white); }
.page-hero__lead { margin-top: 1.4rem; max-width: 640px; font-size: var(--fs-lead); line-height: 1.6; color: var(--on-dark-2); }
.page-hero__actions { margin-top: 2rem; }
.page-hero__aside {
  margin-top: .4rem;
  padding: 1.6rem 1.6rem 1.4rem; border-radius: var(--r-lg);
  background: rgba(7, 30, 51, .72); border: 1px solid var(--line-dark-2);
}
@supports ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
  .page-hero__aside { background: rgba(7, 30, 51, .55); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); }
}
.page-hero__aside-title { margin-bottom: 1rem; font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--orange-light); }
.facts-list { margin: 0; display: grid; gap: 0; }
.facts-list > div { display: grid; gap: .2rem; padding: .8rem 0; border-top: 1px solid var(--line-dark); }
.facts-list > div:first-child { border-top: 0; padding-top: 0; }
.facts-list dt { font-size: .8125rem; font-weight: 700; color: var(--on-dark-3); }
.facts-list dd { margin: 0; font-size: .9375rem; line-height: 1.5; color: var(--white); font-weight: 600; text-wrap: balance; }
/* Sous 960 px, l'encadré passe sous le titre : faits sur 2 colonnes (même comportement sur toutes
   les pages). Sous 560 px : encadré resserré, sans son titre, et sans la ligne « Point de départ »
   (div.facts-list__start), redondante avec le bouton du héros. */
@media (max-width: 959px) {
  .page-hero__grid { grid-template-columns: minmax(0, 1fr); }
  .page-hero__aside { margin-top: 0; }
  .page-hero__aside .facts-list { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 1.5rem; }
  .page-hero__aside .facts-list > div { align-content: start; }
  .page-hero__aside .facts-list > div:nth-child(2) { border-top: 0; padding-top: 0; }
  .page-hero::after { right: -40%; top: -20%; width: 560px; height: 560px; }
}
@media (max-width: 559px) {
  .page-hero__aside { padding: 1.1rem 1.2rem; }
  .page-hero__aside-title { display: none; }
  .page-hero__aside .facts-list__start { display: none; }
  .page-hero__aside .facts-list > div:has(+ .facts-list__start) { grid-column: 1 / -1; }   /* 3 faits : le dernier sur toute la largeur */
  .page-hero__aside .facts-list dd { font-size: .875rem; line-height: 1.45; }
}

.breadcrumb ol { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; align-items: center; gap: .15rem .5rem; font-size: .875rem; }
.breadcrumb li { display: inline-flex; align-items: center; gap: .5rem; color: var(--on-dark-3); }
.breadcrumb li + li::before {
  content: ""; width: 6px; height: 6.93px; background: var(--orange); clip-path: var(--hexagon); opacity: .9;
}
.breadcrumb a { color: var(--on-dark-2); text-decoration: none; font-weight: 600; display: inline-flex; min-height: 32px; align-items: center; }
@media (max-width: 719px) { .breadcrumb a { min-height: 44px; } }   /* cible tactile ≥ 44 px */
.breadcrumb a:hover { color: var(--white); text-decoration: underline; text-decoration-color: var(--orange); }
.breadcrumb [aria-current="page"] { color: var(--white); font-weight: 700; }

/* --------------------------------------------------------------------------
   12. RÉFÉRENTIELS (accueil, sous le héros) : liste STATIQUE groupée
   <section class="ref-band"> <div class="container ref-band__inner"> <div> titre + note </div>
   <div class="ref-groups"> <div class="ref-group"> <p class="ref-group__label" id="…">Normes ISO</p>
   <ul class="chips chips--compact" aria-labelledby="…"> <li class="chip chip--plain">ISO/IEC 27001:2022</li>
   Pas de défilement (WCAG 2.2.2) ni de sigles en gras façon « barre de logos » : ce sont des
   outils de travail, pas des certifications (mention OBLIGATOIRE, .ref-band__note).
   -------------------------------------------------------------------------- */
/* Fond papier : bande distincte entre le bandeau des références (blanc) et les expertises (blanc) */
.ref-band { background: var(--paper); }
.ref-band__inner { display: grid; grid-template-columns: minmax(0, 300px) minmax(0, 1fr); gap: 1.5rem clamp(2rem, 4vw, 4rem); align-items: start; padding-block: clamp(1.75rem, 1.4rem + 1.2vw, 2.5rem); }
.ref-band__title { margin: 0; font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--orange-dark); }
.ref-band__note { margin-top: .5rem; font-size: var(--fs-sm); line-height: 1.55; color: var(--ink-2); max-width: 34ch; }
.ref-groups { display: grid; gap: .85rem; }
.ref-group { display: grid; grid-template-columns: minmax(0, 9.5rem) minmax(0, 1fr); gap: .5rem 1.25rem; align-items: baseline; }
.ref-group + .ref-group { padding-top: .85rem; border-top: 1px solid var(--line); }
.ref-group__label { margin: 0; font-size: .8125rem; font-weight: 700; line-height: 1.4; color: var(--ink-3); }
.chips--compact { gap: .4rem; }
.chips--compact .chip { min-height: 32px; padding: .3rem .75rem; font-size: .8125rem; font-weight: 700; color: var(--navy); background: var(--surface); border-color: var(--line-2); }
@media (max-width: 959px) { .ref-band__inner { grid-template-columns: minmax(0, 1fr); } .ref-band__note { max-width: none; } }
@media (max-width: 559px) {
  .ref-band__inner { gap: 1.1rem; }
  .ref-groups, .ref-group + .ref-group { gap: .65rem; }
  .ref-group + .ref-group { padding-top: .65rem; }
  .ref-group { grid-template-columns: minmax(0, 1fr); gap: .4rem; }
  .chips--compact { gap: .35rem; }
  .chips--compact .chip { min-height: 30px; padding: .25rem .65rem; font-size: .78125rem; }
}

/* --------------------------------------------------------------------------
   12 bis. RÉFÉRENCES ET PARTENAIRE (accueil, juste sous le héros)
   Logos officiels, non retouchés. Hauteurs réglées logo par logo pour un poids visuel égal.
   -------------------------------------------------------------------------- */
.trust-band { background: var(--white); border-bottom: 1px solid var(--line); }
.trust-band__inner { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: start; gap: 1.25rem clamp(2rem, 5vw, 5rem); padding-block: clamp(1.4rem, 1.1rem + 1vw, 2.1rem); }
.trust-band__refs { display: flex; flex-direction: column; align-items: flex-start; gap: .6rem; }
.trust-band__label { margin: 0; font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--orange-dark); white-space: nowrap; }
.trust-band__logos { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem clamp(1.5rem, 2.6vw, 2.5rem); min-height: 56px; margin: 0; padding: 0; list-style: none; }
.trust-band__logo { display: flex; align-items: center; height: 56px; }
.trust-band__logo img { display: block; width: auto; height: var(--logo-h, 38px); }
.trust-band__logo--bnp   { --logo-h: 33px; }
.trust-band__logo--sofac { --logo-h: 38px; }
.trust-band__logo--saham { --logo-h: 42px; }
.trust-band__logo--uir   { --logo-h: 56px; }
.trust-band__logo--uir img { border-radius: var(--r-xs); }
.trust-band__logo--cmim  { --logo-h: 44px; }
.trust-band__partner { display: grid; grid-template-columns: auto auto; justify-content: start; align-items: center; gap: .45rem 1.1rem; padding-left: clamp(1.5rem, 3vw, 3rem); border-left: 1px solid var(--line); }
.trust-band__partner .trust-band__label { grid-column: 1 / -1; }
.trust-band__partner-link { display: inline-flex; align-items: center; min-height: 44px; border-radius: var(--r-sm); transition: opacity var(--dur) var(--ease); }
.trust-band__partner-link:hover { opacity: .85; }
.trust-band__partner-link:focus-visible { outline: 3px solid var(--focus); outline-offset: 4px; }
.trust-band__partner-link img { display: block; width: auto; height: 50px; }
.trust-band__partner-text { margin: 0; font-size: var(--fs-xs); font-weight: 600; line-height: 1.4; color: var(--ink-3); max-width: 16ch; }
@media (max-width: 1099px) {
  .trust-band__inner { grid-template-columns: minmax(0, 1fr); }
  .trust-band__partner { padding: 1.1rem 0 0; border-left: 0; border-top: 1px solid var(--line); }
  .trust-band__partner-text { max-width: none; }
}
@media (max-width: 559px) {
  .trust-band__logos { gap: .75rem 1.4rem; }
  .trust-band__logo { height: 46px; }
  .trust-band__logo--bnp   { --logo-h: 27px; }
  .trust-band__logo--sofac { --logo-h: 31px; }
  .trust-band__logo--saham { --logo-h: 34px; }
  .trust-band__logo--uir   { --logo-h: 46px; }
  .trust-band__logo--cmim  { --logo-h: 36px; }
  .trust-band__partner-link img { height: 40px; }
}

/* --------------------------------------------------------------------------
   13. CARTES
   -------------------------------------------------------------------------- */
.card {
  position: relative;
  display: flex; flex-direction: column; gap: 1rem;
  padding: clamp(1.4rem, 1.1rem + 1vw, 2rem);
  background: var(--surface);
  border: 1px solid var(--border); border-radius: var(--r-lg);
  color: var(--fg);
  transition: transform .35s var(--ease), box-shadow .35s var(--ease), border-color .35s var(--ease), background-color .35s var(--ease);
}
.card__top { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; }
.card__num { font-size: .8125rem; font-weight: 800; letter-spacing: .08em; color: var(--fg-3); font-variant-numeric: tabular-nums; }
.card__kicker { font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--accent-text); }
.card__title { font-size: var(--fs-h3); line-height: 1.22; letter-spacing: -.02em; color: var(--heading); }
.card__title a { color: inherit; text-decoration: none; }
.card__text { color: var(--fg-2); font-size: var(--fs-body); line-height: 1.6; }
.card__list { margin: 0; padding: 0; list-style: none; display: grid; gap: .45rem; font-size: var(--fs-sm); color: var(--fg-2); line-height: 1.45; }
.card__list li { position: relative; padding-left: 1.15rem; }
.card__list li::before { content: ""; position: absolute; left: 0; top: .5em; width: 7px; height: 8.08px; background: var(--orange); clip-path: var(--hexagon); }
.card__foot { margin-top: auto; padding-top: .5rem; }
/* Carte cliquable : <article class="card card--link"> … <h3 class="card__title"><a class="card__stretch" href="…">…</a></h3> */
.card--link { cursor: pointer; }
.card--link::before {
  content: ""; position: absolute; left: -1px; right: -1px; top: -1px; height: 3px;
  border-radius: var(--r-lg) var(--r-lg) 0 0; background: var(--orange);
  transform: scaleX(0); transform-origin: left; transition: transform .45s var(--ease);
}
.card--link:hover, .card--link:focus-within { transform: translateY(-4px); box-shadow: var(--sh-2); border-color: var(--border-2); }
.card--link:hover::before, .card--link:focus-within::before { transform: scaleX(1); }
.card--link:hover .hex { --hex-bg: var(--orange); --hex-bd: var(--orange); --hex-fg: var(--navy); }
.card--link:hover .link-arrow svg { transform: translateX(4px); }
.card__stretch { color: inherit; text-decoration: none; }
.card__stretch::after { content: ""; position: absolute; inset: 0; z-index: 2; border-radius: inherit; }
.card__stretch:focus-visible { outline: none; }
.card__stretch:focus-visible::after { outline: 3px solid var(--focus); outline-offset: 3px; border-radius: var(--r-lg); }
.card .link-arrow { position: relative; z-index: 1; }
/* Variantes */
.card--flat { background: var(--surface-2); border-color: transparent; }
.card--paper { background: var(--paper); border-color: transparent; }
.card--dark { --fg: var(--on-dark); --fg-2: var(--on-dark-2); --fg-3: var(--on-dark-3); --heading: var(--white); --accent-text: var(--orange-light); --link: var(--white); --focus: var(--orange-light); --border: var(--line-dark); --border-2: var(--line-dark-2); --hex-bg: #10314F; --hex-bd: rgba(255, 153, 79, .55); --hex-fg: var(--orange-light); background: var(--glass); }
.theme-dark .card--link:hover, .section--dark .card--link:hover, .section--night .card--link:hover, .card--dark.card--link:hover { background: var(--glass-2); box-shadow: 0 20px 50px -24px rgba(0, 0, 0, .7); }
.card--cta { background: var(--navy); border-color: var(--navy); overflow: hidden; isolation: isolate; --fg: var(--on-dark); --fg-2: var(--on-dark-2); --fg-3: var(--on-dark-3); --heading: var(--white); --accent-text: var(--orange-light); --link: var(--white); --focus: var(--orange-light); --border: var(--line-dark); --hex-bg: var(--orange); --hex-bd: var(--orange); --hex-fg: var(--navy); }
.card--cta::after {
  content: ""; position: absolute; inset: 0; z-index: -1; opacity: .9;
  background: url("/assets/img/motifs/ruche-clair.svg") repeat; background-size: 36px 62.35px;
  -webkit-mask-image: linear-gradient(160deg, transparent 30%, #000 100%); mask-image: linear-gradient(160deg, transparent 30%, #000 100%);
}
.card--cta.card--link:hover { background: var(--navy-600); }

/* Carte d'expertise (accueil, liste des expertises, expertises liées) */
.xp-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--gap); }
@media (max-width: 1199px) { .xp-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 639px) { .xp-grid { grid-template-columns: minmax(0, 1fr); } }
.xp-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 1099px) { .xp-grid--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 639px) { .xp-grid--3 { grid-template-columns: minmax(0, 1fr); } }
.xp-card { min-height: 100%; }
.xp-card .card__title { font-size: 1.3125rem; }
.xp-card .card__text { font-size: var(--fs-sm); line-height: 1.55; }
.xp-card.is-filtered-out { display: none; }
/* Titres sur 1 ou 2 lignes : même hauteur réservée, les paragraphes d'une rangée démarrent alignés */
@media (min-width: 640px) { .xp-grid:not(.xp-grid--3) .xp-card .card__title { min-height: calc(2 * 1.22em); } }
/* Mobile : cartes compactes (sur-titre, titre, phrase), hexagone en haut à droite ;
   la carte reste entièrement cliquable (.card__stretch) */
@media (max-width: 639px) {
  .xp-card { padding: 1.1rem 1.25rem 1.2rem; gap: .35rem; }
  .xp-card .card__list, .xp-card .card__num, .xp-card .card__foot { display: none; }
  .xp-card .card__top { position: absolute; top: 1rem; right: 1.1rem; }
  .xp-card .card__top .hex { --hex-size: 36px; }
  .xp-card .card__kicker, .xp-card .card__title { padding-right: 3rem; }
  /* Carte sans sur-titre (expertises liées) : le titre seul est moins haut que l'hexagone ;
     on lui réserve cette hauteur pour que la phrase ne passe pas sous l'hexagone */
  .xp-card .card__top + .card__title { min-height: 2.4rem; }
}

/* --------------------------------------------------------------------------
   14. FILTRES ET ONGLETS
   -------------------------------------------------------------------------- */
/* Filtres : <div class="filters" role="group" data-filter-group="x"> <button class="filter" aria-pressed data-filter="*|cat"> */
.filters { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: 1rem; }
.filter {
  display: inline-flex; align-items: center; gap: .55rem;
  min-height: 44px; padding: .45rem 1rem;
  border: 1px solid var(--border-2); border-radius: var(--r-pill);
  background: transparent; color: var(--fg); font-size: var(--fs-sm); font-weight: 700;
  transition: background-color var(--dur) var(--ease), color var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.filter:hover { border-color: var(--fg); }
.filter[aria-pressed="true"] { background: var(--navy); border-color: var(--navy); color: var(--white); }
.theme-dark .filter[aria-pressed="true"], .section--dark .filter[aria-pressed="true"], .section--night .filter[aria-pressed="true"] { background: var(--white); border-color: var(--white); color: var(--navy); }
.filter__count {
  display: inline-grid; place-items: center; min-width: 24px; height: 22px; padding: 0 .35rem;
  border-radius: var(--r-pill); background: var(--surface-2); font-size: .75rem; font-weight: 800; font-variant-numeric: tabular-nums;
}
.filter[aria-pressed="true"] .filter__count { background: var(--orange); color: var(--navy); }
@media (max-width: 639px) {
  .filters { flex-wrap: nowrap; overflow-x: auto; margin-inline: calc(-1 * var(--gutter)); padding: 2px var(--gutter) .5rem; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
  .filters::-webkit-scrollbar { display: none; }
  .filter { flex: none; }
}
.filters__status { margin: 0 0 1.25rem; font-size: var(--fs-sm); color: var(--fg-3); min-height: 1.5em; }

/* Onglets génériques : [data-tabs] > [role=tablist].tabs__list > [role=tab].tabs__tab ; [role=tabpanel].tabs__panel */
.tabs__list { display: flex; flex-wrap: wrap; gap: .25rem; border-bottom: 1px solid var(--border); margin-bottom: 2rem; }
.tabs__tab {
  position: relative; min-height: 48px; padding: .6rem 1.1rem;
  border: 0; background: transparent; color: var(--fg-2); font-weight: 700; font-size: var(--fs-sm);
}
.tabs__tab::after { content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 3px; background: var(--orange); transform: scaleX(0); transition: transform .3s var(--ease); }
.tabs__tab:hover { color: var(--fg); }
.tabs__tab[aria-selected="true"] { color: var(--heading); }
.tabs__tab[aria-selected="true"]::after { transform: scaleX(1); }
.tabs__panel.is-entering { animation: panel-in .45s var(--ease-out) both; }
@keyframes panel-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }

/* --------------------------------------------------------------------------
   15. MÉTHODE INTERACTIVE (4 étapes) ET FRISE D'ÉTAPES
   -------------------------------------------------------------------------- */
.method { display: grid; grid-template-columns: minmax(0, 4fr) minmax(0, 8fr); gap: clamp(1.5rem, 4vw, 4rem); align-items: start; }
.method__rail { position: relative; display: grid; gap: .25rem; padding-left: 0; }
.method__rail::before, .method__fill {   /* ligne de progression verticale */
  content: ""; position: absolute; left: 27px; top: 34px; bottom: 34px; width: 2px; border-radius: 2px;
  background: var(--border);
}
.method__fill { background: var(--orange); transform-origin: top; transform: scaleY(0); transition: transform .6s var(--ease); z-index: 0; }
.method__rail[data-step="2"] .method__fill { transform: scaleY(.3334); }
.method__rail[data-step="3"] .method__fill { transform: scaleY(.6667); }
.method__rail[data-step="4"] .method__fill { transform: scaleY(1); }
.method__tab {
  position: relative; z-index: 1;
  display: grid; grid-template-columns: 56px minmax(0, 1fr); column-gap: 1rem; align-items: center;
  width: 100%; min-height: 76px; padding: .65rem .9rem .65rem 0;
  border: 0; border-radius: var(--r-md); background: transparent; text-align: left; color: var(--fg-2);
  transition: background-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
.method__tab:hover { color: var(--fg); }
.method__tab .hex { --hex-size: 56px; grid-row: span 2; --hex-bg: var(--white); --hex-bd: var(--line-2); --hex-fg: var(--ink-3); }
.method__num { font-weight: 800; font-size: 1rem; }
.method__name { font-size: 1.1875rem; font-weight: 800; letter-spacing: -.015em; color: var(--heading); line-height: 1.2; align-self: end; }
.method__hint { font-size: var(--fs-sm); color: var(--fg-3); line-height: 1.35; align-self: start; }
.method__tab[aria-selected="true"] { background: var(--surface-2); }
.method__tab[aria-selected="true"] .hex { --hex-bg: var(--orange); --hex-bd: var(--orange); --hex-fg: var(--navy); }
.method__tab.is-done .hex { --hex-bg: var(--orange-tint); --hex-bd: var(--orange); --hex-fg: var(--orange-dark); }
.method__panel {
  position: relative; overflow: hidden;
  padding: clamp(1.5rem, 1rem + 2.5vw, 3rem);
  border-radius: var(--r-xl); background: var(--navy); color: var(--on-dark);
  --fg: var(--on-dark); --fg-2: var(--on-dark-2); --fg-3: var(--on-dark-3); --heading: var(--white); --accent-text: var(--orange-light); --focus: var(--orange-light); --border: var(--line-dark); --link: var(--white);
  isolation: isolate;
}
.method__panel::before {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background: url("/assets/img/motifs/ruche-clair.svg") repeat; background-size: 48px 83.14px;
  -webkit-mask-image: radial-gradient(ellipse 60% 70% at 100% 0%, #000, transparent 70%); mask-image: radial-gradient(ellipse 60% 70% at 100% 0%, #000, transparent 70%);
}
.method__panel.is-entering { animation: panel-in .45s var(--ease-out) both; }
.method__big { position: absolute; right: clamp(1rem, 3vw, 2.5rem); top: clamp(.5rem, 2vw, 1.5rem); z-index: -1; font-size: clamp(5rem, 4rem + 5vw, 9rem); font-weight: 800; letter-spacing: -.06em; line-height: 1; color: rgba(255, 255, 255, .06); }
.method__step { font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--orange-light); }
.method__title { margin-top: .75rem; font-size: clamp(1.6rem, 1.2rem + 1.6vw, 2.4rem); color: var(--white); letter-spacing: -.03em; line-height: 1.1; }
.method__text { margin-top: 1rem; max-width: 56ch; color: var(--on-dark-2); font-size: var(--fs-lead); line-height: 1.6; }
.method__cols { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: 1.5rem; margin-top: 2rem; padding-top: 1.75rem; border-top: 1px solid var(--line-dark); }
.method__sub { font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--on-dark-3); margin-bottom: .8rem; }
.method__deliverable { display: flex; gap: .9rem; align-items: flex-start; padding: 1.1rem 1.2rem; border-radius: var(--r-md); background: rgba(255, 255, 255, .06); border: 1px solid var(--line-dark); }
.method__deliverable strong { display: block; color: var(--white); font-size: 1.0625rem; line-height: 1.3; }
.method__deliverable span { display: block; margin-top: .25rem; font-size: var(--fs-sm); color: var(--on-dark-2); line-height: 1.45; }
.method__deliverable .icon { color: var(--orange-light); margin-top: .1rem; }
@media (max-width: 959px) {
  .method { grid-template-columns: minmax(0, 1fr); }
  .method__rail { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: .4rem; }
  .method__rail::before, .method__fill { display: none; }
  .method__tab { grid-template-columns: minmax(0, 1fr); justify-items: center; text-align: center; min-height: 0; padding: .7rem .25rem; row-gap: .35rem; }
  .method__tab .hex { --hex-size: 40px; grid-row: auto; }
  .method__name { font-size: .8125rem; letter-spacing: -.01em; align-self: auto; }
  .method__tab[aria-selected="true"] { background: var(--mist); }
  .method__hint { display: none; }
  .method__cols { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 559px) { .method__cols { gap: 1.25rem; margin-top: 1.4rem; padding-top: 1.25rem; } .method__text { font-size: var(--fs-body); } }
@media (max-width: 379px) { .method__name { font-size: .75rem; letter-spacing: -.02em; } }

/* Frise d'étapes statique : <ol class="steps"> <li class="step"> … */
.steps {
  --steps: 4;
  list-style: none; margin: 0; padding: 0;
  display: grid; grid-template-columns: repeat(var(--steps), minmax(0, 1fr)); gap: 1.5rem;
  counter-reset: step;
}
.steps--3 { --steps: 3; } .steps--5 { --steps: 5; } .steps--6 { --steps: 6; }
.step { position: relative; padding-top: 4.75rem; }
.step::before {   /* trait de liaison */
  content: ""; position: absolute; left: 0; right: -1.5rem; top: 32px; height: 2px;
  background: linear-gradient(90deg, var(--orange) 0 56px, var(--border) 56px);
}
.step:last-child::before { right: 0; background: linear-gradient(90deg, var(--orange) 0 56px, transparent 56px); }
.step .hex { position: absolute; left: 0; top: 0; --hex-size: 56px; --hex-bg: var(--navy); --hex-bd: var(--navy); --hex-fg: var(--white); }
.theme-dark .step .hex, .section--dark .step .hex, .section--night .step .hex { --hex-bg: var(--orange); --hex-bd: var(--orange); --hex-fg: var(--navy); }
.step__title { font-size: 1.1875rem; line-height: 1.25; letter-spacing: -.015em; }
.step__text { margin-top: .6rem; font-size: var(--fs-sm); line-height: 1.6; color: var(--fg-2); }
.step__out { margin-top: 1rem; padding-top: .8rem; border-top: 1px dashed var(--border-2); font-size: .875rem; color: var(--fg-2); line-height: 1.45; }
.step__out b { display: block; font-size: .75rem; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--accent-text); margin-bottom: .15rem; }
@media (max-width: 1023px) {
  .steps, .steps--3, .steps--5, .steps--6 { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .step { padding: 0 0 2rem 4.5rem; min-height: 64px; }
  .step::before { left: 27px; right: auto; top: 64px; bottom: 0; width: 2px; height: auto; background: var(--border); }
  .step:last-child { padding-bottom: 0; }
  .step:last-child::before { display: none; }
  .step .hex { --hex-size: 56px; }
}

/* --------------------------------------------------------------------------
   16. ACCORDÉON / FAQ  (sans JavaScript : <details>/<summary>)
   -------------------------------------------------------------------------- */
.faq { display: grid; gap: .75rem; }
.faq__item { border: 1px solid var(--border); border-radius: var(--r-md); background: var(--surface); transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease); }
.faq__item[open] { border-color: var(--border-2); box-shadow: var(--sh-1); }
.faq__q {
  display: flex; align-items: center; justify-content: space-between; gap: 1.25rem;
  min-height: 64px; padding: 1rem 1.25rem 1rem 1.5rem;
  list-style: none; cursor: pointer;
  font-size: 1.0625rem; font-weight: 750; line-height: 1.4; letter-spacing: -.01em; color: var(--heading);
  border-radius: var(--r-md);
}
.faq__q::-webkit-details-marker { display: none; }
.faq__q:hover { color: var(--accent-text); }
.faq__icon { position: relative; flex: none; width: 32px; height: 32px; border-radius: 50%; background: var(--surface-2); }
.faq__icon::before, .faq__icon::after { content: ""; position: absolute; left: 50%; top: 50%; width: 12px; height: 2px; margin: -1px 0 0 -6px; border-radius: 2px; background: var(--fg); transition: transform .3s var(--ease); }
.faq__icon::after { transform: rotate(90deg); }
.faq__item[open] .faq__icon { background: var(--orange); }
.faq__item[open] .faq__icon::before, .faq__item[open] .faq__icon::after { background: var(--navy); }
.faq__item[open] .faq__icon::after { transform: rotate(0deg); }
.faq__a { padding: 0 1.5rem 1.4rem; color: var(--fg-2); line-height: 1.65; max-width: 75ch; }
.faq__a > * + * { margin-top: .8em; }
.faq__item[open] .faq__a { animation: panel-in .35s var(--ease-out) both; }

/* --------------------------------------------------------------------------
   17. LIVRABLES, PUCES DE RÉFÉRENTIELS, LISTES
   -------------------------------------------------------------------------- */
.deliverables { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem var(--gap); }
@media (max-width: 719px) { .deliverables { grid-template-columns: minmax(0, 1fr); } }
.deliverable {
  display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 1.1rem; align-items: start;
  padding: 1.35rem 1.4rem; border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--surface);
}
.deliverable__icon { display: grid; place-items: center; width: 48px; height: 56px; color: var(--accent-text); }
.deliverable__icon .icon { width: 30px; height: 30px; }
.deliverable__title { font-size: 1.0625rem; line-height: 1.3; letter-spacing: -.01em; }
.deliverable__text { margin-top: .35rem; font-size: var(--fs-sm); line-height: 1.55; color: var(--fg-2); }

/* Schéma illustratif : MONTRER le travail (structure d'un livrable, démarche) sans aucune
   donnée client ni chiffre. Légende « Illustration — exemple de structure, sans données client »
   OBLIGATOIRE. Variante fournie : pyramide documentaire (ol.pyramid, 4 niveaux).
   <figure class="figure-schema" aria-labelledby="schema-titre">
     <div> <p class="figure-schema__title" id="schema-titre">…</p> <p class="figure-schema__text">…</p>
           <figcaption class="figure-schema__caption"><svg class="icon">(info)</svg><span>Illustration — …</span></figcaption> </div>
     <ol class="pyramid"> <li class="pyramid__tier"> <span class="pyramid__shape"><span>PSSI</span></span>
                                                   <span class="pyramid__desc">…</span> </li> ×4 </ol>
   </figure> */
.figure-schema {
  margin: 0;
  display: grid; grid-template-columns: minmax(0, 4fr) minmax(0, 8fr); gap: 2rem clamp(2rem, 5vw, 5rem); align-items: center;
  padding: clamp(1.5rem, 1rem + 2.5vw, 3rem);
  border-radius: var(--r-xl); border: 1px solid var(--border); background: var(--surface);
}
.figure-schema__title { font-size: clamp(1.25rem, 1.1rem + .6vw, 1.6rem); font-weight: 800; letter-spacing: -.02em; line-height: 1.2; color: var(--heading); text-wrap: balance; }
.figure-schema__text { margin-top: .75rem; color: var(--fg-2); font-size: var(--fs-sm); line-height: 1.6; }
.figure-schema__caption { display: flex; gap: .5rem; align-items: flex-start; margin-top: 1.25rem; font-size: var(--fs-xs); line-height: 1.5; color: var(--fg-3); }
.figure-schema__caption .icon { width: 16px; height: 16px; color: var(--accent-text); margin-top: .1rem; }
@media (max-width: 959px) { .figure-schema { grid-template-columns: minmax(0, 1fr); } }
.pyramid { list-style: none; margin: 0; padding: 0; display: grid; gap: 5px; }
.pyramid__tier { display: grid; grid-template-columns: minmax(0, 46%) minmax(0, 1fr); gap: clamp(1rem, 2.5vw, 2rem); align-items: stretch; }
/* Trapèzes centrés de largeur 55 / 70 / 85 / 100 % : la coupe (--cut, en % de la largeur
   propre) garde la même pente d'un niveau à l'autre. */
.pyramid__shape {
  --w: 100%; --cut: 7.5%;
  justify-self: center; width: var(--w); min-height: 64px;
  display: grid; place-items: center; padding: .5rem;
  clip-path: polygon(var(--cut) 0, calc(100% - var(--cut)) 0, 100% 100%, 0 100%);
  background: #0F3659; color: var(--white);
  font-size: .9375rem; font-weight: 800; letter-spacing: -.01em; line-height: 1.15; text-align: center;
}
.pyramid__tier:nth-child(1) .pyramid__shape { --w: 55%; --cut: 13.64%; background: var(--orange); color: var(--navy); }
.pyramid__tier:nth-child(2) .pyramid__shape { --w: 70%; --cut: 10.71%; background: #1B5585; }
.pyramid__tier:nth-child(3) .pyramid__shape { --w: 85%; --cut: 8.82%; background: #144571; }
.pyramid__desc { align-self: center; font-size: var(--fs-sm); line-height: 1.5; color: var(--fg-2); }
/* Variante « sommaire type d'un livrable » : feuille blanche, sections numérotées (une table des
   matières est une séquence), lignes grises suggérant le contenu, AUCUNE donnée.
   <div class="schema-doc"> <p class="schema-doc__head">Rapport — sommaire type</p>
   <ol class="schema-doc__toc"> <li><span>Synthèse pour la direction</span><small>…</small></li> … </ol> </div> */
.schema-doc {
  position: relative; overflow: hidden; justify-self: center; width: 100%; max-width: 540px;
  padding: 1.6rem 1.6rem 1.3rem; border-radius: var(--r-md);
  background: var(--white); color: var(--ink); box-shadow: var(--sh-3);
}
.schema-doc::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 4px; background: var(--orange); }
.schema-doc__head { margin-bottom: .9rem; font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--orange-dark); }
.schema-doc__toc { list-style: none; margin: 0; padding: 0; counter-reset: sec; }
.schema-doc__toc li {
  counter-increment: sec; position: relative;
  display: grid; grid-template-columns: 2.1rem minmax(0, 1fr); column-gap: .5rem;
  padding: .7rem 0 .8rem; border-top: 1px solid var(--line);
}
.schema-doc__toc li::before { content: counter(sec, decimal-leading-zero); grid-row: span 2; font-size: .875rem; font-weight: 800; color: var(--ink-3); font-variant-numeric: tabular-nums; line-height: 1.4; }
.schema-doc__toc li > span { font-size: .9375rem; font-weight: 750; line-height: 1.4; color: var(--navy); }
.schema-doc__toc li > small { display: block; margin-top: .15rem; font-size: .8125rem; line-height: 1.45; color: var(--ink-3); }
.schema-doc__toc li::after {   /* lignes de contenu suggérées (décor) */
  content: ""; grid-column: 2; height: 6px; margin-top: .55rem; width: 72%; border-radius: 3px;
  background: linear-gradient(90deg, var(--mist) 0 64%, transparent 64% 68%, var(--mist) 68%);
}
@media (max-width: 479px) {
  .pyramid__tier { grid-template-columns: minmax(0, 42%) minmax(0, 1fr); gap: .85rem; }
  .pyramid__shape { min-height: 76px; font-size: .8125rem; padding-inline: .25rem; }
  .pyramid__desc { font-size: .8125rem; line-height: 1.45; }
}

.chips { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: .5rem; }
.chip {
  display: inline-flex; align-items: center; gap: .5rem;
  min-height: 36px; padding: .35rem .85rem;
  border: 1px solid var(--border-2); border-radius: var(--r-pill);
  background: var(--surface); color: var(--fg); font-size: .875rem; font-weight: 700; line-height: 1.2;
}
.chip::before { content: ""; width: 7px; height: 8.08px; background: var(--orange); clip-path: var(--hexagon); flex: none; }
.chip--plain::before { display: none; }
.chip--soft { background: var(--surface-2); border-color: transparent; }

/* Liste de référentiels détaillée : <ul class="ref-list"> <li class="ref-item"> <span class="ref-item__name">…</span> <span class="ref-item__desc">… */
.ref-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 var(--gap); }
@media (max-width: 719px) { .ref-list { grid-template-columns: minmax(0, 1fr); } }
.ref-list--single { grid-template-columns: minmax(0, 1fr); }
.ref-list--single .ref-item:last-child { border-bottom: 1px solid var(--border); }
.ref-item { display: grid; grid-template-columns: minmax(0, 210px) minmax(0, 1fr); gap: .35rem 1.25rem; padding: 1.1rem 0; border-top: 1px solid var(--border); }
.ref-item__name { font-weight: 800; color: var(--heading); letter-spacing: -.01em; }
.ref-item__desc { color: var(--fg-2); font-size: var(--fs-sm); line-height: 1.55; }
@media (max-width: 479px) { .ref-item { grid-template-columns: minmax(0, 1fr); } }

/* Listes à puces hexagonales / coches */
.list-hex, .list-check { list-style: none; margin: 0; padding: 0; display: grid; gap: .7rem; }
.list-hex li, .list-check li { position: relative; padding-left: 1.6rem; line-height: 1.55; color: var(--fg-2); }
.list-hex li::before { content: ""; position: absolute; left: 0; top: .48em; width: 9px; height: 10.4px; background: var(--orange); clip-path: var(--hexagon); }
.list-check li { padding-left: 2rem; }
.list-check li::before {
  content: ""; position: absolute; left: 0; top: .12em; width: 20px; height: 20px; border-radius: 50%;
  background: var(--orange-tint);
}
.list-check li::after {
  content: ""; position: absolute; left: 6px; top: calc(.12em + 5px); width: 8px; height: 5px;
  border-left: 2px solid var(--orange-dark); border-bottom: 2px solid var(--orange-dark); transform: rotate(-45deg);
}
.theme-dark .list-check li::before, .section--dark .list-check li::before, .section--night .list-check li::before { background: rgba(255, 153, 79, .16); }
.theme-dark .list-check li::after, .section--dark .list-check li::after, .section--night .list-check li::after { border-color: var(--orange-light); }
.list-hex strong, .list-check strong { color: var(--fg); }
.list-hex--2, .list-check--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .9rem 2rem; }
@media (max-width: 719px) { .list-hex--2, .list-check--2 { grid-template-columns: minmax(0, 1fr); } }

/* Signaux « quand y penser » : cartes compactes à puce */
.signals { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .9rem; }
@media (max-width: 639px) { .signals { grid-template-columns: minmax(0, 1fr); } }
.signal { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .9rem; align-items: start; padding: 1.15rem 1.25rem; border-radius: var(--r-md); background: var(--surface-2); color: var(--fg); line-height: 1.5; font-weight: 600; }
.signal .hex { --hex-size: 28px; }
.signal .hex .icon { width: 56%; stroke-width: 2.4; }

/* Profils (pour qui) */
.audiences { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--gap); }
@media (max-width: 959px) { .audiences { grid-template-columns: repeat(2, minmax(0, 1fr)); } }   /* 2 colonnes jusqu'à 390 px */
.audience { padding-top: 1.1rem; border-top: 2px solid var(--heading); }   /* filet marine (blanc sur fond sombre) : l'orange signale l'action */
.audience__title { font-size: 1.0625rem; letter-spacing: -.01em; }
.audience__text { margin-top: .4rem; font-size: var(--fs-sm); color: var(--fg-2); line-height: 1.55; }

/* Détail « ce que nous faisons » : <ul class="services services--plain reset"> (leviers SANS numéro :
   ils ne forment pas une séquence). La variante numérotée <ol class="services"> + .hex--num est
   réservée à un contenu réellement ordonné. */
.services { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--border); }
.service-row {
  display: grid; grid-template-columns: 76px minmax(0, 5fr) minmax(0, 7fr); gap: 1.25rem clamp(1.5rem, 3vw, 3rem);
  padding: clamp(1.5rem, 1.2rem + 1vw, 2.25rem) 0; border-bottom: 1px solid var(--border);
}
.service-row__title { font-size: clamp(1.25rem, 1.1rem + .5vw, 1.55rem); letter-spacing: -.02em; line-height: 1.2; }
.service-row__lede { margin-top: .5rem; color: var(--fg-3); font-size: var(--fs-sm); font-weight: 600; }
.service-row__body { color: var(--fg-2); line-height: 1.65; }
.service-row__body .list-hex { margin-top: 1rem; }
.service-row__body .list-hex li { font-size: var(--fs-sm); }
@media (max-width: 959px) {
  .service-row { grid-template-columns: 56px minmax(0, 1fr); }
  .service-row .hex { --hex-size: 48px; }
  .service-row__body { grid-column: 2; }
}
@media (max-width: 479px) {
  .service-row { grid-template-columns: minmax(0, 1fr); }
  .service-row__body { grid-column: 1; }
}
.services--plain .service-row { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); }
@media (max-width: 959px) {
  .services--plain .service-row { grid-template-columns: minmax(0, 1fr); row-gap: .9rem; }
  .services--plain .service-row__body { grid-column: auto; }
}

/* Chiffres-clés (faits uniquement) : <div class="stats"> <div class="stat"> <span class="stat__value" data-count-to="104">104</span> <span class="stat__label"> */
.stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--gap); }
.stat { display: flex; flex-direction: column; gap: .25rem; padding-top: 1rem; border-top: 1px solid var(--border-2); }
.stat__value { font-size: clamp(2.25rem, 1.6rem + 2vw, 3.5rem); font-weight: 800; line-height: 1; letter-spacing: -.04em; color: var(--heading); font-variant-numeric: tabular-nums; }
.stat__label { font-size: var(--fs-sm); color: var(--fg-2); line-height: 1.45; }
@media (max-width: 479px) { .stats { grid-template-columns: minmax(0, 1fr); } }

/* --------------------------------------------------------------------------
   18. SECTEURS, PILIERS, ENGAGEMENTS, REPÈRES RÉGLEMENTAIRES
   -------------------------------------------------------------------------- */
.sectors { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; background: var(--border); border: 1px solid var(--border); border-radius: var(--r-lg); overflow: hidden; }
@media (max-width: 1099px) { .sectors { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.sector {
  position: relative; display: flex; flex-direction: column; gap: .7rem;
  padding: 1.6rem 1.5rem 1.5rem; background: var(--bg, var(--white)); color: var(--fg); text-decoration: none;
  transition: background-color var(--dur) var(--ease);
}
.section--paper .sector { background: var(--paper); }
.sector:hover { background: var(--white); }
.sector .hex { --hex-size: 44px; margin-bottom: .35rem; }
.sector:hover .hex { --hex-bg: var(--orange); --hex-bd: var(--orange); --hex-fg: var(--navy); }
.sector__name { font-size: 1.125rem; font-weight: 800; letter-spacing: -.015em; line-height: 1.25; color: var(--heading); }
.sector__text { font-size: var(--fs-sm); line-height: 1.55; color: var(--fg-2); }
.sector__arrow { position: absolute; right: 1.25rem; top: 1.6rem; width: 20px; height: 20px; color: var(--accent-text); transition: transform var(--dur) var(--ease); }
.sector:hover .sector__arrow { transform: translate(3px, -3px); }
.sector--all { justify-content: center; background: var(--navy) !important; --fg: var(--white); --heading: var(--white); --fg-2: var(--on-dark-2); --accent-text: var(--orange-light); --focus: var(--orange-light); }
.sector--all:hover { background: var(--navy-600) !important; }
/* Mobile : tuiles compactes sur 2 colonnes (hexagone + nom), 7 secteurs + « Tous les secteurs »
   = 4 rangées pleines ; le détail de chaque secteur est sur /secteurs.html. */
@media (max-width: 559px) {
  .sectors { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .sector { gap: .6rem; padding: 1.1rem .9rem 1.15rem 1rem; }
  .sector .hex { --hex-size: 36px; margin: 0; }
  .sector__name { font-size: .9375rem; line-height: 1.3; hyphens: manual; }
  .sector__text { display: none; }
  .sector__arrow { top: 1.1rem; right: .85rem; width: 18px; height: 18px; }
  .sector--all { justify-content: flex-end; }
}

/* Piliers : 3 cartes (hexagone, titre, texte). .pillar__num est facultatif : ne numéroter
   que ce qui forme une séquence. */
.pillars { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--gap); }
@media (max-width: 1023px) { .pillars { grid-template-columns: minmax(0, 1fr); } }
.pillar { position: relative; padding: 1.75rem 1.6rem 1.6rem; border-radius: var(--r-lg); background: var(--surface); border: 1px solid var(--border); }
.pillar__num { display: block; font-size: .75rem; font-weight: 800; letter-spacing: .12em; color: var(--accent-text); margin-bottom: 1.4rem; }
.pillar__title { font-size: 1.375rem; letter-spacing: -.02em; line-height: 1.2; }
.pillar__text { margin-top: .7rem; color: var(--fg-2); font-size: var(--fs-sm); line-height: 1.6; }
.pillar .hex { --hex-size: 48px; margin-bottom: 1.25rem; }
@media (max-width: 1023px) {
  .pillars:not(.pillars--list) .pillar { display: grid; grid-template-columns: 44px minmax(0, 1fr); column-gap: 1rem; padding: 1.35rem 1.25rem; }
  .pillars:not(.pillars--list) .pillar .hex { --hex-size: 44px; grid-row: span 2; margin: 0; }
  .pillars:not(.pillars--list) .pillar__text { margin-top: .4rem; }
}
/* Variante liste (à côté d'un texte) : lignes séparées, sans carte */
.pillars--list { grid-template-columns: minmax(0, 1fr); gap: 0; border-top: 1px solid var(--border); }
.pillars--list .pillar {
  display: grid; grid-template-columns: 64px minmax(0, 1fr); column-gap: 1.5rem; align-items: start;
  padding: 1.75rem 0; border: 0; border-bottom: 1px solid var(--border); border-radius: 0; background: transparent;
}
.pillars--list .pillar .hex { position: relative; right: auto; top: auto; grid-row: span 3; --hex-size: 56px; }
.pillars--list .pillar__num { margin-bottom: .35rem; }
.pillars--list .pillar__title { font-size: clamp(1.3rem, 1.15rem + .5vw, 1.6rem); }
.pillars--list .pillar__text { font-size: var(--fs-body); max-width: 58ch; }
@media (max-width: 479px) { .pillars--list .pillar { grid-template-columns: 44px minmax(0, 1fr); column-gap: 1rem; } .pillars--list .pillar .hex { --hex-size: 44px; } }

.commitments { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0; border-top: 1px solid var(--border); }
.commitment { padding: 1.5rem 1.5rem 0 0; display: flex; flex-direction: column; gap: .5rem; }
.commitment .icon { color: var(--accent-text); width: 28px; height: 28px; margin-bottom: .4rem; }
.commitment__title { font-size: 1rem; font-weight: 800; letter-spacing: -.01em; line-height: 1.3; color: var(--heading); }
.commitment__text { font-size: var(--fs-sm); line-height: 1.55; color: var(--fg-2); }
@media (max-width: 1099px) { .commitments { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* Mobile : une ligne compacte par engagement (icône à gauche) — plus court que 2 colonnes étroites */
@media (max-width: 559px) {
  .commitments { grid-template-columns: minmax(0, 1fr); }
  .commitment { display: grid; grid-template-columns: 28px minmax(0, 1fr); column-gap: .9rem; row-gap: .2rem; padding: 1rem 0 0; }
  .commitment .icon { grid-row: span 2; margin: 0; }
}

.reg-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--gap); }
@media (max-width: 1099px) { .reg-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* Mobile : cartes côte à côte, défilement horizontal avec aimantation (la carte suivante
   dépasse pour signaler le défilement). Les liens restent atteignables au clavier. */
@media (max-width: 599px) {
  .reg-grid {
    grid-template-columns: none; grid-auto-flow: column; grid-auto-columns: 84%;
    overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x mandatory;
    margin-inline: calc(-1 * var(--gutter)); padding: 0 var(--gutter) .75rem; scroll-padding-inline: var(--gutter);
    scrollbar-width: thin; scrollbar-color: var(--border-2) transparent;
  }
  .reg-card { scroll-snap-align: start; }
}
.reg-card { display: flex; flex-direction: column; gap: .75rem; padding: 1.6rem 1.5rem; border-radius: var(--r-lg); border: 1px solid var(--border); background: var(--surface); }
.reg-card__ref { font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--accent-text); }
.reg-card__title { font-size: 1.25rem; letter-spacing: -.02em; line-height: 1.2; }
.reg-card__text { font-size: var(--fs-sm); line-height: 1.6; color: var(--fg-2); }
.reg-card__stat { margin-top: auto; padding-top: 1rem; border-top: 1px solid var(--border); display: flex; align-items: baseline; gap: .6rem; }
.reg-card__stat b { font-size: 2.25rem; font-weight: 800; line-height: 1; letter-spacing: -.04em; color: var(--heading); font-variant-numeric: tabular-nums; }
.reg-card__stat span { font-size: var(--fs-sm); color: var(--fg-2); line-height: 1.35; }
.reg-card .link-arrow { margin-top: auto; }
.disclaimer { display: flex; gap: .75rem; align-items: flex-start; font-size: .875rem; line-height: 1.55; color: var(--fg-3); }
.disclaimer .icon { width: 20px; height: 20px; color: var(--accent-text); margin-top: .1rem; }

/* --------------------------------------------------------------------------
   19. WIDGET D'ORIENTATION « PAR OÙ COMMENCER ? »  ([data-orient], site.js §9)
   -------------------------------------------------------------------------- */
.orient {
  position: relative;
  padding: clamp(1.4rem, 1rem + 2vw, 2.5rem);
  border-radius: var(--r-xl); background: var(--white); border: 1px solid var(--line);
  box-shadow: var(--sh-2);
  --fg: var(--ink); --fg-2: var(--ink-2); --fg-3: var(--ink-3); --heading: var(--navy); --border: var(--line); --border-2: var(--line-2); --surface-2: var(--mist); --accent-text: var(--orange-dark); --focus: var(--navy);
  color: var(--ink);
}
.orient__head { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin-bottom: 1.25rem; font-size: .875rem; font-weight: 700; color: var(--ink-3); }
.orient__bar { position: relative; height: 4px; margin-bottom: 1.75rem; border-radius: 4px; background: var(--mist); overflow: hidden; }
.orient__bar span { position: absolute; inset: 0; background: var(--orange); transform-origin: left; transform: scaleX(.25); transition: transform .45s var(--ease); }
.orient__bar[data-progress="2"] span { transform: scaleX(.5); }
.orient__bar[data-progress="3"] span { transform: scaleX(.75); }
.orient__bar[data-progress="4"] span, .orient__bar[data-progress="5"] span { transform: scaleX(1); }
.orient__q { border: 0; margin: 0; padding: 0; min-width: 0; }
.orient__q legend { padding: 0; margin-bottom: 1.25rem; font-size: clamp(1.25rem, 1.1rem + .6vw, 1.6rem); font-weight: 800; letter-spacing: -.02em; line-height: 1.25; color: var(--navy); }
.orient__q.is-entering { animation: panel-in .4s var(--ease-out) both; }
.choices { display: grid; gap: .6rem; }
.choice { position: relative; display: block; }
.choice input { position: absolute; opacity: 0; width: 1px; height: 1px; }
/* ENFANT DIRECT uniquement (.choice > span) : site.js (§1 ter) peut insérer des <span class="nowrap">
   dans le libellé (« Loi 05-20 », « ISO/IEC 27001 »…) ; un sélecteur descendant leur donnerait la
   bordure et la fausse case hexagonale. Libellé en bloc (pas en flex : un élément flex découpe le
   texte autour de ces spans et mange les espaces) ; padding calculé pour centrer une ligne dans 56 px. */
.choice > span {
  position: relative;
  display: block;
  min-height: 56px; padding: calc((56px - 3px - 1.4em) / 2) 1.1rem calc((56px - 3px - 1.4em) / 2) 3.1rem;
  border: 1.5px solid var(--line-2); border-radius: var(--r-md); background: var(--white);
  font-weight: 650; line-height: 1.4; color: var(--ink); cursor: pointer;
  transition: border-color var(--dur) var(--ease), background-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.choice > span::before, .choice > span::after {
  content: ""; position: absolute; top: 50%; clip-path: var(--hexagon);
  transition: background-color var(--dur) var(--ease), transform var(--dur) var(--ease);
}
.choice > span::before { left: 1.1rem; width: 18px; height: 20.8px; margin-top: -10.4px; background: var(--ink-3); }
.choice > span::after { left: calc(1.1rem + 2px); width: 14px; height: 16.2px; margin-top: -8.1px; background: var(--white); }
.choice:hover > span { border-color: var(--navy); }
.choice input:checked + span { border-color: var(--orange); background: var(--orange-tint); }
.choice input:checked + span::before { background: var(--orange); }
.choice input:checked + span::after { background: var(--orange); transform: scale(.55); }
.choice input:checked + span { box-shadow: inset 0 0 0 1px var(--orange); }
.choice input:focus-visible + span { outline: 3px solid var(--navy); outline-offset: 2px; }
.orient__nav { display: flex; justify-content: space-between; align-items: center; gap: 1rem; margin-top: 1.75rem; flex-wrap: wrap; }
.orient__error { margin-top: .9rem; font-size: .875rem; font-weight: 700; color: var(--ko); min-height: 1.3em; }
.orient__result-title { font-size: clamp(1.35rem, 1.15rem + .8vw, 1.75rem); letter-spacing: -.02em; }
.orient__result-intro { margin-top: .6rem; color: var(--ink-2); }
.recos { list-style: none; margin: 1.5rem 0 0; padding: 0; display: grid; gap: .75rem; }
.reco {
  position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 1rem; align-items: center;
  padding: 1rem 1.15rem; border-radius: var(--r-md); border: 1px solid var(--line); background: var(--white);
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.reco:hover { border-color: var(--line-2); box-shadow: var(--sh-2); }
.reco.is-top { border-color: var(--orange); background: linear-gradient(90deg, var(--orange-tint), var(--white) 70%); }
.reco.is-top .hex { --hex-bg: var(--orange); --hex-bd: var(--orange); --hex-fg: var(--navy); }
.reco__rank { display: block; font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--orange-dark); }
.reco__title { display: block; font-size: 1.0625rem; font-weight: 800; color: var(--navy); letter-spacing: -.01em; }
.reco__why { display: block; margin-top: .2rem; font-size: .875rem; line-height: 1.45; color: var(--ink-3); }
.reco a { color: inherit; text-decoration: none; }
.reco a::after { content: ""; position: absolute; inset: 0; border-radius: inherit; }
.reco a:focus-visible { outline: none; }
.reco a:focus-visible::after { outline: 3px solid var(--navy); outline-offset: 2px; }
.reco .icon { color: var(--orange-dark); }
.orient__note { margin-top: 1.25rem; display: flex; gap: .6rem; font-size: .8125rem; line-height: 1.5; color: var(--ink-3); }
.orient__note .icon { width: 18px; height: 18px; color: var(--ok); margin-top: .1rem; }
@media (max-width: 479px) {
  .reco { grid-template-columns: auto minmax(0, 1fr); }
  .reco > .icon { display: none; }
  .orient__nav .btn { flex: 1 1 auto; }
}

/* --------------------------------------------------------------------------
   20. BANDEAU D'APPEL À L'ACTION
   <section class="section section--flush-top?"> <div class="container"> <div class="cta-band"> …
   -------------------------------------------------------------------------- */
.cta-band {
  position: relative; isolation: isolate; overflow: hidden;
  display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, .75fr); gap: 2rem; align-items: center;
  padding: clamp(2.25rem, 1.5rem + 4vw, 5rem) clamp(1.5rem, 1rem + 4vw, 5rem);
  border-radius: var(--r-xl); background: var(--night);
}
.cta-band__media { position: absolute; inset: 0 0 0 auto; width: 62%; z-index: -2; }
.cta-band__media picture, .cta-band__media img { width: 100%; height: 100%; }
.cta-band__media img { object-fit: cover; object-position: 60% 45%; }
.cta-band__media::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, var(--night) 0%, rgba(6, 25, 43, .7) 35%, rgba(6, 25, 43, .1) 100%); }
.cta-band::before {
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: url("/assets/img/motifs/ruche-clair.svg") repeat; background-size: 48px 83.14px;
  -webkit-mask-image: radial-gradient(ellipse 50% 90% at 0% 100%, #000, transparent 70%); mask-image: radial-gradient(ellipse 50% 90% at 0% 100%, #000, transparent 70%);
}
.cta-band__title { font-size: clamp(2.2rem, 1.4rem + 3.2vw, 4.25rem); line-height: 1.02; letter-spacing: -.04em; color: var(--white); }
.cta-band__title span { display: block; color: var(--orange); }
.cta-band__text { margin-top: 1.25rem; max-width: 52ch; font-size: var(--fs-lead); line-height: 1.6; color: var(--on-dark-2); }
.cta-band__actions { margin-top: 2rem; }
.cta-band__mail { display: inline-flex; align-items: center; gap: .55rem; min-height: 44px; color: var(--white); font-weight: 700; text-decoration: none; border-bottom: 2px solid rgba(255, 153, 79, .5); }
.cta-band__mail:hover { border-bottom-color: var(--orange); }
.cta-band__mail .icon { color: var(--orange-light); width: 20px; height: 20px; }
@media (max-width: 479px) {
  .cta-band { padding: 2.5rem 1.25rem; border-radius: var(--r-lg); }
  .cta-band .btn--lg { padding-inline: 1.1rem; }
}
@media (max-width: 859px) {
  .cta-band { grid-template-columns: minmax(0, 1fr); }
  .cta-band__media { width: 100%; opacity: .45; }
}

/* --------------------------------------------------------------------------
   21. FORMULAIRES ET ÉTATS D'ENVOI  (logique : site.js §11 FORMULAIRE)
   -------------------------------------------------------------------------- */
.form { display: grid; gap: 1.25rem; }
.form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.25rem; }
.form-grid .field--full { grid-column: 1 / -1; }
@media (max-width: 639px) { .form-grid { grid-template-columns: minmax(0, 1fr); } }
.field { display: grid; gap: .45rem; min-width: 0; }
.field__label { font-size: .9375rem; font-weight: 700; color: var(--fg); }
.field__label .req { color: var(--accent-text); margin-left: .15rem; }
.field__label .opt { font-weight: 500; color: var(--fg-3); font-size: .8125rem; margin-left: .3rem; }
.input, .select, .textarea {
  width: 100%; min-height: 50px; padding: .75rem .95rem;
  border: 1.5px solid var(--field-border); border-radius: var(--r-sm);   /* limite du champ ≥ 3:1 */
  background: var(--white); color: var(--ink); font-size: 1rem; line-height: 1.4;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease);
}
.textarea { min-height: 160px; resize: vertical; }
.select {
  appearance: none; -webkit-appearance: none; padding-right: 2.75rem;
  background-image: url("/assets/img/motifs/chevron-bas.svg");
  background-repeat: no-repeat; background-position: right .9rem center; background-size: 18px;
}
.input::placeholder, .textarea::placeholder { color: var(--ink-3); opacity: 1; }   /* 5,99:1 sur blanc */
.input:hover, .select:hover, .textarea:hover { border-color: var(--ink-3); }
.input:focus, .select:focus, .textarea:focus { outline: none; border-color: var(--navy); box-shadow: 0 0 0 4px rgba(9, 47, 78, .14); }
.input[aria-invalid="true"], .select[aria-invalid="true"], .textarea[aria-invalid="true"] { border-color: var(--ko); box-shadow: 0 0 0 4px rgba(180, 35, 24, .1); }
.field__help { font-size: .8125rem; line-height: 1.45; color: var(--fg-3); }
.field__error { font-size: .8125rem; font-weight: 700; color: var(--ko); }
.check { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .7rem; align-items: start; font-size: var(--fs-sm); line-height: 1.5; color: var(--fg-2); }
.check input { width: 20px; height: 20px; margin: .15rem 0 0; accent-color: var(--navy); }
@media (max-width: 719px) { .check input { width: 24px; height: 24px; margin-top: .05rem; } }   /* le libellé reste cliquable */
/* Piège à robots : hors écran (jamais display:none, que certains robots ignorent) */
.leurre { position: absolute !important; left: -10000px !important; top: auto; width: 1px; height: 1px; overflow: hidden; }
.form-status {
  display: flex; gap: .7rem; align-items: flex-start;
  padding: .95rem 1.1rem; border-radius: var(--r-sm); border: 1px solid transparent;
  font-size: .9375rem; font-weight: 600; line-height: 1.5;
}
.form-status:empty { display: none; }
.form-status.is-sending { background: var(--info-bg); border-color: #BFD6F2; color: var(--info); }
.form-status.is-ok { background: var(--ok-bg); border-color: #B5E0C9; color: var(--ok); }
.form-status.is-ko { background: var(--ko-bg); border-color: #F5C2BC; color: var(--ko); }
.form-legal { font-size: .8125rem; line-height: 1.55; color: var(--fg-3); }
.form-legal a { color: inherit; }
.form-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem 1.5rem; }
.btn.is-loading { pointer-events: none; }
.btn.is-loading::after { content: ""; width: 16px; height: 16px; border-radius: 50%; border: 2px solid currentColor; border-right-color: transparent; animation: spin .7s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }
/* Panneau de formulaire (carte blanche) */
.form-card { padding: clamp(1.4rem, 1rem + 2vw, 2.5rem); border-radius: var(--r-xl); background: var(--white); border: 1px solid var(--line); box-shadow: var(--sh-2); color: var(--ink); }

/* --------------------------------------------------------------------------
   22. ALERTES, TABLEAUX
   -------------------------------------------------------------------------- */
.alert { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: .9rem; padding: 1.1rem 1.25rem; border-radius: var(--r-md); border: 1px solid; font-size: var(--fs-sm); line-height: 1.55; }
.alert .icon { width: 22px; height: 22px; margin-top: .05rem; }
.alert strong { display: block; font-size: 1rem; margin-bottom: .15rem; }
.alert p { margin: 0; }
.alert--info { background: var(--info-bg); border-color: #BFD6F2; color: #0A3F75; }
.alert--ok { background: var(--ok-bg); border-color: #B5E0C9; color: #0B5A37; }
.alert--warn { background: var(--warn-bg); border-color: #F2D9A0; color: #6B4600; }
.alert--danger { background: var(--ko-bg); border-color: #F5C2BC; color: #8E1B12; }
.alert--neutral { background: var(--surface-2); border-color: var(--border); color: var(--fg-2); }

.table-wrap { overflow-x: auto; border: 1px solid var(--border); border-radius: var(--r-md); -webkit-overflow-scrolling: touch; }
.table { width: 100%; border-collapse: collapse; font-size: var(--fs-sm); line-height: 1.5; min-width: 560px; }
.table caption { text-align: left; padding: .9rem 1rem; font-weight: 700; color: var(--fg); }
.table th, .table td { padding: .85rem 1rem; text-align: left; vertical-align: top; border-bottom: 1px solid var(--border); }
.table thead th { background: var(--surface-2); font-size: .75rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; color: var(--fg-2); }
.table tbody tr:last-child td, .table tbody tr:last-child th { border-bottom: 0; }
.table tbody th { font-weight: 700; color: var(--fg); }
.table .num { text-align: right; font-variant-numeric: tabular-nums; }

/* --------------------------------------------------------------------------
   23. PROSE (pages légales, guide réglementaire) + SOMMAIRE COLLANT
   <div class="doc"> <nav class="toc" aria-label="Sommaire">…</nav> <article class="prose">…</article> </div>
   -------------------------------------------------------------------------- */
.doc { display: grid; grid-template-columns: minmax(0, 270px) minmax(0, 1fr); gap: clamp(2rem, 5vw, 5rem); align-items: start; }
@media (max-width: 1023px) { .doc { grid-template-columns: minmax(0, 1fr); } }
.toc { position: sticky; top: calc(var(--header-h) + 1.5rem); max-height: calc(100vh - var(--header-h) - 3rem); overflow-y: auto; padding-right: .5rem; }
.toc__title { margin-bottom: .9rem; font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--accent-text); }
.toc ol { list-style: none; margin: 0; padding: 0; border-left: 2px solid var(--border); }
.toc a { display: block; padding: .45rem 0 .45rem 1rem; margin-left: -2px; border-left: 2px solid transparent; color: var(--fg-2); font-size: .9rem; font-weight: 600; line-height: 1.4; text-decoration: none; }
.toc a:hover { color: var(--fg); border-left-color: var(--border-2); }
.toc a[aria-current="true"], .toc a.is-active { color: var(--heading); border-left-color: var(--orange); }
/* Sommaire empilé : fond blanc + filet (le titre orange foncé ne passait qu'à 4,46:1 sur brume) */
@media (max-width: 1023px) {
  .toc { position: static; max-height: none; padding: 1.25rem 1.25rem .75rem; border-radius: var(--r-md); background: var(--surface); border: 1px solid var(--border); }
}
/* Cible tactile ≥ 44 px. En bloc, PAS en flex : site.js insère des span.nowrap dans « Loi 05-20 et
   décret 2-21-406 », et un conteneur flex mangerait les espaces autour (« 05-20etdécret »). */
@media (max-width: 719px) { .toc a { padding-block: calc((44px - 1.4em) / 2); } }
.prose { max-width: 74ch; color: var(--fg-2); font-size: var(--fs-body); line-height: 1.75; }
.prose > * + * { margin-top: 1.1em; }
.prose h2 { margin-top: 2.6em; font-size: clamp(1.5rem, 1.25rem + 1vw, 2rem); line-height: 1.2; letter-spacing: -.025em; scroll-margin-top: calc(var(--header-h) + 1.5rem); }
.prose h3 { margin-top: 2em; font-size: 1.25rem; letter-spacing: -.015em; scroll-margin-top: calc(var(--header-h) + 1.5rem); }
.prose h2 + *, .prose h3 + * { margin-top: .7em; }
.prose > :first-child { margin-top: 0; }
.prose ul, .prose ol { padding-left: 1.3em; }
.prose li + li { margin-top: .45em; }
.prose ul li::marker { color: var(--orange); }
.prose ol li::marker { color: var(--accent-text); font-weight: 800; }
.prose strong { color: var(--fg); }
.prose a { color: var(--link); font-weight: 600; }
.prose blockquote { margin-inline: 0; padding: 1rem 1.25rem; border-left: 3px solid var(--orange); background: var(--surface-2); border-radius: 0 var(--r-sm) var(--r-sm) 0; }
.prose hr { border: 0; border-top: 1px solid var(--border); margin-block: 2.5em; }
.prose dl { display: grid; grid-template-columns: minmax(0, 220px) minmax(0, 1fr); gap: .6rem 1.5rem; }
.prose dt { font-weight: 700; color: var(--fg); }
.prose dd { margin: 0; }
@media (max-width: 559px) { .prose dl { grid-template-columns: minmax(0, 1fr); } .prose dd { margin-bottom: .6rem; } }
.doc-meta { display: flex; flex-wrap: wrap; gap: .5rem 1.5rem; font-size: .875rem; color: var(--fg-3); }
.source-link { display: inline-flex; align-items: center; gap: .4rem; font-size: .875rem; font-weight: 700; }
.source-link .icon { width: 16px; height: 16px; }
@media (max-width: 719px) { .source-link { min-height: 44px; } }   /* cible tactile ≥ 44 px */

/* --------------------------------------------------------------------------
   24. PIED DE PAGE
   -------------------------------------------------------------------------- */
.site-footer { position: relative; isolation: isolate; overflow: hidden; background: var(--night-3); padding-top: clamp(3.5rem, 2.5rem + 3vw, 5.5rem); }
.site-footer::before {
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: url("/assets/img/motifs/ruche-clair.svg") repeat; background-size: 48px 83.14px;
  -webkit-mask-image: radial-gradient(ellipse 45% 70% at 100% 0%, #000, transparent 70%); mask-image: radial-gradient(ellipse 45% 70% at 100% 0%, #000, transparent 70%);
}
.footer-top { display: grid; grid-template-columns: minmax(0, 4fr) minmax(0, 8fr); gap: clamp(2.5rem, 5vw, 5rem); padding-bottom: clamp(2.5rem, 2rem + 2vw, 4rem); }
.footer-brand img { width: 290px; height: auto; }
.footer-brand__text { margin-top: 1.5rem; max-width: 34ch; color: var(--on-dark-2); font-size: var(--fs-sm); line-height: 1.65; }
.footer-brand .btn { margin-top: 1.75rem; }
.footer-brand .btn[aria-current="page"] { display: none; }   /* sur /contact.html : lien vers la page elle-même */
.footer-cols { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, .8fr) minmax(0, 1.1fr) minmax(0, 1.25fr); gap: 2rem 1.75rem; }
.footer-col__title { margin-bottom: 1.1rem; font-size: .75rem; font-weight: 800; letter-spacing: var(--tracking-caps); text-transform: uppercase; color: var(--orange-light); }
.footer-col ul { list-style: none; margin: 0; padding: 0; display: grid; gap: .1rem; }
.footer-col a { display: inline-flex; align-items: center; min-height: 36px; padding: .2rem 0; color: var(--on-dark-2); font-size: .9375rem; font-weight: 500; line-height: 1.4; text-decoration: none; }
.footer-col a:hover { color: var(--white); text-decoration: underline; text-decoration-color: var(--orange); }
.footer-col a[aria-current="page"] { color: var(--white); font-weight: 700; }
.footer-col address { color: var(--on-dark-2); font-size: .9375rem; line-height: 1.6; }
.footer-col address a { min-height: 0; padding: 0; color: var(--white); font-weight: 700; overflow-wrap: anywhere; }
.footer-col address p + p { margin-top: .7rem; }
.footer-bottom {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: .75rem 2rem;
  padding-block: 1.5rem 1.75rem; border-top: 1px solid var(--line-dark);
  font-size: .8125rem; line-height: 1.5; color: var(--on-dark-3);
}
.footer-bottom__legal { display: flex; flex-wrap: wrap; align-items: center; gap: .25rem 1.25rem; list-style: none; margin: 0; padding: 0; }
.footer-bottom a { color: var(--on-dark-2); text-decoration: none; display: inline-flex; min-height: 32px; align-items: center; }
.footer-bottom a:hover { color: var(--white); text-decoration: underline; text-decoration-color: var(--orange); }
.footer-bottom a[aria-current="page"] { color: var(--white); }
@media (max-width: 1099px) {
  .footer-top { grid-template-columns: minmax(0, 1fr); }
  .footer-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
/* Cibles tactiles ≥ 44 px */
@media (max-width: 719px) {
  .footer-col a, .footer-bottom a { min-height: 44px; }
  .footer-col address a { display: inline-flex; align-items: center; min-height: 44px; }
  .footer-col address p + p { margin-top: .2rem; }
}
@media (max-width: 479px) {
  .footer-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.75rem 1.25rem; }
  .footer-col a { font-size: .875rem; }
  .footer-brand img { width: 240px; }
  .footer-brand .btn { display: none; }   /* l'appel final (.cta-band) précède toujours le pied */
}

/* --------------------------------------------------------------------------
   25. PAGE 404
   -------------------------------------------------------------------------- */
.error-page { min-height: 78vh; display: flex; align-items: center; }
.error-page__grid { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 3rem; align-items: center; }
.error-page__code { font-size: clamp(5rem, 3rem + 10vw, 11rem); font-weight: 800; line-height: .9; letter-spacing: -.06em; color: var(--orange); }
.error-page__links { margin-top: 2rem; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .5rem 2rem; max-width: 560px; }
.error-page__hex { position: relative; width: 260px; height: 300px; }
.error-page__hex .hex { position: absolute; }
@media (max-width: 719px) { .error-page__grid { grid-template-columns: minmax(0, 1fr); } .error-page__hex { display: none; } .error-page__links { grid-template-columns: minmax(0, 1fr); } }

/* --------------------------------------------------------------------------
   26. UTILITAIRES
   -------------------------------------------------------------------------- */
.sr-only, .visually-hidden {
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0;
}
.text-center { text-align: center; }
.nowrap { white-space: nowrap; }
.maxw-prose { max-width: 68ch; }
.mt-0 { margin-top: 0 !important; } .mt-2 { margin-top: .5rem; } .mt-4 { margin-top: 1rem; } .mt-5 { margin-top: 1.5rem; }
.mt-6 { margin-top: 2rem; } .mt-8 { margin-top: 3rem; } .mt-10 { margin-top: 5rem; }
@media (max-width: 559px) { .mt-10 { margin-top: 3rem; } }
.mb-0 { margin-bottom: 0 !important; } .mb-4 { margin-bottom: 1rem; } .mb-6 { margin-bottom: 2rem; } .mb-8 { margin-bottom: 3rem; }
.divider { height: 1px; border: 0; background: var(--border); margin-block: clamp(2.5rem, 4vw, 4rem); }
@media (max-width: 719px) { .hide-sm { display: none !important; } }
@media (min-width: 720px) { .show-sm { display: none !important; } }
.no-js-only { display: block; }
.js .no-js-only { display: none; }
.js-only { display: none; }
.js .js-only { display: block; }

/* --------------------------------------------------------------------------
   27. APPARITIONS AU DÉFILEMENT (site.js §5 ajoute .in)
   Sans JavaScript, tout reste visible (.js est posé par site.js).
   Délais : classes .d-1 … .d-6 (× 80 ms). Pas d'attribut style.
   -------------------------------------------------------------------------- */
.js .reveal { opacity: 0; transform: translateY(22px); transition: opacity .8s var(--ease-out), transform .9s var(--ease-out); }
.js .reveal--fade { transform: none; }
.js .reveal--scale { transform: scale(.97); }
.js .reveal--left { transform: translateX(-24px); }
.js .reveal.in { opacity: 1; transform: none; }
.reveal.d-1 { transition-delay: .08s; } .reveal.d-2 { transition-delay: .16s; } .reveal.d-3 { transition-delay: .24s; }
.reveal.d-4 { transition-delay: .32s; } .reveal.d-5 { transition-delay: .4s; } .reveal.d-6 { transition-delay: .48s; }

/* --------------------------------------------------------------------------
   28. MOUVEMENT RÉDUIT : toute animation coupée, contenu visible
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .001ms !important; animation-iteration-count: 1 !important; animation-delay: 0s !important;
    transition-duration: .001ms !important; transition-delay: 0s !important;
  }
  .js .reveal { opacity: 1 !important; transform: none !important; }
  .hero__glow { animation: none !important; opacity: .55; }
  .card--link:hover, .card--link:focus-within { transform: none; }
}

/* --------------------------------------------------------------------------
   29. IMPRESSION
   -------------------------------------------------------------------------- */
@media print {
  .site-header, .mobile-menu, .skip-link, .hero__media, .cta-band, .orient, .footer-cols, .footer-brand .btn, .lang-switch { display: none !important; }
  body { color: #000; background: #fff; font-size: 11pt; }
  .hero, .page-hero, .section--dark, .section--night, .site-footer, .method__panel {
    background: #fff !important; color: #000 !important;
    --fg: #000; --fg-2: #222; --fg-3: #444; --heading: #000; --accent-text: #8a3b00; --border: #bbb;
  }
  .hero, .page-hero { min-height: 0; padding: 1cm 0; }
  .hero__title, .page-hero__title, .hero__lead, .page-hero__lead, .method__title, .method__text { color: #000 !important; }
  .js .reveal { opacity: 1 !important; transform: none !important; }
  .section { padding-block: .8cm; }
  .prose a[href^="http"]::after { content: " (" attr(href) ")"; font-size: 9pt; color: #444; word-break: break-all; }
  .faq__item { break-inside: avoid; }
  a { color: #000; }
}
