:root { --bg:#000; --fg:#fff; --muted:#a0a0a0; --dim:#262626; --border:#fff; --danger:#ff6b6b; --space:1rem; font-family:Consolas,"Courier New",monospace; font-size:16px; color-scheme:dark; }
:root[data-theme="light"] { --bg:#fff; --fg:#000; --muted:#555; --dim:#eaeaea; --border:#000; --danger:#b00020; color-scheme:light; }
*,*::before,*::after { box-sizing:border-box; margin:0; padding:0; }
body { min-height:100vh; background:var(--bg); color:var(--fg); line-height:1.6; }
button,input,textarea,select { font:inherit; color:inherit; }
a { color:var(--fg); text-decoration:underline; text-underline-offset:.2em; }
a:hover { text-decoration-style:double; }
.container { width:min(760px,calc(100% - 2rem)); margin:2.5rem auto; }
.title { margin-bottom:1.5rem; font-size:1.5rem; font-weight:400; }
.title::before { content:"> "; }
.sm { color:var(--muted); font-size:.85rem; }
.lg { font-size:1.35rem; font-weight:700; }
.muted { color:var(--muted); }
.stack > * + * { margin-top:var(--space); }
.row { display:flex; gap:.75rem; align-items:center; flex-wrap:wrap; }
.form-group { display:flex; flex-direction:column; gap:.4rem; margin-bottom:1rem; }
.form-label { font-weight:700; }
.form-help { color:var(--muted); font-size:.85rem; }
.form-input,.form-textarea,.form-select { width:100%; padding:.65rem .8rem; border:1px solid var(--border); border-radius:0; outline:none; background:var(--bg); color:var(--fg); caret-color:var(--fg); }
.form-textarea { min-height:8rem; resize:vertical; }
.form-select { cursor:pointer; }
.form-input::placeholder,.form-textarea::placeholder { color:var(--muted); opacity:1; }
.form-input:focus,.form-textarea:focus,.form-select:focus { outline:2px solid var(--fg); outline-offset:2px; }
.form-input:disabled,.form-textarea:disabled,.form-select:disabled { color:var(--muted); border-color:var(--muted); cursor:not-allowed; }
.form-input:-webkit-autofill,.form-input:-webkit-autofill:hover,.form-input:-webkit-autofill:focus,.form-textarea:-webkit-autofill,.form-select:-webkit-autofill { -webkit-text-fill-color:var(--fg); caret-color:var(--fg); box-shadow:0 0 0 1000px var(--bg) inset; -webkit-box-shadow:0 0 0 1000px var(--bg) inset; transition:background-color 9999s ease-out 0s; }
.form-check { display:inline-flex; gap:.55rem; align-items:center; cursor:pointer; }
.form-check-input { width:1rem; height:1rem; accent-color:var(--fg); }
.btn { display:inline-block; padding:.55rem .9rem; border:1px solid var(--fg); border-radius:0; background:var(--bg); color:var(--fg); text-decoration:none; cursor:pointer; }
.btn:hover,.btn-primary { background:var(--fg); color:var(--bg); }
.btn-primary:hover { background:var(--bg); color:var(--fg); }
.btn:focus-visible { outline:2px solid var(--fg); outline-offset:3px; }
.btn:disabled { opacity:.5; cursor:not-allowed; }
.button-group { display:flex; gap:.75rem; flex-wrap:wrap; }
.panel { padding:1rem; border:1px solid var(--fg); }
.panel-title { margin-bottom:.75rem; font-weight:700; }
.message { padding:.75rem; border-left:4px solid var(--fg); background:var(--dim); }
.message-error { color:var(--danger); border-color:var(--danger); }
.badge { padding:.1rem .4rem; border:1px solid var(--fg); font-size:.8rem; }
.list { padding-left:1.4rem; }
.list li + li { margin-top:.35rem; }
.list li::marker { content:"> "; }
.table-container { width:100%; overflow-x:auto; }
.table { width:100%; border-collapse:collapse; min-width:32rem; }
.table th,.table td { padding:.65rem; border:1px solid var(--fg); text-align:left; }
.table th { background:var(--fg); color:var(--bg); }
.table tbody tr:hover { background:var(--dim); }
.navbar { padding:.75rem 0; border-bottom:1px solid var(--fg); }
.nav-links { display:flex; gap:1rem; flex-wrap:wrap; list-style:none; }
code,pre { font-family:Consolas,"Courier New",monospace; }
code { padding:.1rem .3rem; border:1px solid var(--muted); }
pre { overflow-x:auto; padding:1rem; border:1px solid var(--fg); }
pre code { padding:0; border:0; }
.styled-image { display:block; max-width:100%; height:auto; border:1px solid var(--fg); }
.separator { margin:1.5rem 0; border:0; border-top:1px solid var(--fg); }

/* Compositions propres à l'application, construites uniquement avec les variables globales. */
.page-header { display:flex; justify-content:space-between; align-items:flex-start; gap:var(--space); flex-wrap:wrap; }
.status-line { padding:.35rem .65rem; border:1px solid var(--fg); font-size:.85rem; }
.course-list { display:grid; gap:.75rem; }
.course-card { display:grid; grid-template-columns:9rem 1fr; border:1px solid var(--fg); }
.course-time { display:flex; align-items:center; padding:1rem; border-right:1px solid var(--fg); font-weight:700; }
.course-body { padding:1rem; }
.course-heading { display:flex; justify-content:space-between; align-items:flex-start; gap:.75rem; }
.course-room { margin-top:.75rem; padding:.55rem .7rem; background:var(--fg); color:var(--bg); font-size:1.15rem; font-weight:700; }
.capture-frame { padding:1rem; border:1px solid var(--fg); text-align:center; }
.capture-preview { display:block; width:100%; max-height:30rem; object-fit:contain; background:var(--bg); }
@media (max-width:600px) { :root{font-size:15px}.container{margin:1rem auto}.row>.form-input{flex-basis:100%}.button-group .btn{flex:1;text-align:center}.table{min-width:28rem} }
@media (max-width:600px) { .course-card{grid-template-columns:1fr}.course-time{border-right:0;border-bottom:1px solid var(--fg)} }
