:root {
  --afia-primary: #0F766E;
  --afia-primary-dark: #0B5C56;
  --afia-primary-tint: #E6F2F1;
  --afia-secondary: #0F766E;
  --afia-secondary-tint: #E6F2F1;
  --afia-bg: #F8FAFC;
  --afia-text: #1E293B;
  --afia-text-muted: #64748B;
  --afia-white: #FFFFFF;
  --afia-danger: #DC2626;
  --afia-danger-dark: #B91C1C;
  --afia-danger-tint: #FDECEC;
  --afia-success: #16A34A;
  --afia-success-dark: #117A38;
  --afia-success-tint: #E9F7EF;
  --afia-warning: #D97706;
  --afia-warning-dark: #B45C04;
  --afia-warning-tint: #FCF1E3;
  --afia-neutral: #64748B;
  --afia-neutral-tint: #F1F5F9;
  --afia-border: #E2E8F0;

  /* ---------------------------------------------------------------
     ÉCHELLE TYPOGRAPHIQUE — sept crans, et rien entre eux.
     Avant, la feuille comptait plus de cinquante tailles, dont treize
     comprises entre .66 et .95rem : un écart de 0,02rem ne se voit pas,
     donc ces treize tailles ne hiérarchisaient rien, elles bruitaient.
     Les crans ci-dessous sont serrés en bas (un tableau dense en a
     besoin) et s'écartent vers le haut (un titre doit trancher).
     Pour choisir : xs = ce qu'on lit si on cherche ; base = ce qu'on
     lit sans y penser ; lg et au-dessus = ce qu'on voit avant de lire. */
  --afia-fs-xs:   .72rem;   /* horodatages, légendes, badges         */
  --afia-fs-sm:   .82rem;   /* tableaux, texte secondaire            */
  --afia-fs-base: .95rem;   /* corps, champs, boutons                */
  --afia-fs-lg:   1.2rem;   /* titre de carte, sous-section          */
  --afia-fs-xl:   1.6rem;   /* titre de page                         */
  --afia-fs-2xl:  2.1rem;   /* chiffre mis en avant                  */
  --afia-fs-3xl:  2.8rem;   /* grand chiffre du tableau de bord      */

  /* Trois graisses, pas cinq. 800 n'existe plus : au-delà de 700 on ne
     gagne pas en importance, on perd en lisibilité. */
  --afia-fw-normal: 400;
  --afia-fw-medium: 600;   /* libellés, en-têtes de tableau          */
  --afia-fw-bold:   700;   /* titres, mise en avant                  */

  /* ---------------------------------------------------------------
     RAYONS — trois crans, répartis comme dans Windows 11 : plus la
     surface est grande, plus l'angle s'ouvre. Un bouton de 32 px et une
     fenêtre modale de 600 px ne peuvent pas partager le même arrondi,
     sinon le petit paraît mou et la grande paraît dure.
     Un seul jeu de valeurs pour toute l'application : c'est ce qui donne
     l'impression d'un seul produit plutôt que d'un empilement de
     composants Bootstrap par défaut. Changer ces valeurs suffit à régler
     le style partout (boutons, cartes, alertes, badges, champs).
     Toujours pas d'ombre portée : la hiérarchie vient des bordures et des
     couleurs, pas d'un effet de relief. */
  --afia-radius-sm:   4px;    /* boutons, champs, badges carrés   */
  --afia-radius:      8px;    /* cartes, alertes, tableaux, menus */
  --afia-radius-lg:  12px;    /* fenêtres modales, grands panneaux */
  --afia-radius-pill: 999px;  /* pastilles et badges en gélule    */
  /* ---------------------------------------------------------------
     ÉLÉVATION — quatre niveaux, comme la profondeur de Fluent (Windows 11).
     Une ombre n'est pas une décoration : elle dit à quelle distance de la
     page se trouve un élément, donc dans quel ordre le lire. Plus un objet
     flotte haut, plus son ombre est large et diffuse — jamais plus noire.
     Chaque niveau combine deux ombres : une large et douce pour la hauteur,
     une courte et nette pour poser le contact. Une seule ombre large donne
     cet effet « autocollant qui décolle » qu'on voit dans les maquettes.
       sm = posé sur la page (cartes, barre du haut, tableaux)
       md = soulevé au survol, ou appelant le clic (tuiles, infobulles)
       lg = flottant au-dessus du contenu (menus, listes de suggestions)
       xl = détaché de la page (fenêtres modales)
     En mode sombre, les mêmes niveaux sont redéfinis plus opaques : sur un
     fond sombre une ombre légère ne se voit pas. */
  --afia-shadow-sm: 0 1px 2px rgba(15, 23, 42, .06), 0 1px 3px rgba(15, 23, 42, .05);
  --afia-shadow-md: 0 2px 4px rgba(15, 23, 42, .06), 0 4px 12px rgba(15, 23, 42, .09);
  --afia-shadow-lg: 0 2px 6px rgba(15, 23, 42, .07), 0 10px 28px rgba(15, 23, 42, .14);
  --afia-shadow-xl: 0 4px 12px rgba(15, 23, 42, .09), 0 28px 60px rgba(15, 23, 42, .22);
  --afia-shadow: var(--afia-shadow-sm);

  /* Anneau de focus — un seul, pour que la navigation au clavier se
     reconnaisse partout. Il remplace cinq variantes qui différaient
     seulement par leur opacité, sans que personne ne puisse le voir. */
  --afia-ring: 0 0 0 .2rem rgba(15, 118, 110, .25);

  /* Champs de saisie : fond au repos, au survol, et trait de pied. Le fond
     doit se détacher de la carte blanche qui porte le champ, sans pour
     autant peser : trois valeurs très proches suffisent. */
  --afia-field-bg:       #F8FAFC;
  --afia-field-bg-hover: #F1F5F9;
  --afia-field-line:     #94A3B8;
}

/*
 * Fond de l'application (tous les écrans internes : tableaux de bord,
 * hôpitaux, utilisateurs...) — sobre et discret, pour ne pas gêner la
 * lecture de données, mais reconnaissable comme afia plutôt qu'un simple
 * fond blanc Bootstrap. Les écrans d'authentification ont leur propre
 * traitement, plus marqué (voir .afia-auth-wrapper plus bas).
 */
body {
  color: var(--afia-text);
  font-family: 'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif;
  background-color: var(--afia-bg);
  background-image:
    radial-gradient(circle at 100% 0%, rgba(15, 118, 110, 0.05), transparent 42%),
    radial-gradient(circle at 0% 100%, rgba(14, 116, 144, 0.04), transparent 46%);
  background-attachment: fixed;
  min-height: 100vh;
}

/*
 * Fond de toute l'application : motif médical (seringue, poche de sérum,
 * tensiomètre, stéthoscope, thermomètre, flacon, ampoule…) en plein écran,
 * fixe et discret, derrière le contenu (z-index -1).
 */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  background: url("../images/medical-pattern.svg") 0 0 / 300px 300px repeat;
  opacity: .45;
  pointer-events: none;
}
@media print { body::before { display: none; } }
html[data-theme="dark"] body::before { filter: brightness(1.9); opacity: .7; }

/*
 * Fond des écrans d'authentification (connexion, choix d'hôpital,
 * changement de mot de passe) : un dégradé de fond sobre, un motif
 * discret de croix médicales confiné au coin inférieur droit, et une
 * onde façon électrocardiogramme qui défile du bas-gauche vers la
 * droite. Purement décoratif (aria-hidden côté HTML).
 */
