/* GDS MATEG — suivi conteneurs. Palette quai : acier, blanc froid, marquage jaune. */
:root{
  --fond:#EEF2F4;
  --surface:#FFFFFF;
  --encre:#10242F;
  --acier:#5B7383;
  --trait:#D3DDE3;
  --quai:#F2B705;        /* marquage au sol : réservé à l'essentiel */
  --recu:#2E6E9E;
  --decharge:#7A5AA8;
  --restitue:#1E6F50;
  --retard:#A32020;
  --r:4px;
}
*{box-sizing:border-box}
body{
  margin:0;background:var(--fond);color:var(--encre);
  font-family:"IBM Plex Sans","Segoe UI",system-ui,sans-serif;
  font-size:14.5px;line-height:1.5;
}
a{color:var(--recu);text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3{font-weight:600;letter-spacing:-.01em;margin:0}
h1{font-size:1.5rem}
h2{font-size:1.05rem}
.mono,td.mono,.tc-num{font-family:"IBM Plex Mono",ui-monospace,Menlo,monospace;font-size:.86rem}

/* ---------------------------------------------------------- ossature */
.app{display:flex;min-height:100vh}
.rail{
  width:210px;flex:0 0 210px;background:var(--encre);color:#C6D5DE;
  padding:18px 0;position:sticky;top:0;height:100vh;overflow:auto;
}
.marque{padding:0 18px 18px;border-bottom:1px solid rgba(255,255,255,.12);margin-bottom:12px}
.marque b{display:block;color:#fff;font-size:1.02rem;letter-spacing:.02em}
.marque span{font-size:.74rem;color:#7F9AAA}
.rail a{
  display:flex;justify-content:space-between;gap:8px;align-items:center;
  color:#C6D5DE;padding:9px 18px;font-size:.9rem;border-left:3px solid transparent;
}
.rail a:hover{background:rgba(255,255,255,.06);text-decoration:none}
.rail a.actif{background:rgba(255,255,255,.09);border-left-color:var(--quai);color:#fff}
.rail .pastille{background:var(--retard);color:#fff;border-radius:9px;padding:0 6px;font-size:.72rem}
.rail .groupe{padding:14px 18px 6px;font-size:.72rem;color:#6E8A9B}
main{flex:1;min-width:0;padding:22px 26px 60px}
.tete{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:18px;flex-wrap:wrap}
.tete p{margin:2px 0 0;color:var(--acier);font-size:.88rem}

/* ------------------------------------------------------------ jauge */
.jauge{background:var(--surface);border:1px solid var(--trait);border-radius:var(--r);padding:18px 20px;margin-bottom:18px}
.jauge-tete{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:12px}
.jauge-tete strong{font-size:1.9rem;font-weight:600}
.jauge-tete em{font-style:normal;color:var(--acier);font-size:.85rem}
.barres{display:flex;height:30px;border-radius:3px;overflow:hidden;background:#E3EAEE}
.barres span{display:flex;align-items:center;justify-content:center;color:#fff;font-size:.78rem;min-width:0}
.b-recu{background:var(--recu)}
.b-decharge{background:var(--decharge)}
.b-restitue{background:var(--restitue)}
.legende{display:flex;gap:18px;margin-top:10px;flex-wrap:wrap;font-size:.82rem;color:var(--acier)}
.legende i{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:6px}

/* ------------------------------------------------------------ chiffres */
.chiffres{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:18px}
.chiffre{background:var(--surface);border:1px solid var(--trait);border-left:3px solid var(--acier);padding:12px 14px}
.chiffre b{display:block;font-size:1.5rem;font-weight:600}
.chiffre span{color:var(--acier);font-size:.82rem}
.chiffre.alerte{border-left-color:var(--retard)}
.chiffre.alerte b{color:var(--retard)}
.chiffre.cle{border-left-color:var(--quai)}

/* ------------------------------------------------------------ blocs */
.grille2{display:grid;grid-template-columns:1.6fr 1fr;gap:16px;align-items:start}
@media(max-width:1000px){.grille2{grid-template-columns:1fr}.rail{display:none}}
.bloc{background:var(--surface);border:1px solid var(--trait);border-radius:var(--r);margin-bottom:16px}
.bloc>header{padding:12px 16px;border-bottom:1px solid var(--trait);display:flex;justify-content:space-between;align-items:center}
.bloc>.corps{padding:14px 16px}

/* ------------------------------------------------------------ flux */
.flux{display:flex;gap:6px;align-items:flex-end;height:150px;padding-top:8px;overflow-x:auto}
.flux .jour{display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:3px;min-width:34px}
.flux .paire{display:flex;gap:2px;align-items:flex-end;height:120px}
.flux .paire div{width:11px;border-radius:2px 2px 0 0}
.flux .e{background:var(--recu)}
.flux .s{background:var(--restitue)}
.flux small{color:var(--acier);font-size:.68rem;white-space:nowrap}

/* ------------------------------------------------------------ tableaux */
.tableau{width:100%;border-collapse:collapse;font-size:.88rem}
.tableau th{
  text-align:left;font-weight:600;font-size:.78rem;color:var(--acier);
  padding:9px 10px;border-bottom:1px solid var(--trait);position:sticky;top:0;background:var(--surface);
}
.tableau td{padding:9px 10px;border-bottom:1px solid #EAEFF2}
.tableau tbody tr:hover{background:#F7FAFB}
.tableau td.num{text-align:center}
.vide{padding:34px 16px;text-align:center;color:var(--acier)}
.vide a{font-weight:600}

/* ------------------------------------------------------------ badges */
.etat{display:inline-block;padding:1px 8px;border-radius:10px;font-size:.76rem;border:1px solid}
.e-attendu{color:var(--acier);border-color:var(--trait);background:#F4F7F9}
.e-receptionne{color:var(--recu);border-color:#BCD6E8;background:#EDF4FA}
.e-decharge{color:var(--decharge);border-color:#D6C9E8;background:#F4F0FA}
.e-restitue{color:var(--restitue);border-color:#B8D8CA;background:#EDF6F2}
.e-retard{color:var(--retard);border-color:#E5BDBD;background:#FBEFEF}
.e-solde{color:var(--restitue);border-color:#B8D8CA;background:#EDF6F2}
.e-en_cours{color:var(--recu);border-color:#BCD6E8;background:#EDF4FA}
.e-vide{color:var(--acier);border-color:var(--trait)}

/* ------------------------------------------------------------ formulaires */
.barre-outils{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:14px}
input,select,textarea{
  font:inherit;font-size:.88rem;padding:7px 9px;border:1px solid var(--trait);
  border-radius:3px;background:#fff;color:var(--encre);
}
input:focus,select:focus{outline:2px solid var(--recu);outline-offset:-1px;border-color:var(--recu)}
label{display:block;font-size:.78rem;color:var(--acier);margin-bottom:3px}
.champs{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.bouton{
  display:inline-block;padding:8px 14px;border-radius:3px;border:1px solid var(--encre);
  background:var(--encre);color:#fff;font-size:.86rem;cursor:pointer;
}
.bouton:hover{background:#1B3B4D;text-decoration:none;color:#fff}
.bouton.fantome{background:transparent;color:var(--encre)}
.bouton.fantome:hover{background:#E2EAEE;color:var(--encre)}
.bouton.danger{background:var(--retard);border-color:var(--retard)}
.bouton.cle{background:var(--quai);border-color:#D7A104;color:#2A2100}
.bouton.cle:hover{background:#E0AA05;color:#2A2100}

/* ------------------------------------------------------------ messages */
.message{padding:10px 14px;border-radius:3px;margin-bottom:14px;font-size:.88rem;border-left:3px solid}
.message.succes{background:#EDF6F2;border-color:var(--restitue)}
.message.erreur{background:#FBEFEF;border-color:var(--retard)}

/* ------------------------------------------------------------ fiche */
.fiche{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:2px;background:var(--trait)}
.fiche div{background:var(--surface);padding:9px 12px}
.fiche dt{font-size:.75rem;color:var(--acier);margin:0}
.fiche dd{margin:1px 0 0;font-weight:500}

/* ------------------------------------------------------------ saisie TC */
.saisie-tc{width:100%;border-collapse:collapse}
.saisie-tc th{font-size:.76rem;color:var(--acier);text-align:left;padding:5px 6px;font-weight:600}
.saisie-tc td{padding:2px 3px}
.saisie-tc input{width:100%}
.saisie-tc td:first-child{color:var(--acier);text-align:right;width:28px;font-size:.8rem}
.saisie-tc th.tc-case{text-align:center;width:74px}
.saisie-tc td.tc-case{text-align:center}
.saisie-tc td.tc-case input{width:16px;height:16px;accent-color:var(--recu)}

/* --------------------------------- impression : formulaire FE.PR7.12.B */
.fe{
  background:#fff;color:#000;max-width:900px;margin:0 auto;padding:22px 24px 16px;
  border:1px solid var(--trait);font-size:.8rem;
}
.fe *{border-color:#000}

/* bandeau : logo | titre | référence documentaire */
.fe-entete{display:grid;grid-template-columns:150px 1fr 190px;border:1px solid #000}
.fe-entete>*{padding:4px 6px}
.fe-logo{display:flex;align-items:center;justify-content:center;border-right:1px solid #000}
.fe-logo img{max-width:92px;max-height:52px}
.fe-titre{
  display:flex;align-items:center;justify-content:center;text-align:center;
  font-weight:700;font-size:1.12rem;letter-spacing:.02em;border-right:1px solid #000;
}
.fe-ref{display:flex;flex-direction:column;justify-content:center;gap:1px;font-size:.7rem}

/* identification du dossier */
.fe-ident{display:grid;grid-template-columns:1fr 1.45fr;gap:0 10px;margin-top:6px}
.fe-l{display:flex;align-items:stretch;gap:4px;margin-bottom:3px}
.fe-k{flex:0 0 96px;font-weight:700;font-size:.72rem;display:flex;align-items:center}
.fe-k2{flex:0 0 150px;justify-content:center;text-align:center}
.fe-v{flex:1;min-height:19px;border:1px solid #000;border-radius:5px;padding:1px 6px;font-size:.76rem}

/* tableau des conteneurs */
.fe-tab{width:100%;table-layout:fixed;border-collapse:collapse;margin-top:8px;font-size:.74rem}
.fe-tab th,.fe-tab td{border:1px solid #000;padding:3px 5px;height:19px}
.fe-tab th{background:#fff;font-size:.62rem;font-weight:700;text-align:center;letter-spacing:0;word-break:break-word;overflow-wrap:anywhere}
.fe-tab td.c{text-align:center}
.fe-tab .fe-rang{width:30px;text-align:center;font-weight:700;font-size:.7rem}
.fe-tab .fe-vide td{color:#000}
.fe-tab .fe-case{font-size:.56rem;word-break:break-word;overflow-wrap:anywhere}
.fe-tab .fe-lot{vertical-align:middle;font-size:.7rem;line-height:1.35;word-break:break-word}
.fe-tab td.fe-case{font-weight:700;font-size:.9rem;line-height:1}

.fe-qte{display:flex;align-items:baseline;gap:14px;margin:14px 0 8px;padding-left:20px}
.fe-qte span{font-weight:700;font-size:.95rem}
.fe-qte b{font-size:1.05rem}

/* cadres de visa — tableau à 4 colonnes égales, robuste à l'impression */
.fe-visas{width:100%;table-layout:fixed;border-collapse:collapse;margin:0}
.fe-visas td{border:1px solid #000;height:82px;padding:4px 6px;vertical-align:top;width:25%}
.fe-visas span{font-size:.64rem;font-weight:700;letter-spacing:.01em}

/* une feuille peut courir sur plusieurs pages (jusqu'à 50 TC) ; le pied
   (quantité + visas) est sorti du flux du tableau et fixé au bas de la
   page à l'impression, pour rester collé au bord quel que soit le nombre
   de lignes de conteneurs — et se répéter nativement sur CHAQUE page. */
@media print{
  /* la marge basse de page réserve la place du pied fixe : le flux normal
     (tableau des conteneurs) ne peut jamais venir le chevaucher */
  @page{size:A4 portrait;margin:8mm;margin-bottom:34mm}
  .rail,.barre-outils,.sans-impression{display:none!important}
  body{background:#fff;font-size:11px}
  main{padding:0}
  .fe{border:0;max-width:none;width:100%;padding:0;margin:0}

  .fe-footer{
    position:fixed;left:8mm;right:8mm;bottom:8mm;
    background:#fff;margin:0;
  }

  .fe-entete{grid-template-columns:128px 1fr 168px;page-break-inside:avoid;break-inside:avoid}
  .fe-logo img{max-width:80px;max-height:44px}
  .fe-titre{font-size:1rem}
  .fe-ref{font-size:.62rem}

  .fe-ident{margin-top:4px;page-break-inside:avoid;break-inside:avoid}
  .fe-l{margin-bottom:2px}
  .fe-k{flex-basis:88px;font-size:.66rem}
  .fe-k2{flex-basis:138px}
  .fe-v{min-height:16px;font-size:.7rem;padding:0 5px}

  .fe-tab{margin-top:6px;font-size:.72rem}
  .fe-tab thead{display:table-header-group}
  .fe-tab th,.fe-tab td{padding:1px 4px;height:23px;line-height:1.3}
  .fe-tab th{font-size:.52rem;height:17px;padding:1px 2px}
  .fe-tab .fe-case{font-size:.5rem}
  .fe-tab td.fe-case{font-size:.8rem}
  .fe-tab .fe-lot{font-size:.62rem;line-height:1.3}
  .fe-tab tr{page-break-inside:avoid;break-inside:avoid}

  .fe-qte{margin:0 0 6px;padding-left:0}
  .fe-qte span{font-size:.85rem}
  .fe-qte b{font-size:.95rem}

  .fe-visas td{height:20mm}
  .fe-visas span{font-size:.56rem}
}

/* ------------------------------------------------ édition multi-dossiers */
.page{margin-bottom:22px}
@media print{
  .page{page-break-after:always;margin:0}
  .page:last-child{page-break-after:auto}
}

/* ------------------------------------------------------------ connexion */
.login-page{min-height:100vh;background:#0F2D3D;display:flex;align-items:center;justify-content:center;padding:24px}
.login-card{width:min(980px,100%);min-height:570px;background:#fff;border-radius:12px;overflow:hidden;display:grid;grid-template-columns:1.25fr .75fr;box-shadow:0 24px 70px rgba(0,0,0,.28)}
.login-visual{position:relative;min-height:570px;background:#12384A}
.login-photo{width:100%;height:100%;object-fit:cover;display:block;filter:saturate(.9) contrast(1.04)}
.login-overlay{position:absolute;inset:0;padding:42px;color:#fff;background:linear-gradient(180deg,rgba(7,31,43,.45),rgba(7,31,43,.8));display:flex;flex-direction:column;justify-content:flex-end}
.login-logo{width:135px;background:rgba(255,255,255,.96);padding:10px;border-radius:7px;margin-bottom:18px}
.login-overlay h1{font-size:2.25rem;margin:0 0 8px;letter-spacing:.03em}
.login-overlay p{font-size:1rem;max-width:420px;margin:0;color:#E4EEF2}
.login-form{padding:58px 48px;display:flex;flex-direction:column;justify-content:center}
.login-form h2{font-size:1.7rem;margin:0 0 6px}
.login-sub{color:var(--acier);margin:0 0 28px}
.login-form label{margin-top:14px}
.login-form input{width:100%;box-sizing:border-box;padding:11px 12px}
.login-form small{display:block;color:var(--acier);line-height:1.5;margin-top:22px}
@media(max-width:760px){.login-card{grid-template-columns:1fr}.login-visual{min-height:290px}.login-form{padding:34px 28px}}
