:root{
  --bg:#F5F7FA; --sur:#FFFFFF; --txt:#141C2B; --doux:#5A6880; --faible:#8894A8;
  --marine:#16233A; --indigo:#4F46E5; --indigo2:#EEF0FE; --vert:#0E9F6E; --vert2:#E8F8F2;
  --ambre:#C2740A; --ambre2:#FEF6E7; --rouge:#DC2626; --rouge2:#FEF2F2; --bord:#E7ECF3;
  --o1:0 1px 2px rgba(20,28,43,.04);
  --o2:0 2px 4px rgba(20,28,43,.04),0 8px 24px rgba(20,28,43,.06);
  --t:200ms cubic-bezier(.4,0,.2,1);
  --e1:4px; --e2:8px; --e3:12px; --e4:16px; --e5:24px; --e6:32px;
  --sans:'Inter',system-ui,-apple-system,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,monospace;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--txt);
  font:400 14.5px/1.6 var(--sans);-webkit-font-smoothing:antialiased;
  letter-spacing:-.006em;padding-bottom:env(safe-area-inset-bottom)}
h1,h2{margin:0;font-weight:700;letter-spacing:-.018em}
h1{font-size:17px} h2{font-size:16px}
h3{margin:0;font-size:13.5px;font-weight:600;color:var(--doux)}
a{color:var(--indigo)}
.mono,code{font-family:var(--mono);font-variant-numeric:tabular-nums}

/* ---------- entete ---------- */
.entete{background:var(--marine);color:#fff;padding:0 var(--e5);min-height:60px;
  padding-top:env(safe-area-inset-top);display:flex;align-items:center;gap:20px;flex-wrap:wrap}
