/* ============================================================
   IFORT - feuille de style consolidée (design system + socle UI)
   Source de vérité : design/deuxieme jet/_ds/ (tokens + base).
   Servie statiquement par nginx depuis src/public/css/ifort.css.
   Pas de build, pas de Node.
   ============================================================ */

@import url('https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,200..800&family=Mulish:ital,wght@0,300..900;1,300..900&display=swap');

/* ---------- TOKENS : couleurs ---------- */
:root {
  --ifort-indigo: #332978;
  --ifort-red:    #f03b47;

  --indigo-900:#1d1747; --indigo-800:#271f5e; --indigo-700:#332978; --indigo-600:#443a90;
  --indigo-500:#5a4fae; --indigo-400:#8076c7; --indigo-300:#aaa3da; --indigo-200:#d0ccec;
  --indigo-100:#e8e6f5; --indigo-50:#f4f3fb;

  --red-700:#c21f2b; --red-600:#d92b37; --red-500:#f03b47; --red-400:#f4636d;
  --red-300:#f89097; --red-200:#fbc2c6; --red-100:#fde4e6; --red-50:#fef2f3;

  --seg-cyan:#c1e0e1; --seg-magenta:#952264; --seg-peach:#f3997b; --seg-violet:#482683;
  --seg-lime:#afca0b; --seg-orange:#ea5b0c; --seg-lavender:#c3c3e0; --seg-tan:#f49857;
  --seg-coral:#ea5b55; --seg-teal:#1cacb3; --seg-ink70:rgba(0,0,0,.7);

  --neutral-0:#fff; --neutral-50:#f7f7fb; --neutral-100:#f0f0f5; --neutral-200:#e3e3ec;
  --neutral-300:#cfcfdc; --neutral-400:#a6a6ba; --neutral-500:#7a7a92; --neutral-600:#565669;
  --neutral-700:#3d3d4d; --neutral-800:#262633; --neutral-900:#14141c;

  --success:#4a9d52; --success-surface:#e9f4ea;
  --warning:#ea5b0c; --warning-surface:#fcecdf;
  --danger:#f03b47;  --danger-surface:#fde4e6;
  --info:#1cacb3;    --info-surface:#e3f5f6;

  --color-primary:var(--ifort-indigo); --color-primary-hover:var(--indigo-800);
  --color-primary-active:var(--indigo-900); --color-primary-subtle:var(--indigo-50);
  --color-on-primary:var(--neutral-0);
  --color-accent:var(--ifort-red); --color-accent-hover:var(--red-600);
  --color-accent-active:var(--red-700); --color-accent-subtle:var(--red-50);
  --color-on-accent:var(--neutral-0);

  --text-strong:var(--indigo-900); --text-body:var(--neutral-800); --text-muted:var(--neutral-500);
  --text-on-dark:var(--neutral-0); --text-link:var(--ifort-indigo);
  --surface-page:var(--neutral-50); --surface-card:var(--neutral-0);
  --surface-sunken:var(--neutral-100); --surface-inverse:var(--ifort-indigo);
  --border-subtle:var(--neutral-200); --border-default:var(--neutral-300);
  --border-strong:var(--neutral-400); --focus-ring:var(--indigo-400);
}

/* ---------- TOKENS : typographie ---------- */
:root {
  --font-display:"Bricolage Grotesque","Mulish",system-ui,sans-serif;
  --font-body:"Mulish","Articulat CF",system-ui,-apple-system,sans-serif;
  --fw-light:300; --fw-regular:400; --fw-medium:500; --fw-semibold:600; --fw-bold:700;
  --fs-display:3.5rem; --fs-h1:2.75rem; --fs-h2:2rem; --fs-h3:1.5rem; --fs-h4:1.25rem;
  --fs-lead:1.1875rem; --fs-body:1rem; --fs-sm:.875rem; --fs-xs:.75rem; --fs-overline:.6875rem;
  --lh-tight:1.08; --lh-snug:1.25; --lh-normal:1.5; --lh-relaxed:1.65;
  --ls-tight:-.02em; --ls-normal:0; --ls-wide:.04em; --ls-overline:.14em;
}

/* ---------- TOKENS : espacements / rayons / layout ---------- */
:root {
  --space-1:.25rem; --space-2:.5rem; --space-3:.75rem; --space-4:1rem; --space-5:1.5rem;
  --space-6:2rem; --space-7:2.5rem; --space-8:3rem; --space-9:4rem; --space-10:5rem; --space-12:7.5rem;
  --radius-xs:4px; --radius-sm:8px; --radius-md:14px; --radius-lg:22px; --radius-xl:32px;
  --radius-pill:999px; --radius-circle:50%;
  --container-max:1160px; --container-pad:1.5rem;
  --control-h-sm:36px; --control-h-md:44px; --control-h-lg:54px;
}

