/* ===== Bannière de consentement — MIST Normandie (R-COOKIES, 21/09/2026) =====
 *
 * AUCUNE COULEUR EN DUR. Toutes viennent des jetons de `mist-ds.css:12` — la
 * charte PDF de juin 2024. Les ratios ci-dessous ont été calculés le 21/09,
 * pas estimés :
 *
 *   --ink      #1F2444 sur blanc .................. 15,06:1   AAA
 *   --ink-soft #4A5076 sur blanc ..................  7,78:1   AAA
 *   blanc sur --blue #3E4982 ......................  8,47:1   AAA   (les 2 boutons)
 *   --blue sur blanc ..............................  8,47:1   AAA   (liens)
 *   --ink-muted #8B91AE sur blanc .................  3,11:1   ≥ 3:1 (piste d'interrupteur, élément non textuel)
 *
 * ⚠️ DEUX JETONS SONT ÉCARTÉS ICI, ET C'EST MESURÉ : `--line` (#E7E6F2) rend
 * 1,24:1 sur blanc et `--blue-soft` (#A69DCD) 2,52:1. Ni l'un ni l'autre ne
 * peut porter une bordure qui doit se voir — le critère 1.4.11 demande 3:1 pour
 * un élément d'interface. Ils restent admis comme séparateurs décoratifs, qui
 * ne portent aucune information.
 *
 * 🔴 AUCUNE RÈGLE NE VISE « accepter » NI « refuser » SÉPARÉMENT. Deux poids
 * visuels différents pour ces deux boutons, c'est le manquement le plus
 * sanctionné par la CNIL, et il s'introduit par une seule ligne de CSS. Le test
 * `test_le_css_ne_distingue_pas_accepter_de_refuser` interdit le sélecteur.
 *
 * POURQUOI UN BANDEAU ET PAS UNE FENÊTRE QUI BLOQUE. Le visiteur de ce site est
 * un salarié ou un employeur qui cherche une information de santé au travail.
 * Lui barrer la page avant de l'avoir renseigné, c'est faire du consentement
 * un péage. Le bandeau est indiscutable — il est au-dessus de tout, il ne se
 * ferme pas sans réponse — mais il laisse lire.
 */

.mist-conso,
.mist-conso-rappel-hote {
  font-family: var(--body);
  color: var(--ink);
}

/* ---------------------------------------------------------------- BANDEAU */

.mist-conso-bandeau {
  position: fixed;
  z-index: 9999;
  left: 16px;
  right: 16px;
  bottom: 16px;
  display: flex;
  align-items: center;
  gap: 24px;
  max-width: var(--maxw);
  margin: 0 auto;
  padding: 20px 24px;
  background: var(--bg);
  border-radius: var(--r-m);
  box-shadow: var(--shadow-med);
  /* La bordure est décorative : l'ombre porte déjà la séparation avec la page,
     et une bordure à 3:1 rendrait le bandeau plus dur que le reste du site. */
  border: 1px solid var(--line);
}

.mist-conso-bandeau__texte {
  flex: 1 1 auto;
  min-width: 0;
}

.mist-conso-titre {
  margin: 0 0 6px;
  font-family: var(--mist-font-display, 'Mulish', sans-serif);
  font-weight: 800;
  font-size: 17px;
  line-height: 1.2;
  color: var(--ink);
}

.mist-conso-texte {
  margin: 0;
  font-size: 14.5px;
  line-height: 1.55;
  color: var(--ink-soft);
}

.mist-conso-bandeau__actions {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 12px;
}

/* ------------------------------------------------- BOUTONS ET LIENS */

/* Une seule classe pour « Tout accepter » ET « Tout refuser ». Voir l'en-tête :
   l'égalité de poids n'est pas une affaire de goût. */
.mist-conso-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--mist-font-display, 'Mulish', sans-serif);
  font-weight: 800;
  font-size: 14.5px;
  line-height: 1;
  /* 44 px de haut : la cible tactile minimale recommandée. Un bouton de refus
     plus petit qu'un bouton d'acceptation serait un refus plus coûteux. */
  min-height: 44px;
  padding: 13px 22px;
  border: 0;
  border-radius: var(--r-pill);
  background: var(--blue);
  color: #fff;
  cursor: pointer;
  transition: background .2s, transform .16s;
}

