/* SENZII SCHOOL — feuille de style commune (reprise de la version Python). */
:root{--ink:#142738;--nav:#102d42;--primary:#176ca4;--line:#dde5ee;--bg:#f3f6fa;--muted:#64778b;--success:#117b68}
*{box-sizing:border-box} body{font-family:system-ui,-apple-system,"Segoe UI",sans-serif;background:var(--bg);color:var(--ink);margin:0;line-height:1.5} a{color:#12659e;text-decoration:none}a:hover{text-decoration:underline}
header{background:var(--nav);color:#fff;padding:15px max(18px,calc((100vw - 1220px)/2));display:flex;align-items:center;justify-content:space-between;gap:15px;flex-wrap:wrap}header .logo{font-size:22px;font-weight:800;letter-spacing:-.5px}header small{display:block;color:#afcfdd;font-size:12px}header .user{font-size:13px;color:#dbeef6;display:flex;gap:12px;align-items:center;flex-wrap:wrap}header button{background:transparent;color:#fff;border:1px solid #5f8499;padding:6px 12px}
nav{background:#fff;border-bottom:1px solid var(--line);padding:0 max(18px,calc((100vw - 1220px)/2));display:flex;gap:5px;overflow-x:auto}nav a{display:inline-block;padding:13px 12px;white-space:nowrap;font-size:14px;font-weight:600;color:#425569}nav a.active{color:#135f97;border-bottom:3px solid #1977b1}main{max-width:1220px;margin:0 auto;padding:28px 18px 52px}
h1{font-size:29px;line-height:1.2;margin:0 0 8px;letter-spacing:-.6px}h2{font-size:19px;margin:0 0 16px}h3{margin:8px 0 12px;font-size:16px}.sub{color:var(--muted);margin:0 0 24px;font-size:14px}
.panel{background:#fff;border:1px solid var(--line);border-radius:12px;padding:22px;margin:18px 0}.panel.soft{background:#f9fbfd}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:15px}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:14px;margin:22px 0}.stat{background:#fff;border:1px solid var(--line);border-radius:12px;padding:20px}.stat strong{display:block;font-size:30px;letter-spacing:-1px}.stat span{font-size:13px;color:var(--muted)}
form{margin:0}.fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(195px,1fr));gap:13px}.field label{display:block;font-size:12px;font-weight:700;color:#466074;margin:0 0 5px}input,select,textarea{font:inherit;width:100%;padding:10px 11px;min-height:42px;border:1px solid #bacbd9;border-radius:7px;background:#fff;color:var(--ink)}textarea{min-height:80px}input:focus,select:focus,textarea:focus,button:focus-visible,a:focus-visible,summary:focus-visible{outline:3px solid #0b4fa0;outline-offset:2px}header a:focus-visible,header button:focus-visible{outline-color:#FECB00}.skip{position:absolute;left:-9999px;top:8px;z-index:100;background:#fff;color:#0b4fa0;padding:10px 14px;border-radius:8px;font-weight:700}.skip:focus{left:12px}
button,.btn{display:inline-block;cursor:pointer;min-height:40px;border:1px solid #176ca4;border-radius:8px;background:#176ca4;color:#fff;font:inherit;font-weight:700;font-size:14px;padding:9px 14px;white-space:normal;text-align:center}button:hover,.btn:hover{filter:brightness(.93);text-decoration:none}.btn.secondary,button.secondary{background:#fff;color:#176ca4}.btn.ghost{background:#edf5fc;color:#176ca4;border-color:#e1effb}.actions{display:flex;gap:9px;flex-wrap:wrap;align-items:center;margin-top:16px}.row-actions{display:flex;gap:7px;align-items:center;flex-wrap:wrap}
.table-wrap{width:100%;overflow-x:auto}table{border-collapse:collapse;width:100%;font-size:14px;white-space:nowrap}th{text-align:left;background:#f0f5fa;color:#536a7c;font-size:12px;letter-spacing:.3px;padding:11px}td{border-bottom:1px solid #edf0f3;padding:11px;vertical-align:middle}tr:last-child td{border-bottom:0}.muted{color:var(--muted)}.tag{display:inline-block;padding:3px 9px;border-radius:999px;background:#e9f3fa;color:#1b689c;font-size:12px;font-weight:700}.tag.ok{background:#e2f7ed;color:#14704b}.tag.warn{background:#fff3db;color:#956000}.alert{background:#e8f7f0;color:#116545;padding:13px 16px;border:1px solid #bdebd3;border-radius:8px;margin:16px 0}.alert.error{background:#fff0ee;color:#a53425;border-color:#f7c9c1}.top{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:15px}.hint{font-size:12px;color:#566b7c}.grades-input{min-width:76px;max-width:86px;text-align:center}.grades-comment{min-width:170px}.small-check{width:18px;min-height:18px;accent-color:var(--primary)}.inline{display:inline-flex;gap:7px;align-items:center}.inline input{min-height:37px}fieldset{border:0;margin:0;padding:0}.auth-box{max-width:520px;margin:40px auto}.empty{padding:30px;text-align:center;color:var(--muted)}.footnote{font-size:12px;color:#566b7c;margin-top:14px}
.trap{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.print-title{display:none}.print-only{display:none}
@media(max-width:550px){main{padding:18px 12px 36px}h1{font-size:23px}.panel{padding:15px}header{padding:15px}nav{padding:0 6px}.stat strong{font-size:26px}}
@media print{body{background:#fff;color:#111}header,nav,.no-print,.actions,.button{display:none!important}main{padding:0;max-width:100%}.panel{border:0;padding:0;margin:0}.print-title,.print-only{display:block}table{font-size:12px}th{color:#222!important;background:#eee!important}.stat{border:0}.page-break{page-break-before:always}}

:root{--ink:#10233a;--nav:#0a1d36;--primary:#0b4fa0;--line:#dfe6ef;--bg:#f4f7fb;--muted:#5f7389;--gold:#FECB00;--red:#C60C30;--blue:#002664}
header{position:relative;background:linear-gradient(120deg,#071630 0%,#0a2550 55%,#0d2f63 100%);box-shadow:0 6px 24px rgba(7,22,48,.18)}
header::before{content:"";position:absolute;left:0;right:0;bottom:-4px;height:4px;z-index:1;background:linear-gradient(90deg,#002664 0 33.3%,#FECB00 33.3% 66.6%,#C60C30 66.6%)}
.ec-logo{display:inline-flex;align-items:center;gap:11px;color:#fff;text-decoration:none!important}
.ec-logo .ec-mark{flex:none;filter:drop-shadow(0 3px 8px rgba(0,0,0,.25));transition:transform .5s cubic-bezier(.2,.9,.3,1.4)}
.ec-logo:hover .ec-mark{transform:rotate(-8deg) scale(1.08)}
.ec-word{display:flex;flex-direction:column;line-height:1.1}.ec-word b{font-size:21px;font-weight:800;letter-spacing:-.4px}.ec-word em{font-style:normal;color:var(--gold)}
.ec-word small{color:#a9c1dc;font-size:12px;font-weight:500;margin-top:3px}
.ec-school{height:42px;width:auto;max-width:90px;object-fit:contain;border-radius:9px;background:#fff;padding:3px;margin-left:8px}
.ec-logo.on-light{color:var(--ink)}.ec-logo.on-light em{color:#0b4fa0}.ec-logo.on-light small{color:var(--muted)}
header .user button{border-radius:999px;border-color:rgba(255,255,255,.35)}header .user button:hover{background:rgba(255,255,255,.1)}
nav{box-shadow:0 1px 0 var(--line)}nav a{position:relative;transition:color .2s}nav a::after{content:"";position:absolute;left:12px;right:12px;bottom:0;height:3px;border-radius:3px 3px 0 0;background:var(--primary);transform:scaleX(0);transition:transform .25s}
nav a:hover{text-decoration:none;color:#0b4fa0}nav a:hover::after{transform:scaleX(.6)}nav a.active{border-bottom:0}nav a.active::after{transform:scaleX(1)}
main{animation:ecFade .45s ease-out both}
.shell{display:flex;align-items:flex-start;max-width:1500px;margin:0 auto}
.shell main{flex:1;min-width:0;max-width:none;margin:0;padding:28px 28px 52px}
.side{position:sticky;top:0;flex:none;width:248px;max-height:100vh;overflow-y:auto;padding:18px 12px 30px;background:#fff;border-right:1px solid var(--line);min-height:calc(100vh - 92px)}
.side .grp{margin-bottom:14px}.side .grp p{margin:0 10px 6px;font-size:11px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:#5f7389}
.side a{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;color:#2c4258;font-size:14px;font-weight:600;text-decoration:none!important;transition:background .15s,color .15s,transform .15s}
.side a .ic{width:22px;text-align:center;font-size:15px}
.side a:hover{background:#f1f5fb;color:#0b4fa0;transform:translateX(3px)}
.side a.active{background:linear-gradient(90deg,#e6efff,#f3f7ff);color:#0b4fa0;box-shadow:inset 3px 0 0 #0b4fa0}
.menu-toggle{position:absolute;left:0;top:0;width:1px;height:1px;margin:0;opacity:0;pointer-events:none}.menu-btn{display:none}
header .user .me{color:#fff;font-weight:700;display:inline-block;padding:6px 0}header .user .role{font-size:11.5px;font-weight:700;padding:3px 9px;border-radius:999px;background:rgba(254,203,0,.16);color:var(--gold)}
@media(max-width:900px){.shell{display:block}.menu-btn{display:block;margin:12px 12px 0;padding:10px 14px;border-radius:10px;background:#fff;border:1px solid var(--line);font:inherit;font-weight:700;color:var(--ink);cursor:pointer;min-height:44px}
.side{display:none;position:static;width:auto;min-height:0;max-height:none;margin:8px 12px 0;border:1px solid var(--line);border-radius:14px}
.side.open{display:block}.shell main{padding:18px 12px 36px}}
.panel,.stat{border-radius:14px;box-shadow:0 1px 2px rgba(16,35,58,.04);transition:transform .25s,box-shadow .25s}
.stat{position:relative;overflow:hidden}.stat::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:linear-gradient(180deg,#002664 0 33.3%,#FECB00 33.3% 66.6%,#C60C30 66.6%)}
.stat:hover{transform:translateY(-3px);box-shadow:0 12px 26px rgba(16,35,58,.09)}
.stats .stat{animation:ecUp .5s ease-out both}.stats .stat:nth-child(2){animation-delay:.06s}.stats .stat:nth-child(3){animation-delay:.12s}.stats .stat:nth-child(4){animation-delay:.18s}.stats .stat:nth-child(5){animation-delay:.24s}
button,.btn{border-radius:10px;border-color:var(--primary);background:var(--primary);transition:transform .15s,filter .2s,box-shadow .2s}button:hover,.btn:hover{transform:translateY(-1px);box-shadow:0 6px 16px rgba(11,79,160,.22)}
.btn.secondary,button.secondary{color:var(--primary)}.btn.ghost{color:var(--primary)}
th{background:#eef3f9}tbody tr{transition:background .15s}tbody tr:hover{background:#f7fafd}
.auth-box{max-width:500px;margin:48px auto}.auth-box .panel{padding:30px;box-shadow:0 20px 50px rgba(10,29,54,.10);border-top:4px solid transparent;border-image:linear-gradient(90deg,#002664 0 33.3%,#FECB00 33.3% 66.6%,#C60C30 66.6%) 1;animation:ecUp .5s ease-out both}
@keyframes ecFade{from{transform:translateY(6px)}to{transform:none}}
@keyframes ecUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
@media print{header::before{display:none}}
.guide details{background:#fff;border:1px solid var(--line);border-radius:12px;margin:10px 0}.guide summary{cursor:pointer;padding:15px 18px;font-weight:700;list-style:none;display:flex;gap:10px;align-items:center}.guide summary::-webkit-details-marker{display:none}.guide summary::after{content:"+";margin-left:auto;color:var(--primary);font-size:20px}.guide details[open] summary::after{content:"−"}.guide ol{margin:0;padding:0 22px 16px 46px;line-height:1.75}.guide .actions{padding:0 18px 16px;margin-top:0}
.checklist{list-style:none;margin:0;padding:0}.checklist li{display:flex;gap:14px;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;padding:13px 0;border-bottom:1px solid #edf0f3}.checklist li:last-child{border-bottom:0}.checklist .done b::before{content:"✔ ";color:#14704b}.checklist .todo b::before{content:"○ ";color:#956000}.tag.bad{background:#fff0ee;color:#a53425}.verdict{border-radius:12px;padding:18px 20px;margin:18px 0;font-weight:700}.verdict.ok{background:#e2f7ed;color:#14704b;border:1px solid #bdebd3}.verdict.warn{background:#fff8e8;color:#7a5200;border:1px solid #f3dfae}.verdict ul{font-weight:400;margin:8px 0 0;padding-left:20px}
.timetable{table-layout:fixed;min-width:640px}.timetable th,.timetable td{text-align:center;border:1px solid #e3e9ef;white-space:normal}.timetable td.hours{background:#f6f9fc;font-weight:700;color:#536a7c;width:96px}.timetable .slot{display:block;background:#edf5fc;border-left:4px solid var(--primary);border-radius:6px;padding:6px 7px;text-align:left;font-size:13px;line-height:1.35}.timetable .slot small{display:block;color:var(--muted)}
@media print{.timetable{min-width:0;font-size:11px}}
.offline-banner{position:sticky;top:0;z-index:50;background:#fff8e8;color:#5c3d00;border-bottom:1px solid #f3dfae;padding:10px 16px;font-size:14px;line-height:1.6}.offline-banner button{min-height:32px;padding:4px 10px;margin-left:4px}
.bar{display:flex;height:12px;background:#eef3f8;border-radius:99px;overflow:hidden;min-width:120px}.bar span{display:block;height:100%}.bar-girls{background:#c60c30}.bar-boys{background:#176ca4}.bar-absent{background:#c60c30}.bar-late{background:#fecb00}.key{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:middle;margin:0 4px 0 10px}
.editor{display:grid;grid-template-columns:minmax(300px,420px) 1fr;gap:16px;align-items:start;margin:18px 0}.preview-frame{background:#e9eef3;border:1px solid var(--line);border-radius:12px;overflow:hidden;position:sticky;top:12px}.preview-frame iframe{width:100%;height:80vh;border:0;display:block}
@media(max-width:900px){.editor{grid-template-columns:1fr}.preview-frame iframe{height:70vh}}
header .user .bell{position:relative;color:#fff;text-decoration:none;font-size:18px;line-height:1;padding:4px 6px;border-radius:999px}header .user .bell:hover{background:rgba(255,255,255,.1)}header .user .bell b{position:absolute;top:-4px;right:-6px;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:#C60C30;color:#fff;font-size:11px;line-height:18px;text-align:center}
.notice{display:flex;gap:12px;align-items:flex-start;padding:13px 4px;border-bottom:1px solid #edf0f3;color:inherit;text-decoration:none}.notice:last-child{border-bottom:0}.notice:hover{background:#f6f9fc}.notice .ic{font-size:20px;line-height:1.2}.notice.unread b{color:var(--primary)}.notice.unread::after{content:"";flex:0 0 9px;height:9px;margin-top:7px;border-radius:50%;background:#C60C30}.notice div{flex:1;min-width:0}
.filters{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 12px}.filters a{padding:6px 12px;border-radius:999px;background:#eef3f8;color:#294a63;text-decoration:none;font-size:13px}.filters a.on{background:var(--primary);color:#fff}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
table.cal{table-layout:fixed;min-width:640px}table.cal td{vertical-align:top;height:86px;padding:4px;white-space:normal;border:1px solid #edf0f3}table.cal td.out{background:#f7f9fb;color:#5f7389}table.cal td.today{box-shadow:inset 0 0 0 2px var(--primary)}table.cal .num{display:block;font-size:12px;font-weight:700;margin-bottom:2px}table.cal .ev{display:block;font-size:11.5px;line-height:1.3;border-left:3px solid;padding:1px 4px;margin:2px 0;color:inherit;text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}table.cal .ev.cancel{text-decoration:line-through;opacity:.6}
input[aria-invalid=true],select[aria-invalid=true],textarea[aria-invalid=true]{border-color:#a53425;box-shadow:0 0 0 1px #a53425}
