*,:before,:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}img,svg{max-width:100%;display:block}:root{--ink:#1b2a4a;--paper:#f6f7f4;--card:#fff;--vert:#168a4b;--vert-pale:#e5f4eb;--rouge:#c8403c;--rouge-pale:#fbeae9;--acier:#7c8696;--ligne:#dde1da;--bleu:#3b5ba5;--bleu-pale:#e8edf7}body{background:var(--paper);color:var(--ink);font-family:system-ui,-apple-system,Segoe UI,sans-serif;font-size:15.5px;line-height:1.5}button{cursor:pointer;font-family:inherit}input,select{font-family:inherit;font-size:15px}h1,h2,h3{letter-spacing:.02em}.mono{font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace}.wrap{padding:0 28px 60px}.grille-tdb{grid-template-columns:3fr 2fr;align-items:start;gap:0 18px;display:grid}@media (max-width:900px){.grille-tdb{grid-template-columns:1fr}}.topbar{background:var(--ink);color:#fff;flex-wrap:wrap;align-items:center;gap:6px;padding:0 20px;display:flex}.topbar .logo{letter-spacing:.08em;text-transform:uppercase;padding:14px 14px 14px 0;font-size:19px;font-weight:800}.topbar .logo span{color:#5be69a}.tab{color:#b9c3d8;cursor:pointer;background:0 0;border:none;border-bottom:3px solid #0000;padding:16px 14px;font-size:14.5px;font-weight:600}.tab:hover{color:#fff}.tab.actif{color:#fff;border-bottom-color:#5be69a}.topbar .droite{align-items:center;gap:10px;margin-left:auto;padding:10px 0;display:flex}.topbar .qui{color:#b9c3d8;font-size:13px}.topbar .qui b{color:#fff}.btn{cursor:pointer;border:none;border-radius:8px;padding:9px 16px;font-size:14.5px;font-weight:600;display:inline-block}.btn-vert{background:var(--vert);color:#fff}.btn-vert:hover{background:#127a41}.btn-ink{background:var(--ink);color:#fff}.btn-blanc{color:var(--ink);border:1.5px solid var(--ligne);background:#fff}.btn-blanc:hover{background:var(--paper)}.btn-rouge{background:var(--rouge);color:#fff}.btn-ghost{color:#fff;background:#ffffff1f;border:none}.btn-ghost:hover{background:#ffffff38}.btn-petit{border-radius:6px;padding:5px 10px;font-size:13px}.panneau{background:var(--card);border:1.5px solid var(--ligne);border-radius:12px;margin-top:18px;padding:20px}.panneau h2{margin-bottom:12px;font-size:19px}.grille-stats{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin-top:18px;display:grid}.stat{background:var(--card);border:1.5px solid var(--ligne);border-radius:12px;padding:16px 18px}.stat .num{font-size:32px;font-weight:800}.stat .lab{color:var(--acier);text-transform:uppercase;letter-spacing:.06em;font-size:13px}.stat.s-vert .num{color:var(--vert)}.stat.s-rouge .num{color:var(--rouge)}table{border-collapse:collapse;width:100%;font-size:14.5px}th{text-align:left;text-transform:uppercase;letter-spacing:.07em;color:var(--acier);border-bottom:2px solid var(--ligne);padding:8px 10px;font-size:12px}td{border-bottom:1px solid var(--ligne);padding:9px 10px}tr:last-child td{border-bottom:none}.pastille{border-radius:999px;padding:2px 9px;font-size:12.5px;font-weight:600;display:inline-block}.p-vert{background:var(--vert-pale);color:var(--vert)}.p-rouge{background:var(--rouge-pale);color:var(--rouge)}.p-bleu{background:var(--bleu-pale);color:var(--bleu)}.p-gris{color:var(--acier);background:#eef0ec}.champ{margin-bottom:13px}.champ label{color:#3c4660;margin-bottom:4px;font-size:13px;font-weight:600;display:block}.champ input,.champ select{border:1.5px solid var(--ligne);background:#fff;border-radius:8px;width:100%;padding:9px 11px;font-size:15px}.champ input:focus,.champ select:focus{outline:2px solid var(--vert);border-color:var(--vert)}.jours-boxes{flex-wrap:wrap;gap:8px;display:flex}.jours-boxes label{border:1.5px solid var(--ligne);cursor:pointer;background:#fff;border-radius:8px;align-items:center;gap:5px;padding:7px 11px;font-size:14px;font-weight:600;transition:background .15s,border-color .15s,color .15s;display:flex}.jours-boxes label.checked{background:var(--vert-pale);border-color:var(--vert);color:var(--vert)}.ligne-form{grid-template-columns:1fr 1fr;gap:12px;display:grid}@media (max-width:640px){.ligne-form{grid-template-columns:1fr}}.voile{z-index:50;background:#1b2a4a8c;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modale{color:var(--ink);background:#fff;border-radius:14px;width:100%;max-width:460px;max-height:90vh;padding:24px;overflow:auto}.modale h3{margin-bottom:14px;font-size:19px}.modale-actions{justify-content:flex-end;gap:10px;margin-top:18px;display:flex}.scan-screen{color:#fff;z-index:100;background:#0e1b33;flex-direction:column;width:100%;height:100%;display:flex;position:fixed;inset:0}.scan-head{color:#9fb0ce;border-bottom:1px solid #ffffff14;flex-shrink:0;justify-content:space-between;align-items:center;padding:14px 22px;font-size:14px;display:flex}.scan-head .dot{background:#37d67a;border-radius:50%;width:9px;height:9px;margin-right:8px;animation:2s infinite pulse;display:inline-block}@keyframes pulse{0%,to{opacity:1}50%{opacity:.3}}.scan-main{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;padding:30px;transition:background .25s;display:flex;overflow:auto}.scan-main.fond-vert{background:linear-gradient(#123d26,#0f2f1f)}.scan-main.fond-rouge{background:linear-gradient(#4a1715,#38110f)}.scan-attente{color:#9fb0ce;font-size:clamp(20px,3vw,28px);font-weight:600}.scan-titre{letter-spacing:.05em;text-transform:uppercase;font-size:clamp(26px,5vw,44px);font-weight:800}.scan-titre.ok{color:#5be69a}.scan-titre.ko{color:#ff8a80}.scan-nom{margin-top:8px;font-size:clamp(30px,6vw,54px);font-weight:700}.scan-detail{color:#b9c3d8;margin-top:10px;font-size:clamp(16px,2.5vw,22px)}.scan-foot{color:#9fb0ce;border-top:1px solid #ffffff14;flex-shrink:0;justify-content:space-between;padding:13px 22px;font-size:13.5px;display:flex}.scan-quitter{color:#9fb0ce;cursor:pointer;white-space:nowrap;background:#ffffff1a;border:none;border-radius:8px;flex-shrink:0;padding:7px 12px;font-size:13px}.scan-quitter:hover{color:#fff;background:#fff3}.scan-stats-bar{border-bottom:1px solid #ffffff12;flex-shrink:0;gap:10px;padding:10px 20px;display:flex}.scan-stat-card{text-align:center;cursor:pointer;color:#fff;background:#ffffff0d;border:1.5px solid #ffffff1a;border-radius:10px;flex:1;padding:10px 8px;font-family:inherit;transition:background .15s,border-color .15s}.scan-stat-card:hover{background:#ffffff1c;border-color:#ffffff38}.scan-stat-num{font-size:28px;font-weight:800;line-height:1.1}.scan-stat-label{color:#9fb0ce;letter-spacing:.04em;margin-top:4px;font-size:10px}.scan-stat-jour{flex-direction:column;justify-content:center;align-items:center;padding:6px 4px;display:flex}.scan-stat-jour select option{color:#fff;background:#1b2a4a}.pin-pave{grid-template-columns:repeat(3,72px);justify-content:center;gap:10px;margin-top:18px;display:grid}.pin-pave button{color:#fff;cursor:pointer;background:#ffffff1f;border:none;border-radius:10px;height:60px;font-size:24px;font-weight:700}.pin-pave button:active{background:#ffffff4d}.pin-pave-light button{color:#1b2a4a;background:#f0f2f5}.pin-pave-light button:active{background:#d8dce5}.pin-aff{letter-spacing:14px;min-height:46px;margin-top:14px;font-family:ui-monospace,monospace;font-size:34px}.boite-login{border:1.5px solid var(--ligne);background:#fff;border-radius:14px;width:100%;max-width:400px;padding:32px}.boite-login h1{text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px;font-size:30px;font-weight:800}.boite-login h1 span{color:var(--vert)}.boite-login .sous{color:var(--acier);margin-bottom:22px;font-size:14px}.msg-erreur{background:var(--rouge-pale);color:var(--rouge);border-radius:8px;margin-bottom:12px;padding:9px 12px;font-size:14px}.note-defaut{color:var(--acier);background:var(--paper);border-radius:8px;margin-top:16px;padding:10px 12px;font-size:13px}.outils{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:14px;display:flex}.outils input[type=text],.outils input[type=date],.outils select{border:1.5px solid var(--ligne);background:#fff;border-radius:8px;padding:8px 11px}.vide{color:var(--acier);text-align:center;padding:26px 10px;font-size:14.5px}.alerte-info{background:var(--bleu-pale);color:var(--bleu);border-radius:8px;margin-top:12px;padding:10px 14px;font-size:14px}#zone-impression{display:none}@media print{body *{visibility:hidden}#zone-impression,#zone-impression *{visibility:visible}#zone-impression{width:100%;display:block;position:fixed;top:0;left:0}.planche{grid-template-columns:repeat(3,1fr);gap:5mm;padding:8mm;display:grid}.carte-eleve{text-align:center;page-break-inside:avoid;border:1px solid #999;border-radius:3mm;padding:5mm}.carte-eleve .ce-nom{font-size:14pt;font-weight:700}.carte-eleve .ce-classe{color:#444;margin-bottom:2mm;font-size:11pt}}