.mist-conso-btn:hover {
  background: var(--blue-deep);
  transform: translateY(-1px);
}

.mist-conso-lien {
  font-size: 14.5px;
  font-weight: 700;
  color: var(--blue);
  text-decoration: underline;
  text-underline-offset: 2px;
  background: none;
  border: 0;
  cursor: pointer;
}

.mist-conso-lien--bouton {
  font-family: var(--mist-font-display, 'Mulish', sans-serif);
  min-height: 44px;
  padding: 0 4px;
  white-space: nowrap;
}

/* Le focus est VISIBLE et il l'est partout : c'est le seul repère de qui
   navigue au clavier, et le site affiche un bouton « A+ Accessibilité ». */
.mist-conso :focus-visible,
.mist-conso-rappel:focus-visible {
  outline: 3px solid var(--blue);
  outline-offset: 2px;
  border-radius: 4px;
}

/* ---------------------------------------------------------------- PANNEAU */

.mist-conso-voile {
  position: fixed;
  inset: 0;
  z-index: 10000;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(31, 36, 68, .55);
}

.mist-conso-panneau {
  display: flex;
  flex-direction: column;
  width: 100%;
  max-width: 660px;
  max-height: 88vh;
  background: var(--bg);
  border-radius: var(--r-m);
  box-shadow: var(--shadow-glow);
  overflow: hidden;
}

.mist-conso-panneau__tete {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 22px 24px 16px;
  border-bottom: 1px solid var(--line);
}

.mist-conso-panneau__titre {
  margin: 0;
  font-family: var(--mist-font-display, 'Mulish', sans-serif);
  font-weight: 800;
  font-size: 20px;
  color: var(--ink);
}

.mist-conso-fermer {
  flex: 0 0 auto;
  width: 44px;
  height: 44px;
  font-size: 26px;
  line-height: 1;
  color: var(--ink-soft);
  background: none;
  border: 0;
  border-radius: var(--r-pill);
  cursor: pointer;
}

.mist-conso-fermer:hover {
  background: var(--blue-mist);
  color: var(--ink);
}

/* Le corps défile, le pied reste : à 390 px, un panneau de trois catégories et
   seize cookies dépasse largement l'écran, et les boutons doivent rester
   atteignables sans faire défiler jusqu'en bas. */
.mist-conso-panneau__corps {
  flex: 1 1 auto;
  overflow-y: auto;
  padding: 4px 24px 8px;
  -webkit-overflow-scrolling: touch;
}

.mist-conso-panneau__pied {
  flex: 0 0 auto;
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  justify-content: flex-end;
  padding: 16px 24px;
  background: var(--bg-soft);
  border-top: 1px solid var(--line);
}

/* --------------------------------------------------------- CATÉGORIES */

.mist-conso-cat {
  padding: 18px 0;
  border-bottom: 1px solid var(--line);
}

.mist-conso-cat:last-of-type {
  border-bottom: 0;
}

.mist-conso-cat__tete {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
}

.mist-conso-cat__titre {
  margin: 0;
  font-family: var(--mist-font-display, 'Mulish', sans-serif);
  font-weight: 800;
  font-size: 16px;
  color: var(--ink);
}

.mist-conso-cat__resume {
  margin: 8px 0 0;
  font-size: 14px;
  line-height: 1.55;
  color: var(--ink-soft);
}

.mist-conso-fige {
  flex: 0 0 auto;
  font-size: 13px;
  font-weight: 700;
  color: var(--ink-soft);
  background: var(--blue-mist);
  padding: 7px 13px;
  border-radius: var(--r-pill);
}

/* ------------------------------------------------------- INTERRUPTEUR */

.mist-conso-bascule {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  gap: 10px;
  cursor: pointer;
}

.mist-conso-bascule input {
  /* Invisible mais PRÉSENT dans l'ordre de tabulation : `display:none` le
     sortirait du parcours clavier et l'interrupteur deviendrait inatteignable
     sans souris. */
  position: absolute;
  width: 1px;
  height: 1px;
  opacity: 0;
}

