/* Admin — feuille de style sobre (US629). Charte v2 alignée avec tokens.css. */

:root {
  --admin-brand:        #5b6a89;
  --admin-brand-darker: #25304a;
  --admin-bg:           #f8f7f4;
  --admin-card-bg:      #ffffff;
  --admin-border:       #d8dbe2;
  --admin-text:         #1f2433;
  --admin-muted:        #6b7280;
  --admin-err:          #b91c1c;
  --admin-err-bg:       #fef2f2;
  --admin-accent:       #ffd23f;
}

* { box-sizing: border-box; }

html, body { height: 100%; }

body.admin {
  margin: 0;
  background: var(--admin-bg);
  color: var(--admin-text);
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  font-size: 16px;
  line-height: 1.5;
}

/* Header */
.admin-header {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 24px;
  background: var(--admin-brand-darker);
  color: #fff;
  border-bottom: 3px solid var(--admin-accent);
}
.admin-header strong { font-weight: 600; flex: 0 0 auto; }
.admin-header > :last-child { margin-left: auto; }

.admin-pill {
  display: inline-block;
  padding: 2px 10px;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  background: rgba(255, 210, 63, 0.15);
  color: var(--admin-accent);
  border: 1px solid rgba(255, 210, 63, 0.35);
  border-radius: 999px;
}

/* Shell */
.admin-shell {
  display: flex;
  justify-content: center;
  align-items: flex-start;
  padding: 64px 20px 40px;
  min-height: calc(100vh - 60px);
}
.admin-shell-wide .admin-card { max-width: 880px; }

/* Card */
.admin-card {
  width: 100%;
  max-width: 440px;
  background: var(--admin-card-bg);
  border: 1px solid var(--admin-border);
  border-radius: 12px;
  padding: 32px 28px;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04);
}

.admin-title {
  font-size: 22px;
  margin: 0 0 4px;
  color: var(--admin-brand-darker);
}
.admin-sub {
  font-size: 14px;
  color: var(--admin-muted);
  margin: 0 0 22px;
}
.admin-note {
  margin-top: 18px;
  padding: 12px 14px;
  background: var(--admin-bg);
  border-left: 3px solid var(--admin-brand);
  font-size: 14px;
  color: var(--admin-muted);
  border-radius: 4px;
}

/* Form */
.admin-form { display: flex; flex-direction: column; gap: 16px; }
.admin-field {
  display: flex; flex-direction: column; gap: 6px;
  font-size: 14px; color: var(--admin-text);
}
.admin-field span { font-weight: 500; }
.admin-field input {
  padding: 10px 12px;
  font-size: 15px;
  background: #fff;
  border: 1px solid var(--admin-border);
  border-radius: 8px;
  color: var(--admin-text);
  transition: border-color 0.15s, box-shadow 0.15s;
}
.admin-field input:focus {
  outline: none;
  border-color: var(--admin-brand);
  box-shadow: 0 0 0 3px rgba(91, 106, 137, 0.15);
}

.admin-btn {
  padding: 11px 18px;
  background: var(--admin-brand-darker);
  color: #fff;
  border: none;
  border-radius: 8px;
  font-size: 15px;
  font-weight: 500;
  cursor: pointer;
  transition: background 0.15s;
  margin-top: 4px;
}
.admin-btn:hover { background: var(--admin-brand); }
.admin-btn:focus-visible {
  outline: 3px solid var(--admin-accent);
  outline-offset: 2px;
}

.admin-btn-sm {
  padding: 6px 12px;
  font-size: 13px;
  background: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.25);
}
.admin-btn-sm:hover { background: rgba(255, 255, 255, 0.2); }

/* Éléments enrolement TOTP */
.admin-h2 {
  font-size: 17px;
  color: var(--admin-brand-darker);
  margin: 22px 0 8px;
}
.admin-hr {
  border: none;
  border-top: 1px solid var(--admin-border);
  margin: 24px 0 18px;
}
.admin-dl {
  display: grid;
  grid-template-columns: 130px 1fr;
  gap: 6px 14px;
  margin: 8px 0 14px;
  font-size: 14px;
}
.admin-dl dt { color: var(--admin-muted); }
.admin-dl dd { margin: 0; word-break: break-all; }
.admin-code {
  display: inline-block;
  padding: 4px 8px;
  background: var(--admin-bg);
  border: 1px solid var(--admin-border);
  border-radius: 4px;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 13px;
  letter-spacing: 0.04em;
  word-break: break-all;
}
.admin-qr {
  display: flex;
  justify-content: center;
  padding: 14px;
  margin: 8px 0 14px;
  background: #fff;
  border: 1px solid var(--admin-border);
  border-radius: 8px;
}
.admin-qr svg {
  display: block;
}

.admin-otpauth {
  margin: 6px 0 14px;
}
.admin-otpauth a {
  display: inline-block;
  padding: 8px 14px;
  background: var(--admin-bg);
  border: 1px solid var(--admin-brand);
  color: var(--admin-brand-darker);
  border-radius: 8px;
  font-size: 14px;
  text-decoration: none;
}
.admin-otpauth a:hover {
  background: var(--admin-brand);
  color: #fff;
}

