/* Cassiope — même identité visuelle que mouli (« verre dépoli ») : fond pastel, cartes de verre très arrondies,
   Outfit pour les titres et les chiffres, JetBrains Mono pour le code et les étiquettes.
   Polices servies par l'application (licence OFL, voir static/fonts) : aucun appel extérieur. */
@font-face { font-family:"Outfit"; src:url("/static/fonts/outfit-var.woff2") format("woff2"); font-weight:100 900; font-style:normal; font-display:swap; }
@font-face { font-family:"JetBrains Mono"; src:url("/static/fonts/jetbrains-mono-500.woff2") format("woff2"); font-weight:500; font-style:normal; font-display:swap; }
@font-face { font-family:"JetBrains Mono"; src:url("/static/fonts/jetbrains-mono-700.woff2") format("woff2"); font-weight:700; font-style:normal; font-display:swap; }
:root {
  --papier:#eef0e8; --feuille:#ffffff; --encre:#1b211c; --encre-douce:#525a52;
  --accent:#1b5e47; --accent-teinte:#dcebe3; --soleil:#f5c542; --soleil-teinte:#fdf1c9;
  --echec:#b8322d; --echec-teinte:#fbe7e4; --alerte:#9a5b00; --alerte-teinte:#fdeccb;
  --info:#1f4f8f; --info-teinte:#e1ebf8;
  --trait:#d3d9d0; --controle:#6a736a; --regle:rgba(123, 133, 123, .22);
  --verre:rgba(255, 255, 255, .62); --verre-fort:rgba(255, 255, 255, .82); --verre-bord:rgba(255, 255, 255, .85);
  --nuit:#1c211d; --nuit-texte:#f3f1e8; --nuit-douce:#b9c0b4; --nuit-barre:#323a33;
  --same:#fbdcd8; --ren:#fdeeb8;
  --sans:"Outfit", ui-sans-serif, system-ui, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --mono:"JetBrains Mono", ui-monospace, "DejaVu Sans Mono", Menlo, Consolas, monospace;
  --ombre:0 1px 0 rgba(255, 255, 255, .7) inset, 0 18px 40px -22px rgba(40, 56, 44, .35);
  --ombre-menu:0 24px 48px -20px rgba(40, 56, 44, .45);
  --gouttiere:32px; --rayon:28px;
  /* alias conservés pour les gabarits */
  --surface:var(--verre-fort); --surface-2:rgba(255, 255, 255, .5); --line:var(--trait); --mute:var(--encre-douce); --ink:var(--encre);
  --st-attente:#c98a00; --st-retenu:#b8322d; --st-ecarte:#1b5e47; --st-source:#1f4f8f;
}
* { box-sizing:border-box; }
html { -webkit-text-size-adjust:100%; color-scheme:light; }
body { margin:0; font:400 15px/1.55 var(--sans); color:var(--encre); background-color:var(--papier);
  background-image:radial-gradient(120% 90% at 8% 0%, #fbf1c4 0%, rgba(251, 241, 196, 0) 55%),
                   radial-gradient(110% 100% at 100% 100%, #c5d3e0 0%, rgba(197, 211, 224, 0) 60%),
                   linear-gradient(160deg, #f6efd0 0%, #e6ebe0 45%, #d3dde6 100%);
  background-attachment:fixed; min-height:100vh; }
a { color:var(--accent); text-decoration:none; transition:color .12s, background-color .12s, border-color .12s; }
a:hover { text-decoration:underline; text-underline-offset:3px; }
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, summary:focus-visible, textarea:focus-visible {
  outline:2px solid var(--accent); outline-offset:2px; }
.skip { position:absolute; left:8px; top:-100px; z-index:50; padding:8px 12px; background:var(--feuille); border:1px solid var(--accent); border-radius:6px; }
.skip:focus { top:8px; }
.sr { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0; }
:target { scroll-margin-top:90px; }

/* ---------- Barre du haut : marque, pilules de navigation (pilule noire = page courante) ---------- */
header.top { position:sticky; top:0; z-index:30; padding-bottom:12px; background-color:rgba(238, 240, 232, .84);
  backdrop-filter:blur(16px); -webkit-backdrop-filter:blur(16px); }
header.top nav { max-width:1680px; margin:0 auto; padding:16px var(--gouttiere) 0; min-height:72px; display:flex; gap:8px 6px; align-items:center; flex-wrap:wrap; }
header.top nav > a, header.top details.menu > summary { display:inline-flex; align-items:center; min-height:44px; padding:0 18px; color:var(--encre);
  font-size:15px; font-weight:500; border-radius:999px; white-space:nowrap; background-color:var(--verre); border:1px solid var(--verre-bord); }
header.top nav > a:hover, header.top details.menu > summary:hover { background-color:var(--verre-fort); text-decoration:none; }
header.top nav > a[aria-current="page"], header.top details.menu > summary.here { background:var(--encre); color:#fff; border-color:var(--encre); font-weight:600; }
header.top nav > a.brand, .brand { font:700 26px/1 var(--sans); letter-spacing:-.04em; color:var(--encre); padding:0 22px 0 8px; margin-right:10px;
  gap:10px; background:none; border:0; display:inline-flex; align-items:center; }
.brand::before { content:""; width:14px; height:14px; background:var(--accent); border-radius:50%; box-shadow:0 0 0 4px rgba(27, 94, 71, .22); }
header.top nav > a.out { background:none; border-style:dashed; border-color:var(--controle); }
details.menu { position:relative; display:flex; }
details.menu > summary { gap:8px; cursor:pointer; list-style:none; }
details.menu > summary::-webkit-details-marker { display:none; }
details.menu > summary::after { content:""; border:4px solid transparent; border-top-color:currentColor; margin-top:4px; }
.menu-panel { position:absolute; z-index:40; top:calc(100% + 8px); left:0; margin:0; padding:8px; list-style:none; min-width:280px;
  max-width:calc(100vw - 2 * var(--gouttiere)); background:var(--feuille); border:1px solid var(--trait); border-radius:24px; box-shadow:var(--ombre-menu); }
.menu-panel a { display:flex; align-items:center; justify-content:space-between; gap:12px; min-height:44px; padding:0 16px; border-radius:16px; color:var(--encre); }
.menu-panel a:hover { background:var(--accent-teinte); text-decoration:none; }
.menu-panel a[aria-current="page"] { background:var(--encre); color:#fff; }
.menu-panel .n { font:700 12px/20px var(--mono); padding:0 9px; border-radius:999px; background:var(--soleil); color:var(--encre); }
.menu-panel .sep { border-top:1px solid var(--trait); margin-top:6px; padding-top:6px; }
.menu-panel .none { padding:10px 16px; color:var(--encre-douce); }
.logout { margin:0 0 0 auto; display:flex; align-items:center; gap:12px; color:var(--encre-douce); font-size:14px; }
.alfred-chip { display:inline-flex; align-items:center; gap:8px; font:500 12px/1.3 var(--mono); color:var(--encre-douce); }
.dot { width:8px; height:8px; border-radius:50%; background:var(--accent); box-shadow:0 0 0 4px rgba(27, 94, 71, .18); flex:none; }

/* ---------- Page ---------- */
main { max-width:1680px; margin:0 auto; padding:24px var(--gouttiere) 80px; }
body.plain main { max-width:520px; margin:6vh auto 0; }
h1 { font:300 46px/1.05 var(--sans); letter-spacing:-.035em; margin:0 0 10px; overflow-wrap:anywhere; display:flex; flex-wrap:wrap; align-items:center; gap:10px 14px; }
h2 { font:500 22px/1.25 var(--sans); letter-spacing:-.02em; margin:40px 0 12px; }
p { margin:8px 0; }
.crumbs, .eyebrow, th, .sect { font:500 12px/1.4 var(--mono); text-transform:uppercase; letter-spacing:.08em; color:var(--encre-douce); }
.crumbs { margin:8px 0 8px; } .crumbs a { color:var(--encre-douce); }
code, pre { font-family:var(--mono); font-size:13px; }
.mute { color:var(--encre-douce); } .small { font-size:13px; }
td.nowrap, th.nowrap, table.matrix td, table.matrix th { white-space:nowrap; }

/* ---------- Cartes de verre ---------- */
.card, .scroll, details:not(.menu):not(.plain), main > table { background:var(--verre); border:1px solid var(--verre-bord); border-radius:var(--rayon); box-shadow:var(--ombre);
  backdrop-filter:blur(18px) saturate(1.1); -webkit-backdrop-filter:blur(18px) saturate(1.1); }
.card { padding:24px 28px; min-width:0; }
.card h2 { margin:0 0 14px; display:flex; flex-wrap:wrap; align-items:baseline; gap:6px 12px; }
.card h2 small { font:400 13px/1.4 var(--sans); color:var(--encre-douce); letter-spacing:0; }
.card b:first-child { font-weight:600; }
.narrow { max-width:460px; }
.card.nuit { background:var(--nuit); color:var(--nuit-texte); border-color:var(--nuit); backdrop-filter:none; -webkit-backdrop-filter:none; }
.card.nuit h2 small, .card.nuit .mute { color:var(--nuit-douce); }
.card.nuit a { color:var(--soleil); }
.grid2 { display:grid; grid-template-columns:minmax(0, 2fr) minmax(300px, 1fr); gap:24px; align-items:start; }
.grid2 > div > h2:first-child { margin-top:16px; }

/* ---------- Tableaux ---------- */
.scroll { overflow-x:auto; }
table { border-collapse:collapse; width:100%; font-size:14px; }
main > table, .grid2 table:not(.code) { display:table; overflow:hidden; }
.grid2 table:not(.code):not(.matrix) { background:var(--verre); border-radius:var(--rayon); box-shadow:var(--ombre); }
th, td { text-align:left; padding:11px 16px; border-bottom:1px solid var(--regle); vertical-align:top; }
th { white-space:nowrap; vertical-align:bottom; padding-top:14px; font-weight:500; }
tr:last-child > td, tr:last-child > th { border-bottom:0; }
table:not(.code) tr:hover > td { background-color:rgba(255, 255, 255, .55); }
td.num, th.num { text-align:right; white-space:nowrap; }
td, .kpi b, .side-score b, .n { font-variant-numeric:tabular-nums; }
td.actions form, form.inline, .inline form { display:inline-block; margin:0 10px 0 0; }
td.cell-same { background:var(--same); } td.cell-var { background:var(--ren); }

/* ---------- Formulaires et boutons ---------- */
label { display:grid; gap:4px; font-size:13px; color:var(--encre-douce); margin-bottom:12px; }
input, select, textarea, button { font:inherit; padding:8px 16px; min-height:40px; max-width:100%; border:1px solid var(--controle); border-radius:999px;
  background:rgba(255, 255, 255, .8); color:var(--encre); }
input, select, textarea { width:100%; }
textarea { border-radius:18px; }
input[type=file] { border-radius:18px; padding:8px 12px; }
input[type=radio], input[type=checkbox] { width:20px; height:20px; min-height:0; padding:0; margin:0; accent-color:var(--accent); flex:none; }
select { appearance:none; -webkit-appearance:none; padding-right:40px; cursor:pointer;
  background-image:linear-gradient(45deg, transparent 50%, var(--encre) 50%), linear-gradient(135deg, var(--encre) 50%, transparent 50%);
  background-position:calc(100% - 22px) 52%, calc(100% - 16px) 52%; background-size:6px 6px, 6px 6px; background-repeat:no-repeat; }
label.choice { display:flex; align-items:center; gap:12px; padding:10px 16px; border:1px solid var(--controle); border-radius:999px; cursor:pointer;
  color:var(--encre); font-size:15px; background:rgba(255, 255, 255, .6); }
label.choice:has(input:checked) { border-color:var(--encre); background:var(--soleil-teinte); }
button, a.btn { display:inline-flex; align-items:center; justify-content:center; min-height:40px; padding:8px 18px; border-radius:999px;
  background:var(--encre); color:#fff; border:1px solid var(--encre); cursor:pointer; font-weight:600; white-space:nowrap; text-decoration:none;
  transition:color .12s, background-color .12s, border-color .12s; }
button:hover, a.btn:hover { background:var(--accent); border-color:var(--accent); color:#fff; text-decoration:none; }
button.secondary { background:rgba(255, 255, 255, .8); color:var(--encre); border-color:var(--controle); font-weight:500; }
button.secondary:hover { background:var(--soleil-teinte); color:var(--encre); border-color:var(--encre); }
button.danger { background:rgba(255, 255, 255, .8); color:var(--echec); border-color:var(--echec); }
button.danger:hover { background:var(--echec-teinte); color:var(--echec); border-color:var(--echec); }
button.link { display:inline; min-height:0; background:none; border:0; color:var(--accent); padding:0; font-weight:500; border-radius:4px; }
button.link:hover { background:none; color:var(--accent); text-decoration:underline; text-underline-offset:3px; }
button.small, a.btn.small { min-height:32px; padding:4px 14px; font-size:13px; }
.common-form { margin:8px 0 0; display:flex; flex-wrap:wrap; gap:8px 12px; align-items:end; }
.common-form label { margin:0; }
.toolbar { display:flex; flex-wrap:wrap; gap:10px; align-items:center; margin:8px 0; }
.toolbar select { width:auto; }

/* ---------- Messages et pastilles ---------- */
.error, .notice { padding:12px 20px; border-radius:18px; margin:0 0 20px; color:var(--encre); }
.error { border-left:3px solid var(--echec); background:var(--echec-teinte); }
.notice { border-left:3px solid var(--accent); background:var(--accent-teinte); }
.badge { display:inline-block; padding:1px 12px; border:1px solid currentColor; border-radius:999px; font:500 12px/20px var(--sans); white-space:nowrap;
  background:rgba(255, 255, 255, .7); color:var(--encre-douce); vertical-align:middle; letter-spacing:0; text-transform:none; }
.badge.retenu, .badge.alerte { color:var(--echec); } .badge.ecarte { color:var(--accent); }
.badge.attente { color:var(--alerte); } .badge.source { color:var(--info); }
.legend { display:flex; flex-wrap:wrap; gap:6px 16px; color:var(--encre-douce); margin-top:12px; }
.legend .l-same, .legend .l-ren { padding:2px 12px; border-radius:999px; color:var(--encre); }
.legend .l-same { background:var(--same); } .legend .l-ren { background:var(--ren); }
.legend i.k { display:inline-block; width:10px; height:10px; border-radius:50%; margin-right:6px; vertical-align:-1px; }
.k.attente { background:var(--soleil); } .k.retenu { background:#ff8f86; } .k.ecarte { background:#7fd0a8; }
.k.dust { background:#6f7c70; } .k.ring { border:2px solid #9cc7ff; }

/* ---------- Chiffres clés : grands chiffres fins ---------- */
.kpis { display:grid; grid-template-columns:repeat(auto-fit, minmax(190px, 1fr)); gap:16px; margin:20px 0 24px; }
.kpi { display:grid; gap:4px; align-content:start; padding:22px 26px; background:var(--verre); border:1px solid var(--verre-bord);
  border-radius:var(--rayon); box-shadow:var(--ombre); backdrop-filter:blur(18px); -webkit-backdrop-filter:blur(18px); }
.kpi b { font:200 56px/1 var(--sans); letter-spacing:-.045em; color:var(--encre); }
.kpi span { font:500 12px/1.4 var(--mono); text-transform:uppercase; letter-spacing:.08em; color:var(--encre-douce); }
.kpi small { font-size:13px; color:var(--encre-douce); }
.kpi.retenu b, .kpi.alerte b { color:var(--echec); } .kpi.ecarte b { color:var(--accent); } .kpi.attente b { color:var(--alerte); }

/* ---------- Code côte à côte ---------- */
details:not(.menu):not(.plain) { margin:16px 0; overflow:hidden; }
details:not(.menu):not(.plain) > summary { cursor:pointer; font-weight:500; padding:16px 24px; }
details:not(.menu):not(.plain)[open] > summary { border-bottom:1px solid var(--regle); }
details > .common-form { padding:10px 24px; }
details.plain { margin:4px 0 0; } details.plain > summary { cursor:pointer; }
table.code { font:500 12px/1.5 var(--mono); table-layout:fixed; background:var(--verre-fort); }
table.code col.ln { width:48px; }
table.code th { position:sticky; top:84px; z-index:5; background:var(--feuille); padding:8px 12px; border-bottom:1px solid var(--trait); }
table.code td { border:0; padding:0 10px; white-space:pre-wrap; overflow-wrap:anywhere; }
table.code td.ln { text-align:right; color:var(--encre-douce); border-right:1px solid var(--trait); user-select:none; }
td.c.same { background:var(--same); } td.c.renamed { background:var(--ren); } td.c.diff { color:var(--encre-douce); }
table.code tr:hover > td { background-image:linear-gradient(rgba(27, 94, 71, .08), rgba(27, 94, 71, .08)); }

/* ---------- Tableau de bord ---------- */
.dash-head { display:flex; align-items:end; justify-content:space-between; gap:16px; margin:8px 0 0; }
.dash-head h1 { margin:0 0 8px; } .dash-head p { margin:0; max-width:72ch; }
.dash { display:grid; gap:24px; margin-top:24px; }
.dash.r1 { grid-template-columns:minmax(0, 1.6fr) minmax(360px, 1fr); align-items:start; }
.dash.r2 { grid-template-columns:1.2fr 1fr 1fr; align-items:start; }
.tabs { display:flex; flex-wrap:wrap; gap:6px; margin-bottom:14px; }
.tabs a { padding:4px 14px; border-radius:999px; font-size:13px; font-weight:500; color:var(--nuit-douce); border:1px solid var(--nuit-barre); }
.tabs a:hover { color:var(--nuit-texte); text-decoration:none; }
.card.nuit .tabs a.on { background:var(--soleil); color:var(--encre); border-color:var(--soleil); font-weight:600; }
.sky { width:100%; height:auto; display:block; border-radius:18px; background:radial-gradient(ellipse at 28% 12%, #2b3a30 0%, #151a16 70%);
  --c-attente:#f5c542; --c-retenu:#ff8f86; --c-ecarte:#7fd0a8; }
.sky .dust { fill:#56635a; }
.sky .cluster { cursor:pointer; outline:none; }
.sky .cluster.attente { color:var(--c-attente); } .sky .cluster.retenu { color:var(--c-retenu); } .sky .cluster.ecarte { color:var(--c-ecarte); }
.sky .halo { fill:currentColor; fill-opacity:0; stroke:currentColor; stroke-opacity:0; stroke-dasharray:3 4; transition:fill-opacity .15s, stroke-opacity .15s; }
.sky .cluster:hover .halo, .sky .cluster:focus-visible .halo { fill-opacity:.08; stroke-opacity:.55; }
.sky .cluster.on .halo { fill-opacity:.14; stroke-opacity:.95; stroke-dasharray:none; }
.sky line { stroke:currentColor; stroke-opacity:.5; stroke-linecap:round; }
.sky .star { fill:currentColor; } .sky .ring { fill:none; stroke:#9cc7ff; stroke-width:2; }
.sky text { fill:#e6eadf; font:500 11px var(--sans); text-anchor:middle; }
.card.nuit .legend { color:var(--nuit-douce); }

.q { display:flex; flex-direction:column; gap:12px; }
.item { display:grid; grid-template-columns:minmax(0, 1fr) auto; gap:12px; background:var(--verre-fort); border:1px solid var(--verre-bord); border-radius:20px; padding:14px 18px; }
.item .t { font-weight:600; }
.side-score { display:flex; flex-direction:column; align-items:end; gap:8px; } .side-score b { font:300 26px/1 var(--sans); letter-spacing:-.03em; }
.faces { display:flex; margin-top:10px; }
.faces span { width:30px; height:30px; border-radius:50%; background:var(--feuille); border:2px solid var(--papier); margin-left:-8px;
  display:grid; place-items:center; font:700 10px/1 var(--mono); color:var(--encre-douce); }
.faces span:first-child { margin-left:0; } .faces span.src { background:var(--info-teinte); color:var(--info); }
.panel-head { display:flex; justify-content:space-between; align-items:start; gap:12px; margin-bottom:14px; }
.panel-head h2 { margin:0 0 6px; }
.meters { display:grid; grid-template-columns:auto 1fr; gap:8px 14px; align-items:center; font-size:13px; margin-bottom:14px; }
.bar { height:8px; border-radius:999px; background:rgba(123, 133, 123, .2); overflow:hidden; }
.bar i { display:block; height:100%; border-radius:999px; background:linear-gradient(90deg, var(--soleil), var(--echec)); }
.people { list-style:none; margin:0 0 16px; padding:0; max-height:380px; overflow-y:auto; }
.people li { display:flex; justify-content:space-between; align-items:center; gap:12px; padding:10px 0; border-top:1px solid var(--regle); }
.people li:first-child { border-top:0; }
.people .cmp { text-align:right; font-weight:600; white-space:nowrap; }
.quick .toolbar { margin-top:12px; } .quick .more { margin-left:auto; font-size:13px; }
.proj { padding:12px 0; border-top:1px solid var(--regle); } .proj:first-of-type { border-top:0; padding-top:0; }
.proj .l { display:flex; flex-wrap:wrap; align-items:baseline; gap:4px 8px; } .proj .l b { font-size:17px; font-weight:500; } .proj .l span.mute { margin-left:auto; }
.stack { display:flex; height:10px; border-radius:999px; overflow:hidden; background:rgba(123, 133, 123, .2); margin:10px 0 6px; gap:2px; }
.stack i { display:block; min-width:0; } .s-retenu { background:var(--echec); } .s-ecarte { background:var(--accent); } .s-attente { background:var(--soleil); }
.proj .c { display:flex; gap:14px; color:var(--encre-douce); } .proj .c .todo { color:var(--alerte); font-weight:600; }
.log { list-style:none; margin:0; padding:0; }
.log li { display:grid; grid-template-columns:52px 1fr; gap:12px; padding:9px 0; border-top:1px solid var(--regle); font-size:14px; }
.log li:first-child { border-top:0; padding-top:0; } .log time { color:var(--encre-douce); font:500 12px/1.6 var(--mono); }
.log .warn { color:var(--echec); font-weight:600; }
.stu { display:grid; grid-template-columns:1fr auto; gap:0 10px; padding:10px 0; border-top:1px solid var(--regle); }
.stu:first-of-type { border-top:0; padding-top:0; }
.pips { display:flex; gap:4px; align-items:center; grid-row:1 / 3; grid-column:2; }
.pips i { width:12px; height:12px; border-radius:4px; background:rgba(123, 133, 123, .28); }
.pips i.retenu { background:var(--echec); } .pips i.attente { background:var(--soleil); } .pips i.ecarte { background:var(--accent); }

@media (max-width: 1100px) { .dash.r1, .dash.r2, .grid2 { grid-template-columns:minmax(0, 1fr); } }
@media (max-width: 640px) {
  :root { --gouttiere:16px; --rayon:22px; }
  h1 { font-size:34px; } .kpis { grid-template-columns:repeat(2, minmax(0, 1fr)); gap:12px; } .kpi { padding:16px 18px; } .kpi b { font-size:40px; }
  .card { padding:18px; } details.menu { position:static; } .menu-panel { left:var(--gouttiere); right:var(--gouttiere); min-width:0; }
  button, input:not([type=checkbox]):not([type=radio]), select, textarea, summary { min-height:44px; }
  .logout { margin-left:0; }
}
@media (prefers-reduced-motion: reduce) { * { transition:none !important; } }

/* ---------- Page projet : groupes cliquables, galerie des rendus ---------- */
a.btn.secondary { background:rgba(255, 255, 255, .8); color:var(--encre); border-color:var(--controle); font-weight:500; }
a.btn.secondary:hover { background:var(--soleil-teinte); color:var(--encre); border-color:var(--encre); }
.dash-head h1 { margin-bottom:0; }
.group-list { display:grid; gap:12px; }
a.group-row { display:grid; grid-template-columns:110px minmax(0, 1fr) 130px 190px 24px; gap:8px 20px; align-items:center; padding:16px 24px; color:var(--encre);
  background:var(--verre); border:1px solid var(--verre-bord); border-radius:22px; box-shadow:var(--ombre); transition:background-color .12s, transform .12s; }
a.group-row:hover { background:var(--verre-fort); text-decoration:none; transform:translateY(-1px); }
a.group-row:hover .go { color:var(--accent); }
.group-row .size b, .group-row .score b { font:300 30px/1 var(--sans); letter-spacing:-.03em; }
.group-row .size, .group-row .score, .group-row .verdict, .group-row .who { display:grid; gap:2px; min-width:0; }
.group-row .names { overflow-wrap:anywhere; } .group-row .names b { font-weight:600; }
.group-row .verdict { justify-items:start; } .group-row .go { font-size:20px; color:var(--encre-douce); }
details.gallery { margin:24px 0 0; }
details.gallery > summary { font:500 22px/1.25 var(--sans); letter-spacing:-.02em; }
details.gallery > summary .mute { font-size:14px; letter-spacing:0; }
details.gallery .pad { padding:0 24px 16px; margin:12px 0 0; }
.filters { display:flex; flex-wrap:wrap; gap:8px; padding:16px 24px 0; }
.filters button.on { background:var(--encre); color:#fff; border-color:var(--encre); }
.tiles { display:grid; grid-template-columns:repeat(auto-fill, minmax(220px, 1fr)); gap:12px; padding:16px 24px 24px; }
.tile { position:relative; display:grid; gap:4px; align-content:start; padding:14px 16px; background:var(--verre-fort); border:1px solid var(--verre-bord); border-radius:18px; min-width:0; }
.tile[hidden] { display:none; }
.tile.off { background:rgba(255, 255, 255, .35); }
.tile .num { font:500 12px/1.4 var(--mono); color:var(--encre-douce); letter-spacing:.06em; }
.tile .name { font-weight:500; overflow-wrap:anywhere; }
.tile .marks { display:flex; flex-wrap:wrap; gap:4px; margin-top:4px; } .tile .marks:empty { display:none; }
a.badge:hover { text-decoration:none; background:#fff; }
.settings { display:grid; grid-template-columns:repeat(auto-fit, minmax(min(100%, 420px), 1fr)); gap:24px; align-items:start; margin-top:24px; }
.settings h3 { font:600 16px/1.4 var(--sans); margin:20px 0 10px; }
.settings .toolbar form { margin:0; }
@media (max-width: 900px) { a.group-row { grid-template-columns:1fr auto; } .group-row .who { grid-column:1 / -1; order:3; } .group-row .go { display:none; } }

/* ---------- Espace de comparaison : colonnes ajoutables, une par (étudiant, fichier) ---------- */
h1.compact { font-size:34px; }
label.check { display:inline-flex; align-items:center; gap:8px; margin:0; color:var(--encre); cursor:pointer; }
.workspace { display:grid; grid-template-columns:repeat(var(--n), minmax(380px, 1fr)); gap:16px; margin-top:16px; overflow-x:auto; padding-bottom:8px; }
.pane { display:flex; flex-direction:column; min-width:0; background:var(--verre); border:1px solid var(--verre-bord); border-radius:22px;
  box-shadow:var(--ombre); overflow:hidden; }
.pane > header { padding:12px 14px 10px; border-bottom:1px solid var(--regle); background:var(--verre-fort); display:grid; gap:8px; }
.pane .pick { display:grid; grid-template-columns:minmax(0, 1fr) minmax(0, 1.2fr) auto; gap:8px; align-items:center; }
.pane .pick form { margin:0; min-width:0; display:flex; gap:6px; }
.pane .pick select { min-height:36px; padding:4px 36px 4px 14px; font-size:14px; text-overflow:ellipsis; }
.pane .pick select[data-files] { font-family:var(--mono); font-size:12px; }
.pane .drop { display:grid; place-items:center; width:32px; height:32px; border-radius:50%; border:1px solid var(--controle); color:var(--encre);
  font-size:18px; line-height:1; background:rgba(255, 255, 255, .8); }
.pane .drop:hover { background:var(--echec-teinte); border-color:var(--echec); color:var(--echec); text-decoration:none; }
.pane .meta { display:flex; flex-wrap:wrap; gap:4px 12px; align-items:center; min-height:22px; }
.pane .meta form.mark { margin:0 0 0 auto; }
.pane .pad { padding:16px; }
.code-scroll { overflow:auto; height:calc(100vh - 330px); min-height:320px; scrollbar-gutter:stable; }
.code-scroll table.code { background:transparent; }
.code-scroll table.code td.c { white-space:pre; overflow-wrap:normal; }
.code-scroll tr[data-m] { cursor:pointer; }
.code-scroll tr.hit > td { box-shadow:inset 0 2px 0 var(--encre), inset 0 -2px 0 var(--encre); }
.code-scroll tr.hit > td.ln { background:var(--encre); color:#fff; }
@media (max-width: 900px) { .workspace { grid-template-columns:repeat(var(--n), minmax(300px, 86vw)); } .code-scroll { height:60vh; } }
/* en-têtes de colonnes de même hauteur : les lignes repérées s'alignent à l'écran d'une colonne à l'autre */
.workspace { grid-template-rows:auto 1fr; }
.pane { display:grid; grid-template-rows:subgrid; grid-row:span 2; }
.dash-head > :first-child { min-width:0; }
.dash-head .toolbar { flex-wrap:nowrap; flex:none; }
/* les étiquettes masquées (position absolue) doivent rester dans la zone qui défile, sinon elles élargissent la page */
.workspace, .scroll, .people { position:relative; }
