/* =====================================================================
   Plateforme DGCMP — Design institutionnel
   Direction : refined utilitarian. Vert profond + accent ocre.
   ===================================================================== */

:root{
  --green-900:#0f2e1d;
  --green-800:#143b27;
  --green-700:#1b5034;
  --green-600:#247046;
  --green-500:#2f8a57;
  --ocre:#c79a3a;
  --ocre-dark:#a87f24;
  --navy-900:#0b2240;
  --navy-800:#102a52;
  --navy-700:#16356b;
  --navy-600:#1f4a86;
  --navy-500:#2a5c93;
  --ink:#162019;
  --muted:#5f6f64;
  --line:#e2e6e0;
  --paper:#f7f6f1;
  --white:#ffffff;
  --red:#b3382e;
  --amber:#c98a18;
  --blue:#2c5d86;
  --radius:10px;
  --shadow:0 1px 2px rgba(15,46,29,.06),0 8px 24px rgba(15,46,29,.06);
  --shadow-sm:0 1px 2px rgba(15,46,29,.08);
  --font-head:"Fraunces","Spectral",Georgia,serif;
  --font-body:"Hanken Grotesk","Segoe UI",system-ui,sans-serif;
}

*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  font-family:var(--font-body);
  color:var(--ink);
  background:var(--paper);
  font-size:13.6px;
  line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