/* Checkbox */
.admin-check {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 14px;
  color: var(--admin-text);
  margin: 2px 0 4px;
  cursor: pointer;
}
.admin-check input[type="checkbox"] {
  width: 16px;
  height: 16px;
  accent-color: var(--admin-brand);
}

/* Erreur */
.admin-err {
  margin: 4px 0 0;
  padding: 10px 12px;
  background: var(--admin-err-bg);
  color: var(--admin-err);
  border-left: 3px solid var(--admin-err);
  border-radius: 4px;
  font-size: 14px;
}

/* ============================================================ */
/* Page liste inscriptions (US632 V1 affichage)                  */
/* ============================================================ */

/* Tokens additionnels (couleurs sources + statut) */
:root {
  --admin-ok:        #15803d;
  --admin-ok-bg:     #ecfdf5;
  --admin-warn:      #92400e;
  --admin-warn-bg:   #fef3c7;
  --admin-neutral-bg:#f1f3f7;

  --admin-src-news:    #2563eb;
  --admin-src-news-bg: #eff6ff;
  --admin-src-demo:    #b45309;
  --admin-src-demo-bg: #fffbeb;
  --admin-src-quote:   #7c3aed;
  --admin-src-quote-bg:#f5f3ff;
}

/* Shell pleine largeur pour la liste (occupe toute la largeur navigateur) */
.admin-shell-xwide {
  display: block;
  padding: 24px 24px 64px;
  max-width: none;
  margin: 0;
  min-height: calc(100vh - 60px);
}
.admin-shell-xwide .admin-card { max-width: none; }
.admin-stack { display: flex; flex-direction: column; gap: 20px; }

/* Titre + sous-titre section */
.admin-section-head {
  display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap;
  margin-bottom: 18px;
}
.admin-section-head h1 { font-size: 22px; margin: 0; color: var(--admin-brand-darker); }
.admin-section-head .admin-count { color: var(--admin-muted); font-size: 14px; }

.admin-h2-list {
  font-size: 13px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--admin-muted);
  margin: 0 0 14px;
  font-weight: 600;
}

/* Onglets sources */
.admin-tabs {
  display: flex; gap: 4px;
  border-bottom: 1px solid var(--admin-border);
  margin-bottom: 16px;
  overflow-x: auto;
}
.admin-tab {
  padding: 10px 16px;
  font-size: 14px;
  font-weight: 500;
  color: var(--admin-muted);
  background: none; border: none;
  border-bottom: 2px solid transparent;
  cursor: pointer;
  white-space: nowrap;
  display: inline-flex; align-items: center; gap: 8px;
  font-family: inherit;
}
.admin-tab:hover { color: var(--admin-brand-darker); }
.admin-tab.active {
  color: var(--admin-brand-darker);
  border-bottom-color: var(--admin-brand);
}
.admin-tab .admin-num {
  display: inline-block;
  padding: 1px 8px;
  font-size: 12px;
  background: var(--admin-neutral-bg);
  border-radius: 999px;
  color: var(--admin-muted);
  font-weight: 600;
}
.admin-tab.active .admin-num { background: var(--admin-brand); color: #fff; }

/* Toolbar (recherche + filtres) */
.admin-toolbar {
  display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
  padding: 12px;
  background: var(--admin-bg);
  border: 1px solid var(--admin-border);
  border-radius: 10px;
  margin-bottom: 12px;
}
.admin-toolbar .grow { flex: 1 1 220px; min-width: 200px; }
.admin-search {
  width: 100%;
  padding: 9px 12px 9px 34px;
  border: 1px solid var(--admin-border);
  border-radius: 8px;
  font-size: 14px;
  background: #fff url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='11' cy='11' r='8'/><path d='m21 21-4.3-4.3'/></svg>") no-repeat 10px center;
  color: var(--admin-text);
  font-family: inherit;
}
.admin-search:focus {
  outline: none;
  border-color: var(--admin-brand);
  box-shadow: 0 0 0 3px rgba(91,106,137,0.15);
}
.admin-flt {
  padding: 9px 28px 9px 12px;
  border: 1px solid var(--admin-border);
  border-radius: 8px;
  font-size: 14px;
  background: #fff url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2'><polyline points='6 9 12 15 18 9'/></svg>") no-repeat right 8px center;
  appearance: none;
  cursor: pointer;
  color: var(--admin-text);
  font-family: inherit;
}
.admin-flt:focus {
  outline: none;
  border-color: var(--admin-brand);
  box-shadow: 0 0 0 3px rgba(91,106,137,0.15);
}

/* Table */
.admin-tbl-wrap {
  overflow-x: auto;
  border: 1px solid var(--admin-border);
  border-radius: 10px;
}
table.admin-list {
  width: 100%;
  border-collapse: collapse;
  font-size: 14px;
  min-width: 760px;
}
table.admin-list th,
table.admin-list td {
  padding: 12px 14px;
  text-align: left;
  border-bottom: 1px solid var(--admin-border);
  vertical-align: middle;
}
table.admin-list thead th {
  background: var(--admin-bg);
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--admin-muted);
  font-weight: 600;
}
table.admin-list thead th.sortable {
  cursor: pointer;
  user-select: none;
  transition: background 0.15s, color 0.15s;
}
table.admin-list thead th.sortable:hover {
  background: #ebeced;
  color: var(--admin-brand-darker);
}
table.admin-list thead th.sortable .sort-ind {
  display: inline-block;
  width: 14px;
  margin-left: 4px;
  font-size: 10px;
  color: var(--admin-muted);
  opacity: 0.4;
}
table.admin-list thead th.sortable.sorted {
  color: var(--admin-brand-darker);
}
table.admin-list thead th.sortable.sorted .sort-ind {
  opacity: 1;
  color: var(--admin-brand);
}
table.admin-list tbody tr:last-child td { border-bottom: none; }
.admin-list .col-actions { width: 60px; text-align: right; }
.admin-list .admin-email { font-weight: 500; color: var(--admin-text); }
.admin-list .admin-email small {
  display: block; color: var(--admin-muted); font-weight: 400; font-size: 12px; margin-top: 2px;
}
/* US639/US640 — nom cliquable (colonne Nom) → ouvre la fiche contact */
.admin-list .admin-contact-line {
  padding: 0; background: none; border: none; text-align: left;
  font: inherit; color: var(--admin-text); font-weight: 500; cursor: pointer;
}
.admin-list .admin-contact-line:hover { text-decoration: underline; }
/* US640 — colonnes identité contact */
.admin-list .admin-col-nom,
.admin-list .admin-col-prenom,
.admin-list .admin-col-societe { color: var(--admin-text); }