.mist-conso-bascule__piste {
  position: relative;
  width: 46px;
  height: 26px;
  border-radius: var(--r-pill);
  /* #8B91AE = 3,11:1 sur blanc : au-dessus du seuil 1.4.11 pour un élément
     d'interface. Le gris clair du kit (--line, 1,24:1) ne s'y verrait pas. */
  background: var(--ink-muted);
  transition: background .2s;
}

.mist-conso-bascule__piste::after {
  content: "";
  position: absolute;
  top: 3px;
  left: 3px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: #fff;
  transition: transform .2s;
}

.mist-conso-bascule input:checked + .mist-conso-bascule__piste {
  background: var(--blue);
}

.mist-conso-bascule input:checked + .mist-conso-bascule__piste::after {
  transform: translateX(20px);
}

.mist-conso-bascule input:focus-visible + .mist-conso-bascule__piste {
  outline: 3px solid var(--blue);
  outline-offset: 2px;
}

/* Le mot double la couleur. Sans lui, l'état d'un interrupteur ne tiendrait
   qu'à une teinte — critère 1.4.1, et une réalité pour 8 % des hommes. */
.mist-conso-bascule__mot {
  min-width: 74px;
  font-size: 13px;
  font-weight: 700;
  color: var(--ink-soft);
}

/* ------------------------------------------------ LISTE DES COOKIES */

.mist-conso-detail {
  margin-top: 12px;
}

.mist-conso-detail > summary {
  display: inline-block;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--blue);
  cursor: pointer;
  padding: 6px 0;
  text-decoration: underline;
  text-underline-offset: 2px;
}

.mist-conso-liste {
  list-style: none;
  margin: 10px 0 0;
  padding: 0;
  display: grid;
  gap: 12px;
}

.mist-conso-cookie {
  display: grid;
  gap: 3px;
  padding: 12px 14px;
  background: var(--bg-soft);
  border-radius: var(--r-s);
}

.mist-conso-cookie__nom {
  font-family: ui-monospace, 'SFMono-Regular', Menlo, monospace;
  font-size: 13px;
  font-weight: 600;
  color: var(--ink);
  word-break: break-all;
}

.mist-conso-cookie__meta {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--ink-soft);
}

.mist-conso-cookie__but {
  font-size: 13px;
  line-height: 1.5;
  color: var(--ink-soft);
}

.mist-conso-note {
  margin: 18px 0 4px;
  font-size: 13px;
  line-height: 1.55;
  color: var(--ink-soft);
}

/* ---------------------------------------------------- RAPPEL PERMANENT */

.mist-conso-rappel-hote {
  position: fixed;
  z-index: 9998;
  left: 16px;
  bottom: 16px;
}

.mist-conso-rappel {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-height: 44px;
  padding: 10px 16px;
  font-family: var(--mist-font-display, 'Mulish', sans-serif);
  font-weight: 800;
  font-size: 13.5px;
  color: #fff;
  background: var(--blue);
  border: 0;
  border-radius: var(--r-pill);
  box-shadow: var(--shadow-soft);
  cursor: pointer;
}

.mist-conso-rappel:hover {
  background: var(--blue-deep);
}

/* ------------------------------------------- BLOC DE CONTENU RETENU */

.mist-conso-bloc {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 220px;
  padding: 28px;
  background: var(--blue-mist);
  border: 1px dashed var(--blue-soft);
  border-radius: var(--r-m);
}

.mist-conso-bloc__corps {
  max-width: 460px;
  text-align: center;
}

.mist-conso-bloc__titre {
  margin: 0 0 8px;
  font-family: var(--mist-font-display, 'Mulish', sans-serif);
  font-weight: 800;
  font-size: 17px;
  color: var(--ink);
}

.mist-conso-bloc__texte {
  margin: 0 0 18px;
  font-size: 14.5px;
  line-height: 1.55;
  color: var(--ink-soft);
}

.mist-conso-bloc__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 14px;
}

