/* Application Prof V0.16.3.1 — navigation globale modernisée. */
[data-role="global-header"] .main-nav{
  display:flex;
  align-items:center;
  gap:4px;
}
[data-role="global-header"] .main-nav>a,
[data-role="global-header"] .nav-section>summary{
  min-height:38px;
  box-sizing:border-box;
  display:flex;
  align-items:center;
  gap:7px;
  padding:8px 11px;
  border-radius:9px;
  color:inherit;
  font-weight:700;
  text-decoration:none;
  cursor:pointer;
  white-space:nowrap;
}
[data-role="global-header"] .main-nav>a:hover,
[data-role="global-header"] .main-nav>a.is-active,
[data-role="global-header"] .nav-section>summary:hover,
[data-role="global-header"] .nav-section>summary.is-active,
[data-role="global-header"] .nav-section[open]>summary{
  background:color-mix(in srgb,var(--primary) 10%,transparent);
  color:var(--primary);
}
[data-role="global-header"] .nav-section{
  position:relative;
}
[data-role="global-header"] .nav-section>summary{
  list-style:none;
}
[data-role="global-header"] .nav-section>summary::-webkit-details-marker{display:none}
[data-role="global-header"] .nav-section>summary::after{
  content:"⌄";
  display:inline-block;
  margin-left:1px;
  font-size:.82rem;
  line-height:1;
  opacity:.62;
  transform:translateY(-1px);
}
[data-role="global-header"] .nav-section[open]>summary::after{
  transform:rotate(180deg) translateY(1px);
}
[data-role="global-header"] .nav-dropdown-menu{
  min-width:255px;
  padding:7px;
  border-radius:12px;
  box-shadow:0 16px 38px rgba(15,23,42,.16);
}
[data-role="global-header"] .nav-dropdown-menu>a{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:14px;
  min-height:40px;
  padding:9px 10px;
  border-radius:8px;
  text-decoration:none;
}
[data-role="global-header"] .nav-dropdown-menu>a:hover,
[data-role="global-header"] .nav-dropdown-menu>a.is-active{
  background:color-mix(in srgb,var(--primary) 9%,transparent);
}
.nav-item-main{
  min-width:0;
  display:flex;
  align-items:center;
  gap:9px;
}
.nav-menu-icon{
  width:17px;
  height:17px;
  flex:0 0 17px;
  fill:none;
  stroke:currentColor;
  stroke-width:1.8;
  stroke-linecap:round;
  stroke-linejoin:round;
  opacity:.78;
}
.nav-shortcut{
  flex:0 0 auto;
  padding:2px 6px;
  border:1px solid color-mix(in srgb,currentColor 22%,transparent);
  border-radius:5px;
  background:color-mix(in srgb,currentColor 4%,transparent);
  color:inherit;
  font:600 .68rem/1.25 ui-monospace,SFMono-Regular,Consolas,monospace;
  /* V0.18.11.67 — .62 estompait trop : en Ardoise & Petrole, au survol (#0f5960 sur #dcebec),
     le raccourci tombait a 2,8. A .9, il reste en retrait et depasse 4,5 dans les trois themes,
     au repos comme au survol (mesure : 4,9 au pire, Petrole au survol ; .85 donnait 4,45). */
  opacity:.9;
}
.nav-menu-separator{
  height:1px;
  margin:6px 7px;
  background:var(--line);
}
.course-page-hero{
  align-items:center;
  gap:16px;
}
.course-page-actions{
  display:flex;
  gap:9px;
  align-items:center;
  justify-content:flex-end;
  flex-wrap:wrap;
}
.course-page-actions .nav-menu-icon{
  width:16px;
  height:16px;
}
.configuration-tools-grid .configuration-appearance-card .theme-preview-dots{
  display:flex;
  gap:5px;
  margin:.75rem 0 1rem;
}
.configuration-tools-grid .configuration-appearance-card .theme-preview-dots span{
  width:18px;
  height:18px;
  border-radius:50%;
  border:1px solid var(--line);
  background:var(--surface);
}
.configuration-tools-grid .configuration-appearance-card .theme-preview-dots span:nth-child(2){background:var(--primary)}
.configuration-tools-grid .configuration-appearance-card .theme-preview-dots span:nth-child(3){background:var(--bg)}
.keyboard-shortcut-hint{
  position:fixed;
  left:50%;
  bottom:26px;
  z-index:10010;
  transform:translateX(-50%);
  padding:8px 12px;
  border-radius:999px;
  background:#111827;
  color:#fff;
  font-size:.82rem;
  font-weight:700;
  box-shadow:0 10px 26px rgba(15,23,42,.25);
  pointer-events:none;
}
.keyboard-shortcuts-overlay{
  position:fixed;
  inset:0;
  z-index:10020;
  display:grid;
  place-items:center;
  padding:20px;
  background:rgba(15,23,42,.42);
  backdrop-filter:blur(2px);
}
.keyboard-shortcuts-card{
  width:min(520px,100%);
  max-height:min(720px,88vh);
  overflow:auto;
  border:1px solid var(--line);
  border-radius:16px;
  background:var(--surface);
  color:var(--text);
  box-shadow:0 24px 60px rgba(15,23,42,.28);
  padding:18px;
}
.keyboard-shortcuts-card header{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:16px;
  margin-bottom:12px;
}
.keyboard-shortcuts-card h2{margin:0}
.keyboard-shortcuts-card header button{
  width:34px;
  height:34px;
  min-width:34px;
  padding:0;
  border-radius:9px;
}
.keyboard-shortcuts-list{
  display:grid;
  gap:2px;
}
.keyboard-shortcuts-row{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  padding:9px 4px;
  border-bottom:1px solid var(--line);
}
.keyboard-shortcuts-row:last-child{border-bottom:0}
.keyboard-shortcuts-row kbd{
  padding:3px 7px;
  border:1px solid var(--line);
  border-bottom-width:2px;
  border-radius:6px;
  background:var(--bg);
  font:700 .75rem/1.2 ui-monospace,SFMono-Regular,Consolas,monospace;
}
@media(max-width:880px){
  [data-role="global-header"]{flex-wrap:wrap}
  [data-role="global-header"] .main-nav{margin-left:auto}
  [data-role="global-header"] .nav-dropdown-menu{min-width:235px}
}
@media(max-width:640px){
  [data-role="global-header"] .main-nav{
    width:100%;
    justify-content:space-between;
    gap:2px;
  }
  [data-role="global-header"] .main-nav>a,
  [data-role="global-header"] .nav-section>summary{
    padding:8px 7px;
    font-size:.88rem;
    /* V0.18.12.161.1 — libellé et flèche plus proches : « Paramètres » et sa flèche tenaient à peine dans une des quatre colonnes égales d'un téléphone. */
    gap:3px;
  }
  [data-role="global-header"] .nav-section:last-child .nav-dropdown-menu{
    right:0;
    left:auto;
  }
  .nav-shortcut{display:none}
  .course-page-hero{align-items:flex-start}
  .course-page-actions{width:100%;justify-content:flex-start}
  .course-page-actions .button{flex:1 1 auto;text-align:center}
}
@media print{
  .keyboard-shortcuts-overlay,.keyboard-shortcut-hint{display:none!important}
}

