:root{
  --board:#16241c;
  --board-deep:#101c15;
  --chalk:#f4f1e6;
  --chalk-dim:#c9d1c4;
  --dust:#6d766c;
  --dust-line:#3a453d;
  --yellow:#f2d675;
  --pink:#e8a6b8;
  --blue:#9fc8e8;
  --orange:#f0b27a;
  --green:#a9cf9a;
}

*{box-sizing:border-box;}
html,body{margin:0;padding:0;}

body{
  background:
    radial-gradient(ellipse at 20% -10%, rgba(255,255,255,0.05), transparent 45%),
    linear-gradient(180deg, var(--board) 0%, var(--board-deep) 100%);
  color:var(--chalk);
  font-family:'Space Grotesk', sans-serif;
  min-height:100vh;
  padding:56px 24px 80px;
}

body::before{
  content:"";
  position:fixed;
  inset:0;
  pointer-events:none;
  opacity:0.035;
  background-image:repeating-linear-gradient(45deg, #fff 0 1px, transparent 1px 3px);
  mix-blend-mode:overlay;
}

.wrap{max-width:1040px;margin:0 auto;position:relative;}

.page-head{
  display:flex;flex-wrap:nowrap;align-items:flex-start;gap:28px;
  border-bottom:1px dashed var(--dust-line);padding-bottom:28px;margin-bottom:40px;
}
.page-head-text{flex:1;min-width:0;}

.breadcrumb{
  font-family:'Space Mono', monospace;
  font-size:12.5px;
  color:var(--chalk-dim);
  margin-bottom:18px;
}
.breadcrumb a{color:var(--yellow);text-decoration:none;}
.breadcrumb a:hover{text-decoration:underline;}
.breadcrumb span.sep{margin:0 8px;color:var(--dust);}

header{
  display:flex;
}
.logo-link{flex-shrink:0;display:block;}
.site-logo{max-height:140px;width:auto;max-width:220px;object-fit:contain;display:block;}
.eyebrow{font-family:'Space Mono', monospace;font-size:12px;letter-spacing:0.14em;text-transform:uppercase;color:var(--chalk-dim);margin:0 0 10px;}
h1{font-size:clamp(26px, 4vw, 40px);font-weight:700;margin:0;letter-spacing:-0.01em;}
.subtitle{font-size:22px;font-weight:500;color:var(--chalk-dim);margin:8px 0 0;}
.desc-block{max-width:640px;color:var(--chalk-dim);font-size:14.5px;line-height:1.6;margin-top:14px;}

.section-divider{border-top:1px dashed var(--dust-line);margin:8px 0 36px;}

.section-label{font-family:'Space Mono', monospace;font-size:12px;text-transform:uppercase;letter-spacing:0.1em;color:var(--chalk-dim);margin:0 0 16px;}

.grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(230px, 1fr));gap:22px;margin-bottom:44px;}

.card{
  position:relative;display:block;text-decoration:none;color:inherit;
  border-radius:6px 6px 14px 14px;padding:22px 20px 20px;min-height:130px;
  background:rgba(255,255,255,0.03);border:1px solid var(--dust-line);
  transition:transform 0.18s ease, border-color 0.18s ease, background 0.18s ease;
}
.card::before{content:"";position:absolute;top:-9px;left:20px;width:38px;height:14px;border-radius:4px 4px 0 0;background:var(--card-color, var(--dust));opacity:0.9;}

.card.open{ --card-color: var(--yellow); border-color:var(--card-color);background:rgba(255,255,255,0.045); }
.card.open:hover,.card.open:focus-visible,.card.done:hover,.card.done:focus-visible{transform:translateY(-4px);background:rgba(255,255,255,0.075);outline:none;}

.card.locked{ --card-color: var(--dust); cursor:default;opacity:0.55; }

.card.open.info{ --card-color: var(--blue); }

.card.done{ --card-color: var(--green); border-color:var(--card-color); }

.num{font-family:'Space Mono', monospace;font-size:13px;color:var(--chalk-dim);margin:0 0 12px;}
.card.open .num{color:var(--card-color);}
.title{font-size:18px;font-weight:600;line-height:1.28;margin:0 0 8px;overflow-wrap:break-word;word-break:break-word;hyphens:auto;}
.desc{font-size:13px;color:var(--chalk-dim);line-height:1.5;margin:0;}
.status{position:absolute;bottom:16px;right:18px;font-family:'Space Mono', monospace;font-size:11px;}
.status.locked{color:var(--dust);}
.status.done{color:var(--green);}
.status.open{color:var(--card-color);}

.filelist{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:10px;}
.filelist li{
  display:flex;align-items:center;gap:14px;
  background:rgba(255,255,255,0.03);border:1px solid var(--dust-line);
  border-radius:8px;padding:14px 16px;
}
.filelist a{color:var(--chalk);text-decoration:none;font-weight:500;flex:1;}
.filelist a:hover{color:var(--yellow);}
.tag{font-family:'Space Mono', monospace;font-size:10.5px;text-transform:uppercase;padding:4px 9px;border-radius:100px;letter-spacing:0.05em;flex-shrink:0;}
.tag.cours{background:rgba(159,200,232,0.18);color:var(--blue);}
.tag.td{background:rgba(242,214,117,0.18);color:var(--yellow);}
.tag.tp{background:rgba(240,178,122,0.18);color:var(--orange);}
.tag.eval{background:rgba(232,166,184,0.18);color:var(--pink);}
.tag.doc{background:rgba(169,207,154,0.18);color:var(--green);}
.tag.lien{background:rgba(159,200,232,0.18);color:var(--blue);}

.locked-message{
  border:1px dashed var(--dust-line);border-radius:10px;padding:40px;text-align:center;
  color:var(--chalk-dim);font-family:'Space Mono', monospace;font-size:13.5px;
}

.colleague-banner{
  background:rgba(159,200,232,0.12);border:1px solid var(--blue);color:var(--blue);
  padding:10px 16px;border-radius:8px;font-size:13px;font-family:'Space Mono',monospace;
  margin-bottom:32px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;
}
.colleague-banner a{color:var(--chalk);text-decoration:underline;}

/* En mode collègue, tous les accents visuels des cartes passent au vert,
   uniformément — seul le texte du statut (verrouillée/en cours/terminée)
   reste inchangé pour garder l'information réelle visible. */
body.colleague-mode .card{ border-color: var(--green) !important; opacity:1 !important; }
body.colleague-mode .card::before{ background: var(--green) !important; opacity:0.9 !important; }
body.colleague-mode .status{ color: var(--green) !important; }
body.colleague-mode .num{ color: var(--green) !important; }
body.colleague-mode .card:hover,body.colleague-mode .card:focus-visible{
  transform:translateY(-4px);background:rgba(255,255,255,0.075);outline:none;cursor:pointer;
}

.empty-message{color:var(--dust);font-family:'Space Mono', monospace;font-size:13px;}

footer{margin-top:56px;padding-top:20px;border-top:1px dashed var(--dust-line);font-family:'Space Mono', monospace;font-size:12px;color:var(--dust);display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px;}
.admin-gear a{color:var(--dust);text-decoration:none;font-size:14px;}
.admin-gear a:hover{color:var(--chalk-dim);}

@media (max-width:520px){body{padding:40px 16px 60px;}.page-head{gap:14px;}.site-logo{max-height:48px;}}