.mist-conso-bloc__lien {
  font-size: 14px;
  font-weight: 700;
  color: var(--blue);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.mist-conso-bloc :focus-visible {
  outline: 3px solid var(--blue);
  outline-offset: 2px;
}

/* La page ne défile plus derrière le panneau modal : sans ça, le doigt qui
   fait défiler le panneau à 390 px emporte la page avec lui. */
.mist-conso-fige-page,
.mist-conso-fige-page body {
  overflow: hidden;
}

/* --------------------------------------------------------- 782 px ET MOINS
 * La bascule est à 782, pas à 767 : c'est la largeur à laquelle le bandeau
 * en une ligne commence à écraser son texte, mesurée — pas la rupture
 * « mobile » d'Elementor, qui ne décrit rien d'ici. */
@media (max-width: 782px) {
  .mist-conso-bandeau {
    left: 10px;
    right: 10px;
    /* 🔴 80 px ET PAS 10 — MESURE DU 21/09, ET C'EST UNE REGRESSION EVITEE DE
       JUSTESSE. A 10 px du bas, le bandeau recouvrait le bouton du chatbot
       (`.chatbot-fab`, 54 px de haut a 16 px du bord, donc un sommet a 70 px).
       `document.elementFromPoint()` au centre du bouton rendait
       `BUTTON.mist-conso-lien` : un appui a cet endroit ouvrait « Personnaliser »,
       pas la conversation. Les huit criteres de `probe_sante.js` restaient
       verts, mais son neuvieme releve — `recouverts` — sortait
       `["chatbot-fab"]` sur LES TROIS pages sondees, a 390 seulement. Le
       bandeau passe donc AU-DESSUS des pastilles flottantes au lieu de se
       poser dessus. A 1440 il n'y a rien a faire : le bandeau y est borne a
       1 200 px et centre, il ne les croise pas (mesure : recouverts = []). */
    bottom: 80px;
    flex-direction: column;
    align-items: stretch;
    gap: 16px;
    padding: 18px 18px 20px;
    /* Un bandeau plus haut que l'écran ne se referme jamais : à 390 px, le
       texte seul peut dépasser. Il défile. */
    max-height: 82vh;
    overflow-y: auto;
  }

  .mist-conso-bandeau__actions {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
  }

  /* ⚠️ `.btn{width:100%}` de `mist-ds.css:293` ne s'applique pas ici : nos
     boutons ne portent pas `.btn`. L'étirement est donc posé, pas hérité. */
  .mist-conso-btn,
  .mist-conso-lien--bouton {
    width: 100%;
  }

  .mist-conso-voile {
    padding: 0;
  }

  .mist-conso-panneau {
    max-width: none;
    max-height: 100vh;
    height: 100vh;
    border-radius: 0;
  }

  /* 🔴 LE BOUTON « A+ ACCESSIBILITÉ » PASSE AU-DESSUS DE TOUT, ET ON NE LUI
     DISPUTE PAS LA PLACE. Mesuré le 21/09 : `.ea11y-widget-button`, position
     fixe en 14/14, 44 × 44, `z-index: 2147483645` — le maximum. Monter plus
     haut le masquerait, et l'accessibilité est un engagement du site, pas un
     décor. À 1440 le panneau est centré et ne le croise pas ; à 390 il est
     plein écran, et le titre passait DERRIÈRE le bouton (capture du 21/09 :
     « Vos » illisible). On lui laisse donc 70 px = 14 + 44 + 12 de marge. */
  .mist-conso-panneau__tete {
    padding-left: 70px;
  }

  .mist-conso-panneau__pied {
    /* Trois boutons empilés, atteignables sans faire défiler le panneau
       entier : le pied ne bouge pas, c'est le corps qui défile. */
    flex-direction: column;
  }

  .mist-conso-panneau__pied .mist-conso-btn {
    width: 100%;
  }

  .mist-conso-cat__tete {
    flex-direction: column;
    align-items: flex-start;
    gap: 10px;
  }

  .mist-conso-rappel-hote {
    left: 10px;
    bottom: 10px;
  }

  .mist-conso-rappel__mot {
    /* À 390 px la pastille se réduit à son icône : elle ne doit pas couvrir
       le contenu de la page. Le nom reste annoncé par `aria-label`. */
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
  }

  .mist-conso-rappel {
    padding: 12px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .mist-conso-btn,
  .mist-conso-bascule__piste,
  .mist-conso-bascule__piste::after {
    transition: none;
  }
}