/* V0.18.11.24 — rapatriee depuis evaluation-correction.css, qui n'est pas
   chargee sur la page Corrections : la note restait sans mise en forme.
   Toutes les autres regles .corrections-hub-* vivent deja ici. */
.corrections-hub-pap-note{margin-top:.5rem !important}
/* V0.18.11.17 — lancement en lot des analyses IA. */
.corrections-hub-launch{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  flex-wrap:wrap;
  margin:0 0 14px;
  padding:14px 16px;
  border:1px solid #d4c2ec;
  border-left:4px solid #7057a8;
  border-radius:12px;
  background:#f1edfa;
  color:#3f2d63;
}
.corrections-hub-launch strong{display:block;font-size:1.02rem}
.corrections-hub-launch .meta{margin:.3rem 0 0;max-width:62ch;color:#5c4a82}
.corrections-hub-launch button{margin:0;background:#7057a8;color:#fff;border-color:#7057a8}
.corrections-hub-launch button:hover:not(:disabled){background:#604895}
.corrections-hub-launch button:disabled{opacity:.5}
.corrections-hub-launch-progress{
  margin:-6px 0 14px;
  padding:10px 14px;
  border:1px solid var(--line);
  border-radius:10px;
  background:var(--surface);
  font-weight:700;
  font-size:.9rem;
}
.corrections-hub-launch-progress[data-tone="error"]{border-color:#f0c2be;background:#fdeceb;color:#a8352c}
.corrections-hub-launch-progress[data-tone="done"]{border-color:#b6ddc6;background:#e8f3ec;color:#2f6b4f}
[data-theme="night"] .corrections-hub-launch{background:#2d2740;border-color:#4b3f68;color:#cdbdf0}
[data-theme="night"] .corrections-hub-launch .meta{color:#a99ac8}

/* V0.18.11.52 — LA PAGE CORRECTIONS : une bande par classe, une ligne par
   evaluation. Uniquement des jetons de theme : les anciennes cartes ecrivaient
   leurs couleurs en dur et ne suivaient que le theme Nuit, Petrole heritant du
   theme clair. Un zero n'est plus affiche du tout (il l'etait a une opacite de
   .55, soit un contraste d'environ 2,2). */
.corrections-hero{margin-bottom:18px}
.corrections-compteurs{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;max-width:540px}
.corrections-compteur{display:inline-flex;align-items:center;padding:5px 11px;border-radius:999px;border:1px solid var(--line);background:var(--tone-chip);color:var(--text);font-size:.86rem;font-weight:750;line-height:1.3;text-decoration:none}
a.corrections-compteur{text-decoration:underline;text-underline-offset:2px}
.corrections-compteur.is-a-faire,.corrections-puce.is-a-faire,.corrections-etape.is-en-cours{background:var(--theme-warning-bg);color:var(--theme-warning-text);border-color:var(--theme-warning-border)}
.corrections-compteur.is-ia,.corrections-puce.is-ia{background:var(--theme-ai-bg);color:var(--theme-ai-text);border-color:var(--theme-ai-border)}
.corrections-compteur.is-alerte,.corrections-puce.is-alerte{background:color-mix(in srgb,var(--danger) 10%,var(--surface));color:color-mix(in srgb,var(--danger) 75%,var(--text));border-color:color-mix(in srgb,var(--danger) 40%,var(--surface))}
.corrections-compteur.is-a-jour,.corrections-etape.is-fait{background:var(--theme-auto-bg);color:var(--theme-auto-text);border-color:var(--theme-auto-border)}
.corrections-compteur.is-neutre{background:transparent;border-color:transparent;color:var(--muted);font-weight:650}

/* Les cases du lancement en lot, dans le bandeau : la ou agit le bouton. */
.corrections-lot-texte{flex:1 1 420px;min-width:0}
.corrections-lot-choix{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.corrections-lot-case{display:inline-flex;align-items:center;gap:6px;max-width:100%;margin:0;padding:4px 10px;border:1px solid var(--theme-ai-border);border-radius:999px;background:var(--surface);color:var(--text);font-size:.82rem;font-weight:600;cursor:pointer}
.corrections-lot-case input[type="checkbox"]{flex:0 0 auto;width:auto;min-width:0;margin:0;padding:0}
/* Seul le titre se coupe : la classe et le nombre de copies restent lisibles. */
.corrections-lot-libelle{display:flex;gap:.3em;min-width:0}
.corrections-lot-titre{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:500}
.corrections-lot-case strong,.corrections-lot-n{flex:none;white-space:nowrap}
/* Le bandeau met ses <strong> en bloc (titre du bandeau) : pas dans une case. */
.corrections-hub-launch .corrections-lot-case strong{display:inline;font-size:inherit}
#analyse-lot{scroll-margin-top:92px}

/* Les bandes. L'ordre est fixe ; l'ouverture dit s'il reste quelque chose a faire. */
/* V0.18.11.72.1 — 10 px entre deux bandes les faisaient lire comme un seul bloc (demande du concepteur, 27/09, Corrections et Évaluations) : 20 px. */
.corrections-classes{display:flex;flex-direction:column;gap:20px}
/* V0.18.11.73 — le rattrapage relié : lien vers l'origine dans la phrase, mention sur l'origine. */
.corrections-eval-epreuve a,.evaluation-correction-lien-rattrapage a{color:inherit;text-decoration:underline;text-underline-offset:2px}
/* Un geste, pas une citation : la couleur d'action, soulignée (a{color:inherit} global sinon). */
.evaluations-outils-rattrapage a{color:var(--primary);font-weight:700;text-decoration:underline;text-underline-offset:2px}
.corrections-eval-rattrapage{font-size:.86rem;font-weight:700;color:var(--primary);text-decoration:underline;text-underline-offset:2px}
.evaluations-outils-rattrapage{margin:0}
.corrections-classe{margin:0;padding:0;overflow:hidden;scroll-margin-top:92px}
/* V0.18.11.70 — l'en-tête des bandes légèrement teinté (5 % : à 8 %, le gris .meta passait sous 4,5 en Classique) ; Corrections et Évaluations. */
.corrections-classe>summary{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:6px 12px;padding:10px 16px;cursor:pointer;list-style:none;background:color-mix(in srgb,var(--primary) 5%,var(--surface))}
.corrections-classe>summary::-webkit-details-marker{display:none}
.corrections-classe>summary:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}
.corrections-classe[open]>summary{border-bottom:1px solid var(--line)}
.corrections-classe-nom{min-width:0;font-size:1rem}
.corrections-classe-nom::before{content:"▸";display:inline-block;width:1.1em;color:var(--muted);transition:transform .15s}
.corrections-classe[open] .corrections-classe-nom::before{transform:rotate(90deg)}
.corrections-classe-nom .meta{font-size:.86rem}
.corrections-classe-etat{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.corrections-puce,.corrections-etape{padding:2px 9px;border-radius:999px;border:1px solid var(--line);background:var(--surface);color:var(--muted);font-size:.78rem;font-weight:750;line-height:1.4}

/* Une ligne : date | titre | geste, puis l'avancement et le poste dessous. */
.corrections-eval{display:grid;grid-template-columns:3.4rem minmax(0,1fr) auto;grid-template-areas:"date titre action" ". suivi suivi";gap:4px 14px;align-items:start;padding:10px 16px;border-top:1px solid var(--line);scroll-margin-top:92px}
.corrections-eval:first-child{border-top:0}
.corrections-eval.has-work{box-shadow:inset 3px 0 0 var(--theme-warning-border)}
.corrections-eval-date{grid-area:date;padding-top:2px;color:var(--muted);font-size:.84rem;font-variant-numeric:tabular-nums}
.corrections-eval-titre{grid-area:titre;color:var(--text);font-size:.97rem;font-weight:750;line-height:1.35;text-decoration:none;overflow-wrap:anywhere}
.corrections-eval-titre:hover,.corrections-eval-titre:focus-visible{text-decoration:underline}
.corrections-eval-action{grid-area:action;justify-self:end}
.corrections-action{margin:0;padding:6px 12px;font-size:.86rem;white-space:nowrap}
/* Specificite au-dessus des regles de theme sur .button.secondary (Petrole et
   Nuit : body[data-theme] .button.secondary, et leur :hover), qui l'emportaient
   et rendaient le bouton d'analyse gris. Trouve a la relecture. */
.button.secondary.corrections-action.is-ia,
.button.secondary.corrections-action.is-ia:hover{background:var(--theme-ai-bg);color:var(--theme-ai-text);border-color:var(--theme-ai-border)}
.corrections-action-etat{color:var(--muted);font-size:.86rem}
/* V0.18.11.53 — trois gestes ecrits, un seul visible : le display de .button
   l'emportait sur [hidden] et les montrait tous les trois. */
.corrections-action[hidden],.corrections-compteur[hidden],.corrections-puce[hidden]{display:none}
.corrections-eval-suivi{grid-area:suivi;display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;min-width:0}
.corrections-frise{display:flex;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}
.corrections-eval-meta{min-width:0;color:var(--muted);font-size:.82rem;overflow-wrap:anywhere}
.corrections-eval-meta .is-ia{color:var(--theme-ai-text);font-weight:650}
/* V0.18.11.70 — la phrase du type d'épreuve, en tête de la zone de suivi. */
.corrections-eval-epreuve{min-width:0;color:var(--text);font-size:.82rem;font-weight:700;overflow-wrap:anywhere}
.corrections-eval-epreuve.is-alerte{color:color-mix(in srgb,var(--danger) 75%,var(--text))}
.corrections-eval-meta .is-alerte{color:color-mix(in srgb,var(--danger) 75%,var(--text));font-weight:650}
.corrections-eval-meta [data-poste-nom]{font-weight:650}
/* evaluation-device-label.js pose .is-ce-poste quand le nom est celui de ce navigateur. */
.corrections-eval-meta [data-poste-nom].is-ce-poste::after{content:" (ce poste)";font-weight:500}
/* V0.18.12.299 — L'ÉTAPE « RENDUE AUX ÉLÈVES » (remplace les trois cases) : un repli dont le titre est une pastille au
   bord en pointillés (déclarée par l'enseignant, comme les cases d'avant), verte une fois rendue, orange quand une copie
   validée depuis la rouvre. Ouvert, il prend toute la largeur de la ligne et propose les trois façons de rendre.
   Uniquement des jetons du thème ; boutons espacés (gap) ; cibles de 40 px au doigt. */
.corrections-rendre{min-width:0;max-width:100%}
.corrections-rendre[open]{flex:1 1 100%}
.corrections-rendre-titre{display:inline-flex;align-items:center;gap:6px;max-width:100%;padding:2px 10px;border:1px dashed color-mix(in srgb,var(--muted) 55%,var(--line));border-radius:999px;background:transparent;color:var(--muted);font-size:.78rem;font-weight:650;line-height:1.4;cursor:pointer;list-style:none;overflow-wrap:anywhere}
.corrections-rendre-titre::-webkit-details-marker{display:none}
.corrections-rendre-titre::after{content:"▾";font-size:.85em}
.corrections-rendre[open]>.corrections-rendre-titre::after{content:"▴"}
.corrections-rendre-titre:focus-visible{outline:2px solid var(--primary);outline-offset:1px}
.corrections-rendre.is-fait>.corrections-rendre-titre{border-style:solid;border-color:var(--theme-auto-border);background:var(--theme-auto-bg);color:var(--theme-auto-text)}
.corrections-rendre.is-a-refaire>.corrections-rendre-titre{border-color:var(--theme-warning-border);background:var(--theme-warning-bg);color:var(--theme-warning-text)}
.corrections-rendre-panneau{display:grid;gap:10px;margin:8px 0 4px;padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--text)}
.corrections-rendre-etat{margin:0;font-size:.86rem}
.corrections-rendre-facons{display:grid;gap:6px;min-width:0;margin:0;padding:0;border:0}
.corrections-rendre-facons legend{margin:0 0 4px;padding:0;font-size:.86rem;font-weight:750}
.corrections-rendre-facon{display:flex;align-items:flex-start;gap:8px;margin:0;font-size:.88rem;font-weight:500;cursor:pointer}
.corrections-rendre-facon input[type="radio"]{flex:none;width:auto;min-width:0;height:auto;margin:.2em 0 0;padding:0;accent-color:var(--primary);cursor:pointer}
.corrections-rendre-facon .meta{font-size:.8rem}
.corrections-rendre-avis{margin:0;padding:8px 10px;border:1px solid var(--theme-warning-border);border-radius:8px;background:var(--theme-warning-bg);color:var(--theme-warning-text);font-size:.86rem;font-weight:650}
.corrections-rendre-avis[hidden]{display:none}
.corrections-rendre-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:6px}
.corrections-rendre-actions button,.corrections-rendre-actions .button{margin:0;padding:8px 14px;font-size:.88rem}
@media (max-width:640px),(pointer:coarse){
  .corrections-rendre-titre{min-height:40px;padding:6px 12px}
  .corrections-rendre-facon{min-height:40px;align-items:center}
  .corrections-rendre-facon input[type="radio"]{margin-top:0}
  .corrections-rendre-actions button,.corrections-rendre-actions .button{display:inline-flex;align-items:center;min-height:40px}
}
@media print{.corrections-rendre{display:none!important}}
/* V0.18.12.301 — LA CORRECTION EN LIGNE dans le panneau « Rendre aux élèves » (correction_en_ligne_panneau_html_v012301) : la case « Correction consultable en ligne », ou le
   lien ouvert avec son QR et l'adresse à copier, ou la phrase qui dit pourquoi rien n'est proposé. Jetons du thème seulement : le QR porte lui-même sa marge blanche (le script
   la dessine dans l'image), le voile du QR en grand prend le fond et le texte du thème. Boutons espacés (rangée corrections-rendre-actions), cibles de 40 px au doigt. */
.corrections-en-ligne{display:grid;gap:8px;min-width:0;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--tone-soft)}
.corrections-en-ligne-note,.corrections-en-ligne-etat{margin:0;font-size:.86rem;overflow-wrap:anywhere}
.corrections-en-ligne-note{color:var(--muted)}
.corrections-en-ligne-case{display:flex;align-items:flex-start;gap:8px;margin:0;font-size:.88rem;font-weight:500;cursor:pointer}
.corrections-en-ligne-case input[type="checkbox"]{flex:none;width:auto;min-width:0;height:auto;margin:.2em 0 0;padding:0;accent-color:var(--primary);cursor:pointer}
.corrections-en-ligne-case .meta{font-size:.8rem}
.corrections-en-ligne-lien{display:flex;flex-wrap:wrap;align-items:flex-start;gap:12px;min-width:0}
.corrections-en-ligne-qr{flex:none;line-height:0}
.corrections-en-ligne-qr:empty{display:none}
.corrections-en-ligne-qr img{display:block;width:132px;height:132px;image-rendering:pixelated}
.corrections-en-ligne-adresse{display:grid;gap:4px;flex:1 1 240px;min-width:0;margin:0;font-size:.82rem;font-weight:650}
.corrections-en-ligne-adresse input{width:100%;min-width:0;margin:0;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--text);font:inherit;font-weight:400}
.corrections-en-ligne .corrections-rendre-actions{margin-top:0}
@media (max-width:640px),(pointer:coarse){
  .corrections-en-ligne-case{min-height:40px;align-items:center}
  .corrections-en-ligne-case input[type="checkbox"]{margin-top:0}
  .corrections-en-ligne-adresse input{min-height:40px}
}
.correction-qr-grand{position:fixed;inset:0;z-index:2000;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:16px;background:var(--surface);color:var(--text);text-align:center;cursor:pointer}
.correction-qr-grand-titre{margin:0;max-width:90vw;font-size:1.5rem;font-weight:700;overflow-wrap:anywhere}
.correction-qr-grand-qr{line-height:0}
.correction-qr-grand-qr img{display:block;width:min(70vh,80vw,640px);height:auto;image-rendering:pixelated}
.correction-qr-grand-adresse{margin:0;max-width:90vw;font-size:1.1rem;word-break:break-all}
.correction-qr-grand-aide{margin:0;color:var(--muted);font-size:.9rem}
@media print{.corrections-en-ligne,.correction-qr-grand{display:none!important}}
/* Une evaluation terminee (rendue aux eleves, plus rien a traiter ; V0.18.12.299) s'estompe ; dans la
   bande, elle part dans le repli ferme « N evaluations terminees ». */
.corrections-eval.is-terminee{box-shadow:none}
.corrections-eval.is-terminee .corrections-eval-titre{color:var(--muted);font-weight:650}
.corrections-terminees{border-top:1px solid var(--line)}
.corrections-terminees>summary{padding:8px 16px;color:var(--muted);font-size:.86rem;font-weight:650;cursor:pointer;list-style:none}
.corrections-terminees>summary::-webkit-details-marker{display:none}
.corrections-terminees>summary::before{content:"▸";display:inline-block;width:1.1em;transition:transform .15s}
.corrections-terminees[open]>summary::before{transform:rotate(90deg)}
.corrections-terminees>summary:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}
.corrections-terminees[open]>summary{border-bottom:1px solid var(--line)}
/* Le message d'une case (enregistree, ou refusee) : en bas de l'ecran, parce
   que la case peut etre loin du haut de la page. Vide, il ne prend pas de place. */
.corrections-annonce{position:fixed;left:50%;bottom:calc(16px + env(safe-area-inset-bottom,0px));z-index:60;transform:translateX(-50%);width:max-content;max-width:calc(100vw - 32px);margin:0;padding:8px 14px;border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--text);box-shadow:0 6px 24px rgb(0 0 0 / .18);font-size:.88rem;font-weight:600}
.corrections-annonce:empty{display:none}
/* Le message ne contient rien de cliquable : un appui a travers lui atteint la
   case qu'il recouvre (a 375 px, il couvrait la case voisine pendant 5 s). */
.corrections-annonce{pointer-events:none}
.corrections-annonce[data-ton="erreur"]{border-color:color-mix(in srgb,var(--danger) 40%,var(--surface));color:color-mix(in srgb,var(--danger) 75%,var(--text))}
@media (prefers-reduced-motion:reduce){.corrections-classe-nom::before,.corrections-terminees>summary::before{transition:none}}
/* La barre du haut reste collee et passe sur deux rangees sous 760 px
   (application.css) : 159 px de haut. Une ancre posee sous 92 px de marge y
   arriverait cachee dessous. Trouve a la relecture (641 a 760 px). */
@media screen and (max-width:760px){.corrections-eval,.corrections-classe,#analyse-lot{scroll-margin-top:116px}}   /* V0.18.12.110 : la barre collée fait 103 px sur téléphone (159 avant) */
@media (max-width:640px){
  .corrections-compteurs{justify-content:flex-start}
  .corrections-eval{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"titre titre" "date action" "suivi suivi";padding:10px 14px}
  .corrections-eval-date{align-self:center}
}

/* V0.18.12.56 — pense-bête : l'icône de la barre du haut (même gabarit que les menus déroulants) et son panneau. */
[data-role="global-header"] .nav-note-button{
  position:relative;
  min-width:38px;
  min-height:38px;
  box-sizing:border-box;
  display:grid;
  place-items:center;
  margin:0;
  padding:8px 10px;
  border:1px solid var(--line);
  border-radius:9px;
  background:var(--tone-panel);
  color:var(--primary);
  cursor:pointer;
}
[data-role="global-header"] .nav-note-button:hover,
[data-role="global-header"] .nav-note-button[aria-expanded="true"]{
  background:var(--primary);
  color:var(--on-primary);
}
.nav-note-button .nav-menu-icon{width:19px;height:19px;flex:none;opacity:1}
.nav-note-count{
  position:absolute;
  top:-7px;
  right:-7px;
  min-width:19px;
  height:19px;
  box-sizing:border-box;
  padding:0 5px;
  border-radius:999px;
  background:var(--danger);
  color:#fff;
  font-size:.72rem;
  font-weight:800;
  line-height:19px;
  text-align:center;
  font-variant-numeric:tabular-nums;
}
.nav-note-count[hidden]{display:none}
html[data-theme="night"] .nav-note-count{color:#10171e}
.pensebete-panel{
  position:fixed;
  top:var(--pb-top,72px);
  right:16px;
  z-index:3500;
  width:min(380px,calc(100vw - 24px));
  max-height:min(72vh,560px,calc(100vh - var(--pb-top,72px) - 12px));
  max-height:min(72vh,560px,calc(100dvh - var(--pb-top,72px) - 12px));
  overflow-y:auto; /* V0.18.12.64 : si la place manque encore, le panneau défile en entier plutôt que d'écraser sa liste */
  box-sizing:border-box;
  display:flex;
  flex-direction:column;
  gap:8px;
  padding:12px;
  background:var(--surface);
  color:var(--text);
  border:1px solid var(--line);
  border-radius:14px;
  box-shadow:0 18px 44px rgba(16,24,40,.24);
}
.pensebete-panel[hidden]{display:none}
.pensebete-head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.pensebete-head strong{font-size:1rem}
.pensebete-close{margin:0;padding:2px 10px;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:8px;font-size:1.3rem;line-height:1.2;cursor:pointer}
/* V0.18.12.228 — le survol pose son fond : sans lui, « button:hover » (var(--primary2), plus spécifique que la classe) passait SOUS le texte (1,4 à 1,8 : 1 selon le thème) */
.pensebete-close:hover,.pensebete-close:focus-visible{background:transparent;color:var(--text);border-color:var(--line)}
.pensebete-form{margin:0}
.pensebete-champ{width:100%;box-sizing:border-box;margin:0}
.pensebete-etat{margin:0;min-height:1.15em;font-size:.84rem;color:var(--muted)}
.pensebete-etat.is-erreur{color:color-mix(in srgb,var(--danger) 85%,var(--text));font-weight:650}
.pensebete-liste{list-style:none;margin:0;padding:0;overflow:auto;display:flex;flex-direction:column;gap:2px;flex:0 1 auto}
/* V0.18.12.64 — écrans bas (téléphone à l'horizontale) : la liste garde de quoi lire deux notes ; le panneau défile s'il le faut. */
@media (max-height:520px){.pensebete-liste:not(:empty){min-height:min(112px,40vh)}}
.pensebete-note{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:9px;padding:6px 6px;border-radius:8px}
.pensebete-note:hover{background:var(--tone-panel)}
.pensebete-note input[type="checkbox"]{width:18px;height:18px;margin:0;padding:0;flex:none}
.pensebete-texte{cursor:text;overflow-wrap:anywhere;line-height:1.35}
.pensebete-texte:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:4px}
.pensebete-note.is-faite .pensebete-texte{text-decoration:line-through;color:var(--muted)}
.pensebete-edition{width:100%;box-sizing:border-box;margin:0;padding:5px 8px}
.pensebete-suppr{margin:0;padding:2px 8px;min-width:30px;background:transparent;color:var(--muted);border:1px solid transparent;border-radius:8px;font-size:1.05rem;font-weight:600;line-height:1.3;cursor:pointer}
.pensebete-suppr:hover,.pensebete-suppr:focus-visible{background:transparent;color:var(--danger);border-color:var(--line)}
.pensebete-suppr.is-confirmer{color:color-mix(in srgb,var(--danger) 85%,var(--text));border-color:var(--danger);font-size:.78rem;font-weight:750;white-space:nowrap}
.pensebete-vide{margin:0;color:var(--muted);font-size:.92rem}
.pensebete-pied{display:flex;justify-content:flex-end}
.pensebete-pied button{margin:0}
/* Le style général des boutons impose display:inline-block : sans ceci, l'attribut hidden ne cache plus « Effacer les notes faites ». */
.pensebete-pied button[hidden]{display:none}
.pensebete-etat:empty{display:none}
@media(max-width:600px){
  .pensebete-panel{left:12px;right:12px;width:auto}
}
/* L'aperçu d'un cours masque la barre globale : son bandeau a sa propre icône, au gabarit du bouton ⋯ voisin. */
.cockpit-pensebete .nav-menu-icon{width:17px;height:17px;flex:none;opacity:1}
.cockpit-pensebete{position:relative}
.cockpit-pensebete .nav-note-count{top:-7px;right:-7px}
.preview-cockpit-more{gap:6px}
@media(max-width:760px){
  body[data-page="chapter_preview"] .cockpit-pensebete{width:38px!important;height:36px!important;min-height:36px!important}
}
.cockpit-pensebete[aria-expanded="true"]{background:var(--primary);color:var(--on-primary)}
/* Ni à l'impression ni en rétroprojection (la barre du haut y est déjà masquée). */
@media print{.pensebete-panel,.nav-note-button,.cockpit-pensebete{display:none!important}}
/* V0.18.12.64 — l'icône du bandeau de l'aperçu d'un cours : course-context.css lui impose display:inline-flex!important avec
   body[data-page="chapter_preview"] (spécificité 0,2,1, chargée après) ; à l'impression, cette règle-ci l'emporte. */
@media print{html body[data-page] .cockpit-pensebete-wrap,html body[data-page] .cockpit-pensebete{display:none!important}}
/* V0.18.12.64 — en rétroprojection d'un chapitre, le bandeau reste affiché (course-context.css) : son icône du pense-bête, non. */
html body[data-page].projection-mode .cockpit-pensebete-wrap,html body[data-page].projection-mode .cockpit-pensebete{display:none!important}
/* V0.18.12.64 — au doigt (tablette, téléphone), des cibles plus grandes : la case n'était qu'un carré de 18 px. */
@media (pointer:coarse){
  .pensebete-note{padding-block:8px}
  .pensebete-note input[type="checkbox"]{width:26px;height:26px}
  .pensebete-suppr,.pensebete-close{min-width:40px;min-height:40px}
}
/* V0.18.12.64 — le rappel « pas de nom d'élève », à l'endroit où l'on écrit. */
.pensebete-rappel{margin:0;font-size:.78rem;color:var(--muted)}
body.projection-mode .pensebete-panel{display:none!important}

/* V0.18.12.242 — la pastille ROUGE des propositions à valider : le jeton --danger de chaque thème (rouge sombre en clair, rouge clair en sombre) avec le texte --on-primary, qui est blanc en clair et très sombre en sombre : les deux couples tiennent le contraste. */
.nav-badge.nav-badge-alerte{background:var(--danger);color:var(--on-primary,#fff)}
/* V0.18.12.161 — pastille de comptage dans le menu (signalements nouveaux pour l'administrateur technique, réponses non lues pour l'enseignant). */
.nav-badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.35em;height:1.35em;padding:0 .4em;margin-left:.35em;border-radius:999px;background:var(--primary);color:var(--on-primary,#fff);font-size:.72rem;font-weight:800;line-height:1;vertical-align:middle}
/* Sur un bouton de la barre (« Paramètres », « Aide »), la pastille se pose dans le COIN : en ligne avec le libellé elle élargissait le bouton, et sur téléphone (grille de quatre colonnes égales,
   libellés qui ne passent pas à la ligne) le libellé et sa flèche débordaient du bouton (constaté par le concepteur, V0.18.12.161). Dans un menu déroulant, elle reste en ligne. */
[data-role="global-header"] .nav-section>summary{position:relative}
[data-role="global-header"] .nav-section>summary .nav-badge{position:absolute;top:-5px;right:-3px;margin:0;min-width:1.3em;height:1.3em;padding:0 .3em;font-size:.66rem;z-index:1;pointer-events:none;box-shadow:0 0 0 2px var(--surface,#fff)}

/* V0.18.12.274 — le menu de profil (vos initiales), le bouton « ? » de l'aide et la recherche en clair. */
[data-role="global-header"] .nav-profil>summary,
[data-role="global-header"] .nav-aide>summary{
  position:relative;
  padding:4px 6px;
}
[data-role="global-header"] .nav-profil>summary::after,
[data-role="global-header"] .nav-aide>summary::after{content:none}
.nav-initiales{
  width:32px;
  height:32px;
  flex:0 0 32px;
  display:grid;
  place-items:center;
  border-radius:50%;
  background:var(--primary);
  color:var(--on-primary);
  font-size:.78rem;
  font-weight:800;
  letter-spacing:.02em;
}
.nav-aide-signe{
  width:30px;
  height:30px;
  flex:0 0 30px;
  display:grid;
  place-items:center;
  border:2px solid currentColor;
  border-radius:50%;
  font-weight:800;
  line-height:1;
}
[data-role="global-header"] .nav-profil>summary .nav-badge,
[data-role="global-header"] .nav-aide>summary .nav-badge{
  position:absolute;
  top:-4px;
  right:-4px;
}
.nav-profil-entete{
  display:grid;
  gap:2px;
  padding:6px 10px 4px;
}
.nav-profil-entete small{
  color:var(--muted);
  font-size:.78rem;
}
/* V0.18.12.329.2 — « Cheat sheet » : le petit bouton tout en haut du menu « ? » (il ouvre l'aide-mémoire à imprimer, marquée au nom du compte). Aucune couleur écrite en dur : le texte, le liseré et le fond viennent de la couleur du menu
   (currentColor), donc la lisibilité tient dans les quatre thèmes ; l'espace autour le détache de l'en-tête et de la liste. */
[data-role="global-header"] .nav-dropdown-menu>a.nav-aide-cheat,
.nav-feuille-liens>a.nav-aide-cheat{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:9px;
  min-height:38px;
  margin:6px 4px 8px;
  padding:7px 12px;
  border:1px solid color-mix(in srgb,currentColor 45%,transparent);
  border-radius:9px;
  background:color-mix(in srgb,currentColor 7%,transparent);
  font-weight:700;
  font-size:.9rem;
  white-space:nowrap;
  text-decoration:none;
}
[data-role="global-header"] .nav-dropdown-menu>a.nav-aide-cheat:hover,
[data-role="global-header"] .nav-dropdown-menu>a.nav-aide-cheat:focus-visible,
.nav-feuille-liens>a.nav-aide-cheat:hover,
.nav-feuille-liens>a.nav-aide-cheat:focus-visible{
  background:color-mix(in srgb,currentColor 16%,transparent);
  border-color:currentColor;
}
.nav-aide-cheat:focus-visible{outline:2px solid currentColor;outline-offset:2px}
.nav-aide-cheat-tag{
  padding:1px 6px;
  border:1px solid currentColor;
  border-radius:5px;
  font-size:.68rem;
  font-weight:700;
  letter-spacing:.07em;
}
[data-role="global-header"] .nav-recherche{
  display:inline-flex;
  align-items:center;
  gap:8px;
  min-width:0;
  padding:8px 11px;
  color:var(--text);
  font:inherit;
  font-weight:600;
}
.nav-recherche-texte{white-space:nowrap}
.nav-recherche-raccourci{
  font:inherit;
  font-size:.7rem;
  padding:1px 6px;
  border:1px solid var(--line);
  border-radius:5px;
  background:var(--surface);
  color:var(--muted);
}
@media (max-width:1180px){
  .nav-recherche-texte,.nav-recherche-raccourci{display:none}
  [data-role="global-header"] .nav-recherche{display:grid;padding:8px 10px}
}

/* V0.18.12.331 — « Messages » (la messagerie interne) : un lien de la barre, juste après la recherche, présent SEULEMENT quand l'établissement l'a allumée. Une enveloppe, le mot « Messages » (masqué sous 1180 px : l'icône reste, comme
   pour la recherche) et, dans le coin, la pastille du nombre de messages non lus (jeton --primary, comme celle des menus). Aucune couleur écrite en dur. Sur téléphone la barre ne tient que sur une ligne : ce lien y est caché (règle plus bas,
   dans le bloc « téléphone ») et la feuille de « Menu » le recopie en tête. */
[data-role="global-header"] .nav-messages{position:relative}
[data-role="global-header"] .nav-messages .nav-menu-icon{width:19px;height:19px;flex:0 0 19px;opacity:1}
[data-role="global-header"] .nav-messages .nav-badge{position:absolute;top:-5px;right:-3px;margin:0;min-width:1.3em;height:1.3em;padding:0 .3em;font-size:.66rem;z-index:1;pointer-events:none;box-shadow:0 0 0 2px var(--surface)}
[data-role="global-header"] .nav-messages:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
@media (max-width:1180px){
  [data-role="global-header"] .nav-messages .nav-messages-texte{display:none}
  [data-role="global-header"] .main-nav>a.nav-messages{padding:8px 10px}
}

/* V0.18.12.276 — TÉLÉPHONE : la barre sur UNE ligne, le menu en feuille depuis le bas.
   Avant : deux lignes pleines de boutons (103 px collés en haut de l'écran). Maintenant : le logo, « Aujourd'hui », le pense-bête, la recherche et « Menu » (56 px) ; Ressources, Suivi, « ? » et le profil
   sont dans la feuille que « Menu » ouvre (assets/js/global-navigation.js). Réservé aux écrans de téléphone AVEC scripts (@media scripting) : sans script, ou dans un navigateur qui ne connaît pas cette condition,
   la barre garde ses deux lignes d'avant (application.css) et rien n'est caché. La page des cours en aperçu (chapter_preview) a sa propre barre. */
.nav-menu-bouton{display:none}
@media screen and (max-width:760px) and (scripting:enabled){
  body:not([data-page="chapter_preview"]) .topbar{
    grid-template-columns:auto minmax(0,1fr) !important;
    align-items:center !important;
    gap:0 8px !important;
    min-height:56px;
    padding:6px 10px !important;
  }
  body:not([data-page="chapter_preview"]) .topbar > .brand{align-self:center !important;min-height:44px !important;height:44px}
  body:not([data-page="chapter_preview"]) .topbar > .brand .brand-logo{width:40px !important;height:40px !important}   /* 48 px de logo faisaient une barre de 61 px */
  body:not([data-page="chapter_preview"]) .topbar > .main-nav{
    display:flex !important;
    flex-wrap:nowrap !important;
    justify-content:flex-end !important;
    align-items:center !important;
    gap:6px !important;
  }
  body:not([data-page="chapter_preview"]) .main-nav > details.nav-section{display:none !important}
  body:not([data-page="chapter_preview"]) .main-nav > a.nav-messages{display:none !important}   /* V0.18.12.331 : « Messages » est dans la feuille de « Menu » (la barre tient sur une ligne) */
  body:not([data-page="chapter_preview"]) .main-nav > a.nav-home{
    flex:0 1 auto;
    width:auto !important;
    min-width:0;
    overflow:hidden;
    text-overflow:ellipsis;
    min-height:44px;
    padding:8px 10px !important;
    font-size:.85rem !important;
  }
  body:not([data-page="chapter_preview"]) .main-nav > .nav-note-button{
    flex:0 0 44px;
    width:44px !important;
    min-width:44px;
    min-height:44px;
    padding:0 !important;
  }
  body:not([data-page="chapter_preview"]) .main-nav > .nav-menu-bouton{
    position:relative;
    display:inline-flex !important;
    flex:0 0 auto;
    align-items:center;
    justify-content:center;
    gap:6px;
    min-width:44px;
    min-height:44px;
    box-sizing:border-box;
    margin:0;
    padding:0 12px;
    border:1px solid var(--line);
    border-radius:10px;
    background:var(--surface);
    color:var(--text);
    font:inherit;
    font-size:.85rem;
    font-weight:700;
    cursor:pointer;
  }
  .nav-menu-bouton .nav-badge{position:absolute;top:-6px;right:-6px}
  /* l'aperçu d'une séance (course-preview-mobile.css) posait ces deux boutons en absolu, en haut à droite : ils passaient SOUS « Menu » ; ici ils reprennent leur place dans la ligne */
  body[data-page="session_preview"] header.topbar .main-nav > .nav-note-button{position:static !important;margin:0 !important}
  body[data-page="session_preview"] .nav-menu-bouton .nav-badge{top:2px;right:2px}   /* cette barre rogne ce qui dépasse de sa hauteur */
}
@media screen and (max-width:370px) and (scripting:enabled){
  body:not([data-page="chapter_preview"]) .main-nav > .nav-menu-bouton{padding:0 10px}
  .nav-menu-bouton .nav-menu-texte{display:none}
}
html.nav-feuille-ouverte{overflow:hidden}
.nav-feuille-fond{position:fixed;inset:0;z-index:10000;background:rgba(16,24,40,.45)}
.nav-feuille{
  position:fixed;
  left:0;
  right:0;
  bottom:0;
  z-index:10001;
  max-height:88vh;
  max-height:88dvh;
  overflow-y:auto;
  overscroll-behavior:contain;
  box-sizing:border-box;
  padding-bottom:env(safe-area-inset-bottom,0px);
  border:1px solid var(--line);
  border-bottom:0;
  border-radius:16px 16px 0 0;
  background:var(--surface);
  color:var(--text);
  box-shadow:0 -10px 30px rgba(16,24,40,.25);
}
.nav-feuille-tete{
  position:sticky;
  top:0;
  display:flex;
  align-items:center;
  justify-content:space-between;
  padding:12px 20px;
  border-bottom:1px solid var(--line);
  background:var(--surface);
}
.nav-feuille-fermer{
  min-width:44px;
  min-height:44px;
  margin:-6px -8px -6px 0;
  border:0;
  border-radius:10px;
  background:transparent;
  color:var(--text);
  font:inherit;
  font-size:1.1rem;
  cursor:pointer;
}
/* la règle générale « button:hover » colore le fond en --primary2 : sans fond ici, la croix devenait invisible au survol */
.nav-feuille-fermer:hover,.nav-feuille-fermer:focus-visible{background:var(--tone-hover);color:var(--text)}
/* V0.18.12.294 — plus de trait sous chaque ligne : un seul séparateur entre les groupes (les titres de section gardent le leur), des titres plus gros et plus noirs, des lignes un peu plus hautes */
.nav-feuille-section{border-top:1px solid var(--line);padding-top:4px}
.nav-feuille-tete + .nav-feuille-section{border-top:0}
.nav-feuille-section h2{
  margin:16px 20px 6px;
  color:var(--text);
  font-size:.8rem;
  font-weight:800;
  letter-spacing:.09em;
  text-transform:uppercase;
}
.nav-feuille-liens{display:block;padding:0 0 6px}
.nav-feuille-liens a{
  display:flex;
  align-items:center;
  min-height:48px;
  box-sizing:border-box;
  padding:10px 20px;
  font-size:1.06rem;
  color:inherit;
  text-decoration:none;
}
.nav-feuille-liens a:active{background:var(--tone-hover)}
.nav-feuille-liens a.is-active{color:var(--primary);font-weight:700}
.nav-feuille-liens .nav-item-main{display:flex;align-items:center;gap:14px;min-width:0}
.nav-feuille-liens .nav-shortcut{display:none}
.nav-feuille-liens .nav-menu-separator{margin:6px 20px;border-top:1px solid var(--line)}
.nav-feuille-liens .nav-profil-entete{padding:6px 20px 10px}
@media print{.nav-feuille,.nav-feuille-fond,.nav-menu-bouton{display:none!important}}