/* ---------- TOKENS : élévation / motion ---------- */
:root {
  --shadow-xs:0 1px 2px rgba(29,23,71,.06); --shadow-sm:0 2px 6px rgba(29,23,71,.08);
  --shadow-md:0 8px 20px rgba(29,23,71,.10); --shadow-lg:0 18px 40px rgba(29,23,71,.14);
  --shadow-xl:0 30px 70px rgba(29,23,71,.18);
  --ring:0 0 0 3px rgba(64,79,199,.45);
  --ease-standard:cubic-bezier(.4,0,.2,1);
  --dur-fast:120ms; --dur-normal:200ms; --dur-slow:320ms;
}

/* ---------- BASE / RESET ---------- */
*,*::before,*::after{ box-sizing:border-box; }
body{
  margin:0; font-family:var(--font-body); font-weight:var(--fw-regular); font-size:var(--fs-body);
  line-height:var(--lh-normal); color:var(--text-body); background:var(--surface-page);
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
}
h1,h2,h3,h4,h5{ font-family:var(--font-display); color:var(--text-strong); line-height:var(--lh-tight);
  letter-spacing:var(--ls-tight); margin:0 0 .5em; }
h1{ font-size:var(--fs-h1); font-weight:var(--fw-light); }
h2{ font-size:var(--fs-h2); font-weight:var(--fw-semibold); }
h3{ font-size:var(--fs-h3); font-weight:var(--fw-medium); }
h4{ font-size:var(--fs-h4); font-weight:var(--fw-semibold); }
p{ margin:0 0 1em; text-wrap:pretty; }
a{ color:var(--text-link); text-decoration:none; }
a:hover{ text-decoration:underline; }
code{ font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:.9em;
  background:var(--indigo-50); padding:.1em .4em; border-radius:var(--radius-xs); color:var(--indigo-800); }
::selection{ background:var(--indigo-200); color:var(--indigo-900); }
:focus-visible{ outline:none; box-shadow:var(--ring); border-radius:var(--radius-xs); }
::placeholder{ color:var(--neutral-400); }
input,select,textarea,button{ font-family:inherit; }

/* ---------- LAYOUT ---------- */
.ifort-page{ min-height:100vh; display:flex; flex-direction:column; background:var(--surface-page); }
.ifort-container{ width:100%; max-width:var(--container-max); margin:0 auto; padding-inline:var(--container-pad); }
.ifort-main{ flex:1; padding-block:var(--space-7) var(--space-9); }
.ifort-header{ position:sticky; top:0; z-index:30; background:rgba(255,255,255,.92);
  backdrop-filter:blur(8px); border-bottom:1px solid var(--border-subtle); }
.ifort-header__inner{ display:flex; align-items:center; justify-content:space-between; gap:var(--space-5);
  padding-block:var(--space-2); }
.ifort-logo{ height:64px; width:auto; display:block; }

/* icône inline + bouton d'aide du header public */
.ui-icon{ display:inline-block; vertical-align:middle; flex:none; }
.help-pill{ display:inline-flex; align-items:center; gap:9px; height:40px; padding:0 16px 0 14px;
  border-radius:var(--radius-pill); border:1.5px solid var(--color-primary); color:var(--color-primary);
  background:var(--surface-card); font-weight:var(--fw-bold); font-size:var(--fs-sm); text-decoration:none;
  transition:background var(--dur-fast) var(--ease-standard); }
.help-pill:hover{ background:var(--color-primary-subtle); text-decoration:none; }
.help-pill__ico{ display:inline-flex; align-items:center; justify-content:center; width:24px; height:24px;
  border-radius:var(--radius-circle); background:var(--color-primary); color:var(--color-on-primary); }

/* eyebrow / section label */
.ifort-overline{ font-family:var(--font-body); font-weight:var(--fw-bold); font-size:var(--fs-overline);
  letter-spacing:var(--ls-overline); text-transform:uppercase; color:var(--color-accent); }

/* ---------- COMPOSANT : bouton ---------- */
.btn{ display:inline-flex; align-items:center; justify-content:center; gap:var(--space-2);
  font-family:var(--font-body); font-weight:var(--fw-bold); text-decoration:none; cursor:pointer;
  border:1.5px solid transparent; border-radius:var(--radius-pill); white-space:nowrap;
  transition:background var(--dur-fast) var(--ease-standard), color var(--dur-fast), border-color var(--dur-fast); }
.btn:hover{ text-decoration:none; }
.btn--sm{ height:var(--control-h-sm); padding:0 var(--space-4); font-size:var(--fs-sm); }
.btn--md{ height:var(--control-h-md); padding:0 var(--space-5); font-size:var(--fs-sm); }
.btn--lg{ height:var(--control-h-lg); padding:0 var(--space-6); font-size:var(--fs-body); }
.btn--primary{ background:var(--color-primary); color:var(--color-on-primary); }
.btn--primary:hover{ background:var(--color-primary-hover); }
.btn--primary:active{ background:var(--color-primary-active); }
.btn--secondary{ background:var(--surface-card); color:var(--color-primary); border-color:var(--color-primary); }
.btn--secondary:hover{ background:var(--color-primary-subtle); }
.btn--ghost{ background:transparent; color:var(--color-primary); }
.btn--ghost:hover{ background:var(--color-primary-subtle); }
.btn--accent{ background:var(--color-accent); color:var(--color-on-accent); }
.btn--accent:hover{ background:var(--color-accent-hover); }
.btn[disabled]{ opacity:.45; pointer-events:none; }

