:root{
  --bg:#faf7f0; --panel:#ffffff; --panel2:#f4efe3; --text:#0d1f3c; --muted:#6b7280;
  --accent:#c9a84c; --accent2:#a8863a; --ok:#2f9e6b; --warn:#c98a1e; --err:#c0392b;
  --border:#e5dcc8; --radius:14px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{
  background:radial-gradient(1200px 600px at 20% -10%, #fffdf8 0%, var(--bg) 60%);
  color:var(--text); font-family:system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  min-height:100vh; line-height:1.5;
}
a{color:var(--accent); text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3{line-height:1.25; margin:0 0 .6em}
h1{font-size:1.6rem}
h2{font-size:1.25rem; margin-top:1.2em}
p{margin:.4em 0 .9em}

.topbar{
  display:flex; align-items:center; justify-content:space-between; gap:1rem;
  padding:.7rem 1.1rem; background:rgba(255,255,255,.9); backdrop-filter:blur(8px);
  border-bottom:2px solid var(--accent); position:sticky; top:0; z-index:20; flex-wrap:wrap;
}
.brand{display:flex; align-items:center; gap:.6rem; color:var(--text); font-weight:700}
.brand:hover{text-decoration:none}
.brand-logo{height:19px; width:auto; display:block}
.brand-name{font-size:.95rem}
.topnav{display:flex; align-items:center; gap:.9rem; flex-wrap:wrap}
.topnav a{color:var(--muted)}
.topnav a:hover{color:var(--text); text-decoration:none}
.who{color:var(--muted); font-size:.82rem}

.container{max-width:1040px; margin:0 auto; padding:1.4rem 1.1rem 3rem}

.btn{
  display:inline-block; padding:.5rem .9rem; border-radius:10px; border:1px solid var(--border);
  background:var(--panel2); color:var(--text); cursor:pointer; font-size:.9rem; font-weight:600;
}
.btn:hover{text-decoration:none; border-color:var(--accent)}
.btn-primary{background:linear-gradient(135deg,var(--accent),var(--accent2)); border-color:transparent; color:#fff}
.btn-danger{background:transparent; border-color:var(--err); color:var(--err)}
.btn-ghost{background:transparent}
.btn-sm{padding:.3rem .6rem; font-size:.8rem}

.grid{display:grid; gap:1rem}
.grid-2{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.grid-3{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}

.card{
  background:linear-gradient(180deg,var(--panel),rgba(255,255,255,.6));
  border:1px solid var(--border); border-radius:var(--radius); padding:1.1rem;
}
.card h3{margin-top:0; font-size:1.05rem}
.card .meta{color:var(--muted); font-size:.82rem; margin-bottom:.6rem}

.stat{display:flex; flex-direction:column; gap:.2rem}
.stat .num{font-size:1.8rem; font-weight:800}
.stat .lbl{color:var(--muted); font-size:.82rem}

form.stack{display:flex; flex-direction:column; gap:.7rem; max-width:520px}
label{display:flex; flex-direction:column; gap:.3rem; font-size:.85rem; color:var(--muted)}
input,select,textarea{
  background:var(--panel2); color:var(--text); border:1px solid var(--border);
  border-radius:10px; padding:.55rem .7rem; font:inherit; width:100%;
}
textarea{min-height:140px; resize:vertical; font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
input:focus,select:focus,textarea:focus{outline:none; border-color:var(--accent)}

table{width:100%; border-collapse:collapse; font-size:.9rem}
th,td{text-align:left; padding:.55rem .5rem; border-bottom:1px solid var(--border)}
th{color:var(--muted); font-weight:600; font-size:.78rem; text-transform:uppercase; letter-spacing:.04em}
tr:hover td{background:rgba(201,168,76,.05)}

.badge{display:inline-block; padding:.15rem .5rem; border-radius:999px; font-size:.72rem; font-weight:700}
.badge-admin{background:rgba(192,57,43,.15); color:var(--err)}
.badge-professor{background:rgba(201,168,76,.18); color:var(--accent)}
.badge-student{background:rgba(47,158,107,.15); color:var(--ok)}
.badge-ok{background:rgba(47,158,107,.15); color:var(--ok)}
.badge-muted{background:rgba(154,160,189,.15); color:var(--muted)}
.badge-warn{background:rgba(201,138,30,.15); color:var(--warn)}

.flash{padding:.7rem .9rem; border-radius:10px; margin-bottom:1rem; border:1px solid var(--border)}
.flash-info{background:rgba(201,168,76,.12)}
.flash-success{background:rgba(47,158,107,.12); border-color:rgba(47,158,107,.4)}
.flash-error{background:rgba(192,57,43,.12); border-color:rgba(192,57,43,.4)}

.footer{text-align:center; color:var(--muted); font-size:.78rem; padding:1.5rem}

.hero{text-align:center; padding:3rem 1rem}
.hero h1{font-size:2rem}
.hero p{color:var(--muted); max-width:520px; margin:0 auto 1.4rem}
.auth-wrap{max-width:400px; margin:3rem auto}
.list-clean{list-style:none; padding:0; margin:0}
.list-clean li{display:flex; align-items:center; justify-content:space-between; gap:.6rem; padding:.55rem 0; border-bottom:1px solid var(--border)}
.row-actions{display:flex; gap:.4rem; flex-wrap:wrap}
.inline{display:inline}
.lesson-content{background:var(--panel2); border:1px solid var(--border); border-radius:12px; padding:1rem 1.2rem; white-space:pre-wrap}
.muted{color:var(--muted)}

/* ===== Éditeur de blocs ===== */
.block-list{display:flex;flex-direction:column;gap:.8rem;margin:.8rem 0}
.block-card{border:1px solid var(--border);border-radius:12px;background:var(--panel);overflow:hidden;transition:border-color .15s}
.block-card.dragging{opacity:.55;border-color:var(--accent)}
.block-card.collapsed .block-body{display:none}
.block-head{display:flex;align-items:center;gap:.6rem;padding:.5rem .7rem;background:var(--panel2);border-bottom:1px solid var(--border)}
.block-drag{cursor:grab;color:var(--muted);font-size:1.1rem;user-select:none;padding:0 .2rem}
.block-drag:active{cursor:grabbing}
.block-type{font-weight:700;font-size:.85rem;flex:1}
.block-actions{display:flex;gap:.35rem}
.block-body{padding:.85rem;display:flex;flex-direction:column;gap:.6rem}
.block-card input[type=text],.block-card textarea{width:100%}
.add-blocks{display:flex;flex-wrap:wrap;gap:.5rem;margin:.6rem 0 1.5rem}
.upload-widget{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}
.upload-input{font-size:.82rem;color:var(--muted)}
.upload-status{font-size:.82rem}

/* WYSIWYG */
.rich-editor{border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--panel2)}
.rich-toolbar{display:flex;flex-wrap:wrap;gap:.15rem;padding:.35rem;border-bottom:1px solid var(--border);background:rgba(0,0,0,.15)}
.rich-toolbar button{background:transparent;border:1px solid transparent;color:var(--text);border-radius:6px;padding:.25rem .5rem;cursor:pointer;font-size:.85rem;min-width:32px}
.rich-toolbar button:hover{background:var(--panel);border-color:var(--border)}
.rich-area{min-height:130px;padding:.7rem .85rem;outline:none;line-height:1.6}
.rich-area:empty:before{content:attr(data-placeholder);color:var(--muted)}
.rich-area h2,.rich :is(h2){font-size:1.15rem}
.rich-area h3{font-size:1rem}
.rich-area blockquote{border-left:3px solid var(--accent);margin:.5rem 0;padding-left:.8rem;color:var(--muted)}
.rich-area ul,.rich-area ol{padding-left:1.4rem}
.rich :is(blockquote){border-left:3px solid var(--accent);margin:.5rem 0;padding-left:.8rem;color:var(--muted)}
/* Images insérées dans le texte enrichi */
.rich img,.rich-area img{max-width:100%;height:auto;border-radius:12px;border:1px solid var(--border);margin:.4rem 0}
.rich img.img-left,.rich-area img.img-left{float:left;margin:.2rem 1rem .6rem 0}
.rich img.img-right,.rich-area img.img-right{float:right;margin:.2rem 0 .6rem 1rem}
.rich img.img-center,.rich-area img.img-center{display:block;margin:.6rem auto}
.rich img.img-full,.rich-area img.img-full{display:block;width:100%;margin:.6rem 0}
.rich img.img-sm,.rich-area img.img-sm{width:30%}
.rich img.img-md,.rich-area img.img-md{width:55%}
.rich img.img-lg,.rich-area img.img-lg{width:85%}
.rich img.img-full,.rich-area img.img-full{width:100%}
.rich:after,.rich-area:after{content:"";display:table;clear:both}
@media(max-width:560px){
  .rich img.img-left,.rich-area img.img-left,
  .rich img.img-right,.rich-area img.img-right{float:none;display:block;margin:.6rem auto;width:100%}
  .rich img.img-sm,.rich-area img.img-sm,.rich img.img-md,.rich-area img.img-md{width:100%}
}
/* Barre d'outils : état d'envoi */
.rich-toolbar.is-uploading{opacity:.55;pointer-events:none;position:relative}
.rich-toolbar.is-uploading:after{content:"Envoi…";position:absolute;right:.5rem;top:50%;transform:translateY(-50%);font-size:.78rem;color:var(--accent)}
/* Panneau d'options de l'image (éditeur) */
.rich-img-panel{position:fixed;z-index:80;display:flex;align-items:center;gap:.15rem;flex-wrap:wrap;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:.3rem .45rem;box-shadow:0 8px 24px rgba(13,31,60,.18);max-width:94%}
.rich-img-panel[hidden]{display:none}
.rich-img-panel-lbl{font-size:.74rem;color:var(--muted);margin:0 .15rem}
.rich-img-sep{width:1px;align-self:stretch;background:var(--border);margin:0 .3rem}
.rich-img-panel button{background:transparent;border:1px solid var(--border);color:var(--text);border-radius:7px;padding:.25rem .5rem;font-size:.78rem;cursor:pointer}
.rich-img-panel button:hover{border-color:var(--accent)}
.rich-img-panel button.active{background:var(--accent);border-color:var(--accent2);color:#0d1f3c;font-weight:600}
.rich-area img{cursor:pointer}
.rich-area img:hover{outline:2px solid var(--accent);outline-offset:1px}

/* Rendu des blocs (vue étudiant) */
.blk-text,.blk-text :is(p){margin:.3rem 0 .8rem}
.blk-image{margin:0;text-align:center}
.blk-image img{max-width:100%;border-radius:12px;border:1px solid var(--border)}
.blk-image figcaption{color:var(--muted);font-size:.82rem;margin-top:.4rem}
.blk-video .video-frame{position:relative;padding-bottom:56.25%;height:0;border-radius:12px;overflow:hidden;border:1px solid var(--border)}
.blk-video .video-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.blk-video video{width:100%;border-radius:12px;border:1px solid var(--border)}
.blk-file .file-card{display:flex;align-items:center;gap:.7rem;padding:.8rem 1rem;border:1px solid var(--border);border-radius:12px;background:var(--panel2);color:var(--text)}
.blk-file .file-card:hover{border-color:var(--accent);text-decoration:none}
.blk-file .file-ico{font-size:1.5rem}
.blk-file .file-meta{display:flex;flex-direction:column}
.blk-code{background:#0d1f3c;border:1px solid var(--border);border-radius:12px;padding:.9rem 1rem;overflow:auto;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85rem;position:relative;color:#f4efe3}
.blk-code[data-lang]:before{content:attr(data-lang);position:absolute;top:.3rem;right:.5rem;font-size:.7rem;color:var(--muted);text-transform:uppercase}
.blk-divider{border:0;border-top:1px solid var(--border);margin:1.2rem 0}
.blk-callout{padding:.85rem 1rem;border-radius:12px;border-left:4px solid var(--accent);background:var(--panel2)}
.callout-info{border-color:var(--accent)}
.callout-success{border-color:var(--ok);background:rgba(47,158,107,.08)}
.callout-warning{border-color:var(--warn);background:rgba(201,138,30,.08)}
.callout-danger{border-color:var(--err);background:rgba(192,57,43,.08)}
.blk-empty{padding:1rem;border:1px dashed var(--border);border-radius:10px;color:var(--muted);text-align:center;font-size:.85rem}
.save-hint{transition:box-shadow .2s}
.save-hint.is-dirty{box-shadow:0 0 0 3px rgba(201,138,30,.4)}

/* Aperçu module (côté professeur) */
.preview-banner{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;padding:.6rem .9rem;margin-bottom:1rem;border:1px dashed var(--warn);border-radius:12px;background:rgba(201,138,30,.08)}
.preview-module .module-head{cursor:default}
.preview-item{position:relative}
.preview-module .blk-quiz{pointer-events:none}

/* Arborescence des modules (sous-modules) */
.module-tree{display:flex;flex-direction:column;gap:.4rem;margin:.8rem 0}
.module-row{display:flex;align-items:center;justify-content:space-between;gap:.8rem;padding:.5rem .7rem;border:1px solid var(--border);border-radius:10px;background:var(--panel);flex-wrap:wrap}
.module-row-main{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.module-row .module-num{display:inline-grid;place-items:center;min-width:2.1rem;padding:.1rem .35rem;border-radius:6px;background:var(--panel2);color:var(--muted);font-size:.78rem;font-weight:700}
.sub-dot{color:var(--accent)}

/* Quiz */
.blk-quiz{border:1px solid var(--border);border-radius:12px;padding:1rem;background:var(--panel2)}
.quiz-q{margin:0 0 .7rem}
.quiz-opt{display:block;padding:.4rem .3rem;border-radius:8px}
.quiz-form .quiz-opt{cursor:pointer}
.quiz-form .quiz-opt:hover{background:rgba(201,168,76,.08)}
.quiz-opt.correct{color:var(--ok)}
.quiz-opt.wrong{color:var(--err);text-decoration:line-through}
.quiz-result{padding:.5rem .7rem;border-radius:8px;margin-bottom:.5rem;font-weight:700}
.quiz-result.ok{background:rgba(47,158,107,.15);color:var(--ok)}
.quiz-result.partial{background:rgba(201,138,30,.15);color:var(--warn)}
.quiz-opt-edit{display:flex;align-items:center;gap:.5rem;margin-bottom:.35rem}
.quiz-opt-edit input[type=text]{flex:1}

/* Modules / parcours étudiant */
.module-block{border:1px solid var(--border);border-radius:14px;margin-bottom:1.2rem;overflow:hidden;background:linear-gradient(180deg,var(--panel),rgba(255,255,255,.6))}
.module-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.9rem 1.1rem;background:var(--panel2);cursor:pointer}
.module-head h3{margin:0;font-size:1.05rem}
.module-body{padding:1.1rem;display:flex;flex-direction:column;gap:1.1rem}
.module-num{color:var(--muted);font-size:.85rem}
.progress-bar{height:8px;border-radius:999px;background:var(--panel2);overflow:hidden;margin:.4rem 0}
.progress-bar > span{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--accent2))}

/* Sous-modules (arborescence côté étudiant) */
.module-block.sub-depth-1{border-left:3px solid var(--accent)}
.module-block.sub-depth-2{border-left:3px solid var(--accent2)}
.module-block.sub-depth-3{border-left:3px solid var(--warn)}
.sub-modules{display:flex;flex-direction:column;gap:1.2rem;padding:0 0 1.1rem 1.1rem}
.sub-modules .module-head h3{font-size:.98rem}

/* Sous-module verrouillé (progression séquentielle côté étudiant) */
.module-block.module-locked{opacity:.6;border-style:dashed}
.module-block.module-locked .module-head{cursor:default;background:transparent}
.module-block.module-locked .locked-title{color:var(--muted)}
.module-locked-hint{padding:.7rem 1.1rem 1rem;color:var(--muted);font-size:.85rem}

/* Parcours étudiant : un module à la fois + sommaire */
.course-layout{display:grid;grid-template-columns:290px minmax(0,1fr);gap:1.4rem;align-items:start}
.course-menu{border:1px solid var(--border);border-radius:14px;background:var(--panel);padding:.9rem;position:sticky;top:1rem;max-height:calc(100vh - 2rem);overflow:auto}
.menu-title{margin:.1rem 0 .7rem;font-size:.8rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}
.menu-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.12rem}
.menu-item a,.menu-item > span{display:flex;align-items:center;gap:.5rem;padding:.45rem .55rem;border-radius:8px;color:var(--text);text-decoration:none;font-size:.92rem;line-height:1.25}
.menu-item a:hover{background:var(--panel2);text-decoration:none}
.menu-item.depth-1 a,.menu-item.depth-1 > span{padding-left:1.35rem}
.menu-item.depth-2 a,.menu-item.depth-2 > span{padding-left:2.15rem;font-size:.88rem}
.menu-item.depth-3 a,.menu-item.depth-3 > span{padding-left:2.95rem;font-size:.86rem}
.menu-item .m-num{color:var(--muted);font-size:.78rem;font-variant-numeric:tabular-nums;min-width:1.9rem;flex:0 0 auto}
.menu-item .m-title{flex:1 1 auto}
.menu-item .m-mark{flex:0 0 auto;color:var(--ok);font-size:.85rem}
.menu-item.is-active > a,.menu-item.is-active > span{background:rgba(201,168,76,.16);color:var(--accent);font-weight:700}
.menu-item.is-heading > span{font-weight:700;color:var(--text);cursor:default}
.menu-item.is-heading > span .m-num{color:var(--accent)}
.menu-item.is-locked > span{color:var(--muted);opacity:.7;cursor:not-allowed}
.menu-item.is-done > a .m-num,.menu-item.is-done > span .m-num{color:var(--ok)}
.course-main{min-width:0}
.module-panel{border:1px solid var(--border);border-radius:14px;overflow:hidden;background:linear-gradient(180deg,var(--panel),rgba(255,255,255,.6))}
.module-panel .module-head{cursor:default}
.module-content{padding:1.1rem;display:flex;flex-direction:column;gap:1.1rem}
.module-nav{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-top:1.2rem;flex-wrap:wrap}
@media(max-width:820px){
  .course-layout{grid-template-columns:1fr}
  .course-menu{position:static;max-height:none}
}

/* ===== Compte / avatars ===== */
.account-link{display:flex;align-items:center;gap:.5rem;color:var(--muted)}
.account-link:hover{text-decoration:none;color:var(--text)}
.avatar{display:inline-grid;place-items:center;border-radius:50%;object-fit:cover;background:linear-gradient(135deg,var(--accent),var(--accent2));color:#fff;font-weight:700;flex:0 0 auto}
.avatar-sm{width:28px;height:28px;font-size:.78rem}
.avatar-lg{width:96px;height:96px;font-size:2rem;border:2px solid var(--border)}
.avatar-fallback{text-transform:uppercase}
.account-grid{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.avatar-block{display:flex;flex-direction:column;gap:.6rem;align-items:flex-start}

/* ===== Profil professeur ===== */
.prof-link{display:inline-flex;align-items:center;gap:.4rem;color:var(--text);font-weight:600}
.prof-link:hover{text-decoration:underline}
.prof-byline .avatar-sm{vertical-align:middle}
.professor-hero{display:flex;gap:1.2rem;align-items:flex-start;flex-wrap:wrap}
.professor-hero-info{flex:1 1 260px;min-width:220px}
.professor-bio{margin:.5rem 0 0;color:var(--text);line-height:1.55}
@media(max-width:560px){.professor-hero{flex-direction:column;align-items:center;text-align:center}.professor-hero .row-actions{justify-content:center}}

/* ===== Tags ===== */
.tag-list{display:inline-flex;flex-wrap:wrap;gap:.35rem;vertical-align:middle}
.tag{display:inline-block;padding:.12rem .55rem;border-radius:999px;font-size:.75rem;font-weight:600;
  background:var(--panel2);border:1px solid var(--border);color:var(--muted)}
.tag:hover{text-decoration:none;border-color:var(--accent);color:var(--text)}
.tag-active{background:rgba(201,168,76,.18);border-color:var(--accent);color:var(--accent)}
.tag-n{opacity:.7;font-weight:500}
.tag-filter{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin:1rem 0 1.4rem}

/* ===== Notes (étoiles) ===== */
.stars{color:var(--warn);letter-spacing:.05em;font-size:1rem}
.stars-val{color:var(--text);font-weight:700;font-size:.85rem;margin-left:.25rem}
.rate-card summary{cursor:pointer;font-weight:600;color:var(--text)}
.rating-input{display:inline-flex;flex-direction:row-reverse;gap:.15rem;justify-content:flex-end}
.rating-input input{position:absolute;opacity:0;width:0;height:0}
.rating-input label{font-size:1.7rem;color:var(--border);cursor:pointer;padding:0;line-height:1}
.rating-input input:checked ~ label,
.rating-input label:hover,
.rating-input label:hover ~ label{color:var(--warn)}

/* ===== Accueil ===== */
.home-hero{text-align:center;padding:2.6rem 1rem 1.4rem}
.home-hero h1{font-size:2rem}
.search-bar{display:flex;gap:.5rem;max-width:560px;margin:.4rem auto 1.2rem}
.search-bar input{flex:1}
.hero-cta{display:flex;gap:.6rem;justify-content:center;flex-wrap:wrap}
.course-card h3 a{color:var(--text)}
.course-card h3 a:hover{color:var(--accent);text-decoration:none}

/* ===== Suivi des élèves (progress-table) ===== */
.table-scroll{overflow-x:auto;border:1px solid var(--border);border-radius:14px}
.progress-table{border-collapse:separate;border-spacing:0;width:100%;min-width:640px;font-size:.86rem}
.progress-table th,.progress-table td{padding:.55rem .6rem;border-bottom:1px solid var(--border);text-align:center;vertical-align:middle}
.progress-table thead th{background:var(--panel2);font-size:.74rem;font-weight:700;position:sticky;top:0;z-index:2}
.progress-table tbody tr:last-child td{border-bottom:none}
.progress-table .sticky-col{text-align:left;position:sticky;left:0;background:var(--panel);z-index:1;min-width:150px}
.progress-table thead .sticky-col{z-index:3}
.th-title{display:block;font-weight:500;color:var(--muted);max-width:110px;margin:0 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cell-module{min-width:74px}
.cell-done{color:var(--ok);font-weight:800;font-size:1.05rem}
.cell-todo{color:var(--muted);font-size:1.05rem}
.cell-time{font-size:.72rem;color:var(--muted);margin-top:.15rem}
.cell-total{min-width:96px}
.cell-total .progress-bar{margin:.2rem 0}
.small{font-size:.72rem}
.legend{display:flex;gap:1.2rem;flex-wrap:wrap;align-items:center;font-size:.84rem}
.legend .cell-done,.legend .cell-todo{font-size:1rem}
/* ===== Réponses aux QCM (prof) ===== */
.quiz-result-card{margin-bottom:1.1rem}
.quiz-result-head{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap;margin-bottom:.6rem}
.quiz-corrige{list-style:none;margin:0 0 .8rem;padding:0}
.quiz-corrige li{display:flex;gap:.4rem;padding:.25rem .2rem;color:var(--muted)}
.quiz-corrige li.ok{color:var(--ok)}
.quiz-corrige .qmark{font-weight:800;width:1rem;text-align:center}
.quiz-answers-table{width:100%;border-collapse:separate;border-spacing:0;font-size:.86rem;min-width:560px}
.quiz-answers-table th,.quiz-answers-table td{padding:.5rem .6rem;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}
.quiz-answers-table thead th{background:var(--panel2);font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.quiz-answers-table .sticky-col{min-width:150px}
.quiz-answers-table tbody tr:last-child td{border-bottom:none}
.qa-given{display:flex;flex-wrap:wrap;gap:.35rem}
.qa-pill{display:inline-block;padding:.15rem .5rem;border-radius:999px;border:1px solid var(--border);background:var(--panel2);font-size:.8rem}
.qa-pill.ok{border-color:var(--ok);color:var(--ok)}
.qa-pill.wrong{border-color:var(--err);color:var(--err)}
.qa-score{display:inline-block;padding:.15rem .55rem;border-radius:8px;font-weight:700}
.qa-score.ok{background:rgba(47,158,107,.15);color:var(--ok)}
.qa-score.partial{background:rgba(201,138,30,.15);color:var(--warn)}
.quiz-student-card{margin-bottom:1rem}
.quiz-student-card .quiz-corrige{margin:.3rem 0 0;font-size:.82rem}
/* ===== Notifications & messagerie ===== */
.icon-link{position:relative;display:inline-flex;align-items:center;justify-content:center;width:2.1rem;height:2.1rem;border-radius:10px;text-decoration:none;font-size:1.15rem;line-height:1}
.icon-link:hover{background:var(--panel2);text-decoration:none}
.icon-link .dot{position:absolute;top:-4px;right:-6px;min-width:17px;height:17px;padding:0 4px;border-radius:999px;background:var(--err);color:#fff;font-size:.66rem;font-weight:800;display:inline-flex;align-items:center;justify-content:center;line-height:1}
.notif-row{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}
.notif-unread{border-left:3px solid var(--accent)}

.messages-layout{display:grid;grid-template-columns:300px 1fr;gap:1rem;align-items:start}
.conv-list{position:sticky;top:1rem}
.conv-items{list-style:none;margin:.3rem 0 0;padding:0}
.conv-item{border-bottom:1px solid var(--border)}
.conv-item:last-child{border-bottom:none}
.conv-item a{display:block;padding:.5rem .3rem;text-decoration:none;color:var(--text)}
.conv-item.is-active{background:var(--panel2);border-radius:8px}
.conv-name{display:flex;align-items:center;gap:.4rem;font-weight:600;font-size:.86rem}
.conv-name .dot{min-width:17px;height:17px;padding:0 4px;border-radius:999px;background:var(--err);color:#fff;font-size:.64rem;font-weight:800;display:inline-flex;align-items:center;justify-content:center}
.conv-preview{display:block;font-size:.74rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:260px}
.thread{min-height:300px;display:flex;flex-direction:column}
.thread-head{border-bottom:1px solid var(--border);padding-bottom:.5rem;margin-bottom:.7rem}
.thread-body{flex:1;display:flex;flex-direction:column;gap:.4rem;padding:.2rem 0;max-height:52vh;overflow-y:auto}
.bubble{max-width:78%;padding:.5rem .7rem;border-radius:12px;font-size:.88rem}
.bubble-mine{align-self:flex-end;background:linear-gradient(135deg,var(--accent),var(--accent2));color:#fff}
.bubble-theirs{align-self:flex-start;background:var(--panel2)}
.bubble-time{font-size:.66rem;opacity:.7;margin-top:.2rem}
.thread-form{margin-top:.8rem;display:flex;flex-direction:column;gap:.5rem}
@media (max-width:820px){.messages-layout{grid-template-columns:1fr}.conv-list{position:static}}

/* ===== Note /100 des QCM par module ===== */
.module-note{margin:1rem 0 .2rem;padding:.8rem 1rem;border-radius:12px;border:1px solid var(--border);background:var(--panel2)}
.module-note.ok{border-color:var(--ok);background:rgba(47,158,107,.08)}
.module-note.below{border-color:var(--err);background:rgba(214,69,69,.08)}
.module-note-main{display:flex;align-items:baseline;justify-content:space-between;gap:.6rem}
.module-note-label{font-weight:600;font-size:.9rem}
.module-note-value{font-weight:800;font-size:1.25rem;color:var(--accent)}
.module-note.below .module-note-value{color:var(--err)}
.module-note-sub{font-size:.78rem;margin-top:.15rem}
.module-note-threshold{margin-top:.5rem;font-size:.85rem;font-weight:600}
.module-note-threshold.ok{color:var(--ok)}
.module-note-threshold.below{color:var(--err)}
.module-settings{margin:1rem 0}
.module-settings label{max-width:420px}
.cell-note{margin-top:.15rem;font-size:.72rem;font-weight:700;color:var(--accent)}

/* ===== PWA / Notifications ===== */
.push-status{font-size:.84rem;margin:.5rem 0 0;min-height:1.1rem}
.push-status.ok{color:var(--ok)}
.push-status.error{color:var(--err)}
.push-status.info{color:var(--muted)}
#pwa-install{white-space:nowrap}
@media (max-width:520px){#pwa-install{padding:.35rem .5rem;font-size:.78rem}}