.marque{display:flex;align-items:center;gap:10px;font-weight:700;font-size:15px;letter-spacing:-.01em}
.marque .b{width:30px;height:30px;border-radius:9px;flex:none;
  background:linear-gradient(135deg,#4F46E5,#7C6CF6);display:grid;place-items:center;font-size:13px}
.entete nav{display:flex;gap:3px;flex-wrap:wrap}
/* La deconnexion est un POST : en GET, une simple image distante suffisait a
   deconnecter un technicien. Le bouton reprend le style du lien. */
.entete nav form{display:contents}
.entete nav a,.entete nav button{color:rgba(255,255,255,.72);text-decoration:none;font-size:14px;font-weight:500;
  padding:9px 13px;border-radius:9px;min-height:44px;display:inline-flex;align-items:center;gap:7px;
  transition:background var(--t),color var(--t)}
.entete nav button{background:none;border:none;cursor:pointer;font-family:inherit}
.entete nav a:hover,.entete nav button:hover{background:rgba(255,255,255,.09);color:#fff}
.entete nav a[aria-current=page]{background:rgba(255,255,255,.14);color:#fff}
.moi{margin-left:auto;display:flex;align-items:center;gap:9px;font-size:13.5px;color:rgba(255,255,255,.8)}
.av{width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.15);display:grid;
  place-items:center;font-weight:600;font-size:12.5px;color:#fff;flex:none}
main{max-width:940px;margin:0 auto;padding:26px 20px 48px}
.pied{max-width:940px;margin:0 auto;padding:0 20px 40px;color:var(--faible);font-size:12.5px}

/* ---------- cartes ---------- */
.carte{background:var(--sur);border:1px solid var(--bord);border-radius:16px;
  box-shadow:var(--o1);padding:24px;margin-bottom:18px}
.carte.ok{background:linear-gradient(180deg,#F2FBF7,#fff 60%);border-color:#C8EBDC;box-shadow:var(--o2)}
.carte.fin{background:linear-gradient(180deg,#FDF6F6,#fff 60%);border-color:#F3CFCF}
.carte-t{display:flex;align-items:center;gap:11px;margin-bottom:6px;flex-wrap:wrap}
.carte-t .i{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;flex:none}
.i-v{background:var(--vert2);color:var(--vert)} .i-i{background:var(--indigo2);color:var(--indigo)}
.i-n{background:#EEF1F6;color:var(--doux)} .i-r{background:var(--rouge2);color:var(--rouge)}
.sous{color:var(--doux);font-size:13.5px;margin:0 0 18px 45px}
.centre{max-width:430px;margin:7vh auto 0}
.centre .sous{margin-left:0}

/* ---------- commande ---------- */
.cmd{background:#101828;border-radius:12px;padding:15px 52px 15px 16px;position:relative;
  font:400 12.5px/1.8 var(--mono);color:#CBD5E1;word-break:break-all}
.cmd b{color:#7DD3FC;font-weight:400}
.copier{position:absolute;top:11px;right:11px;width:34px;height:34px;border-radius:9px;border:none;
  background:rgba(255,255,255,.09);color:#94A3B8;cursor:pointer;display:grid;place-items:center;
  transition:background var(--t),color var(--t)}
.copier:hover{background:rgba(255,255,255,.18);color:#fff}
.compte{display:inline-flex;align-items:center;gap:6px;background:var(--ambre2);color:var(--ambre);
  font:500 12.5px var(--mono);padding:4px 11px;border-radius:99px;white-space:nowrap}
.compte.fini{background:var(--rouge2);color:var(--rouge)}

/* ---------- formulaires ---------- */
.champ{margin-bottom:var(--e4)}
label{display:block;font-size:13px;font-weight:600;margin-bottom:7px}
.aide{font-size:12.5px;color:var(--faible);margin:8px 0 0}
/* Etat d un compte qui attend encore la definition de son mot de passe. */
.attente{margin-top:var(--e4);padding:14px 15px;border-radius:12px;
  background:var(--ambre2);border:1px solid #F5DFB4}
.attente-t{display:flex;align-items:center;gap:7px;margin:0 0 4px;
  font:600 13px/1.4 var(--sans);color:var(--ambre)}
.attente .aide{color:#93601A}
input[type=text],input[type=password],input[type=email],input[type=tel],
input[type=search],input[type=number],select{
  width:100%;min-height:44px;padding:0 14px;font:400 14.5px var(--sans);color:var(--txt);
  background:#FBFCFE;border:1.5px solid var(--bord);border-radius:11px;
  transition:border-color var(--t),box-shadow var(--t),background var(--t)}
input:focus,select:focus{outline:none;border-color:var(--indigo);background:#fff;
  box-shadow:0 0 0 4px rgba(79,70,229,.1)}
input::placeholder{color:#A9B4C4}
a:focus-visible,button:focus-visible{outline:2px solid var(--indigo);outline-offset:2px}
.code-otp{font-family:var(--mono);font-size:26px;letter-spacing:.4em;text-align:center;padding-left:.4em}
.case{display:flex;align-items:flex-start;gap:11px;cursor:pointer;padding:10px 0;min-height:44px}
.case input{width:20px;height:20px;margin:2px 0 0;accent-color:var(--indigo);cursor:pointer;flex:none}
.case span{font-size:13.5px;color:var(--doux)}

/* ---------- boutons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;
  padding:0 20px;font:600 14px var(--sans);border:1.5px solid transparent;border-radius:11px;
  cursor:pointer;text-decoration:none;transition:background var(--t),transform var(--t),border-color var(--t)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn-1{background:var(--indigo);color:#fff;
  box-shadow:0 1px 2px rgba(79,70,229,.3),0 4px 12px rgba(79,70,229,.16)}
.btn-1:hover:not(:disabled){background:#4338CA;transform:translateY(-1px)}
.btn-2{background:#fff;color:var(--txt);border-color:var(--bord)}
.btn-2:hover:not(:disabled){background:#F7F9FC;border-color:#D3DBE7}
.btn-v{background:var(--vert);color:#fff;box-shadow:0 1px 2px rgba(14,159,110,.3),0 4px 12px rgba(14,159,110,.16)}
.btn-v:hover:not(:disabled){background:#0B8A5F;transform:translateY(-1px)}
.btn-d{background:#fff;color:var(--rouge);border-color:#F3CFCF}
.btn-d:hover:not(:disabled){background:var(--rouge2)}
.btn-l{background:none;border:none;color:var(--indigo);padding:10px 4px;font-weight:500;
  text-decoration:underline;text-underline-offset:3px}
.btn-l:hover{color:#4338CA}
.btn-p{min-height:34px;padding:0 12px;font-size:12.5px;border-radius:8px}
.plein{width:100%}
.actions{display:flex;gap:var(--e2);flex-wrap:wrap;align-items:center}

/* ---------- messages ---------- */
.msg{display:flex;gap:11px;align-items:flex-start;padding:13px 15px;border-radius:12px;
  font-size:13.8px;margin-bottom:var(--e3);border:1px solid}
.msg svg{flex:none;margin-top:2px}
.msg-e{background:var(--rouge2);border-color:#F3CFCF;color:#991B1B}
.msg-s{background:var(--vert2);border-color:#C8EBDC;color:#065F46}
.msg-i{background:var(--indigo2);border-color:#D5D8FB;color:#3730A3}

/* ---------- listes ---------- */
.lignes{display:flex;flex-direction:column;gap:9px}
.l{display:flex;align-items:center;gap:13px;padding:13px 15px;border:1px solid var(--bord);
  border-radius:12px;background:#FCFDFE;transition:border-color var(--t),background var(--t),box-shadow var(--t)}
.l:hover{border-color:#D3DBE7;background:#fff;box-shadow:var(--o1)}
.l .n{font-weight:600;font-size:14px}
.l .d{font:400 12.5px var(--mono);color:var(--faible)}
.l .r{margin-left:auto;text-align:right;display:flex;align-items:center;gap:10px}
.ip{font:400 11.5px var(--mono);color:var(--faible);display:block;margin-top:3px}

/* ---------- tableaux ---------- */
.tableau{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 -24px;padding:0 24px}
table{width:100%;border-collapse:collapse;font-size:13.5px;min-width:560px}
th{text-align:left;font-size:11.5px;font-weight:600;color:var(--faible);letter-spacing:.02em;
  padding:0 14px 10px;border-bottom:1px solid var(--bord);white-space:nowrap}
td{padding:12px 14px;border-bottom:1px solid #F2F5F9;vertical-align:middle}
tr:last-child td{border-bottom:none}
tbody tr{transition:background var(--t)}
tbody tr:hover{background:#FAFCFE}
td.num,th.num{font-variant-numeric:tabular-nums;font-family:var(--mono);font-size:12.5px}

/* ---------- pastilles ---------- */
.p{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:99px;
  font-size:12px;font-weight:600;white-space:nowrap}
.p-v{background:var(--vert2);color:var(--vert)}
.p-a{background:var(--ambre2);color:var(--ambre)}
.p-r{background:var(--rouge2);color:var(--rouge)}
.p-n{background:#EEF1F6;color:var(--doux)}

/* ---------- indicateurs ---------- */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--e3);
  margin-bottom:18px}
.kpi{background:var(--sur);border:1px solid var(--bord);border-radius:14px;padding:18px 20px;
  box-shadow:var(--o1)}
.kpi .v{font-family:var(--mono);font-size:27px;font-weight:500;font-variant-numeric:tabular-nums;
  line-height:1.15}
/* .kpi .l heritait de .l (bordure, fond, padding) : les libelles des
   indicateurs s affichaient comme des cartes imbriquees. */
.kpi .l{display:block;padding:0;border:none;background:none;border-radius:0;box-shadow:none;
  font-size:12.5px;color:var(--faible);margin-top:3px}
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}
.recherche{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:var(--e4)}
.recherche input{flex:1;min-width:220px}
.onglets{display:flex;gap:2px;border-bottom:1px solid var(--bord);margin:0 0 var(--e4)}
.onglets a{display:inline-flex;align-items:center;gap:8px;min-height:42px;padding:0 14px;
  border-bottom:2px solid transparent;color:var(--faible);font-size:13.5px;font-weight:600;
  text-decoration:none}
.onglets a:hover{color:var(--txt);background:#F8FAFC}
.onglets a[aria-current=page]{color:var(--indigo);border-bottom-color:var(--indigo)}
.onglets span{font:500 11.5px var(--mono);padding:2px 6px;border-radius:8px;background:#EEF1F6}
/* Chaque technicien avait un formulaire complet deplie : a quatre c est
   confortable, a quinze la page devient illisible. Repli natif, sans JS. */
.fiche summary{display:flex;align-items:center;gap:11px;cursor:pointer;list-style:none;
  padding:2px 0;flex-wrap:wrap}
.fiche summary::-webkit-details-marker{display:none}
.fiche summary::after{content:'';margin-left:auto;width:8px;height:8px;flex:none;
  border-right:2px solid var(--faible);border-bottom:2px solid var(--faible);
  transform:rotate(45deg);transition:transform var(--t)}
.fiche[open] summary::after{transform:rotate(-135deg)}
.fiche summary .qui{display:flex;flex-direction:column;gap:2px;min-width:0}
.fiche summary .qui .d{font:400 12.5px var(--mono);color:var(--faible)}
.fiche summary .etats{display:flex;gap:6px;flex-wrap:wrap}
.fiche[open] summary{margin-bottom:var(--e3);padding-bottom:var(--e3);
  border-bottom:1px solid var(--bord)}
.pages{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:var(--e3);
  font-size:12.5px;color:var(--faible)}
.pages a{color:var(--indigo);text-decoration:none;font-weight:600;padding:6px 10px;
  border-radius:8px;border:1px solid var(--bord);min-height:34px;display:inline-flex;align-items:center}
.pages a:hover{background:var(--indigo2)}
.vide{text-align:center;padding:var(--e6) var(--e4);color:var(--faible);font-size:13.5px}
.vide svg{color:#CBD5E1;margin-bottom:var(--e2)}

.grille{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:0 var(--e5)}
.fige{margin:0;padding:11px 14px;background:#F4F7FB;border:1.5px solid var(--bord);
  border-radius:11px;color:var(--doux);font-size:14px}
/* defilement horizontal : ombre a droite tant qu il reste du contenu */
.tableau{position:relative}
.tableau::after{content:"";position:sticky;right:0;top:0;float:right;width:34px;height:100%;
  margin-right:-34px;pointer-events:none;
  background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.96))}
.indice{display:none;font-size:12px;color:var(--faible);margin:0 0 10px;align-items:center;gap:6px}

/* ---------- barre de navigation basse, mobile uniquement ---------- */
.basse{display:none}
@media (max-width:700px){
  .basse{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:40;
    background:rgba(255,255,255,.94);backdrop-filter:saturate(180%) blur(12px);
    -webkit-backdrop-filter:saturate(180%) blur(12px);
    border-top:1px solid var(--bord);
    padding:6px 4px calc(6px + env(safe-area-inset-bottom));
    box-shadow:0 -1px 3px rgba(20,28,43,.05)}
  .basse form{display:contents}
  .basse button{background:none;border:none;cursor:pointer;font-family:inherit}
  .basse a,.basse button{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
    gap:3px;min-height:52px;padding:5px 2px;border-radius:12px;text-decoration:none;
    color:var(--faible);font-size:10.5px;font-weight:600;letter-spacing:-.01em;
    transition:color var(--t),background var(--t)}
  .basse a svg{width:22px;height:22px}
  .basse a:active,.basse button:active{background:#EEF1F6}
  .basse a[aria-current=page]{color:var(--indigo)}
  .basse a[aria-current=page] svg{stroke-width:2.1}
  body{padding-bottom:calc(66px + env(safe-area-inset-bottom))}
  .pied{padding-bottom:20px}
  /* la navigation du haut disparait, elle est remplacee par celle du bas */
  .entete nav{display:none}
  .entete{justify-content:space-between}
  .marque{font-size:15px;gap:10px}
  .moi .nom{display:inline}
}

@media (max-width:700px){
  .entete{padding:0 var(--e3);gap:10px;min-height:56px}
  .entete nav a span{display:none}
  .entete nav a{padding:9px 11px}
  main{padding:16px 13px 40px}
  .pied{padding:0 13px 32px}
  .carte{padding:18px;border-radius:14px}
  .sous{margin-left:0}
  .tableau{margin:0 -18px;padding:0 18px}
  .indice{display:flex}
  /* en-tete sur une seule ligne, nom masque : l identite est en pied de page */
  .entete{flex-wrap:nowrap;overflow:hidden}
  .marque{font-size:0;gap:0}
  .marque .b{margin-right:2px}
  .moi .nom{display:none}
  .moi{gap:0}
  /* lignes de liste empilees plutot que comprimees */
  .l{flex-direction:column;align-items:stretch;gap:10px}
  .l .r{margin-left:0;justify-content:flex-start;flex-wrap:wrap}
  .l .n{font-size:14.5px}
  .grille{gap:0}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important;
    transform:none!important}
}