/* ---------- COMPOSANT : carte ---------- */
.card{ background:var(--surface-card); border:1px solid var(--border-subtle); border-radius:var(--radius-lg);
  box-shadow:var(--shadow-sm); padding:var(--space-6); }
.card__title{ font-family:var(--font-display); font-weight:var(--fw-semibold); color:var(--text-strong);
  font-size:var(--fs-h4); margin-bottom:var(--space-3); }

/* ---------- COMPOSANT : champ (field + control) ---------- */
.field{ display:flex; flex-direction:column; gap:var(--space-2); }
.field__label{ font-size:var(--fs-sm); font-weight:var(--fw-bold); color:var(--text-strong); }
.field__req{ color:var(--color-accent); margin-left:2px; }
.field__hint{ font-size:var(--fs-xs); color:var(--text-muted); }
.control{ width:100%; height:var(--control-h-md); padding:0 var(--space-4); font-size:var(--fs-body);
  color:var(--text-body); background:var(--surface-card); border:1.5px solid var(--border-default);
  border-radius:var(--radius-md); outline:none;
  transition:border-color var(--dur-fast), box-shadow var(--dur-fast); }
.control:focus{ border-color:var(--color-primary); box-shadow:var(--ring); }
textarea.control{ height:auto; padding:var(--space-3) var(--space-4); line-height:var(--lh-normal); resize:vertical; }

/* ---------- COMPOSANT : badge ---------- */
.badge{ display:inline-flex; align-items:center; gap:var(--space-2); padding:.35em .8em;
  font-size:var(--fs-xs); font-weight:var(--fw-bold); border-radius:var(--radius-pill); line-height:1; }
