/* ═══════════════════════════════════════════════════════════════════════════
   SMART-MAIL-1.0 §9 §10 §11 §13 §15 §17 §31 §32 — La feuille de l'application
   de messagerie.

   ══ POURQUOI UNE FEUILLE À PART, ET NON `admin.css` ══
   Le ticket demande « la sensation d'un logiciel mail » et refuse « les grosses
   cards administratives ». `admin.css` est construit autour de cartes, de
   marges généreuses et d'un défilement de page — trois choix qui sont bons
   pour un back-office et faux pour une boîte e-mail, où l'écran est un cadre
   fixe et où la densité est la fonctionnalité principale.

   Neutraliser `admin.css` classe par classe aurait produit une feuille de
   contre-règles plus longue que celle-ci, et chaque évolution du back-office
   aurait cassé la messagerie.

   ══ LA RÈGLE DE HAUTEUR ══
   Le document ne défile PAS. `body` fait exactement la hauteur de la fenêtre ;
   les colonnes défilent indépendamment. C'est ce qui distingue une messagerie
   d'une page web : la barre d'outils et les dossiers restent où ils sont
   pendant qu'on parcourt trois cents messages.

   ══ AUCUN NPM (§65) ══
   Pas de préprocesseur, pas d'étape de compilation : du CSS que le serveur
   sert tel quel. Les variables sont des propriétés personnalisées natives.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── §9 — Les jetons ─────────────────────────────────────────────────────── */
:root {
  /* L'identité CamerounServices, inchangée : la messagerie est le MÊME
     produit, sur un autre sous-domaine. Un vert différent ferait douter
     l'utilisateur d'être encore chez lui. */
  --m-green:      #0b3d2e;
  --m-green-soft: #0f5240;
  --m-gold:       #e9b949;

  /* Les neutres penchent légèrement vers le vert : un gris parfaitement neutre
     à côté d'un vert profond paraît violet. */
  --m-ink:        #14201c;
  --m-ink-2:      #4a5a54;
  --m-ink-3:      #7c8a85;
  --m-line:       #e2e8e5;
  --m-line-2:     #eef2f0;
  --m-bg:         #f4f7f6;
  --m-panel:      #ffffff;
  --m-hover:      #f0f4f2;
  --m-active:     #e6efe9;

  --m-red:        #b42318;
  --m-amber:      #b54708;
  --m-blue:       #175cd3;

  --m-h-header:   56px;
  --m-w-side:     236px;
  --m-w-list:     380px;
  --m-radius:     10px;
  --m-shadow:     0 1px 2px rgba(20,32,28,.06), 0 8px 24px rgba(20,32,28,.08);

  --m-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
            "Helvetica Neue", Arial, sans-serif;
}

/* ── Base ────────────────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }

/* ══ `[hidden]` DOIT VRAIMENT CACHER ══
 * La règle `[hidden] { display: none }` vient de la feuille de l'AGENT
 * UTILISATEUR : n'importe quelle règle d'auteur qui fixe `display` la bat.
 * Trois éléments de cette feuille sont dans ce cas — le composeur, sa zone de
 * dépôt, son bloc Cc — et tous portent `hidden` par défaut.
 *
 * Le composeur, en particulier, s'affichait donc EN PERMANENCE par-dessus la
 * liste : exactement le « formulaire permanent » que le §9 refuse. Le défaut
 * était invisible à la lecture du gabarit, qui écrit bien `hidden`, et à celle
 * de la feuille, qui n'écrit rien de faux — il naissait de leur rencontre.
 *
 * Une règle générale vaut mieux qu'un correctif par élément : elle couvre aussi
 * ceux qu'on ajoutera. `!important` est ici l'outil juste — l'attribut `hidden`
 * exprime une intention qui doit primer sur toute mise en forme. */
.mail [hidden] { display: none !important; }

body.mail {
  margin: 0;
  height: 100vh;
  /* `dvh` suit la barre d'adresse mobile qui se rétracte ; sans lui, les
     derniers messages de la liste passent sous le bord de l'écran sur iOS. La
     déclaration `vh` au-dessus reste pour les navigateurs qui l'ignorent. */
  height: 100dvh;
  overflow: hidden;
  display: grid;
  grid-template-rows: var(--m-h-header) 1fr;
  font-family: var(--m-font);
  font-size: 14px;
  line-height: 1.45;
  color: var(--m-ink);
  background: var(--m-bg);
  -webkit-font-smoothing: antialiased;
}

body.mail a { color: inherit; text-decoration: none; }
body.mail a:focus-visible,
body.mail button:focus-visible,
body.mail input:focus-visible,
body.mail select:focus-visible,
body.mail textarea:focus-visible,
body.mail summary:focus-visible {
  outline: 2px solid var(--m-green);
  outline-offset: 1px;
  border-radius: 4px;
}

