Elf Abschnitte in einer Spalte waren zehn zu viel

Die Verwaltung war eine Seite mit 1786 Zeilen. Wer das Protokoll sehen
wollte, scrollte an Mediatheken, Prüfliste, Benutzern und Speicher
vorbei — und jede neue Einstellung hätte sie länger gemacht.

Jetzt hat sie eine eigene Leiste mit sieben Bereichen, jeder mit seiner
Adresse: `#/verwaltung/protokolle` lässt sich ablegen, und ein Neuladen
bleibt dort stehen. Die Leiste sieht aus wie die Hauptleiste daneben,
damit sie als Navigation gelesen wird und nicht als Knopfreihe; am
Telefon wird aus der Spalte ein Streifen zum Schieben.

**Gebaut wird nur, was offen ist.** Das ist nicht nur sparsamer: das
Abspielfenster fragt im Fünf-Sekunden-Takt nach, die Mediathekenliste
beobachtet laufende Scans. Gemessen: nach dem Wechsel in einen anderen
Bereich kommt zwölf Sekunden lang keine Anfrage mehr.

`admin.ts` ist in acht Dateien zerlegt — eine je Bereich, dazu `teile.ts`
für die gemeinsame Überschrift und `index.ts` für Leiste und Weiche.

Zwei Dinge mussten dabei nachziehen:

**Die Markierung in der Hauptleiste.** Sie verglich stur zwei Segmente;
bei `#/verwaltung/metadaten` traf das auf keinen Eintrag, und
„Verwaltung" verlor seinen Balken. Jetzt gilt auch ein Segment.

**„5 Titel warten — ansehen".** Der Knopf sprang mit `scrollIntoView` zur
Prüfliste. Die steht nicht mehr im selben Dokument — er wechselt jetzt
den Bereich. Die Hervorhebung danach entfällt damit, und mit ihr ihr CSS.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-10-06 16:39:50 +02:00
co-authored by Claude Opus 5
parent 94c6604e8b
commit 1e4a231d1b
13 changed files with 1979 additions and 1796 deletions
+50 -7
View File
@@ -1226,6 +1226,56 @@ body:has(.pl.pl-klein) .auswahlleiste { bottom: 92px; }
.hero-bald { font-size: 12px; padding: 0 var(--s-snug); }
}
/* --- Verwaltung ----------------------------------------------------------
*
* **Eine zweite Leiste, keine zweite Seite.** Die Verwaltung war elf
* Abschnitte in einer Spalte; wer das Protokoll sehen wollte, scrollte an
* allem anderen vorbei. Die Leiste sieht aus wie die Hauptleiste daneben —
* derselbe Balken links, dieselbe Farbe —, damit sie als Navigation gelesen
* wird und nicht als Knopfreihe. */
.verwaltung { display: flex; align-items: flex-start; gap: var(--s-section); }
.verw-leiste {
position: sticky; top: calc(var(--topbar-h) + var(--s-section));
flex: none; width: 196px;
display: flex; flex-direction: column; gap: 2px;
}
.verw-eintrag {
display: flex; align-items: center; gap: var(--s-regular);
background: none; border: 0; text-align: left;
padding: 9px var(--s-regular); color: var(--text-dim);
border-left: 3px solid transparent; border-radius: 0 var(--r-control) var(--r-control) 0;
font-size: var(--t-normal);
}
.verw-eintrag .icon { flex: none; color: var(--text-muted); }
.verw-eintrag:hover { color: var(--text); background: rgba(255, 255, 255, .04); }
.verw-eintrag:hover .icon { color: var(--text-dim); }
.verw-eintrag.check {
color: var(--accent); border-left-color: var(--accent);
background: linear-gradient(90deg, var(--accent-soft), transparent 70%);
}
.verw-eintrag.check .icon { color: var(--accent); }
.verw-buehne { flex: 1; min-width: 0; }
@media (max-width: 860px) {
/* Wie die Hauptleiste: aus der Spalte wird ein Streifen zum Schieben. */
.verwaltung { flex-direction: column; gap: var(--s-loose); }
.verw-leiste {
position: static; width: auto;
flex-direction: row; overflow-x: auto; gap: var(--s-tight);
scrollbar-width: none; padding-bottom: var(--s-tight);
}
.verw-leiste::-webkit-scrollbar { display: none; }
.verw-eintrag {
flex: none; white-space: nowrap;
border-left: 0; border-bottom: 2px solid transparent; border-radius: var(--r-control);
}
.verw-eintrag.check { border-bottom-color: var(--accent); background: var(--accent-soft); }
.verw-buehne { width: 100%; }
}
/* --- Kontextmenü ---------------------------------------------------------
*
* Gesehen, Favorit und Weglegen gab es nur auf der Detailseite. In einer
@@ -1678,13 +1728,6 @@ body:has(.auswahlleiste:not(.hidden)) .hinweise { bottom: 104px; }
.fassungsdatei .oz-dazu { flex: 1 1 auto; }
.btn.klein { padding: 4px 10px; font-size: 12px; flex: 0 0 auto; }
/* Kurz hervorheben, wohin gesprungen wurde — sonst sucht man oben weiter. */
.hervor { animation: hervor 1.6s ease-out; }
@keyframes hervor {
0%, 60% { background: var(--accent-soft); border-radius: var(--r-karte); }
100% { background: transparent; }
}
@media (prefers-reduced-motion: reduce) { .hervor { animation: none; } }
/* Der Ordner in den Medienangaben — schmaler gesetzt, er ist ein Pfad. */
.medientabelle dd.pfad {