.badge--info{ background:var(--info-surface); color:#0f6166; }
.badge--success{ background:var(--success-surface); color:#2f6b36; }
.badge--warning{ background:var(--warning-surface); color:#9a4a08; }
.badge--danger{ background:var(--danger-surface); color:var(--red-700); }
.badge--neutral{ background:var(--neutral-100); color:var(--neutral-600); }

/* ---------- utilitaires légers ---------- */
.stack{ display:flex; flex-direction:column; }
.stack-2{ gap:var(--space-2); } .stack-3{ gap:var(--space-3); } .stack-4{ gap:var(--space-4); } .stack-5{ gap:var(--space-5); } .stack-6{ gap:var(--space-6); }
.row{ display:flex; align-items:center; gap:var(--space-3); flex-wrap:wrap; }
.muted{ color:var(--text-muted); }
.lead{ font-size:var(--fs-lead); color:var(--neutral-700); line-height:var(--lh-relaxed); }

/* ---------- COMPOSANT : checkbox ---------- */
.checkbox{ display:inline-flex; align-items:flex-start; gap:10px; cursor:pointer; font-size:var(--fs-sm);
  color:var(--text-body); line-height:var(--lh-normal); }
.checkbox input{ width:20px; height:20px; accent-color:var(--color-primary); cursor:pointer; margin-top:1px; flex:none; }

/* ---------- COMPOSANT : tag (couleur par formation) ---------- */
.tag{ display:inline-flex; align-items:center; gap:7px; padding:.35em .8em; font-size:var(--fs-xs);
  font-weight:var(--fw-bold); border-radius:var(--radius-pill); background:var(--neutral-100); color:var(--neutral-700); }
.tag__dot{ width:8px; height:8px; border-radius:var(--radius-circle); background:var(--seg-color,var(--seg-teal)); flex:none; }

/* ---------- COMPOSANT : avatar (initiales) ---------- */
.avatar{ display:inline-flex; align-items:center; justify-content:center; width:40px; height:40px;
  border-radius:var(--radius-circle); background:var(--color-primary); color:var(--color-on-primary);
  font-weight:var(--fw-bold); font-size:var(--fs-sm); flex:none; }
.avatar--sm{ width:32px; height:32px; font-size:var(--fs-xs); }
.avatar--lg{ width:56px; height:56px; font-size:var(--fs-h4); }

/* ---------- COMPOSANT : stat (chiffre de preuve) ---------- */
.stat{ display:flex; flex-direction:column; gap:2px; }
.stat__value{ font-family:var(--font-display); font-weight:var(--fw-semibold); font-size:var(--fs-h2);
  color:var(--color-primary); line-height:1; }
.stat__label{ font-size:var(--fs-sm); color:var(--text-muted); }

/* ---------- COMPOSANT : numbered-step (cercle numéroté) ---------- */
.numbered-step{ display:inline-flex; align-items:center; justify-content:center; width:32px; height:32px;
  border-radius:var(--radius-circle); background:var(--color-primary); color:var(--color-on-primary);
  font-weight:var(--fw-bold); font-size:var(--fs-sm); flex:none; }
.numbered-step--done{ background:var(--success); }
.numbered-step--todo{ background:var(--surface-card); color:var(--text-muted); border:2px solid var(--border-default); }

/* ---------- COMPOSANT : radio-card (option cliquable) ---------- */
.radio-card{ display:flex; gap:12px; align-items:flex-start; width:100%; text-align:left; cursor:pointer;
  padding:14px 16px; border:1.5px solid var(--border-default); border-radius:var(--radius-md);
  background:var(--surface-card); font:inherit; color:var(--text-body);
  transition:border-color var(--dur-fast) var(--ease-standard), background var(--dur-fast); }
.radio-card:hover{ border-color:var(--indigo-300); }
.radio-card--selected{ border-color:var(--color-primary); background:var(--color-primary-subtle); }
.radio-card__dot{ width:20px; height:20px; border-radius:var(--radius-circle); border:2px solid var(--border-strong);
  flex:none; margin-top:1px; position:relative; transition:border-color var(--dur-fast); }
.radio-card--selected .radio-card__dot{ border-color:var(--color-primary); }
.radio-card--selected .radio-card__dot::after{ content:""; position:absolute; inset:3px; border-radius:var(--radius-circle);
  background:var(--color-primary); }
.radio-card__body{ display:flex; flex-direction:column; }
.radio-card__label{ font-weight:var(--fw-semibold); color:var(--text-body); }
.radio-card__sub{ font-size:var(--fs-xs); color:var(--text-muted); margin-top:1px; }

/* ---------- Indicateurs de chargement Livewire ---------- */
/* Barre fine en haut, indéterminée. Affichée via wire:loading.delay
   → invisible si la requête est quasi instantanée. */
.lw-bar{ position:fixed; top:0; left:0; right:0; height:3px; z-index:100; background:var(--indigo-100); overflow:hidden; }
.lw-bar__fill{ position:absolute; top:0; height:100%; width:35%; border-radius:var(--radius-pill);
  background:var(--color-primary); animation:lw-slide 1.1s var(--ease-standard) infinite; }
@keyframes lw-slide{ 0%{ left:-35%; } 100%{ left:100%; } }
.spinner{ display:inline-block; vertical-align:middle; width:16px; height:16px; border:2px solid var(--indigo-200);
  border-top-color:var(--color-primary); border-radius:var(--radius-circle); animation:lw-spin .6s linear infinite; }
@keyframes lw-spin{ to{ transform:rotate(360deg); } }
.is-loading{ opacity:.6; transition:opacity var(--dur-fast) var(--ease-standard); }

/* ---------- COMPOSANT : stepper (navigation par étapes) ---------- */
.stepper{ display:flex; align-items:center; flex-wrap:wrap; gap:2px 0; }
.stepper__dot{ display:inline-flex; align-items:center; justify-content:center; width:30px; height:30px;
  border-radius:var(--radius-circle); font-weight:var(--fw-bold); font-size:var(--fs-sm); flex:none;
  text-decoration:none; background:var(--surface-card); color:var(--text-muted);
  border:2px solid var(--border-default); transition:all var(--dur-fast) var(--ease-standard); }
.stepper__dot:hover{ text-decoration:none; }
.stepper__dot--current{ background:var(--color-primary); color:var(--color-on-primary); border-color:var(--color-primary); }
.stepper__dot--done{ background:var(--indigo-100); color:var(--color-primary); border-color:var(--indigo-100); }
.stepper__line{ width:28px; height:2px; background:var(--border-default); flex:none; }
.stepper__line--done{ background:var(--color-primary); }

/* ---------- LAYOUT ADMIN (shell sidebar) ---------- */
.adm-shell{ min-height:100vh; }
.adm-side{ position:fixed; top:0; left:0; bottom:0; width:256px; background:var(--surface-card);
  border-right:1px solid var(--border-subtle); display:flex; flex-direction:column; z-index:40; }
.adm-brand{ display:flex; flex-direction:column; align-items:flex-start; gap:6px; padding:18px 20px 14px; border-bottom:1px solid var(--border-subtle); }
.adm-brand img{ width:100%; height:auto; display:block; }
.adm-eyebrow{ font-size:10.5px; font-weight:var(--fw-bold); letter-spacing:.16em; text-transform:uppercase; color:var(--neutral-400); }
.adm-nav{ flex:1; overflow-y:auto; padding:12px; display:flex; flex-direction:column; gap:6px; }
.adm-group{ display:flex; flex-direction:column; gap:2px; }
.adm-group__label{ font-size:10.5px; font-weight:var(--fw-bold); letter-spacing:.14em; text-transform:uppercase;
  color:#b3b0c4; padding:10px 12px 4px; }
.adm-nav__item{ display:flex; align-items:center; gap:11px; padding:9px 12px; border-radius:10px;
  color:var(--neutral-600); font-weight:var(--fw-semibold); font-size:var(--fs-sm); text-decoration:none;
  transition:background var(--dur-fast) var(--ease-standard), color var(--dur-fast); }
.adm-nav__item:hover{ background:#f6f5fb; text-decoration:none; }
.adm-nav__item--active{ background:#f1eefb; color:var(--color-primary); font-weight:var(--fw-bold);
  box-shadow:inset 3px 0 0 var(--color-primary); }
.adm-nav__count{ display:inline-flex; align-items:center; justify-content:center; min-width:18px; height:18px;
  margin-left:auto; color:var(--indigo-500); font-size:11px; font-weight:var(--fw-bold); line-height:1; }
.adm-nav__count--pending{ padding:0 5px; border-radius:var(--radius-pill); background:var(--danger);
  color:var(--text-on-dark); }
.adm-foot{ display:flex; align-items:center; gap:10px; padding:14px 16px; border-top:1px solid var(--border-subtle); }
.adm-foot__id{ display:flex; flex-direction:column; min-width:0; flex:1; }
.adm-foot__name{ font-size:var(--fs-sm); font-weight:var(--fw-bold); color:var(--text-strong);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.adm-foot__role{ font-size:var(--fs-xs); color:var(--text-muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.adm-foot__logout{ color:var(--text-muted); display:inline-flex; padding:6px; border-radius:8px; }
.adm-foot__logout:hover{ background:var(--surface-sunken); color:var(--color-primary); }
.adm-main{ margin-left:256px; padding:var(--space-6); min-height:100vh; }
.adm-main__inner{ width:100%; max-width:var(--container-max); margin:0 auto; }

@media (max-width:880px){
  .adm-side{ position:sticky; top:0; right:0; bottom:auto; width:100%; height:auto; flex-direction:row;
    align-items:center; border-right:none; border-bottom:1px solid var(--border-subtle); overflow-x:auto; }
  .adm-brand{ border-bottom:none; padding:10px 12px; flex-direction:row; align-items:center; gap:10px; }
  .adm-brand img{ width:auto; height:32px; }
  .adm-eyebrow{ display:none; }
  .adm-nav{ flex-direction:row; padding:6px; gap:4px; }
  .adm-group{ flex-direction:row; }
  .adm-group__label{ display:none; }
  .adm-nav__item{ padding:9px; }
  .adm-nav__item .adm-nav__label{ display:none; }
  .adm-nav__item--active{ box-shadow:none; }
  .adm-foot{ border-top:none; margin-left:auto; }
  .adm-foot__id{ display:none; }
  .adm-main{ margin-left:0; padding:var(--space-5); }
}

/* ---------- Message d'erreur de champ ---------- */
.field__error{ font-size:var(--fs-xs); color:var(--danger); }

/* ---------- LAYOUT AUTH (login centré) ---------- */
.auth-wrap{ min-height:100vh; display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:var(--space-6); padding:var(--space-6); background:var(--surface-page); }
.auth-logo{ height:88px; width:auto; display:block; }
.auth-card{ width:100%; max-width:420px; background:var(--surface-card); border:1px solid var(--border-subtle);
  border-radius:var(--radius-lg); box-shadow:var(--shadow-md); padding:var(--space-7); }

/* ---------- En-tête de page ---------- */
.page-header{ display:flex; align-items:flex-start; justify-content:space-between; gap:var(--space-4); margin-bottom:var(--space-5); }
.page-header__title{ margin:0; }
.page-header__sub{ margin:6px 0 0; color:var(--text-muted); font-size:var(--fs-sm); max-width:60ch; }
.page-header__actions{ flex:none; }
@media (max-width:720px){
  .page-header{ flex-direction:column; align-items:stretch; }
  .page-header__actions{ width:100%; }
  .page-header__actions > .row{ flex-wrap:wrap; }
}

/* ---------- Onglets ---------- */
.tabs{ display:inline-flex; gap:4px; padding:4px; background:#eceaf6; border-radius:var(--radius-pill); }
.tabs__item{ border:none; background:transparent; cursor:pointer; font:inherit; font-weight:var(--fw-semibold);
  font-size:var(--fs-sm); color:var(--neutral-600); padding:8px 18px; border-radius:var(--radius-pill);
  transition:background var(--dur-fast) var(--ease-standard), color var(--dur-fast); }
.tabs__item:hover{ color:var(--color-primary); }
.tabs__item--active{ background:var(--surface-card); color:var(--color-primary); box-shadow:var(--shadow-xs); }

/* ---------- Pastille de statut ---------- */
.status-pill{ display:inline-flex; align-items:center; gap:6px; padding:.3em .7em; font-size:var(--fs-xs);
  font-weight:var(--fw-bold); border-radius:var(--radius-pill); line-height:1; }
.status-pill__dot{ width:7px; height:7px; border-radius:var(--radius-circle); flex:none; }

/* ---------- Ligne-utilisateur ---------- */
.user-row{ display:flex; align-items:center; gap:14px; padding:14px 16px; border:1px solid var(--border-subtle);
  border-radius:var(--radius-md); background:var(--surface-card); text-decoration:none; color:inherit;
  transition:border-color var(--dur-fast) var(--ease-standard), box-shadow var(--dur-fast); }
.user-row:hover{ border-color:var(--indigo-200); box-shadow:var(--shadow-sm); text-decoration:none; }
.user-row--muted{ opacity:.6; }
.user-row__main{ flex:1; min-width:0; display:flex; flex-direction:column; gap:2px; }
.user-row__top{ display:flex; align-items:center; gap:10px; }
.user-row__name{ font-weight:var(--fw-bold); color:var(--text-strong); }
.user-row__email{ font-size:var(--fs-sm); color:var(--text-muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.user-row__side{ display:flex; flex-direction:column; align-items:flex-end; gap:4px; flex:none; }
.user-row__access{ font-size:var(--fs-xs); color:var(--text-muted); }
.user-row__chev{ color:var(--neutral-400); flex:none; }

/* ---------- État vide ---------- */
.empty-state{ display:flex; align-items:center; justify-content:center; gap:10px; padding:var(--space-7);
  border:1.5px dashed var(--border-default); border-radius:var(--radius-md); color:var(--text-muted); font-size:var(--fs-sm); }

/* ---------- Barre d'outils (recherche + filtres) + stats ---------- */
.toolbar{ display:flex; gap:var(--space-3); align-items:center; flex-wrap:wrap; }
.toolbar__search{ flex:1; min-width:220px; }
.stats-grid{ display:grid; grid-template-columns:repeat(4, 1fr); gap:var(--space-3); }
@media (max-width:720px){ .stats-grid{ grid-template-columns:repeat(2, 1fr); } }

/* ---------- Alerte inline ---------- */
.inline-alert{ display:flex; align-items:center; gap:10px; padding:12px 14px; border-radius:var(--radius-md); font-size:var(--fs-sm); }
.inline-alert--success{ background:var(--success-surface); color:#2f6b36; }
.inline-alert--error{ background:var(--danger-surface); color:var(--red-700); }

/* ---------- Retour / lien discret ---------- */
.back-link{ display:inline-flex; align-items:center; gap:6px; font-size:var(--fs-sm); font-weight:var(--fw-semibold); color:var(--text-muted); }
.back-link:hover{ color:var(--color-primary); text-decoration:none; }

/* ---------- Matrice de permissions ---------- */
.perm-matrix{ display:flex; flex-direction:column; gap:8px; }
.perm-row{ display:flex; justify-content:space-between; align-items:center; gap:16px; padding:11px 14px;
  border:1px solid var(--border-subtle); border-radius:var(--radius-md); background:var(--surface-card); flex-wrap:wrap; }
.perm-row__mod{ display:flex; align-items:center; gap:10px; font-weight:var(--fw-semibold); color:var(--text-strong); font-size:var(--fs-sm); }
.perm-row__actions{ display:flex; gap:18px; flex-wrap:wrap; }
.perm-check{ display:inline-flex; align-items:center; gap:6px; font-size:var(--fs-xs); color:var(--text-body); cursor:pointer; }
.perm-check input{ width:17px; height:17px; accent-color:var(--color-primary); cursor:pointer; }
.perm-check--inherited{ color:var(--text-muted); }
.perm-check--inherited input{ cursor:not-allowed; }
.role-choice{ display:flex; gap:12px; align-items:flex-start; width:100%; text-align:left; padding:12px 14px;
  border:1.5px solid var(--border-default); border-radius:var(--radius-md); background:var(--surface-card);
  cursor:pointer; font:inherit; color:inherit; transition:border-color var(--dur-fast) var(--ease-standard), background var(--dur-fast); }
.role-choice:hover:not([disabled]){ border-color:var(--indigo-300); }
.role-choice[disabled]{ cursor:default; }
.role-choice--on{ border-color:var(--color-primary); background:var(--color-primary-subtle); }
.role-choice__check{ flex:none; width:20px; height:20px; display:inline-flex; align-items:center; justify-content:center; color:var(--color-primary); margin-top:1px; }
.role-choice__empty{ width:18px; height:18px; border:2px solid var(--border-strong); border-radius:var(--radius-sm); display:inline-block; }

/* ---------- Toggle (interrupteur) ---------- */
.toggle{ display:inline-flex; align-items:center; gap:10px; background:none; border:none; cursor:pointer; font:inherit; padding:0; color:var(--text-body); }
.toggle__track{ width:40px; height:22px; border-radius:var(--radius-pill); background:var(--neutral-300); position:relative; transition:background var(--dur-fast) var(--ease-standard); flex:none; }
.toggle--on .toggle__track{ background:var(--success); }
.toggle__knob{ position:absolute; top:2px; left:2px; width:18px; height:18px; border-radius:var(--radius-circle); background:#fff; transition:left var(--dur-fast) var(--ease-standard); box-shadow:var(--shadow-xs); }
.toggle--on .toggle__knob{ left:20px; }
.toggle__label{ font-size:var(--fs-sm); font-weight:var(--fw-semibold); }

/* ---------- Petits contrôles (repeaters) ---------- */
.control--sm{ height:36px; padding:0 10px; font-size:var(--fs-sm); }
.rep-row{ display:flex; gap:8px; align-items:center; flex-wrap:wrap; padding:10px 12px; border:1px solid var(--border-subtle); border-radius:var(--radius-md); background:var(--surface-card); }
.rep-row--sub{ margin-left:26px; background:var(--surface-page); }
.icon-btn{ display:inline-flex; align-items:center; justify-content:center; width:30px; height:30px; border:1px solid var(--border-subtle); border-radius:var(--radius-sm); background:var(--surface-card); color:var(--neutral-500); cursor:pointer; transition:all var(--dur-fast); flex:none; }
.icon-btn:hover{ color:var(--color-primary); border-color:var(--indigo-300); }
.icon-btn--danger:hover{ color:var(--danger); border-color:var(--red-300); }
.icon-btn[disabled]{ opacity:.35; pointer-events:none; }
.color-swatch{ width:26px; height:26px; border-radius:var(--radius-circle); border:2px solid transparent; cursor:pointer; padding:0; flex:none; }
.color-swatch--on{ border-color:var(--indigo-900); box-shadow:0 0 0 2px #fff inset; }

/* ---------- Carte formation (liste catalogue) ---------- */
.form-row{ border-left:4px solid var(--seg, var(--color-primary)); }
.form-row__codepill{ display:inline-flex; align-items:center; justify-content:center; min-width:52px; height:30px; padding:0 8px; border-radius:var(--radius-sm); font-weight:var(--fw-bold); font-size:var(--fs-xs); color:#fff; background:var(--seg, var(--color-primary)); flex:none; }
@media (max-width:720px){
  .form-row{ display:grid; grid-template-columns:auto minmax(0,1fr) auto; column-gap:10px; row-gap:6px; }
  .form-row__codepill{ grid-column:1; grid-row:1 / span 2; }
  .form-row .user-row__main{ grid-column:2; grid-row:1; }
  .form-row .user-row__top{ min-width:0; flex-wrap:wrap; }
  .form-row .user-row__name{ min-width:0; overflow-wrap:anywhere; }
  .form-row .user-row__side{ grid-column:2; grid-row:2; flex-direction:row; align-items:center; gap:10px; }
  .form-row .user-row__chev{ grid-column:3; grid-row:1 / span 2; }
}

/* ---------- Annuaire professeurs ---------- */
.prof-grid{ display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:14px; align-items:stretch; }
.prof-grid__empty{ grid-column:1 / -1; }
.prof-card-link{ display:block; min-width:0; color:inherit; text-decoration:none; border-radius:var(--radius-lg); }
.prof-card-link:hover{ text-decoration:none; }
.prof-card-link:focus-visible{ outline:none; box-shadow:var(--ring); }
.prof-card{ display:flex; flex-direction:column; height:100%; min-height:286px; padding:var(--space-5);
  transition:background var(--dur-fast) var(--ease-standard), border-color var(--dur-fast) var(--ease-standard), box-shadow var(--dur-fast) var(--ease-standard); }
.prof-card-link:hover .prof-card, .prof-card-link:focus-visible .prof-card{ background:#f1eefb; border-color:var(--indigo-300); box-shadow:var(--shadow-md); }
.prof-card__head{ display:grid; grid-template-columns:auto minmax(0,1fr) auto; gap:12px; align-items:center; }
.prof-card__identity{ display:flex; flex-direction:column; gap:2px; min-width:0; }
.prof-card__name{ color:var(--text-strong); font-size:var(--fs-body); font-weight:var(--fw-bold); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.prof-card__subject{ color:var(--text-muted); font-size:var(--fs-xs); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.prof-card__email{ margin-top:var(--space-3); color:var(--text-muted); font-size:var(--fs-xs); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.prof-card__badges{ display:flex; flex-wrap:wrap; align-content:flex-start; gap:6px; min-height:50px; margin-top:var(--space-4); }
.prof-card__formations{ margin-top:var(--space-4); padding-bottom:var(--space-5); }
.prof-card__overline{ display:block; margin-bottom:8px; color:var(--text-muted); font-size:11px; font-weight:var(--fw-bold); text-transform:uppercase; }
.prof-card__formation-list{ display:flex; flex-wrap:wrap; gap:6px; min-height:26px; }
.prof-card__formation-list .form-row__codepill{ min-width:42px; height:26px; padding:0 7px; }
.prof-card__empty{ color:var(--text-muted); font-size:var(--fs-xs); line-height:26px; }
.prof-card__footer{ display:flex; align-items:center; gap:14px; margin-top:auto; padding-top:var(--space-4); border-top:1px solid var(--border-subtle); color:var(--text-muted); font-size:var(--fs-xs); }
.prof-card__footer strong{ color:var(--text-strong); font-size:var(--fs-sm); }
.prof-card__footer .ui-icon{ margin-left:auto; color:var(--color-primary); flex:none; }
@media (max-width:1040px){ .prof-grid{ grid-template-columns:repeat(2, minmax(0, 1fr)); } }
@media (max-width:720px){
  .prof-grid{ grid-template-columns:1fr; }
  .prof-card{ min-height:0; }
}

/* ---------- Carte repliable avec résumé (fiches denses) ---------- */
.section-card{ padding:0; overflow:visible; }
.section-card__head{ display:flex; align-items:flex-start; gap:10px; width:100%; text-align:left;
  background:none; border:none; cursor:pointer; font:inherit; color:inherit; padding:18px 20px; }
.section-card__chev{ display:inline-flex; color:var(--neutral-400); margin-top:2px; flex:none;
  transition:transform var(--dur-fast) var(--ease-standard); }
.section-card__titles{ display:flex; flex-direction:column; gap:3px; min-width:0; }
.section-card__summary{ font-size:var(--fs-sm); color:var(--text-muted); line-height:1.5; }
.section-card__body{ padding:0 20px 20px 48px; }
@media (max-width:720px){ .section-card__body{ padding-left:20px; } }

/* ---------- Deux colonnes (fiche détail : rôles | permissions) ---------- */
.two-col{ display:grid; grid-template-columns:1fr 1fr; gap:var(--space-5); align-items:start; }
@media (max-width:900px){ .two-col{ grid-template-columns:1fr; } }

/* ---------- Fiche formation : panneaux metier ---------- */
.formation-editor__panel{
  background:var(--indigo-50);
  border-color:var(--indigo-100);
}
.formation-editor__panel .control{ background:var(--surface-card); }
.formation-editor__tome{
  gap:0;
  overflow:hidden;
  border:1px solid var(--indigo-100);
  border-radius:var(--radius-md);
  background:var(--surface-card);
}
.formation-editor__tome-head{
  border:0;
  border-bottom:1px solid var(--indigo-100);
  border-radius:0;
  background:var(--indigo-50);
  padding:12px;
}
.formation-editor__tome-head .control,
.formation-editor__tome-item .control{ background:var(--surface-card); }
.formation-editor__tome-item{
  margin:10px 12px 0;
  border-color:var(--indigo-100);
  background:var(--surface-card);
}
.formation-editor__tome-actions{ padding:10px 12px 12px; }
.formation-editor__recap{
  border-color:var(--surface-inverse);
  background:var(--surface-inverse);
  color:var(--text-on-dark);
}
.formation-editor__recap .card__title,
.formation-editor__recap strong{ color:var(--text-on-dark); }
.formation-editor__recap .section-card__summary,
.formation-editor__recap .section-card__chev,
.formation-editor__recap .muted{ color:var(--indigo-200); }
.formation-editor__recap .section-card__head:hover{ background:rgba(255,255,255,.06); }
@media (max-width:720px){
  .formation-editor__tome-item{ margin-inline:8px; }
  .formation-editor__tome-actions{ padding-inline:8px; }
}

/* ---------- Matrice de permissions dépliable ---------- */
.perm-mod{ border:1px solid var(--border-subtle); border-radius:var(--radius-md); background:var(--surface-card); }
.perm-mod + .perm-mod{ margin-top:8px; }
.perm-mod__head{ display:flex; justify-content:space-between; align-items:center; gap:12px; padding:10px 12px; flex-wrap:wrap; }
.perm-mod__toggle{ display:inline-flex; align-items:center; gap:8px; background:none; border:none; font:inherit; cursor:pointer;
  color:var(--text-strong); font-weight:var(--fw-semibold); font-size:var(--fs-sm); }
.perm-mod__chev{ display:inline-flex; color:var(--neutral-400); transition:transform var(--dur-fast) var(--ease-standard); }
.perm-mod__cats{ display:flex; gap:16px; flex-wrap:wrap; }
.perm-mod__detail{ border-top:1px dashed var(--border-subtle); padding:12px 14px; background:var(--surface-page);
  display:flex; flex-direction:column; gap:14px; border-radius:0 0 var(--radius-md) var(--radius-md); }

/* Tooltip générique au survol : tout élément portant data-tip (provenance de droits, usages de couleurs…) */
[data-tip]{ position:relative; }
[data-tip]:hover::after{ content:attr(data-tip); position:absolute; left:0; bottom:calc(100% + 6px); z-index:60;
  background:var(--indigo-900); color:#fff; font-size:11px; font-weight:500; line-height:1.4; padding:7px 10px;
  border-radius:8px; width:max-content; max-width:280px; white-space:normal; box-shadow:var(--shadow-md); pointer-events:none; }
.perm-detail__catlabel{ font-size:var(--fs-xs); font-weight:var(--fw-bold); text-transform:uppercase; letter-spacing:.08em;
  color:var(--text-muted); margin-bottom:6px; }
.perm-mod__detail .perm-check{ display:flex; margin:5px 0; }
