:root { --accent:#2563eb; --ok:#16a34a; --err:#dc2626; --ink:#1e2430; --muted:#6b7280; --line:#e2e6ee; --bg:#f6f7fb; --card:#fff; }
* { box-sizing:border-box; }
body { margin:0; font:15px/1.45 system-ui, -apple-system, "Segoe UI", sans-serif; background:var(--bg); color:var(--ink); }
.topbar { position:sticky; top:0; z-index:30; display:flex; flex-wrap:wrap; gap:.5rem; align-items:center; background:var(--card); border-bottom:1px solid var(--line); padding:.45rem .8rem; }
.topbar h1 { font-size:.95rem; margin:0 .3rem 0 0; }
.topbar select, .topbar input[type=text] { padding:.3rem .5rem; border:1px solid var(--line); border-radius:8px; font:inherit; background:#fff; }
.topbar select { max-width:100%; min-width:0; flex:1 1 200px; text-overflow:ellipsis; }
.topbar input#candidat { min-width:160px; flex:1; max-width:260px; }
.badge { font-size:.7rem; padding:.1rem .45rem; border-radius:99px; vertical-align:middle; }
.badge-prof { background:#1e293b; color:#fff; }
.modes { display:flex; border:1px solid var(--line); border-radius:8px; overflow:hidden; }
.modes button { border:0; background:#fff; padding:.3rem .6rem; font:inherit; cursor:pointer; }
.modes button.actif { background:var(--accent); color:#fff; }
.grille { display:grid; grid-template-columns:1fr; max-width:1360px; margin:0 auto; padding:.7rem; gap:.7rem; }
.sommaire { display:flex; flex-wrap:wrap; gap:.3rem; }
.dot { text-decoration:none; font-size:.72rem; padding:.25rem .5rem; border-radius:99px; border:1px solid var(--line); background:var(--card); color:var(--muted); }
.dot.partiel { border-color:#f59e0b; color:#b45309; background:#fff7ed; }
.dot.plein { border-color:var(--ok); color:#166534; background:#f0fdf4; }
.centre { min-width:0; }
.sujet, .barre, .qcard, .acc, .carnets { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:.7rem .95rem; margin-bottom:.7rem; }
.sujet h2 { margin:0 0 .25rem; font-size:1.02rem; }
.sujet .meta { color:var(--muted); font-size:.83rem; }
.sujet a { color:var(--accent); }
.barre { display:flex; flex-wrap:wrap; gap:.7rem; align-items:center; position:sticky; top:48px; z-index:10; }
.barre .total { font-weight:700; }
.note { font-variant-numeric:tabular-nums; }
.compet { font-size:.82rem; color:var(--muted); }
.alerte { font-size:.82rem; color:#b00020; font-weight:600; }
.qhead { display:flex; justify-content:space-between; align-items:baseline; gap:.5rem; flex-wrap:wrap; }
.qhead h3 { margin:0; font-size:.98rem; }
.theme { font-size:.68rem; font-weight:500; color:var(--muted); border:1px solid var(--line); border-radius:99px; padding:.05rem .45rem; vertical-align:middle; }
.pts { font-variant-numeric:tabular-nums; color:var(--muted); font-size:.88rem; }
.pts b { color:var(--ink); }
.enonce { margin:.45rem 0; }
pre.code { background:#0f172a; color:#e2e8f0; border-radius:8px; padding:.6rem .8rem; overflow-x:auto; font-size:.8rem; margin:.45rem 0; white-space:pre-wrap; }
.corrige { margin:.45rem 0; }
.corrige summary { cursor:pointer; color:var(--accent); font-weight:600; }
.crit { display:flex; gap:.5rem; align-items:flex-start; padding:.25rem .35rem; border-radius:8px; }
.crit:hover { background:#eef2ff; }
.crit label { flex:1; cursor:pointer; }
.pv { color:var(--muted); font-size:.78rem; white-space:nowrap; }
.pieges { margin-top:.4rem; border-top:1px dashed var(--line); padding-top:.3rem; }
.pieges .crit label { color:#b45309; }
textarea.rep { width:100%; min-height:90px; font:.83rem/1.4 ui-monospace, Menlo, Consolas, monospace; border:1px solid var(--line); border-radius:8px; padding:.5rem; margin:.4rem 0; resize:vertical; }
textarea.rep[readonly] { background:#f8fafc; color:var(--muted); }
.acc { display:flex; flex-wrap:wrap; gap:.45rem; align-items:center; }
.acc button { border:1px solid var(--line); background:#fff; border-radius:8px; padding:.35rem .7rem; font:inherit; cursor:pointer; }
.acc button:hover { border-color:var(--accent); color:var(--accent); }
.acc .primaire { background:var(--accent); border-color:var(--accent); color:#fff; }
.codelabel { font-size:.85rem; color:var(--muted); display:flex; gap:.3rem; align-items:center; }
.codelabel input { padding:.3rem .4rem; border:1px solid var(--line); border-radius:8px; font:inherit; }
.carnets table { border-collapse:collapse; width:100%; font-size:.85rem; }
.carnets th, .carnets td { border-bottom:1px solid var(--line); padding:.3rem .4rem; text-align:left; }
.carnets tr[data-candidat] { cursor:pointer; }
.gauge { height:8px; background:var(--line); border-radius:99px; overflow:hidden; margin:.3rem 0 .5rem; }
.gauge i { display:block; height:100%; }
.horsnav { display:none; }
.codewin { background:var(--card); border:1px solid var(--line); border-radius:12px; overflow:hidden; }
.onglets { display:flex; flex-wrap:wrap; border-bottom:1px solid var(--line); }
.onglets button { flex:1; border:0; background:#f8fafc; padding:.4rem .3rem; font-size:.78rem; cursor:pointer; border-right:1px solid var(--line); }
.onglets button.actif { background:var(--accent); color:#fff; }
.corpscode { padding:.5rem .7rem; }
.corpscode input.trou { font:.8rem/1.3 ui-monospace, Menlo, monospace; border:1px solid #f59e0b; background:#fffbeb; border-radius:4px; padding:.1rem .3rem; width:min(220px,60%); }
.corpscode input.trou.juste { border-color:var(--ok); background:#f0fdf4; }
.corpscode input.trou.faux { border-color:var(--err); background:#fef2f2; }
.corpscode .trou-plein { color:#7dd3fc; font-weight:600; }
.corpscode .correction { margin-top:.6rem; font-size:.8rem; color:var(--muted); }
.bdrawer { display:none; position:fixed; right:.8rem; bottom:.8rem; z-index:40; border:0; border-radius:99px; padding:.6rem .9rem; background:#0f172a; color:#fff; font:inherit; cursor:pointer; box-shadow:0 4px 14px rgba(0,0,0,.25); }
@media (min-width:1000px) {
  .grille { grid-template-columns:64px minmax(0,1fr) 400px; }
  .sommaire { flex-direction:column; position:sticky; top:60px; align-self:start; }
  .codewin { position:sticky; top:60px; align-self:start; max-height:calc(100vh - 80px); overflow-y:auto; }
}
@media (max-width:999px) {
  .bdrawer { display:block; }
  .codewin { display:none; position:fixed; left:.5rem; right:.5rem; bottom:0; z-index:35; max-height:65vh; overflow-y:auto; border-radius:12px 12px 0 0; box-shadow:0 -6px 20px rgba(0,0,0,.2); margin:0; }
  .codewin.ouvert { display:block; }
}
@media print {
  .topbar, .acc, .bdrawer, .sommaire { display:none !important; }
  .barre { position:static; }
  body { background:#fff; }
  .qcard, .sujet, .barre { break-inside:avoid; border-color:#bbb; }
  .codewin { display:none !important; }
  textarea.rep { border:1px solid #bbb; }
}