/* US639 — fiche contact (popup détail) */
.admin-muted { color: var(--admin-muted); }
.cd-head { margin-bottom: 16px; }
.cd-head .cd-name { font-size: 18px; font-weight: 700; color: var(--admin-text); }
.cd-head .cd-soc { color: var(--admin-muted); margin-top: 2px; }
.cd-head .cd-sources { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 6px; }
dl.cd-dl { display: grid; grid-template-columns: max-content 1fr; gap: 6px 16px; margin: 0 0 8px; }
dl.cd-dl dt { color: var(--admin-muted); font-size: 13px; }
dl.cd-dl dd { margin: 0; color: var(--admin-text); }
dl.cd-dl a { color: var(--admin-link, #2d6cdf); text-decoration: none; }
dl.cd-dl a:hover { text-decoration: underline; }
.cd-h3 { font-size: 14px; margin: 16px 0 8px; }
ul.cd-timeline { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.cd-tl-item { border-left: 2px solid var(--admin-border); padding: 4px 0 4px 12px; }
.cd-tl-top { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.cd-tl-date { color: var(--admin-muted); font-size: 12px; }
.cd-tl-extra { margin-top: 4px; }
.admin-list .admin-date { color: var(--admin-muted); font-size: 13px; white-space: nowrap; }

/* Badges sources */
.admin-badge {
  display: inline-block;
  padding: 3px 9px;
  font-size: 12px;
  font-weight: 600;
  border-radius: 999px;
  letter-spacing: 0.02em;
  white-space: nowrap;
}
.admin-badge-news  { color: var(--admin-src-news);  background: var(--admin-src-news-bg); }
.admin-badge-demo  { color: var(--admin-src-demo);  background: var(--admin-src-demo-bg); }
.admin-badge-quote { color: var(--admin-src-quote); background: var(--admin-src-quote-bg); }

.admin-badges-stack { display: inline-flex; flex-wrap: wrap; gap: 4px; }

/* Statut */
.admin-status {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 3px 9px 3px 7px;
  font-size: 12px;
  font-weight: 500;
  border-radius: 999px;
}
.admin-status::before {
  content: ""; width: 6px; height: 6px; border-radius: 999px; background: currentColor;
}
.admin-st-pending      { color: var(--admin-warn); background: var(--admin-warn-bg); }
.admin-st-confirmed,
.admin-st-active,
.admin-st-won          { color: var(--admin-ok);   background: var(--admin-ok-bg); }
.admin-st-unsubscribed,
.admin-st-expired,
.admin-st-revoked,
.admin-st-lost         { color: var(--admin-muted); background: var(--admin-neutral-bg); }
.admin-st-contacted,
.admin-st-quoted       { color: var(--admin-brand); background: var(--admin-neutral-bg); }

/* Lignes maîtres / filles (fusion par personne) */
.admin-list .row-master { cursor: pointer; }
.admin-list .row-master:hover { background: #fafafa; }
.admin-list .row-master.expanded { background: #f5f7fb; }
.admin-list .row-master.expanded td { border-bottom-color: transparent; }
.admin-chev {
  display: inline-block;
  width: 14px; text-align: center;
  color: var(--admin-muted);
  margin-right: 6px;
  font-size: 11px;
  transition: transform .15s;
}
.admin-list .row-master.expanded .admin-chev { transform: rotate(90deg); color: var(--admin-brand); }
.admin-agg-info {
  display: inline-flex; align-items: center;
  gap: 6px;
  font-size: 12px; font-weight: 600;
  color: var(--admin-brand);
  background: var(--admin-neutral-bg);
  border-radius: 999px;
  padding: 2px 10px;
}

.admin-list .row-child { background: #fbfbfd; }
.admin-list .row-child td {
  font-size: 13px; padding-top: 10px; padding-bottom: 10px;
}
.admin-list .row-child td:first-child { border-left: 3px solid var(--admin-brand); }
.admin-list .child-lbl {
  color: var(--admin-muted);
  font-style: italic;
  padding-left: 8px;
}
.admin-list .child-lbl::before {
  content: "↳"; margin-right: 6px; color: var(--admin-brand); font-style: normal;
}
.admin-extra {
  display: block;
  font-size: 11px;
  color: var(--admin-muted);
  margin-top: 2px;
}
.admin-extra strong { color: var(--admin-text); font-weight: 600; }

/* Pagination */
.admin-pag {
  display: flex; align-items: center; justify-content: space-between;
  margin-top: 14px;
  font-size: 13px; color: var(--admin-muted);
  flex-wrap: wrap; gap: 8px;
}
.admin-pag-pages { display: flex; gap: 4px; }
.admin-pag-pages button {
  min-width: 32px; height: 32px; padding: 0 8px;
  background: #fff;
  border: 1px solid var(--admin-border);
  border-radius: 6px;
  cursor: pointer;
  font-size: 13px;
  color: var(--admin-text);
  font-family: inherit;
}
.admin-pag-pages button:hover:not(:disabled):not(.cur) {
  border-color: var(--admin-brand);
}
.admin-pag-pages button.cur {
  background: var(--admin-brand-darker);
  color: #fff;
  border-color: var(--admin-brand-darker);
}
.admin-pag-pages button:disabled { opacity: .4; cursor: not-allowed; }

/* États génériques */
.admin-empty,
.admin-loading {
  padding: 40px 20px;
  text-align: center;
  color: var(--admin-muted);
  font-size: 14px;
}

/* ============================================================ */
/* US632 V2 — actions sur lignes                                 */
/* ============================================================ */

/* Colonne checkbox + actions */
.admin-list .col-chk { width: 38px; padding-right: 0; }
.admin-list .col-actions { width: 60px; text-align: right; }
.admin-list input[type=checkbox] {
  width: 16px; height: 16px;
  accent-color: var(--admin-brand);
  cursor: pointer;
}

/* Bouton ⋯ */
.admin-row-act {
  background: none; border: none;
  padding: 6px 10px;
  border-radius: 6px;
  color: var(--admin-muted);
  cursor: pointer; font-size: 18px;
  line-height: 1;
}
.admin-row-act:hover { background: var(--admin-bg); color: var(--admin-brand-darker); }
.admin-row-act.open  { background: var(--admin-brand-darker); color: #fff; }

/* Barre d'actions groupées (apparaît si sélection > 0) */
.admin-bulkbar {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding: 10px 14px;
  background: var(--admin-brand-darker);
  color: #fff;
  border-radius: 10px;
  margin-bottom: 10px;
  font-size: 14px;
}
.admin-bulkbar b { font-weight: 600; }
.admin-bulkbar .admin-bulkbar-right { margin-left: auto; display: flex; gap: 8px; }
.admin-bulkbar button {
  padding: 7px 14px;
  font-size: 14px; font-weight: 500;
  border-radius: 6px; cursor: pointer;
  font-family: inherit;
  border: 1px solid rgba(255,255,255,0.3);
  background: rgba(255,255,255,0.1);
  color: #fff;
  display: inline-flex; align-items: center; gap: 6px;
}
.admin-bulkbar button:hover { background: rgba(255,255,255,0.2); }
.admin-bulkbar .primary {
  background: var(--admin-accent);
  border-color: var(--admin-accent);
  color: var(--admin-brand-darker);
  font-weight: 600;
}
.admin-bulkbar .primary:hover { background: #ffdc6b; }

/* Badge "X notes" sur la ligne maître — cliquable */
.admin-notes-badge {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 1px 7px;
  font-size: 11px;
  border-radius: 999px;
  background: var(--admin-neutral-bg);
  color: var(--admin-muted);
  margin-left: 6px;
  vertical-align: middle;
  border: none;
  cursor: pointer;
  font-family: inherit;
  transition: background .15s, color .15s;
}
.admin-notes-badge:hover {
  background: var(--admin-brand);
  color: #fff;
}

/* Menu contextuel ligne ⋯ */
.admin-row-menu {
  position: absolute;
  z-index: 30;
  min-width: 260px;
  background: #fff;
  border: 1px solid var(--admin-border);
  border-radius: 10px;
  box-shadow: 0 10px 32px rgba(0,0,0,0.12);
  padding: 6px;
  font-size: 14px;
}
.admin-row-menu .head {
  padding: 8px 12px 6px;
  border-bottom: 1px solid var(--admin-border);
  margin-bottom: 4px;
}
.admin-row-menu .head b { display: block; font-size: 13px; word-break: break-all; }
.admin-row-menu button {
  width: 100%; text-align: left;
  padding: 9px 12px;
  background: none; border: none;
  font-size: 14px; color: var(--admin-text);
  border-radius: 6px;
  cursor: pointer;
  display: flex; align-items: center; gap: 10px;
  font-family: inherit;
}
.admin-row-menu button:hover { background: var(--admin-bg); }
.admin-row-menu button .ico {
  width: 18px; flex: 0 0 18px; text-align: center;
  color: var(--admin-muted);
}

/* Modales */
.admin-modal-overlay {
  position: fixed; inset: 0;
  background: rgba(31, 36, 51, 0.5);
  display: flex; align-items: center; justify-content: center;
  z-index: 100;
  padding: 20px;
}
/* Restaure l'effet de l'attribut [hidden] qui est écrasé par display:flex ci-dessus */
.admin-modal-overlay[hidden] { display: none; }
.admin-modal {
  background: #fff;
  border-radius: 12px;
  width: 100%;
  max-width: 560px;
  max-height: 90vh;
  overflow-y: auto;
  box-shadow: 0 24px 64px rgba(0,0,0,0.25);
}
.admin-modal-head {
  display: flex; align-items: center; gap: 12px;
  padding: 18px 22px;
  border-bottom: 1px solid var(--admin-border);
}
.admin-modal-head h2 {
  margin: 0;
  font-size: 17px;
  color: var(--admin-brand-darker);
}
.admin-modal-head .close {
  margin-left: auto;
  background: none; border: none;
  font-size: 22px; line-height: 1;
  color: var(--admin-muted);
  cursor: pointer;
  padding: 4px 8px;
  border-radius: 6px;
  font-family: inherit;
}
.admin-modal-head .close:hover { background: var(--admin-bg); color: var(--admin-text); }

.admin-modal-body { padding: 18px 22px; }
.admin-modal-body label {
  display: block;
  font-size: 13px;
  font-weight: 500;
  color: var(--admin-text);
  margin-bottom: 6px;
}
.admin-modal-body input[type=text],
.admin-modal-body textarea {
  width: 100%;
  padding: 10px 12px;
  font-size: 14px;
  background: #fff;
  border: 1px solid var(--admin-border);
  border-radius: 8px;
  color: var(--admin-text);
  font-family: inherit;
  resize: vertical;
}
.admin-modal-body textarea { min-height: 120px; }
.admin-modal-body input[type=text]:focus,
.admin-modal-body textarea:focus {
  outline: none;
  border-color: var(--admin-brand);
  box-shadow: 0 0 0 3px rgba(91,106,137,0.15);
}
.admin-modal-body .field { margin-bottom: 14px; }
.admin-modal-body .field:last-child { margin-bottom: 0; }
.admin-modal-body .recipients {
  padding: 10px 12px;
  background: var(--admin-bg);
  border-radius: 8px;
  font-size: 13px;
  color: var(--admin-text);
  border: 1px solid var(--admin-border);
  word-break: break-all;
}
.admin-modal-body .recipients .count {
  display: inline-block;
  margin-right: 8px;
  padding: 1px 8px;
  font-size: 11px;
  background: var(--admin-brand);
  color: #fff;
  border-radius: 999px;
  font-weight: 600;
}
.admin-modal-body .help {
  font-size: 12px; color: var(--admin-muted);
  margin-top: 6px;
}
.admin-modal-body .err {
  margin-top: 8px;
  padding: 8px 12px;
  background: var(--admin-err-bg);
  color: var(--admin-err);
  border-left: 3px solid var(--admin-err);
  border-radius: 4px;
  font-size: 13px;
}

.admin-modal-foot {
  display: flex; gap: 10px;
  padding: 14px 22px 18px;
  justify-content: flex-end;
  border-top: 1px solid var(--admin-border);
}
.admin-modal-foot button {
  padding: 9px 18px;
  font-size: 14px; font-weight: 500;
  border-radius: 8px; cursor: pointer;
  font-family: inherit;
}
.admin-modal-foot .cancel {
  background: #fff;
  border: 1px solid var(--admin-border);
  color: var(--admin-text);
}
.admin-modal-foot .cancel:hover { border-color: var(--admin-brand); }
.admin-modal-foot .submit {
  background: var(--admin-brand-darker);
  border: 1px solid var(--admin-brand-darker);
  color: #fff;
}
.admin-modal-foot .submit:hover { background: var(--admin-brand); border-color: var(--admin-brand); }
.admin-modal-foot .submit:disabled { opacity: .5; cursor: not-allowed; }

/* Modale Notes — liste + édition inline (V2.1) */
.notes-list { display: flex; flex-direction: column; gap: 10px; max-height: 50vh; overflow-y: auto; margin-bottom: 14px; }
.notes-empty {
  padding: 18px;
  text-align: center;
  color: var(--admin-muted);
  font-size: 13px;
  background: var(--admin-bg);
  border-radius: 8px;
}
.note-card {
  padding: 12px 14px;
  background: var(--admin-bg);
  border: 1px solid var(--admin-border);
  border-radius: 8px;
}
.note-card .head {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-size: 12px;
  color: var(--admin-muted);
  margin-bottom: 6px;
}
.note-card .head .author { font-weight: 600; color: var(--admin-text); }
.note-card .head .edited {
  font-size: 11px;
  color: var(--admin-muted);
  font-style: italic;
}
.note-card .head .acts { margin-left: auto; display: flex; gap: 4px; }
.note-card .head .acts button {
  background: none;
  border: none;
  padding: 2px 8px;
  font-size: 12px;
  color: var(--admin-muted);
  cursor: pointer;
  border-radius: 4px;
  font-family: inherit;
}
.note-card .head .acts button:hover { background: #fff; color: var(--admin-brand-darker); }
.note-card .head .acts button.danger:hover { color: var(--admin-err); }
.note-card .body {
  font-size: 14px;
  color: var(--admin-text);
  white-space: pre-wrap;
  word-wrap: break-word;
}
.note-card.editing .body { display: none; }
.note-card .edit-zone { display: none; }
.note-card.editing .edit-zone { display: block; }
.note-card .edit-zone textarea {
  width: 100%;
  min-height: 90px;
  padding: 8px 10px;
  font-size: 14px;
  border: 1px solid var(--admin-border);
  border-radius: 6px;
  resize: vertical;
  font-family: inherit;
  background: #fff;
}
.note-card .edit-zone .edit-foot {
  display: flex; gap: 8px; justify-content: flex-end; margin-top: 8px;
}
.note-card .edit-zone .edit-foot button {
  padding: 6px 12px;
  font-size: 13px; font-weight: 500;
  border-radius: 6px; cursor: pointer;
  font-family: inherit;
}
.note-card .edit-zone .edit-foot .cancel {
  background: #fff;
  border: 1px solid var(--admin-border);
  color: var(--admin-text);
}
.note-card .edit-zone .edit-foot .save {
  background: var(--admin-brand-darker);
  border: 1px solid var(--admin-brand-darker);
  color: #fff;
}
.note-card .edit-zone .edit-foot .save:disabled { opacity: .5; cursor: not-allowed; }

.notes-add-block {
  border-top: 1px dashed var(--admin-border);
  padding-top: 14px;
}
.notes-add-block label { display: block; font-size: 13px; font-weight: 500; margin-bottom: 6px; }
.notes-add-block textarea {
  width: 100%; min-height: 80px;
  padding: 10px 12px;
  font-size: 14px;
  background: #fff;
  border: 1px solid var(--admin-border);
  border-radius: 8px;
  resize: vertical;
  font-family: inherit;
}
.notes-add-block textarea:focus {
  outline: none;
  border-color: var(--admin-brand);
  box-shadow: 0 0 0 3px rgba(91,106,137,0.15);
}
.notes-add-block .row {
  display: flex; gap: 8px; justify-content: flex-end; margin-top: 8px;
}

/* Toast */
.admin-toast-stack {
  position: fixed;
  bottom: 20px; right: 20px;
  display: flex; flex-direction: column; gap: 8px;
  z-index: 200;
  max-width: 360px;
}
.admin-toast {
  padding: 12px 16px;
  border-radius: 8px;
  font-size: 14px;
  background: var(--admin-brand-darker);
  color: #fff;
  box-shadow: 0 8px 24px rgba(0,0,0,0.18);
  display: flex; align-items: center; gap: 10px;
  animation: admin-toast-in .2s ease-out;
}
.admin-toast.ok    { background: var(--admin-ok); }
.admin-toast.err   { background: var(--admin-err); }
.admin-toast .ico  { font-size: 16px; }
.admin-toast.fade { opacity: 0; transition: opacity .3s; }
@keyframes admin-toast-in {
  from { transform: translateY(8px); opacity: 0; }
  to   { transform: translateY(0); opacity: 1; }
}

/* ============================================================
   US635 Lot 3 — Éditeur Quill + boutons templates
   ============================================================ */

/* Liste des modèles disponibles (boutons d'insertion) */
.msg-templates-list {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 4px;
}
.msg-tpl-btn {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 6px 12px;
  background: #fff;
  border: 1px solid var(--admin-border, #d1d5db);
  border-radius: 999px;
  cursor: pointer;
  font-size: 13px;
  color: var(--admin-brand-darker, #25304a);
  transition: border-color .15s, background .15s, transform .1s;
}
.msg-tpl-btn:hover {
  border-color: var(--admin-brand, #5b6a89);
  background: #f4f6fa;
}
.msg-tpl-btn:active { transform: scale(.97); }
.msg-tpl-btn .msg-tpl-meta {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: #6b7280;
  padding: 2px 6px;
  background: #f3f4f6;
  border-radius: 4px;
}

/* Conteneur éditeur Quill */
.msg-editor {
  min-height: 220px;
  background: #fff;
  border-radius: 6px;
  font-size: 14px;
}
/* Override styles Quill snow pour qu'ils s'intègrent à la charte admin */
.ql-toolbar.ql-snow {
  border-top-left-radius: 6px;
  border-top-right-radius: 6px;
  border-color: var(--admin-border, #d1d5db);
}
.ql-container.ql-snow {
  border-bottom-left-radius: 6px;
  border-bottom-right-radius: 6px;
  border-color: var(--admin-border, #d1d5db);
  min-height: 200px;
  font-family: inherit;
  font-size: 14px;
}
.ql-editor {
  min-height: 200px;
  max-height: 50vh;
  overflow-y: auto;
}
.ql-editor.ql-blank::before {
  font-style: italic;
  color: #9ca3af;
}

/* US635 Lot 3 patch — état "vide" / "loading" de la zone modèles */
.msg-tpl-empty {
  display: inline-block;
  padding: 8px 12px;
  background: #fef9e7;
  border: 1px dashed #d4a72c;
  border-radius: 6px;
  color: #6b5b1f;
  font-size: 13px;
  font-style: italic;
}
.msg-tpl-empty code {
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
  background: rgba(0,0,0,0.06);
  padding: 1px 4px;
  border-radius: 3px;
  font-style: normal;
  font-size: 12px;
}

/* ============================================================
   US635 Lot 4 — Onglets de vue + Messages envoyés
   ============================================================ */

/* Onglets de vue (Inscriptions / Messages envoyés) */
.admin-view-tabs {
  display: flex;
  gap: 4px;
  padding: 0 8px 12px 8px;
  border-bottom: 0;
}
.admin-view-tab {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 10px 18px;
  background: transparent;
  border: 1px solid transparent;
  border-radius: 8px 8px 0 0;
  cursor: pointer;
  font-size: 15px;
  font-weight: 600;
  color: var(--admin-text-muted, #6b7280);
  transition: color .15s, background .15s;
}
.admin-view-tab:hover { color: var(--admin-brand-darker, #25304a); }
.admin-view-tab.active {
  color: var(--admin-brand-darker, #25304a);
  background: #fff;
  border-color: var(--admin-border, #d1d5db);
  border-bottom-color: #fff;
  position: relative;
  z-index: 2;
}
.admin-view-tab .admin-num {
  display: inline-block;
  min-width: 22px;
  text-align: center;
  padding: 1px 6px;
  background: #e5e7eb;
  color: #374151;
  border-radius: 10px;
  font-size: 12px;
  font-weight: 600;
}
.admin-view-tab.active .admin-num {
  background: var(--admin-brand, #5b6a89);
  color: #fff;
}

/* Badge ✉ N par ligne contact (analogie 📝 notes) */
.admin-msgs-badge {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  margin-left: 6px;
  padding: 2px 7px;
  background: #ebf2ff;
  border: 1px solid #b8cffe;
  border-radius: 10px;
  cursor: pointer;
  font-size: 12px;
  color: #1e3a8a;
}
.admin-msgs-badge:hover { background: #d8e6ff; }

/* Table messages envoyés */
.msg-row { cursor: pointer; transition: background .12s; }
.msg-row:hover { background: #f9fafb; }
.msg-subject strong { color: var(--admin-brand-darker, #25304a); }
.msg-summary {
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  font-size: 12px;
  color: #6b7280;
  margin-top: 2px;
  max-width: 600px;
}
.msg-tpl-used { font-size: 11px; color: #6b7280; margin-top: 2px; }
.msg-tpl-used code {
  background: #f3f4f6; padding: 1px 4px; border-radius: 3px;
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
}

/* Statuts message global */
.msg-st-sent    { background: #d1fae5; color: #065f46; }
.msg-st-partial { background: #fef3c7; color: #92400e; }
.msg-st-failed  { background: #fee2e2; color: #991b1b; }

/* Statuts destinataire */
.msg-rcp-st-queued   { background: #f3f4f6; color: #374151; }
.msg-rcp-st-sent     { background: #d1fae5; color: #065f46; }
.msg-rcp-st-failed   { background: #fee2e2; color: #991b1b; }
.msg-rcp-st-bounced  { background: #fef3c7; color: #92400e; }
.msg-rcp-st-opened   { background: #dbeafe; color: #1e3a8a; }

.msg-fail-reason {
  margin-top: 3px;
  font-size: 11px;
  color: #991b1b;
  font-style: italic;
}

/* Badges format */
.admin-badge-fmt-html  { background: #ddd6fe; color: #5b21b6; }
.admin-badge-fmt-plain { background: #e5e7eb; color: #374151; }

/* Modale détail */
.msg-detail-meta dl.admin-dl {
  display: grid;
  grid-template-columns: 120px 1fr;
  gap: 8px 16px;
  margin: 0 0 16px 0;
}
.msg-detail-meta dt {
  font-weight: 600;
  color: var(--admin-text-muted, #6b7280);
  font-size: 13px;
}
.msg-detail-meta dd { margin: 0; font-size: 14px; }
.msg-detail-h3 {
  margin: 16px 0 8px 0;
  font-size: 14px;
  text-transform: uppercase;
  letter-spacing: .05em;
  color: var(--admin-text-muted, #6b7280);
}
.admin-list-inner { font-size: 13px; }
.admin-list-inner th { background: #f9fafb; }
.admin-list-inner td { padding: 6px 10px; }

/* Modale historique-par-contact */
.contact-msg-items { list-style: none; padding: 0; margin: 8px 0 0 0; }
.contact-msg-item {
  padding: 12px;
  border: 1px solid var(--admin-border, #d1d5db);
  border-radius: 6px;
  margin-bottom: 8px;
  cursor: pointer;
  transition: background .12s, border-color .12s;
}
.contact-msg-item:hover {
  background: #f9fafb;
  border-color: var(--admin-brand, #5b6a89);
}
.contact-msg-head { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.contact-msg-subject { color: var(--admin-brand-darker, #25304a); font-size: 14px; }
.contact-msg-meta { font-size: 12px; color: #6b7280; margin-top: 4px; }
.contact-msg-meta code {
  background: #f3f4f6; padding: 1px 4px; border-radius: 3px;
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
}
.contact-msg-summary {
  margin-top: 6px;
  font-size: 13px;
  color: #374151;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* ============================================================
   US635 Lot 4 patch — modale détail "wide" + scroll confiné au body
   ============================================================ */

/* Override : refactor en flex column pour découpler head/body/foot
   et confiner le scroll au .admin-modal-body uniquement. */
.admin-modal {
  display: flex;
  flex-direction: column;
  overflow: hidden;  /* empêche le scroll global de la modale */
}
.admin-modal-head,
.admin-modal-foot {
  flex: 0 0 auto;    /* head + foot ne scrollent jamais */
}
.admin-modal-body {
  flex: 1 1 auto;
  overflow: auto;    /* scroll local (vertical + horizontal si vraiment nécessaire) */
  min-height: 0;     /* indispensable en flex pour que overflow fonctionne dans Firefox */
}

/* Variante large pour la modale détail message (table interne avec 4 colonnes) */
.admin-modal-wide {
  max-width: min(1100px, calc(100vw - 40px));
}

/* La table interne dans la modale : pas de débordement intempestif */
.admin-modal-body .admin-list-inner {
  width: 100%;
  table-layout: auto;
}
/* Email long dans la table interne : autorise le wrap pour éviter le scroll horizontal */
.admin-modal-body .admin-list-inner .admin-email {
  word-break: break-word;
  max-width: 280px;
}

/* ============================================================
   US634 — Reset password self-service (pages forgot + reset)
   ============================================================ */

/* Lien "Mot de passe oublié ?" sous le bouton de login */
.admin-forgot-link {
  margin-top: 12px;
  text-align: center;
  font-size: 13px;
}
.admin-forgot-link a {
  color: var(--admin-brand, #5b6a89);
  text-decoration: none;
  border-bottom: 1px dotted currentColor;
}
.admin-forgot-link a:hover { color: var(--admin-brand-darker, #25304a); }

/* Lien "← Retour" en bas de page forgot/reset */
.admin-back-link {
  margin-top: 18px;
  text-align: center;
  font-size: 13px;
}
.admin-back-link a {
  color: var(--admin-muted, #6b7280);
  text-decoration: none;
}
.admin-back-link a:hover { color: var(--admin-brand-darker, #25304a); }

/* Bloc succès (mdp réinitialisé, email envoyé…) */
.admin-info {
  margin-top: 8px;
  padding: 16px 18px;
  background: #ecfdf5;
  border: 1px solid #6ee7b7;
  border-radius: 8px;
  color: #064e3b;
  font-size: 14px;
  line-height: 1.5;
}
.admin-info p { margin: 0 0 8px 0; }
.admin-info p:last-child { margin-bottom: 0; }

/* Bloc erreur "lien invalide" — pleine largeur (vs .admin-err inline) */
.admin-err-block {
  margin-top: 8px;
  padding: 16px 18px;
  background: #fef2f2;
  border: 1px solid #fca5a5;
  border-radius: 8px;
  color: #7f1d1d;
  font-size: 14px;
  line-height: 1.5;
}
.admin-err-block p { margin: 0 0 8px 0; }
.admin-err-block p:last-child { margin-bottom: 0; }
.admin-err-block a {
  color: inherit;
  border-bottom: 1px dotted currentColor;
  text-decoration: none;
}

/* Variante bouton "inline" (lien d'action dans un bloc info) */
.admin-btn-inline {
  display: inline-block;
  margin-top: 4px;
  padding: 8px 14px;
  background: var(--admin-brand-darker, #25304a);
  color: #fff !important;
  border-radius: 6px;
  font-size: 13px;
  font-weight: 600;
  text-decoration: none;
  border: 0 !important;
}
.admin-btn-inline:hover { background: var(--admin-brand, #5b6a89); }

/* ============ US1109 — Vue "Chatbot Projet" ============ */
.cb-row { cursor: pointer; transition: background .12s; }
.cb-row:hover { background: #f9fafb; }

/* Badges de statut conversation (réutilise .admin-status) */
.cb-st-qualified          { color: var(--admin-ok);    background: var(--admin-ok-bg); }
.cb-st-active             { color: var(--admin-brand);  background: var(--admin-neutral-bg, #eef1f6); }
.cb-st-callback_requested { color: var(--admin-brand);  background: var(--admin-neutral-bg, #eef1f6); }
.cb-st-refused_low_score  { color: var(--admin-warn);   background: var(--admin-warn-bg); }
.cb-st-suspicious         { color: var(--admin-err);    background: var(--admin-err-bg); }
.cb-st-abandoned          { color: var(--admin-muted);  background: var(--admin-neutral-bg, #f3f4f6); }

/* Verbatim douleur (donnée sensible — mise en valeur, confinée au backoffice) */
.cb-verbatim {
  background: var(--admin-bg);
  border-left: 3px solid var(--admin-brand);
  padding: 8px 12px; border-radius: 4px;
  white-space: pre-wrap; word-break: break-word;
  font-style: italic;
}

/* Transcription de la conversation */
.cb-admin-transcript { display: flex; flex-direction: column; gap: 8px; }
.cb-admin-msg {
  display: flex; flex-direction: column; gap: 2px;
  max-width: 85%; padding: 8px 12px; border-radius: 10px;
  font-size: 14px; line-height: 1.45;
}
.cb-admin-bot  { align-self: flex-start; background: var(--admin-bg); }
.cb-admin-user { align-self: flex-end; background: #e8edf6; }
.cb-admin-role { font-size: 11px; font-weight: 700; color: var(--admin-muted); text-transform: uppercase; letter-spacing: .04em; }
.cb-admin-text { white-space: pre-wrap; word-break: break-word; }
