/* Facade ENT — structure inspiree des espaces scolaires classiques (bandeau
   etablissement, barre d'onglets sombre, sous-bandeau de section, liste de matieres
   coloree avec compteurs, contenus groupes par jour).
   Ecrite a la main : 6 Ko, contre ~120 Ko pour le CDN Tailwind qui compile dans le
   navigateur. Le lien campus fait 2 Mbps partages. */
:root{
  --marque:#0f766e;
  --nav:#3f4650; --nav-h:#4c545f;
  --sous:#ededed; --sous-t:#0f5c52;
  --bandeau:#7f8792;          /* bandeau de periode, gris moyen texte blanc */
  --vide:#e2e5ea;             /* creneau sans cours */
  --grille:#c9ced6;           /* bordure des colonnes de l'emploi du temps */
  --trait:#e6e9ee;            /* lignes horaires */
  --txt:#1a1f28; --dim:#6b7480; --ligne:#e3e7ec; --fond:#f2f4f7; --carte:#fff;
  --v:#16a34a; --r:#dc2626; --o:#ea580c;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{background:var(--fond);overflow-x:hidden}
body{margin:0;background:var(--fond);color:var(--txt);
  font:15px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif}
[hidden]{display:none!important}
a{color:inherit}

/* ── Bandeau etablissement ───────────────────────────────────────────────── */
.b-e{background:var(--carte);border-bottom:1px solid var(--ligne);
  padding:max(10px,env(safe-area-inset-top)) 14px 10px;display:flex;align-items:center;gap:12px}
/* Avatar : c'est lui qui mene au compte, l'onglet « Mes donnees » n'existe plus */
.b-av{margin-left:auto;display:flex;align-items:center;gap:8px;text-decoration:none;color:var(--dim);
  padding:5px 9px 5px 5px;border:1px solid var(--ligne);border-radius:22px;background:var(--carte)}
.b-av svg{width:26px;height:26px;flex:0 0 26px;color:var(--marque)}
.b-av span{font-size:13px;font-weight:600;white-space:nowrap}
@media (max-width:480px){ .b-av span{display:none} .b-av{padding:5px;border-radius:50%} }
/* Sur ordinateur l'en-tete s'aligne a gauche, comme le reste de la page. */
@media (min-width:900px){
  .b-e{padding:12px 22px}
  .b-t,.f-b{padding-left:22px;padding-right:22px}
}
.b-n{font-size:17px;font-weight:800;letter-spacing:.01em;text-transform:uppercase;color:var(--marque)}
.b-s{font-size:13px;color:var(--dim);margin-top:2px}

/* ── Barre de rubrique : hamburger, titre, action — TELEPHONE uniquement ─── */
.b-r{background:var(--nav);display:flex;align-items:center;gap:14px;padding:0 14px;min-height:58px}
.b-r-t{color:#fff;font-size:16px;font-weight:700;line-height:1.15;flex:1;min-width:0}
.ham{display:flex;flex-direction:column;justify-content:center;gap:5px;width:34px;height:44px;
  cursor:pointer;flex:0 0 34px}
.ham span{display:block;height:2.5px;background:#fff;border-radius:2px}

/* ── Tiroir lateral ──────────────────────────────────────────────────────── */
/* Ouvert par une case a cocher masquee, rubriques repliees par <details> :
   aucune ligne de JavaScript, donc il s'ouvre meme quand le reseau rame. */
.tr-i:checked ~ .tr{transform:none}
.tr-i:checked ~ .tr-o{opacity:1;pointer-events:auto}
.tr{position:fixed;top:0;left:0;bottom:0;width:min(87vw,340px);z-index:40;overflow-y:auto;
  background:var(--nav);transform:translateX(-102%);transition:transform .22s ease;
  padding-bottom:env(safe-area-inset-bottom)}
.tr-o{position:fixed;inset:0;z-index:39;background:rgba(0,0,0,.45);opacity:0;pointer-events:none;
  transition:opacity .22s ease}
.tr-r,.tr-d>summary{display:flex;align-items:center;gap:12px;color:#fff;font-size:16px;
  font-weight:700;line-height:1.2;padding:17px 18px;text-decoration:none;cursor:pointer;
  border-bottom:1px solid rgba(255,255,255,.07)}
.tr-acc svg{width:26px;height:26px;flex:0 0 26px}
.tr-d>summary{list-style:none}
.tr-d>summary::-webkit-details-marker{display:none}
/* Chevron : vers le bas quand la rubrique est fermee, vers le haut quand elle est ouverte */
.tr-d>summary::after{content:'';margin-left:auto;width:11px;height:11px;flex:0 0 11px;
  border-right:2.5px solid #fff;border-bottom:2.5px solid #fff;transform:rotate(45deg) translateY(-3px);
  transition:transform .18s ease}
.tr-d[open]>summary::after{transform:rotate(-135deg) translateY(-3px)}
.tr-ss{background:rgba(255,255,255,.09)}
.tr-s{display:block;color:rgba(255,255,255,.82);font-size:15px;padding:14px 18px 14px 18px;
  text-decoration:none}
.tr-s.on{color:#fff;font-weight:700;box-shadow:inset 4px 0 0 var(--marque)}
.tr-r.on{box-shadow:inset 4px 0 0 var(--marque)}

/* ── Onglets horizontaux : ORDINATEUR ────────────────────────────────────── */
/* Sur grand ecran on retrouve la barre d'onglets, et le tiroir disparait
   completement : c'est la forme que les familles connaissent. */
.b-o{display:none}
@media (min-width:900px){
  .b-r,.tr,.tr-o{display:none}
  .b-o{display:flex;background:var(--nav);align-items:stretch}
  .b-o a{color:#e7eaee;text-decoration:none;font-size:14px;font-weight:600;line-height:1.15;
    padding:12px 18px;display:flex;align-items:center;text-align:center;white-space:nowrap}
  .b-o a:hover{background:var(--nav-h)}
  .b-o a.on{background:var(--carte);color:var(--txt);font-weight:700}
  .b-o a.og-m{padding:12px 16px}
  .b-o a.og-m svg{width:24px;height:24px}
}

/* ── Sous-bandeau de section ─────────────────────────────────────────────── */
.b-t{background:var(--sous);color:var(--sous-t);font-size:13.5px;font-weight:700;
  padding:9px 14px;border-bottom:1px solid var(--ligne)}

/* ── Barre de filtres ────────────────────────────────────────────────────── */
.f-b{display:flex;gap:8px;align-items:center;flex-wrap:wrap;padding:10px 14px;
  background:var(--carte);border-bottom:1px solid var(--ligne)}
.seg{display:inline-flex;border:1px solid var(--marque);border-radius:6px;overflow:hidden}
.seg a{padding:8px 14px;font-size:13px;font-weight:600;color:var(--marque);text-decoration:none;
  border-right:1px solid var(--marque)}
.seg a:last-child{border-right:0}
.seg a.on{background:var(--marque);color:#fff}
.f-l{font-size:13px;color:var(--dim);display:inline-flex;align-items:center;min-height:34px}
/* Navigation de semaine */
.f-b:has(.sem){background:var(--bandeau);border-bottom:0}
.f-b:has(.sem) .f-l{color:#fff}
.sem{display:inline-flex;align-items:center;gap:6px;color:#fff}
.sem b{font-size:14px;padding:0 4px;font-weight:700}
.sem-b{display:flex;align-items:center;justify-content:center;width:34px;height:34px;
  border:1px solid rgba(255,255,255,.5);border-radius:5px;text-decoration:none;color:#fff;
  font-size:19px;line-height:1}

/* ── Corps : liste des matieres + contenus ───────────────────────────────── */
/* minmax(0,…) est indispensable : par defaut une colonne de grille prend la largeur
   de son contenu le plus large. Le ruban des matieres, en flex, elargissait alors
   toute la page au lieu de defiler — d'ou le debordement horizontal sur telephone. */
.col{display:grid;grid-template-columns:minmax(0,1fr);gap:0}
@media (min-width:820px){ .col{grid-template-columns:280px minmax(0,1fr)} }

/* Liste des matieres : colonne a gauche sur grand ecran, rubans defilants sur mobile */
.mat{background:var(--carte);border-bottom:1px solid var(--ligne);min-width:0;max-width:100%}
@media (min-width:820px){
  /* Le sommaire reste sous les yeux pendant qu'on parcourt une longue liste :
     sticky plutot que fixed, pour qu'il continue de suivre la grille et ne
     recouvre jamais le contenu. `align-self:start` est indispensable — sans lui la
     colonne s'etire sur toute la hauteur et sticky n'a plus rien a accrocher. */
  .mat{border-right:1px solid var(--ligne);border-bottom:0;
    position:sticky;top:0;align-self:start;max-height:100vh;overflow-y:auto}
}
.mat-l{display:flex;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;
  padding:8px;max-width:100%}
/* Sur telephone le ruban des matieres reste colle en haut : c'est le seul moyen de
   changer de matiere sans remonter toute la page. */
@media (max-width:819px){
  .mat{position:sticky;top:0;z-index:5;box-shadow:0 1px 0 var(--ligne)}
}
.mat-l::-webkit-scrollbar{display:none}
@media (min-width:820px){ .mat-l{display:block;padding:0} }
.mat-i{flex:0 0 auto;display:flex;align-items:center;gap:9px;padding:11px 13px;
  text-decoration:none;border-radius:8px;white-space:nowrap;font-size:13px;font-weight:700;
  letter-spacing:.02em;text-transform:uppercase}
@media (min-width:820px){ .mat-i{border-radius:0;border-bottom:1px solid var(--ligne);white-space:normal} }
.mat-i.on{background:var(--sous)}
.mat-c{width:4px;align-self:stretch;min-height:17px;border-radius:2px;flex:0 0 4px}
.mat-n{flex:1;min-width:0}
.mat-q{color:var(--dim);font-weight:600;font-size:12.5px}

/* Contenus */
.cont{padding:14px;min-width:0}
@media (min-width:900px){ .cont{padding:18px 22px} }
.jour{font-size:19px;font-weight:800;color:var(--marque);margin:6px 0 4px;
  padding-bottom:8px;border-bottom:1px solid var(--ligne)}
.ent-i{padding:16px 0 15px;border-bottom:1px solid var(--ligne)}
.ent-h2{display:flex;gap:11px;align-items:flex-start}
.ent-c{width:3px;align-self:stretch;min-height:34px;border-radius:2px;flex:0 0 3px}
.ent-m{font-size:13.5px;font-weight:800;letter-spacing:.02em;text-transform:uppercase}
.ent-p{font-size:13px;color:var(--dim);margin-top:1px}
.ent-t{margin-left:auto;font-size:13px;color:var(--dim);white-space:nowrap;padding-left:10px}
.ent-ti{font-weight:700;margin:10px 0 5px}
.ent-x{color:var(--txt);opacity:.85;white-space:pre-line}
.pil{display:inline-block;margin-top:12px;padding:8px 16px;border:1px solid var(--marque);
  border-radius:20px;color:var(--marque);font-size:13.5px;font-weight:600;text-decoration:none;background:var(--carte)}

/* ── Emploi du temps ─────────────────────────────────────────────────────── */
/* Grille sur grand ecran, liste jour par jour sur telephone : une grille de six
   colonnes est illisible sur cinq pouces, une liste fait perdre la vue d'ensemble
   sur un ordinateur. Les deux rendus viennent des memes donnees. */
.edt{display:none}
.edt-m{display:block}
@media (min-width:760px){ .edt{display:block;overflow-x:auto} .edt-m{display:none} }

.edt-h{display:grid;grid-template-columns:56px repeat(5,1fr);gap:1px;margin-bottom:1px}
.edt-j{background:transparent;color:var(--txt);text-align:center;padding:7px 4px 9px;
  font-size:13px;font-weight:600;text-transform:none}
.edt-j.auj{font-weight:800;text-decoration:underline;text-underline-offset:4px}
.edt-c{position:relative;display:grid;grid-template-columns:56px repeat(5,1fr);gap:1px}
.edt-hh{position:relative}
.edt-hl{position:absolute;left:0;right:6px;text-align:right;font-size:11.5px;color:var(--dim);
  transform:translateY(-6px)}
.edt-col{position:relative;background:var(--carte);border:1px solid var(--grille)}

.edt-li{display:none}
 /* Pas de bordure basse : elle se doublait avec la ligne horaire juste en dessous
    et avec le bord haut du creneau suivant, ce qui epaississait la grille. */
.cr{position:absolute;left:2px;right:2px;border:1px solid var(--grille);border-bottom:0;
  border-left:4px solid;border-radius:2px;padding:5px 6px;overflow:hidden}
/* Creneau sans cours : un simple aplat gris */
.cr-vide{position:absolute;left:2px;right:2px;background:var(--vide);border-radius:2px}
.cr-vide + .cr-vide{border-top:1px solid var(--carte)}
.cr{text-align:center;padding:6px 5px}
.cr-m{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.01em;
  line-height:1.2;color:var(--txt)}

.cr-s{font-size:10.5px;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* Selecteur de jour : six cibles larges, le jour courant souligne */
.sel-j{display:flex;gap:6px;margin-bottom:14px}
.sel-j a{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;
  padding:10px 2px;border:1px solid var(--ligne);border-radius:9px;background:var(--carte);
  text-decoration:none;color:var(--dim);min-height:52px;justify-content:center}
.sel-j a b{font-size:15px;font-weight:800;color:var(--txt)}
.sel-j a i{font-style:normal;font-size:12px}
.sel-j a.auj{border-color:var(--marque)}
.sel-j a.on{background:var(--marque);border-color:var(--marque)}
.sel-j a.on b,.sel-j a.on i{color:#fff}

.cm{background:var(--carte);border:1px solid var(--ligne);border-left:3px solid;
  border-radius:7px;padding:11px 13px;margin-bottom:8px}
.cm-h{display:flex;align-items:baseline;gap:10px}
.cm-m{font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.02em}
.cm-t{margin-left:auto;font-size:13px;color:var(--dim);white-space:nowrap}
.cm-d{font-size:12.5px;color:var(--dim);margin-top:3px}
.jour.auj{color:var(--marque)}

/* ── Communication : liste a gauche, message a droite ────────────────────── */
.ms{display:grid;grid-template-columns:minmax(0,1fr)}
@media (min-width:900px){ .ms{grid-template-columns:340px minmax(0,1fr)} }
.ms-l{list-style:none;margin:0;padding:0;background:var(--carte);border-bottom:1px solid var(--ligne)}
@media (min-width:900px){
  .ms-l{border-right:1px solid var(--ligne);border-bottom:0;
    position:sticky;top:0;align-self:start;max-height:100vh;overflow-y:auto}
}
.ms-l a{display:block;padding:14px 16px;text-decoration:none;border-bottom:1px solid var(--ligne);
  border-left:3px solid transparent}
.ms-l a.on{background:var(--sous);border-left-color:var(--marque)}
/* Objet a gauche, trombone a droite : on repere une piece jointe sans ouvrir. */
.ms-pj{float:right;margin-left:10px;color:var(--dim);font-size:15px}
.ms-s{display:block;font-size:14.5px;overflow-wrap:anywhere}
.ms-d{display:block;font-size:12.5px;color:var(--dim);margin-top:3px;line-height:1.45}
/* Non lu : le sujet en gras et une pastille, comme dans une messagerie */
.ms-l a.nl .ms-s{font-weight:700}
.ms-l a.nl .ms-s::before{content:'';display:inline-block;width:8px;height:8px;border-radius:50%;
  background:var(--marque);margin-right:8px;vertical-align:1px}
.ms-v{padding:18px 20px;min-width:0}
.ms-v h2{font-size:19px;margin:10px 0 4px;overflow-wrap:anywhere}
.ms-m{font-size:13px;color:var(--dim);margin-bottom:14px;line-height:1.45}
.ms-r{display:none;font-size:13.5px;font-weight:600;color:var(--marque);text-decoration:none}
/* Sur telephone on ne montre qu'un volet a la fois */
@media (max-width:899px){
  .ms.ouvert .ms-l{display:none}
  .ms:not(.ouvert) .ms-v{display:none}
  .ms-r{display:inline-block;min-height:40px;line-height:40px}
}
@media (min-width:900px){ .ms-vide{display:flex;align-items:center;justify-content:center} }

/* ── Travail a faire, dans le cahier de textes ───────────────────────────── */
.dv{background:var(--carte);border:1px solid var(--ligne);border-left:3px solid var(--marque);
  border-radius:7px;padding:12px 14px;margin-top:10px}
.dv.fait{border-left-color:var(--dim)}
.dv-c{min-width:0}
.dv form{margin:0}
/* Ligne d'entete : la matiere a gauche, la pastille « Fait » a droite. */
.dv-m{display:flex;align-items:center;justify-content:space-between;gap:8px;
  font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--dim)}
.dv-fb{text-transform:none;letter-spacing:0;font-size:11.5px;font-weight:700;color:var(--v);
  background:color-mix(in srgb,var(--v) 14%,transparent);border-radius:99px;padding:2px 9px}
.dv-g{font-size:12.5px;color:var(--dim);margin-top:3px}
.dv-t{font-size:14.5px;font-weight:600;margin-top:5px;overflow-wrap:anywhere}
.dv-x{font-size:13.5px;color:var(--dim);margin-top:4px;overflow-wrap:anywhere;white-space:pre-line}
/* Piece jointe : la pastille grise de Pronote, cliquable en entier. */
.dv-pj{display:inline-flex;align-items:center;gap:7px;margin-top:9px;padding:7px 11px;
  background:var(--sous);border-radius:6px;font-size:13px;color:var(--texte);text-decoration:none;
  min-height:38px;box-sizing:border-box;max-width:100%;overflow-wrap:anywhere}
/* « J'ai termine » : aligne a droite, comme dans Pronote. */
.dv-f{display:flex;justify-content:flex-end;margin-top:8px}
.dv-f button{display:inline-flex;align-items:center;gap:8px;border:0;background:none;cursor:pointer;
  font:inherit;font-size:13.5px;color:var(--dim);padding:6px 0;min-height:38px}
.dv-k{width:17px;height:17px;flex:0 0 auto;border:1.5px solid var(--dim);border-radius:4px;
  display:inline-flex;align-items:center;justify-content:center;font-size:12px;line-height:1;color:#fff}
.dv-k.on{background:var(--marque);border-color:var(--marque)}
.dv.fait .dv-t{opacity:.6}
.dv-b{margin-top:12px;padding-top:10px;border-top:1px dashed var(--ligne)}
.dv-h{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--dim)}

/* Travail a faire : une fois rendu, il s'efface visuellement sans disparaitre */
.ent-i.fait{opacity:.55}
.ent-i.fait .ent-ti{text-decoration:line-through}
.ent-i form:not(.dv-f){display:inline}

/* Notes */
.tab{width:100%;min-width:0;border-collapse:collapse;table-layout:fixed;background:var(--carte);border:1px solid var(--ligne);border-radius:8px;overflow:hidden}
.tab th{text-align:left;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--dim);
  padding:10px 12px;background:var(--sous);color:var(--sous-t)}
.tab td{padding:11px 12px;border-top:1px solid var(--ligne);overflow-wrap:anywhere}
.tab .mm{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13px;text-transform:uppercase}
.tab .cc{width:3px;height:16px;border-radius:2px;flex:0 0 3px}
.nn{font-weight:800;white-space:nowrap;font-size:16px}
.nn span{font-weight:500;color:var(--dim);font-size:12.5px}
.nn.bien{color:var(--v)} .nn.moyen{color:var(--o)} .nn.faible{color:var(--r)}

/* ── Bulletin ────────────────────────────────────────────────────────────── */
/* En-tete : l'eleve et la periode, comme sur un bulletin papier */
.bu-e{display:flex;align-items:center;gap:12px;background:var(--sous);border:1px solid var(--ligne);
  border-radius:8px 8px 0 0;padding:13px 16px;border-bottom:0}
.bu-e b{font-size:16px;display:block}
.bu-e i{font-style:normal;font-size:13px;color:var(--dim)}
.bu-p{margin-left:auto;font-size:13.5px;font-weight:700;color:var(--sous-t)}
.bu-t{border-radius:0 0 8px 8px}
.bu-pr{display:block;font-size:12px;color:var(--dim);margin-top:2px;text-transform:none;font-weight:400}
/* Appreciation : une ligne pleine largeur sous la matiere */
.bu-a td{padding:0 12px 12px;border-top:0;font-size:13.5px;color:var(--dim);font-style:italic}
.bu-t tfoot td{border-top:2px solid var(--ligne);font-size:15px;background:var(--sous)}
.bu-g{background:var(--carte);border:1px solid var(--ligne);border-radius:8px;padding:14px 16px;margin-top:14px}
.bu-g span{font-size:12.5px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--dim)}
.bu-g p{margin:6px 0 0;font-size:14.5px}
.tab td.dim{color:var(--dim)}
/* Colonnes secondaires : masquees sur telephone, ou la place manque.
   Le rang, lui, reste : c'est l'information que le parent cherche en premier. */
@media (max-width:600px){ .c-x{display:none} }
.nowrap{white-space:nowrap}
.rg{font-weight:700;white-space:nowrap}
.rg span{font-weight:400;color:var(--dim);font-size:12.5px}

/* Vie scolaire */
.abs{list-style:none;margin:0;padding:0}
.abs li{background:var(--carte);border:1px solid var(--ligne);border-left:3px solid var(--r);
  border-radius:8px;padding:12px 14px;margin-bottom:9px}
.abs li.ok{border-left-color:var(--v)}
.abs b{display:block}
.abs i{font-style:normal;font-size:13px;color:var(--dim)}
.eti{display:inline-block;font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;
  padding:3px 8px;border-radius:4px;background:#fee2e2;color:#991b1b;margin-left:8px}
.eti.ok{background:#dcfce7;color:#166534}

/* Saisie professeur */
.frm{background:var(--carte);border:1px solid var(--ligne);border-radius:8px;padding:16px;margin-bottom:14px}
.frm label{display:block;font-size:12.5px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;
  color:var(--dim);margin:4px 0 6px}
.frm input,.frm textarea{width:100%;padding:11px 12px;border:1px solid var(--ligne);border-radius:6px;
  font:inherit;margin-bottom:12px;background:var(--carte);color:var(--txt)}
.frm input:focus,.frm textarea:focus{outline:0;border-color:var(--marque)}
/* Case a cocher : libelle en clair a droite, pas en petites capitales. */
.frm label.ck{display:flex;align-items:center;gap:9px;text-transform:none;letter-spacing:0;
  font-size:14px;font-weight:500;min-height:40px}
.frm label.ck input{width:auto;margin:0;accent-color:var(--marque)}
.el{display:flex;align-items:center;gap:9px;padding:9px 0;border-top:1px solid var(--ligne)}
.el>span{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}
.el input{width:74px;margin:0;text-align:center;font-weight:700;padding:11px 6px}
.el button{border:1px solid var(--r);background:#fff;color:var(--r);font:inherit;font-size:12.5px;
  font-weight:700;padding:10px 12px;border-radius:6px;cursor:pointer}
.val{width:100%;border:0;background:var(--marque);color:#fff;font:inherit;font-size:15px;font-weight:700;
  padding:14px;border-radius:6px;cursor:pointer;margin-top:12px}

/* Annuaire */
.acc{max-width:520px;margin:0 auto;padding:30px 16px}
.acc h1{font-size:23px;margin:0 0 6px;letter-spacing:-.01em}
.acc p{color:var(--dim);margin:0 0 18px}
.acc-q{width:100%;padding:14px 15px;font:inherit;font-size:16px;border:1px solid var(--ligne);
  border-radius:8px;background:var(--carte)}
.acc-q:focus{outline:0;border-color:var(--marque)}
.acc-r{display:grid;gap:8px;margin-top:14px}
.acc-i{display:flex;align-items:center;gap:12px;background:var(--carte);border:1px solid var(--ligne);
  border-radius:8px;padding:13px 15px;text-decoration:none}
.acc-p{width:5px;height:32px;border-radius:3px;flex:0 0 5px;background:var(--marque)}
.acc-i b{display:block;font-size:15px}
.acc-i i{display:block;font-style:normal;font-size:12.5px;color:var(--dim);margin-top:1px}
.vide{color:var(--dim);text-align:center;padding:30px 12px}
.note{color:var(--dim);font-size:12px;text-align:center;padding:14px}

/* ── Mes donnees ─────────────────────────────────────────────────────────── */
.prof{max-width:620px}
.prof-a{width:104px;height:104px;border-radius:50%;background:var(--sous);color:var(--marque);
  display:flex;align-items:center;justify-content:center;margin:4px 0 18px}
.prof-a svg{width:70px;height:70px}
.prof-h{font-size:15px;margin:20px 0 9px;color:var(--txt)}
.prof-h:first-of-type{margin-top:0}
.tab td.dim{color:var(--dim)}

/* ── Bibliotheque de cours ───────────────────────────────────────────────── */
.res{list-style:none;margin:0 0 16px;padding:0}
.res li{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--carte);border:1px solid var(--ligne);
  border-left:4px solid var(--dim);border-radius:7px;padding:12px 14px;margin-bottom:8px}
.res-p{width:26px;flex:0 0 26px;text-align:center;font-size:15px;color:var(--dim)}
.res-t{flex:1;min-width:0;font-weight:600}
.res-t i{display:block;font-style:normal;font-size:12.5px;color:var(--dim);font-weight:400;margin-top:2px}
.res .pil{margin-top:0;flex:0 0 auto}

/* ── Accueil : blocs ─────────────────────────────────────────────────────── */
.acc-g{display:grid;gap:14px}
@media (min-width:900px){ .acc-g{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));align-items:start} }
.w{background:var(--carte);border:1px solid var(--ligne);border-radius:8px;overflow:hidden}
.w-h{display:flex;align-items:center;gap:10px;padding:6px 15px;border-bottom:1px solid var(--ligne);
  background:var(--sous);min-height:46px}
.w-h b{font-size:14.5px;color:var(--sous-t)}
.w-h a{margin-left:auto;font-size:12.5px;font-weight:600;color:var(--marque);text-decoration:none;
  display:flex;align-items:center;min-height:40px;padding:0 4px;margin-right:-4px}
.w-l{list-style:none;margin:0;padding:0}
.w-l li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:2px 12px;padding:11px 15px;
  border-left:4px solid var(--dim);border-bottom:1px solid var(--ligne)}
.w-l li:last-child{border-bottom:0}
.w-t{grid-column:1;grid-row:1/3;align-self:center;font-size:13px;font-weight:700;color:var(--dim);white-space:nowrap}
/* Toujours en colonne 2 : sans cette contrainte, un bloc sans horaire voit son
   titre tomber en colonne 1 et la description se coller a droite. */
.w-m{grid-column:2;font-size:13.5px;font-weight:700;text-transform:uppercase;letter-spacing:.01em;
  overflow-wrap:anywhere}
.w-d{grid-column:2;font-size:12.5px;color:var(--dim);overflow-wrap:anywhere}
.w-v{color:var(--dim);padding:18px 15px;margin:0;font-size:13.5px}
/* Sous-titre d'echeance dans le bloc « Travail a faire » */
.w-j{font-size:12.5px;font-weight:700;color:var(--sous-t);background:var(--sous);
  padding:7px 15px;border-bottom:1px solid var(--ligne)}
/* Case a cocher : un bouton, donc il fonctionne sans JavaScript */
.w-c{grid-row:1/3;align-self:center;margin:0}
.w-c button{border:0;background:none;font-size:21px;line-height:1;color:var(--dim);cursor:pointer;
  min-width:40px;min-height:40px;display:flex;align-items:center;justify-content:center;margin-left:-8px}
.w-c button:hover{color:var(--marque)}
.w-l li .nn{font-size:14px}

/* Agenda : pastille date a gauche, comme un post-it */
.ag{list-style:none;margin:0;padding:0}
.ag li{display:flex;gap:13px;align-items:center;padding:11px 15px;border-bottom:1px solid var(--ligne)}
.ag li:last-child{border-bottom:0}
.ag-d{display:flex;flex-direction:column;align-items:center;justify-content:center;
  width:46px;flex:0 0 46px;padding:5px 0;border-radius:6px;background:var(--sous);color:var(--sous-t)}
.ag-d b{font-size:17px;font-weight:800;line-height:1}
.ag-d i{font-style:normal;font-size:11px;margin-top:1px}
.ag li>span:last-child b{display:block;font-size:14px}
.ag li>span:last-child i{display:block;font-style:normal;font-size:12.5px;color:var(--dim);margin-top:1px}

/* ── Rubriques a venir ───────────────────────────────────────────────────── */
.avenir{background:var(--carte);border:1px solid var(--ligne);border-radius:8px;padding:20px}
.avenir b{display:block;font-size:16px;margin-bottom:6px}
.avenir p{color:var(--dim);margin:0 0 10px}
.avenir-n{font-size:13px;border-top:1px solid var(--ligne);padding-top:12px;margin-top:4px!important}

/* ── Confort tactile sur telephone ───────────────────────────────────────── */
@media (max-width:759px){
  .mat-i{padding:12px 14px;font-size:13.5px}
  .pil{padding:11px 18px;font-size:14px}
  .tab td,.tab th{padding:13px 12px}
  .el{padding:12px 0}
  .el input{width:80px;padding:13px 6px;font-size:16px}   /* 16px : evite le zoom iOS */
  .el button{padding:12px 14px}
  .frm input,.frm textarea{font-size:16px;padding:13px}
  .acc-q{font-size:16px}
  .cont{padding:12px}
  .jour{font-size:17px}
}

@media (prefers-color-scheme: dark){
  :root{--txt:#e6eaf2;--dim:#96a0b0;--ligne:#2a3140;--fond:#0e1219;--carte:#161c26;
        --nav:#1d232e;--nav-h:#28303d;--sous:#1b2430;--sous-t:#7fd8c6;
        --bandeau:#39424f;--vide:#1d242f;--grille:#2f3846;--trait:#232b37}
  .pil{background:var(--carte)}
  .el button{background:var(--carte)}
  .eti{background:rgba(220,38,38,.2);color:#fca5a5}
  .eti.ok{background:rgba(22,163,74,.2);color:#86efac}
}

/* ── Cours annule (absence d'un professeur) ──────────────────────────────── */
/* Le bloc reste a sa place : l'eleve doit voir le trou dans sa journee. Hachures
   pour qu'on le distingue d'un creneau libre meme sans lire le libelle. */
.cr-off{background-image:repeating-linear-gradient(45deg,transparent,transparent 5px,
  var(--grille) 5px,var(--grille) 10px)!important;border-style:dashed}
.cr-off .cr-m{text-decoration:line-through;color:var(--dim)}
.cr-x{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--o);margin-top:2px}
.cm-off .cm-m{text-decoration:line-through}
.cm-x{font-size:12.5px;font-weight:700;color:var(--o);margin-top:3px}
.w-off .w-m{text-decoration:line-through;color:var(--dim)}
.w-off .w-d{color:var(--o);font-weight:600}

/* Actions d'un devoir : « Voir le cours » a gauche, « J'ai termine » a droite. */
.dv-a{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-top:8px}
.dv-a .dv-f{margin-top:0;flex:1}
.dv-fb.non{color:var(--dim);background:var(--sous)}

/* ── Profil : photo et deconnexion ───────────────────────────────────────── */
.b-av img,.prof-a img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}
.prof-a{overflow:hidden}
.ph form{margin:0}
.ph form+form{margin-top:12px;padding-top:12px;border-top:1px solid var(--ligne)}
.ph input[type=file]{width:100%;font-size:13.5px;color:var(--texte);padding:10px 0}
.ph input[type=file]::file-selector-button{margin-right:10px;padding:9px 13px;min-height:38px;
  border:1px solid var(--marque);border-radius:6px;background:none;color:var(--marque);
  font:inherit;font-size:13.5px;font-weight:600;cursor:pointer}
/* Bouton secondaire : meme gabarit, sans le poids visuel d'une action principale. */
.val.sec{background:none;border:1px solid var(--ligne);color:var(--texte)}
.msg{margin:0 0 14px;padding:11px 13px;border-radius:7px;font-size:13.5px;
  background:color-mix(in srgb,var(--r) 12%,transparent);color:var(--r)}
.msg.ok{background:color-mix(in srgb,var(--v) 12%,transparent);color:var(--v)}
.dx{margin-top:14px}
/* Lien vers l'IA gratuite : pas d'icone chargee, une fleche dans le texte. */
.w-ia{color:var(--marque);text-decoration:none;font-weight:700}
/* Remplacement : le cours a bien lieu — on l'annonce sans l'alarmisme de l'annulation. */
.cr-x.rp,.cm-x.rp{color:var(--marque)}
.w-rp{color:var(--marque);font-weight:700}

/* ── Connexion ───────────────────────────────────────────────────────────── */
/* Structure reprise de l'ecran d'identification scolaire francais — onglet,
   champs obligatoires, libelle et lien « oublie ? » sur la meme ligne, champs
   soulignes — mais AUX COULEURS DE L'ENT. C'est la meme application : l'eleve ne
   doit pas avoir l'impression de changer d'outil entre la connexion et son espace,
   ni en clair ni en sombre. */
.cnx-b{display:flex;align-items:center;justify-content:center;min-height:100dvh;
  padding:24px 16px}
.cnx{width:100%;max-width:540px}
/* Repere en haut a gauche, hors de la carte. */
.cnx-r{display:flex;align-items:center;gap:10px;color:var(--txt);font-size:15px;margin-bottom:16px}
.cnx-r svg{width:34px;height:26px;flex:0 0 auto;color:var(--marque)}
/* Onglet : il partage le fond de la carte et s'y raccorde, comme un dossier. */
.cnx-o{display:inline-block;background:var(--carte);color:var(--marque);
  font-size:15px;font-weight:700;padding:11px 22px;border:1px solid var(--ligne);
  border-bottom:0;border-top:3px solid var(--marque);border-radius:6px 6px 0 0}
.cnx-c{background:var(--carte);border:1px solid var(--ligne);
  border-radius:0 8px 8px 8px;padding:22px 20px;margin-top:-1px}
.cnx-t{font-size:19px;margin:0 0 4px;color:var(--txt);overflow-wrap:anywhere}
.cnx-s{font-size:14px;color:var(--dim);margin:12px 0 0;line-height:1.5}
.cnx-s code{background:var(--sous);color:var(--txt);padding:2px 6px;border-radius:4px;font-size:13px}
/* Mention des champs obligatoires, alignee a droite comme sur la maquette. */
.cnx-ob{font-size:13px;color:var(--dim);text-align:right;margin:0 0 6px}
.cnx-ob b,.cnx-l b{color:var(--r);font-weight:700;margin-left:2px}
/* Le libelle et son lien « oublie ? » partagent la ligne. Ils passent l'un sous
   l'autre sur les ecrans etroits plutot que de se chevaucher. */
.cnx-l{display:flex;align-items:baseline;justify-content:space-between;gap:10px;
  flex-wrap:wrap;margin-top:16px}
.cnx-l label{font-size:15px;color:var(--txt)}
.cnx-l a{font-size:13.5px;color:var(--marque);text-decoration:underline;
  text-underline-offset:3px;min-height:38px;display:inline-flex;align-items:center}
/* Champ souligne plutot qu'encadre : le trait epais porte le focus. */
.cnx input{width:100%;box-sizing:border-box;margin-top:6px;padding:13px 14px;
  font:inherit;font-size:16px;color:var(--txt);background:var(--sous);
  border:0;border-bottom:2px solid var(--dim);border-radius:6px 6px 0 0}
.cnx input:focus{outline:0;border-bottom-color:var(--marque);
  background:color-mix(in srgb,var(--marque) 10%,var(--sous))}
/* Le mot de passe reserve la place du bouton d'affichage. */
.cnx-mp{position:relative}
.cnx-mp input{padding-right:52px}
.cnx-oeil{position:absolute;right:4px;bottom:3px;width:44px;height:44px;border:0;
  background:none;color:var(--dim);cursor:pointer;display:flex;align-items:center;
  justify-content:center;padding:0}
.cnx-oeil svg{width:21px;height:21px}
/* Le trait oblique n'apparait que quand le mot de passe est masque. */
.cnx-oeil .barre{display:inline}
.cnx-oeil.on{color:var(--marque)}
.cnx-oeil.on .barre{display:none}
/* Bouton centre et non pleine largeur, comme sur la maquette : il se lit comme
   une action, pas comme une barre. */
.cnx .val{display:block;width:auto;margin:26px auto 0;padding:14px 44px;
  text-align:center;text-decoration:none;line-height:normal}
.cnx .msg{margin:0 0 14px}

/* ── Fiches eleves, cote personnel ───────────────────────────────────────── */
/* Mobile d'abord : une fiche par ligne, le bouton PLEINE LARGEUR sous les
   informations. Au-dela de 600 px il repasse a droite, sur la meme ligne. */
.fic{list-style:none;margin:0;padding:0}
.fic li{background:var(--carte);border:1px solid var(--ligne);border-radius:8px;
  padding:12px 14px;margin-bottom:8px}
.fic-i{min-width:0}
.fic-i b{display:block;font-size:15px;overflow-wrap:anywhere}
.fic-i span{display:block;font-size:12.5px;color:var(--dim);margin-top:2px;overflow-wrap:anywhere}
.fic-id i{font-style:normal;color:var(--o)}
.fic-id i.exp{color:var(--r);font-weight:700}
.fic form{margin:10px 0 0}
.fic .pil{display:block;width:100%;text-align:center}
@media (min-width:600px){
  .fic li{display:flex;align-items:center;justify-content:space-between;gap:14px}
  .fic form{margin:0;flex:0 0 auto}
  .fic .pil{width:auto}
}
/* Recherche : le champ prend la place disponible, le bouton reste tapable. */
.rch{display:flex;gap:8px;align-items:center;margin:0;flex:1 1 220px;min-width:0}
.rch input{flex:1;min-width:0;padding:9px 12px;border:1px solid var(--ligne);border-radius:6px;
  background:var(--carte);color:var(--txt);font:inherit;font-size:14px;min-height:40px}
.rch button{flex:0 0 auto;min-height:40px;padding:0 14px;border:1px solid var(--marque);
  border-radius:6px;background:none;color:var(--marque);font:inherit;font-size:13.5px;
  font-weight:600;cursor:pointer}
/* Le code provisoire : gros, selectionnable, impossible a rater. */
.pin-b{display:block}
.pin-b span{display:block;font-weight:400;margin-top:4px;line-height:1.45}
.pin{font-size:26px;letter-spacing:.22em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  user-select:all}
