:root{--bg:#f6f7f9;--fg:#1b1f24;--muted:#5f6b7a;--card:#fff;--line:#e2e6eb;--accent:#004c93;--ok:#1e7b34;--warn:#9a6700;--bad:#b42318;--chip:#eef1f5}
@media (prefers-color-scheme:dark){:root{--bg:#121417;--fg:#e7eaee;--muted:#9aa5b1;--card:#1b1f24;--line:#2c323a;--accent:#6aa9ff;--ok:#5cc177;--warn:#e0b44c;--bad:#ff7b72;--chip:#262b33}}
*{box-sizing:border-box}
body{margin:0;font:16px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;background:var(--bg);color:var(--fg)}
a{color:var(--accent)}
main{max-width:1200px;margin:0 auto;padding:16px}
h1{font-size:1.6rem;margin:.4em 0}h2{font-size:1.15rem;margin:.2em 0 .6em}h3{font-size:1rem;margin:1em 0 .4em}
.top{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;padding:10px 16px;background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.brand{font-weight:700;text-decoration:none;color:var(--fg)}
.top nav{display:flex;flex-wrap:wrap;gap:4px 14px;flex:1}
.top nav a{text-decoration:none}
.logout{margin:0}
.badge{background:var(--bad);color:#fff;border-radius:10px;padding:0 7px;font-size:.8em}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px}
.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:16px;margin-bottom:16px;min-width:0}
.card.wide{grid-column:1/-1}.card.narrow{max-width:420px;margin:10vh auto}
.muted{color:var(--muted)}.small{font-size:.85em}
.alert{padding:8px 12px;border-radius:8px;border:1px solid var(--line)}
.alert.error{border-color:var(--bad);color:var(--bad)}.alert.warn{border-color:var(--warn);color:var(--warn)}.alert.ok{border-color:var(--ok);color:var(--ok)}
input,select,textarea,button{font:inherit;padding:8px 10px;border-radius:8px;border:1px solid var(--line);background:var(--card);color:var(--fg);max-width:100%}
input,select,textarea{width:100%}
.row input,.row select{width:auto;flex:1 1 160px}
button{background:var(--accent);color:#fff;border-color:var(--accent);cursor:pointer}
button.secondary{background:transparent;color:var(--accent)}button.danger{background:transparent;color:var(--bad);border-color:var(--bad)}
button.link{background:none;border:none;color:var(--accent);padding:0}
.stack{display:flex;flex-direction:column;gap:10px}.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:6px 0}
.row form{margin:0}
ul.plain,ul.events,ul.notifications{list-style:none;padding:0;margin:0}
ul.plain li,ul.events li{padding:6px 0;border-bottom:1px solid var(--line)}
.events .when{font-variant-numeric:tabular-nums;color:var(--muted);margin-right:6px}
.event.cancelled strong,.event.cancelled a{text-decoration:line-through}
.event.unconfirmed{opacity:.85}
.tag,.status{display:inline-block;font-size:.75em;padding:1px 7px;border-radius:10px;background:var(--chip);color:var(--fg);white-space:nowrap}
.tag.bad,.status.s-failed{background:var(--bad);color:#fff}.tag.warn,.status.s-incomplete,.tag.c-unconfirmed{background:var(--warn);color:#fff}
.status.s-processed,.tag.c-confirmed{background:var(--ok);color:#fff}
.t-abgabe,.t-testat{border:1px solid var(--warn)}.t-klausur{border:1px solid var(--bad)}
table.list{width:100%;border-collapse:collapse}table.list td,table.list th{text-align:left;padding:6px;border-bottom:1px solid var(--line);vertical-align:top}
tr.inactive{opacity:.6}li.removed{opacity:.6}
pre{white-space:pre-wrap;word-wrap:break-word;overflow-wrap:anywhere}
pre.text{font:inherit;margin:0}
.unit{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 16px;margin:12px 0}
.unit:target{outline:3px solid var(--accent)}
.hits li{margin-bottom:12px}.hits p{margin:.3em 0}
.answer .md{overflow-x:auto}.md table{border-collapse:collapse}.md td,.md th{border:1px solid var(--line);padding:4px 8px}
.md pre{background:var(--chip);padding:10px;border-radius:8px;overflow-x:auto}
a.cite{font-size:.8em;vertical-align:super;text-decoration:none;background:var(--chip);border-radius:6px;padding:0 4px}
.sources{border-top:1px solid var(--line);margin-top:16px;padding-top:8px}.sources li.unused{opacity:.65}
.notifications li{background:var(--card);border:1px solid var(--line);border-left:4px solid var(--line);border-radius:8px;padding:10px 12px;margin:8px 0}
.notifications li.unread{border-left-color:var(--accent)}.notifications li.sev-warning{border-left-color:var(--warn)}.notifications li.sev-error{border-left-color:var(--bad)}
.notifications .body{white-space:pre-line}
.mono{font-family:ui-monospace,Menlo,monospace;font-size:.85em}
details summary{cursor:pointer;color:var(--accent);margin:6px 0}
code{font-size:.9em;overflow-wrap:anywhere}
@media (max-width:600px){main{padding:12px}.top nav{order:3;flex-basis:100%;flex-wrap:nowrap;overflow-x:auto;padding-bottom:4px}.top nav a{white-space:nowrap}.logout{margin-left:auto}.grid{grid-template-columns:1fr}.top nav{gap:4px 10px;font-size:.95em}h1{font-size:1.35rem}}
.wa-button{display:inline-block;padding:8px 14px;border-radius:8px;background:#25d366;color:#fff;font-weight:600;text-decoration:none}
.tag.wa{background:#25d366;color:#fff;text-decoration:none}
a.button{display:inline-block;padding:8px 12px;border-radius:8px;background:var(--accent);color:#fff;text-decoration:none}
input[type=checkbox]{width:auto;margin-right:6px}
.countdown{font-weight:600;font-variant-numeric:tabular-nums;margin-right:6px}.countdown.soon{color:var(--bad)}
.t-komparse{border:1px solid var(--ok)}
.tag.g-zugesagt{background:var(--ok);color:#fff}.tag.g-abgesagt{background:var(--bad);color:#fff}.tag.g-beworben{border:1px solid var(--warn)}
button.small{font-size:.8em;padding:2px 8px}
