:root{--navy:#0F2A44;--navy2:#0B2136;--blue:#2563C9;--blue2:#3D8BFF;--sky:#60A5FA;--bg:#F5F7FA;--line:#D8DEE6;--ink:#0F2A44;--muted:#5A6A7C;--ok:#15803D;--err:#B91C1C}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--ink);font:16px/1.5 "IBM Plex Sans",system-ui,sans-serif}
h1,h2,h3{font-family:"Space Grotesk",system-ui,sans-serif;letter-spacing:-.01em;margin:0}
a{color:var(--blue)}
button,input,select{font:inherit}
.btn{text-decoration:none;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:999px;padding:11px 20px;font-weight:600;cursor:pointer;background:var(--blue2);color:#fff;min-height:44px}
.btn.sec{background:#fff;color:var(--ink);border:1px solid var(--line)}
.btn.lien{background:none;color:var(--blue);padding:6px 0;min-height:auto;font-weight:500}
.btn:disabled{opacity:.6;cursor:default}
input,select{padding:11px 12px;border:1px solid #A7B1BE;border-radius:10px;background:#fff;color:var(--ink);width:100%}
label{font-size:14px;font-weight:600;display:flex;flex-direction:column;gap:6px}
.msg{min-height:1.4em;font-size:14px;margin:0}.msg.err{color:var(--err)}.msg.ok{color:var(--ok)}
/* écran de connexion */
#gate{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--navy)}
.carte{background:#fff;border-radius:18px;padding:32px 28px;width:100%;max-width:420px;display:flex;flex-direction:column;gap:14px}
.carte h1{font-size:28px}.carte .sous{color:var(--muted);margin:0;font-size:15px}
.logo{font-family:"Space Grotesk",system-ui,sans-serif;font-weight:700;font-size:26px;color:var(--ink);display:flex;align-items:center;letter-spacing:-.02em}.logo-img{margin-right:10px;flex:none}.logo span{color:var(--blue)}
.ou{text-align:center;color:var(--muted);font-size:14px}
.onglets-gate{display:flex;gap:8px}.onglets-gate button{flex:1}
/* application */
header.app{background:var(--navy);color:#fff}
header.app .barre{max-width:1200px;margin:0 auto;padding:14px 20px;display:flex;flex-wrap:wrap;gap:12px 24px;align-items:center;justify-content:space-between}
header.app .logo{color:#fff}header.app .logo span{color:var(--sky)}
.equipe-nom{font-size:15px;color:#C9D6E5}
.compte{display:flex;flex-wrap:wrap;gap:10px;align-items:center;font-size:14px;color:#C9D6E5}
.compte .btn.sec{min-height:36px;padding:7px 14px}
nav.modules{max-width:1200px;margin:0 auto;padding:0 20px;display:flex;flex-wrap:wrap;gap:4px 24px;border-top:1px solid #23415F}
nav.modules button{background:none;border:0;color:#B8C6D6;padding:12px 0;border-bottom:2px solid transparent;cursor:pointer;min-height:44px}
nav.modules button[aria-current="page"]{color:#fff;font-weight:600;border-bottom-color:var(--sky)}
main{max-width:1200px;margin:0 auto;padding:32px 20px 80px}
.panneau{background:#fff;border:1px solid var(--line);border-radius:16px;padding:24px}
.panneau h2{font-size:24px;margin-bottom:8px}
.vide{color:var(--muted)}
table{border-collapse:collapse;width:100%;font-size:15px}
th,td{text-align:left;padding:10px 8px;border-bottom:1px solid var(--line);vertical-align:middle}
th{font-size:13px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.table-box{overflow-x:auto}
.grille{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));gap:12px;align-items:end}
.pastille{display:inline-block;padding:2px 10px;border-radius:999px;background:#EAF2FF;color:#1E3A8A;font-size:13px;font-weight:600}
.pastille.off{background:#EEF1F5;color:var(--muted)}
.choix{display:flex;flex-direction:column;gap:10px}
.choix button{text-align:left;background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px 16px;cursor:pointer;font-weight:600;min-height:44px}
.choix button:hover{border-color:var(--blue)}
.env-test{background:#FBBF24;color:#422006;text-align:center;font-size:13px;font-weight:700;padding:4px}
.coches{display:flex;flex-wrap:wrap;gap:8px 18px}.coches label{flex-direction:row;align-items:center;font-weight:500}.coches input{width:auto}
[hidden]{display:none!important}
.formulaire,.pile{display:flex;flex-direction:column;gap:12px}
.ecran-accueil{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;background:var(--navy);color:#C9D6E5}
.ecran-accueil .logo{color:#fff;font-size:34px}.ecran-accueil .logo span{color:var(--sky)}.ecran-accueil p{margin:0}
.carte-ligne{display:flex;flex-wrap:wrap;gap:12px 20px;align-items:center;justify-content:space-between;border:1px solid var(--line);border-radius:12px;padding:14px 16px;background:#fff}
.carte-ligne input[type=file]{position:absolute;width:1px;height:1px;opacity:0}
.carte-ligne label input[type=date]{width:auto}
.pastille.ok{background:#DCFCE7;color:#14532D}
.statut.ok{border-color:#86EFAC;background:#F0FDF4}.statut.err{border-color:#FCA5A5;background:#FEF2F2}.statut.off{border-color:#FCD34D;background:#FFFBEB}
fieldset.cadre{border:1px solid var(--line);border-radius:12px;padding:12px 16px;margin:0}fieldset.cadre legend{font-size:14px;font-weight:600;padding:0 6px}
.calendrier{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;max-width:560px}
.cal-entete{text-align:center;font-size:12px;color:var(--muted);text-transform:uppercase}
.cal-jour{min-height:56px;border:1px solid var(--line);border-radius:10px;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;cursor:pointer;padding:4px}
.cal-jour small{font-size:11px;color:var(--muted);min-height:1em}
.cal-jour[data-v=J]{background:#DCFCE7;border-color:#22C55E}.cal-jour[data-v=M]{background:#DBEAFE;border-color:#3B82F6}.cal-jour[data-v=A]{background:#FEF3C7;border-color:#F59E0B}
.cal-jour[data-v=J] small,.cal-jour[data-v=M] small,.cal-jour[data-v=A] small{color:var(--ink);font-weight:600}