.afia-auth-wrapper {
  position: relative;
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.5rem;
  overflow: hidden;
  background:
    radial-gradient(circle at 8% 12%, rgba(14, 116, 144, 0.07), transparent 45%),
    linear-gradient(160deg, #FFFFFF 0%, var(--afia-bg) 45%, #EEF4F5 100%);
}

/* Motif médical plein écran, plus marqué au centre de la carte (comme pharma). */
.afia-auth-pattern {
  position: absolute;
  inset: 0;
  background: url("../images/medical-pattern.svg") center top / 300px 300px repeat;
  -webkit-mask-image: radial-gradient(ellipse at 50% 50%, rgba(0, 0, 0, .3) 0%, rgba(0, 0, 0, .95) 75%);
  mask-image: radial-gradient(ellipse at 50% 50%, rgba(0, 0, 0, .3) 0%, rgba(0, 0, 0, .95) 75%);
  pointer-events: none;
}
html[data-theme="dark"] .afia-auth-pattern { filter: brightness(1.9); opacity: .8; }

.afia-auth-card {
  position: relative;
  z-index: 1;
  width: 100%;
  max-width: 420px;
  background: var(--afia-white);
  border: 1px solid var(--afia-border);
  border-radius: var(--afia-radius-lg);
  /* Ombre en couches : contact net, puis ombre diffuse teintée, pour un effet de profondeur sobre. */
  box-shadow: 0 1px 2px rgba(15, 23, 42, .06), 0 8px 18px -6px rgba(15, 23, 42, .10), 0 34px 70px -24px rgba(15, 118, 110, .32);
  padding: 2.5rem 2rem;
}
html[data-theme="dark"] .afia-auth-card { box-shadow: 0 1px 2px rgba(0, 0, 0, .5), 0 12px 24px -8px rgba(0, 0, 0, .55), 0 40px 80px -30px rgba(0, 0, 0, .7), 0 0 0 1px rgba(20, 184, 166, .08); }

.afia-brand {
  text-align: center;
  margin-bottom: 1.75rem;
}

.afia-brand h1 {
  color: var(--afia-primary);
  font-family: 'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif;
  font-weight: var(--afia-fw-bold);
  font-size: var(--afia-fs-2xl);
  letter-spacing: 0.5px;
  margin-bottom: 0.25rem;
  text-transform: lowercase;
}

.afia-brand p {
  color: var(--afia-text-muted);
  font-size: var(--afia-fs-base);
  margin: 0;
}

/* Page « /chargement » : sans carte, le logo flotte sur le motif médical, avec une barre de progression fine. */
.afia-splash { position: relative; z-index: 1; text-align: center; padding: 3.2rem 4rem; animation: afia-splash-in .6s cubic-bezier(.2, .7, .2, 1) both; }
.afia-splash::before { content: ""; position: absolute; inset: -10%; z-index: -1; background: radial-gradient(closest-side, var(--afia-bg, #fff) 62%, rgba(255, 255, 255, 0) 100%); opacity: .94; }
html[data-theme="dark"] .afia-splash::before { background: radial-gradient(closest-side, #0B1220 62%, rgba(11, 18, 32, 0) 100%); }
.afia-splash__logo { width: clamp(180px, 26vw, 260px); height: auto; filter: drop-shadow(0 14px 22px rgba(15, 118, 110, .28)); }
.afia-splash__tag { margin: .7rem 0 0; color: var(--afia-text-muted); font-size: var(--afia-fs-base); letter-spacing: .01em; }
.afia-splash__ecg { display: block; width: min(340px, 78vw); height: auto; margin: 1.6rem auto .6rem; overflow: visible; }
.afia-splash__ecg path { fill: none; stroke-linecap: round; stroke-linejoin: round; }
.afia-splash__grid { stroke: rgba(15, 118, 110, .09); stroke-width: 1; }
.afia-splash__track { stroke: rgba(15, 118, 110, .22); stroke-width: 2.5; }
.afia-splash__trace { stroke: #0F766E; stroke-width: 3.5; stroke-dasharray: 24 76; stroke-dashoffset: 24; filter: drop-shadow(0 0 5px rgba(20, 184, 166, .8)); animation: afia-splash-beat 1.5s linear infinite; }
html[data-theme="dark"] .afia-splash__track { stroke: rgba(94, 234, 212, .22); }
html[data-theme="dark"] .afia-splash__grid { stroke: rgba(94, 234, 212, .07); }
html[data-theme="dark"] .afia-splash__trace { stroke: #2DD4BF; }
@keyframes afia-splash-beat { from { stroke-dashoffset: 24; } to { stroke-dashoffset: -76; } }
.afia-splash__text { margin: 0; color: var(--afia-text-muted); font-size: .9rem; }
@keyframes afia-splash-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .afia-splash { animation: none; } .afia-splash__trace { animation: none; stroke-dasharray: none; } }

/* ==========================================================================
   Système de boutons — remplace la palette par défaut de Bootstrap
   (bleu/gris/rouge/vert génériques) par la palette afia, PARTOUT dans
   l'application (pas seulement sur les écrans de connexion). Un bouton
   ".btn-primary" a exactement le même rendu qu'il soit sur le tableau de
   bord, la gestion des hôpitaux ou la connexion : c'est ce qui évite le
   mélange de styles.
   ========================================================================== */
.btn {
  border-radius: var(--afia-radius-sm);
  font-weight: var(--afia-fw-medium);
  letter-spacing: 0.1px;
}

.btn-primary {
  background-color: var(--afia-primary);
  border-color: var(--afia-primary);
  color: #fff;
}

.btn-primary:hover,
.btn-primary:focus,
.btn-primary:active {
  background-color: var(--afia-primary-dark) !important;
  border-color: var(--afia-primary-dark) !important;
  color: #fff;
}

.btn-outline-primary {
  color: var(--afia-primary);
  border-color: var(--afia-primary);
}

.btn-outline-primary:hover,
.btn-outline-primary:focus {
  background-color: var(--afia-primary);
  border-color: var(--afia-primary);
  color: #fff;
}

/* "Secondaire" = action neutre (annuler, retour, déconnexion...), jamais
   le gris/bleu par défaut de Bootstrap : un contour discret qui reste
   dans la même famille que le reste de l'interface. */
.btn-secondary,
.btn-outline-secondary {
  background-color: #fff;
  color: var(--afia-text);
  border-color: var(--afia-border);
}

.btn-secondary:hover,
.btn-secondary:focus,
.btn-outline-secondary:hover,
.btn-outline-secondary:focus {
  background-color: var(--afia-neutral-tint);
  border-color: var(--afia-secondary);
  color: var(--afia-text);
}

.btn-danger {
  background-color: var(--afia-danger);
  border-color: var(--afia-danger);
}

.btn-danger:hover,
.btn-danger:focus {
  background-color: var(--afia-danger-dark) !important;
  border-color: var(--afia-danger-dark) !important;
}

.btn-outline-danger {
  color: var(--afia-danger);
  border-color: var(--afia-danger);
}

.btn-outline-danger:hover,
.btn-outline-danger:focus {
  background-color: var(--afia-danger);
  border-color: var(--afia-danger);
  color: #fff;
}

.btn-success {
  background-color: var(--afia-success);
  border-color: var(--afia-success);
}

.btn-success:hover,
.btn-success:focus {
  background-color: var(--afia-success-dark) !important;
  border-color: var(--afia-success-dark) !important;
}

.btn-outline-success {
  color: var(--afia-success);
  border-color: var(--afia-success);
}

.btn-outline-success:hover,
.btn-outline-success:focus {
  background-color: var(--afia-success);
  border-color: var(--afia-success);
  color: #fff;
}

.btn-warning {
  background-color: var(--afia-warning);
  border-color: var(--afia-warning);
  color: #fff;
}

.btn-warning:hover,
.btn-warning:focus {
  background-color: var(--afia-warning-dark) !important;
  border-color: var(--afia-warning-dark) !important;
  color: #fff;
}

.btn-outline-warning {
  color: var(--afia-warning-dark);
  border-color: var(--afia-warning);
  background-color: #fff;
}

.btn-outline-warning:hover,
.btn-outline-warning:focus {
  background-color: var(--afia-warning);
  border-color: var(--afia-warning);
  color: #fff;
}

/* Montants pris en charge par un tiers (bon / assureur) */
.afia-insured { color: var(--afia-primary-dark); font-weight: var(--afia-fw-medium); }

/* Cases à cocher / boutons radio aux couleurs afia */
.form-check-input:checked {
  background-color: var(--afia-primary);
  border-color: var(--afia-primary);
}
.form-check-input:focus { border-color: var(--afia-primary); box-shadow: var(--afia-ring); }

/* Champs de saisie "ligne du bas" : pas de boîte, juste un trait sous le
   texte (comme une fiche papier) — plus sobre et plus rapide à scanner
   sur un formulaire long qu'une case pleine. */
/* Champs de saisie — modèle Fluent (Windows 11) plutôt que le trait souligné
   de Material qui était en place. Trois raisons de changer :
   1) un champ sans contour ne se voit pas tant qu'on ne le cherche pas, alors
      qu'une saisie est l'endroit où l'on veut être guidé ;
   2) dans une interface désormais bordée et arrondie, le trait seul faisait
      cohabiter deux langages ;
   3) un champ à fond léger se distingue de la carte qui le porte, donc on
      sait où l'on peut écrire avant même de cliquer.
   Le principe de Fluent : un fond discret au repos, qui s'éclaircit au survol
   et devient blanc à la saisie, plus un trait d'accent en bas qui s'épaissit
   quand le champ reçoit le focus. Les épaisseurs ne sont PAS obtenues en
   changeant la bordure — cela déplacerait le texte d'un pixel — mais par une
   ombre interne, qui ne prend aucune place.
   Aucun remplissage n'est imposé ici : Bootstrap gère déjà les variantes
   « -sm » et « -lg », ainsi que la place de la flèche des listes. */
.form-control,
.form-select {
  border: 1px solid var(--afia-border);
  border-bottom-color: var(--afia-field-line);
  border-radius: var(--afia-radius-sm);
  background-color: var(--afia-field-bg);
  box-shadow: none;
  transition: background-color .12s ease, border-color .12s ease, box-shadow .12s ease;
}

.form-control:hover:not(:disabled):not(:focus),
.form-select:hover:not(:disabled):not(:focus) {
  background-color: var(--afia-field-bg-hover);
}

.form-control:focus,
.form-select:focus {
  background-color: var(--afia-white);
  border-color: var(--afia-border);
  border-bottom-color: var(--afia-primary);
  /* Le trait d'accent de 2 px, sans décaler le contenu. */
  box-shadow: inset 0 -1px 0 0 var(--afia-primary);
  outline: 0;
}

/* ==========================================================================
   Cartes — un seul style de carte dans toute l'application (rayon, bordure
   et ombre identiques), que ce soit une carte de contenu générique ou une
   carte "KPI" (voir .afia-kpi-card, qui partage les mêmes tokens).
   ========================================================================== */
.card {
  border: 1px solid var(--afia-border);
  border-radius: var(--afia-radius);
  box-shadow: 0 1px 2px rgba(15, 23, 42, .05), 0 6px 16px -8px rgba(15, 23, 42, .12);
}
html[data-theme="dark"] .card { box-shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 8px 20px -10px rgba(0, 0, 0, .55); }

.card-title {
  font-weight: var(--afia-fw-bold);
  color: var(--afia-text);
  font-size: var(--afia-fs-base);
  margin-bottom: 1rem;
}

/* Remplace le rose/magenta par défaut de Bootstrap pour <code> (codes
   d'hôpital, noms de permission dans le texte...) par un style neutre,
   dans la même famille que le reste de l'interface. */
code {
  background: var(--afia-neutral-tint);
  color: var(--afia-text);
  border: 1px solid var(--afia-border);
  border-radius: var(--afia-radius-sm);
  padding: 0.1rem 0.4rem;
  font-size: 0.9em;
}

/* ==========================================================================
   Alertes — remplace le vert/rouge/jaune "flashy" par défaut de Bootstrap
   par des versions teintées, discrètes, cohérentes avec les couleurs afia.
   ========================================================================== */
.alert {
  border: 1px solid transparent;
  border-left-width: 4px;
  border-radius: var(--afia-radius-sm);
}

.alert-success {
  background-color: var(--afia-success-tint);
  border-left-color: var(--afia-success);
  color: var(--afia-success-dark);
}

.alert-danger {
  background-color: var(--afia-danger-tint);
  border-left-color: var(--afia-danger);
  color: var(--afia-danger-dark);
}

.alert-warning {
  background-color: var(--afia-warning-tint);
  border-left-color: var(--afia-warning);
  color: var(--afia-warning-dark);
}

.alert-info {
  background-color: var(--afia-secondary-tint);
  border-left-color: var(--afia-secondary);
  color: var(--afia-secondary);
}

/* ==========================================================================
   Badges de statut — remplace les "style=background:..." écrits au coup
   par coup dans les vues par un jeu unique de classes, réutilisable
   partout (personnel, hôpitaux, notifications...).
   ========================================================================== */
.afia-badge {
  display: inline-block;
  border-radius: var(--afia-radius-sm);
  padding: 0.2rem 0.75rem;
  font-size: var(--afia-fs-sm);
  font-weight: var(--afia-fw-medium);
  color: #fff;
}

.afia-badge--success { background: var(--afia-success); }
.afia-badge--danger  { background: var(--afia-danger); }
.afia-badge--warning { background: var(--afia-warning); }
.afia-badge--info    { background: var(--afia-primary-dark); }
/* État binaire d'un enregistrement : une pastille de couleur et du texte normal,
   PAS un badge plein. Un badge plein attire l'œil et doit donc être réservé à ce
   qui appelle une décision — un abonnement échu, une alerte. Dire « ce compte est
   ouvert » avec la même force visuelle qu'« il faut payer » met les deux au même
   niveau, et l'œil ne sait plus lequel lire en premier. */
.afia-state { display: inline-flex; align-items: center; gap: .4rem; white-space: nowrap; color: var(--afia-text); }
.afia-state::before { content: ''; width: .5rem; height: .5rem; border-radius: 50%; background: var(--afia-neutral); flex: 0 0 auto; }
.afia-state--on::before { background: var(--afia-success); }
.afia-state--off { color: var(--afia-text-muted); }

.afia-badge--neutral {
  background: var(--afia-neutral-tint);
  color: var(--afia-text-muted);
  border: 1px solid var(--afia-border);
}

.afia-hospital-choice {
  border: 1px solid var(--afia-border);
  border-radius: var(--afia-radius);
  padding: 1rem 1.25rem;
  margin-bottom: 0.75rem;
  cursor: pointer;
  transition: border-color 0.15s ease;
}

.afia-hospital-choice:hover {
  border-color: var(--afia-primary);
}

.afia-hospital-choice input[type="radio"] {
  margin-right: 0.75rem;
}

.afia-topbar {
  background: var(--afia-white);
  border-bottom: 1px solid var(--afia-border);
  padding: 0.75rem 1.5rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.afia-topbar .afia-logo {
  color: var(--afia-primary);
  font-weight: var(--afia-fw-bold);
  font-size: var(--afia-fs-lg);
  text-transform: lowercase;
}

/*
 * Bouton "grille" (9 points) de la barre du haut : mène à la page plein
 * écran "Menu principal" (voir Modules/Menu et .afia-menu-page ci-dessous)
 * — ce n'est plus un panneau déroulant, juste un lien stylé comme un
 * bouton.
 */
.afia-menu-trigger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.1rem;
  height: 2.1rem;
  padding: 0;
}

/*
 * Page "Menu principal" (plein écran) : une grande grille de tuiles, une
 * par module accessible à l'utilisateur — sur le modèle des lanceurs
 * d'applications désormais familiers (Google, Microsoft 365...), mais en
 * page dédiée plutôt qu'en petit panneau. Voir Modules/Menu/views/menu.php
 * et Afia\Core\Navigation pour la liste des modules (filtrée par
 * permission).
 */
.afia-menu-page {
  min-height: calc(100vh - 67px);
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 1.5rem 1.5rem 2.5rem;
}

.afia-menu-header {
  text-align: center;
  margin-bottom: 1.25rem;
}

.afia-menu-header h1 {
  font-weight: var(--afia-fw-bold);
  color: var(--afia-text);
  margin-bottom: 0.25rem;
}

/* Recherche d'un module */
.afia-menu-search { position: relative; width: min(420px, 100%); margin: 0 auto; }
.afia-menu-search svg { position: absolute; left: .9rem; top: 50%; transform: translateY(-50%); color: var(--afia-text-muted); pointer-events: none; }
.afia-menu-search .form-control { padding-left: 2.5rem; border-radius: var(--afia-radius-pill); background: var(--afia-white); border-color: var(--afia-border); }
.afia-menu-search .form-control:focus { border-color: var(--afia-border); border-bottom-color: var(--afia-primary); box-shadow: inset 0 -1px 0 0 var(--afia-primary); }

/* Catégories du menu */
.afia-menu-groups { width: 100%; max-width: 1440px; display: flex; flex-direction: column; gap: 1.75rem; }
.afia-menu-group[hidden], .afia-menu-tile[hidden] { display: none; }
.afia-menu-group__head {
  display: flex; align-items: baseline; gap: .75rem; flex-wrap: wrap;
  padding-bottom: .5rem; margin-bottom: .9rem; border-bottom: 1px solid var(--afia-border); position: relative;
}
.afia-menu-group__head::after { content: ""; position: absolute; left: 0; bottom: -1px; width: 3.5rem; height: 2px; background: var(--afia-primary); }
.afia-menu-group__head h2 { font-size: var(--afia-fs-base); font-weight: var(--afia-fw-bold); letter-spacing: .02em; margin: 0; color: var(--afia-text); }
.afia-menu-group__desc { font-size: var(--afia-fs-sm); color: var(--afia-text-muted); flex: 1; }
.afia-menu-group__count {
  font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-medium); color: var(--afia-primary-dark); background: var(--afia-primary-tint);
  border-radius: var(--afia-radius-pill); padding: .1rem .55rem;
}
.afia-menu-empty { text-align: center; padding: 2rem 0; }

.afia-menu-grid {
  display: grid;
  /* Les tuiles se répartissent d'elles-mêmes selon la largeur disponible. */
  grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
  gap: .85rem 1rem;
  width: 100%;
}

@media (max-width: 575.98px)  { .afia-menu-grid { grid-template-columns: 1fr; gap: .6rem; } }

.afia-menu-tile {
  display: flex;
  flex-direction: row;
  align-items: center;
  text-align: left;
  gap: 0.85rem;
  padding: 0.85rem 1rem;
  background: var(--afia-white);
  border: 1px solid var(--afia-border);
  border-radius: var(--afia-radius);
  text-decoration: none;
  color: var(--afia-text);
  box-shadow: var(--afia-shadow);
  transition: border-color .15s, box-shadow .15s, transform .15s;
  min-width: 0;
}

.afia-menu-tile:hover,
.afia-menu-tile:focus {
  border-color: var(--afia-primary);
  color: var(--afia-primary-dark);
  box-shadow: 0 6px 16px rgba(15, 118, 110, .14);
  transform: translateY(-2px);
  outline: none;
}
.afia-menu-tile:focus-visible { box-shadow: var(--afia-ring); }

.afia-menu-tile-icon {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2.9rem;
  height: 2.9rem;
  background: var(--afia-primary-tint);
  color: var(--afia-primary);
  border-radius: var(--afia-radius);
  transition: background .15s, color .15s;
}

.afia-menu-tile:hover .afia-menu-tile-icon,
.afia-menu-tile:focus .afia-menu-tile-icon {
  background: var(--afia-primary);
  color: #fff;
}

.afia-menu-tile-icon svg {
  width: 1.5rem;
  height: 1.5rem;
}

.afia-menu-tile-text { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; }

.afia-menu-tile-label {
  display: block;
  font-weight: var(--afia-fw-medium);
  font-size: var(--afia-fs-base);
  line-height: 1.2;
}

.afia-menu-tile-desc {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  margin-top: .15rem;
  font-size: var(--afia-fs-xs);
  color: var(--afia-text-muted);
  line-height: 1.3;
}

.afia-badge-role {
  background: var(--afia-secondary);
  color: #fff;
  border-radius: var(--afia-radius-sm);
  padding: 0.2rem 0.75rem;
  font-size: var(--afia-fs-sm);
}

/* Cartes de statistiques (KPI) du tableau de bord : même rayon et même
   ombre que .card (ci-dessus), pour rester dans la même famille visuelle —
   seul l'accent de gauche les distingue d'une carte de contenu classique. */
.afia-kpi-card {
  background: var(--afia-white);
  border: 1px solid var(--afia-border);
  border-left: 4px solid var(--afia-primary);
  border-radius: var(--afia-radius);
  box-shadow: var(--afia-shadow);
  padding: 1rem 1.25rem;
  height: 100%;
}

.afia-kpi-card--warning {
  border-left-color: var(--afia-warning);
}

.afia-kpi-value {
  font-size: var(--afia-fs-xl);
  font-weight: var(--afia-fw-bold);
  letter-spacing: -.015em;
  color: var(--afia-text);
  line-height: 1.2;
}

.afia-kpi-label {
  font-size: var(--afia-fs-sm);
  color: var(--afia-text-muted);
  margin-top: 0.15rem;
}

/* Étiquette au-dessus d'une valeur affichée (fiche patient, etc.) : une
   grille de champs "label en petit/gris, valeur en dessous" se lit mieux
   et remplit un espace large bien plus proprement qu'une liste
   étiquette/valeur sur une seule colonne étroite. */
.afia-field-label {
  font-size: var(--afia-fs-sm);
  color: var(--afia-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.02em;
  margin-bottom: 0.15rem;
}

/* Onglets (ex : Structure hospitalière) et liens : palette afia, pas le bleu Bootstrap par défaut. */
.nav-tabs .nav-link { color: var(--afia-primary); }
.nav-tabs .nav-link:hover { color: var(--afia-primary-dark); }
.nav-tabs .nav-link.active { color: var(--afia-text); font-weight: var(--afia-fw-medium); }
main a:not(.btn):not(.nav-link) { color: var(--afia-primary); }
main a:not(.btn):not(.nav-link):hover { color: var(--afia-primary-dark); }

/* ---- Barre latérale d'un module (ex : Laboratoire) ---- */
.module-layout { display: flex; align-items: stretch; min-height: calc(100vh - 56px); }
.module-sidebar { flex: 0 0 220px; background: #fff; border-right: 1px solid #E2E8F0; padding: 1.25rem .75rem; }
.module-sidebar__title { font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .06em; text-transform: uppercase; color: #64748B; padding: 0 .75rem .5rem; }
.module-sidebar .nav-link { color: #334155; border-radius: var(--afia-radius); padding: .5rem .75rem; }
.module-sidebar .nav-link:hover { background: #F1F5F9; color: var(--afia-primary-dark); }
.module-sidebar .nav-link.active { background: var(--afia-primary); color: #fff; font-weight: var(--afia-fw-medium); }
.module-main { flex: 1 1 auto; min-width: 0; }
@media (max-width: 767.98px) {
  .module-layout { flex-direction: column; }
  .module-sidebar { flex-basis: auto; border-right: 0; border-bottom: 1px solid #E2E8F0; padding: .5rem; }
  .module-sidebar .nav { flex-direction: row !important; flex-wrap: wrap; }
}

/* ---- Pagination (Shared/views/_pagination.php) ---- */
.afia-pagination .page-link { color: var(--afia-primary); }
.afia-pagination .page-link:hover { color: var(--afia-primary-dark); background: #F1F5F9; }
.afia-pagination .page-item.active .page-link { background: var(--afia-primary); border-color: var(--afia-primary); color: #fff; }
.afia-pagination .page-item.disabled .page-link { color: #94A3B8; }

/* ---- Barre du haut : fil d'Ariane, recherche, cloche, menu utilisateur ---- */
.afia-topbar { gap: 1rem; position: sticky; top: 0; z-index: 1030; }
.afia-topbar__left { display: flex; align-items: center; gap: .75rem; min-width: 0; }
.afia-topbar__right { display: flex; align-items: center; gap: .75rem; }

.afia-breadcrumb { display: flex; align-items: center; gap: .4rem; margin-left: .75rem; padding-left: 1rem;
  border-left: 1px solid var(--afia-border); font-size: var(--afia-fs-base); white-space: nowrap; overflow: hidden; }
.afia-breadcrumb a { color: var(--afia-text-muted, #64748B); text-decoration: none; }
.afia-breadcrumb a:hover { color: var(--afia-primary); text-decoration: underline; }
.afia-breadcrumb [aria-current="page"] { font-weight: var(--afia-fw-medium); }
.afia-breadcrumb__sep { color: #94A3B8; }

.afia-search { position: relative; width: 18rem; }
.afia-search input { padding-left: .75rem; }
.afia-search__results { position: absolute; top: calc(100% + .35rem); left: 0; right: 0; z-index: 1050; margin: 0; padding: .25rem;
  list-style: none; background: #fff; border: 1px solid var(--afia-border); border-radius: var(--afia-radius); box-shadow: var(--afia-shadow-lg); }
.afia-search__results[hidden] { display: none; }
.afia-search__results a { display: flex; flex-direction: column; padding: .45rem .6rem; border-radius: var(--afia-radius); color: inherit; text-decoration: none; }
.afia-search__results a:hover, .afia-search__results a.is-active { background: #F1F5F9; }
.afia-search__name { font-weight: var(--afia-fw-medium); }
.afia-search__meta, .afia-search__empty { font-size: var(--afia-fs-sm); color: #64748B; }
.afia-search__empty { padding: .5rem .6rem; }

.afia-dropdown { position: relative; }
.afia-icon-btn { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 2.25rem; height: 2.25rem;
  background: transparent; border: 1px solid var(--afia-border); border-radius: var(--afia-radius); color: #334155; cursor: pointer; }
.afia-icon-btn:hover { background: #F1F5F9; }
.afia-bell-count { position: absolute; top: -.4rem; right: -.4rem; min-width: 1.15rem; height: 1.15rem; padding: 0 .3rem;
  border-radius: var(--afia-radius-pill); background: #DC2626; color: #fff; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); line-height: 1.15rem; text-align: center; }

.afia-user-btn { display: inline-flex; align-items: center; gap: .55rem; padding: .25rem .6rem .25rem .3rem; background: transparent;
  border: 1px solid var(--afia-border); border-radius: var(--afia-radius-pill); color: #1E293B; cursor: pointer; }
.afia-user-btn:hover { background: #F1F5F9; }
.afia-avatar { display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem; border-radius: 50%;
  background: var(--afia-primary); color: #fff; font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-bold); }
.afia-user-text { display: flex; flex-direction: column; text-align: left; line-height: 1.15; max-width: 14rem; }
.afia-user-name { font-weight: var(--afia-fw-medium); font-size: var(--afia-fs-base); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.afia-user-sub { font-size: var(--afia-fs-xs); color: #64748B; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.afia-dd-menu { position: absolute; top: calc(100% + .5rem); right: 0; z-index: 1050; min-width: 15rem; background: #fff;
  border: 1px solid var(--afia-border); border-radius: var(--afia-radius); box-shadow: var(--afia-shadow-lg); overflow: hidden; }
.afia-dd-menu[hidden] { display: none; }
.afia-dd-menu--wide { width: 22rem; max-width: calc(100vw - 1rem); }
.afia-dd-header { padding: .75rem 1rem; border-bottom: 1px solid var(--afia-border); background: #F8FAFC; }
.afia-dd-item { display: block; width: 100%; padding: .55rem 1rem; text-align: left; background: none; border: 0; color: #1E293B; text-decoration: none; cursor: pointer; font: inherit; }
.afia-dd-item:hover { background: #F1F5F9; color: var(--afia-primary-dark); }
.afia-dd-item--danger { color: #B91C1C; }
.afia-dd-item--danger:hover { background: #FEF2F2; color: #991B1B; }

/* --- Colonne d'actions d'une ligne de liste (voir Shared/views/_row_actions.php)
   Une action principale, le reste sous « ⋯ ». Le bouton « ⋯ » reste discret
   tant qu'on ne le survole pas : c'est l'action principale qui doit attirer
   l'œil, pas le menu. --- */
/* --- Les listes dans un cadre --- Un tableau posé à même la page, à fleur
   des bords, ne se lit pas comme un objet : il se lit comme du fond. Le
   cadre arrondi lui donne une limite, et la règle vaut pour toutes les
   listes de l'application d'un coup. Le défilement horizontal de Bootstrap
   est conservé : un conteneur défilant rogne son contenu sur l'angle. --- */
.table-responsive { border: 1px solid var(--afia-border); border-radius: var(--afia-radius); background: var(--afia-white); }
.table-responsive > .table { margin-bottom: 0; }
.table-responsive > .table > :not(caption) > * > *:first-child { padding-left: 1rem; }
.table-responsive > .table > :not(caption) > * > *:last-child { padding-right: 1rem; }
.table-responsive > .table > tbody > tr:last-child > * { border-bottom: 0; }
/* Un tableau déjà posé dans une carte n'a pas besoin de son propre cadre :
   deux bordures emboîtées, c'est une de trop. */
.card .table-responsive, .afia-card .table-responsive, .afia-panel .table-responsive,
.modal .table-responsive { border: 0; border-radius: 0; background: transparent; }
.card .table-responsive > .table > :not(caption) > * > *:first-child,
.afia-card .table-responsive > .table > :not(caption) > * > *:first-child { padding-left: .5rem; }
.card .table-responsive > .table > :not(caption) > * > *:last-child,
.afia-card .table-responsive > .table > :not(caption) > * > *:last-child { padding-right: .5rem; }

.afia-rowact { display: inline-flex; align-items: center; gap: .35rem; justify-content: flex-end; }
.afia-rowact__more { display: inline-flex; align-items: center; justify-content: center; width: 2rem; height: 2rem;
  padding: 0; border: 1px solid transparent; border-radius: var(--afia-radius-sm); background: none;
  color: var(--afia-text-muted); cursor: pointer; line-height: 0; }
.afia-rowact__more:hover { border-color: var(--afia-border); background: var(--afia-neutral-tint); color: var(--afia-text); }
.afia-rowact__more[aria-expanded="true"] { border-color: var(--afia-primary); background: var(--afia-primary-tint); color: var(--afia-primary-dark); }
.afia-dd-menu--actions { min-width: 12rem; }
.afia-rowact__sep { height: 1px; margin: .3rem 0; background: var(--afia-border); }
html[data-theme="dark"] .afia-rowact__more:hover { background: #1B2639; color: var(--afia-text); }
.afia-dd-sep { border-top: 1px solid var(--afia-border); }
.afia-dd-empty { padding: 1.25rem 1rem; color: #64748B; text-align: center; }
.afia-dd-footer { display: block; padding: .6rem 1rem; text-align: center; border-top: 1px solid var(--afia-border); font-weight: var(--afia-fw-medium); text-decoration: none; color: var(--afia-primary); }
.afia-dd-footer:hover { background: #F1F5F9; }

.afia-notif-list { list-style: none; margin: 0; padding: 0; max-height: 22rem; overflow-y: auto; }
.afia-notif-list a { display: block; padding: .65rem 1rem; border-bottom: 1px solid #F1F5F9; color: inherit; text-decoration: none; position: relative; }
.afia-notif-list a:hover { background: #F8FAFC; }
.afia-notif-list a.is-unread { background: #F0FDFA; padding-left: 1.6rem; }
.afia-notif-list a.is-unread::before { content: ""; position: absolute; left: .7rem; top: 1.05rem; width: .5rem; height: .5rem; border-radius: 50%; background: var(--afia-primary); }
.afia-notif-title { display: block; font-weight: var(--afia-fw-medium); font-size: var(--afia-fs-base); }
.afia-notif-text { display: block; font-size: var(--afia-fs-sm); color: #475569; overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.afia-notif-time { display: block; font-size: var(--afia-fs-xs); color: #94A3B8; margin-top: .15rem; }
.afia-unread-dot { display: inline-block; width: .55rem; height: .55rem; border-radius: 50%; background: var(--afia-primary); }

@media (max-width: 991.98px) {
  .afia-breadcrumb { display: none; }
  .afia-search { width: 11rem; }
  .afia-user-text { display: none; }
  .afia-user-btn { padding-right: .4rem; }
}
@media (max-width: 575.98px) {
  .afia-topbar { padding: .5rem .75rem; }
  .afia-search { display: none; }
}
.afia-dd-header .btn-link { color: var(--afia-primary); text-decoration: none; font-weight: var(--afia-fw-medium); }
.afia-dd-header .btn-link:hover { color: var(--afia-primary-dark); text-decoration: underline; }

/* Finitions de la barre du haut */
.afia-topbar { box-shadow: var(--afia-shadow-sm); }
.afia-search .form-control {
  height: 2.25rem; padding: 0 .9rem 0 2.2rem; border: 1px solid transparent; border-radius: var(--afia-radius-pill); background-color: #F1F5F9;
  background-repeat: no-repeat; background-position: .8rem center; background-size: 1rem;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748B' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E");
  box-shadow: none; transition: background-color .15s, border-color .15s;
}
.afia-search .form-control:hover { background-color: #E8EEF4; }
.afia-search .form-control:focus { background-color: #fff; border-color: var(--afia-primary); box-shadow: var(--afia-ring); outline: 0; }
.afia-search .form-control::placeholder { color: #64748B; }
.afia-icon-btn, .afia-user-btn { transition: background-color .15s, border-color .15s; }
.afia-icon-btn:focus-visible, .afia-user-btn:focus-visible { outline: 2px solid var(--afia-primary); outline-offset: 2px; }

/* Message du système (accès refusé, information) : bandeau en haut de page */
.afia-notice {
    position: fixed;
    top: 4.25rem;
    left: 50%;
    transform: translateX(-50%);
    z-index: 1080;
    max-width: min(92vw, 36rem);
    display: flex;
    align-items: flex-start;
    gap: .75rem;
    padding: .75rem 1rem;
    border-radius: var(--afia-radius);
    background: #fff7e6;
    color: #7a4b00;
    border: 1px solid #f3c969;
    box-shadow: var(--afia-shadow-lg);
}
.afia-notice__close {
    border: 0;
    background: transparent;
    color: inherit;
    font-size: var(--afia-fs-lg);
    line-height: 1;
    cursor: pointer;
}

/* ---- Étapes du circuit d'achat (chevrons) ---- */
.afia-stepper { display: flex; margin: 0 0 .5rem; overflow-x: auto; padding: .25rem 0 .5rem; --notch: 16px; }
.afia-step { flex: 1 1 0; min-width: 8rem; margin-left: calc(var(--notch) * -1 + 4px); }
.afia-step:first-child { margin-left: 0; }
.afia-step__wrap { filter: drop-shadow(0 1px 1px rgba(15, 23, 42, .25)); }
.afia-step__shape {
    display: flex; align-items: center; gap: .45rem; min-height: 3rem;
    padding: .4rem calc(var(--notch) + .25rem) .4rem calc(var(--notch) + .35rem);
    clip-path: polygon(0 0, calc(100% - var(--notch)) 0, 100% 50%, calc(100% - var(--notch)) 100%, 0 100%, var(--notch) 50%);
    background: var(--afia-neutral-tint); color: var(--afia-text-muted);
}
.afia-step:first-child .afia-step__shape { padding-left: .8rem; clip-path: polygon(0 0, calc(100% - var(--notch)) 0, 100% 50%, calc(100% - var(--notch)) 100%, 0 100%); }
.afia-step__dot { flex: none; font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-base); opacity: .9; }
.afia-step__label { font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-medium); line-height: 1.15; }
.afia-step--done .afia-step__shape { background: linear-gradient(180deg, #14907f, var(--afia-primary-dark)); color: #fff; }
.afia-step--current .afia-step__shape { background: linear-gradient(180deg, #f59e0b, var(--afia-warning-dark)); color: #fff; }
.afia-step--partial .afia-step__shape { background: var(--afia-warning-tint); color: var(--afia-warning-dark); }
.afia-step--refused .afia-step__shape, .afia-step--cancelled .afia-step__shape { background: linear-gradient(180deg, #ef4444, var(--afia-danger-dark)); color: #fff; }
.afia-step--pending .afia-step__shape { background: var(--afia-primary-tint); color: var(--afia-text-muted); }
.afia-step__meta { display: block; min-height: 2.4em; padding: .25rem 0 0 calc(var(--notch) + .35rem); font-size: var(--afia-fs-xs); color: var(--afia-text-muted); line-height: 1.25; filter: none; }
.afia-step:first-child .afia-step__meta { padding-left: .8rem; }
.afia-stepper__next { font-size: var(--afia-fs-base); margin-bottom: 1rem; }
.afia-steps-mini { min-width: 8.5rem; }
.afia-steps-mini__bar { display: flex; gap: 2px; margin-bottom: .2rem; }
.afia-steps-mini__seg { flex: 1; height: 6px; border-radius: var(--afia-radius-sm); background: var(--bs-border-color, #dee2e6); }
.afia-steps-mini__seg--done { background: var(--afia-success, #198754); }
.afia-steps-mini__seg--current, .afia-steps-mini__seg--partial { background: var(--afia-warning, #f59f00); }
.afia-steps-mini__seg--refused, .afia-steps-mini__seg--cancelled { background: var(--afia-danger, #dc3545); }

.afia-group-row th { background: var(--afia-primary-tint); color: var(--afia-primary-dark); font-size: var(--afia-fs-base); border-left: 4px solid var(--afia-primary); }

/* ---- Totaux d'un bon d'achat ---- */
.afia-totals { display: flex; flex-wrap: wrap; gap: 1.5rem; align-items: flex-end; justify-content: space-between; margin-top: 1.25rem; padding-top: 1.25rem; border-top: 1px solid var(--bs-border-color, #dee2e6); }
.afia-totals__pay { flex: 1 1 14rem; max-width: 24rem; }
.afia-totals__label { font-size: var(--afia-fs-sm); text-transform: uppercase; letter-spacing: .04em; color: var(--afia-text-muted); margin-bottom: .4rem; }
.afia-totals__pay .progress { height: .6rem; background: var(--afia-neutral-tint); border-radius: var(--afia-radius-pill); }
.afia-totals__pay .progress-bar { background: var(--afia-warning); border-radius: var(--afia-radius-pill); }
.afia-totals__box { flex: 0 1 22rem; min-width: 16rem; margin: 0; background: var(--afia-primary-tint); border: 1px solid #cfe5e2; border-radius: var(--afia-radius); overflow: hidden; }
.afia-totals__row { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; padding: .55rem 1rem; }
.afia-totals__row + .afia-totals__row { border-top: 1px solid #d8e9e7; }
.afia-totals__row dt { font-weight: var(--afia-fw-medium); color: var(--afia-text-muted); }
.afia-totals__row dd { margin: 0; font-weight: var(--afia-fw-medium); font-variant-numeric: tabular-nums; }
.afia-totals__row--balance { padding: .8rem 1rem; }
.afia-totals__row--balance dt { color: var(--afia-text); font-weight: var(--afia-fw-medium); }
.afia-totals__row--balance dd { font-size: var(--afia-fs-lg); }
.afia-totals__row--balance.is-due { background: var(--afia-warning-tint); }
.afia-totals__row--balance.is-due dd { color: var(--afia-warning-dark); }
.afia-totals__row--balance.is-settled { background: var(--afia-success-tint); }
.afia-totals__row--balance.is-settled dd { color: var(--afia-success-dark); }

/* ==========================================================================
   Mon profil
   ========================================================================== */
.afia-profile-hero { display: flex; align-items: center; gap: 1.25rem; flex-wrap: wrap; padding: 1.5rem;
  background: var(--afia-white); border: 1px solid var(--afia-border); border-radius: var(--afia-radius-sm);
  border-left: 4px solid var(--afia-primary); }
.afia-profile-avatar { display: inline-flex; align-items: center; justify-content: center; width: 4.5rem; height: 4.5rem;
  border-radius: 50%; background: var(--afia-primary); color: #fff; font-size: var(--afia-fs-xl); font-weight: var(--afia-fw-bold); flex: none; }
.afia-profile-hero__text { flex: 1 1 16rem; min-width: 0; }
.afia-profile-list > div { display: flex; justify-content: space-between; gap: 1rem; padding: .55rem 0; border-bottom: 1px solid var(--afia-border); }
.afia-profile-list > div:last-child { border-bottom: 0; }
.afia-profile-list dt { font-weight: var(--afia-fw-normal); color: #64748B; }
.afia-profile-list dd { margin: 0; font-weight: var(--afia-fw-medium); text-align: right; overflow-wrap: anywhere; }


/* ==========================================================================
   Aucun bleu Bootstrap : tout ce que le thème n'a pas redéfini à la main
   (liens, anneaux de focus, boutons au clavier / au clic, alertes info,
   pagination, cases à cocher) retombe sur la palette afia.
   ========================================================================== */
:root {
  --bs-primary: #0F766E;
  --bs-primary-rgb: 15, 118, 110;
  --bs-link-color: #0F766E;
  --bs-link-color-rgb: 15, 118, 110;
  --bs-link-hover-color: #0B5C56;
  --bs-link-hover-color-rgb: 11, 92, 86;
  --bs-focus-ring-color: rgba(15, 118, 110, .25);
  --bs-info: #0F766E;
  --bs-info-rgb: 15, 118, 110;

  /* Les composants Bootstrap qu'afia ne redéfinit pas (modales, menus
     déroulants, pagination, accordéons, groupes de champs, barres de
     progression) tiraient leurs angles des valeurs d'origine de
     Bootstrap. Ils suivent désormais l'échelle d'afia : un seul arrondi
     dans toute l'application, quelle que soit l'origine du composant. */
  --bs-border-radius:     var(--afia-radius);
  --bs-border-radius-sm:  var(--afia-radius-sm);
  --bs-border-radius-lg:  var(--afia-radius-lg);
  --bs-border-radius-xl:  var(--afia-radius-lg);
  --bs-border-radius-xxl: var(--afia-radius-lg);
  --bs-border-radius-pill: var(--afia-radius-pill);
}
.btn,
.btn-primary, .btn-secondary, .btn-success, .btn-danger, .btn-warning, .btn-info,
.btn-outline-primary, .btn-outline-secondary, .btn-outline-success, .btn-outline-danger, .btn-outline-warning {
  --bs-btn-focus-shadow-rgb: 15, 118, 110;
}
.btn:focus-visible,
.btn-check:focus-visible + .btn {
  box-shadow: var(--afia-ring);
  outline: 0;
}
.btn-link { color: var(--afia-primary); }
.btn-link:hover { color: var(--afia-primary-dark); }
.alert-info, .alert-primary {
  --bs-alert-color: #0B4F4A;
  --bs-alert-bg: #E6F2F1;
  --bs-alert-border-color: #B8DAD7;
  --bs-alert-link-color: #0B4F4A;
}
.page-link { color: var(--afia-primary); }
.page-link:hover { color: var(--afia-primary-dark); }
.page-link:focus { box-shadow: var(--afia-ring); }
.page-item.active .page-link { background-color: var(--afia-primary); border-color: var(--afia-primary); color: #fff; }
.form-check-input:focus { box-shadow: var(--afia-ring); }
.form-check-input[type=checkbox]:indeterminate { background-color: var(--afia-primary); border-color: var(--afia-primary); }
.form-select:focus, .form-control:focus { box-shadow: none; }
::selection { background: rgba(15, 118, 110, .22); }

/* Boutons désactivés / actifs : Bootstrap les peint avec ses variables
   (bleu #0d6efd en tête). On redéfinit ces variables par variante, pour
   que même un bouton grisé reste dans la palette afia. */
.btn-primary {
  --bs-btn-bg: #0F766E; --bs-btn-border-color: #0F766E; --bs-btn-color: #fff;
  --bs-btn-hover-bg: #0B5C56; --bs-btn-hover-border-color: #0B5C56; --bs-btn-hover-color: #fff;
  --bs-btn-active-bg: #0B5C56; --bs-btn-active-border-color: #0B5C56; --bs-btn-active-color: #fff;
  --bs-btn-disabled-bg: #0F766E; --bs-btn-disabled-border-color: #0F766E; --bs-btn-disabled-color: #fff;
}
.btn-outline-primary {
  --bs-btn-color: #0F766E; --bs-btn-border-color: #0F766E;
  --bs-btn-hover-bg: #0F766E; --bs-btn-hover-border-color: #0F766E; --bs-btn-hover-color: #fff;
  --bs-btn-active-bg: #0B5C56; --bs-btn-active-border-color: #0B5C56; --bs-btn-active-color: #fff;
  --bs-btn-disabled-color: #0F766E; --bs-btn-disabled-border-color: #0F766E; --bs-btn-disabled-bg: transparent;
}
.btn-secondary {
  --bs-btn-disabled-bg: #fff; --bs-btn-disabled-border-color: var(--afia-border); --bs-btn-disabled-color: var(--afia-text);
  --bs-btn-active-bg: var(--afia-neutral-tint); --bs-btn-active-border-color: var(--afia-secondary); --bs-btn-active-color: var(--afia-text);
}
.btn-outline-secondary {
  --bs-btn-disabled-bg: #fff; --bs-btn-disabled-border-color: var(--afia-border); --bs-btn-disabled-color: var(--afia-text);
  --bs-btn-active-bg: var(--afia-neutral-tint); --bs-btn-active-border-color: var(--afia-secondary); --bs-btn-active-color: var(--afia-text);
}
.btn-success { --bs-btn-disabled-bg: var(--afia-success); --bs-btn-disabled-border-color: var(--afia-success); --bs-btn-active-bg: var(--afia-success-dark); --bs-btn-active-border-color: var(--afia-success-dark); }
.btn-danger  { --bs-btn-disabled-bg: var(--afia-danger);  --bs-btn-disabled-border-color: var(--afia-danger);  --bs-btn-active-bg: var(--afia-danger-dark);  --bs-btn-active-border-color: var(--afia-danger-dark); }
.btn-warning { --bs-btn-disabled-bg: var(--afia-warning); --bs-btn-disabled-border-color: var(--afia-warning); --bs-btn-active-bg: var(--afia-warning-dark); --bs-btn-active-border-color: var(--afia-warning-dark); }
.btn-outline-danger  { --bs-btn-disabled-color: var(--afia-danger);  --bs-btn-disabled-border-color: var(--afia-danger); }
.btn-outline-success { --bs-btn-disabled-color: var(--afia-success); --bs-btn-disabled-border-color: var(--afia-success); }
.btn-outline-warning { --bs-btn-disabled-color: var(--afia-warning-dark); --bs-btn-disabled-border-color: var(--afia-warning); --bs-btn-disabled-bg: #fff; }
.btn:disabled, .btn.disabled, fieldset:disabled .btn { opacity: .5; }
.btn-close:focus { box-shadow: var(--afia-ring); }
.form-control:disabled, .form-select:disabled { background-color: var(--afia-neutral-tint); border-bottom-color: var(--afia-border); color: var(--afia-text-muted); }
.btn-info {
  --bs-btn-bg: #0F766E; --bs-btn-border-color: #0F766E; --bs-btn-color: #fff;
  --bs-btn-hover-bg: #0B5C56; --bs-btn-hover-border-color: #0B5C56; --bs-btn-hover-color: #fff;
  --bs-btn-active-bg: #0B5C56; --bs-btn-active-border-color: #0B5C56; --bs-btn-active-color: #fff;
  --bs-btn-disabled-bg: #0F766E; --bs-btn-disabled-border-color: #0F766E; --bs-btn-disabled-color: #fff;
}

/* Autres composants Bootstrap qui embarquent le bleu #0d6efd en dur */
.nav-pills { --bs-nav-pills-link-active-bg: #0F766E; --bs-nav-pills-link-active-color: #fff; }
.nav-tabs { --bs-nav-link-color: #0F766E; --bs-nav-link-hover-color: #0B5C56; }
.list-group { --bs-list-group-active-bg: #0F766E; --bs-list-group-active-border-color: #0F766E; --bs-list-group-active-color: #fff; }
.dropdown-menu { --bs-dropdown-link-active-bg: #0F766E; --bs-dropdown-link-active-color: #fff; }
.progress { --bs-progress-bar-bg: #0F766E; }
.accordion { --bs-accordion-active-color: #0B4F4A; --bs-accordion-active-bg: #E6F2F1; --bs-accordion-btn-focus-border-color: #0F766E; --bs-accordion-btn-focus-box-shadow: var(--afia-ring); }
.bg-primary, .text-bg-primary { background-color: #0F766E !important; }
.text-primary { color: #0F766E !important; }
.border-primary { border-color: #0F766E !important; }
.bg-info, .text-bg-info { background-color: #0F766E !important; color: #fff !important; }
.text-info { color: #0F766E !important; }
.form-range::-webkit-slider-thumb { background-color: #0F766E; }
.form-range::-moz-range-thumb { background-color: #0F766E; }
.form-switch .form-check-input:checked { background-color: #0F766E; border-color: #0F766E; }
.form-switch .form-check-input:focus:not(:checked) { --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2394A3B8'/%3e%3c/svg%3e"); }

/* ==========================================================================
   Fiche de consultation
   ========================================================================== */
.afia-consult-head { display: flex; justify-content: space-between; gap: 1rem; flex-wrap: wrap; margin-bottom: 1rem; }
.afia-consult-head__name { color: var(--afia-text); text-decoration: none; }
.afia-consult-head__name:hover { color: var(--afia-primary); text-decoration: underline; }

.afia-actionbar { border-left: 4px solid var(--afia-primary); }
.afia-actionbar__title { font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-bold); text-transform: uppercase; letter-spacing: .06em; color: #64748B; margin-bottom: .6rem; }
.afia-actionbar__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: .6rem; }
.afia-action { display: flex; flex-direction: column; gap: .15rem; text-align: left; padding: .65rem .8rem; background: #fff; color: var(--afia-text);
  border: 1px solid var(--afia-border); border-radius: var(--afia-radius-sm); text-decoration: none; cursor: pointer; font: inherit; }
.afia-action strong { color: var(--afia-primary-dark); font-size: var(--afia-fs-base); }
.afia-action span { font-size: var(--afia-fs-sm); color: #64748B; line-height: 1.3; }
.afia-action:hover, .afia-action:focus-visible { border-color: var(--afia-primary); background: var(--afia-secondary-tint); color: var(--afia-text); outline: 0; }
.afia-action:focus-visible { box-shadow: var(--afia-ring); }

.afia-consult-text dt { font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-medium); text-transform: uppercase; letter-spacing: .04em; color: #64748B; margin-top: .75rem; }
.afia-consult-text dt:first-child { margin-top: 0; }
.afia-consult-text dd { margin: .15rem 0 0; }

.afia-vitals { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .5rem; }
.afia-vital { background: var(--afia-neutral-tint); border-radius: var(--afia-radius-sm); padding: .5rem .65rem; display: flex; flex-direction: column; }
.afia-vital__label { font-size: var(--afia-fs-xs); color: #64748B; text-transform: uppercase; letter-spacing: .04em; }
.afia-vital__value { font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-base); }
.afia-vital__value small { font-weight: var(--afia-fw-normal); color: #64748B; font-size: var(--afia-fs-xs); }

.afia-consult-row { display: flex; justify-content: space-between; align-items: center; gap: .75rem; padding: .6rem 0; border-bottom: 1px solid var(--afia-border); }
.afia-consult-row:last-child { border-bottom: 0; }
.afia-consult-row__main { min-width: 0; overflow-wrap: anywhere; }
.afia-count { display: inline-block; min-width: 1.4rem; padding: 0 .4rem; margin-left: .25rem; border-radius: var(--afia-radius-pill); background: var(--afia-neutral-tint); color: #475569; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); text-align: center; }
.nav-link.active .afia-count { background: var(--afia-secondary-tint); color: var(--afia-primary-dark); }

/* Consultation en attente (créée à l'accueil) */
.afia-waiting { border-left: 4px solid var(--afia-warning); }

/* ---- Maternité ---- */
.afia-subpanel { border: 1px solid var(--afia-border, #E2E8F0); border-radius: var(--afia-radius); background: #F8FAFC; padding: .75rem .9rem; }
.afia-risk { border-left: 4px solid var(--afia-danger); }
.afia-stat { display: block; text-decoration: none; color: inherit; border: 1px solid var(--afia-border, #E2E8F0); border-radius: var(--afia-radius); background: #fff; padding: .7rem .9rem; height: 100%; }
.afia-stat strong { display: block; font-size: var(--afia-fs-xl); line-height: 1.1; color: var(--afia-primary-dark);  letter-spacing: -.015em; }
.afia-stat span { font-size: var(--afia-fs-sm); color: #64748B; }
.afia-stat.is-alert strong { color: var(--afia-danger); }
.afia-stat:hover { border-color: var(--afia-primary); }
.afia-progress { display: inline-flex; gap: 3px; vertical-align: middle; }
.afia-progress i { width: 14px; height: 8px; border-radius: var(--afia-radius-sm); background: #CBD5E1; }
.afia-progress i.on { background: var(--afia-primary); }

/* Photos des patients et des utilisateurs */
.afia-avatar { overflow: hidden; flex: 0 0 auto; }
.afia-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.afia-avatar--md { width: 2.75rem; height: 2.75rem; font-size: var(--afia-fs-base); }
.afia-avatar--lg { width: 4.5rem; height: 4.5rem; font-size: var(--afia-fs-xl);  letter-spacing: -.015em; }
.afia-avatar--xl { width: 7.5rem; height: 7.5rem; font-size: var(--afia-fs-3xl);  letter-spacing: -.015em; }
.afia-photo-editor { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; }
.afia-photo-editor__actions { display: flex; flex-direction: column; align-items: flex-start; gap: .4rem; }
.afia-photo-editor__actions form { margin: 0; }
.afia-name-cell { display: flex; align-items: center; gap: .6rem; }

/* Logo de l'application (ou de l'hôpital s'il a téléversé le sien) */
.afia-topbar .afia-logo { display: inline-flex; align-items: center; }
.afia-logo__img { height: 2.1rem; width: auto; max-width: 9rem; object-fit: contain; display: block; }
.afia-brand__logo { margin: 0 0 .5rem; line-height: 1; }
.afia-brand__logo img { width: 11rem; max-width: 70%; height: auto; }

/* Barre du haut fixe : elle reste visible quand on fait défiler la page ; la barre latérale se cale dessous. */
.module-sidebar { position: sticky; top: var(--afia-topbar-h, 67px); align-self: flex-start; max-height: calc(100vh - var(--afia-topbar-h, 67px)); overflow-y: auto; }
@media (max-width: 767.98px) { .module-sidebar { position: static; max-height: none; } }

/* ---- Urgences : priorités de triage (rouge, orange, jaune, vert — aucun bleu) ---- */
.afia-level { display: inline-block; padding: .2rem .55rem; border-radius: var(--afia-radius-pill); font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-bold); white-space: nowrap; color: #fff; }
.afia-level--red { background: #B91C1C; }
.afia-level--orange { background: #C2410C; }
.afia-level--yellow { background: #FACC15; color: #422006; }
.afia-level--green { background: #15803D; }
.afia-er-row > td:first-child { border-left: 5px solid transparent; }
.afia-er-row--red > td:first-child { border-left-color: #B91C1C; }
.afia-er-row--orange > td:first-child { border-left-color: #C2410C; }
.afia-er-row--yellow > td:first-child { border-left-color: #FACC15; }
.afia-er-row--green > td:first-child { border-left-color: #15803D; }
.afia-level-picker { display: grid; grid-template-columns: repeat(2, 1fr); gap: .5rem; }
.afia-level-choice { display: block; cursor: pointer; border: 2px solid var(--lv, #CBD5E1); border-radius: var(--afia-radius); padding: .5rem .7rem; background: #fff; margin: 0; }
.afia-level-choice strong { display: block; font-size: var(--afia-fs-base); }
.afia-level-choice small { display: block; color: #64748B; font-size: var(--afia-fs-xs); line-height: 1.25; }
.afia-level-choice--red { --lv: #B91C1C; }
.afia-level-choice--orange { --lv: #C2410C; }
.afia-level-choice--yellow { --lv: #CA8A04; }
.afia-level-choice--green { --lv: #15803D; }
.btn-check:checked + .afia-level-choice--red { background: #B91C1C; } .btn-check:checked + .afia-level-choice--orange { background: #C2410C; }
.btn-check:checked + .afia-level-choice--yellow { background: #FACC15; } .btn-check:checked + .afia-level-choice--green { background: #15803D; }
.btn-check:checked + .afia-level-choice--red strong, .btn-check:checked + .afia-level-choice--red small,
.btn-check:checked + .afia-level-choice--orange strong, .btn-check:checked + .afia-level-choice--orange small,
.btn-check:checked + .afia-level-choice--green strong, .btn-check:checked + .afia-level-choice--green small { color: #fff; }
.btn-check:checked + .afia-level-choice--yellow strong, .btn-check:checked + .afia-level-choice--yellow small { color: #422006; }
.btn-check:focus-visible + .afia-level-choice { outline: 3px solid #0F766E; outline-offset: 2px; }
@media (max-width: 575.98px) { .afia-level-picker { grid-template-columns: 1fr; } }

/* ---- Parcours du patient (étapes de la visite) ---- */
.afia-journey { list-style: none; margin: 0; padding: 0 0 0 .4rem; max-width: 640px; }
.afia-journey__step { position: relative; display: flex; gap: .9rem; padding-bottom: 1.1rem; }
.afia-journey__step::before { content: ""; position: absolute; left: 1rem; top: 2rem; bottom: 0; width: 2px; background: #CBD5E1; }
.afia-journey__step:last-child::before { display: none; }
.afia-journey__dot { flex: 0 0 2rem; height: 2rem; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; font-weight: var(--afia-fw-bold); background: #fff; border: 2px solid #CBD5E1; color: #64748B; }
.afia-journey__step--done .afia-journey__dot { background: #0F766E; border-color: #0F766E; color: #fff; }
.afia-journey__step--done::before { background: #0F766E; }
.afia-journey__step--current .afia-journey__dot { border-color: #0F766E; color: #0F766E; box-shadow: 0 0 0 4px rgba(15, 118, 110, .2); }


/* Lits d'une chambre : tuiles avec pictogramme de lit d'hôpital */
.afia-bed-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(9.5rem, 1fr)); gap: .7rem; }
.afia-bed { display: flex; flex-direction: column; align-items: center; text-align: center; gap: .1rem; padding: .7rem .5rem .6rem; border: 1px solid transparent; border-radius: var(--afia-radius-lg); text-decoration: none; min-width: 0; transition: transform .12s ease, box-shadow .12s ease; }
a.afia-bed:hover { transform: translateY(-2px); box-shadow: var(--afia-shadow-md); }
.afia-bed__icon { width: 5.6rem; height: auto; margin-bottom: .15rem; }
.afia-bed__code { font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-base); color: var(--afia-text); letter-spacing: .02em; }
.afia-bed__state { font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); text-transform: uppercase; letter-spacing: .06em; }
.afia-bed__patient { font-size: var(--afia-fs-sm); color: var(--afia-text); max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-height: 1.15rem; }
.afia-bed.afia-bed--available, a.afia-bed.afia-bed--available:not(.btn):not(.nav-link), a.afia-bed.afia-bed--available:not(.btn):not(.nav-link):hover { color: var(--afia-success-dark); background: var(--afia-success-tint); border-color: #BFE6CD; }
.afia-bed.afia-bed--occupied, a.afia-bed.afia-bed--occupied:not(.btn):not(.nav-link), a.afia-bed.afia-bed--occupied:not(.btn):not(.nav-link):hover { color: var(--afia-danger-dark); background: var(--afia-danger-tint); border-color: #F6C5C5; }
.afia-bed.afia-bed--reserved, a.afia-bed.afia-bed--reserved:not(.btn):not(.nav-link), a.afia-bed.afia-bed--reserved:not(.btn):not(.nav-link):hover { color: var(--afia-warning-dark); background: var(--afia-warning-tint); border-color: #F1D3A6; }
.afia-bed.afia-bed--maintenance, a.afia-bed.afia-bed--maintenance:not(.btn):not(.nav-link), a.afia-bed.afia-bed--maintenance:not(.btn):not(.nav-link):hover { color: var(--afia-neutral); background: var(--afia-neutral-tint); border-color: #D5DDE6; }

/* Sélecteur de lit (admission / transfert) : tuiles de lits libres à choisir */
.afia-bedpick__opt { position: relative; display: block; cursor: pointer; margin: 0; }
.afia-bedpick__radio { position: absolute; opacity: 0; pointer-events: none; }
.afia-bedpick__opt .afia-bed { border-width: 2px; height: 100%; transition: box-shadow .12s ease, border-color .12s ease; }
.afia-bedpick__opt:hover .afia-bed { box-shadow: var(--afia-shadow-md); }
.afia-bedpick__radio:checked + .afia-bed { border-color: var(--afia-success-dark); box-shadow: 0 0 0 3px rgba(25, 135, 84, .25); }
.afia-bedpick__radio:checked + .afia-bed .afia-bed__state::before { content: "✓ "; }
.afia-bedpick__radio:focus-visible + .afia-bed { outline: 2px solid var(--afia-success-dark); outline-offset: 2px; }
.afia-bedpick .afia-bed-grid { grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); }
.afia-bedpick [hidden] { display: none !important; }

/* Carte de suivi des analyses / examens d'une visite (liste des visites et fiche de consultation) */
.afia-exams { min-width: 15rem; max-width: 22rem; margin: 0 0 .5rem; padding: .55rem .7rem .6rem; background: #fff; border: 1px solid var(--afia-border, #E2E8F0); border-left: 3px solid var(--afia-primary, #0F766E); border-radius: var(--afia-radius); box-shadow: var(--afia-shadow-sm); }
.afia-exams--full { max-width: none; }
.afia-exams__head { display: flex; align-items: baseline; justify-content: space-between; gap: .5rem; }
.afia-exams__title { font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); text-transform: uppercase; letter-spacing: .06em; color: var(--afia-text-muted, #64748B); }
.afia-exams__count { font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-sm); color: var(--afia-text); }
.afia-exams__count.is-complete { color: var(--afia-success-dark); }
.afia-exams__bar { height: 4px; margin: .35rem 0 .45rem; background: #E8EEF3; border-radius: var(--afia-radius-sm); overflow: hidden; }
.afia-exams__bar > span { display: block; height: 100%; background: var(--afia-success, #198754); border-radius: var(--afia-radius-sm); }
.afia-exams__list { list-style: none; margin: 0; padding: 0; }
.afia-exams__item { padding: .3rem 0; border-top: 1px dashed #E2E8F0; }
.afia-exams__item:first-child { border-top: 0; }
.afia-exams__line { display: flex; align-items: center; justify-content: space-between; gap: .5rem; flex-wrap: wrap; }
.afia-exams__name { font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-medium); min-width: 0; }
.afia-exams__item .afia-badge { font-size: var(--afia-fs-xs); white-space: nowrap; }
.afia-exams__result { margin-top: .15rem; font-size: var(--afia-fs-sm); color: var(--afia-text); }
.afia-exams__result.is-abnormal { color: var(--afia-danger-dark); font-weight: var(--afia-fw-medium); }
.afia-visit-name { display: flex; align-items: center; flex-wrap: wrap; gap: .35rem .5rem; }
.afia-exams-row { display: flex; flex-wrap: wrap; gap: .75rem; align-items: flex-start; }
.afia-exams-row .afia-exams { flex: 1 1 18rem; max-width: 30rem; margin: 0; }
.afia-lab-group .card-header { background: var(--afia-surface-2, #F1F5F9); }
.afia-group-row > td { background: #F8FAFC; padding-top: .45rem; padding-bottom: .45rem; border-bottom: 0; }

/* Fiche de soins : soins à faire regroupés par date et heure */
.afia-care-group { background: #fff; border: 1px solid var(--afia-border, #E2E8F0); border-left: 3px solid var(--afia-primary, #0F766E); border-radius: var(--afia-radius); margin-bottom: .6rem; overflow: hidden; }
.afia-care-group.is-late { border-left-color: var(--afia-danger, #DC3545); }
.afia-care-group.is-finished { border-left-color: #CBD5E1; opacity: .92; }
.afia-care-group__head { display: flex; align-items: center; flex-wrap: wrap; gap: .5rem; padding: .4rem .75rem; background: #F8FAFC; border-bottom: 1px solid #EDF2F7; }
.afia-care-group__time { font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-base); color: var(--afia-text); }
.afia-care-group__day { font-weight: var(--afia-fw-medium); font-size: var(--afia-fs-sm); color: var(--afia-text-muted, #64748B); text-transform: capitalize; }
.afia-care-sep { font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); text-transform: uppercase; letter-spacing: .06em; color: var(--afia-text-muted, #64748B); margin: 1rem 0 .5rem; }
.afia-care-group table { table-layout: fixed; }
.afia-care-group table td:nth-child(2) { width: 38%; }
.afia-care-group table td:nth-child(3) { width: 11rem; }
.afia-lab-group table { table-layout: fixed; }
.afia-lab-group td:nth-child(1) { width: 4.5rem; }
.afia-lab-group td:nth-child(2) { width: 11rem; }
.afia-lab-group td:nth-child(4) { width: 7rem; }
.afia-lab-group td:nth-child(5) { width: 11rem; }
.afia-lab-group td:nth-child(6) { width: 6rem; }

/* Plan des lits : la carte d'une chambre est aussi large que son nombre de lits (1 à 4 par rangée) */
.afia-rooms { display: flex; flex-wrap: wrap; gap: 1rem; align-items: flex-start; }
.afia-room { flex: 0 1 auto; max-width: 100%; width: calc(var(--afia-cols, 1) * 9.5rem + (var(--afia-cols, 1) - 1) * .7rem + 2.5rem); min-width: 13.5rem; position: relative; }
.afia-room .afia-bed-grid { grid-template-columns: repeat(var(--afia-cols, 1), minmax(0, 1fr)); }
.afia-room .card { height: auto !important; }
.afia-room .card-body { padding: 1rem 1.25rem; }
.afia-room__count { position: absolute; top: .9rem; right: 1.1rem; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); text-transform: uppercase; letter-spacing: .05em; color: var(--afia-text-muted, #64748B); }

/* Notifications « au vol » (rappels de soins) */
.afia-toasts { position: fixed; top: 4.75rem; right: 1rem; z-index: 1080; display: flex; flex-direction: column; gap: .65rem; width: min(24rem, calc(100vw - 2rem)); pointer-events: none; }
.afia-toast { --toast-accent: var(--afia-primary, #0F766E); --toast-tint: var(--afia-primary-tint, #E6F4F2); pointer-events: auto; position: relative; display: flex; align-items: flex-start; gap: .8rem; padding: .85rem 2.2rem 1rem .85rem; overflow: hidden;
  background: var(--afia-white, #fff); border: 1px solid var(--afia-border, #E2E8F0); border-radius: var(--afia-radius-lg); box-shadow: var(--afia-shadow-xl);
  font-size: var(--afia-fs-sm); animation: afia-toast-in .38s cubic-bezier(.2, .9, .3, 1.15) both; }
.afia-toast--success { --toast-accent: var(--afia-success, #16A34A); --toast-tint: var(--afia-success-tint, #E9F7EF); }
.afia-toast--warning { --toast-accent: var(--afia-warning, #D97706); --toast-tint: var(--afia-warning-tint, #FCF1E3); }
.afia-toast--danger { --toast-accent: var(--afia-danger, #DC2626); --toast-tint: var(--afia-danger-tint, #FDECEC); }
.afia-toast::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 4px; background: var(--toast-accent); }
.afia-toast__icon { flex: none; width: 2.5rem; height: 2.5rem; border-radius: var(--afia-radius-lg); display: grid; place-items: center; background: var(--toast-tint); color: var(--toast-accent); }
.afia-toast__icon svg { width: 1.35rem; height: 1.35rem; }
.afia-toast__body { display: flex; flex-direction: column; gap: .12rem; min-width: 0; }
.afia-toast__tag { font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .08em; text-transform: uppercase; color: var(--toast-accent); }
.afia-toast__title { font-size: var(--afia-fs-base); line-height: 1.25; color: var(--afia-text, #0F172A); }
.afia-toast__msg { color: var(--afia-text-muted, #64748B); line-height: 1.35; overflow-wrap: anywhere; }
.afia-toast__open { margin-top: .35rem; width: fit-content; font-weight: var(--afia-fw-medium); font-size: var(--afia-fs-sm); padding: .2rem .7rem; border-radius: var(--afia-radius-pill); background: var(--toast-accent); color: #fff; text-decoration: none; }
.afia-toast__open:hover, .afia-toast__open:focus-visible { filter: brightness(.92); color: #fff; }
.afia-toast__close { position: absolute; top: .4rem; right: .55rem; border: 0; background: none; font-size: var(--afia-fs-lg); line-height: 1; color: var(--afia-text-muted, #64748B); cursor: pointer; border-radius: var(--afia-radius); padding: 0 .3rem; }
.afia-toast__close:hover { color: var(--afia-text, #0F172A); background: rgba(100, 116, 139, .12); }
.afia-toast__bar { position: absolute; left: 0; right: 0; bottom: 0; height: 3px; background: var(--toast-accent); opacity: .55; transform-origin: left; animation: afia-toast-bar linear forwards; }
.afia-toast.is-paused .afia-toast__bar { animation-play-state: paused; }
.afia-toast.is-leaving { animation: afia-toast-out .26s ease-in forwards; }
@keyframes afia-toast-in { from { opacity: 0; transform: translateX(2rem) scale(.96); } to { opacity: 1; transform: none; } }
@keyframes afia-toast-out { to { opacity: 0; transform: translateX(2rem); } }
@keyframes afia-toast-bar { from { transform: scaleX(1); } to { transform: scaleX(0); } }
@media (prefers-reduced-motion: reduce) { .afia-toast, .afia-toast.is-leaving { animation: none; } .afia-toast__bar { animation: none; display: none; } }
@media (max-width: 575.98px) { .afia-toasts { top: 4.25rem; right: .75rem; left: .75rem; width: auto; } }

/* ---- Structure : pavillons en plans de bâtiment, chambres et lits en cartes ---- */
.afia-buildings { display: grid; gap: 1.25rem; }
.afia-building { background: #fff; border: 1px solid var(--afia-border, #E2E8F0); border-radius: var(--afia-radius-lg); overflow: hidden; box-shadow: var(--afia-shadow-sm); }
.afia-building.is-inactive { opacity: .75; }
.afia-building__head { display: flex; flex-wrap: wrap; gap: .75rem; justify-content: space-between; align-items: center; padding: .9rem 1.25rem; background: var(--afia-surface-alt, #F1F5F9); border-bottom: 3px solid var(--afia-success-dark, #15803D); }
.afia-building__title { display: flex; align-items: center; gap: .75rem; }
.afia-building__icon { width: 2.1rem; height: 2.1rem; color: var(--afia-success-dark, #15803D); flex: none; }
.afia-building__meta { display: flex; align-items: center; gap: .75rem; }
.afia-building__body { padding: 1rem 1.25rem; display: grid; gap: .9rem; }
.afia-floor { display: grid; grid-template-columns: 6.5rem 1fr; gap: .75rem; align-items: start; padding-bottom: .9rem; border-bottom: 2px dashed var(--afia-border, #E2E8F0); }
.afia-floor:last-child { border-bottom: 0; padding-bottom: 0; }
.afia-floor__label { margin: 0; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); text-transform: uppercase; letter-spacing: .05em; color: var(--afia-text-muted, #64748B); padding-top: .4rem; }
.afia-floor__rooms { display: flex; flex-wrap: wrap; gap: .6rem; }
.afia-building__foot { display: flex; flex-wrap: wrap; gap: .5rem; justify-content: space-between; align-items: center; padding: .7rem 1.25rem; border-top: 1px solid var(--afia-border, #E2E8F0); }
.afia-roomblock { display: flex; flex-direction: column; gap: .3rem; width: calc(var(--afia-cols, 1) * 3.4rem + 2rem); min-width: 7.5rem; padding: .55rem .65rem; border: 2px solid var(--afia-neutral, #64748B); border-radius: var(--afia-radius); background: #fff; color: inherit; text-decoration: none; transition: box-shadow .15s, transform .15s; }
.afia-roomblock:hover { box-shadow: var(--afia-shadow-md); transform: translateY(-1px); color: inherit; }
.afia-roomblock.is-inactive { opacity: .55; border-style: dashed; }
.afia-roomblock__code { font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-base); }
.afia-roomblock__type { font-size: var(--afia-fs-xs); color: var(--afia-text-muted, #64748B); line-height: 1.1; }
.afia-roomblock__beds { display: flex; flex-wrap: wrap; gap: .15rem; }
.afia-roomblock__empty { font-size: var(--afia-fs-xs); color: var(--afia-text-muted, #64748B); }
.afia-roomblock__foot { font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-medium); }
.afia-bedmini { width: 2.1rem; height: 1.3rem; }
.afia-bedmini--available { color: var(--afia-success-dark, #15803D); }
.afia-bedmini--occupied { color: var(--afia-danger-dark, #B91C1C); }
.afia-bedmini--reserved { color: var(--afia-warning-dark, #B45309); }
.afia-bedmini--maintenance { color: var(--afia-neutral, #64748B); }
.afia-group-title { font-size: var(--afia-fs-base); font-weight: var(--afia-fw-bold); margin: 1rem 0 .6rem; }
.afia-room.is-inactive { opacity: .7; }
.afia-bedcards { display: grid; grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr)); gap: 1rem; }
.afia-bedcard { background: #fff; border: 1px solid var(--afia-border, #E2E8F0); border-radius: var(--afia-radius-lg); padding: .75rem; display: grid; gap: .6rem; }
.afia-bedcard__foot { display: flex; gap: .4rem; justify-content: center; }
@media (max-width: 575.98px) { .afia-floor { grid-template-columns: 1fr; } }
.afia-rooms--cards .afia-room { min-width: 18rem; }
.afia-exams-col { display: grid; gap: .75rem; max-width: 26rem; }
.afia-exams-col .afia-exams { max-width: none; margin: 0; }

/* ---- Ressources humaines ---- */
.afia-chip { display: inline-block; padding: .25rem .7rem; border: 1px solid var(--afia-border, #E2E8F0); border-radius: var(--afia-radius-pill); background: #fff; color: inherit; font-size: var(--afia-fs-sm); text-decoration: none; }
a.afia-chip:hover { border-color: var(--afia-primary, #0F766E); color: var(--afia-primary-dark, #0B5F58); }
.afia-chip.is-active, a.afia-chip.is-active:hover { background: var(--afia-primary, #0F766E); border-color: var(--afia-primary, #0F766E); color: #fff !important; font-weight: var(--afia-fw-medium); }
.afia-chip.is-static { background: var(--afia-surface-2, #F1F5F9); color: var(--afia-text-muted, #64748B); }
.afia-roster th, .afia-roster td { min-width: 7.4rem; vertical-align: top; }
.afia-roster .afia-roster__who { min-width: 12rem; position: sticky; left: 0; background: #fff; z-index: 1; }
.afia-roster th.is-today, .afia-roster td.is-today { background: #F0FDF4; }
.afia-roster__cell { padding: .3rem !important; }
.afia-roster__cell.is-leave { background: #FFFBEB; }
.afia-roster__shift { display: flex; justify-content: space-between; align-items: center; gap: .25rem; margin-bottom: .2rem; padding: .15rem .4rem; border-radius: var(--afia-radius); background: var(--afia-primary-tint, #CCFBF1); border: 1px solid var(--afia-primary, #0F766E); font-size: var(--afia-fs-sm); line-height: 1.2; }
.afia-roster__x { border: 0; background: transparent; color: var(--afia-danger-dark, #B91C1C); font-weight: var(--afia-fw-bold); line-height: 1; padding: 0 .15rem; cursor: pointer; }
.afia-roster__add { display: block; width: 100%; border: 1px dashed var(--afia-border, #CBD5E1); border-radius: var(--afia-radius); background: transparent; color: var(--afia-text-muted, #64748B); font-size: var(--afia-fs-sm); padding: 0; opacity: .6; }
.afia-roster__add:hover { opacity: 1; border-color: var(--afia-primary, #0F766E); color: var(--afia-primary-dark, #0B5F58); }
.afia-roster__leave { display: inline-block; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); text-transform: uppercase; color: var(--afia-warning-dark, #B45309); }

/* ===== Portail de pointage RFID : page claire, la « carte » est un badge blanc (sans bleu) ===== */
.afia-kiosk { min-height: 100vh; margin: 0; background: radial-gradient(circle at 50% -10%, #ffffff 0%, #eaf1ee 60%, #dde9e5 100%); color: #12312f; overflow-x: hidden; }
.afia-kiosk__input { position: fixed; left: -9999px; top: 0; width: 1px; height: 1px; opacity: 0; border: 0; padding: 0; }
.afia-kiosk__exit { position: fixed; top: .75rem; right: 1rem; color: #3d5e5b; font-size: var(--afia-fs-sm); text-decoration: none; border: 1px solid #b9cdc8; background: #fff; padding: .25rem .75rem; border-radius: var(--afia-radius-lg); z-index: 5; }
.afia-kiosk__exit:hover { color: #0f4f4c; border-color: #0f766e; }
.afia-kiosk__main { max-width: 640px; margin: 0 auto; padding: 2rem 1rem 2rem; text-align: center; }
.afia-kiosk__clock { font-size: clamp(2.6rem, 8vw, 4.5rem); font-weight: var(--afia-fw-bold); letter-spacing: .03em; line-height: 1; font-variant-numeric: tabular-nums; color: #0f4f4c; }
.afia-kiosk__date { text-transform: capitalize; color: #55736f; margin: .35rem 0 1.5rem; }

.afia-badgecard { --accent: #0f766e; position: relative; background: #fff; border-radius: var(--afia-radius-lg); padding: 0 0 .9rem; min-height: 24rem; display: flex; flex-direction: column;
    box-shadow: 0 1px 0 #fff inset, 0 18px 40px -12px rgba(15, 79, 76, .35), 0 2px 6px rgba(15, 79, 76, .12); border: 1px solid #d5e2de; overflow: hidden; text-align: center; transition: box-shadow .25s; }
.afia-badgecard::before { content: ""; display: block; height: .9rem; background: var(--accent); transition: background .25s; }
.afia-badgecard[data-state="in"] { --accent: #1f8a4c; box-shadow: 0 18px 44px -10px rgba(31, 138, 76, .55), 0 0 0 3px rgba(31, 138, 76, .35); }
.afia-badgecard[data-state="out"] { --accent: #0b4a47; box-shadow: 0 18px 44px -10px rgba(11, 74, 71, .55), 0 0 0 3px rgba(11, 74, 71, .3); }
.afia-badgecard[data-state="denied"] { --accent: #b3261e; box-shadow: 0 18px 44px -10px rgba(179, 38, 30, .5), 0 0 0 3px rgba(179, 38, 30, .35); animation: afia-kiosk-shake .4s; }
.afia-badgecard[data-state="repeat"] { --accent: #b7791f; box-shadow: 0 18px 44px -10px rgba(183, 121, 31, .5), 0 0 0 3px rgba(183, 121, 31, .35); }
.afia-badgecard__slot { position: absolute; top: .22rem; left: 50%; transform: translateX(-50%); width: 4.2rem; height: .7rem; border-radius: var(--afia-radius-lg); background: #eaf1ee; box-shadow: inset 0 1px 3px rgba(0,0,0,.25); }
.afia-badgecard__head { display: flex; align-items: center; justify-content: center; gap: .75rem; padding: 1.1rem 1.25rem .8rem; border-bottom: 1px dashed #cfdcd8; text-align: left; }
.afia-badgecard__logo { height: 2.4rem; width: auto; }
.afia-badgecard__hospital { font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-base); line-height: 1.2; color: #12312f; }
.afia-badgecard__kind { font-size: var(--afia-fs-xs); letter-spacing: .12em; text-transform: uppercase; color: var(--accent); font-weight: var(--afia-fw-bold); transition: color .25s; }
.afia-badgecard__body { flex: 1; display: flex; align-items: center; justify-content: center; padding: 1.5rem 1.25rem; }
.afia-badgecard__foot { display: flex; justify-content: center; gap: 4px; padding: 0 1.25rem; opacity: .35; }
.afia-badgecard__foot span { display: block; width: 3px; height: 1.1rem; background: #12312f; border-radius: var(--afia-radius-sm); }
.afia-badgecard__foot span:nth-child(3n) { width: 6px; } .afia-badgecard__foot span:nth-child(4n) { width: 2px; }
.afia-kiosk__idle, .afia-kiosk__result { width: 100%; }
.afia-kiosk__icon { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 6.5rem; height: 6.5rem; color: #0f766e; }
.afia-kiosk__ring { position: absolute; inset: 0; border: 2px solid #0f766e; border-radius: 50%; opacity: 0; animation: afia-kiosk-ring 2.6s ease-out infinite; }
.afia-kiosk__ring--2 { animation-delay: 1.3s; }
.afia-kiosk__title { font-size: clamp(1.7rem, 5vw, 2.3rem); margin: .75rem 0 .25rem; color: #12312f; }
.afia-kiosk__hint { color: #55736f; margin: 0; }
.afia-kiosk__who { display: flex; flex-direction: column; align-items: center; gap: .6rem; margin-bottom: 1rem; }
.afia-kiosk__name { font-size: clamp(1.4rem, 4vw, 1.9rem); font-weight: var(--afia-fw-bold); color: #12312f; }
.afia-kiosk__job { color: #55736f; }
.afia-kiosk__verdict { display: inline-block; font-size: clamp(1.05rem, 3vw, 1.3rem); font-weight: var(--afia-fw-bold); color: #fff; background: var(--accent); padding: .35rem 1.1rem; border-radius: var(--afia-radius-lg); transition: background .25s; }
.afia-kiosk__time { font-size: var(--afia-fs-3xl); font-weight: var(--afia-fw-bold); font-variant-numeric: tabular-nums; line-height: 1.25; color: var(--accent); margin-top: .35rem;  letter-spacing: -.015em; }
.afia-kiosk__msg { color: #3d5e5b; font-size: var(--afia-fs-base); }
.afia-kiosk__recent { margin-top: 1.75rem; text-align: left; }
.afia-kiosk__recent h2 { font-size: var(--afia-fs-sm); text-transform: uppercase; letter-spacing: .08em; color: #55736f; margin-bottom: .5rem; }
.afia-kiosk__recent ul { list-style: none; padding: 0; margin: 0; }
.afia-kiosk__recent li { display: flex; gap: .75rem; align-items: center; padding: .5rem .85rem; border-radius: var(--afia-radius-lg); background: #fff; border: 1px solid #d5e2de; margin-bottom: .4rem; border-left: 5px solid #1f8a4c; box-shadow: 0 1px 2px rgba(15, 79, 76, .08); }
.afia-kiosk__recent li.is-out { border-left-color: #0b4a47; }
.afia-kiosk__recent li.is-denied { border-left-color: #b3261e; }
.afia-kiosk__rtime { font-variant-numeric: tabular-nums; color: #55736f; }
.afia-kiosk__rname { flex: 1; font-weight: var(--afia-fw-medium); }
.afia-kiosk__rkind { font-size: var(--afia-fs-sm); color: #3d5e5b; }
.afia-kiosk__empty { color: #55736f; }
.afia-kiosk .afia-avatar--xl { width: 6rem; height: 6rem; font-size: var(--afia-fs-2xl); box-shadow: 0 0 0 4px #fff, 0 0 0 7px var(--accent);  letter-spacing: -.015em; }
@keyframes afia-kiosk-ring { 0% { transform: scale(.7); opacity: .55; } 100% { transform: scale(1.35); opacity: 0; } }
@keyframes afia-kiosk-shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-8px); } 75% { transform: translateX(8px); } }
.afia-kiosk__offline { position: fixed; left: 0; right: 0; top: 0; z-index: 10; background: #b3261e; color: #fff; text-align: center; padding: .6rem 1rem; font-weight: var(--afia-fw-medium); }
.afia-kiosk__offline a { color: #fff; text-decoration: underline; margin-left: .5rem; }
.afia-selfpunch { border: 2px solid #d5e2de; border-radius: var(--afia-radius-lg); }
.afia-selfpunch.is-open { border-color: #1f8a4c; }
.afia-selfpunch.is-done { border-color: #0b4a47; }
.afia-selfpunch__state { font-size: var(--afia-fs-lg); font-weight: var(--afia-fw-medium); }
.afia-selfpunch__times { font-size: var(--afia-fs-2xl); font-weight: var(--afia-fw-bold); font-variant-numeric: tabular-nums; color: #0b4a47;  letter-spacing: -.015em; }
.afia-selfpunch__times span { opacity: .5; }

/* Rapports */
.rpt-kpis { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: .75rem; margin-bottom: 1.25rem; }
.rpt-kpi { background: var(--afia-white); border: 1px solid #E2E8F0; border-left: 4px solid var(--afia-primary); border-radius: var(--afia-radius); padding: .75rem 1rem; }
.rpt-kpi__value { font-size: var(--afia-fs-xl); font-weight: var(--afia-fw-bold); color: var(--afia-primary-dark); line-height: 1.1;  letter-spacing: -.015em; }
.rpt-kpi__label { font-size: var(--afia-fs-sm); color: var(--afia-text-muted); margin-top: .2rem; }
.rpt-table { margin-bottom: 1.5rem; }
.rpt-title { font-size: var(--afia-fs-base); font-weight: var(--afia-fw-medium); margin: 0 0 .5rem; color: var(--afia-text); }
.rpt-empty { color: var(--afia-text-muted); font-size: var(--afia-fs-base); margin: 0; }
.rpt-bar-col { width: 28%; }
.rpt-bar { display: block; height: .55rem; background: var(--afia-primary); border-radius: var(--afia-radius-sm); min-width: 2px; }

/* ---- Graphiques des tableaux de bord (Afia\Core\Chart) ---- */
.s1 { --c: #0A9486; } .s2 { --c: #D97706; } .s3 { --c: #D6578A; } .s4 { --c: #7A8F1E; }
.ok { --c: #16A34A; } .warn { --c: #D97706; } .bad { --c: #DC2626; } .mute { --c: #94A3B8; }
.ch-grid-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 420px), 1fr)); gap: 1rem; margin-bottom: 1.5rem; align-items: start; }
.ch-card { background: var(--afia-white); border: 1px solid var(--afia-border); padding: 1rem 1.1rem .75rem; margin: 0; min-width: 0; }
.ch-title { font-size: var(--afia-fs-base); font-weight: var(--afia-fw-medium); color: var(--afia-text); margin-bottom: .15rem; }
.ch-note { font-size: var(--afia-fs-sm); color: var(--afia-text-muted); margin: 0 0 .4rem; }
.ch-empty { color: var(--afia-text-muted); font-size: var(--afia-fs-sm); margin: .75rem 0 .5rem; }
.ch-svg { width: 100%; height: auto; display: block; overflow: visible; }
.ch-grid { stroke: #E2E8F0; stroke-width: 1; }
.ch-grid--base { stroke: #CBD5E1; }
.ch-yl, .ch-xl { font-size: var(--afia-fs-sm); fill: var(--afia-text-muted); }
.ch-bar { fill: var(--c); }
.ch-dash { stroke-dasharray: 7 5; }
.ch-line { fill: none; stroke: var(--c); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.ch-dot { fill: var(--c); stroke: var(--afia-white); stroke-width: 2; }
.ch-hit { fill: transparent; outline: none; }
.ch-hit:hover, .ch-hit:focus-visible { fill: rgba(15, 118, 110, .08); }
.ch-col { outline: none; }
.ch-col .ch-hit:hover, .ch-col:focus-visible .ch-hit { fill: transparent; }
.ch-xh { stroke: var(--afia-text-muted); stroke-width: 1; stroke-dasharray: 3 3; opacity: 0; }
.ch-col:hover .ch-xh, .ch-col:focus-visible .ch-xh { opacity: 1; }
.ch-legend { list-style: none; padding: 0; margin: .25rem 0 .5rem; display: flex; flex-wrap: wrap; gap: .25rem 1rem; font-size: var(--afia-fs-sm); color: var(--afia-text); }
.ch-legend li { display: flex; align-items: center; gap: .4rem; }
.ch-key { display: inline-block; width: 12px; height: 3px; background: var(--c); border-radius: var(--afia-radius-sm); flex: none; }
.ch-donut { display: flex; flex-wrap: wrap; align-items: center; gap: 1rem; margin: .5rem 0; }
.ch-svg-donut { width: 170px; height: 170px; flex: none; }
.ch-ring { fill: none; stroke: #EEF2F4; stroke-width: 22; }
.ch-seg { fill: none; stroke: var(--c); stroke-width: 22; outline: none; transition: stroke-width .12s; }
.ch-seg:hover, .ch-seg:focus-visible { stroke-width: 26; }
.ch-center { font-size: var(--afia-fs-xl); font-weight: var(--afia-fw-bold); fill: var(--afia-text);  letter-spacing: -.015em; }
.ch-center-sub { font-size: var(--afia-fs-xs); fill: var(--afia-text-muted); }
.ch-legend--col { flex-direction: column; flex: 1; min-width: 160px; gap: .45rem; }
.ch-legend--col li { width: 100%; }
.ch-legend--col .ch-key { height: 10px; width: 10px; border-radius: var(--afia-radius-sm); }
.ch-leg-name { flex: 1; }
.ch-leg-val { font-weight: var(--afia-fw-medium); white-space: nowrap; }
.ch-hbars { display: flex; flex-direction: column; gap: .35rem; margin: .5rem 0; }
.ch-hrow { display: grid; grid-template-columns: minmax(80px, 34%) 1fr auto; gap: .6rem; align-items: center; font-size: var(--afia-fs-sm); padding: .1rem .2rem; outline: none; }
.ch-hrow:hover, .ch-hrow:focus-visible { background: var(--afia-primary-tint); }
.ch-hlabel { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ch-htrack { background: #EEF2F4; height: 10px; border-radius: var(--afia-radius-sm); overflow: hidden; }
.ch-hbar { display: block; height: 100%; background: var(--c); border-radius: var(--afia-radius-sm); }
.ch-hval { font-weight: var(--afia-fw-medium); white-space: nowrap; }
.ch-table { margin-top: .4rem; font-size: var(--afia-fs-sm); }
.ch-table summary { cursor: pointer; color: var(--afia-text-muted); }
.ch-table table { font-size: var(--afia-fs-sm); }
.ch-tooltip { position: fixed; z-index: 2000; pointer-events: none; background: #fff; border: 1px solid var(--afia-border); box-shadow: var(--afia-shadow-md); padding: .45rem .65rem; font-size: var(--afia-fs-sm); min-width: 120px; max-width: 260px; }
.ch-tooltip[hidden] { display: none; }
.ch-tooltip__title { color: var(--afia-text-muted); font-size: var(--afia-fs-xs); margin-bottom: .2rem; }
.ch-tooltip__row { display: flex; align-items: center; gap: .45rem; }
.ch-tooltip__row .ch-key { width: 10px; }
.ch-tooltip__val { font-weight: var(--afia-fw-bold); margin-left: auto; padding-left: .8rem; }
@media print { .ch-table, .ch-tooltip { display: none; } .ch-card { break-inside: avoid; } }
.rpt-charts { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 420px), 1fr)); gap: 1rem; margin: .25rem 0 1rem; align-items: start; }
.afia-fiche-frame { width: 100%; height: 75vh; border: 0; background: #E2E8F0; display: block; }

/* Caisse : écran d'encaissement */
.pay-line { display: flex; justify-content: space-between; align-items: center; gap: 1rem; padding: .65rem 0; border-bottom: 1px solid var(--afia-border); }
.pay-line:last-child { border-bottom: 0; }
.pay-line__name { font-weight: var(--afia-fw-medium); }
.pay-line__qty { color: var(--afia-text-muted); margin-left: .35rem; }
.pay-line__due { font-weight: var(--afia-fw-bold); white-space: nowrap; font-variant-numeric: tabular-nums; }
.pay-panel { position: sticky; top: 1rem; overflow: hidden; border-color: var(--afia-primary); }
.pay-panel__total { background: var(--afia-primary); color: #fff; padding: 1rem 1.25rem; display: flex; flex-direction: column; }
.pay-panel__label { font-size: var(--afia-fs-sm); opacity: .9; }
.pay-panel__amount { font-size: var(--afia-fs-2xl); font-weight: var(--afia-fw-bold); line-height: 1.15; font-variant-numeric: tabular-nums;  letter-spacing: -.015em; }
.pay-amount { font-weight: var(--afia-fw-bold); font-variant-numeric: tabular-nums; text-align: right; }
.pay-currency { max-width: 6.5rem; }
.pay-methods { display: grid; grid-template-columns: repeat(2, 1fr); gap: .5rem; }
.pay-method { border: 1px solid var(--afia-border); background: #fff; color: var(--afia-text); border-radius: var(--afia-radius-sm); padding: .6rem .5rem; font-weight: var(--afia-fw-medium); cursor: pointer; }
.pay-method:hover { border-color: var(--afia-primary); }
.pay-method.is-active { background: var(--afia-primary-tint); border-color: var(--afia-primary); color: var(--afia-primary); box-shadow: inset 0 0 0 1px var(--afia-primary); }
.pay-change { margin-top: .5rem; padding: .5rem .75rem; background: var(--afia-primary-tint); color: var(--afia-primary); border-radius: var(--afia-radius-sm); }
.pay-change.is-short { background: #FEF2F2; color: #B91C1C; }
@media (max-width: 991.98px) { .pay-panel { position: static; } }

/* Tableaux compacts (liste des visites) : plus de lignes à l'écran */
.table-compact > :not(caption) > * > * { padding: .28rem .5rem; font-size: var(--afia-fs-sm); line-height: 1.25; }
.table-compact thead th { font-size: var(--afia-fs-sm); text-transform: uppercase; letter-spacing: .03em; white-space: nowrap; }
.table-compact .afia-badge { font-size: var(--afia-fs-xs); padding: .08rem .4rem; margin-right: .2rem; }
.table-compact .btn-sm { --bs-btn-padding-y: .12rem; --bs-btn-padding-x: .45rem; --bs-btn-font-size: var(--afia-fs-sm); }
.visits-vitals span { display: inline-block; margin-right: .55rem; white-space: nowrap; }
.visits-journey { min-width: 11rem; }
.visits-table td small { font-size: var(--afia-fs-xs); }
.visits-journey .afia-badge, .visits-table .afia-badge { display: inline-block; vertical-align: middle; margin-bottom: .1rem; }
.visits-journey { min-width: 15rem; }
.visits-actions { min-width: 8.5rem; max-width: 15rem; }
.visits-table td:nth-child(2) { white-space: normal; }
.visits-actions .btn, .visits-actions form { margin-left: .15rem; }

/* ---- Patients : liste et dossier ---- */
.pat-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 1rem; flex-wrap: wrap; margin-bottom: 1rem; }
.pat-bar { display: flex; justify-content: space-between; align-items: center; gap: .75rem; flex-wrap: wrap; margin-bottom: .75rem; }
.pat-search { display: flex; gap: .4rem; flex: 1 1 28rem; max-width: 44rem; }
.pat-search .form-control { flex: 1; }
.pat-seg { display: inline-flex; border: 1px solid var(--afia-border); background: var(--afia-white); }
.pat-seg a { padding: .35rem .9rem; font-size: var(--afia-fs-sm); text-decoration: none; color: var(--afia-text-muted); }
.pat-seg a.is-on { background: var(--afia-primary); color: #fff !important; font-weight: var(--afia-fw-medium); }
main .pat-seg a:not(.btn):not(.nav-link) { color: var(--afia-text-muted); }
main .pat-seg a.is-on:not(.btn):not(.nav-link) { color: #fff; }
.pat-table { background: var(--afia-white); border: 1px solid var(--afia-border); }
.pat-table thead th { background: var(--afia-primary-tint); color: var(--afia-primary-dark); font-size: var(--afia-fs-sm); text-transform: uppercase; letter-spacing: .03em; border-bottom: 1px solid var(--afia-border); }
.pat-table .afia-avatar--md { width: 2.2rem; height: 2.2rem; font-size: var(--afia-fs-sm); }
.pat-who { line-height: 1.2; }
.pat-name { font-weight: var(--afia-fw-medium); text-decoration: none; }
.pat-sub { font-size: var(--afia-fs-sm); color: var(--afia-text-muted); }
.pat-sub code { font-size: var(--afia-fs-sm); }
.pat-sex { display: inline-block; min-width: 1.35rem; text-align: center; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); padding: .05rem .3rem; margin-right: .35rem; background: var(--afia-neutral-tint); color: var(--afia-text); border: 1px solid var(--afia-border); }
.pat-sex--f { background: #FCE9F1; border-color: #F3C3D6; color: #9D2A5B; }
.pat-sex--m { background: var(--afia-primary-tint); border-color: #BFDCD9; color: var(--afia-primary-dark); }
.pat-blood { display: inline-block; font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-sm); padding: .05rem .4rem; background: var(--afia-danger-tint); color: var(--afia-danger-dark); border: 1px solid #F6C9C9; }
.pat-empty { background: var(--afia-white); border: 1px dashed var(--afia-border); padding: 2rem; text-align: center; color: var(--afia-text-muted); }

.pat-hero { display: flex; gap: 1.5rem; padding: 1.25rem; background: var(--afia-white); border: 1px solid var(--afia-border); border-top: 4px solid var(--afia-primary); margin-bottom: 1rem; flex-wrap: wrap; }
.pat-hero__photo { flex: 0 0 auto; }
.pat-hero__main { flex: 1 1 24rem; min-width: 0; display: flex; flex-direction: column; justify-content: space-between; gap: .9rem; }
.pat-hero__top { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; flex-wrap: wrap; }
.pat-chips { display: flex; flex-wrap: wrap; gap: .4rem; }
.pat-chip { display: inline-flex; align-items: center; gap: .3rem; font-size: var(--afia-fs-sm); padding: .15rem .6rem; background: var(--afia-neutral-tint); border: 1px solid var(--afia-border); }
.pat-chip code { color: var(--afia-primary-dark); }
.pat-chip--ok { background: var(--afia-success-tint); border-color: #BFE6CE; color: var(--afia-success-dark); }
.pat-chip .pat-sex { margin-right: 0; }
.pat-actions { display: flex; flex-wrap: wrap; gap: .4rem; padding-top: .8rem; border-top: 1px solid var(--afia-border); }
.pat-alert { margin-bottom: 1rem; padding: .6rem .9rem; background: var(--afia-danger-tint); border: 1px solid #F6C9C9; border-left: 4px solid var(--afia-danger); color: var(--afia-danger-dark); }
.pat-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); gap: .75rem; margin-bottom: 1rem; }
.pat-stat { background: var(--afia-white); border: 1px solid var(--afia-border); padding: .6rem .9rem; min-width: 0; }
.pat-stat__v { font-size: var(--afia-fs-lg); font-weight: var(--afia-fw-bold); color: var(--afia-primary-dark); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pat-stat__l { font-size: var(--afia-fs-xs); text-transform: uppercase; letter-spacing: .03em; color: var(--afia-text-muted); }
.pat-stat--alert .pat-stat__v { color: var(--afia-danger-dark); }
.pat-card .card-title { font-size: var(--afia-fs-base); color: var(--afia-primary-dark); padding-bottom: .5rem; border-bottom: 1px solid var(--afia-border); margin-bottom: .75rem; }
.pat-card .card-body > .d-flex:first-child { padding-bottom: .5rem; border-bottom: 1px solid var(--afia-border); margin-bottom: .5rem !important; }
.pat-card .card-body > .d-flex:first-child .card-title { border: 0; padding: 0; margin: 0; }
.pat-card li:last-child { border-bottom: 0 !important; }

/* =====================================================================
   MODE SOMBRE — html[data-theme="dark"] (voir assets/js/theme.js).
   Même teal, surfaces sombres ; les pages imprimées ne chargent pas ce fichier.
   ===================================================================== */
.afia-theme-sun { display: none; }
html[data-theme="dark"] .afia-theme-sun { display: inline; }
html[data-theme="dark"] .afia-theme-moon { display: none; }

html[data-theme="dark"] {
  --afia-primary-dark: #2DD4BF;      /* en sombre, utilisé surtout comme texte : teal clair */
  --afia-primary-tint: #12332F;
  --afia-secondary-tint: #12332F;
  --afia-bg: #0B1220;
  --afia-text: #E2E8F0;
  --afia-text-muted: #94A3B8;
  --afia-white: #131C2E;             /* surface des cartes, barres, tableaux */
  --afia-danger-dark: #FCA5A5;
  --afia-danger-tint: #3A1B20;
  --afia-success-dark: #86EFAC;
  --afia-success-tint: #12301F;
  --afia-warning-dark: #FCD34D;
  --afia-warning-tint: #3A2A10;
  --afia-neutral: #94A3B8;
  --afia-neutral-tint: #1B2639;
  --afia-border: #2A3850;

  /* Sur fond sombre, une ombre légère ne se voit pas : les mêmes quatre
     niveaux, mais nettement plus opaques. La géométrie ne change pas —
     c'est la hiérarchie qui doit rester reconnaissable d'un thème à l'autre. */
  --afia-shadow-sm: 0 1px 2px rgba(0, 0, 0, .35), 0 1px 3px rgba(0, 0, 0, .25);
  --afia-shadow-md: 0 2px 4px rgba(0, 0, 0, .35), 0 4px 12px rgba(0, 0, 0, .40);
  --afia-shadow-lg: 0 2px 6px rgba(0, 0, 0, .40), 0 10px 28px rgba(0, 0, 0, .55);
  --afia-shadow-xl: 0 4px 12px rgba(0, 0, 0, .45), 0 28px 60px rgba(0, 0, 0, .65);
  --afia-ring: 0 0 0 .2rem rgba(20, 184, 166, .30);
  --afia-field-bg:       #0F1828;
  --afia-field-bg-hover: #16223A;
  --afia-field-line:     #475569;
  --afia-surface-2: #1B2639;
  --bs-body-bg: #0B1220;
  --bs-body-color: #E2E8F0;
  --bs-border-color: #2A3850;
  --bs-link-color: #5EEAD4;
  --bs-link-hover-color: #99F6E4;
  --bs-secondary-color: #94A3B8;
  --bs-tertiary-bg: #1B2639;
  --bs-secondary-bg: #1B2639;
  --bs-emphasis-color: #F8FAFC;
}
html[data-theme="dark"] body {
  background-color: var(--afia-bg);
  background-image: none;
  color: var(--afia-text);
}
html[data-theme="dark"] body::before, html[data-theme="dark"] body::after { opacity: .25; }

/* Texte et liens */
html[data-theme="dark"] main a:not(.btn):not(.nav-link) { color: #5EEAD4; }
html[data-theme="dark"] main a:not(.btn):not(.nav-link):hover { color: #99F6E4; }
html[data-theme="dark"] h1, html[data-theme="dark"] h2, html[data-theme="dark"] h3,
html[data-theme="dark"] h4, html[data-theme="dark"] h5, html[data-theme="dark"] h6 { color: #F1F5F9; }
html[data-theme="dark"] .text-muted, html[data-theme="dark"] .form-text { color: var(--afia-text-muted) !important; }
html[data-theme="dark"] code { color: #5EEAD4; background: #1B2639; }
html[data-theme="dark"] .text-primary { color: #2DD4BF !important; }
html[data-theme="dark"] .text-dark { color: var(--afia-text) !important; }
html[data-theme="dark"] .bg-white, html[data-theme="dark"] .bg-light { background-color: var(--afia-white) !important; }

/* Boutons : texte clair sur teal, contours lisibles */
html[data-theme="dark"] .btn-primary:hover, html[data-theme="dark"] .btn-primary:focus, html[data-theme="dark"] .btn-primary:active { background-color: #0B5C56 !important; border-color: #0B5C56 !important; }
html[data-theme="dark"] .btn-danger:hover, html[data-theme="dark"] .btn-danger:focus { background-color: #B91C1C !important; border-color: #B91C1C !important; }
html[data-theme="dark"] .btn-success:hover, html[data-theme="dark"] .btn-success:focus { background-color: #117A38 !important; border-color: #117A38 !important; }
html[data-theme="dark"] .btn-warning:hover, html[data-theme="dark"] .btn-warning:focus { background-color: #B45C04 !important; border-color: #B45C04 !important; }
html[data-theme="dark"] .btn-outline-primary { color: #5EEAD4; border-color: #0F766E; }
html[data-theme="dark"] .btn-outline-primary:hover { background-color: #0F766E; color: #fff; }
html[data-theme="dark"] .btn-secondary, html[data-theme="dark"] .btn-outline-secondary { background-color: var(--afia-white); color: var(--afia-text); border-color: var(--afia-border); }
html[data-theme="dark"] .btn-outline-secondary:hover, html[data-theme="dark"] .btn-secondary:hover { background-color: #1B2639; color: #5EEAD4; }
html[data-theme="dark"] .btn-outline-danger { color: #FCA5A5; border-color: #7F1D1D; background-color: transparent; }
html[data-theme="dark"] .btn-outline-danger:hover { background-color: #B91C1C; color: #fff; }
html[data-theme="dark"] .btn-outline-success { color: #86EFAC; border-color: #166534; background-color: transparent; }
html[data-theme="dark"] .btn-outline-success:hover { background-color: #117A38; color: #fff; }
html[data-theme="dark"] .btn-outline-warning { color: #FCD34D; border-color: #92400E; background-color: transparent; }
html[data-theme="dark"] .btn-outline-warning:hover { background-color: #B45C04; color: #fff; }
html[data-theme="dark"] .btn-link { color: #5EEAD4; }

/* Badges : texte clair sur fond saturé foncé */
html[data-theme="dark"] .afia-badge--success { background: #15803D; color: #fff; }
html[data-theme="dark"] .afia-state--on::before { background: #22C55E; }
html[data-theme="dark"] .afia-badge--danger { background: #B91C1C; color: #fff; }
html[data-theme="dark"] .afia-badge--warning { background: #B45309; color: #fff; }
html[data-theme="dark"] .afia-badge--info { background: #0F766E; color: #fff; }
html[data-theme="dark"] .afia-badge--neutral { background: var(--afia-neutral-tint); color: var(--afia-text-muted); }
html[data-theme="dark"] .afia-count { background: #1B2639; color: var(--afia-text); }

/* Formulaires */
html[data-theme="dark"] .form-control, html[data-theme="dark"] .form-select {
  background-color: #0F1828; color: var(--afia-text); border-color: var(--afia-border);
}
html[data-theme="dark"] .form-control::placeholder { color: #64748B; }
html[data-theme="dark"] .form-control:focus, html[data-theme="dark"] .form-select:focus { background-color: #0F1828; color: #fff; border-color: #14B8A6; box-shadow: var(--afia-ring); }
html[data-theme="dark"] .form-control:disabled, html[data-theme="dark"] .form-select:disabled, html[data-theme="dark"] .form-control[readonly] { background-color: #1B2639; color: var(--afia-text-muted); }
html[data-theme="dark"] .form-check-input { background-color: #0F1828; border-color: #475569; }
html[data-theme="dark"] .form-check-input:checked { background-color: #0F766E; border-color: #0F766E; }
html[data-theme="dark"] .input-group-text { background: #1B2639; color: var(--afia-text); border-color: var(--afia-border); }
html[data-theme="dark"] .form-label, html[data-theme="dark"] label { color: var(--afia-text); }

/* Cartes, tableaux, fenêtres, menus */
html[data-theme="dark"] .card, html[data-theme="dark"] .modal-content, html[data-theme="dark"] .list-group-item, html[data-theme="dark"] .accordion-item {
  background-color: var(--afia-white); color: var(--afia-text); border-color: var(--afia-border);
}
html[data-theme="dark"] .card-header, html[data-theme="dark"] .card-footer { background-color: #1B2639; border-color: var(--afia-border); color: var(--afia-text); }
html[data-theme="dark"] .modal-header, html[data-theme="dark"] .modal-footer { border-color: var(--afia-border); }
html[data-theme="dark"] .btn-close { filter: invert(1) grayscale(100%) brightness(200%); }
html[data-theme="dark"] .table { --bs-table-bg: transparent; --bs-table-color: var(--afia-text); --bs-table-border-color: var(--afia-border); --bs-table-striped-bg: #162032; --bs-table-hover-bg: #1B2A40; --bs-table-hover-color: #fff; color: var(--afia-text); }
html[data-theme="dark"] .table > :not(caption) > * > * { background-color: transparent; border-color: var(--afia-border); color: inherit; }
html[data-theme="dark"] .table thead th { color: var(--afia-text-muted); }
html[data-theme="dark"] .table-light, html[data-theme="dark"] .table-light > th, html[data-theme="dark"] .table-light > td { --bs-table-bg: #1B2639; --bs-table-color: var(--afia-text); }
html[data-theme="dark"] .table-hover > tbody > tr:hover > * { background-color: #1B2A40; color: #fff; }
html[data-theme="dark"] .dropdown-menu { background: var(--afia-white); border-color: var(--afia-border); }
html[data-theme="dark"] .dropdown-item { color: var(--afia-text); }
html[data-theme="dark"] .dropdown-item:hover { background: #1B2639; color: #5EEAD4; }
html[data-theme="dark"] .nav-tabs { border-color: var(--afia-border); }
html[data-theme="dark"] .nav-tabs .nav-link { color: #5EEAD4; }
html[data-theme="dark"] .nav-tabs .nav-link:hover { border-color: var(--afia-border); color: #99F6E4; }
html[data-theme="dark"] .nav-tabs .nav-link.active { background: var(--afia-white); border-color: var(--afia-border) var(--afia-border) var(--afia-white); color: #F1F5F9; }
html[data-theme="dark"] .page-link { background: var(--afia-white); border-color: var(--afia-border); color: #5EEAD4; }
html[data-theme="dark"] .afia-pagination .page-link:hover { background: #1B2639; }
html[data-theme="dark"] .afia-pagination .page-item.disabled .page-link { color: #64748B; }
html[data-theme="dark"] .progress { background-color: #1B2639; }
html[data-theme="dark"] hr { border-color: var(--afia-border); opacity: 1; }
html[data-theme="dark"] .border, html[data-theme="dark"] .border-bottom, html[data-theme="dark"] .border-top { border-color: var(--afia-border) !important; }

/* Alertes */
html[data-theme="dark"] .alert { --bs-alert-color: #E2E8F0; --bs-alert-bg: #12332F; --bs-alert-border-color: #1F5A54; --bs-alert-link-color: #5EEAD4; }
html[data-theme="dark"] .alert-success { background-color: #12301F; color: #BBF7D0; border-color: #166534; }
html[data-theme="dark"] .alert-danger { background-color: #3A1B20; color: #FECACA; border-color: #7F1D1D; }
html[data-theme="dark"] .alert-warning { background-color: #3A2A10; color: #FDE68A; border-color: #92400E; }
html[data-theme="dark"] .alert-info { background-color: #12332F; color: #99F6E4; border-color: #1F5A54; }

/* Barre du haut, menus, recherche, notifications */
html[data-theme="dark"] .afia-topbar { box-shadow: none; }
html[data-theme="dark"] .module-sidebar { background: var(--afia-white); border-color: var(--afia-border); }
html[data-theme="dark"] .module-sidebar__title { color: #94A3B8; }
html[data-theme="dark"] .module-sidebar .nav-link { color: #CBD5E1; }
html[data-theme="dark"] .module-sidebar .nav-link:hover { background: #1B2639; color: #5EEAD4; }
html[data-theme="dark"] .module-sidebar .nav-link.active { background: #0F766E; color: #fff; }
html[data-theme="dark"] .afia-breadcrumb__sep { color: #64748B; }
html[data-theme="dark"] .afia-breadcrumb a { color: var(--afia-text-muted); }
html[data-theme="dark"] .afia-search .form-control { background-color: #1B2639; color: var(--afia-text); }
html[data-theme="dark"] .afia-search .form-control:hover { background-color: #22304A; }
html[data-theme="dark"] .afia-search .form-control:focus { background-color: #0F1828; }
html[data-theme="dark"] .afia-search .form-control::placeholder, html[data-theme="dark"] .afia-search__meta, html[data-theme="dark"] .afia-search__empty { color: #94A3B8; }
html[data-theme="dark"] .afia-search__results { background: var(--afia-white); box-shadow: var(--afia-shadow-lg); }
html[data-theme="dark"] .afia-search__results a:hover, html[data-theme="dark"] .afia-search__results a.is-active { background: #1B2639; }
html[data-theme="dark"] .afia-icon-btn { color: #CBD5E1; }
html[data-theme="dark"] .afia-icon-btn:hover, html[data-theme="dark"] .afia-user-btn:hover { background: #1B2639; }
html[data-theme="dark"] .afia-user-btn { color: var(--afia-text); }
html[data-theme="dark"] .afia-user-sub, html[data-theme="dark"] .afia-dd-empty { color: #94A3B8; }
html[data-theme="dark"] .afia-dd-menu { background: var(--afia-white); box-shadow: var(--afia-shadow-lg); }
html[data-theme="dark"] .afia-dd-header { background: #1B2639; }
html[data-theme="dark"] .afia-dd-item { color: var(--afia-text); }
html[data-theme="dark"] .afia-dd-item:hover, html[data-theme="dark"] .afia-dd-footer:hover { background: #1B2639; color: #5EEAD4; }
html[data-theme="dark"] .afia-dd-item--danger { color: #FCA5A5; }
html[data-theme="dark"] .afia-dd-item--danger:hover { background: #3A1B20; color: #FECACA; }
html[data-theme="dark"] .afia-notif-list a { border-bottom-color: var(--afia-border); }
html[data-theme="dark"] .afia-notif-list a:hover { background: #1B2639; }
html[data-theme="dark"] .afia-notif-list a.is-unread { background: #12332F; }
html[data-theme="dark"] .afia-notif-text { color: #CBD5E1; }
html[data-theme="dark"] .afia-notif-time { color: #94A3B8; }

/* Composants métier */
html[data-theme="dark"] .afia-subpanel, html[data-theme="dark"] .afia-group-row > td, html[data-theme="dark"] .afia-care-group__head { background: #1B2639; }
html[data-theme="dark"] .afia-stat, html[data-theme="dark"] .afia-action, html[data-theme="dark"] .afia-care-group, html[data-theme="dark"] .afia-toast,
html[data-theme="dark"] .afia-building, html[data-theme="dark"] .afia-bedcard, html[data-theme="dark"] .afia-chip, html[data-theme="dark"] .afia-exams,
html[data-theme="dark"] .afia-level-choice, html[data-theme="dark"] .pay-method, html[data-theme="dark"] .afia-roster .afia-roster__who { background: var(--afia-white); color: var(--afia-text); border-color: var(--afia-border); }
html[data-theme="dark"] .afia-action span, html[data-theme="dark"] .afia-stat span, html[data-theme="dark"] .afia-vital__label,
html[data-theme="dark"] .afia-vital__value small, html[data-theme="dark"] .afia-consult-text dt, html[data-theme="dark"] .afia-actionbar__title,
html[data-theme="dark"] .afia-level-choice small, html[data-theme="dark"] .afia-profile-list dt { color: #94A3B8; }
html[data-theme="dark"] .afia-roster th.is-today, html[data-theme="dark"] .afia-roster td.is-today { background: #12301F; }
html[data-theme="dark"] .afia-roster__cell.is-leave { background: #3A2A10; }
html[data-theme="dark"] .afia-exams__bar, html[data-theme="dark"] .ch-htrack, html[data-theme="dark"] .afia-steps-mini__seg { background: #2A3850; }
html[data-theme="dark"] .afia-progress i { background: #2A3850; }
html[data-theme="dark"] .afia-journey__step::before { background: #2A3850; }
html[data-theme="dark"] .afia-totals__box { background: var(--afia-primary-tint); border-color: #1F5A54; }
html[data-theme="dark"] .afia-totals__row + .afia-totals__row { border-top-color: #1F5A54; }
html[data-theme="dark"] .afia-level--yellow { color: #422006; }
html[data-theme="dark"] .afia-toast { box-shadow: var(--afia-shadow-lg); }
html[data-theme="dark"] .afia-toast__title { color: var(--afia-text); }
html[data-theme="dark"] .afia-toast__msg { color: #94A3B8; }
html[data-theme="dark"] .afia-toast__icon { background: rgba(255, 255, 255, .07); }
html[data-theme="dark"] .afia-fiche-frame { background: #1B2639; }
html[data-theme="dark"] .pay-change.is-short { background: #3A1B20; color: #FCA5A5; }
html[data-theme="dark"] .afia-step--done .afia-step__shape { background: linear-gradient(180deg, #14907f, #0F766E); }
html[data-theme="dark"] .afia-step--current .afia-step__shape { background: linear-gradient(180deg, #f59e0b, #B45309); }
html[data-theme="dark"] .afia-step--refused .afia-step__shape, html[data-theme="dark"] .afia-step--cancelled .afia-step__shape { background: linear-gradient(180deg, #ef4444, #B91C1C); }

/* Graphiques et rapports */
html[data-theme="dark"] .rpt-kpi { border-color: var(--afia-border); border-left-color: var(--afia-primary); }
html[data-theme="dark"] .ch-grid { stroke: #2A3850; }
html[data-theme="dark"] .ch-grid--base { stroke: #475569; }
html[data-theme="dark"] .ch-ring { stroke: #1B2639; }
html[data-theme="dark"] .ch-tooltip { background: #1B2639; color: var(--afia-text); border-color: #475569; }
html[data-theme="dark"] .ch-hit:hover, html[data-theme="dark"] .ch-hit:focus-visible { fill: rgba(45, 212, 191, .12); }
html[data-theme="dark"] .s1 { --c: #2DD4BF; } html[data-theme="dark"] .s2 { --c: #FBBF24; }
html[data-theme="dark"] .s3 { --c: #F472B6; } html[data-theme="dark"] .s4 { --c: #A3E635; }

/* Patients */
html[data-theme="dark"] .pat-sex--f { background: #3A1B2B; border-color: #6B2C49; color: #F9A8D4; }
html[data-theme="dark"] .pat-sex--m { background: #12332F; border-color: #1F5A54; color: #5EEAD4; }
html[data-theme="dark"] .pat-blood { background: #3A1B20; border-color: #7F1D1D; color: #FCA5A5; }
html[data-theme="dark"] .pat-chip--ok { background: #12301F; border-color: #166534; color: #86EFAC; }
html[data-theme="dark"] .pat-alert { background: #3A1B20; border-color: #7F1D1D; color: #FECACA; }
html[data-theme="dark"] .pat-table thead th { background: #12332F; color: #5EEAD4; }
html[data-theme="dark"] .pat-seg a.is-on, html[data-theme="dark"] main .pat-seg a.is-on:not(.btn):not(.nav-link) { background: #0F766E; color: #fff !important; }
html[data-theme="dark"] main .pat-seg a:not(.btn):not(.nav-link):not(.is-on) { color: #94A3B8; }
html[data-theme="dark"] .pay-panel__total { background: #0F766E; }
html[data-theme="dark"] .afia-auth-wrapper { background: radial-gradient(circle at 8% 12%, rgba(20, 184, 166, .10), transparent 45%), linear-gradient(160deg, #0B1220 0%, #0E1626 55%, #0B1220 100%); }
html[data-theme="dark"] .afia-auth-card { background: var(--afia-white); border-color: var(--afia-border); color: var(--afia-text); }
html[data-theme="dark"] .afia-kiosk { background: radial-gradient(circle at 50% -10%, #16233A 0%, #0E1626 60%, #0B1220 100%); color: #E2E8F0; }
html[data-theme="dark"] .afia-kiosk__title, html[data-theme="dark"] .afia-kiosk__name { color: #F1F5F9; }
html[data-theme="dark"] .afia-kiosk__hint, html[data-theme="dark"] .afia-kiosk__date, html[data-theme="dark"] .afia-kiosk__msg, html[data-theme="dark"] .afia-kiosk__job,
html[data-theme="dark"] .afia-kiosk__rtime, html[data-theme="dark"] .afia-kiosk__rkind, html[data-theme="dark"] .afia-kiosk__empty, html[data-theme="dark"] .afia-kiosk__recent h2 { color: #94A3B8; }
html[data-theme="dark"] .afia-badgecard { background: var(--afia-white); border-color: var(--afia-border); }
html[data-theme="dark"] .afia-badgecard__hospital { color: #F1F5F9; }
html[data-theme="dark"] .afia-kiosk__recent li { background: var(--afia-white); border-color: var(--afia-border); }
html[data-theme="dark"] .afia-kiosk__clock, html[data-theme="dark"] .afia-selfpunch__times { color: #5EEAD4; }
html[data-theme="dark"] .afia-kiosk__exit { color: #94A3B8; border-color: #2A3850; }

/* Menu principal en mode sombre : icônes plus lumineuses pour rester lisibles. */
html[data-theme="dark"] .afia-menu-tile-icon { color: #5EEAD4; background: rgba(45, 212, 191, .12); }
html[data-theme="dark"] .afia-menu-tile:hover .afia-menu-tile-icon,
html[data-theme="dark"] .afia-menu-tile:focus .afia-menu-tile-icon { background: #0F766E; color: #fff; }
html[data-theme="dark"] .afia-menu-tile { box-shadow: none; }
@media (max-width: 575.98px) { .afia-menu-group__desc { display: none; } .afia-menu-group__head { justify-content: space-between; } }

/* ---- Abonnements : bandeau d'échéance de la barre du haut ---- */
.afia-subbanner { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: .5rem 1rem; padding: .5rem 1rem; font-size: var(--afia-fs-base); font-weight: var(--afia-fw-medium); border-bottom: 1px solid transparent; }
.afia-subbanner a { font-weight: var(--afia-fw-medium); text-decoration: underline; color: inherit; }
.afia-subbanner--warning { background: #FEF3C7; color: #78350F; border-color: #FCD34D; }
.afia-subbanner--danger { background: #FEE2E2; color: #7F1D1D; border-color: #FCA5A5; }
[data-theme="dark"] .afia-subbanner--warning { background: #422006; color: #FDE68A; border-color: #92400E; }
[data-theme="dark"] .afia-subbanner--danger { background: #450A0A; color: #FECACA; border-color: #991B1B; }

/* ---- Abonnements : compte à rebours ---- */
.afia-countdown { --cd-a: #0A4F4A; --cd-b: #0F766E; --cd-fg: #fff; position: relative; overflow: hidden; border-radius: var(--afia-radius-lg); padding: 1.4rem 1.5rem 1.6rem; margin-bottom: 1.5rem; color: var(--cd-fg);
  background: radial-gradient(120% 140% at 0% 0%, var(--cd-b) 0%, var(--cd-a) 70%); box-shadow: 0 18px 40px -18px var(--cd-a); }
.afia-countdown::after { content: ""; position: absolute; right: -4rem; top: -4rem; width: 14rem; height: 14rem; border-radius: 50%; background: rgba(255,255,255,.07); pointer-events: none; }
.afia-countdown--warning { --cd-a: #7C4A03; --cd-b: #D97706; }
.afia-countdown--danger { --cd-a: #7F1D1D; --cd-b: #DC2626; }
.afia-countdown__head { position: relative; display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; margin-bottom: 1rem; }
.afia-countdown__label { font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-bold); letter-spacing: .12em; text-transform: uppercase; opacity: .92; }
.afia-countdown__until { font-size: var(--afia-fs-base); opacity: .8; margin-top: .15rem; }
.afia-countdown__pulse { width: .7rem; height: .7rem; margin-top: .3rem; border-radius: 50%; background: #fff; box-shadow: 0 0 0 0 rgba(255,255,255,.7); animation: afia-cd-pulse 1.6s infinite; flex: 0 0 auto; }
.afia-countdown__grid { position: relative; display: grid; grid-template-columns: repeat(5, 1fr); gap: .75rem; }
.afia-countdown__cell { display: flex; flex-direction: column; align-items: center; padding: .9rem .25rem .7rem; border-radius: var(--afia-radius-lg); background: rgba(255,255,255,.12); border: 1px solid rgba(255,255,255,.22); backdrop-filter: blur(2px); }
.afia-countdown__num { font-size: clamp(1.9rem, 5vw, 3.4rem); font-weight: var(--afia-fw-bold); line-height: 1; font-variant-numeric: tabular-nums; letter-spacing: .02em; }
.afia-countdown__unit { margin-top: .4rem; font-size: var(--afia-fs-xs); letter-spacing: .14em; text-transform: uppercase; opacity: .85; }
.afia-countdown__num.is-tick { animation: afia-cd-tick .45s ease-out; }
.afia-countdown__done { position: relative; font-weight: var(--afia-fw-medium); }
@keyframes afia-cd-tick { from { transform: translateY(-.22em); opacity: .35; } to { transform: none; opacity: 1; } }
@keyframes afia-cd-pulse { 70% { box-shadow: 0 0 0 .7rem rgba(255,255,255,0); } 100% { box-shadow: 0 0 0 0 rgba(255,255,255,0); } }
@media (max-width: 575.98px) { .afia-countdown { padding: 1.1rem 1rem 1.2rem; } .afia-countdown__grid { gap: .4rem; } .afia-countdown__cell { padding: .65rem .1rem .5rem; } .afia-countdown__unit { font-size: var(--afia-fs-xs); letter-spacing: .06em; } }
@media (prefers-reduced-motion: reduce) { .afia-countdown__pulse, .afia-countdown__num.is-tick { animation: none; } }

/* ---- Écran de chargement ---- */
.afia-loader { position: fixed; inset: 0; z-index: 3000; display: flex; align-items: center; justify-content: center; background: #F4F8F7; opacity: 1; transition: opacity .35s ease, visibility .35s; animation: afia-loader-failsafe .4s 7s forwards; }
.afia-loader.is-hidden { opacity: 0; visibility: hidden; pointer-events: none; animation: none; }
.afia-loader.is-nav { background: rgba(244, 248, 247, .86); backdrop-filter: blur(3px); }
.afia-loader__bar { position: absolute; left: 0; top: 0; height: 3px; width: 100%; overflow: hidden; background: rgba(15, 118, 110, .12); }
.afia-loader__bar::before { content: ""; position: absolute; inset: 0; width: 40%; background: linear-gradient(90deg, transparent, #0F766E, #14B8A6, transparent); animation: afia-loader-bar 1.15s cubic-bezier(.4, 0, .2, 1) infinite; }
.afia-loader__box { display: flex; flex-direction: column; align-items: center; gap: 1.1rem; }
.afia-loader__ecg { width: min(320px, 78vw); height: auto; overflow: visible; }
.afia-loader__ecg path { fill: none; stroke-linecap: round; stroke-linejoin: round; }
.afia-loader__grid { stroke: rgba(15, 118, 110, .10); stroke-width: 1; }
.afia-loader__track { stroke: rgba(15, 118, 110, .22); stroke-width: 2; }
.afia-loader__trace { stroke: #0F766E; stroke-width: 3; stroke-dasharray: 26 74; filter: drop-shadow(0 0 4px rgba(20, 184, 166, .7)); animation: afia-loader-ecg 1.6s linear infinite; }
html[data-theme="dark"] .afia-loader__grid { stroke: rgba(94, 234, 212, .09); }
html[data-theme="dark"] .afia-loader__track { stroke: rgba(94, 234, 212, .2); }
html[data-theme="dark"] .afia-loader__trace { stroke: #5EEAD4; }
@keyframes afia-loader-ecg { from { stroke-dashoffset: 26; } to { stroke-dashoffset: -74; } }
.afia-loader__text { font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-medium); letter-spacing: .22em; text-transform: uppercase; color: #0F766E; }
html[data-theme="dark"] .afia-loader { background: #0B1514; }
html[data-theme="dark"] .afia-loader.is-nav { background: rgba(11, 21, 20, .86); }
html[data-theme="dark"] .afia-loader__text { color: #5EEAD4; }
@keyframes afia-loader-bar { from { transform: translateX(-100%); } to { transform: translateX(260%); } }
@keyframes afia-loader-failsafe { to { opacity: 0; visibility: hidden; pointer-events: none; } }
@media (prefers-reduced-motion: reduce) { .afia-loader__trace, .afia-loader__bar::before { animation-duration: 4s; } }
@media print { .afia-loader { display: none !important; } }

/* Avis d'échéance (fenêtre à la connexion) */
.sub-notice { --sn-a: #7C4A03; --sn-b: #D97706; }
.sub-notice--danger { --sn-a: #7F1D1D; --sn-b: #DC2626; }
.sub-notice .modal-content { border: 0; border-radius: var(--afia-radius-lg); overflow: hidden; box-shadow: var(--afia-shadow-xl); }
.sub-notice__hero { position: relative; overflow: hidden; padding: 2rem 1.75rem 1.6rem; color: #fff; text-align: center; background: linear-gradient(135deg, var(--sn-a), var(--sn-b)); }
.sub-notice__hero::before, .sub-notice__hero::after { content: ""; position: absolute; border-radius: 50%; background: rgba(255, 255, 255, .08); pointer-events: none; }
.sub-notice__hero::before { width: 13rem; height: 13rem; right: -4rem; top: -5rem; }
.sub-notice__hero::after { width: 8rem; height: 8rem; left: -2.5rem; bottom: -3.5rem; }
.sub-notice__close { position: absolute; right: 1rem; top: 1rem; z-index: 2; opacity: .85; }
.sub-notice__icon { position: relative; display: inline-flex; align-items: center; justify-content: center; width: 3.6rem; height: 3.6rem; border-radius: 50%; background: rgba(255, 255, 255, .18); border: 1px solid rgba(255, 255, 255, .35); animation: sub-notice-pulse 2.2s ease-out infinite; }
.sub-notice__eyebrow { position: relative; margin-top: .9rem; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .2em; text-transform: uppercase; opacity: .85; }
.sub-notice__title { position: relative; margin: .35rem 0 .5rem; font-size: var(--afia-fs-lg); font-weight: var(--afia-fw-bold); line-height: 1.25; }
.sub-notice__msg { position: relative; margin: 0; font-size: var(--afia-fs-base); opacity: .92; }
.sub-notice__body { padding: 1.4rem 1.5rem .6rem; text-align: center; }
.sub-notice__label { font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .16em; text-transform: uppercase; color: var(--sn-b); margin-bottom: .7rem; }
.sub-notice__cd { margin: 0 0 1.1rem; padding: 0; background: none; border-radius: 0; color: inherit; overflow: visible; }
.sub-notice__cd::after { display: none; }
.sub-notice__cd .afia-countdown__grid { gap: .5rem; }
.sub-notice__cd .afia-countdown__cell { padding: .7rem .15rem .55rem; background: linear-gradient(160deg, var(--sn-a), var(--sn-b)); border: 0; color: #fff; box-shadow: 0 8px 18px -10px var(--sn-a); }
.sub-notice__cd .afia-countdown__num { font-size: clamp(1.5rem, 6vw, 2rem); }
.sub-notice__cd .afia-countdown__unit { font-size: var(--afia-fs-xs); letter-spacing: .1em; }
.sub-notice__cd .afia-countdown__done { color: var(--sn-b); }
.sub-notice__renew { margin: 0 0 .5rem; font-size: var(--afia-fs-base); }
.sub-notice__contact { margin: 0; font-size: var(--afia-fs-sm); color: var(--bs-secondary-color, #6c757d); }
.sub-notice__foot { display: flex; justify-content: center; gap: .6rem; flex-wrap: wrap; padding: 1rem 1.5rem 1.5rem; }
@keyframes sub-notice-pulse { 0% { box-shadow: 0 0 0 0 rgba(255, 255, 255, .45); } 70%, 100% { box-shadow: 0 0 0 .9rem rgba(255, 255, 255, 0); } }
@media (prefers-reduced-motion: reduce) { .sub-notice__icon { animation: none; } }

/* =====================================================================================================
   Refonte : facture, taux de change, soins infirmiers, casiers de la morgue
   ===================================================================================================== */

/* ---- Facture ---- */
.inv-hero { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-start; gap: 1rem; padding: 1.2rem 1.4rem; margin-bottom: 1rem; background: var(--afia-white); border: 1px solid var(--afia-border); border-left: 5px solid var(--afia-primary); border-radius: var(--afia-radius-lg); }
.inv-hero__eyebrow { font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .18em; text-transform: uppercase; color: var(--afia-primary-dark); }
.inv-hero__no { margin: .1rem 0 .3rem; font-size: var(--afia-fs-xl); font-weight: var(--afia-fw-bold); letter-spacing: .01em; display: flex; align-items: center; flex-wrap: wrap; gap: .6rem; }
.inv-hero__meta { color: var(--afia-text-muted); display: flex; flex-wrap: wrap; gap: .4rem; align-items: center; }
.inv-hero__meta strong { color: var(--afia-text); }
.inv-hero__actions { display: flex; flex-wrap: wrap; gap: .5rem; }
.inv-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: .75rem; margin-bottom: 1rem; }
.inv-kpi { position: relative; overflow: hidden; padding: .85rem 1rem; background: var(--afia-white); border: 1px solid var(--afia-border); border-radius: var(--afia-radius-lg); }
.inv-kpi span { display: block; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .08em; text-transform: uppercase; color: var(--afia-text-muted); }
.inv-kpi strong { display: block; margin-top: .2rem; font-size: var(--afia-fs-xl); font-variant-numeric: tabular-nums;  letter-spacing: -.015em; }
.inv-kpi--paid strong { color: var(--afia-success-dark); }
.inv-kpi--ins strong { color: var(--afia-primary-dark); }
.inv-kpi--due { background: var(--afia-warning-tint); border-color: transparent; }
.inv-kpi--due strong { color: var(--afia-warning-dark); }
.inv-kpi--settled { background: var(--afia-success-tint); border-color: transparent; }
.inv-kpi--settled strong { color: var(--afia-success-dark); }
.inv-kpi__bar { height: 5px; margin-top: .6rem; background: rgba(0, 0, 0, .08); border-radius: var(--afia-radius-pill); overflow: hidden; }
.inv-kpi__bar i { display: block; height: 100%; background: var(--afia-primary); border-radius: var(--afia-radius-pill); }
.inv-ins, .inv-card { border-radius: var(--afia-radius-lg); border-color: var(--afia-border); overflow: hidden; }
.inv-card__head { display: flex; justify-content: space-between; align-items: center; padding: .75rem 1.1rem; background: var(--afia-neutral-tint); border-bottom: 1px solid var(--afia-border); }
.inv-card__head h3 { margin: 0; font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-bold); letter-spacing: .12em; text-transform: uppercase; color: var(--afia-text-muted); }
.inv-card__head span { min-width: 1.6rem; padding: .05rem .5rem; text-align: center; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); border-radius: var(--afia-radius-pill); background: var(--afia-primary-tint); color: var(--afia-primary-dark); }
.inv-card .table thead th { font-size: var(--afia-fs-xs); letter-spacing: .08em; text-transform: uppercase; color: var(--afia-text-muted); border-bottom-width: 1px; }
.inv-card .table tbody tr:hover > * { background: var(--afia-neutral-tint); }
.inv-card .afia-totals { margin-top: 1rem; }
.inv-card .afia-totals__box { border-radius: var(--afia-radius-lg); }

/* ---- Taux de change ---- */
.fx-hero { display: flex; justify-content: space-between; align-items: center; gap: 1.5rem; padding: 1.5rem 1.6rem; margin-bottom: 1.25rem; color: #fff; border-radius: var(--afia-radius-lg); background: linear-gradient(135deg, #0A4F4A, #0F766E 60%, #14B8A6); position: relative; overflow: hidden; }
.fx-hero::after { content: ""; position: absolute; right: -3rem; top: -4rem; width: 14rem; height: 14rem; border-radius: 50%; background: rgba(255, 255, 255, .08); pointer-events: none; }
.fx-hero__eyebrow { font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .2em; text-transform: uppercase; opacity: .8; }
.fx-hero__title { margin: .15rem 0 .4rem; font-weight: var(--afia-fw-bold); }
.fx-hero__text { margin: 0; max-width: 40rem; opacity: .92; }
.fx-hero__base { position: relative; z-index: 1; flex: 0 0 auto; text-align: center; padding: .8rem 1.2rem; border-radius: var(--afia-radius-lg); background: rgba(255, 255, 255, .14); border: 1px solid rgba(255, 255, 255, .3); }
.fx-hero__base span { display: block; font-size: var(--afia-fs-2xl); font-weight: var(--afia-fw-bold); letter-spacing: .08em; line-height: 1; }
.fx-hero__base small { font-size: var(--afia-fs-xs); letter-spacing: .12em; text-transform: uppercase; opacity: .85; }
.fx-card { height: 100%; padding: 1.2rem 1.3rem; background: var(--afia-white); border: 1px solid var(--afia-border); border-radius: var(--afia-radius-lg); transition: border-color .15s; }
.fx-card:hover { border-color: var(--afia-primary); }
.fx-card.is-missing { border-style: dashed; border-color: var(--afia-danger); }
.fx-card__head { display: flex; align-items: center; gap: .75rem; margin-bottom: 1rem; }
.fx-card__code { display: inline-flex; align-items: center; justify-content: center; width: 3rem; height: 3rem; border-radius: 50%; font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-sm); letter-spacing: .04em; color: var(--afia-primary-dark); background: var(--afia-primary-tint); border: 1px solid var(--afia-border); }
.fx-card__id { display: flex; flex-direction: column; line-height: 1.2; flex: 1 1 auto; }
.fx-card__id small { color: var(--afia-text-muted); }
.fx-card__since { font-size: var(--afia-fs-xs); color: var(--afia-text-muted); background: var(--afia-neutral-tint); padding: .2rem .6rem; border-radius: var(--afia-radius-pill); white-space: nowrap; }
.fx-card__pair { display: flex; align-items: baseline; flex-wrap: wrap; gap: .6rem; margin-bottom: .85rem; }
.fx-card__one { color: var(--afia-text-muted); font-weight: var(--afia-fw-medium); }
.fx-card__rate { font-size: var(--afia-fs-2xl); font-weight: var(--afia-fw-bold); font-variant-numeric: tabular-nums; line-height: 1.1;  letter-spacing: -.015em; }
.fx-card__rate small { font-size: var(--afia-fs-base); font-weight: var(--afia-fw-bold); color: var(--afia-text-muted); }
.fx-card__rate em { font-style: normal; font-size: var(--afia-fs-lg); color: var(--afia-danger); }
.fx-conv { display: flex; align-items: center; gap: .5rem; padding: .55rem .75rem; margin-bottom: .9rem; background: var(--afia-neutral-tint); border-radius: var(--afia-radius); font-size: var(--afia-fs-base); }
.fx-conv__in { width: 6.5rem; text-align: right; }
.fx-conv__eq { color: var(--afia-text-muted); }
.fx-conv__out { font-weight: var(--afia-fw-bold); font-variant-numeric: tabular-nums; }
.fx-card__form { display: flex; gap: .6rem; align-items: flex-end; padding-top: .9rem; border-top: 1px dashed var(--afia-border); }
.fx-section { margin: 0 0 .6rem; font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-bold); letter-spacing: .12em; text-transform: uppercase; color: var(--afia-text-muted); }
.fx-history { border: 1px solid var(--afia-border); border-radius: var(--afia-radius-lg); overflow: hidden; background: var(--afia-white); }
.fx-history thead th { font-size: var(--afia-fs-xs); letter-spacing: .08em; text-transform: uppercase; color: var(--afia-text-muted); background: var(--afia-neutral-tint); }
.fx-chip { display: inline-block; padding: .1rem .55rem; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); border-radius: var(--afia-radius-pill); background: var(--afia-primary-tint); color: var(--afia-primary-dark); }
.fx-delta { font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-sm); font-variant-numeric: tabular-nums; }
.fx-delta--up { color: var(--afia-success-dark); }
.fx-delta--down { color: var(--afia-danger-dark); }
@media (max-width: 575.98px) { .fx-hero { flex-direction: column; align-items: flex-start; } .fx-card__form { flex-direction: column; align-items: stretch; } }

/* ---- Soins infirmiers ---- */
.nr-top { margin-bottom: 1rem; }
.nr-top__eyebrow { font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .18em; text-transform: uppercase; color: var(--afia-primary-dark); }
.nr-stat { position: relative; border-radius: var(--afia-radius-lg); padding: .9rem 1rem .9rem 1.2rem; }
.nr-stat::before { content: ""; position: absolute; left: 0; top: .7rem; bottom: .7rem; width: 4px; border-radius: 0 var(--afia-radius-sm) var(--afia-radius-sm) 0; background: var(--afia-primary); }
.nr-stat.is-alert::before { background: var(--afia-danger); }
.nr-stat strong { font-size: var(--afia-fs-2xl);  letter-spacing: -.015em; }
.nr-list { border: 1px solid var(--afia-border); }
.nr-list thead th { font-size: var(--afia-fs-xs); letter-spacing: .08em; text-transform: uppercase; color: var(--afia-text-muted); background: var(--afia-neutral-tint); }
.nr-bed { display: inline-block; padding: .15rem .6rem; font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-sm); border-radius: var(--afia-radius); color: var(--afia-primary-dark); background: var(--afia-primary-tint); border: 1px solid var(--afia-border); }
.nr-hero { display: grid; grid-template-columns: 1fr auto; gap: 1rem 1.5rem; padding: 1.3rem 1.5rem; margin-bottom: 1rem; background: var(--afia-white); border: 1px solid var(--afia-border); border-top: 5px solid var(--afia-primary); border-radius: var(--afia-radius-lg); }
.nr-hero__who { display: flex; align-items: center; gap: 1rem; }
.nr-hero__name { margin: 0; font-size: var(--afia-fs-xl); font-weight: var(--afia-fw-bold);  letter-spacing: -.015em; }
.nr-hero__sub { color: var(--afia-text-muted); }
.nr-hero__actions { display: flex; gap: .5rem; align-items: flex-start; }
.nr-facts { grid-column: 1 / -1; display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: .7rem; margin: 0; }
.nr-fact { padding: .6rem .8rem; border-radius: var(--afia-radius); background: var(--afia-neutral-tint); }
.nr-fact--wide { grid-column: span 2; }
.nr-fact dt { font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .1em; text-transform: uppercase; color: var(--afia-text-muted); }
.nr-fact dd { margin: .1rem 0 0; font-weight: var(--afia-fw-medium); }
.nr-fact dd small { display: block; font-weight: var(--afia-fw-normal); color: var(--afia-text-muted); }
.nr-nav { position: sticky; top: 0; z-index: 20; display: flex; gap: .4rem; flex-wrap: wrap; padding: .5rem 0; margin-bottom: 1rem; background: var(--afia-bg); }
.nr-nav a { padding: .3rem .9rem; font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-medium); text-decoration: none; color: var(--afia-text-muted); border: 1px solid var(--afia-border); border-radius: var(--afia-radius-pill); background: var(--afia-white); }
.nr-nav a:hover { color: var(--afia-primary-dark); border-color: var(--afia-primary); }
.nr-section { margin-bottom: 2rem; scroll-margin-top: 4rem; }
.nr-h { margin: 0; display: flex; align-items: center; gap: .6rem; font-size: var(--afia-fs-base); font-weight: var(--afia-fw-bold); }
.nr-h::before { content: ""; width: 4px; height: 1.1rem; border-radius: var(--afia-radius-sm); background: var(--afia-primary); }
.nr-vitals { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: .6rem; margin-bottom: .75rem; }
.nr-vital { padding: .7rem .8rem; background: var(--afia-white); border: 1px solid var(--afia-border); border-radius: var(--afia-radius-lg); }
.nr-vital span { display: block; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .08em; text-transform: uppercase; color: var(--afia-text-muted); }
.nr-vital strong { font-size: var(--afia-fs-lg); font-variant-numeric: tabular-nums; }
.nr-vital.is-bad { background: var(--afia-danger-tint); border-color: var(--afia-danger); }
.nr-vital.is-bad strong { color: var(--afia-danger-dark); }
.nr-vitals__when { grid-column: 1 / -1; font-size: var(--afia-fs-sm); color: var(--afia-text-muted); }
.nr-table { border: 1px solid var(--afia-border); border-radius: var(--afia-radius-lg); overflow: hidden; }
.nr-table table { margin: 0; }
.nr-section .afia-care-group { border-radius: var(--afia-radius-lg); }
.nr-notes { list-style: none; margin: 0; padding: 0 0 0 1.1rem; border-left: 2px solid var(--afia-border); }
.nr-note { position: relative; margin-bottom: .7rem; padding: .7rem .9rem; background: var(--afia-white); border: 1px solid var(--afia-border); border-radius: var(--afia-radius-lg); }
.nr-note::before { content: ""; position: absolute; left: -1.45rem; top: 1rem; width: .75rem; height: .75rem; border-radius: 50%; background: var(--afia-primary); border: 2px solid var(--afia-bg); }
@media (max-width: 575.98px) { .nr-hero { grid-template-columns: 1fr; } .nr-fact--wide { grid-column: auto; } }

/* ---- Casiers de la morgue ---- */
.mg-top { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 1rem; margin-bottom: 1rem; }
.mg-top__eyebrow { font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .18em; text-transform: uppercase; color: var(--afia-primary-dark); }
.mg-legend { display: flex; gap: .6rem; list-style: none; margin: 0; padding: 0; }
.mg-legend__item { display: flex; align-items: baseline; gap: .4rem; padding: .35rem .8rem; border-radius: var(--afia-radius-pill); background: var(--afia-white); border: 1px solid var(--afia-border); font-size: var(--afia-fs-sm); }
.mg-legend__item strong { font-size: var(--afia-fs-lg); }
.mg-legend__item::before { content: ""; width: .6rem; height: .6rem; border-radius: 50%; align-self: center; }
.mg-legend__item--occ::before { background: #F59E0B; box-shadow: 0 0 6px #F59E0B; }
.mg-legend__item--free::before { background: #22C55E; box-shadow: 0 0 6px #22C55E; }
.mg-legend__item--off::before { background: #94A3B8; }
.mg-billing { padding: 1rem 1.2rem; margin-bottom: 1rem; background: var(--afia-white); border: 1px solid var(--afia-border); border-radius: var(--afia-radius-lg); }
.mg-billing__title { font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-bold); letter-spacing: .12em; text-transform: uppercase; color: var(--afia-text-muted); margin-bottom: .6rem; }
.mg-billing__grid { display: flex; flex-wrap: wrap; gap: 1.5rem 3rem; align-items: flex-end; }
.mg-billing__price { font-size: var(--afia-fs-lg); }
.mg-add { display: flex; flex-wrap: wrap; gap: .6rem; align-items: flex-end; margin-bottom: 1rem; }
.mg-add__label { min-width: 14rem; }
.mg-cabinet { padding: 1rem 1.1rem 1.3rem; border-radius: var(--afia-radius-lg); background: linear-gradient(160deg, #CBD5DC, #9AA7B2 55%, #B7C2CA); border: 1px solid #7C8B97; box-shadow: inset 0 0 0 4px rgba(255, 255, 255, .25), 0 12px 30px -16px rgba(15, 23, 42, .5); }
html[data-theme="dark"] .mg-cabinet { background: linear-gradient(160deg, #3C4752, #28313A 55%, #36414B); border-color: #1B232B; box-shadow: inset 0 0 0 4px rgba(255, 255, 255, .06), 0 12px 30px -16px #000; }
.mg-cabinet__plate { display: flex; justify-content: space-between; align-items: center; margin: 0 .2rem .9rem; padding: .35rem .9rem; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .24em; text-transform: uppercase; color: #334155; background: rgba(255, 255, 255, .45); border-radius: var(--afia-radius); border: 1px solid rgba(51, 65, 85, .25); }
html[data-theme="dark"] .mg-cabinet__plate { color: #CBD5E1; background: rgba(0, 0, 0, .3); border-color: rgba(255, 255, 255, .1); }
html[data-theme="dark"] .mg-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 12px; align-items: start; }
.mg-locker { min-width: 0; }
.mg-door { position: relative; display: flex; flex-direction: column; gap: .15rem; min-height: 8.4rem; padding: .6rem .8rem .7rem; border-radius: var(--afia-radius); color: #1E293B; background: linear-gradient(170deg, #F1F5F8 0%, #D7DFE5 45%, #C3CDD5 100%); border: 1px solid #8795A1; box-shadow: inset 0 1px 0 #fff, inset 0 -3px 6px rgba(0, 0, 0, .12), 0 3px 0 #7D8B97, 0 5px 8px rgba(15, 23, 42, .28); transition: transform .15s; }
.mg-locker:hover .mg-door { transform: translateY(-2px); }
.mg-door::before { content: ""; position: absolute; inset: 5px; border: 1px solid rgba(255, 255, 255, .55); border-radius: var(--afia-radius-sm); pointer-events: none; }
.mg-door__top { display: flex; justify-content: space-between; align-items: center; }
.mg-door__code { padding: .05rem .5rem; font-family: ui-monospace, Consolas, monospace; font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-sm); letter-spacing: .06em; color: #F8FAFC; background: #334155; border-radius: var(--afia-radius-sm); box-shadow: inset 0 1px 2px rgba(0, 0, 0, .5); }
.mg-door__led { width: .7rem; height: .7rem; border-radius: 50%; border: 1px solid rgba(0, 0, 0, .35); }
.mg-door__name { font-size: var(--afia-fs-sm); color: #475569; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mg-door__handle { align-self: center; width: 58%; height: 10px; margin: .55rem 0 .5rem; border-radius: var(--afia-radius); background: linear-gradient(180deg, #F8FAFC, #94A3B8 55%, #64748B); box-shadow: 0 2px 3px rgba(0, 0, 0, .35), inset 0 1px 0 #fff; }
.mg-door__tag { margin-top: auto; min-height: 2.3rem; padding: .3rem .5rem; text-align: center; font-size: var(--afia-fs-sm); line-height: 1.2; background: #FFFDF6; color: #1E293B; border: 1px solid #C9BFA4; border-radius: var(--afia-radius-sm); box-shadow: inset 0 1px 2px rgba(0, 0, 0, .12); display: flex; flex-direction: column; justify-content: center; }
.mg-door__tag small { color: #6B6350; font-family: ui-monospace, Consolas, monospace; font-size: var(--afia-fs-xs); }
.mg-door__who { font-weight: var(--afia-fw-bold); color: #7C2D12; text-decoration: none; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.mg-door__who:hover { text-decoration: underline; }
.mg-door__state { font-weight: var(--afia-fw-bold); letter-spacing: .08em; text-transform: uppercase; font-size: var(--afia-fs-xs); color: #166534; }
.mg-locker--free .mg-door__led { background: #22C55E; box-shadow: 0 0 8px 1px #22C55E; }
.mg-locker--occ .mg-door__led { background: #F59E0B; box-shadow: 0 0 8px 1px #F59E0B; animation: mg-led 2.4s ease-in-out infinite; }
.mg-locker--occ .mg-door { background: linear-gradient(170deg, #E6EBEF 0%, #C4CED6 45%, #AEBAC4 100%); }
.mg-locker--off .mg-door { background: repeating-linear-gradient(135deg, #AEB8C0 0 10px, #9DA8B1 10px 20px); opacity: .9; }
.mg-locker--off .mg-door__led { background: #64748B; }
.mg-locker--off .mg-door__state { color: #475569; }
.mg-locker--off .mg-door__handle { opacity: .55; }
@keyframes mg-led { 0%, 100% { opacity: 1; } 50% { opacity: .45; } }
.mg-manage { margin-top: .45rem; padding: 0 .1rem; }
.mg-manage > summary { cursor: pointer; width: fit-content; padding: .05rem .6rem; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .06em; text-transform: uppercase; color: #1E293B; background: rgba(255, 255, 255, .55); border-radius: var(--afia-radius-pill); list-style: none; }
.mg-manage > summary::-webkit-details-marker { display: none; }
html[data-theme="dark"] .mg-manage > summary { color: #E2E8F0; background: rgba(0, 0, 0, .35); }
.mg-manage[open] { padding: .6rem; border-radius: var(--afia-radius); background: var(--afia-white); border: 1px solid var(--afia-border); }
.mg-manage[open] > summary { margin-bottom: .5rem; }
@media (prefers-reduced-motion: reduce) { .mg-locker--occ .mg-door__led { animation: none; } .mg-door { transition: none; } }
.nr-vital strong { white-space: nowrap; font-size: var(--afia-fs-lg); }
.nr-table thead th { font-size: var(--afia-fs-xs); letter-spacing: .08em; text-transform: uppercase; color: var(--afia-text-muted); background: var(--afia-neutral-tint); }

/* ---- Sauvegardes (plateforme) ---- */
.bk-status { display: flex; align-items: center; gap: 1rem; padding: 1rem 1.2rem; margin-bottom: 1.25rem; background: var(--afia-white); border: 1px solid var(--afia-border); border-left: 5px solid var(--afia-success); border-radius: var(--afia-radius-lg); }
.bk-status--late { border-left-color: var(--afia-warning); background: var(--afia-warning-tint); }
.bk-status--none { border-left-color: var(--afia-danger); background: var(--afia-danger-tint); }
.bk-status__icon { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; width: 2.4rem; height: 2.4rem; border-radius: 50%; font-weight: var(--afia-fw-bold); color: #fff; background: var(--afia-success); }
.bk-status--late .bk-status__icon { background: var(--afia-warning); }
.bk-status--none .bk-status__icon { background: var(--afia-danger); }
.bk-status__text { flex: 1 1 auto; display: flex; flex-direction: column; }
.bk-status__text span { color: var(--afia-text-muted); }
.bk-status__total { text-align: right; font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-lg); line-height: 1.1; }
.bk-status__total small { display: block; font-weight: var(--afia-fw-normal); font-size: var(--afia-fs-sm); color: var(--afia-text-muted); }

/* Assistant de démarrage */
.ob-progress { background: var(--afia-white); border: 1px solid var(--afia-border); border-radius: var(--afia-radius); padding: 1rem 1.25rem; margin-bottom: 1rem; }
.ob-progress__bar { height: 8px; border-radius: var(--afia-radius-pill); background: rgba(15, 118, 110, .15); overflow: hidden; margin-top: .5rem; }
.ob-progress__bar span { display: block; height: 100%; background: #0F766E; border-radius: var(--afia-radius-pill); transition: width .4s; }
.ob-steps { list-style: none; padding: 0; margin: 0; display: grid; gap: .75rem; }
.ob-step { display: flex; align-items: center; gap: 1rem; background: var(--afia-white); border: 1px solid var(--afia-border); border-radius: var(--afia-radius); padding: .9rem 1.1rem; }
.ob-step__mark { flex: 0 0 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; font-weight: var(--afia-fw-bold); border: 2px solid #94A3B8; color: #64748B; }
.ob-step.is-done .ob-step__mark { background: #0F766E; border-color: #0F766E; color: #fff; }
.ob-step__body { flex: 1; min-width: 0; }
.ob-step__title { font-weight: var(--afia-fw-medium); }
.ob-step__detail { font-size: var(--afia-fs-sm); color: #64748B; }
html[data-theme="dark"] .ob-step__detail { color: #94A3B8; }
@media (max-width: 575px) { .ob-step { flex-wrap: wrap; } }

/* Double authentification */
.tf-qr svg { width: 190px; height: 190px; background: #fff; padding: 6px; border: 1px solid var(--afia-border); }
.tf-codes__list { list-style: none; padding: 0; margin: 0 0 .75rem; display: grid; grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr)); gap: .5rem; }
.tf-codes__list code { font-size: var(--afia-fs-base); letter-spacing: .08em; }
@media print { .afia-topbar, .pat-head, .alert, form, .btn, .card:not(.tf-codes) { display: none !important; } }

/* Avertissement d'inactivité */
.idle-overlay { position: fixed; inset: 0; z-index: 3000; display: grid; place-items: center; background: rgba(8, 63, 59, .55); backdrop-filter: blur(3px); padding: 1rem; }
.idle-overlay[hidden] { display: none; }
.idle-box { background: var(--afia-white); border: 1px solid var(--afia-border); border-top: 4px solid #0F766E; max-width: 26rem; width: 100%; padding: 1.5rem; box-shadow: var(--afia-shadow-xl); }
.idle-box h2 { font-size: var(--afia-fs-lg); margin: 0 0 .5rem; }
.idle-box p { margin: 0 0 1rem; }
.idle-count { font-size: var(--afia-fs-lg); color: #0F766E; }
.idle-actions { display: flex; gap: .5rem; flex-wrap: wrap; }

/* Rappels WhatsApp */
.rm-mode { display: flex; flex-wrap: wrap; gap: .25rem 1rem; align-items: baseline; padding: .8rem 1rem; border: 1px solid var(--afia-border); border-left: 4px solid #94A3B8; background: var(--afia-white); }
.rm-mode--api { border-left-color: #0F766E; }
.rm-mode span { color: #64748B; font-size: var(--afia-fs-base); }

/* Compteur d'inactivité de la barre du haut */

/* Budget annuel : grille de saisie */
.bg-grid th, .bg-grid td { white-space: nowrap; }
.bg-grid .bg-m { min-width: 6.2rem; }
.bg-grid .bg-total { min-width: 7.5rem; }
.bg-grid .bg-sticky { position: sticky; left: 0; background: var(--afia-white, #fff); z-index: 1; min-width: 11rem; }

/* ---- Soins infirmiers : courbes, score de gravité, relèves ---- */
.nr-charts { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: .75rem; margin-bottom: 1rem; }
.nr-chart { margin: 0; background: #fff; border: 1px solid var(--bs-border-color, #dee2e6); border-radius: var(--afia-radius); padding: .5rem .75rem; }
.nr-chart__title { font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-medium); margin-bottom: .25rem; }
.nr-chart__key { font-weight: var(--afia-fw-normal); font-size: var(--afia-fs-xs); margin-left: .5rem; }
.nr-chart__key::before { content: ''; display: inline-block; width: .7rem; height: .2rem; margin-right: .25rem; vertical-align: middle; background: currentColor; }
.nr-chart__svg { width: 100%; height: auto; display: block; }
.nr-chart__band { fill: rgba(25, 135, 84, .12); }
.nr-chart__grid { stroke: rgba(0, 0, 0, .08); stroke-width: 1; }
.nr-chart__axis { font-size: var(--afia-fs-xs); fill: #6c757d; }
.nr-chart__line { fill: none; stroke: currentColor; stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.nr-chart__dot { fill: currentColor; stroke: #fff; stroke-width: 2; }
.nr-chart__dot.is-out { fill: #dc3545; }
.nr-s1 { color: var(--bs-primary); }
.nr-s2 { color: #b45309; }
.nr-news { display: inline-block; min-width: 1.9rem; text-align: center; padding: .1rem .45rem; border-radius: var(--afia-radius-lg); font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-sm); }
.nr-news--low { background: #d1e7dd; color: #0a3622; }
.nr-news--medium { background: #fff3cd; color: #664d03; }
.nr-news--high { background: #f8d7da; color: #58151c; }
.nr-flags { display: flex; flex-wrap: wrap; gap: .25rem; margin-top: .25rem; }
.nr-pre { white-space: pre-wrap; font-size: var(--afia-fs-sm); background: #f8f9fa; border-radius: var(--afia-radius); padding: .5rem .75rem; margin: 0; }
.nr-load { height: .6rem; border-radius: var(--afia-radius-sm); background: #e9ecef; overflow: hidden; }
.nr-load > span { display: block; height: 100%; background: var(--bs-primary); }
.nr-load.is-high > span { background: #dc3545; }

/* Partogramme (maternité) */
.pg-chart { margin: 0 0 1rem; }
.pg-chart__title { font-weight: var(--afia-fw-medium); font-size: var(--afia-fs-base); margin-bottom: .25rem; }
.pg-chart__svg { width: 100%; height: auto; max-height: 260px; }
.pg-grid { stroke: var(--bs-border-color, #dee2e6); stroke-width: 1; }
.pg-axis { fill: var(--bs-secondary-color, #6c757d); font-size: var(--afia-fs-xs); }
.pg-line { fill: none; stroke-width: 2.5; stroke-linejoin: round; stroke-linecap: round; }
.pg-line--obs { stroke: var(--bs-primary); }
.pg-line--alert { stroke: #d97706; stroke-dasharray: 6 4; stroke-width: 2; }
.pg-line--action { stroke: #dc2626; stroke-dasharray: 6 4; stroke-width: 2; }
.pg-dot { fill: var(--bs-body-bg, #fff); stroke: var(--bs-primary); stroke-width: 2; }
.pg-key { font-weight: var(--afia-fw-medium); font-size: var(--afia-fs-sm); margin-left: .5rem; }
.pg-key--obs { color: var(--bs-primary); }
.pg-key--alert { color: #d97706; }
.pg-key--action { color: #dc2626; }

/* Bandeau de perte de réseau (voir assets/js/pwa.js) : visible, sans masquer le travail. */
.afia-offline-bar { position: sticky; top: 0; z-index: 1060; padding: .55rem 1rem; text-align: center;
  font-size: var(--afia-fs-base); font-weight: var(--afia-fw-medium); color: #7C2D12; background: #FEF3C7; border-bottom: 1px solid #F59E0B; }
@media (prefers-color-scheme: dark) { .afia-offline-bar { color: #FEF3C7; background: #78350F; border-color: #B45309; } }

/* =====================================================================
   ASSISTANT D'AIDE — panneau ouvert par le bouton « ? » de la barre du haut.
   Présenté comme un assistant : une réponse rédigée en tête, ses sources en
   dessous. Le texte vient de la documentation d'afia (voir assets/js/help.js) ;
   la mention sous la réponse le dit, pour ne rien laisser croire d'autre.
   Les couleurs utilisent les variables du thème : --afia-white est la surface
   des cartes, sombre en mode sombre. N'écrivez jamais #fff en dur ici.
   ===================================================================== */
/* Barre de recherche des LISTES (Shared/views/_search.php).
   Classe distincte de « .afia-search », qui est la recherche de patients de la barre
   du haut et vaut 18 rem : réutiliser ce nom écrasait la largeur et donnait un champ
   bien trop court. Ici le champ prend la place disponible, jusqu'à un plafond lisible. */
.afia-list-search { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.afia-list-search input[type="search"] { flex: 1 1 22rem; min-width: 0; max-width: 46rem; }
.afia-list-search .btn { flex: 0 0 auto; }
@media (max-width: 575.98px) {
  .afia-list-search input[type="search"] { flex-basis: 100%; max-width: none; }
}

/* Le bouton de l'assistant porte la même marque que l'en-tête du panneau :
   on doit reconnaître l'assistant avant même de l'ouvrir. */
.afia-icon-btn--assistant { color: var(--afia-primary); border-color: var(--afia-primary); }
.afia-icon-btn--assistant:hover { background: var(--afia-primary-tint); }
.afia-icon-btn--assistant[aria-expanded="true"] { color: #fff; background: var(--afia-primary); }
html[data-theme="dark"] .afia-icon-btn--assistant { color: var(--afia-primary-dark); border-color: var(--afia-primary-dark); }
html[data-theme="dark"] .afia-icon-btn--assistant[aria-expanded="true"] { color: #0B1220; background: var(--afia-primary-dark); }

.afia-help { position: fixed; top: 4.25rem; right: 1rem; z-index: 1070; width: min(27rem, calc(100vw - 2rem));
  max-height: min(36rem, calc(100vh - 6rem)); overflow-y: auto; overscroll-behavior: contain;
  background: var(--afia-white); color: var(--afia-text);
  border: 1px solid var(--afia-border); border-radius: var(--afia-radius-lg);
  box-shadow: var(--afia-shadow-xl); }

.afia-help__head { position: sticky; top: 0; z-index: 2; display: flex; align-items: center; gap: .6rem;
  padding: .85rem 1rem; background: var(--afia-white); border-bottom: 1px solid var(--afia-border);
  border-radius: var(--afia-radius-lg) var(--afia-radius-lg) 0 0; }
.afia-help__mark { display: grid; place-items: center; width: 1.9rem; height: 1.9rem; flex: 0 0 auto;
  color: #fff; background: linear-gradient(135deg, var(--afia-primary), #2DD4BF); border-radius: var(--afia-radius); }
.afia-help__nom { font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-base); line-height: 1.1; }
.afia-help__sous { font-size: var(--afia-fs-xs); color: var(--afia-text-muted); }
.afia-help__close { margin-left: auto; border: 0; background: none; font-size: var(--afia-fs-xl); line-height: 1;
  cursor: pointer; color: var(--afia-text-muted); }
.afia-help__close:hover { color: var(--afia-text); }

.afia-help__corps { padding: .9rem 1rem 1rem; }
.afia-help__zone { position: relative; }
.afia-help__champ { width: 100%; padding: .6rem 2.2rem .6rem .8rem; font: inherit;
  color: var(--afia-text); background: var(--afia-bg); border: 1px solid var(--afia-border); border-radius: var(--afia-radius); }
.afia-help__champ:focus { outline: 2px solid var(--afia-primary); outline-offset: 1px; border-color: var(--afia-primary); }
.afia-help__champ::placeholder { color: var(--afia-text-muted); }
.afia-help__envoi { position: absolute; top: 50%; right: .4rem; transform: translateY(-50%);
  display: grid; place-items: center; width: 1.7rem; height: 1.7rem; padding: 0; cursor: pointer;
  color: var(--afia-primary); background: none; border: 0; border-radius: var(--afia-radius); }
.afia-help__envoi:hover { background: var(--afia-primary-tint); }
.afia-help__note { margin: .5rem 0 .9rem; font-size: var(--afia-fs-xs); color: var(--afia-text-muted); }

/* La réponse rédigée, mise en avant comme dans un assistant. */
.afia-help__reponse { padding: .85rem .95rem; margin-bottom: .9rem; background: var(--afia-primary-tint);
  border: 1px solid var(--afia-border); border-left: 3px solid var(--afia-primary); border-radius: var(--afia-radius-sm) var(--afia-radius-lg) var(--afia-radius-lg) var(--afia-radius-sm); }
.afia-help__reponse h4 { margin: 0 0 .35rem; font-size: var(--afia-fs-base); font-weight: var(--afia-fw-bold); }
.afia-help__reponse p { margin: 0 0 .5rem; font-size: var(--afia-fs-sm); line-height: 1.55; }
.afia-help__reponse p:last-of-type { margin-bottom: 0; }
.afia-help__aller { display: inline-block; margin-top: .6rem; font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-medium); }
.afia-help__origine { display: flex; align-items: center; gap: .35rem; margin-top: .7rem;
  font-size: var(--afia-fs-xs); color: var(--afia-text-muted); }

/* État « rédaction en cours » : des lignes qui se remplissent, le temps de la recherche. */
.afia-help__attente { padding: .85rem .95rem; margin-bottom: .9rem; background: var(--afia-primary-tint);
  border: 1px solid var(--afia-border); border-left: 3px solid var(--afia-primary); border-radius: var(--afia-radius-sm) var(--afia-radius-lg) var(--afia-radius-lg) var(--afia-radius-sm); }
.afia-help__ligne { height: .62rem; margin-bottom: .5rem; border-radius: var(--afia-radius-pill);
  background: linear-gradient(90deg, var(--afia-border) 25%, var(--afia-neutral-tint, #e9eef5) 50%, var(--afia-border) 75%);
  background-size: 200% 100%; animation: afia-help-vague 1.1s linear infinite; }
.afia-help__ligne:nth-child(2) { width: 92%; animation-delay: .1s; }
.afia-help__ligne:nth-child(3) { width: 72%; animation-delay: .2s; margin-bottom: 0; }
@keyframes afia-help-vague { from { background-position: 200% 0; } to { background-position: -200% 0; } }
@media (prefers-reduced-motion: reduce) { .afia-help__ligne { animation: none; } }

.afia-help__section { margin: 0 0 .5rem; font-size: var(--afia-fs-xs); font-weight: var(--afia-fw-bold); letter-spacing: .09em;
  text-transform: uppercase; color: var(--afia-text-muted); }
.afia-help__item { display: block; padding: .55rem .7rem; margin-bottom: .35rem; text-decoration: none;
  color: inherit; background: var(--afia-bg); border: 1px solid var(--afia-border); border-radius: var(--afia-radius); }
.afia-help__item:hover { border-color: var(--afia-primary); background: var(--afia-primary-tint); }
.afia-help__titre { display: block; font-weight: var(--afia-fw-medium); font-size: var(--afia-fs-sm); }
.afia-help__resume { display: block; font-size: var(--afia-fs-sm); color: var(--afia-text-muted); }
.afia-help__module { display: inline-block; margin-top: .25rem; font-size: var(--afia-fs-xs); letter-spacing: .05em;
  text-transform: uppercase; color: var(--afia-text-muted); }
.afia-help__vide { margin: .4rem 0; font-size: var(--afia-fs-sm); color: var(--afia-text-muted); }
.afia-help__toutes { display: inline-block; margin-top: .7rem; font-size: var(--afia-fs-sm); font-weight: var(--afia-fw-medium); }
.afia-help-link:hover { background: var(--afia-primary-tint); }

/* ==========================================================================
   Paramètres → Couleur des documents (Settings/views/branding.php)
   L'aperçu imite un vrai imprimé : c'est le seul moyen honnête de choisir une
   couleur. Il reprend donc la géométrie de print.css — filet d'en-tête, titre
   de section, en-tête de tableau teinté — et non une vignette décorative.
   ========================================================================== */
.brand-swatches { display: flex; flex-wrap: wrap; gap: .4rem; }
.brand-swatch { width: 2rem; height: 2rem; border: 1px solid var(--afia-border); border-radius: var(--afia-radius-sm); cursor: pointer; padding: 0; }
.brand-swatch:hover:not(:disabled) { box-shadow: var(--afia-shadow-md); transform: translateY(-1px); }
.brand-swatch:disabled { opacity: .45; cursor: not-allowed; }
.brand-chip { display: inline-block; width: .85rem; height: .85rem; border: 1px solid var(--afia-border); border-radius: var(--afia-radius-sm); vertical-align: -2px; }
.brand-derived div { display: flex; justify-content: space-between; gap: 1rem; padding: .25rem 0; border-bottom: 1px dashed var(--afia-border); }
.brand-derived div:last-child { border-bottom: 0; }
.brand-derived dt { font-weight: var(--afia-fw-normal); color: var(--afia-text-muted); margin: 0; }
.brand-derived dd { margin: 0; }

.brand-preview { --bp-brand: #0F766E; --bp-tint: #E6F2F1;
  background: #fff; color: #1E293B; border: 1px solid var(--afia-border); border-radius: var(--afia-radius);
  padding: 1.1rem 1.2rem; font-size: var(--afia-fs-sm); line-height: 1.45; }
.brand-preview.is-mono { filter: grayscale(1); }
.bp-head { display: flex; align-items: center; gap: .8rem; border-bottom: 2px solid var(--bp-brand); padding-bottom: .55rem; }
.bp-logo { width: 2.6rem; height: 2.6rem; display: flex; align-items: center; justify-content: center; border-radius: 50%;
  background: var(--bp-tint); color: var(--bp-brand); font-weight: var(--afia-fw-bold); font-size: var(--afia-fs-xs); flex: 0 0 auto; }
.bp-name { font-weight: var(--afia-fw-bold); color: var(--bp-brand); }
.bp-meta { color: #64748B; font-size: var(--afia-fs-xs); }
.bp-title { display: flex; justify-content: space-between; align-items: flex-end; margin: .8rem 0 .5rem; text-transform: uppercase; letter-spacing: .04em; font-weight: var(--afia-fw-medium); }
.bp-ref { color: #64748B; text-transform: none; letter-spacing: 0; font-size: var(--afia-fs-xs); }
.bp-section { text-transform: uppercase; letter-spacing: .05em; font-size: var(--afia-fs-xs); color: var(--bp-brand);
  border-bottom: 1px solid #CBD5E1; padding-bottom: .15rem; margin-bottom: .35rem; }
.bp-table { width: 100%; border-collapse: collapse; }
.bp-table th, .bp-table td { border: 1px solid #CBD5E1; padding: .25rem .45rem; text-align: left; }
.bp-table th { background: var(--bp-tint); font-size: var(--afia-fs-xs); }
.bp-total { margin-top: .5rem; padding-top: .35rem; border-top: 2px solid var(--bp-brand); display: flex; justify-content: space-between; }
.bp-foot { margin-top: .7rem; color: #64748B; font-size: var(--afia-fs-xs); }
/* Volontairement blanc même en mode sombre : cet aperçu représente une feuille
   de papier, pas une surface de l'application. */
html[data-theme="dark"] .brand-preview { background: #fff; color: #1E293B; }

/* ---- Acceptation des conditions et règles (première connexion) ---- */
.afia-auth-card--wide { max-width: 760px; }
.afia-terms__progress { height: 4px; background: var(--afia-primary-tint); border-radius: 4px; overflow: hidden; margin-bottom: .5rem; }
.afia-terms__progress span { display: block; height: 100%; width: 0; background: var(--afia-primary); transition: width .12s; }
.afia-terms__box { max-height: 46vh; overflow-y: auto; padding: 1rem 1.25rem; border: 1px solid var(--afia-border); border-radius: var(--afia-radius-lg); background: var(--afia-white); font-size: .93rem; line-height: 1.6; }
.afia-terms__box:focus { outline: 2px solid var(--afia-primary); outline-offset: 2px; }
.afia-terms__box h2, .lg__rules h2 { font-size: 1.1rem; font-weight: 700; margin: 1.2rem 0 .6rem; color: var(--afia-primary); }
.afia-terms__box .num { display: inline-block; min-width: 1.8rem; color: var(--afia-primary); }
.afia-terms__box p, .afia-terms__box li { margin-bottom: .55rem; }
.afia-terms__box ul, .afia-terms__box ol { padding-left: 1.25rem; }
.afia-terms__box .lg__table { width: 100%; margin: .8rem 0; border-collapse: collapse; font-size: .88rem; }
.afia-terms__box .lg__table th, .afia-terms__box .lg__table td { padding: .5rem .6rem; text-align: left; vertical-align: top; border-bottom: 1px solid var(--afia-border); }
.afia-terms__box .lg__table th { background: var(--afia-primary-tint); }
.afia-terms__box .lg__note { margin: 1rem 0; padding: .8rem 1rem; background: var(--afia-primary-tint); border-left: 4px solid var(--afia-primary); border-radius: 0 8px 8px 0; }
.afia-terms__box .lg__rules { padding: .9rem 1.1rem; margin-bottom: 1rem; background: var(--afia-primary-tint); border-radius: 10px; }
.afia-terms__box .lg__rules h2 { margin-top: 0; }
.afia-terms__title { margin-top: 0 !important; }
.afia-terms__maj { color: var(--afia-text-muted); font-size: .85rem; }
.afia-terms__end { text-align: center; color: var(--afia-text-muted); font-size: .85rem; margin: 1rem 0 0; }
.afia-terms__hint { margin: .4rem 0 0; font-size: .82rem; color: var(--afia-warning-dark); text-align: center; }
html[data-theme="dark"] .afia-terms__box .lg__rules, html[data-theme="dark"] .afia-terms__box .lg__note { background: rgba(20, 184, 166, .12); }
html[data-theme="dark"] .afia-terms__box .lg__table th { background: rgba(20, 184, 166, .15); }
html[data-theme="dark"] .afia-terms__box h2, html[data-theme="dark"] .afia-terms__box .num { color: #5EEAD4; }
.lg__rules ol { padding-left: 1.25rem; margin: 0; }
.lg__rules li { margin-bottom: .45rem; }