/* ══════════════════════════════════════════════════════════════════════════
   §10 — L'EN-TÊTE
   ═════════════════════════════════════════════════════════════════════════ */
.mail-header {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 0 14px;
  background: var(--m-panel);
  border-bottom: 1px solid var(--m-line);
  z-index: 40;
}

.mail-burger {
  display: none;              /* Réservé au compact : voir §31. */
  border: 0; background: none; cursor: pointer;
  color: var(--m-ink-2); font-size: 17px; padding: 8px;
}

.mail-brand { display: flex; align-items: center; gap: 9px; flex: 0 0 auto; }
.mail-brand__mark {
  width: 30px; height: 30px; border-radius: 8px;
  background: var(--m-green); color: #fff;
  display: grid; place-items: center;
  font-weight: 800; font-size: 12px; letter-spacing: .04em;
}
.mail-brand__text { font-size: 14.5px; color: var(--m-ink-2); white-space: nowrap; }
.mail-brand__text strong { color: var(--m-green); font-weight: 700; }

/* La recherche prend toute la largeur restante : c'est l'outil le plus utilisé
   d'une messagerie, et une barre étroite masque la fin des requêtes longues du
   §21 (`from:… has:attachment`). */
.mail-search {
  flex: 1 1 auto;
  /* ══ `min-width: auto` EST LE DÉFAUT D'UN ÉLÉMENT FLEXIBLE, ET IL BLOQUE ══
   * Sans cette ligne, la barre de recherche refuse de descendre sous la
   * largeur intrinsèque de son `<input>` — soit environ 180 pixels de
   * « taille 20 caractères » héritée du navigateur. Sur un écran de 390, le
   * total en-tête dépassait la fenêtre de cinquante pixels et la page se
   * décalait horizontalement.
   *
   * Le défaut ne se voyait pas au-dessus de 768 : c'est exactement le genre
   * que seule une mesure aux largeurs réelles attrape. */
  min-width: 0;
  max-width: 720px;
  display: flex; align-items: center; gap: 8px;
  background: var(--m-bg);
  border: 1px solid transparent;
  border-radius: 8px;
  padding: 0 10px;
  height: 38px;
  transition: background .12s, border-color .12s;
}
.mail-search:focus-within { background: #fff; border-color: var(--m-line); box-shadow: var(--m-shadow); }
.mail-search i { color: var(--m-ink-3); font-size: 13px; }
.mail-search input {
  flex: 1; border: 0; background: none; outline: none;
  font: inherit; color: var(--m-ink); min-width: 0;
}
.mail-search input::placeholder { color: var(--m-ink-3); }
.mail-search__clear { color: var(--m-ink-3); padding: 4px; }

.mail-header__actions { display: flex; align-items: center; gap: 4px; margin-left: auto; }
.mail-inline { display: inline; margin: 0; }

.mail-iconbtn {
  display: inline-grid; place-items: center;
  width: 36px; height: 36px; border-radius: 8px;
  border: 0; background: none; cursor: pointer;
  color: var(--m-ink-2); font-size: 15px;
  transition: background .12s, color .12s;
}
.mail-iconbtn:hover { background: var(--m-hover); color: var(--m-ink); }
.mail-iconbtn--danger:hover { background: #fdf1f0; color: var(--m-red); }

.mail-avatar {
  display: grid; place-items: center;
  width: 32px; height: 32px; border-radius: 50%;
  color: #fff; font-weight: 700; font-size: 12.5px;
  flex: 0 0 auto;
}

/* Le menu de compte : `<details>` natif — il s'ouvre, se ferme et se navigue
   au clavier sans une ligne de script. */
.mail-account { position: relative; }
.mail-account > summary { list-style: none; cursor: pointer; padding: 2px; }
.mail-account > summary::-webkit-details-marker { display: none; }
.mail-account__menu {
  position: absolute; right: 0; top: calc(100% + 8px);
  width: 268px; padding: 6px;
  background: #fff; border: 1px solid var(--m-line);
  border-radius: var(--m-radius); box-shadow: var(--m-shadow);
  z-index: 60;
}
.mail-account__id { padding: 10px 12px 12px; border-bottom: 1px solid var(--m-line-2); }
.mail-account__id strong { display: block; font-size: 14px; }
.mail-account__id span { display: block; color: var(--m-ink-3); font-size: 12.5px; word-break: break-all; }
.mail-account__menu a {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 12px; margin-top: 4px; border-radius: 7px;
  font-size: 13.5px; color: var(--m-ink);
}
.mail-account__menu a:hover { background: var(--m-hover); }
/* §7 — La note qui distingue les deux déconnexions. En gris et en petit :
   c'est une précision, pas une instruction. */
.mail-account__note {
  margin: 4px 0 2px; padding: 0 12px 6px;
  font-size: 11.5px; line-height: 1.4; color: var(--m-ink-3);
}

/* ══════════════════════════════════════════════════════════════════════════
   §11 — LA BARRE LATÉRALE
   ═════════════════════════════════════════════════════════════════════════ */
.mail-shell {
  display: grid;
  grid-template-columns: var(--m-w-side) 1fr;
  min-height: 0;              /* Sans quoi la grille refuse de laisser les
                                 enfants défiler et c'est la PAGE qui défile. */
}

.mail-side {
  display: flex; flex-direction: column;
  gap: 4px; padding: 12px 10px;
  background: var(--m-bg);
  border-right: 1px solid var(--m-line);
  overflow-y: auto;
  min-height: 0;
}

.mail-compose-cta {
  display: flex; align-items: center; justify-content: center; gap: 9px;
  height: 44px; margin-bottom: 10px;
  border: 0; border-radius: 22px; cursor: pointer;
  background: var(--m-green); color: #fff;
  font: 600 14px/1 var(--m-font);
  box-shadow: 0 1px 3px rgba(11,61,46,.3);
  transition: background .12s, box-shadow .12s;
}
.mail-compose-cta:hover { background: var(--m-green-soft); box-shadow: 0 3px 10px rgba(11,61,46,.28); }

.mail-folders { list-style: none; margin: 0; padding: 0; }
.mail-folders a {
  display: flex; align-items: center; gap: 12px;
  height: 34px; padding: 0 12px;
  border-radius: 0 17px 17px 0;
  color: var(--m-ink-2); font-size: 13.5px;
}
.mail-folders a:hover { background: var(--m-hover); }
.mail-folders a.is-active { background: var(--m-active); color: var(--m-green); font-weight: 700; }
.mail-folders i { width: 16px; text-align: center; font-size: 13px; }
.mail-folders span { flex: 1; }

/* Le compteur : chiffres tabulaires pour qu'il ne « saute » pas quand il passe
   de 9 à 10 pendant une relève. */
.mail-count {
  font-style: normal; font-size: 11.5px; font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--m-green);
}

.mail-side__block { margin-top: 14px; }
.mail-side__block--bottom { margin-top: auto; padding-top: 14px; border-top: 1px solid var(--m-line); }
.mail-side__title {
  margin: 0 0 6px; padding: 0 12px;
  font-size: 10.5px; font-weight: 700; letter-spacing: .07em;
  text-transform: uppercase; color: var(--m-ink-3);
}
.mail-boxes { list-style: none; margin: 0; padding: 0; }
.mail-boxes a {
  display: flex; align-items: center; gap: 10px;
  height: 31px; padding: 0 12px; border-radius: 0 16px 16px 0;
  font-size: 13px; color: var(--m-ink-2);
}
.mail-boxes a:hover { background: var(--m-hover); }
.mail-boxes a.is-active { background: var(--m-active); color: var(--m-green); font-weight: 600; }
.mail-boxes span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mail-side__link {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 12px; border-radius: 7px;
  font-size: 13px; color: var(--m-ink-2);
}
.mail-side__link:hover { background: var(--m-hover); }

/* ══════════════════════════════════════════════════════════════════════════
   LES PANNEAUX
   ═════════════════════════════════════════════════════════════════════════ */
.mail-main { min-width: 0; min-height: 0; display: flex; flex-direction: column; }

/* §9 — Trois panneaux. Le troisième n'existe QUE sur l'écran de lecture : une
   colonne de lecture vide à droite d'une liste est de l'espace perdu, et la
   liste est ce qu'on regarde le plus longtemps. */
.mail-panes {
  display: grid;
  grid-template-columns: var(--m-w-list) 1fr;
  min-height: 0; flex: 1;
}
.mail-pane { min-width: 0; min-height: 0; overflow-y: auto; background: var(--m-panel); }
.mail-pane--list { border-right: 1px solid var(--m-line); background: var(--m-panel); }

.mail-flashes { padding: 10px 16px 0; }
.mail-flash {
  display: flex; align-items: center; gap: 9px;
  margin: 0 0 8px; padding: 10px 13px; border-radius: 8px;
  font-size: 13px;
}
.mail-flash--ok   { background: #ecfdf3; color: #05603a; }
.mail-flash--err  { background: #fef3f2; color: var(--m-red); }
.mail-flash--info { background: #eff8ff; color: var(--m-blue); }

/* ── La barre d'outils au-dessus de la liste ─────────────────────────────── */
.mail-toolbar {
  display: flex; align-items: center; gap: 10px;
  height: 46px; padding: 0 14px;
  border-bottom: 1px solid var(--m-line);
  background: var(--m-panel);
  position: sticky; top: 0; z-index: 10;
}
.mail-toolbar h1 { margin: 0; font-size: 15px; font-weight: 700; }
.mail-toolbar__meta { color: var(--m-ink-3); font-size: 12.5px; font-variant-numeric: tabular-nums; }
.mail-toolbar__spacer { flex: 1; }

/* ══════════════════════════════════════════════════════════════════════════
   §13 §14 §16 — LA LISTE

   Chaque ligne est un lien de 64 pixels : assez pour l'expéditeur, l'objet et
   un extrait ; assez peu pour qu'un écran de portable en montre une dizaine.
   ═════════════════════════════════════════════════════════════════════════ */
.mail-list { list-style: none; margin: 0; padding: 0; }

.mail-row {
  display: grid;
  grid-template-columns: 34px 1fr auto;
  align-items: start;
  gap: 12px;
  padding: 10px 14px;
  border-bottom: 1px solid var(--m-line-2);
  cursor: pointer;
  transition: background .1s;
}
.mail-row:hover { background: var(--m-hover); }
.mail-row.is-open { background: var(--m-active); }

/* §16 — Le non-lu se voit à la GRAISSE et à un liseré, pas à une couleur de
   fond : un fond coloré sur trente lignes fait un damier illisible. */
.mail-row.is-unread { box-shadow: inset 3px 0 0 var(--m-green); }
.mail-row.is-unread .mail-row__from,
.mail-row.is-unread .mail-row__subject { font-weight: 700; color: var(--m-ink); }
.mail-row.is-unread .mail-row__date { color: var(--m-green); font-weight: 600; }

.mail-row__avatar {
  width: 34px; height: 34px; border-radius: 50%;
  display: grid; place-items: center;
  color: #fff; font-weight: 700; font-size: 12px;
  flex: 0 0 auto; user-select: none;
}
.mail-row__main { min-width: 0; }
.mail-row__line { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.mail-row__from {
  font-size: 13.5px; font-weight: 500; color: var(--m-ink-2);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* §14 — Le compteur de fil : « Dupont · 4 ». Une pastille discrète plutôt que
   quatre lignes séparées pour la même conversation. */
.mail-row__count {
  flex: 0 0 auto;
  font-size: 11px; font-weight: 700; color: var(--m-ink-3);
  font-variant-numeric: tabular-nums;
}
.mail-row__subject {
  font-size: 13.5px; color: var(--m-ink);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.mail-row__snippet {
  font-size: 12.5px; color: var(--m-ink-3);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.mail-row__side {
  display: flex; flex-direction: column; align-items: flex-end; gap: 5px;
  flex: 0 0 auto;
}
.mail-row__date {
  font-size: 11.5px; color: var(--m-ink-3);
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.mail-row__icons { display: flex; align-items: center; gap: 7px; color: var(--m-ink-3); font-size: 12px; }
.mail-row__icons .is-starred { color: var(--m-gold); }

/* §22 — Le rattachement client, vu depuis la liste. Une pastille verte pâle :
   présente quand elle existe, invisible sinon — jamais un « — » qui occupe une
   colonne pour dire qu'il n'y a rien. */
.mail-chip {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 1px 8px; border-radius: 11px;
  font-size: 11px; font-weight: 600; white-space: nowrap;
}
.mail-chip--client  { background: var(--m-active); color: var(--m-green); }
.mail-chip--dossier { background: #fff7e6; color: #92400e; }
.mail-chip--muted   { background: var(--m-line-2); color: var(--m-ink-3); }

.mail-empty { padding: 60px 24px; text-align: center; color: var(--m-ink-3); }
.mail-empty i { font-size: 30px; opacity: .35; display: block; margin-bottom: 14px; }
.mail-empty h2 { margin: 0 0 6px; font-size: 15.5px; color: var(--m-ink-2); font-weight: 600; }
.mail-empty p { margin: 0 auto; max-width: 44ch; font-size: 13px; line-height: 1.55; }

.mail-pager {
  display: flex; align-items: center; justify-content: center; gap: 14px;
  padding: 16px; color: var(--m-ink-3); font-size: 12.5px;
}
.mail-pager a { color: var(--m-green); font-weight: 600; }

/* ══════════════════════════════════════════════════════════════════════════
   §15 — LE PANNEAU DE LECTURE
   ═════════════════════════════════════════════════════════════════════════ */
.mail-read { padding: 0 0 60px; }

.mail-read__head {
  position: sticky; top: 0; z-index: 10;
  background: var(--m-panel);
  border-bottom: 1px solid var(--m-line);
  padding: 12px 20px;
}
.mail-read__back { display: none; }     /* §32 : mobile seulement. */
.mail-read__subject { margin: 0 0 8px; font-size: 18px; font-weight: 700; line-height: 1.3; }
.mail-read__actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

.mail-btn {
  display: inline-flex; align-items: center; gap: 7px;
  height: 34px; padding: 0 14px;
  border: 1px solid var(--m-line); border-radius: 17px;
  background: #fff; cursor: pointer;
  font: 600 13px/1 var(--m-font); color: var(--m-ink-2);
  transition: background .12s, border-color .12s, color .12s;
}
.mail-btn:hover { background: var(--m-hover); color: var(--m-ink); }
.mail-btn--primary { background: var(--m-green); border-color: var(--m-green); color: #fff; }
.mail-btn--primary:hover { background: var(--m-green-soft); color: #fff; }
.mail-btn--ghost { border-color: transparent; background: none; }

/* Un message du fil. */
.mail-msg { border-bottom: 1px solid var(--m-line-2); }
.mail-msg__head {
  display: flex; align-items: flex-start; gap: 12px;
  padding: 16px 20px 10px; cursor: pointer;
}
.mail-msg__who { min-width: 0; flex: 1; }
.mail-msg__name { font-size: 14px; font-weight: 700; }
.mail-msg__addr { font-size: 12.5px; color: var(--m-ink-3); word-break: break-all; }
.mail-msg__when { font-size: 12px; color: var(--m-ink-3); white-space: nowrap; }
.mail-msg__body { padding: 0 20px 20px 66px; }

/* §41 — Le corps HTML d'un message vit dans une `iframe` bac à sable. La
   hauteur est fixée par le script après chargement : une `iframe` a une
   hauteur par défaut de 150px, ce qui couperait tous les messages. */
.mail-html {
  width: 100%; border: 0; display: block;
  background: #fff; min-height: 60px;
}
.mail-text {
  margin: 0; white-space: pre-wrap; word-wrap: break-word;
  font: 13.5px/1.6 var(--m-font); color: var(--m-ink);
}

/* §42 — Le bandeau des images bloquées. Ambre, pas rouge : ce n'est pas une
   erreur, c'est une protection qui a fonctionné. */
.mail-imgblock {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin: 0 0 14px; padding: 10px 14px;
  background: #fffaeb; border: 1px solid #fedf89; border-radius: 8px;
  font-size: 12.5px; color: var(--m-amber);
}
.mail-imgblock form { margin: 0; }
.mail-imgblock button {
  border: 0; background: none; cursor: pointer; padding: 0;
  font: 700 12.5px/1 var(--m-font); color: var(--m-amber);
  text-decoration: underline;
}

/* §19 — Les pièces jointes. Elles s'OUVRENT dans la visionneuse ; le
   téléchargement est une action secondaire, pas le seul chemin. */
.mail-atts { display: flex; flex-wrap: wrap; gap: 8px; margin: 14px 0 0; padding: 0; list-style: none; }
.mail-att {
  display: flex; align-items: center; gap: 9px;
  padding: 8px 12px; border: 1px solid var(--m-line); border-radius: 8px;
  background: #fff; font-size: 12.5px; max-width: 280px;
  transition: border-color .12s, box-shadow .12s;
}
.mail-att:hover { border-color: var(--m-green); box-shadow: var(--m-shadow); }
.mail-att i { color: var(--m-ink-3); font-size: 15px; }
.mail-att__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 600; }
.mail-att__size { color: var(--m-ink-3); font-size: 11.5px; white-space: nowrap; }

/* ══════════════════════════════════════════════════════════════════════════
   §22 → §28 — LE RAIL CONTEXTUEL

   Il ne s'affiche que s'il a quelque chose à dire. Un rail « Aucun client,
   aucun dossier, aucune consultation » prendrait 300 pixels pour trois
   négations.
   ═════════════════════════════════════════════════════════════════════════ */
.mail-rail {
  border-top: 1px solid var(--m-line);
  background: var(--m-bg);
  padding: 14px 20px 20px;
}
.mail-rail__title {
  margin: 0 0 10px;
  font-size: 10.5px; font-weight: 700; letter-spacing: .07em;
  text-transform: uppercase; color: var(--m-ink-3);
}
.mail-card {
  background: #fff; border: 1px solid var(--m-line);
  border-radius: var(--m-radius); padding: 13px 15px; margin-bottom: 10px;
}
.mail-card__name { font-size: 14px; font-weight: 700; margin: 0 0 2px; }
.mail-card__meta { font-size: 12.5px; color: var(--m-ink-3); margin: 0; }
.mail-card__list { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 6px; }
.mail-card__list a {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 7px 10px; border-radius: 7px; background: var(--m-bg);
  font-size: 12.5px;
}
.mail-card__list a:hover { background: var(--m-active); }
.mail-card__actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }

/* Le formulaire de rattachement : replié dans un `<details>`, parce qu'on
   rattache une fois et qu'on lit cent fois. */
.mail-link-form { margin-top: 10px; }
.mail-link-form summary { cursor: pointer; font-size: 12.5px; color: var(--m-green); font-weight: 600; }
.mail-link-form form { display: flex; gap: 8px; margin-top: 10px; }

/* ══════════════════════════════════════════════════════════════════════════
   §17 §32 — LE COMPOSEUR
   ═════════════════════════════════════════════════════════════════════════ */
.mail-composer {
  position: fixed; right: 24px; bottom: 0;
  width: 620px; max-width: calc(100vw - 48px);
  height: 560px; max-height: calc(100vh - 80px);
  background: #fff;
  border: 1px solid var(--m-line); border-bottom: 0;
  border-radius: var(--m-radius) var(--m-radius) 0 0;
  box-shadow: 0 -2px 10px rgba(20,32,28,.06), 0 20px 50px rgba(20,32,28,.22);
  z-index: 80;
  display: flex; flex-direction: column;
}
/* Réduit : seule la barre de titre reste. Le brouillon continue de vivre —
   on n'a rien perdu, on a juste rangé. */
.mail-composer.is-collapsed { height: 44px; min-height: 44px; }
.mail-composer.is-collapsed .mail-composer__body,
.mail-composer.is-collapsed .mail-composer__foot { display: none; }
/* Agrandi : au centre, plus haut, pour écrire un long message. */
.mail-composer.is-expanded {
  right: 50%; transform: translateX(50%);
  width: min(920px, calc(100vw - 80px));
  height: calc(100vh - 100px);
  border-radius: var(--m-radius);
  bottom: 40px; border-bottom: 1px solid var(--m-line);
}
.mail-composer.is-dragover { outline: 2px dashed var(--m-green); outline-offset: -6px; }

.mail-composer__form { display: flex; flex-direction: column; min-height: 0; flex: 1; }

.mail-composer__bar {
  display: flex; align-items: center; gap: 4px;
  height: 44px; padding: 0 6px 0 16px;
  background: var(--m-green); color: #fff;
  border-radius: var(--m-radius) var(--m-radius) 0 0;
  cursor: move; flex: 0 0 auto;
}
.mail-composer__title { font-size: 13.5px; font-weight: 600; flex: 1; }
/* L'horodatage d'enregistrement. Discret : il rassure, il n'informe pas. */
.mail-composer__saved { font-size: 11.5px; opacity: .75; margin-right: 6px; }
.mail-composer__icon {
  width: 30px; height: 30px; border: 0; border-radius: 6px;
  background: none; color: #fff; cursor: pointer; font-size: 12px;
  display: grid; place-items: center;
}
.mail-composer__icon:hover { background: rgba(255,255,255,.16); }

.mail-composer__body {
  flex: 1; min-height: 0; overflow-y: auto;
  display: flex; flex-direction: column; position: relative;
}

.mail-field {
  display: flex; align-items: center; gap: 10px;
  padding: 0 16px; height: 42px;
  border-bottom: 1px solid var(--m-line-2); flex: 0 0 auto;
}
.mail-field__label {
  width: 42px; flex: 0 0 auto;
  font-size: 12.5px; color: var(--m-ink-3);
}
.mail-field__input {
  flex: 1; min-width: 0; border: 0; outline: none; background: none;
  font: 13.5px var(--m-font); color: var(--m-ink); height: 100%;
}
.mail-field__more {
  border: 0; background: none; cursor: pointer;
  font: 600 12px var(--m-font); color: var(--m-ink-3); padding: 4px 6px;
}
.mail-field__more:hover { color: var(--m-green); }

.mail-composer__text {
  flex: 1; min-height: 160px; resize: none;
  border: 0; outline: none; padding: 14px 16px;
  font: 13.5px/1.6 var(--m-font); color: var(--m-ink);
}

.mail-composer__drop {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center; gap: 10px;
  background: rgba(255,255,255,.94); color: var(--m-green);
  font-weight: 600; font-size: 14px; pointer-events: none;
}

.mail-composer__files { list-style: none; margin: 0; padding: 0 16px 12px; display: flex; flex-wrap: wrap; gap: 8px; }
.mail-composer__files li {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 10px; border: 1px solid var(--m-line); border-radius: 7px;
  font-size: 12px; background: var(--m-bg);
}

.mail-composer__foot {
  display: flex; align-items: center; gap: 8px;
  padding: 10px 14px; border-top: 1px solid var(--m-line); flex: 0 0 auto;
}
.mail-composer__spacer { flex: 1; }

/* ══════════════════════════════════════════════════════════════════════════
   §34 — LA SESSION EXPIRÉE

   Une modale, pas une page 500 : le §34 exige qu'on « ne casse pas
   l'expérience ». Ce qui était écrit reste à l'écran derrière le voile, et
   l'enregistrement automatique l'a déjà mis à l'abri.
   ═════════════════════════════════════════════════════════════════════════ */
.mail-expired {
  position: fixed; inset: 0; z-index: 200;
  display: grid; place-items: center;
  background: rgba(20,32,28,.52);
  backdrop-filter: blur(2px);
  padding: 20px;
}
.mail-expired__box {
  background: #fff; border-radius: 14px; padding: 26px 28px;
  max-width: 400px; width: 100%; box-shadow: var(--m-shadow); text-align: center;
}
.mail-expired__box h2 { margin: 0 0 8px; font-size: 17px; }
.mail-expired__box p { margin: 0 0 18px; color: var(--m-ink-2); font-size: 13.5px; line-height: 1.55; }

/* ══════════════════════════════════════════════════════════════════════════
   §5 — LA PAGE DE CONNEXION

   Elle n'a ni barre latérale ni en-tête : on ne montre pas les dossiers de
   quelqu'un qui n'est pas encore identifié.
   ═════════════════════════════════════════════════════════════════════════ */
body.mail-auth {
  display: grid; place-items: center;
  min-height: 100vh; min-height: 100dvh; height: auto; overflow: auto;
  padding: 24px; background: var(--m-bg);
}
.mail-auth__card {
  width: 100%; max-width: 400px;
  background: #fff; border: 1px solid var(--m-line);
  border-radius: 14px; padding: 30px 28px; box-shadow: var(--m-shadow);
}
.mail-auth__brand { display: flex; align-items: center; gap: 10px; margin-bottom: 22px; }
.mail-auth__card h1 { margin: 0 0 6px; font-size: 19px; }
.mail-auth__card p.mail-auth__lead { margin: 0 0 22px; color: var(--m-ink-3); font-size: 13px; line-height: 1.5; }
.mail-auth__field { display: block; margin-bottom: 14px; }
.mail-auth__field span { display: block; margin-bottom: 5px; font-size: 12.5px; font-weight: 600; color: var(--m-ink-2); }
.mail-auth__field input {
  width: 100%; height: 42px; padding: 0 13px;
  border: 1px solid var(--m-line); border-radius: 8px;
  font: 14px var(--m-font); color: var(--m-ink); background: #fff;
}
.mail-auth__field input:focus { border-color: var(--m-green); outline: none; }
.mail-auth__submit {
  width: 100%; height: 44px; margin-top: 6px;
  border: 0; border-radius: 8px; cursor: pointer;
  background: var(--m-green); color: #fff; font: 600 14.5px var(--m-font);
}
.mail-auth__submit:hover { background: var(--m-green-soft); }
.mail-auth__links { margin: 18px 0 0; text-align: center; font-size: 12.5px; color: var(--m-ink-3); }
.mail-auth__links a { color: var(--m-green); font-weight: 600; }
.mail-auth__error {
  margin: 0 0 16px; padding: 11px 13px; border-radius: 8px;
  background: #fef3f2; color: var(--m-red); font-size: 13px;
}

/* ══════════════════════════════════════════════════════════════════════════
   §31 §32 — LE RESPONSIVE

   Trois régimes, et non « un desktop rétréci ». Les points de rupture suivent
   les tailles nommées au §59 : 1366 et au-delà, 768–1200, 390/430.
   ═════════════════════════════════════════════════════════════════════════ */

/* ── Compact (768 → 1200) : la lecture passe en pleine largeur ───────────── */
@media (max-width: 1200px) {
  :root { --m-w-side: 76px; --m-w-list: 320px; }

  /* La barre latérale se réduit aux icônes. Elle ne DISPARAÎT pas : perdre
     l'accès aux dossiers sur une tablette obligerait à revenir en arrière pour
     changer de dossier. */
  .mail-side { padding: 12px 8px; align-items: center; }
  .mail-compose-cta { width: 52px; height: 52px; border-radius: 26px; padding: 0; }
  .mail-compose-cta span,
  .mail-folders span, .mail-boxes span,
  .mail-side__title, .mail-side__link span,
  .mail-count { display: none; }
  .mail-folders { width: 100%; }
  .mail-folders a, .mail-boxes a {
    justify-content: center; border-radius: 9px; padding: 0; height: 40px;
  }
  .mail-brand__text { display: none; }
}

/* ── Mobile (≤ 767) : un panneau à la fois ───────────────────────────────── */
@media (max-width: 767px) {
  :root { --m-h-header: 52px; }

  .mail-burger { display: block; }

  /* La barre latérale devient un tiroir. Fermée, elle ne prend AUCUNE place —
     `transform` et non `display`, pour qu'elle glisse au lieu d'apparaître. */
  .mail-shell { grid-template-columns: 1fr; }
  .mail-side {
    position: fixed; top: var(--m-h-header); bottom: 0; left: 0;
    width: 264px; padding: 14px 10px; align-items: stretch;
    background: #fff; border-right: 1px solid var(--m-line);
    transform: translateX(-100%);
    transition: transform .2s ease;
    z-index: 70;
  }
  .mail-side.is-open { transform: none; box-shadow: 0 0 40px rgba(20,32,28,.28); }
  .mail-compose-cta { width: auto; height: 44px; border-radius: 22px; }
  .mail-compose-cta span,
  .mail-folders span, .mail-boxes span,
  .mail-side__title, .mail-side__link span,
  .mail-count { display: initial; }
  .mail-folders a, .mail-boxes a { justify-content: flex-start; padding: 0 12px; height: 40px; }

  /* §32 — Réception → message → retour. Sur l'écran de lecture, la liste
     n'est pas affichée : 390 pixels ne se partagent pas. */
  .mail-panes { grid-template-columns: 1fr; }
  .mail-pane--list { display: none; }
  .mail-panes--list .mail-pane--list { display: block; border-right: 0; }
  .mail-panes--list .mail-pane--read { display: none; }

  .mail-read__back { display: inline-flex; margin-bottom: 10px; }
  .mail-read__subject { font-size: 16px; }
  .mail-msg__body { padding: 0 14px 18px; }
  .mail-read__head, .mail-rail { padding-left: 14px; padding-right: 14px; }
  .mail-row { padding: 11px 12px; }

  /* Sur 390 pixels, chaque élément d'en-tête se dispute la largeur de la
     recherche. On resserre les écarts et on retire le seul bouton dont
     l'absence ne coûte rien : « Ouvrir CamerounServices » — sur un téléphone,
     on ne travaille pas à deux onglets. */
  .mail-brand__text { display: none; }
  .mail-search { max-width: none; }
  .mail-header { gap: 6px; padding: 0 8px; }
  .mail-header__actions { gap: 0; }
  .mail-header__actions > a[target="_blank"] { display: none; }
  .mail-iconbtn { width: 32px; }
  .mail-burger { padding: 6px; }

  /* §32 — Le composeur en PLEIN ÉCRAN. Une fenêtre flottante de 620 pixels sur
     un écran de 390 serait une fenêtre qui déborde. */
  .mail-composer {
    inset: 0; right: 0; bottom: 0;
    width: 100%; max-width: none; height: 100%; max-height: none;
    border: 0; border-radius: 0;
  }
  .mail-composer.is-expanded { transform: none; right: 0; bottom: 0; width: 100%; height: 100%; border-radius: 0; }
  .mail-composer.is-collapsed { inset: auto 0 0 0; height: 44px; }
  .mail-composer__bar { border-radius: 0; cursor: default; }
}

/* Le voile du tiroir. Il n'existe que sur mobile et seulement quand le tiroir
   est ouvert : un `<div>` transparent permanent intercepterait les clics. */
.mail-scrim {
  position: fixed; inset: var(--m-h-header) 0 0 0;
  background: rgba(20,32,28,.4); z-index: 65;
}

/* ── Grands écrans (1440+) : on donne la largeur au texte, pas au vide ───── */
@media (min-width: 1440px) {
  :root { --m-w-list: 420px; }
  .mail-msg__body, .mail-read__head { max-width: 1100px; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   SMART-MAIL-SEND-UX-FIX-01 §16 — LA CONFIRMATION D'ENVOI

   ══ POURQUOI EN BAS À GAUCHE ══
   Le composeur occupe le bas à DROITE. Une confirmation posée au même endroit
   apparaîtrait pile là où la fenêtre vient de disparaître — donc là où le
   regard n'est plus. En bas à gauche, elle est dans le champ de vision sans
   recouvrir la liste ni le message qu'on relit.

   ══ POURQUOI ELLE NE BLOQUE RIEN ══
   `pointer-events: none` : un envoi réussi ne doit pas intercepter le clic
   suivant. Elle informe, elle ne demande rien, et elle s'efface seule.
   ════════════════════════════════════════════════════════════════════════ */
.mail-toast {
  position: fixed; left: 20px; bottom: 22px; z-index: 90;
  max-width: min(420px, calc(100vw - 40px));
  padding: 11px 16px;
  border-radius: 10px;
  background: var(--m-green);
  color: #fff;
  font-size: 13.5px; font-weight: 600; line-height: 1.45;
  box-shadow: 0 10px 30px rgba(11, 61, 46, .28);
  pointer-events: none;
  opacity: 0; transform: translateY(8px);
  transition: opacity .18s ease, transform .18s ease;
}
.mail-toast.is-visible { opacity: 1; transform: translateY(0); }

/* Sur téléphone le composeur est plein écran : la confirmation se centre. */
@media (max-width: 767px) {
  .mail-toast {
    left: 12px; right: 12px; bottom: 14px;
    max-width: none; text-align: center;
  }
}

/* ── §7 §8 — L'échec, DANS le composeur ──────────────────────────────────
   Il ne remplace pas le formulaire et ne le ferme pas : il s'insère au-dessus
   du pied, juste au-dessus du bouton qu'on vient de presser, là où le regard
   se trouve déjà. */
.mail-composer__error {
  margin: 8px 14px 0;
  padding: 9px 12px;
  border-radius: 8px;
  background: #fef3f2;
  border: 1px solid #fecdca;
  color: var(--m-red);
  font-size: 12.5px; line-height: 1.5;
}

/* ── Mouvement réduit ────────────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { transition-duration: .01ms !important; animation-duration: .01ms !important; }
}