a{color:var(--green-700);text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3,h4{font-family:var(--font-head);font-weight:600;line-height:1.2;color:var(--green-900);margin:0 0 .4em}
h1{font-size:1.5rem;letter-spacing:-.01em}
h2{font-size:1.16rem}
h3{font-size:1rem}
p{margin:0 0 1em}
small{color:var(--muted)}

/* ---------- Layout d'application ---------- */
.app{display:flex;min-height:100vh}
.sidebar{
  width:248px;flex-shrink:0;
  background:linear-gradient(180deg,var(--navy-900),var(--navy-800));
  color:#cdd9ee;display:flex;flex-direction:column;
  position:sticky;top:0;height:100vh;
}
.brand{padding:20px 18px 14px;border-bottom:1px solid rgba(255,255,255,.08)}

/* ---- Emblème DGCMP animé (sidebar) ---- */
.brand-emblem{position:relative;width:78px;height:78px;margin:12px auto 12px;display:grid;place-items:center;
  animation:beFloat 6s ease-in-out infinite}
.brand-emblem img{position:relative;z-index:2;width:64px;height:64px;border-radius:50%;background:#fff;
  object-fit:contain;box-shadow:0 4px 14px rgba(0,0,0,.35);transition:transform .35s ease}
.brand-emblem:hover img{transform:scale(1.06)}
/* Halo doux qui respire */
.brand-emblem .be-halo{position:absolute;inset:-4px;border-radius:50%;z-index:0;
  background:radial-gradient(circle,rgba(252,209,22,.42) 0%,rgba(252,209,22,0) 68%);
  animation:beHalo 3.6s ease-in-out infinite}
/* Anneau ocre en rotation lente, ouvert sur un quart */
.brand-emblem .be-ring{position:absolute;inset:0;border-radius:50%;z-index:1;
  border:2px solid transparent;border-top-color:var(--ocre);border-right-color:rgba(252,209,22,.35);
  animation:beSpin 7s linear infinite}
@keyframes beFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes beHalo{0%,100%{opacity:.45;transform:scale(.94)}50%{opacity:.9;transform:scale(1.06)}}
@keyframes beSpin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){
  .brand-emblem,.brand-emblem .be-halo,.brand-emblem .be-ring{animation:none}
}
.brand .logo{
  width:42px;height:42px;border-radius:9px;display:grid;place-items:center;
  background:var(--ocre);color:var(--navy-900);font-family:var(--font-head);
  font-weight:700;font-size:1.25rem;margin-bottom:10px;
}
.brand b{color:#fff;font-family:var(--font-head);font-size:1.15rem;display:block;letter-spacing:.02em}
.brand span{font-size:.78rem;color:#a9bdd9}
.nav{padding:14px 12px;flex:1;overflow:auto}
.nav .group{font-size:.7rem;text-transform:uppercase;letter-spacing:.12em;color:#7f96bb;margin:16px 12px 6px}
.nav a{
  display:flex;align-items:center;gap:10px;color:#cdd9ee;
  padding:9px 12px;border-radius:8px;font-size:.92rem;margin-bottom:2px;
}
.nav a:hover{background:rgba(255,255,255,.06);text-decoration:none;color:#fff}
.nav a.active{background:var(--navy-500);color:#fff;font-weight:500;box-shadow:inset 3px 0 0 var(--ocre)}
.nav a .ic{width:18px;text-align:center;opacity:.85}
.sidebar .foot{padding:14px 18px;border-top:1px solid rgba(255,255,255,.08);font-size:.82rem}
.sidebar .foot a{color:#a9bdd9}

.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{
  display:flex;align-items:center;justify-content:space-between;
  padding:14px 28px;position:sticky;top:0;z-index:10;
  /* Deux couches : liseré tricolore en pied + dégradé institutionnel */
  background:
    linear-gradient(90deg,#ce1126 0%,#ce1126 33.33%,#fcd116 33.33%,#fcd116 66.66%,#009460 66.66%,#009460 100%) bottom left / 100% 3px no-repeat,
    linear-gradient(100deg,var(--navy-900) 0%,var(--navy-700) 45%,var(--navy-600) 100%);
  box-shadow:0 2px 14px rgba(11,34,64,.22);
}
/* Voile lumineux discret */
.topbar::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:0;
  background:radial-gradient(90% 120% at 12% -30%,rgba(255,255,255,.13),transparent 62%)}
.topbar > *{position:relative;z-index:1}
.topbar .who{display:flex;align-items:center;gap:12px}
/* Contenu du header en clair */
.topbar .page-title strong{color:#fff;font-family:var(--font-head)}
.topbar .bell,.topbar .taskbell{color:#fff;filter:drop-shadow(0 1px 2px rgba(0,0,0,.35))}
.topbar .user-menu-btn{color:#fff}
.topbar .user-menu-btn:hover{background:rgba(255,255,255,.12)}
.topbar .user-menu-btn .um-name{color:#fff}
.topbar .user-menu-btn .um-caret{color:#bcd0ee}
.topbar .avatar{box-shadow:0 0 0 2px rgba(255,255,255,.35)}
.avatar{width:36px;height:36px;border-radius:50%;background:var(--green-600);color:#fff;
  display:grid;place-items:center;font-weight:600;font-size:.9rem}
.role-pill{font-size:.72rem;background:var(--paper);border:1px solid var(--line);
  padding:3px 9px;border-radius:20px;color:var(--muted)}
.content{padding:28px;max-width:1180px;width:100%;flex:1}

/* ================= Pied de page applicatif ================= */
.app-foot{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  padding:14px 28px;border-top:1px solid var(--line);background:var(--white);
  font-size:.82rem;color:var(--muted)}
.app-foot .af-links a{color:var(--navy-600);font-weight:500}
.app-foot .af-links a:hover{color:var(--navy-800)}
.app-foot .af-sep{margin:0 8px;color:var(--line)}
@media(max-width:700px){.app-foot{flex-direction:column;align-items:flex-start;gap:6px}}

/* ---------- Boutons ---------- */
.btn{
  display:inline-flex;align-items:center;gap:7px;cursor:pointer;
  border:1px solid transparent;border-radius:8px;padding:9px 16px;
  font-family:var(--font-body);font-size:.9rem;font-weight:500;
  background:var(--green-700);color:#fff;transition:.15s;
}
.btn:hover{background:var(--green-800);text-decoration:none}
.btn.ghost{background:transparent;border-color:var(--line);color:var(--ink)}
.btn.ghost:hover{background:var(--paper);border-color:#cdd4cc}
.btn.ocre{background:var(--ocre);color:var(--green-900)}
.btn.ocre:hover{background:var(--ocre-dark)}
.btn.danger{background:var(--red)}
.btn.sm{padding:6px 11px;font-size:.82rem}
.btn[disabled]{opacity:.5;cursor:not-allowed}

/* ---------- Cartes & grille ---------- */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:16px;margin-bottom:26px}
.card{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);
  padding:18px 20px;box-shadow:var(--shadow-sm)}
.stat .k{font-size:.78rem;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.stat .v{font-family:var(--font-head);font-size:2rem;color:var(--green-800);font-weight:600;margin-top:4px}
.stat .v.accent{color:var(--ocre-dark)}

.panel{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow-sm);margin-bottom:22px;overflow:hidden}
.panel .head{display:flex;align-items:center;justify-content:space-between;
  padding:16px 20px;border-bottom:1px solid var(--line)}
.panel .head h3{margin:0}
.panel .body{padding:20px}
.panel .body.flush{padding:0}

/* ---------- Tableaux ---------- */
table{width:100%;border-collapse:collapse}
thead th{text-align:left;font-size:.68rem;text-transform:uppercase;letter-spacing:.07em;
  color:var(--muted);padding:11px 16px;border-bottom:1px solid var(--line);background:#fbfbf8}
tbody td{padding:10px 14px;border-bottom:1px solid var(--line);font-size:.86rem;vertical-align:middle}
tbody tr:last-child td{border-bottom:none}
tbody tr:hover{background:#fbfcfa}
.t-num{text-align:right;font-variant-numeric:tabular-nums}

/* ---------- Badges de statut ---------- */
.badge{display:inline-flex;align-items:center;gap:6px;font-size:.76rem;font-weight:600;
  padding:3px 10px;border-radius:20px;border:1px solid transparent}
.badge::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;opacity:.9}
.badge.is-ok{background:#e7f3ec;color:var(--green-600)}
.badge.is-wait{background:#fff4dd;color:var(--amber)}
.badge.is-warn{background:#fdeede;color:#b9690f}
.badge.is-block{background:#fae9e7;color:var(--red)}
.badge.is-todo{background:#eef1f5;color:var(--blue)}
.badge.is-muted{background:#eef0ed;color:var(--muted)}

/* ---------- Stepper (cycle de vie du lot) ---------- */
.stepper{list-style:none;margin:0;padding:0;position:relative}
.stepper li{position:relative;padding:0 0 4px 46px;margin-bottom:4px}
.stepper li::before{ /* ligne verticale */
  content:"";position:absolute;left:17px;top:30px;bottom:-6px;width:2px;background:var(--line);
}
.stepper li:last-child::before{display:none}
.step-card{display:flex;align-items:flex-start;gap:14px;background:var(--white);
  border:1px solid var(--line);border-radius:10px;padding:14px 16px;box-shadow:var(--shadow-sm)}
.step-dot{position:absolute;left:0;top:12px;width:36px;height:36px;border-radius:50%;
  display:grid;place-items:center;font-weight:700;font-size:.85rem;
  background:#eef1f5;color:var(--blue);border:2px solid var(--white);box-shadow:0 0 0 1px var(--line)}
.stepper li.done .step-dot{background:var(--green-600);color:#fff;box-shadow:0 0 0 1px var(--green-600)}
.stepper li.wait .step-dot{background:var(--ocre);color:var(--green-900);box-shadow:0 0 0 1px var(--ocre)}
.stepper li.block .step-dot{background:var(--red);color:#fff;box-shadow:0 0 0 1px var(--red)}
.stepper li.current .step-card{border-color:var(--green-500);box-shadow:0 0 0 3px rgba(47,138,87,.12)}
.step-main{flex:1;min-width:0}
.step-main .ttl{font-weight:600;color:var(--ink)}
.step-main .meta{font-size:.8rem;color:var(--muted);margin-top:2px}
.step-side{display:flex;flex-direction:column;align-items:flex-end;gap:8px}
.dgcmp-tag{font-size:.72rem;color:var(--ocre-dark);font-weight:600;display:flex;align-items:center;gap:5px}

/* ---------- Workflow timeline horizontal ---------- */
.wf{display:flex;gap:0;overflow-x:auto;padding:8px 0}
.wf .node{flex:1;min-width:140px;text-align:center;position:relative;padding:0 8px}
.wf .node::after{content:"";position:absolute;top:18px;left:50%;width:100%;height:2px;background:var(--line);z-index:0}
.wf .node:last-child::after{display:none}
.wf .dot{position:relative;z-index:1;width:38px;height:38px;border-radius:50%;margin:0 auto 8px;
  display:grid;place-items:center;background:#eef1f5;color:var(--muted);font-weight:700;border:2px solid var(--white);box-shadow:0 0 0 1px var(--line)}
.wf .node.passed .dot{background:var(--green-600);color:#fff;box-shadow:0 0 0 1px var(--green-600)}
.wf .node.active .dot{background:var(--ocre);color:var(--green-900);box-shadow:0 0 0 1px var(--ocre)}
.wf .node .lbl{font-size:.8rem;color:var(--ink)}
.wf .node .role{font-size:.7rem;color:var(--muted)}

/* ---------- Formulaires ---------- */
.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px 18px}
.form-grid .full{grid-column:1/-1}
label{display:block;font-size:.82rem;font-weight:500;color:var(--ink);margin-bottom:5px}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],select,textarea{
  width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:8px;
  font-family:var(--font-body);font-size:.9rem;background:var(--white);color:var(--ink);
}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--green-500);box-shadow:0 0 0 3px rgba(47,138,87,.12)}
textarea{resize:vertical;min-height:84px}
.form-actions{display:flex;gap:10px;margin-top:18px}

/* ---------- Flash ---------- */
.flash{padding:12px 16px;border-radius:9px;margin-bottom:16px;font-size:.9rem;border:1px solid}
.flash.success{background:#e7f3ec;border-color:#bfe0cc;color:var(--green-700)}
.flash.error{background:#fae9e7;border-color:#eccdc9;color:var(--red)}

/* ---------- Auth ---------- */
.auth-wrap{min-height:100vh;display:grid;place-items:center;
  background:radial-gradient(1200px 500px at 20% -10%,#1b5034 0,transparent 60%),var(--green-900)}
.auth-card{width:380px;background:var(--white);border-radius:16px;padding:34px 32px;box-shadow:0 20px 60px rgba(0,0,0,.3)}
.auth-card .logo{width:52px;height:52px;border-radius:12px;background:var(--ocre);color:var(--green-900);
  display:grid;place-items:center;font-family:var(--font-head);font-weight:700;font-size:1.5rem;margin-bottom:16px}
.auth-card h1{font-size:1.4rem}
.auth-card .hint{font-size:.78rem;color:var(--muted);margin-top:18px;padding-top:14px;border-top:1px dashed var(--line)}

/* ---------- Divers ---------- */
.page-head{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:20px;gap:16px;flex-wrap:wrap}
.page-head .sub{color:var(--muted);font-size:.88rem}
.breadcrumb{font-size:.82rem;color:var(--muted);margin-bottom:6px}
.breadcrumb a{color:var(--muted)}
.empty{text-align:center;padding:46px 20px;color:var(--muted)}
.empty .ic{font-size:2.2rem;opacity:.4;margin-bottom:8px}
.kv{display:grid;grid-template-columns:160px 1fr;gap:8px 16px;font-size:.9rem}
.kv dt{color:var(--muted)}
.kv dd{margin:0;font-weight:500}
.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:16px}
.spacer{flex:1}
.inline-form{display:inline}
@media(max-width:860px){
  .sidebar{display:none}
  .form-grid{grid-template-columns:1fr}
  .content{padding:18px}
}

/* ---------- Cloche de notifications ---------- */
.bell{position:relative;font-size:1.1rem;text-decoration:none;line-height:1}
.bell:hover{text-decoration:none}
.bell-count{position:absolute;top:-7px;right:-9px;background:var(--red);color:#fff;font-size:.66rem;
  font-weight:700;min-width:16px;height:16px;border-radius:9px;display:grid;place-items:center;padding:0 4px}

/* ---------- Mini-graphiques (statistiques) ---------- */
.bars{display:flex;flex-direction:column;gap:10px}
.bar-row{display:grid;grid-template-columns:160px 1fr 54px;align-items:center;gap:12px;font-size:.85rem}
.bar-track{height:14px;border-radius:7px;background:var(--line);overflow:hidden}
.bar-fill{height:100%;background:linear-gradient(90deg,var(--green-600),var(--green-500))}
.bar-fill.ocre{background:linear-gradient(90deg,var(--ocre),var(--ocre-dark))}
.bar-fill.red{background:var(--red)}
.bar-val{text-align:right;font-variant-numeric:tabular-nums;color:var(--muted)}
.gauge{display:flex;align-items:center;gap:16px}
.gauge svg{flex-shrink:0}
.donut-legend{display:flex;flex-direction:column;gap:6px;font-size:.85rem}
.donut-legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:7px;vertical-align:middle}
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px}
.tile{background:var(--white);border:1px solid var(--line);border-radius:10px;padding:18px 20px}
.tile .k{font-size:.74rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.tile .v{font-family:var(--font-head);font-size:1.9rem;color:var(--green-800);margin-top:4px}
.tile.accent .v{color:var(--ocre-dark)}
.tile.alert .v{color:var(--red)}

/* ---------- Modales ---------- */
dialog.dlg{border:none;border-radius:14px;padding:26px;max-width:620px;width:92%;box-shadow:0 30px 80px rgba(0,0,0,.3)}
dialog.dlg::backdrop{background:rgba(15,46,29,.45)}

/* ---------- Cloche des tâches en attente ---------- */
.taskbell{position:relative;font-size:1.1rem;text-decoration:none;line-height:1;margin-right:4px}
.taskbell:hover{text-decoration:none}
.taskbell .tb-count{position:absolute;top:-7px;right:-9px;background:var(--ocre-dark,#9a7420);color:#fff;
  font-size:.66rem;font-weight:700;min-width:16px;height:16px;border-radius:9px;display:grid;place-items:center;padding:0 4px}

/* ---------- IA : boutons, résultats, assistant ---------- */
.ai-btn{display:inline-flex;align-items:center;gap:6px}
.ai-btn::before{content:"✦";color:var(--ocre-dark,#9a7420)}
.ai-out{display:none;margin-top:12px}
.ai-loading{color:var(--muted);font-style:italic;padding:10px 0}
.ai-error{background:#fdecea;color:#b3382e;border:1px solid #f5c6c0;border-radius:8px;padding:10px 12px;font-size:.88rem}
.ai-result{background:#f8faf5;border:1px solid var(--line);border-left:3px solid var(--ocre,#c79a3a);
  border-radius:8px;padding:12px 14px;font-size:.9rem;line-height:1.55}
.ai-result ul{margin:6px 0 6px 18px;padding:0}
.ai-result li{margin:3px 0}
.ai-insert{margin-top:10px}

.ai-chat-panel .body{display:flex;flex-direction:column;gap:14px}
.ai-thread{min-height:280px;max-height:55vh;overflow-y:auto;display:flex;flex-direction:column;gap:12px;padding:4px}
.ai-msg{display:flex}
.ai-msg.me{justify-content:flex-end}
.ai-msg .bub{max-width:78%;padding:11px 14px;border-radius:14px;font-size:.9rem;line-height:1.5}
.ai-msg.bot .bub{background:#f4f7f1;border:1px solid var(--line);border-bottom-left-radius:4px}
.ai-msg.me .bub{background:var(--green-700,#1c4a30);color:#fff;border-bottom-right-radius:4px}
.ai-msg .bub ul{margin:6px 0 6px 18px}
.ai-compose{display:flex;gap:10px;align-items:flex-end}
.ai-compose textarea{flex:1;resize:vertical;min-height:46px}
.ai-suggests{display:flex;flex-wrap:wrap;gap:8px}
.ai-suggests .chip{background:#fff;border:1px solid var(--line);border-radius:20px;padding:6px 13px;
  font-size:.8rem;cursor:pointer;color:var(--green-800,#143b27)}
.ai-suggests .chip:hover{border-color:var(--ocre,#c79a3a);background:#fcfaf3}

/* ---------- Authentification : en-tête institutionnel ---------- */
.auth-stage{width:min(420px,92vw);display:flex;flex-direction:column;gap:18px}
.auth-state{display:flex;align-items:center;gap:14px;color:#eaf3ec}
.auth-state .state-lines{display:flex;flex-direction:column;line-height:1.35}
.auth-state .state-lines strong{font-family:var(--font-head);font-size:1.02rem;letter-spacing:.04em;text-transform:uppercase}
.auth-state .state-lines em{font-style:italic;opacity:.85;font-size:.84rem}
.auth-state .state-lines span{opacity:.8;font-size:.82rem;margin-top:2px}
/* Emblème : tricolore national vertical (rouge–jaune–vert) */
.emblem{display:flex;width:34px;height:46px;border-radius:5px;overflow:hidden;
  box-shadow:0 4px 14px rgba(0,0,0,.35);flex-shrink:0}
.emblem span{flex:1}
.emblem span:nth-child(1){background:#ce1126}
.emblem span:nth-child(2){background:#fcd116}
.emblem span:nth-child(3){background:#009460}

.auth-card{width:100%}
.auth-brand{display:flex;align-items:center;gap:14px;margin-bottom:20px}
.auth-brand h1{font-size:1.12rem;line-height:1.2;margin:0;color:var(--green-900)}
.auth-brand .org-sub{font-size:.78rem;color:var(--muted);margin:4px 0 0}
.auth-card .field{margin-bottom:14px}
.auth-card .field label{display:block;font-size:.82rem;color:var(--green-800);margin-bottom:5px;font-weight:600}
.auth-card .field input{width:100%}
/* Filet tricolore en haut de la carte */
.auth-card{position:relative;overflow:hidden}
.auth-card::before{content:"";position:absolute;top:0;left:0;right:0;height:4px;
  background:linear-gradient(90deg,#ce1126 0 33.33%,#fcd116 33.33% 66.66%,#009460 66.66% 100%)}

/* ---------- Marque institutionnelle (barre latérale) ---------- */
.brand .state{display:block;font-size:.62rem;letter-spacing:.08em;color:var(--ocre);
  text-transform:uppercase;margin-bottom:2px}
.brand .ministere{display:block;font-size:.64rem;color:rgba(255,255,255,.6);margin-top:3px;line-height:1.3}
.brand-tricolore{height:3px;background:linear-gradient(90deg,#ce1126 0 33.33%,#fcd116 33.33% 66.66%,#009460 66.66% 100%)}

/* ====================== PAGE DE GARDE (landing) ====================== */
.auth-wrap{min-height:100vh;display:block;overflow-y:auto;padding:42px 20px}
.landing{max-width:1080px;margin:0 auto;color:#eaf3ec}

.landing-head{text-align:center;margin-bottom:30px}
.crest{position:relative;width:124px;height:124px;margin:0 auto 16px;display:grid;place-items:center;
  animation:fadeIn .8s ease both, floatY 5s ease-in-out 1.1s infinite}
.crest img{width:104px;height:104px;object-fit:contain;background:#fff;border-radius:50%;
  padding:9px;box-shadow:0 12px 34px rgba(0,0,0,.4);position:relative;z-index:2}
.crest-ring{position:absolute;inset:6px;border-radius:50%;border:2px solid rgba(252,209,22,.55);
  animation:ringPulse 3.4s ease-out infinite}
.state-name{font-family:var(--font-head);font-size:1.6rem;letter-spacing:.04em;text-transform:uppercase;
  margin:0;animation:fadeUp .7s .15s ease both}
.devise{font-style:italic;opacity:.85;margin:4px 0 12px;animation:fadeUp .7s .25s ease both}
.tricolore{width:188px;height:6px;margin:0 auto 12px;border-radius:4px;transform-origin:center;
  background:linear-gradient(90deg,#ce1126 0 33.33%,#fcd116 33.33% 66.66%,#009460 66.66% 100%);
  box-shadow:0 3px 10px rgba(0,0,0,.3);animation:growX .8s .3s ease both}
.ministere{margin:0;font-size:.92rem;opacity:.9;animation:fadeUp .7s .35s ease both}
.organisme{margin:6px 0 0;font-family:var(--font-head);font-size:1.05rem;color:#fff;animation:fadeUp .7s .4s ease both}
.organisme span{color:var(--ocre)}
.brand-row{display:flex;align-items:center;justify-content:center;gap:18px;margin-top:16px;flex-wrap:wrap;
  animation:fadeUp .7s .5s ease both}
.brand-row .totem{height:44px;width:auto;filter:drop-shadow(0 3px 8px rgba(0,0,0,.35))}
.prog-badge{display:inline-flex;align-items:center;gap:6px;background:rgba(252,209,22,.14);
  border:1px solid rgba(252,209,22,.45);color:#fcd116;padding:6px 14px;border-radius:20px;
  font-size:.8rem;font-weight:600;letter-spacing:.02em}

.landing-body{display:grid;grid-template-columns:1.5fr 1fr;gap:28px;align-items:start}
.features-title{font-family:var(--font-head);font-size:1.15rem;color:#fff;margin:0 0 16px;font-weight:600}
.feature-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.feat{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:12px;
  padding:16px;opacity:0;animation:fadeUp .6s var(--d,0s) ease forwards}
.feat .fi{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;font-size:1.05rem;
  background:linear-gradient(135deg,var(--green-600),var(--green-500));color:#fff;margin-bottom:10px}
.feat h4{margin:0 0 5px;font-size:.95rem;color:#fff}
.feat p{margin:0;font-size:.82rem;line-height:1.5;color:rgba(255,255,255,.78)}

.landing-login{position:sticky;top:20px}
.landing-foot{text-align:center;margin-top:28px;font-size:.78rem;color:rgba(255,255,255,.55);
  animation:fadeIn 1s .6s ease both}

@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes fadeUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
@keyframes floatY{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
@keyframes ringPulse{0%{transform:scale(.96);opacity:.7}70%{transform:scale(1.22);opacity:0}100%{opacity:0}}
@keyframes growX{from{transform:scaleX(.2);opacity:0}to{transform:scaleX(1);opacity:1}}

@media (max-width:860px){.landing-body{grid-template-columns:1fr}.landing-login{position:static;max-width:440px;margin:0 auto;width:100%}}
@media (max-width:560px){.feature-grid{grid-template-columns:1fr}}
@media (prefers-reduced-motion:reduce){.crest,.state-name,.devise,.tricolore,.ministere,.organisme,.brand-row,.feat,.landing-foot,.crest-ring{animation:none!important;opacity:1!important;transform:none!important}}

/* ==================== ÉCRAN SCINDÉ : présentation | connexion ==================== */
.auth-split{display:flex;min-height:100vh}

/* --- Panneau présentation (gauche, sombre) --- */
.auth-present{flex:1.4;color:#eaf3ec;display:flex;align-items:center;justify-content:center;
  padding:48px 40px;position:relative;overflow:hidden;
  background:radial-gradient(900px 520px at 28% 8%,#1b5034 0,transparent 55%),linear-gradient(160deg,#0f2e1d 0,#0b2014 100%)}
.present-inner{width:min(440px,100%);text-align:center}
.state-block .state-name{font-family:var(--font-head);letter-spacing:.18em;text-transform:uppercase;
  font-size:1.12rem;margin:0;animation:fadeUp .7s .1s ease both}
.state-block .devise{font-style:italic;opacity:.82;font-size:.85rem;margin:5px 0 12px;animation:fadeUp .7s .2s ease both}
.auth-present .tricolore{width:150px;height:5px;margin:0 auto 12px;border-radius:4px;transform-origin:center;
  background:linear-gradient(90deg,#ce1126 0 33.33%,#fcd116 33.33% 66.66%,#009460 66.66% 100%);
  box-shadow:0 3px 10px rgba(0,0,0,.3);animation:growX .8s .3s ease both}
.state-block .ministere{font-size:.82rem;opacity:.8;margin:0 0 26px;animation:fadeUp .7s .35s ease both}

.present-card{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.12);border-radius:16px;
  padding:24px 22px;max-width:330px;margin:0 auto;animation:fadeUp .7s .4s ease both}
.auth-present .crest{position:relative;width:112px;height:112px;margin:0 auto 8px;display:grid;place-items:center;
  animation:floatY 5s ease-in-out 1s infinite}
.auth-present .crest img{width:96px;height:96px;object-fit:contain;background:#fff;border-radius:50%;
  padding:8px;box-shadow:0 10px 28px rgba(0,0,0,.4);position:relative;z-index:2}
.auth-present .crest-ring{position:absolute;inset:6px;border-radius:50%;border:2px solid rgba(252,209,22,.55);
  animation:ringPulse 3.4s ease-out infinite}
.org-name{font-family:var(--font-head);font-size:1.5rem;margin:12px 0 2px;color:#fff}
.org-full{font-size:.8rem;opacity:.78;margin:0 0 14px;line-height:1.4}
.present-card .totem{height:36px;width:auto;display:block;margin:0 auto 12px;filter:drop-shadow(0 3px 8px rgba(0,0,0,.35))}
.present-card .prog-badge{display:inline-flex;align-items:center;gap:6px;background:rgba(252,209,22,.14);
  border:1px solid rgba(252,209,22,.45);color:#fcd116;padding:6px 13px;border-radius:20px;font-size:.78rem;font-weight:600}

.present-feats{list-style:none;margin:26px auto 0;padding:0;max-width:360px;text-align:left;display:flex;flex-direction:column;gap:13px}
.present-feats li{display:flex;gap:12px;align-items:flex-start;animation:fadeUp .6s var(--d,0s) ease both}
.present-feats .fi{width:30px;height:30px;flex-shrink:0;border-radius:8px;display:grid;place-items:center;font-size:.95rem;
  background:linear-gradient(135deg,var(--green-600),var(--green-500));color:#fff}
.present-feats b{display:block;font-size:.88rem;color:#fff}
.present-feats em{font-style:normal;font-size:.77rem;opacity:.72;line-height:1.4}
.present-badges{display:flex;gap:20px;justify-content:center;margin-top:26px;font-size:.82rem;opacity:.85;
  animation:fadeUp .7s .6s ease both}
.present-badges span{display:inline-flex;gap:6px;align-items:center}

/* --- Panneau connexion (droite, clair) --- */
.auth-box{flex:1;background:#fff;display:flex;align-items:center;justify-content:center;padding:40px}
.login-box{width:min(360px,100%)}
.login-box .welcome{font-family:var(--font-head);font-size:1.75rem;color:var(--green-900);margin:0}
.login-box .welcome-sub{color:var(--muted);margin:4px 0 24px}
.login-box .field{margin-bottom:16px}
.login-box label{display:block;font-size:.82rem;color:var(--green-800);font-weight:600;margin-bottom:6px}
.input-icon{position:relative;display:flex;align-items:center}
.input-icon .ic{position:absolute;left:12px;font-size:.92rem;opacity:.55;pointer-events:none}
.input-icon input{width:100%;padding-left:38px;padding-right:38px}
.input-icon .eye{position:absolute;right:6px;background:none;border:none;cursor:pointer;font-size:1rem;opacity:.55;padding:6px;line-height:1}
.input-icon .eye:hover{opacity:.9}
.login-row{display:flex;align-items:center;justify-content:space-between;margin:2px 0 20px;font-size:.84rem;flex-wrap:wrap;gap:8px}
.login-row .remember{display:flex;align-items:center;gap:7px;color:var(--ink);font-weight:500;margin:0}
.login-row .remember input{width:auto;margin:0}
.login-row .forgot{color:var(--green-600)}
.login-btn{width:100%;justify-content:center;padding:13px;font-size:.96rem}
.login-hint{margin-top:18px;padding-top:14px;border-top:1px dashed var(--line);font-size:.76rem;color:var(--muted);line-height:1.6}
.login-copy{margin-top:18px;text-align:center;font-size:.74rem;color:var(--muted)}

@media (max-width:900px){
  .auth-split{flex-direction:column}
  .auth-present{flex:none;padding:34px 22px}
  .present-feats{display:none}
  .auth-box{flex:none;padding:30px 22px}
}
@media (prefers-reduced-motion:reduce){
  .auth-present .crest,.auth-present .crest-ring,.state-name,.devise,.auth-present .tricolore,
  .ministere,.present-card,.present-feats li,.present-badges{animation:none!important;opacity:1!important;transform:none!important}
}

/* ==================== ÉCRAN SCINDÉ v2 (logos en coins, sans scroll) ==================== */
html,body.auth-body{height:100%}
.auth-body{overflow:hidden}
.auth-split{height:100vh;overflow:hidden}

.auth-present{position:relative;flex:1;height:100vh;overflow:hidden;display:flex;flex-direction:column;
  justify-content:space-between;gap:12px;padding:104px 42px 22px;
  background:linear-gradient(155deg,var(--navy-900) 0,var(--navy-700) 55%,var(--navy-900) 100%)}

/* Logos fixés en haut à gauche (positionnement absolu = robuste) */
.auth-present .crest{position:absolute;top:24px;left:42px;width:68px;height:68px;margin:0;display:grid;place-items:center;
  animation:crestIn .9s cubic-bezier(.2,.85,.3,1) both, floatY 5.5s ease-in-out 1s infinite;z-index:3}
.auth-present .crest.crest-mef{left:122px;right:auto;animation-delay:.18s, 2.4s}
.auth-present .crest img{width:60px;height:60px;object-fit:contain;background:#fff;border-radius:50%;padding:4px;
  box-shadow:0 8px 22px rgba(0,0,0,.45);position:relative;z-index:2;transition:transform .4s ease,box-shadow .4s ease}
.auth-present .crest:hover img{transform:scale(1.09) rotate(-3deg);box-shadow:0 12px 30px rgba(0,0,0,.55)}
/* Halo qui respire, derrière l'emblème */
.auth-present .crest::before{content:"";position:absolute;inset:-8px;border-radius:50%;z-index:0;
  background:radial-gradient(circle,rgba(252,209,22,.40) 0%,rgba(252,209,22,0) 70%);
  animation:crestGlow 4s ease-in-out infinite}
.auth-present .crest.crest-mef::before{animation-delay:1.2s}
/* Anneau ocre en rotation lente */
.auth-present .crest::after{content:"";position:absolute;inset:0;border-radius:50%;z-index:1;
  border:2px solid transparent;border-top-color:rgba(252,209,22,.95);border-right-color:rgba(252,209,22,.30);
  animation:beSpin 8s linear infinite}
.auth-present .crest.crest-mef::after{animation-duration:10s;animation-direction:reverse}
/* Onde qui se propage depuis l'emblème */
.auth-present .crest-ring{position:absolute;inset:2px;border-radius:50%;border:2px solid rgba(252,209,22,.6);
  z-index:1;animation:ringPulse 3.4s ease-out infinite}
.auth-present .crest.crest-mef .crest-ring{animation-delay:1.7s}
@keyframes crestIn{from{opacity:0;transform:scale(.55) translateY(-14px)}to{opacity:1;transform:scale(1) translateY(0)}}
@keyframes crestGlow{0%,100%{opacity:.4;transform:scale(.92)}50%{opacity:.95;transform:scale(1.10)}}
.totem-corner{position:absolute;top:32px;right:44px;height:42px;width:auto;z-index:3;
  filter:drop-shadow(0 3px 8px rgba(0,0,0,.4))}

/* Bloc central lisible */
.present-center{text-align:center}
.auth-present .state-name{color:#ffffff;font-weight:700;letter-spacing:.18em;text-transform:uppercase;
  font-size:1.35rem;margin:0;text-shadow:0 2px 12px rgba(0,0,0,.65);animation:fadeUp .6s .1s ease both}
.auth-present .devise{color:#e4f1e9;font-style:italic;font-size:.92rem;margin:6px 0 10px;animation:fadeUp .6s .2s ease both}
.auth-present .tricolore{width:174px;height:6px;margin:0 auto 10px;border-radius:4px;transform-origin:center;
  background:linear-gradient(90deg,#ce1126 0 33.33%,#fcd116 33.33% 66.66%,#009460 66.66% 100%);
  box-shadow:0 3px 10px rgba(0,0,0,.4);animation:growX .7s .3s ease both}
.auth-present .ministere{color:#cfdcf0;font-size:.85rem;margin:0 0 12px;animation:fadeUp .6s .35s ease both}
.auth-present .org-name{font-family:var(--font-head);color:#fff;font-size:1.85rem;margin:0;line-height:1;
  letter-spacing:.02em;animation:fadeUp .6s .4s ease both}
.auth-present .org-full{color:#bcd0ee;font-size:.82rem;margin:4px 0 10px;animation:fadeUp .6s .45s ease both}
.auth-present .prog-badge{display:inline-flex;align-items:center;gap:6px;background:rgba(252,209,22,.16);
  border:1px solid rgba(252,209,22,.5);color:#fcd116;padding:6px 14px;border-radius:20px;font-size:.78rem;
  font-weight:600;animation:fadeUp .6s .5s ease both}

/* Cartes de fonctionnalités (3 x 2) animées */
.feature-cards{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}
.fcard{flex:1 1 calc(33.333% - 9px);min-width:150px;box-sizing:border-box;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.13);border-radius:11px;
  padding:13px 14px;animation:fadeUp .55s var(--d,0s) ease both}
.fcard .fi{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;font-size:.95rem;
  background:linear-gradient(135deg,var(--green-600),var(--green-500));color:#fff;margin-bottom:8px}
.fcard h4{margin:0 0 3px;font-size:.9rem;color:#fff}
.fcard p{margin:0;font-size:.76rem;line-height:1.4;color:rgba(255,255,255,.76)}

.auth-present .present-badges{display:flex;gap:24px;justify-content:center;font-size:.84rem;color:#e4f1e9;
  animation:fadeUp .6s .6s ease both}
.auth-present .present-badges span{display:inline-flex;gap:6px;align-items:center}

/* Connexion plus étroite */
.auth-box{flex:0 0 380px;background:#fff;display:flex;align-items:center;justify-content:center;padding:32px 34px}
.login-box{width:100%;max-width:320px}

@media (max-width:980px){
  .auth-body,.auth-split{height:auto;overflow:visible}
  .auth-present{height:auto;flex:none;justify-content:flex-start;gap:18px}
  .feature-cards{grid-template-columns:1fr 1fr}
  .auth-box{flex:none;padding:28px 22px}
}
@media (max-height:700px){
  .auth-present{padding:16px 38px;gap:8px}
  .auth-present .org-name{font-size:1.5rem}
  .auth-present .state-name{font-size:1.18rem}
  .fcard{padding:10px 11px}
  .fcard p{font-size:.74rem}
}
@media (prefers-reduced-motion:reduce){
  .auth-present *{animation:none!important;opacity:1!important;transform:none!important}
}

/* ---------- Armoiries animées en haut du sidebar ---------- */
.brand .state{display:block;margin-bottom:8px}
.brand-crest{position:relative;width:58px;height:58px;margin:4px 0 12px;display:grid;place-items:center;
  animation:floatY 5s ease-in-out 1s infinite}
.brand-crest img{width:54px;height:54px;object-fit:contain;background:#fff;border-radius:50%;padding:5px;
  box-shadow:0 6px 18px rgba(0,0,0,.4);position:relative;z-index:2}
.brand-crest-ring{position:absolute;inset:1px;border-radius:50%;border:2px solid rgba(252,209,22,.55);
  animation:ringPulse 3.4s ease-out infinite}
@media (prefers-reduced-motion:reduce){.brand-crest,.brand-crest-ring{animation:none!important}}

/* ================= Sidebar centré ================= */
.brand{text-align:center}
.brand-crest{margin-left:auto;margin-right:auto}
.brand .state, .brand b, .brand .ministere{display:block}

/* ================= Avatars (photo ou initiales) ================= */
.avatar{overflow:hidden}
.avatar img,.avatar-lg img,.avatar-xl img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}
.avatar-lg{width:84px;height:84px;border-radius:50%;background:var(--green-600);color:#fff;
  display:grid;place-items:center;font-weight:600;font-size:1.6rem;overflow:hidden;font-family:var(--font-head)}
.avatar-xl{width:96px;height:96px;border-radius:50%;background:var(--green-600);color:#fff;
  display:grid;place-items:center;font-weight:600;font-size:1.9rem;overflow:hidden;font-family:var(--font-head)}

/* ================= Menu utilisateur (header) ================= */
.user-menu{position:relative}
.user-menu-btn{display:flex;align-items:center;gap:9px;background:transparent;border:1px solid transparent;
  border-radius:30px;padding:4px 10px 4px 4px;cursor:pointer;color:var(--ink);font-family:var(--font-body)}
.user-menu-btn:hover{background:var(--paper)}
.user-menu-btn .um-name{font-weight:600;font-size:.9rem;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.user-menu-btn .um-caret{color:var(--muted);font-size:.7rem}
.user-dropdown{position:absolute;right:0;top:calc(100% + 8px);width:250px;background:#fff;
  border:1px solid var(--line);border-radius:12px;box-shadow:0 16px 40px rgba(15,46,29,.18);
  padding:8px;opacity:0;transform:translateY(-6px);pointer-events:none;transition:.16s;z-index:30}
.user-menu.open .user-dropdown{opacity:1;transform:translateY(0);pointer-events:auto}
.user-dropdown .um-head{display:flex;gap:10px;align-items:center;padding:6px 8px 12px;border-bottom:1px solid var(--line);margin-bottom:6px}
.user-dropdown .um-h-name{font-weight:600;font-size:.92rem;color:var(--green-900)}
.user-dropdown .um-info small{color:var(--muted);font-size:.78rem;display:block;margin:1px 0 5px;
  max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.user-dropdown a{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;color:var(--ink);font-size:.9rem}
.user-dropdown a:hover{background:var(--paper);text-decoration:none}

/* ================= Carte utilisateur (dashboard) ================= */
.user-card{position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:center;
  justify-content:center;text-align:center;gap:8px;aspect-ratio:1/1;
  background:linear-gradient(150deg,var(--navy-600) 0%,var(--navy-800) 55%,var(--navy-900) 100%);
  border-color:var(--navy-700);box-shadow:0 6px 20px rgba(11,34,64,.18)}
/* Voile lumineux + liseré tricolore discret */
.user-card::before{content:"";position:absolute;inset:0;
  background:radial-gradient(120% 80% at 50% -20%,rgba(255,255,255,.16),transparent 60%);pointer-events:none}
.user-card::after{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;
  background:linear-gradient(90deg,#ce1126 0 33.33%,#fcd116 33.33% 66.66%,#009460 66.66% 100%)}
.user-card:hover{text-decoration:none;border-color:var(--ocre);
  box-shadow:0 12px 30px rgba(11,34,64,.30);transform:translateY(-3px)}
.user-card .avatar-lg{box-shadow:0 0 0 3px rgba(255,255,255,.22),0 6px 16px rgba(0,0,0,.28)}
.user-card .uc-name{font-family:var(--font-head);font-weight:600;color:#fff;font-size:1.05rem;line-height:1.2}
.user-card .uc-role{font-size:.8rem;color:#bcd0ee}
.user-card .uc-link{font-size:.78rem;color:var(--ocre);font-weight:600;margin-top:2px}

/* ================= Cartes statistiques colorées ================= */
.card.stat{position:relative;overflow:hidden;transition:transform .18s ease,box-shadow .18s ease;
  background:linear-gradient(160deg,#ffffff,#f5f7fb)}
.card.stat::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;
  background:var(--sc,var(--navy-500))}
.card.stat:hover{transform:translateY(-3px);box-shadow:0 10px 26px rgba(11,34,64,.12)}
.card.stat .k{position:relative}
.card.stat .v{color:var(--sc,var(--navy-700))}
.card.stat .v.accent{color:var(--sc,var(--ocre-dark))}

.stat.s-navy{--sc:var(--navy-500);background:linear-gradient(160deg,#f6f9fd,#e9f0fa)}
.stat.s-ocre{--sc:var(--ocre-dark);background:linear-gradient(160deg,#fdfaf3,#f7eeda)}
.stat.s-green{--sc:var(--green-600);background:linear-gradient(160deg,#f4faf6,#e6f4ec)}
.stat.s-teal{--sc:#0e7f8a;background:linear-gradient(160deg,#f2fafb,#e0f2f4)}
.stat.s-plum{--sc:#7a4a86;background:linear-gradient(160deg,#faf6fc,#f0e7f5)}

/* ================= Apparition en cascade au chargement ================= */
@keyframes cardIn{
  from{opacity:0;transform:translateY(20px) scale(.97)}
  to{opacity:1;transform:translateY(0) scale(1)}
}
.cards .card{animation:cardIn .55s cubic-bezier(.22,.9,.28,1) both}
.cards .card:nth-child(1){animation-delay:.05s}
.cards .card:nth-child(2){animation-delay:.13s}
.cards .card:nth-child(3){animation-delay:.21s}
.cards .card:nth-child(4){animation-delay:.29s}
.cards .card:nth-child(5){animation-delay:.37s}
.cards .card:nth-child(6){animation-delay:.45s}
/* Le survol ne doit pas être écrasé par l'animation d'entrée */
.cards .card:hover{animation:none}
/* Accessibilité : pas d'animation si l'utilisateur la refuse */
@media (prefers-reduced-motion:reduce){
  .cards .card{animation:none}
  .card.stat:hover,.user-card:hover{transform:none}
}

/* ================= Profil ================= */
.profil-head{display:flex;align-items:center;gap:16px;margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--line)}
.profil-head .profil-name{font-family:var(--font-head);font-size:1.2rem;color:var(--green-900);margin-bottom:6px}
.profil-head .field, .panel .field{margin-bottom:0}

@media (prefers-reduced-motion:reduce){.cards .card{animation:none!important}}

/* Nom de l'autorité contractante dans le sidebar (petit) */
.brand .ac-nom{display:block;font-size:.66rem;color:rgba(255,255,255,.72);margin-top:4px;
  line-height:1.3;padding:0 8px;font-weight:500}

/* Arbre des autorités contractantes */
.cat-row td{background:var(--paper);font-weight:600;color:var(--green-900);font-family:var(--font-head);
  text-transform:uppercase;letter-spacing:.04em;font-size:.76rem;padding:8px 14px!important}
.tree-marker{color:var(--muted);margin-right:2px}

/* Circuit DGCMP (page workflow) */
.circuit{list-style:none;margin:0;padding:0;counter-reset:step}
.circuit li{position:relative;padding:12px 14px 12px 50px;margin-bottom:10px;border:1px solid var(--line);
  border-radius:10px;background:linear-gradient(160deg,#fff,#f5f8f5)}
.circuit li::before{counter-increment:step;content:counter(step);position:absolute;left:12px;top:50%;
  transform:translateY(-50%);width:26px;height:26px;border-radius:50%;background:var(--green-700);color:#fff;
  display:grid;place-items:center;font-weight:600;font-size:.82rem;font-family:var(--font-head)}
.circuit li b{color:var(--green-900)}
.circuit li small{color:var(--muted);display:block;margin-top:2px}
.tag-dgcmp{font-size:.7rem;background:var(--ocre);color:var(--green-900);padding:2px 7px;border-radius:20px;margin-left:6px}

/* Page d'administration : cartes-modules */
.admin-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}
.admin-card{display:flex;align-items:center;gap:14px;padding:18px 18px;border:1px solid var(--line);
  border-radius:12px;background:linear-gradient(160deg,#fff,#f5f8f5);box-shadow:var(--shadow-sm);
  transition:.15s;animation:fadeUp .5s ease both}
.admin-card:hover{text-decoration:none;border-color:var(--green-500);box-shadow:0 8px 22px rgba(20,59,39,.12);transform:translateY(-2px)}
.admin-card .ac-ic{width:46px;height:46px;flex:0 0 46px;border-radius:12px;background:var(--green-700);color:#fff;
  display:grid;place-items:center;font-size:1.4rem}
.admin-card .ac-body{flex:1}
.admin-card .ac-t{font-family:var(--font-head);font-weight:600;color:var(--green-900);font-size:1.02rem}
.admin-card .ac-d{font-size:.82rem;color:var(--muted);margin-top:2px;line-height:1.3}
.admin-card .ac-n{font-family:var(--font-head);font-size:1.5rem;color:var(--green-800);font-weight:600}
.admin-cards .admin-card:nth-child(2){animation-delay:.06s}
.admin-cards .admin-card:nth-child(3){animation-delay:.12s}
.admin-cards .admin-card:nth-child(4){animation-delay:.18s}
.admin-cards .admin-card:nth-child(5){animation-delay:.24s}

/* Onglets */
.tabs{display:flex;gap:4px;border-bottom:2px solid var(--line);margin-bottom:18px;flex-wrap:wrap}
.tabs .tab{background:transparent;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;
  padding:10px 16px;cursor:pointer;font-family:var(--font-body);font-size:.92rem;font-weight:500;color:var(--muted)}
.tabs .tab:hover{color:var(--green-800)}
.tabs .tab.active{color:var(--green-900);border-bottom-color:var(--green-700);font-weight:600}
.tab-panel{display:none;animation:fadeUp .35s ease both}
.tab-panel.active{display:block}

/* Accordéon des cycles de vie */
.acc{border:1px solid var(--line);border-radius:12px;background:var(--white);box-shadow:var(--shadow-sm);margin-bottom:12px;overflow:hidden}
.acc-head{width:100%;display:flex;align-items:center;gap:14px;padding:14px 18px;background:transparent;border:none;cursor:pointer;
  font-family:var(--font-body);text-align:left}
.acc-head:hover{background:var(--paper)}
.acc-title{font-family:var(--font-head);font-weight:600;color:var(--green-900);font-size:1.02rem;flex:1}
.acc-meta{font-size:.82rem;color:var(--muted);display:flex;align-items:center;gap:8px}
.acc-caret{color:var(--muted);transition:transform .2s}
.acc.open .acc-caret{transform:rotate(180deg)}
.acc-body{display:none;border-top:1px solid var(--line);padding:8px 18px 16px}
.acc.open .acc-body{display:block;animation:fadeUp .3s ease both}
.steps{list-style:none;margin:8px 0 0;padding:0;counter-reset:st}
.steps .step{position:relative;display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:10px 12px 10px 44px;border:1px solid var(--line);border-radius:9px;margin-bottom:8px;background:#fcfdfc}
.steps .step::before{counter-increment:st;content:counter(st);position:absolute;left:10px;top:50%;transform:translateY(-50%);
  width:24px;height:24px;border-radius:50%;background:var(--green-700);color:#fff;display:grid;place-items:center;
  font-size:.78rem;font-weight:600;font-family:var(--font-head)}
.steps .step.dgcmp{background:#fef9ef;border-color:var(--ocre)}
.steps .step.dgcmp::before{background:var(--ocre-dark)}
.steps .step-lib{flex:1;color:var(--ink)}

/* =====================================================================
   Overlay d'attente — totem de la Guinée
   ===================================================================== */
.dgcmp-loader{position:fixed;inset:0;z-index:9999;display:none;align-items:center;justify-content:center;
  background:rgba(15,46,29,.30);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.dgcmp-loader.on{display:flex;animation:dgcmpFade .18s ease both}
@keyframes dgcmpFade{from{opacity:0}to{opacity:1}}
.dgcmp-loader-card{background:var(--white);border-radius:18px;padding:30px 38px 26px;text-align:center;
  box-shadow:0 30px 80px rgba(0,0,0,.35);width:min(86vw,300px)}
.dgcmp-loader-ring{position:relative;width:124px;height:124px;margin:0 auto 20px;display:grid;place-items:center}
.dgcmp-loader-ring::before{content:"";position:absolute;inset:0;border-radius:50%;
  border:4px solid var(--line);border-top-color:var(--ocre);border-right-color:var(--green-600);
  animation:dgcmpSpin 1s linear infinite}
.dgcmp-loader-halo{position:absolute;inset:14px;border-radius:50%;
  background:radial-gradient(circle at 50% 50%,rgba(199,154,58,.18),transparent 70%);
  animation:dgcmpPulse 1.8s ease-in-out infinite}
.dgcmp-loader-totem{width:80px;height:auto;animation:dgcmpFloat 1.8s ease-in-out infinite;
  filter:drop-shadow(0 5px 9px rgba(15,46,29,.18))}
.dgcmp-loader-fallback{font-family:var(--font-head);font-weight:700;color:var(--green-800);font-size:1.2rem;letter-spacing:.06em}
@keyframes dgcmpSpin{to{transform:rotate(360deg)}}
@keyframes dgcmpPulse{0%,100%{transform:scale(.92);opacity:.6}50%{transform:scale(1.06);opacity:1}}
@keyframes dgcmpFloat{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-6px) scale(1.05)}}
.dgcmp-loader-bar{height:6px;border-radius:6px;overflow:hidden;background:var(--line);position:relative}
.dgcmp-loader-bar span{position:absolute;top:0;left:-45%;height:100%;width:45%;border-radius:6px;
  background:linear-gradient(90deg,#ce1126 0%,#ce1126 33%,#fcd116 33%,#fcd116 66%,#009460 66%,#009460 100%);
  animation:dgcmpSlide 1.15s cubic-bezier(.5,0,.5,1) infinite}
@keyframes dgcmpSlide{0%{left:-45%}100%{left:105%}}
.dgcmp-loader-msg{margin-top:15px;font-family:var(--font-head);color:var(--green-900);font-size:.98rem}

/* Mini-totem pour le chargement IA inline */
.ai-loading{display:flex;align-items:center;gap:9px;color:var(--muted);font-style:italic;padding:10px 0}
.ai-totem{width:24px;height:24px;object-fit:contain;animation:dgcmpFloat 1.6s ease-in-out infinite;flex:none}

/* =====================================================================
   Barre de recherche & filtres (vues marchés, sollicitations…)
   ===================================================================== */
.filterbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;
  padding:9px 16px;border-bottom:1px solid var(--line);background:#fbfbf8}
.filterbar .fb-search{flex:1 1 240px;min-width:150px;position:relative}
.filterbar .fb-search input{width:100%;padding:7px 12px 7px 30px;border:1px solid var(--line);
  border-radius:8px;font:inherit;font-size:.88rem;background:var(--white)}
.filterbar .fb-search::before{content:"🔍";position:absolute;left:9px;top:50%;transform:translateY(-50%);
  font-size:.8rem;opacity:.5}
.filterbar select{width:auto;flex:0 0 auto;max-width:210px;padding:7px 26px 7px 10px;
  border:1px solid var(--line);border-radius:8px;font:inherit;font-size:.86rem;background:var(--white)}
.filterbar .fb-count{margin-left:auto;color:var(--muted);font-size:.82rem;white-space:nowrap}
.fb-empty{text-align:center;padding:30px 20px;color:var(--muted)}

/* Lots proposés par l'IA */
.ai-lots{list-style:none;margin:8px 0 0;padding:0}
.ai-lots li{display:flex;gap:8px;padding:7px 0;border-top:1px solid var(--line)}
.ai-lots li:first-child{border-top:none}
.ai-lots .lot-num{font-weight:600;color:var(--green-800);flex:none;min-width:78px}

/* =====================================================================
   Graphique du cycle de vie (en-tête du lot)
   ===================================================================== */
.lifecycle-graph{display:flex;gap:0;margin-top:18px;overflow-x:auto;padding:4px 0 8px}
.lg-step{flex:1 0 66px;min-width:66px;position:relative;text-align:center;text-decoration:none;padding-top:6px}
.lg-step::before{content:"";position:absolute;top:16px;left:-50%;width:100%;height:3px;background:var(--line);z-index:0}
.lg-step:first-child::before{display:none}
.lg-step.ok::before,.lg-step.cur::before{background:var(--green-500)}
.lg-dot{position:relative;z-index:1;display:inline-grid;place-items:center;width:21px;height:21px;border-radius:50%;
  background:#fff;border:2px solid var(--line);font-size:.62rem;font-weight:600;color:var(--muted)}
.lg-step.ok .lg-dot{background:var(--green-600);border-color:var(--green-600);color:#fff}
.lg-step.wait .lg-dot{background:var(--amber);border-color:var(--amber);color:#fff}
.lg-step.block .lg-dot{background:var(--red);border-color:var(--red);color:#fff}
.lg-step.cur .lg-dot{box-shadow:0 0 0 3px rgba(199,154,58,.35);border-color:var(--ocre)}
.lg-lbl{display:block;font-size:.62rem;margin-top:5px;line-height:1.15;color:var(--muted);max-width:76px;margin-inline:auto}
.lg-step:hover .lg-lbl,.lg-step.cur .lg-lbl{color:var(--green-800)}
.lg-legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:8px;font-size:.74rem;color:var(--muted)}
.lg-legend .d{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:4px;vertical-align:middle}
.lg-legend .d.ok{background:var(--green-600)}
.lg-legend .d.wait{background:var(--amber)}
.lg-legend .d.todo{background:#fff;border:1px solid #c7cec6}
.lg-legend .d.block{background:var(--red)}

/* =====================================================================
   Armoire documentaire par étape
   ===================================================================== */
.armoire{margin:6px 0 4px;border:1px solid var(--line);border-radius:10px;background:#fbfbf8;padding:14px}
.armoire-grid{display:grid;grid-template-columns:minmax(150px,1fr) 2fr;gap:18px}
@media(max-width:640px){.armoire-grid{grid-template-columns:1fr}}
.arm-h{font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:6px}
.arm-attendus ul{margin:0;padding-left:18px;font-size:.85rem}
.arm-attendus li{margin:2px 0}
.arm-empty{color:var(--muted);font-size:.86rem;margin:0 0 10px}
.arm-list{list-style:none;margin:0 0 12px;padding:0}
.arm-list>li{padding:8px 0;border-top:1px solid var(--line)}
.arm-list>li:first-child{border-top:none}
.arm-file{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.arm-file a{font-weight:500}
.arm-file small{color:var(--muted)}
.arm-actions{display:flex;gap:8px;margin-top:5px;flex-wrap:wrap;align-items:center}
.danger-link{color:var(--red)!important;border-color:transparent!important;background:transparent!important;padding:6px 4px!important}
.arm-upload{display:flex;align-items:center;gap:10px;flex-wrap:wrap;border-top:1px dashed var(--line);padding-top:10px}
.arm-upload small{color:var(--muted);flex-basis:100%}
.coh-badge{margin-left:2px}
.doc-coh-out{display:none;margin-top:8px}
.doc-coh-out .ai-result{margin:0}

/* =====================================================================
   Page-étape : liens d'étape, tracker d'états, documents
   ===================================================================== */
.step-link{text-decoration:none;color:inherit;cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .05s}
.step-link:hover{border-color:var(--green-500);box-shadow:0 4px 14px rgba(15,46,29,.08)}
.step-link:active{transform:translateY(1px)}
.step-open{font-size:.74rem;color:var(--ocre-dark);font-weight:600;white-space:nowrap}

/* Tracker des états de traitement */
.state-track{display:flex;gap:0;overflow-x:auto;padding:4px 0 10px}
.st-step{flex:1 0 150px;min-width:140px;position:relative;text-align:center;padding:6px 10px 2px}
.st-step::before{content:"";position:absolute;top:24px;left:-50%;width:100%;height:3px;background:var(--line);z-index:0}
.st-step:first-child::before{display:none}
.st-step.done::before,.st-step.active::before{background:var(--green-500)}
.st-step.blocked::before{background:var(--red)}
.st-dot{position:relative;z-index:1;margin:0 auto 9px;width:36px;height:36px;border-radius:50%;display:grid;place-items:center;
  background:#fff;border:2px solid var(--line);color:var(--muted);font-weight:700;font-size:.95rem}
.st-step.done .st-dot{background:var(--green-600);border-color:var(--green-600);color:#fff}
.st-step.active .st-dot{background:#fff;border-color:var(--ocre);color:var(--ocre-dark);box-shadow:0 0 0 4px rgba(199,154,58,.22)}
.st-step.blocked .st-dot{background:var(--red);border-color:var(--red);color:#fff}
.st-body{padding:0 4px}
.st-body .st-t{font-weight:600;color:var(--ink);font-size:.9rem;line-height:1.25}
.st-step.todo .st-body .st-t{color:var(--muted)}
.st-body .st-d{font-size:.74rem;color:var(--muted);margin-top:3px;line-height:1.3}
.state-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:18px;padding-top:16px;border-top:1px solid var(--line)}
.state-note{margin:0;font-size:.9rem;color:var(--muted)}
.state-note.ok{color:var(--green-700);font-weight:600}
.state-note.block{color:var(--red);font-weight:600}
.dgcmp-timeline{margin-top:14px;font-size:.85rem}
.dgcmp-timeline summary{cursor:pointer;color:var(--green-800);font-weight:600}
.dgcmp-timeline ul{list-style:none;margin:10px 0 0;padding:0;border-left:2px solid var(--line)}
.dgcmp-timeline li{padding:5px 0 5px 14px;position:relative}
.dgcmp-timeline li::before{content:"";position:absolute;left:-5px;top:11px;width:8px;height:8px;border-radius:50%;background:var(--green-500)}
.dgcmp-timeline .tl-date{color:var(--muted);margin-right:6px}

/* Documents attendus */
.attendus-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px;margin-bottom:16px}
.att-card{border:1px solid var(--line);border-radius:10px;padding:12px 14px;background:#fbfbf8;display:flex;flex-direction:column;gap:10px}
.att-name{font-weight:500;font-size:.9rem;line-height:1.25}
.att-acts{display:flex;gap:8px;flex-wrap:wrap;margin-top:auto}
.att-upload{border-top:1px dashed var(--line);padding-top:14px;display:flex;flex-direction:column;gap:8px}
.att-upload label{font-weight:600;font-size:.85rem}
.att-upload-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.att-upload small{color:var(--muted)}

/* Liste des pièces */
.doc-list{list-style:none;margin:0;padding:0}
.doc-list>li{padding:12px 0;border-top:1px solid var(--line)}
.doc-list>li:first-child{border-top:none}
.doc-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.doc-ico{flex:0 0 38px;width:38px;height:38px;border-radius:9px;display:grid;place-items:center;font-size:1.1rem}
.doc-ico.imp{background:#eef3ee}
.doc-ico.ia{background:#f6efda}
.doc-meta{flex:1;min-width:160px}
.doc-name{font-weight:600}
.doc-sub{font-size:.8rem;color:var(--muted);margin-top:2px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.origine{font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;padding:2px 7px;border-radius:20px;font-weight:700}
.origine.imp{background:#e7efe9;color:var(--green-800)}
.origine.ia{background:#f3e7c4;color:var(--ocre-dark)}
.doc-acts{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.coh-badge{margin-left:2px}
.doc-coh-out{display:none;margin-top:10px}
.doc-coh-out .ai-result{margin:0}
@media(max-width:560px){.doc-acts{width:100%}}

/* Aperçu PDF inline */
.dlg-preview{max-width:920px;width:94%;padding:0;border:none;border-radius:14px;overflow:hidden}
.dlg-preview::backdrop{background:rgba(15,46,29,.5)}
.dp-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;background:var(--green-900);color:#fff}
.dp-head strong{font-family:var(--font-head);font-size:1rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dp-actions{display:flex;gap:8px;flex-shrink:0}
.dp-head .btn.ghost{border-color:rgba(255,255,255,.4);color:#fff}
.dlg-preview iframe{display:block;width:100%;height:78vh;border:0;background:#525659}

/* Nom complet de la plateforme (page de connexion) */
.auth-present .platform-name{color:#fff;font-family:var(--font-head);font-size:1.02rem;line-height:1.35;
  margin:12px auto 0;max-width:30ch;font-weight:600;animation:fadeUp .6s .55s ease both}

/* Header : titre long de la plateforme */
.topbar .page-title{flex:1;min-width:0;padding-right:18px}
.topbar .page-title strong{font-size:1.02rem;line-height:1.2;display:block;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:900px){.topbar .page-title strong{font-size:.9rem}}

/* ================= Pages institutionnelles ================= */
.mb0{margin-bottom:0}
.muted-note{color:var(--muted);font-size:.9rem}
.cards-2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px}

/* Liste des textes de référence */
.ref-list{display:flex;flex-direction:column;gap:14px}
.ref-item{display:flex;gap:14px;align-items:flex-start;padding:14px;border:1px solid var(--line);
  border-radius:var(--radius);background:linear-gradient(160deg,#ffffff,#f5f8fc);
  border-left:4px solid var(--navy-500);transition:transform .18s ease,box-shadow .18s ease}
.ref-item:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(11,34,64,.10)}
.ref-badge{flex-shrink:0;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;
  color:#fff;background:var(--navy-600);padding:5px 10px;border-radius:20px;margin-top:2px}
.ref-title{font-family:var(--font-head);font-weight:600;color:var(--navy-900);font-size:1.02rem;margin-bottom:4px}
.ref-desc{margin:0;font-size:.92rem;color:var(--ink);line-height:1.55}

/* Listes des conditions d'utilisation */
.cgu-list{margin:0 0 1em;padding-left:20px}
.cgu-list li{margin-bottom:7px;line-height:1.55}
.cgu-list li::marker{color:var(--ocre-dark)}

/* ================= Retour au portail ================= */
.auth-box{position:relative}
.portail-back{position:absolute;top:18px;right:22px;display:inline-flex;align-items:center;gap:6px;
  padding:7px 13px;border-radius:20px;font-size:.8rem;font-weight:600;color:var(--navy-700);
  background:#eef3fb;border:1px solid #d6e2f3;text-decoration:none;transition:.2s}
.portail-back:hover{background:var(--navy-600);color:#fff;border-color:var(--navy-600);text-decoration:none}
.sidebar .foot{display:flex;align-items:center;justify-content:space-between;gap:10px}
.sidebar .foot .foot-portail{color:var(--ocre);font-weight:600}
.sidebar .foot .foot-portail:hover{color:#fff;text-decoration:none}
@media(max-width:900px){.portail-back{position:static;margin-bottom:14px}}

/* ================= Page de connexion harmonisée avec les modules ================= */
.auth-present .medallion{position:relative;width:138px;height:138px;margin:0 auto 14px;border-radius:50%;background:#fff;
  display:grid;place-items:center;box-shadow:0 0 0 4px var(--ocre),0 0 0 14px rgba(252,209,22,.12),0 22px 50px rgba(0,0,0,.45);
  animation:crestIn .9s cubic-bezier(.2,.85,.3,1) both, floatY 6s ease-in-out 1.2s infinite}
.auth-present .medallion img{width:122px;height:122px;object-fit:contain;border-radius:50%}
.auth-present .medallion::after{content:"";position:absolute;inset:-9px;border-radius:50%;border:2px dashed rgba(252,209,22,.6);animation:beSpin 28s linear infinite}
.portail-back{display:none}
.btn.btn-portail{width:100%;justify-content:center;margin-top:10px;padding:12px;font-size:.94rem;font-weight:600;
  background:#fffaf0;color:var(--navy-800);border:1.5px solid var(--ocre);border-radius:10px;text-decoration:none}
.btn.btn-portail:hover{background:var(--ocre);color:var(--navy-900);text-decoration:none}
.login-copy a{color:var(--ocre-dark);font-weight:600;text-decoration:none}
@media (prefers-reduced-motion:reduce){.auth-present .medallion,.auth-present .medallion::after{animation:none}}
