Der Rahmen — was auf jeder Seite gleich ist
Hinweis: Alles hier gilt für jede angemeldete Seite. In den einzelnen Dateien steht es deshalb nicht noch einmal; dort steht nur, was diese eine Seite zusätzlich hat.
Quellen:components/widgets/general/navbar/,components/menus/shell/,components/dataview/,components/search/,components/schnellaktionen/,bereiche/register.ts.
1. Die obere Leiste
Zwei Zeilen, und die Trennung ist Christians (N38): „obere für die allgemeinen Sachen wie Einstellungen, Sprache, etc.; untere für spezifischeres wie Studium, Personen, etc."
Obere Zeile — links das Logo, in der Mitte die Adresszeile, rechts die Marken und der Kontoknopf (E25, N367, N369, N379):
| Element | Was es tut |
|---|---|
| Logo „Denotato" | seit dem 05.10.2026 der Freie Kranz (2026-10-05-logo-freier-kranz): breit der Lockup mit der Wortmarke (public/logo/kranz-lockup*.svg), in der kompakten Leiste nur die Marke (kranz-marke*.svg); die Fassung -hell nimmt das Schema light, die andere jedes dunkle (TopLogoBar.tsx, data-logo). Vorher stand dort das Buchstabenlogo G-O-L-D, heute im Archiv. Es führt auf /dashboard; steht man schon dort, rollt es die Seite sanft ganz nach oben, bei der Bewegungsstufe „aus“ mit einem Sprung (F-261015-logo-oben). Das Anheben beim Überfahren fällt bei der Bewegungsstufe „aus“ weg, und sein Fokusring ist der gemeinsame in der Anwendungsfarbe, nur mit 4 px Abstand (RL18). Es ist der einzige feste Weg dorthin — ein weiterer Eintrag in der Seitenleiste wäre derselbe Weg zweimal. Die Übersicht steht über allen Räumen; ihre Adresse trägt keinen Raum, die Kacheln filtern nach raum (unten, „Welcher Raum gezeigt wird") |
| Marken der Bereiche (seit 24.09.2026, D22) | stehen vor allem anderen am Anfang der rechten Seite und nur, wenn es etwas zu sagen gibt. Heute gibt es eine: die Ereignismarke des Fortschritts für laufende globale Boosts — Zeichen „Hoch", Faktor und Ende in Mono, Chip in der Bereichsfarbe, 40 px hoch; führt nach /game?a=boosts; in der schmalen Leiste nur Zeichen und Faktor, der ganze Satz im aria-label. Nur ein Link, nichts zum Ändern (N185). Ein Bereich trägt seine Marke über den Platz LEISTENMARKEN im Plugin-Register (packages/plugins/src/register.client.tsx) ein, gezeichnet in TopLogoBar.tsx über Leistenmarken.tsx; ohne Marke sieht die Leiste aus wie vorher. Einzelheiten und die offene Frage nach Ort und Form: progress.md |
| Adresszeile (seit 28.09.2026, E25, N369, N379) | eine kleine Browserzeile in der Mitte, leiste/Adresszeile.tsx. Links Zurück und Vorwärts über den Verlauf des Routers (Vorwärts nur, solange man vorher zurück ist), dann Rückgängig (Strg+Z) und Wiederholen (Strg+Y, Umschalt+Strg+Z) aus der Rücknahmeschicht (§8). Im Feld der Pfad Denotato › Bereich — ein Klick auf einen Teil springt dorthin; einen Raum nennt er nicht (E10, unten „Die Seitenleiste“, Kopfleiste) —, hinter einer Haarlinie „Suchen oder springen" mit dem Kürzel Strg+K; ein Klick dorthin öffnet die Schnellsuche (§4). Bis zum 09.10.2026 nannte der Pfad ohne den Schalter der neuen Navigation zwischen „Denotato“ und dem Bereich den Raum, in dem der Schirm zu Hause ist (N390); mit dem alten Weg ist das entfernt (Entscheidung 2026-10-09-neue-navigation-immer.md). Hinter dem Bereich steht, wo es eine gibt, die offene Seite (N379): Ihren Namen meldet der Schirm, der sie zeigt, an die Ortschicht (context/Ortschicht.tsx, useSeitenname) — heute der Seiteneditor (Dokumente und Wiki) und der Personenschirm; die Ortschicht merkt sich im Speicher des Tabs, was an jeder Stelle des Verlaufs stand. Am Ende des Feldes der Anheften-Stern (N405): Er heftet die offene Seite an — Adresse samt Suchteil, unter dem Namen, den das Feld zeigt — oder löst sie; die Liste liegt am Konto (leiste.angeheftet, Einstellungen). Zurück und Vor zeigen den Verlauf (N379): Rechtsklick, langes Drücken oder Pfeil nach unten öffnet die letzten zehn Seiten dieser Richtung, ein Klick springt mehrere Schritte. Ihr Menü, das des Neu-Knopfs und das des Kontoknopfs stehen 16 px unter ihrem Knopf (MENUEABSTAND in leiste/Leistenknopf.ts) und schweben so 8 px unter der Kopfleiste, statt an ihrer Kante anzusetzen; im Verlaufsmenü steht der Seitenname in der Texttinte, das Bereichswort in der Lesetinte, damit es auch nachts auf Glas 3 : 1 hält (E-261015-verlaufsmenue-schwebt). Neben dem Feld der Neu-Knopf (+) mit dem, was die Bereiche zum Anlegen anbieten (anlegen in der Deklaration jedes Plugins: To-Do, Karte, Prüfung, Seite, Person, Termin, Material); er führt dorthin, wo das Anlegefach offen ist (?neu), prüft die Rechte wie die Leiste und fehlt, wenn niemand etwas anbietet (leiste/Neuknopf.tsx). Ein Titel genügt (KN-261015-neu-anlegen): Bietet ein Bereich über seinen Anschluss eine Schnellanlage (schnellanlagen, heute die Aufgaben), öffnet der Eintrag statt des Schirms ein Titelfeld auf Glas unter dem Knopf, mit dem Zeiger darin. Enter legt an, der Schirm bleibt; gemeldet wird es als Bestätigung mit „Rückgängig“, nie als Erfolgstoast (2026-10-08-keine-erfolgsmeldungen). Escape oder ein Klick daneben schließt, „Mit allen Feldern“ führt wie vorher zum Anlegefach. Die Zeichen rueckgaengig und wiederholen sind ein eigenes Paar; vorher stand umkehr da und las sich wie die Eingabetaste. Auf dem Telefon bleiben nur Feld und Pfad, mit der Lupe statt des Kürzels — Zurück ist dort eine Geste, Anlegen steht in den Schnellaktionen; der Bereich behält seinen Namen, nie weicht die Lupe (44 px, Marke layout.zielflaeche, Guide §16.1). Vom 29.09. bis 09.10.2026 stand der Raum dort ohne den Schalter als Knopf mit seinem Zeichen (N420); er ist mit dem alten Weg entfernt. Nur mit Sitzung |
| Chat und Glocke (seit 20.10.2026, OE-261019-mitteilungen) | Zwei runde Knöpfe nach den Marken, vor Gastzeile und Kontoknopf, beide 40 px mit einer Plakette oben rechts (über 9 steht „9+“). Chat ist die Marke des Bereichs Freunde über LEISTENMARKEN: Er steht immer, sobald der Bereich an ist — er ist der Weg hinein, nicht nur Nachricht —, führt nach /friends und zählt ungelesene Nachrichten. Nachrichten von Freunden kommen nie in die Glocke. Die Glocke gehört dem Gerüst (leiste/Glocke.tsx) und zählt, was offen ist: Freundesanfragen, Freigaben ans Konto und nahe Fristen aus den To-dos. Ein Klick öffnet am Rechner ein Blatt aus Glas unter dem Knopf, am Telefon ein Unterblatt. Eine Freundesanfrage wird dort mit Annehmen oder Ablehnen beantwortet; eine Frist trägt die Marke aus Guide §7.6 (überfällig fett und rot, heute fett). Offenes zählt, bis es erledigt ist; eine Freigabe nur, bis das Blatt einmal offen war. Beide fragen beim Öffnen, jede Minute und beim Zurückkehren in den Tab, nie in einem verborgenen Tab; der Chat dazu bei jedem Wechsel des Schirms.Seit 20.10.2026 (KI-261020-begleiter-schreibt) schreibt auch der Begleiter von sich aus in die Glocke: eine Zeile mit Sprechblase und dem Titel „Begleiter“, die zählt, bis sie in ihrer Zeile mit „Wegtun“ weggetan ist. Wie viele am Tag und wie viele Minuten dazwischen, stellt ein Admin (ab Werk drei und 120 Minuten; null am Tag schaltet ab). Aktionsvorschläge bleiben als Anstöße an der Eule. Seit 20.10.2026 (OE-261020-stummschalten) öffnet Rechtsklick oder langes Drücken (500 ms) auf eine Zeile ein Kontextmenü: „Diese Mitteilung abschalten“, „Alle {Art} abschalten“ und unter „Später wieder zeigen“ die Zeiten, die ein Admin stellt (ab Werk eine Stunde, acht Stunden, ein Tag, eine Woche). Die Zeile geht sofort, die Zahl folgt; eine verschobene kommt zur gewählten Zeit wieder. Ganz abgeschaltete Arten stehen in den Einstellungen unter „Glocke“ und kommen dort mit „Wieder einschalten“ zurück. |
| Gastzeile (seit 08.10.2026, D-261008-gastkonto) | nur bei einem Gastkonto, direkt vor dem Kontoknopf: „Gast · bleibt bis 7. November“ und der Verweis Konto anlegen auf /register (leiste/Gastzeile.tsx). Tag und Monat kommen aus gastBis in /access/me, in Zone und Sprache des Kontos; jeder Besuch schiebt das Datum weiter. Unter der Tablet-Breite (900 px) hat die Leiste keinen Platz: Dort steht das Datum im Kontoknopf unter dem Namen („bleibt bis 7. November“), und das Menü hat den Eintrag Konto anlegen. Den Inhalt des Gasts ins neue Konto mitzunehmen ist D-261008-gast-uebertrag, später; bis dahin führt der Verweis auf die gewöhnliche Registrierung |
| Kontoknopf (seit 27.09.2026, E25, N367) | ganz rechts, das eigene Profilbild mit Materialring (sonst Initialen), leiste/Kontoknopf.tsx. Unter dem Bild steht die Plakette mit dem Namen des Rangs, obwohl 36 px sonst nur den Materialstreifen tragen (namensschild in formen/Profilbild.tsx): Am Telefon gibt es keinen Titel, der ihn beim Darüberfahren nennt (F-261015-profilring-rangname). Das Menü (Radix, Glas) nennt oben Bild, Name und gezeigten Rang und führt zu Profil (/profil), Einstellungen (fehlt, wenn der Bereich abgeschaltet ist), Sprache und Szene als Untermenüs, Tastenkürzel (nicht auf Touch-Geräten) und Abmelden. Die Szene folgt weiter der Tageszeit (N132): die Wahl gilt bis zum nächsten Abschnitt. Die Sprache setzt auch lang an der Wurzel des Dokuments (de-DE, en-US; index.html bleibt bei de für den ersten Augenblick), damit Silbentrennung, Rechtschreibprüfung und Bildschirmleser ihr folgen (VA-261009-seitensprache). Die Sprache gilt seit N377 auch für das, was der Server schreibt (Mails, Fehlermeldungen; Briefing, Rückblick, Begleiter und Tutor bleiben vorerst deutsch, I09). Seit NV-261007-seitenleiste steht hinter den Einstellungen das Untermenü Deine Daten › mit Papierkorb und Verlauf: die Werkzeuge des Raums Konto außer dem Profil, das oben schon steht. Der Raum ist derselbe wirksame Stand, aus dem die Seitenleiste ihre Abschnitte baut (raumeintraege in TopLogoBar, mit der Einstellung raeume und den Rechten): Ein Werkzeug, das ein Admin hinaus- oder hineinstellt, steht genau an einer der beiden Stellen. Der Raum Konto hat in der Seitenleiste keinen Abschnitt mehr (unten, „Die Seitenleiste“) |
| Kontoknopf › Abmelden | beendet die Sitzung — auch auf dem Server (B26, 21.09.2026). Vorher flog nur die Kennung im Browser weg; der Server behielt Schlüssel und Konto bis zum Ablauf. Der Ruf wird nicht abgewartet: Ein Abmeldeknopf, der bei einer Störung stehen bleibt, ist schlechter als einer, der die Sitzung hier auf jeden Fall wegwirft. Seit D29 (23.09.2026) geht das auch im Nur-Lesen-Modus einer Impersonation — vorher wies der Server das Abmelden dort ab, und die Serversitzung blieb stehen —, und die Antwort ist kein 500 mehr: Die Sitzung wird erst beendet, wenn die Antwort mit ihrem Schlüssel verschlüsselt ist. Dazu räumt der Knopf die Spuren des Kontos aus dem Browser — den Rückfall jedes Bereichs (denotato.rueckfall.*), die zuletzt gesuchten Seiten und die zuletzt besuchten Moodle-Kurse; welche Schlüssel das sind, steht in handlers/kontospuren.ts, und verify:rueckfall wird rot, sobald ein Schlüssel in keiner Liste steht. Die Geräteschicht bleibt (Sprache, Darstellung, Lesefassung, gemerkte Kalenderansichten). Dasselbe geschieht, wenn die Sitzung abläuft. Seit dem 23.09.2026 trägt die Antwort des Servers Clear-Site-Data: "cache" (N137): Der Browser verwirft den Zwischenspeicher dieses Ursprungs, die Geräteschicht bleibt, weil nicht "storage" gesendet wird. Was fehlt: Den Schlüssel „Angemeldet bleiben" vergisst zwar der Browser, auf dem Server bleibt er aber gültig (D29, entschieden in N137, noch nicht gebaut) |
| Kontoknopf › Leiste bearbeiten (seit 09.10.2026, OE06, N512) | nur für Konten mit settings.global_default, als letzter Eintrag hinter einem Trenner. Er legt den Glasbalken „Leiste“ unter die Kopfleiste — fest „Für alle“, Entwurf, „Übernehmen“, „Verwerfen“, „Zurücksetzen“, „Fertig“ wie bei den Reitern (§3) — und darunter je Folge eine Reihe mit Plätzen zum Ziehen: Kontomenü (Folge leiste/konto), Adresszeile (leiste/adresse: Zurück, Vorwärts, Rückgängig, Wiederholen) und mit der Seitenleiste deren feste Plätze (seitenleiste). Alle drei stehen im Instanzschlüssel oberflaeche.reiter; ein eigener Schlüssel wäre dieselbe Form mit derselben Reichweite gewesen. Der Entwurf umfasst die ganze Leiste: Adresszeile und Seitenleiste zeichnen ihn sofort, das Kontomenü beim nächsten Öffnen. Fest bleiben Feld, Stern und Neu der Adresszeile — ihr Platz trägt Bedeutung — und das Sichtbarsein von Abmelden und Einstellungen: Sie tragen ein Schloss im Code, weil es am Telefon keinen anderen Weg zu ihnen gibt und ein ausgeblendetes Abmelden ein geteiltes Gerät angemeldet zurückließe; eine gespeicherte Anordnung, die sie ausblendet, wirkt für sie nicht. Die Trenner des Kontomenüs folgen dem Wechsel der Gruppe (Wege, Konto, Abmelden), nicht festen Stellen. Adresszeile und feste Plätze dürfen ganz leer werden. Vorschau (seit 15.10.2026, OE05): Über den Reihen zeichnet ein verkleinerter Rahmen die Leiste mit den echten Bausteinen — Adresszeile, Einträge der Seitenleiste, Plätze der Telefonleiste — in einer von drei Breiten, Breit (Kacheln mit Wort, Knöpfe vor dem Feld), Schmal (nur Zeichen, nur das Feld) und Telefon (die fünf Plätze unten); vorgewählt ist die Breite, in der man gerade nicht sitzt. Sie zeigt den Entwurf so, wie er nach „Übernehmen“ gilt, also ohne das Ausgeblendete; das Kontomenü steht nur als sein Knopf darin, weil es erst beim Öffnen zeichnet. Die Bausteine sind inert, ein Deckel darüber nimmt jeden Klick: Er navigiert nie, sondern wählt den getroffenen Eintrag in seiner Reihe darunter. Was gegenüber dem geltenden Stand versetzt oder aus- und eingeblendet ist, trägt in der Reihe einen durchgezogenen Rand mit Punkt und in der Vorschau einen Umriss; als versetzt gilt nur, was außerhalb der längsten gemeinsamen Teilfolge liegt, damit Nachrückende nicht mitleuchten (leiste/leistenfolgen.ts, leiste/Leistenbearbeitung.tsx, leiste/Leistenvorschau.tsx, Nachweise Kontoknopf.test.tsx, Adresszeile.test.tsx, Leistenbearbeitung.test.tsx, Leistenvorschau.test.tsx) |
Die Knöpfe der oberen Zeile tragen keine Bereichsfarbe (27.09.2026, RL05, N378). Suche, Sprache, Szene, Einstellungen und Abmelden — heute Adresszeile und Kontoknopf —, dazu der Haken in ihren Menüs, nahmen bis dahin über BereichAusRoute die Farbe der Route an — gelb auf /tasks, türkis auf /documents —, obwohl sie zu keinem Bereich gehören. Ihr Zeichen folgt jetzt mit currentColor der Schrift seines Knopfs. Die Marken der Bereiche behalten ihre Farbe.
Die untere Zeile ist entfernt (09.10.2026, Entscheidung 2026-10-09-neue-navigation-immer.md). Vom 28.09. bis dahin zeigte sie ohne den Schalter der neuen Navigation einen Arbeitsraum (NV06, N388, N390; TopNavigationButtons.tsx): den Raumumschalter als Kapsel, die Mitglieder des Raums mit Unterbereichen hinter „Mehr“ und bei einem fremden Schirm die Kapsel „Konto ›“; unter 900 px standen Burger und Schublade an ihrer Stelle. Heute hat die Kopfleiste eine Zeile, und die Bereiche stehen in der Seitenleiste (unten).
Welcher Raum gezeigt wird (bereiche/raum.ts, bereiche/useRaeume.ts): der Raum ist Filter, kein Präfix (E10 in ../kontext/entscheidungen/2026-10-07-leiste-und-wechsel.md). Die Adresse heißt /tasks; der gezeigte Raum kommt aus der Einstellung raum des Kontos, sonst aus der Vorgabe der Instanz (N390). Jedes Ziel geht über adresseOhneRaum. Vom 30.09. bis zum 09.10.2026 stand der Raum ohne den Schalter der neuen Navigation als Präfix im Pfad (/alltag/tasks, NV10, N409, N411); mitRaum, raumDerAdresse, wegImRaum und useRaumabgleich sind mit dem alten Weg entfernt (Entscheidung 2026-10-09-neue-navigation-immer.md).
Zwei Wachen im Router (App.tsx): Vor jedem Weg steht Raumvorsatz und nimmt nur ein altes ?raum= (bis 30.09.2026) mit replace weg. Alte Adressen mit Präfix kommen weiter an: Sie stehen unter /:raum, feste Stücke schlagen /:raum. Ein eigener Raum, der wie ein Weg heißt, wäre deshalb nie zu erreichen: Die Einstellung nimmt einen solchen Namen nicht an, und ein schon gespeicherter Raum fällt weg, mit Hinweis unter „Bereiche“ (NV14, N461; Liste BELEGTE_WEGSTUECKE in @shared/config/raeume.ts). Raumwache kürzt eine solche Adresse mit replace auf die ohne Raum, Suchteil und Anker bleiben (/alltag/tasks?a=1#x wird /tasks?a=1#x), und die gespeicherte Wahl bleibt, wie sie ist — auch bei einem Raum, den das Konto nicht sieht, denn er gewährt nichts (N149). Der Raum allein (/studium) heißt „Heute mit diesem Raum“: Die Wache schreibt ihn als raum, zeigt bis zur Antwort des Servers den Platzhalter und führt dann auf /dashboard, wo die Kacheln nach ihm filtern (N429); ein unbekannter Raum allein bleibt „Nicht gefunden“, ebenso ein erstes Stück, das keine Raumkennung sein kann (/Studium, /foo_bar/tasks). Ohne geladene Zugriffsdaten und Einstellungen bleibt die Leiste leer — lieber einen Augenblick nichts als einen Augenblick den falschen Raum (F53).
Ein Wechsel schreibt raum selbst. Steht der Schirm im neuen Raum oder ist es Heute, bleibt die Adresse; sonst führt er auf /dashboard (zielBeimWechsel). Zwei schnelle Wechsel schreiben der Reihe nach, und der letzte gilt. Der Raum wechselt nie von selbst (N388). Ein Klick auf ein Ziel in einem fremden Raum — Treffer der Schnellsuche, Schnellaktion, Nachbar in „Verwandt“ — führt ohne Raum hin und schreibt dessen Raum als Wahl (Raumlage.uebernimm): Der bewusste Klick wechselt also weiter sichtbar (N390), nur trägt ihn die Einstellung statt der Adresse. Weil setze erst nach der Antwort übernimmt, folgen Leiste und Kacheln dem Wechsel um diese eine Antwort später. Angeheftete Seiten vergleicht der Stern ohne Raum: /alltag/tasks von früher und /tasks sind dieselbe Seite, und Lösen nimmt beide (useAngeheftet). Den Raum Konto zeigt nichts (Punkt 4 der Entscheidung E10): Steht er noch als raum im Konto — aus einer alten Adresse /konto/… oder aus /konto allein —, gilt die Vorgabe der Instanz, sonst der erste sichtbare Raum, und uebernimm schreibt ihn nie; seine Einträge bleiben in der Lage für den Kontoknopf (08.10.2026, useRaeume.test.tsx).
Die Schublade ist entfernt (09.10.2026, Entscheidung 2026-10-09-neue-navigation-immer.md). Bis dahin klappte sie ohne den Schalter unter 900 px hinter dem Burger auf (Navigationsschublade.tsx): Reihe der Räume, Übersicht, Mitglieder des Raums, ein fremder Schirm mit der Kapsel „Konto ›“, am Fuß Abmelden. Zwischen 600 und 900 px steht heute die Zeichenleiste, am Telefon die Leiste unten (unten).
Die Werkzeuge des Gerüsts — Mit mir geteilt (/geteilt), Papierkorb (/papierkorb), Verlauf (/ereignisse), Profil (/profil) — handeln von allen Bereichen zugleich und gehören keinem; bis zum 28.09.2026 führte kein Menü hin, nur je ein Befehl der Schnellsuche (Waisen, NV02 §2). Schnitt 1 stellte sie unter die Bereiche der Schublade, durch eine Linie abgesetzt; seit Schnitt 3 sind sie Mitglieder ihres Raums: Mit mir geteilt in der Ablage, Papierkorb, Verlauf und Profil im Konto, das in der Seitenleiste keinen Abschnitt hat — die drei stehen im Kontoknopf (oben). Name und Weg kommen vom Befehl der Schnellsuche, Zeichen und Raum aus bereiche/werkzeuge.ts. Der Papierkorb ist ein Schirm des Plugins der Einstellungen und fragt deren Knoten im Rechtebaum; die anderen brauchen nichts. Das Profil steht daneben weiter im Kontoknopf oben rechts.
Die Arbeitsräume (NV06, N388, N390): Vier Räume stehen in @shared/config/raeume.ts, jede Deklaration nennt im Feld raeume die Räume, in denen ihr Bereich von Haus aus steht, und bereiche/raeume.ts löst beides mit der Einstellung raeume zu einer Reihe von Räumen mit Mitgliedern auf (einstellungen.md §10). Die Vorgabe, gelesen aus den Deklarationen am 28.09.2026:
| Raum | Zeichen | Bereiche und Werkzeuge (Vorgabe, Folge des Registers) |
|---|---|---|
| Studium | saeulenhalle | Studium, Begleiter, Stundenplan, Karteikarten, Kalender, Moodle, Tutor, Material, Noten |
| Alltag | wohnhaus | To-Dos, Fortschritt, Personen, Kalender, Leben |
| Ablage | archivkasten | Dokumente, Wiki, Gedächtnis, Mit mir geteilt |
| Konto | profilring | Einstellungen, Admin, Papierkorb, Verlauf, Profil |
Die Raumzeichen gehören nur den Räumen (NV11, N410, N494, seit 03.10.2026): Jeder Raum ist ein Ort — Säulenhalle, Wohnhaus, Archivkiste, Profil im Kreis —, und ein eigener Raum trägt grundriss. Keines ist die Marke eines Bereichs; ein Test in Zeichen.test.tsx hält das fest. Bis dahin trugen die Räume geliehene Zeichen (kappe, tuer, schublade, schluessel, eigene Räume tuer): kappe war zugleich die Marke des Bereichs Studium, und die Reihe in Umschalter und Schublade las sich unruhig.
Die Übersicht steht über allen Räumen und zeigt den gewählten; Schlaf, Lern-Timer und Rückblick haben keine Route und keinen Raum. Alles daran ist Einstellung (Folge, Sichtbarkeit, Name, Zeichen, Zuordnung, eigene Räume; Grundsatz 72), fest bleibt: ein Raum gewährt kein Recht (N149), ein Raum ohne Mitglieder erscheint nicht, und kein Raum wechselt von selbst (N388). Die Übersicht je Raum (NV08, Schnitt 6, N429, 30.09.2026): Über den Kacheln steht der Filter der Kacheln, eine Segmentwahl ohne Zeichen und ohne Konto (bis zum 09.10.2026 ohne den Schalter die Raumkapsel der Schublade, Raumkapsel.tsx, entfernt), darunter nur die Mitglieder des gewählten Raums, Werkzeuge eingeschlossen, je Raum in eigener Folge (dashboard.md, „Die Kacheln"). Leiste unten und Schnellsuche haben ihren Raum seit dem 29.09.2026 (§4, §5).
Ein Bereich, den man nicht hat, steht nicht da. Die Regel ist dreistufig und überall dieselbe: kein Merkmal → immer sichtbar; ein Merkmal, das nicht gewährt ist → nie; ein schaltbares, das aus ist → auch nicht.
Seit dem 23.09.2026 rechnet sie der Rechtebaum (N149, Befund N8 in C41). Leisten (bis zum 09.10.2026 auch „Mehr“ und Schublade), Übersichtskacheln, Schnellsuche, Schnellaktionen und die Systemtafel der Verwaltung stellen dieselbe Frage wie die Wege auf dem Server und wie rechte_baum: bereichslage in @shared/config/rechtepfade, am Knoten des Bereichs (rechtepfad der Deklaration). Erlaubt der Baum den Knoten nicht, fehlt der Bereich (404); erlaubt er ihn und ist der Schalter aus, ist er aus (403). Die drei Stufen oben sind geblieben — sie sind jetzt das Ergebnis und nicht mehr eine zweite Rechnung daneben. Vorher fragte die Leiste grantedFeatures, die Wege featurelage und der Baum seine Vergaben, und rechte_baum sagte für Tutor, Material und Noten „nicht gewährt", während sie für dasselbe Konto unter „Mehr" standen und luden.
Drei Dinge folgen daraus, und keines nimmt oder gibt einem Konto etwas:
- Tutor, Material und Noten haben keinen eigenen Grant. Ihr Knoten (
gold.tutor,gold.materials,gold.noten) wird aus dem Studium abgeleitet und trägt dessen Herkunft; wer das Studium hat, hat die drei. Damitquelle: 'nutzer'angold.notennicht wie eine Vergabe an genau diesen Knoten aussieht, trägt der Entscheid dortueber: 'gold.study'—rechte_baumundrechte_pruefengeben es mit aus (Nachbesserung vom 23.09.2026). Einem Konto einen der drei zu nehmen, ohne ihm das Studium zu nehmen, verlangt ein eigenes Merkmal oder ein Verbot im Baum — das entscheidet Christian (Was fehlt, Punkt 37). - Ein Bereich ohne Merkmal (Übersicht, Leben, Einstellungen, Schlaf, Rückblick, das Gerüst) steht im Baum mit der Quelle
eingebaut: Jeder hat ihn, undrechte_baumsagt das jetzt auch. Abschalten lassen sich Schlaf und Rückblick seit dem 27.09.2026 trotzdem: über die Einstellungplugin.<id>.aktiv(N363, D33), die ihre Wege auf dem Server fragen (403, wenn aus) und die unter Einstellungen → Bereiche → „Im Hintergrund" einen Schalter hat. Eingebaut ist sieaktivVorgabe: false; für diese Instanz setzt Wanderung 175 die Vorgabe an. - Die fünf Bereiche mit Fähigkeit (Verwaltung, Gedächtnis, Moodle, Tagebuch, Persönlichkeiten) brauchen Grant und Fähigkeit, auch im Baum. Dort genügte bis dahin die Fähigkeit allein, und
rechte_baumsagte mehr, als Leiste und Wege zeigten (F22 in der Gegenrichtung).
N149 ist damit zur Hälfte gebaut, und zwar in der Gegenrichtung. Christians Wortlaut: „Oberfläche muss Baum folgen … Für Ben verschwinden die drei Bereiche, bis Christian sie ihm gewährt." Gebaut ist, dass Oberfläche, Wege und Baum eine Rechnung sind; dafür hat der Baum gelernt, was die Oberfläche schon tat. Die wörtliche Richtung hätte Tutor, Material, Noten, Timer, Übersicht, Einstellungen, Leben, Schlaf und Rückblick jedem Konto genommen, Christians eingeschlossen, denn kein Grant und keine Fähigkeit zeigt auf ihre Knoten — und niemand hätte sie zurückgeben können. Nicht gebaut ist die Folge für ein einzelnes Konto: Wer das Studium hat, behält Tutor, Material und Noten. Dafür fehlt ein Datenfeld, und die Wahl steht in Was fehlt, Punkt 37.
Geprüft wird das an drei Stellen: navigation.test.ts („Unterbereiche folgen dem Rechtebaum") vergleicht die Bereiche der Leiste mit dem ganzen Baum für sechs erfundene Konten; verify:rechte Teil 10 legt ein Prüfkonto an und fragt Baum, Sperre und Oberflächenrechnung ohne Grant, mit Grant und abgeschaltet; verify:verwaltung Punkt 22 hält die Systemtafel an dieselbe Rechnung. Schnellsuche und Schnellaktionen haben ihre Proben neben sich (befehle.test.ts, aktionen.test.ts), jede mit einem Raum, der nach seinem eigenen Knoten gefragt wird und nicht nach dem Studium.
Was ein Klick in der Leiste tut (BE04, nachgemessen am 21.09.2026)
Der Knopf führt auf route der Bereichsdeklaration — ohne Abschnitt; vom 30.09. bis zum 09.10.2026 trug er ohne den Schalter der neuen Navigation den gezeigten Raum als Präfix (/alltag/tasks, NV10), seitdem keinen (E10, oben). Daraus folgen drei Dinge, und alle drei sind gemessen:
- Die Route wechselt, der Schirm auch. Der alte wird abgebaut, der neue entsteht;
Schirmwechselzeichnet dabei nur die Bewegung (0,4 s, 12 px, von unten — Guide §11.2). Nennt die neue Route denselben Pfad ohne Raum wie die alte (/konto/settings→/settings, wenn die Raumwache eine alte Adresse kürzt), steht der Schirm ohne Bewegung da: Er wechselt nicht, er hängt nur unter einer anderen Route (NV-261007-seitenleiste,Schirmwechsel.test.tsx). - Ein
?a=des verlassenen Schirms geht nicht mit. „Module von Semester 1" heißt unter Personen nichts, und der Abschnitt gehört dem Schirm, den man verlässt. - Steht man schon im Bereich, ist der Klick der Weg zurück auf den ersten Abschnitt — denn die Adresse nennt danach keinen anderen mehr (§3).
Welcher Schirm dasteht, weiß allein der Router. Es gibt daneben keinen zweiten Stand: Die Leiste liest useLocation() nur für die Hervorhebung, und kein Bauteil zwischen Leiste und Schirm merkt sich einen Bereich. Das ist der Unterschied zu §3, wo der Abschnitt bis zum 21.09.2026 zweimal geführt wurde.
Ben hat den Gegenfall gemeldet (BE04): Adresse neu, Inhalt alt — nur beim Klick, nicht beim direkten Aufruf. Die Ursache lag in Schirmwechsel: ein AnimatePresence mode="wait" wartete auf einen Abgang, der nie gemeldet wurde, und hielt den vorigen Schirm fest. Entfernt am 18.09.2026. Die Proben in components/menus/shell/Kopfleistenwechsel.test.tsx halten die ganze Kette fest — echte Seitenleiste, echter Übergang, echter MenuScreen; zwei davon bauen die alte Mechanik nach und zeigen, dass sie wieder genau Bens Bild ergibt.
Die neue Navigation gilt immer (09.10.2026)
Vom 07. bis zum 09.10.2026 hing die neue Navigation an einem Nutzerschalter unter Einstellungen › Bereiche (navigation.neu, vorgegeben aus; A-261007-erneuerung-phase-3), und kein Konto hatte ihn eingeschaltet. Seit dem 09.10.2026 gilt sie für jedes Konto, ohne Schalter (Entscheidung 2026-10-09-neue-navigation-immer.md): Seitenleiste über 900 px, Zeichenleiste zwischen 600 und 900 px, Leiste unten am Telefon, Adressen ohne Raum (E10) und nach der Anmeldung „Heute“. Entfernt sind der Schalter samt der Frage nach dem Grund beim Zurückschalten, der Hook useNeueNavigation, die untere Zeile mit Raumumschalter, „Mehr“ und Raumkapsel, Burger und Schublade, die Raumreihe der Schnellaktionen am Telefon, das Raumpräfix und die Wahl der Startseite. Einen Weg zurück gibt es im Produkt nicht.
Der Weg nach der Anmeldung: Die Wurzel führt immer auf „Heute“, die Übersicht ohne festen Tag (/dashboard, nicht ?tag=heute), damit abends N316 gilt. Eine Wunschadresse geht vor (handlers/wunschweg.ts). Geprüft in MainScreen.test.tsx; die Seite der Wurzel beschreibt es in randseiten.md.
Die Seitenleiste (07.10.2026, NV-261007-seitenleiste)
Angemeldet und breiter als 600 px steht links eine Seitenleiste; die Kopfleiste hat eine Zeile. Bis zum 09.10.2026 galt das nur mit dem Schalter der neuen Navigation, sonst standen dort die untere Zeile und unter 900 px Burger und Schublade (oben). Was sie zeigt, steht in der Entscheidung 2026-10-07-leiste-und-wechsel.md, Punkte 2, 4 und 5 (navbar/seitenleiste/Seitenleiste.tsx, gerendert aus TopLogoBar).
| Teil | Was es tut |
|---|---|
| Feste Plätze | oben, rollen nicht mit, seit dem 10.10.2026 als Raster zu drei Kacheln je Reihe: das Zeichen groß (26 px) in der Bereichsfarbe, das Wort klein darunter, zu lang mit Auslassung (NV-261010-seitenleiste-klar, Christians Wahl „Raster oben“). So viele volle Reihen, wie die Höhe der Leiste fasst, nachdem vier Zeilen für die Abschnitte frei bleiben; mindestens die zwei Reihen für fünf Plätze, höchstens alle. Vorgabe: Studium, Begleiter, Kalender, To-Dos, Gedächtnis, Tutor, Dokumente, Karteikarten, Fortschritt (bereiche/festePlaetze.ts). Die Folge stellt die Instanz unter oberflaeche.reiter, Folge seitenleiste (§3); was die Folge nennt und die Vorgabe nicht, kommt dazu, Ausgeblendetes steht nur in seinem Raum. Ein Bereich, den das Konto nicht hat, fehlt, ohne Lücke (N149). Ein Klick zeigt danach den Raum, in dem der Bereich zu Hause ist — den gezeigten, wenn er ihn hat (N390) |
| Abschnitte je Raum | darunter, rollbar: Studium, Alltag, Ablage mit leiser Überzeile, in der Folge von raeumeAufgeloest und mit raumeintraege wie die alte Zeile. Was oben fest steht, kommt nicht noch einmal; der Kalender aus zwei Räumen nur beim ersten. Es gibt kein „Mehr“: Unterbereiche (Tutor, Material, Noten) stehen als gewöhnliche Einträge. Der Raum Konto hat keinen Abschnitt — Profil und Einstellungen stehen im Kontoknopf, Papierkorb und Verlauf dort unter „Deine Daten“, und die Schnellsuche findet alle vier. Ein Bereich, den die Einstellung raeume nach Konto stellte, steht im Abschnitt seines Ausgangsraums, des ersten Raums seiner Deklaration, den das Konto hat (Christian, 08.10.2026, NV-261007-seitenleiste-schliff): Die Zuordnung zu Konto übergeht raeumeAufgeloest beim Lesen, die gespeicherte Einstellung bleibt. Dasselbe gilt im Blatt der Telefonleiste und in der Liste des Wechslers, die dieselben Abschnitte lesen, und in den Einstellungen „Bereiche“, die Konto nicht als Raum anbieten. Ein Bereich ohne Raum in seiner Deklaration steht dann in keinem |
| Verwaltung | ganz unten, nur wer den Admin-Bereich sieht: Vorhaben und Systemstand mit dem Bereich Admin, Instanz (der Abschnitt Instanzwerte) mit dem Recht, Vorgaben für alle zu setzen — jeder Eintrag nach seinem Recht wie im Verwaltungsmenü (N253). Ohne beide steht der Abschnitt nicht im Baum, auch nicht als leere Überschrift. Die Ziele baut der Kern mit mitAbschnitt(frontendPaths.ADMIN, …), ohne das Plugin zu laden (Grundsatz 43) |
Einträge sind Verweise ohne Raumpräfix (E10): Strg- und Mittelklick öffnen wie im Browser, Umschalt-Klick öffnet den Seitenblick (unten), ein gewöhnlicher Klick schreibt die Raumwahl und geht hin. Der Schirm, auf dem man steht, trägt aria-current="page" und seine Bereichsfarbe wie in der alten Zeile; Werkzeuge und Verwaltung tragen ihr eigenes Zeichen. Das Wort des aktiven Eintrags ist halbfett. Jedes Zeichen steht seit dem 10.10.2026 ohne Kästchen und 20 px groß, also geschliffen in seiner Bereichsfarbe; vorher war es 15 px in einem grauen Kästchen, der Strich in Schriftfarbe, und die Leiste las sich grau. Beim Zeigen liegt der ruhige Ton colors.ueberfahren darunter, nicht der Glaston. Jede Zeile der Liste ist 40 px hoch, eine Kachel 64 px. Eine Trennlinie zeigt, wo die festen Plätze enden und das Rollende beginnt. Auf /admin ohne Abschnitt ist das Vorhaben aktiv, wenn der Schirm es öffnet (mit dem Admin-Recht), sonst nichts.
Weiter unten (14.10.2026, F-261013-ipad-seitenleiste-ohne): Fasst die volle Leiste ihre Abschnitte nicht, steht an ihrem Fuß ein Knopf aus Stein mit dem Pfeil runter, der die Abschnitte nennt, die noch ganz oder zum Teil darunter stehen — „Weiter unten: Ablage, Verwaltung“ —, und mit einem Tipp eine Seite weiterrollt, eine Zeile Überlappung. Ganz unten verschwindet er. Anlass war das iPad im Querformat (1194 × 802): iOS zeigt keinen Rollbalken, und der ausblendende Rand allein sagte nicht, dass unter ihm noch LaTeX und die Verwaltung stehen. Die Zeichenleiste trägt ihn nicht; ihr Knopf „Alle Bereiche“ ist schon dieser eine Tipp. Mit --geraete ipad sieht /ansehen diese Größe.
Tour (W06): Jeder Bereichseintrag trägt data-tour="bereich:<id>" wie der Knopf der alten Zeile; den Rückfall data-tour="bereiche" trägt breit die Leiste, als Zeichenleiste der Knopf „Alle Bereiche“. Ist das Blatt offen, stehen die Bereichsmarken nur darin.
Breiten: Über 900 px die volle Leiste (layout.seitenleiste.breit, 240 px). Zwischen 600 und 900 px die Zeichenleiste (layout.seitenleiste.schmal, 64 px; Christians Wahl vom 07.10.2026): die Zeichen aller festen Plätze, rollbar, der Name als Hinweis rechts daneben und im aria-label (ein gemeinsamer Provider: nach dem ersten Hinweis kommen die nächsten ohne Wartezeit; auch „Alle Bereiche“ hat einen). Oben klappt der Knopf „Alle Bereiche“ die volle Leiste als Überlagerung auf (Dialog mit Fokusfalle, Feder aus federn.tsx); Esc, ein Klick daneben oder die Wahl eines Ziels schließen sie. Bis 600 px steht statt ihrer die Leiste unten (folgender Abschnitt). Einklappbar (24.10.2026, E-261024-seitenleiste, Rückmeldung 20e74824): Die volle Leiste hat oben einen Knopf „Seitenleiste einklappen“ und die Taste [; eingeklappt steht sie als Zeichenleiste (64 px), deren oberer Knopf „Seitenleiste ausklappen“ sie wieder öffnet, ohne Überlagerung. Der Stand liegt je Gerät in localStorage (denotato.seitenleiste.eingeklappt) und überlebt das Neuladen. Zeichen von Werkzeugen ohne eigene Farbe (die Verwaltung) tragen die Tinte des Themes, nicht die feste Bereichsfarbe.
Kopfleiste: Die Adresszeile nennt keinen Raum, auf jeder Breite gleich: Denotato › To-Dos, Denotato › Studium, auf der Übersicht Denotato › Heute (Punkt 1 der Entscheidung). Räume sind dort nur noch Filter (E10), den Raum Konto gibt es nicht mehr, und „Studium › Studium“ sagte dasselbe zweimal. Das Logo steht in der einzeiligen Leiste im Maß der früheren zweizeiligen (34 px, TopLogoBar.module.css); mit 44 px wuchs sie auf 52 px, und der Kranz stieß fast an die Oberkante (Sichtprüfung 07.10.2026). Der Stern am Seitentitel (E-261023-kopfleiste-telefon, 24.10.2026): In der schmalen Kopfleiste nahm der Anheften-Stern dem Seitennamen den Platz, „Lineare Algebra“ stand als „Lineare…“ da. Dort fehlt er jetzt; jeder Schirm, der einen Seitennamen meldet, stellt ihn an seinen Titel (Seitenkopf des Editors, Kopf der Tabelle), angeheftet wird wie zuvor unter dem gemeldeten Namen. Breit bleibt er in der Adresszeile (menus/shell/Seitenstern.tsx, Nachweis Seitenstern.test.tsx).
Ein Gerüst mit runder Innenecke (E-261013-runde-kanten-kopfleiste, 14.10.2026): Kopfleiste und Seitenleiste sind beide aus Stein (Guide §7.3); bis zum 14.10.2026 war die Kopfleiste aus Karton. Wo sie zusammenstoßen, setzt der Schirm mit einer Rundung lg an statt mit einem rechten Winkel — Rückmeldung „keine eckigen Kanten (besonders in der Topbar)“. Gezeichnet als Verlauf decoration.innenecke aus dem Theme an der Seitenleiste (::after), weil der Schirm unter dem Gerüst hindurchrollt und keine eigene Ecke hat. Ohne Seitenleiste (Telefon) gibt es keine Innenecke; dort ist die Adresszeile ohnehin eine Pille.
Ort: Die Leiste hängt über ein Portal an document.body, nicht im Schirmwechsel — dort glitte sie mit jedem Wechsel mit. Ihr Rollstand übersteht den Wechsel. Sie beginnt unter Kopfleiste und Band (--denotato-leistenhoehe, --denotato-bandhoehe) und reicht bis unten. Der Einzug am linken Rand (Kerbe im Querformat) kommt zur Breite dazu, statt von ihr abzugehen. Diese Breite samt Einzug setzt sie als --denotato-seitenbreite an die Wurzel und nimmt sie beim Aushängen zurück (config/layout.ts, SEITENVERSATZ); danach rücken die Rollfläche von GeneralMenu, die Eule, das Vermerkfach des Stundenplans und die Marke der Einfrierung ein, und Lösch-, Rücknahme-, Auswahl- und Timerleiste zentrieren im Inhalt statt im Fenster. Nachweise: Seitenleiste.test.tsx, festePlaetze.test.ts, TopLogoBar.test.tsx, Kontoknopf.test.tsx und die Schnellsuche („Die Wege des Kontos“).
Die Telefonleiste (08.10.2026, NV-261007-telefonleiste)
Angemeldet und bis 600 px steht unten eine Leiste der Bereiche an der Stelle der früheren Schnellaktionen, gleich hoch (REIHENHOEHE, 56 px, dazu der Abstand der Betriebssystemleiste); Burger und Schublade gibt es nicht (Entscheidung 2026-10-07-leiste-und-wechsel.md, Punkte 3 und 11; seit dem 09.10.2026 für jedes Konto, 2026-10-09-neue-navigation-immer.md; navbar/telefonleiste/Telefonleiste.tsx, gerendert aus App.tsx). Die Leiste selbst steht in LeisteUnten.tsx und kommt als eigenes Stück nach, erst wenn sie gebraucht wird; bis es da ist, steht an ihrer Stelle nichts. So bleibt die Seitenleiste, aus der sie die Abschnitte nimmt, aus dem Hauptbündel. Rollfläche, Eule, Rückmeldeknopf und die schwebenden Leisten halten am Telefon schon den Abstand der Leiste; nichts liegt unter ihr.
| Teil | Was es tut |
|---|---|
| Fünf Plätze | die ersten fünf der festen Plätze der Seitenleiste (useFestePlaetze, dieselbe Folge und dieselbe Einstellung der Instanz). Ein Bereich, den das Konto nicht hat, fehlt, und der nächste rückt nach (N149). Je Platz Zeichen (22 px) in der Bereichsfarbe über dem Namen (12 px); der Schirm, auf dem man steht, mit Fläche und Rand seines Bereichs und aria-current="page". Verweise ohne Raumpräfix wie in der Seitenleiste; ein Tipp schreibt die Raumwahl und geht hin. Lernen tritt ein (15.10.2026, KN-261015-leiste-lernen): Warten fällige Karten und steht Karteikarten nicht schon unter den fünf, nimmt es den fünften Platz, mit dem Wort „Lernen“, der Zahl als Perle am Zeichen und aria-label „Lernen — 7 fällig“; ohne fällige Karten oder ohne den Bereich bleibt die Folge, wie sie ist (leistenplaetze). Die Zahl holt die Leiste selbst, bei der Anmeldung und neu, wenn man die Karteikarten betritt oder verlässt; sie zählt vorerst nur fällige Wiederholungen (cardsDue) und steht im einen Haken useWartendeKarten, den auch die Schnellaktionen lesen — welche Zahl die eine ist, entscheidet KN-261015-lernen-ort dort |
| Griff: Strich und „Mehr“ | Christians Wahl „Strich + Pfeilknopf“ vom 08.10.2026 aus drei Entwürfen (verworfen: ein sechster Knopf „Alle“ mit Schublade hinter einer Haarlinie; ein Knopf mit dem Zeichen des Raums). Oben mittig auf der Leiste ein Griffstrich im Maß des Blatts (36 × 4 px, Guide §11.2), im Streifen über den Plätzen: nur ein Zeichen, dass man hochwischen kann, aria-hidden, kein eigenes Ziel. Rechts, wo vorher der Raumknopf stand, der Knopf „Mehr“ ohne Haarlinie: Zeichen mehr (22 px, Lesetinte) über dem Wort wie ein Platz, Zielfläche 44 × 44 (layout.zielflaeche), aria-haspopup="dialog", aria-expanded. Bis zum 15.10.2026 war es ein Pfeilknopf ohne Wort (hoch, aria-label „Alle Bereiche“); ein Pfeil sagte nicht, dass dahinter die übrigen Bereiche und die Suche liegen (KN-261015-leiste-lernen). Die fünf Plätze teilen sich den Rest, auf 390 px je 65 px, auf 320 px je 51 px. Ein Tipp auf „Mehr“ öffnet das Blatt; ebenso Hochwischen auf der Leiste — 72 px nach oben oder ein Schnipser, wie beim Wegwischen eines Blatts, nie vom linken Rand aus und nicht, wenn der Finger vor allem seitwärts ging. Ein Wischen, das auf einem Platz endet, öffnet ihn nicht; ein Klick ohne Zeiger — Tastatur, Vorleser — gilt immer. Die Grenzen stehen als reine Rechnung in telefonleiste/geste.ts mit Tabellenfällen |
| Blatt | ein Dialog an der Unterkante (role="dialog", Fokusfalle, Feder useUeberlagerung('unterkante')), oben ein Streifen der Seite frei. Im Kopf Griffstrich und Kreuz; darunter ein Suchfeld (seit 15.10.2026, KN-261015-leiste-lernen; „Bereiche oder überall suchen“, mit dem Fokus beim Öffnen): Tippen filtert die Bereiche ohne Rücksicht auf Groß- und Kleinschreibung, leere Abschnitte fallen weg, die Schnellaktionen treten zurück, und oben steht „Überall suchen: „…““ — sie oder Enter schließen das Blatt und öffnen die Schnellsuche mit dem Wort (SUCHE_RUF mit suche). Ohne Wort darunter die Schnellaktionen des gezeigten Raums, dieselben Knöpfe, die bis zum 09.10.2026 ohne den Schalter als Reihe unten standen (mit der Zahl fälliger Karten an „Lernen“ und der Suche); darunter, rollbar, alle Bereiche nach Raum und die Verwaltung wie in der Seitenleiste (Raumabschnitte), hier auch, was unten fest steht. Esc, das Kreuz, ein Tipp daneben, Wischen am Griff nach unten oder die Wahl eines Ziels schließen es; der Fokus geht an „Mehr“ zurück, auch wenn das Blatt mit Hochwischen aufging (useFokusfalle, ruecksprung). Im Nutzungsprotokoll tragen die fünf Plätze und die Bereiche im Blatt die Herkunft leiste, „Mehr“ und die Schnellaktionen keine. Ein Klick merkt seine Herkunft fünf Sekunden lang; so setzt eine Schnellaktion („Mehr“, dann Aktion) keine Herkunft. Ein Wischen, das als Klick auf einem Platz endet, nimmt zurück, was das Protokoll dafür gemerkt hat |
Eine Schnellaktion kostet zwei Tipps statt einen wie in der früheren Reihe (Punkt 11). Das Blatt „Weitere Aktionen“ der Reihe fehlt hier und mit ihm der Raumwechsel: Räume sind Filter (E10), und Punkt 11 nennt nur die Reihe. Was nicht in der Reihe des gezeigten Raums steht, findet die Schnellsuche meist als Befehl („To-Do anlegen“, „Lernen“, „Neues Dokument“, „Studienmaterial“, „Skills und Gewohnheiten“); den Lern-Timer und „Melden“ (Personen, „Lange nicht gemeldet“) findet sie nicht — offen in EINGANG.md. Tour (W06): „Mehr“ trägt data-tour="bereiche", jeder Platz data-tour="bereich:<id>"; ist das Blatt offen, stehen die Bereichsmarken nur darin. Abmelden und Profil stehen im Kontoknopf oben rechts. Nachweise: Telefonleiste.test.tsx, Telefonleiste.tor.test.tsx, geste.test.ts, TopLogoBar.test.tsx, Schnellaktionen.test.tsx.
Der Wechsler und die Kapsel (08.10.2026, NV-261007-wechsler)
Angemeldet wechselt man zwischen Bereichen wie mit Alt+Tab zwischen Fenstern (Entscheidung 2026-10-07-leiste-und-wechsel.md, Punkte 6 und 7). Ohne Sitzung ist keine Taste belegt und keine Kapsel da.
| Teil | Was es tut |
|---|---|
| Wechsler | Strg halten und die Leertaste tippen: Nach 150 ms erscheint eine Liste der Bereiche in einem Fenster (Modal, groß), der vorige Bereich ist gewählt. Jede weitere Leertaste geht eins weiter, Umschalt eins zurück (Umschalt+Leertaste ebenso, einmal), Loslassen von Strg öffnet den gewählten, Esc bricht ab. Bleibt die Leertaste unten, läuft die Wahl mit der Wiederholrate der Tastatur weiter wie bei Alt+Tab; eine wiederholte Strg+Leertaste nach Esc öffnet die Liste nicht wieder. Wer Strg+Leertaste nur tippt, springt ohne sichtbares Fenster in den vorigen Bereich. Zweimal kurz Umschalt (höchstens 400 ms dazwischen, auch in einem Eingabefeld; ein Klick oder Rollen dazwischen zählt nicht, denn Umschalt und Mausrad rollen waagerecht) öffnet dieselbe Liste stehend: Pfeile oder Leertaste wählen, Enter öffnet, Esc schließt — für den Mac, wo Strg+Leertaste die Eingabequelle wechselt, und für alle, die nicht halten wollen. Stehend ist das Fenster modal: Außer Tab kommt keine Taste bei der Seite dahinter an (eine Ziffer bewertet nicht die Karte im Lerndurchgang), und was der Browser mit ihr tut, bleibt ihm. Ein Klick auf eine Kachel öffnet sie. Jede andere Taste bei gehaltenem Strg (Strg+K, Strg+Z, Strg+C) bricht den Wechsler ab und geht durch, als gäbe es ihn nicht |
| Liste | die Bereiche und Werkzeuge der Seitenleiste ohne den Raum Konto und ohne die Verwaltung, ohne den Bereich, in dem man ist. Zuerst die zuletzt benutzten (leise mit „zuletzt“ markiert), dann die Folge der Leiste. Je Kachel Zeichen in der Bereichsfarbe und Name, auf einer Linie mit den Nachbarn: Die Zeile der Marke bleibt in jeder Kachel frei; darunter, was die Tasten tun. Eine listbox mit aria-activedescendant, die Wahl sagt eine Zeile für Vorleser an („To-Dos, 2 von 9“); beim Schließen geht der Fokus dorthin zurück, wo er war |
| Kapsel „zurück“ | Zeichen zurueck, das Zeichen des vorigen Bereichs in seiner Farbe und sein Name, als Pille (wechsler/Ruecksprung.tsx). Sie erscheint, sobald es einen vorigen Bereich gibt, und bleibt, solange es ihn gibt, auch auf „Heute“. Ihr kleines x, ein eigener Knopf neben dem Verweis (am Rechner 32 px breit, unter dem Finger 44 px), blendet sie bis zum nächsten Bereichswechsel aus, gemerkt nur im Speicher des Tabs wie der Verlauf (Christian, 08.10.2026). Am Rechner steht sie in der Kopfleiste rechts vor den Marken und dem Kontoknopf, mit Haarlinie wie die Wege unter „Verwandt“; in der schmalen Kopfleiste nur mit den Zeichen, der Name steht dann im Hinweis. Am Telefon schwebt sie als Glas mittig über der Leiste unten, zwischen Eule und Rückmeldeknopf. Sie ist ein Verweis: Ein Klick wechselt wie der Wechsler; was der Browser mit Verweisen tut, bleibt ihm — Strg- (am Mac Befehls-) und Mittelklick öffnen einen neuen Tab, Umschalt-Klick ein neues Fenster. Der Seitenblick (NV-261007-seitenblick) fängt Umschalt-Klick nur auf den Einträgen der Leisten ab; die Kapsel ist keiner. Zielfläche 44 px, aria-label „Zurück zu To-Dos“ |
Wohin gesprungen wird: an die Stelle, an der man den Bereich verlassen hat (Adresse samt Suchteil), sonst an seinen Anfang. Den Verlauf führt eine Schicht in App.tsx (wechsler/Bereichsverlauf.tsx), weil Wechsler und Kapsel ihn teilen und die Kopfleiste je Schirm neu entsteht. Er liegt nur im Speicher des Tabs wie der Verlauf der Adresszeile: Welche Bereiche ein Konto zuletzt offen hatte, bliebe im Browserspeicher nach dem Abmelden liegen (D29). Ein anderes Konto beginnt leer, auch ohne Abmelden dazwischen, etwa beim Imitieren. Die Übersicht ohne Bereich ändert ihn nicht.
Zusammenstöße: Der Lerndurchgang deckt mit der Leertaste auf, der Blockeditor macht aus # und Leertaste eine Überschrift; beide fragen nicht nach Strg. Der Wechsler hört deshalb in der Einfangphase am Fenster und hält nur an, was ihm gehört; keiner der beiden weiß von ihm. Die Liste kommt als eigenes Stück nach, erst beim ersten Öffnen (Wechsler.tsx als Tor, wie die Telefonleiste). Nachweise: tasten.test.ts, wechselliste.test.ts, Wechsler.test.tsx, Lerndurchgang.wechsler.test.tsx, tastatur.wechsler.test.tsx, Tastenhilfe.test.tsx.
Der Seitenblick (09.10.2026, NV-261007-seitenblick)
Umschalt+Klick auf einen Eintrag der Seitenleiste, am Telefon langes Drücken (500 ms, Finger oder Stift, nie die Maus) auf einen Platz der Leiste unten oder einen Bereich in ihrem Blatt, öffnet den Bereich als Blatt von rechts (navbar/seitenblick/): halb so breit wie das Fenster, mindestens 420 px, am Telefon bis auf einen Streifen links, in dem ein Tipp schließt. Im Kopf der Name des Bereichs, Ganz öffnen (geht mit der Adresse des Blatts hin) und das Kreuz. Esc, das Kreuz oder ein Klick daneben schließen; der Fokus geht an den Eintrag zurück (useFokusfalle). Der eigene Bereich bleibt darunter eingehängt und behält Eingaben und Rollstand.
Das Blatt hat einen eigenen Router. Was der Schirm darin navigiert, Suchparameter eingeschlossen, bleibt im Blatt; die Adresse des eigenen Bereichs ändert sich nicht. Im Blatt zeichnet der Rahmen eines Schirms (GeneralMenu) weder Kopf noch Leiste, und ein Blick im Blick geht nicht. Die Schirme sind dieselben wie die Routen (SEITENBLICKWEGE in App.tsx: Ereignisse, Briefkasten, Profil und alle aus dem Register); ein Ziel ohne Schirm öffnet wie gewohnt. Nachgesehen am 09.10.2026 in /ansehen-Bildern (Rechner 1440 px, Telefon 390 px): To-Dos, Kalender, Karteikarten und Dokumente stehen im halben Blatt brauchbar, weil die Schirme nach ihrer Breite umbrechen.
Abgrenzung: Umschalt+Klick bleibt außerhalb der Leisten beim Browser, auch auf der Kapsel „zurück“ und in der Adresszeile. Das Kontextmenü des Browsers für Verweise unterdrückt der lange Druck nur auf den Einträgen der Leisten (dazu -webkit-touch-callout: none dort). Hebt der Finger nach dem langen Druck ab, schluckt der Seitenblick den einen Klick, den der Browser danach an die Stelle schickt — dort liegt jetzt das Blatt. Das Blatt lädt erst beim ersten Öffnen nach (Seitenblickblatt.tsx). Nachweise: Seitenblick.test.tsx, Seitenleiste.test.tsx.
Der Rechtsklick (16.10.2026, Q-261015-rechtsklick-aktionen)
Christian am 15.10.2026: „Im Browser sollte die Rechtsklick-Funktionalität überall sinnvoll überschrieben sein. Beispielsweise RMB auf ‚Studium‘ öffnet schnelle Aktionen für das Studium.“ Ein Menü hält der KontextmenueGeber (components/kontextmenue/) für die ganze Anwendung; jede Fläche nennt im onContextMenu nur ihre Einträge. Es steht am Zeiger, auf Glas mit der Überlagerungsfeder wie jedes Aufklappmenü, und schließt mit Esc oder einem Klick daneben; der Fokus geht an die Fläche zurück.
| Wo | Was es anbietet |
|---|---|
| Eintrag der Seitenleiste | „Öffnen“, „In neuem Tab öffnen“, darunter unter „Neu anlegen“, was dieser Bereich anlegt — dieselben Angebote wie der Neu-Knopf (anlegen der Deklaration) |
| Überschrift eines Raums („Studium“) | die Schnellaktionen des Raums, dieselben wie die Reihe am Telefon (§5) ohne die Suche, die in jedem Raum steht, darunter, was seine Bereiche anlegen |
| Tabellenzeile, Karte der Tafel (§6) | „Öffnen“, wenn die Zeile sich öffnen lässt, darunter ihre Knöpfe aus der letzten Spalte; der Eintrag klickt den Knopf (kontextmenue/knoepfe.ts) |
Wo nichts passt, bleibt das Menü des Browsers: auf einer Fläche ohne Einträge, in einem Feld, über markiertem Text und mit gedrückter Umschalttaste — so bleiben Einfügen, Kopieren, „Link in neuem Tab“ und die Rechtschreibung erreichbar. Am Telefon bleibt der lange Druck auf den Leisteneinträgen beim Seitenblick. Nachweis: Kontextmenue.test.tsx.
2. Das Bereichsregister
Was jede Seite über sich selbst weiß. Die Deklaration gewinnt (packages/plugins/src/<id>/plugin.ts); packages/plugins/src/register.ts sammelt sie ein, und frontend/src/bereiche/register.ts erzeugt sich daraus (export const REGISTER = BEREICHE).
Bis zum 17.09.2026 gab es hier zwei Wahrheiten — dieselben Felder ein zweites Mal im Frontend, gezeichnet wurde die zweite und gelesen die erste von niemandem. Beim Umzug von tasks und materials sind sie prompt auseinandergelaufen: eine grüne Farbe statt der gelben, ein anderes Zimmer. Der Nachweis, der sie damals aneinanderhielt (zweiWahrheiten.test.ts), ist mit Block 1.2 überflüssig geworden und liegt seitdem in packages/frontend/archiv/ (Grundsatz 55); an seiner Stelle steht bereiche/eineWahrheit.test.ts. Wer die Reihenfolge, die Farbe oder das Zimmer eines Bereichs sucht, liest die Deklaration — hier steht sie abgeschrieben, damit man nicht jede Deklaration einzeln öffnen muss.
Siebzehn Bereiche, gelesen am 22.09.2026, in der Reihenfolge der Navigation:
| Bereich | Route | Merkmal | Zimmer | Laut | Farbe |
|---|---|---|---|---|---|
| Übersicht | /dashboard | — | Plattform | 3 | Anwendungsfarbe |
| Aufgaben | /tasks | TASKS | Werkbank | 3 | #ffc400 |
| Studium | /study | STUDY | Lesesaal | 3 | #4d9bff |
| Stundenplan | /stundenplan | STUNDENPLAN | Uhrenraum | 2 | #3ddc84 |
| Dokumente | /documents | DOCUMENTS | Archiv | 2 | #00b8a9 |
| Karteikarten | /flashcards | FLASHCARDS | Zettelkasten | 4 | #ff8a3d |
| Fortschritt | /game | GAMIFICATION | Kuppel | 5 | #ef5da8 |
| Personen | /people | PEOPLE | Salon | 3 | #c4573a |
| Gedächtnis | /memories | MEMORIES | Gewölbe | 2 | #b08968 |
| Kalender | /calendar | EVENTS | Uhrenraum | 3 | #7f8cf5 |
| Moodle | /moodle | MOODLE | Pforte | 2 | #9aa5b8 |
| Leben | /life | — | Garten | 4 | #7bc86c |
| Einstellungen | /settings | — | Maschinenraum | 1 | #8f8a99 |
| Tutor | /tutor | STUDY | Lesesaal (unter Studium) | 3 | erbt |
| Material | /material | STUDY | Lesesaal (unter Studium) | 2 | erbt |
| Noten | /noten | STUDY | Lesesaal (unter Studium) | 2 | erbt |
| Verwaltung | /admin | ADMIN | Maschinenraum | 1 | #6b7a8f |
STUDY heißt bei Tutor, Material und Noten nicht „der Knoten des Studiums". Jeder der drei hat seinen eigenen Knoten (gold.tutor, gold.materials, gold.noten, Feld rechtepfad der Deklaration), und nach dem fragen Leiste, Wege und rechte_baum (§1, N149). Das Merkmal sagt nur, woraus der Baum diesen Knoten ableitet, solange es keinen eigenen Grant gibt — und an welchem Schalter er hängt: Wer das Studium ausschaltet, schaltet die drei mit aus. Für timer, der keinen Schirm hat, galt das bis zum 27.09.2026 ebenso; seitdem trägt er ein eigenes Merkmal TIMER mit eigenem Schalter (N328, Was fehlt, Punkt 43) — wer das Studium ausschaltet, behält den Timer.
Zwei Plätze in dieser Liste sind eine Entscheidung und kein Zufall: Der Stundenplan steht zwischen Studium und Dokumenten, die Verwaltung ganz am Ende (W11, begründet in register.ts) — sie gehört nicht zur Arbeit, sondern zur Arbeit an der Arbeit.
Und manche Bereiche haben gar keinen Schirm — am 23.09.2026 schlaf, timer (NB06) und rueckblick (NB02). Sie tragen route: null und fallen damit aus dieser Tabelle heraus, obwohl sie Plugins wie alle anderen sind. Sie stehen im Register, nicht in der Leiste; bedient werden sie vom MCP-Server.
Lautstärke ist Christians Skala von 1 (Notion: still) bis 5 (Duolingo: laut) und steuert, wie viel Bewegung und Zeichen ein Schirm zeigt.
3. Der Schirmaufbau (MenuScreen)
Jeder Bereichsschirm hat dieselbe Folge, und sie ist Teil der Zusage:
Kopf → Abschnitte → Anlegen → Ansichten → Fehler → InhaltErst wo man ist, dann was man hinzufügen kann, dann wie man das Vorhandene ansieht.
Der Abstand unter der Leiste steht an einer Stelle (23.09.2026): Die Spalte in GeneralMenu hält oben 16 px frei, auf jedem Schirm. MenuLayout hielt dieselben 16 px bis zum 23.09.2026 noch einmal, und jeder Bereichsschirm begann damit doppelt so tief wie die Übersicht. Christian sah „zu viel Abstand“ zwischen Leiste und Inhalt. Jetzt hält MenuLayout nur noch unten Abstand (16 px, am Telefon 8). Nachweis: Leistenabstand.test.tsx.
| Teil | Beschreibung |
|---|---|
| Zimmer | Ein feines Motiv im Kopf — der Ort richtet das Design leicht, nicht als Tapete. Der Zimmername („Werkbank") stand bis zum 10.10.2026 als Vorspann über dem Titel; der Lesesaal setzt den Titel allein (ES-261009). Im Hellen in einer dunkleren Fassung der Bereichsfarbe (E14, N324, 27.09.2026): gleicher Farbton, so dunkel, dass Wort und Motiv auf dem Himmel dahinter 3 : 1 halten — auf dem mit Wolken und auf dem blanken dazwischen (E26, 29.09.2026); vorher maß „Werkbank" auf dem grauen Tageshimmel 1,46 : 1. Im Dunklen die Bereichsfarbe selbst (vorspannfarbe in theme/vorspannfarbe.ts, Nachweis vorspannfarbe.test.ts) |
| Titel | Der Bereichsname |
| Suchfeld | Filtert die gezeigten Zeilen. Fehlt es, ist das eine Aussage: „Fortschritt" zeigt Bäume, keine Tabelle — ein Suchfeld, das nichts filtert, wäre ein Versprechen, das der Schirm nicht hält. Ein Schirm darf es deshalb auch je Ansicht weglassen (/admin zeigt es nur, wo die Suche wirkt). Und über einem ganz leeren Bereich (N318, 26.09.2026): Reicht der Schirm leer herein, fehlt das Feld, solange nichts eingetippt ist; die Reiter bleiben. Gemeint ist der Bereich, nicht die Ansicht — „Fällig" ohne Fälliges behält sein Feld (heute: /tasks). Am Telefon eine Zeile hoch (seit 22.09.2026): Der Kopf steht dort als Spalte, und das flex: 1 des Feldes wirkte in der Höhe — es war 200 px hoch. Jetzt flex: 0 0 auto und mindestens so hoch wie die Zielfläche (44 px); am Rechner unverändert |
| Abschnitte | Erste Reiterreihe (z. B. Studium: Module / Themen / Prüfungen). Der aktive steht in der Adresse (?a=<kennung>) und nur dort (BE06, 21.09.2026 — siehe unten). Er trägt seit dem 19.09.2026 aria-current="page" — vorher war er nur farbig markiert, und wer den Schirm vorgelesen bekommt, hörte im Studium sieben gleichwertige Knöpfe. Ein Abschnitt darf ein Zeichen tragen (N132, 22.09.2026): zeichen an der Reiterdefinition, ein Name aus der Registry, steht 16 px groß links vom Wort, in der Farbe des Bereichs; der Name des Knopfes bleibt das Wort (Guide §7.3). Ohne zeichen sieht der Reiter aus wie bisher — ein Schirm gibt es allen Reitern einer Reihe oder keinem. Heute tragen es die Abschnitte von /admin |
| Anlegefach | Das Formular zum Hinzufügen, aufklappbar. Der Knopf („+ Neu", „+ Termin"; ohne eigenes Wort heißt er „Neu") steht am rechten Ende der Ansichtsreiter, in derselben Reihe (N130, 22.09.2026 — vorher nahm er eine eigene Reihe darüber ein); das Formular klappt unter dieser Reihe auf. Die Reiter nehmen den übrigen Platz und rollen am Telefon in ihm, der Knopf schrumpft nicht und bleibt sichtbar. Hat ein Schirm keine Ansichtsreiter, steht der Knopf allein am rechten Ende. Unter pointer: coarse ist er so hoch wie die Zielfläche (44 px, Guide §16.1). ?neu in der Adresse klappt es von selbst auf — so kommen die Schnellaktionen und der Neu-Knopf dorthin —, und zwar jedes neue ?neu, auch auf dem Schirm, der schon dasteht (vorher nur beim ersten Bauen: wer im Kalender „Neu anlegen“ → „Termin“ wählte, sah das Fach zu). Beim Aufklappen steht der Zeiger im ersten Feld (RL02), auch wenn das Formular erst nach dem Laden des Schirms erscheint oder das Fach schon offen war (F-261005-fokus-neuer-termin: über „Neu anlegen“ → „Termin“ stand er vorher außerhalb des Formulars). Feldarten: Text · Zahl · Datum · Auswahl · Häkchen · Datei (legt in Denotatos eigener Ablage ab und merkt sich die Kennung). Datum und Auswahl klappen über das Fach hinaus auf (F32, 22.09.2026): das Fach beschneidet, was darin liegt, damit die Höhenanimation nicht überläuft — beide Blätter hängen deshalb am Seitenkörper und stehen über dem Fach, statt an seiner Unterkante abgeschnitten zu werden |
| Ansichtsreiter | Zweite Reiterreihe: dieselben Daten, andere Spalten und Filter. Seit dem 17.09.2026 steht die Wahl in der Adresse (?v=<kennung>) — damit lässt sich eine Ansicht verlinken, mit einem Lesezeichen versehen und von einer Schnellaktion ansteuern. Die erste Ansicht ist die Vorgabe und braucht keinen Eintrag. Auch hier ein freiwilliges zeichen (N132, 22.09.2026), wie bei den Abschnitten; /admin zeigt so die Form jeder Ansicht (Übersicht, Kacheln, Tafel, Sortieren, Baum). Am Telefon zeigen beide Reiterreihen, dass sie weitergehen (F69, 23.09.2026): Sie rollen quer, und wo eine über ihren sichtbaren Teil hinausreicht, blendet ihr Rand auf dieser Seite 32 px weit aus — eine Maske und kein aufgemalter Verlauf, sie braucht keine Farbe und stimmt in jedem Schema. Der aktive Reiter rollt aus dem Rand heraus in Sicht. Eine Reihe, die umbricht oder hineinpasst, bleibt unberührt (Reiterleiste in MenuShell.tsx, Reiterrand.test.tsx). Seit N400 (28.09.2026) stehen die Ansichten als Segmente in einer Kapsel: Rahmen und Kartongrund um alle, das gewählte Segment mit Fläche und Rand des Bereichs, zwischen zwei nicht gewählten ein Trenner. So heben sie sich von den Abschnitten darüber ab, die einzelne Reiter bleiben. Die Kapsel bricht nie um; passt sie nicht, rollt sie als Ganzes mit demselben Rand (Segmentkapsel, Segmente.test.tsx) |
| Fehlerzeile | Ein Satz, wenn die letzte Abfrage scheiterte |
Am Anfang: die Bestätigungsmail (10.10.2026, D-261008-registrierung-gleich)
Solange die Adresse am Konto unbestätigt ist, steht über dem Inhalt jedes Schirms eine Zeile im Hinweiston: „Die Bestätigungsmail an … ist unterwegs.“ mit dem Verweis „Erneut senden oder Adresse ändern“ auf /settings?a=konto&g=adresse. Ohne Anmeldung, ohne Adresse (ein Gast) und mit bestätigter Adresse steht nichts da. Wie „Verwandt“ gehört sie zur Spalte in GeneralMenu, nicht zum Seitenblick (components/auth/Mailhinweis.tsx). Gefragt wird /auth/mail-stand einmal je Sitzungskennung, nicht bei jedem Schirmwechsel; eine Bestätigung in einem anderen Reiter sieht die Zeile erst nach dem Neuladen (anmeldung.md, „Was fehlt“, Punkt 30). Nachweis: Mailhinweis.test.tsx.
Am Ende: „Verwandt“ (NV07, N460, N467, 01.10.2026)
Unter dem Inhalt jedes Schirms steht ein Abschnitt „Verwandt“ mit Wegen zu den Nachbarn des Bereichs — eine Reihe Kapseln, je Nachbar Zeichen und Name, mit festem Rand wie der Raumhinweis der Leiste (er führt woandershin und bewegt nichts, Guide §15.2), mindestens 44 px hoch. Über ihm trennt eine feine Linie den Inhalt ab. Er gehört nicht zum MenuScreen, sondern zur Spalte in GeneralMenu: So bekommt ihn auch ein Schirm mit eigenem Aufbau wie der Kalender, und keiner kann ihn vergessen (components/zimmer/Verwandt.tsx).
Erst beim Rollen (seit 15.10.2026, S-261015-verwandt-unten). Christian am 14.10.2026 unter Studium › Heute: „Das ‚Verwandt‘ unten ist zu ablenkend. Mach das am besten sodass man es erst sieht wenn man runter scrollt, auch wenn auf dem Screen noch Platz wäre.“ Steht „Verwandt“ unter einem Schirm, ist der Inhalt darüber mindestens so hoch wie die Rollfläche (Inhalt in GeneralMenu, erkannt an data-verwandt über :has()); der Abschnitt beginnt damit unter dem unteren Rand und kommt erst beim Herunterrollen ins Bild. Ohne Nachbarn bleibt der Inhalt so hoch, wie er ist, damit nichts ins Leere rollt; ein Browser ohne :has() zeigt ihn wie vorher. Das gilt auf jedem Schirm, nicht nur im Studium. Nachweis: GeneralMenu.test.tsx.
- Wer Nachbar ist, nennt das Feld
verwandtder Deklaration (Plugindeklarationinplugins/src/typen.ts): Bereiche und die Werkzeuge „Mit mir geteilt“, „Papierkorb“, „Verlauf“ und „Profil“. Ein Paar steht einmal und gilt in beide Richtungen (N467) — der Abschnitt zeigt erst, was der Bereich nennt, dann, wer ihn nennt, in der Folge des Registers. Die Einstellungverwandtordnet je Bereich um und blendet aus (einstellungen.md). - Was das Konto nicht hat, steht in keinem Raum und erscheint nicht (N149).
- Ohne Raum. Die Kapsel trägt weder Zeichen noch Namen eines Raums, und vorgelesen wird nur der Nachbar: Räume sind Filter (E10), und der Hinweis sagte nichts mehr (NV-261007-seitenleiste-schliff). Der Klick führt ohne Präfix hin und schreibt den Raum als Wahl; ein Klick in einen neuen Reiter lässt die Wahl. Von selbst wechselt der Raum nie (N388, N390). Bis zum 09.10.2026 trug die Kapsel ohne den Schalter der neuen Navigation Zeichen und Namen eines fremden Raums („Personen · Alltag“) und führte mit dessen Präfix hin (NV10).
- Wo er fehlt: auf der Übersicht und auf Wegen ohne Bereich, und wo ein Bereich keine Nachbarn hat — heute LaTeX und der Verlauf. Eine Überschrift über nichts stünde dort leer (Grundsatz 75).
- Wege zwischen Einträgen (diese Karte gehört zu diesem Fach) zeigt der Abschnitt nicht; sie stehen in NV15.
Nachweise: bereiche/verwandt.test.ts (beide Richtungen, Rechte, Einstellung, Raum; im Register steht jedes Paar nur einmal und nennt nur Bekanntes) und components/zimmer/Verwandt.test.tsx. Angesehen am 01.10.2026 auf /studium/study, /studium/calendar und /alltag/tasks, Rechner und Telefon, hell und dunkel; am Telefon liegt das Schirmende nach dem Rollen frei von Eule und Rückmeldeknopf.
Die Breite hält beim Fenster (22.09.2026)
.App ist ein Raster mit einer Spalte, und sie trägt seit dem 22.09.2026 ein Maß: grid-template-columns: minmax(0, 1fr). Ohne Maß ist die Spalte auto und wächst mit ihrem breitesten Kind — ein langer Pfad, eine Knopfreihe ohne Umbruch, und der ganze Schirm war am Telefon breiter als das Fenster. Auf /admin standen die Pfeile der Bahn bei x = 770 auf einem 390 px breiten Schirm, also außerhalb; gemessen danach bei x = 365. Was wirklich breiter ist als das Fenster (eine Tafel, eine Tabelle), rollt in seinem eigenen Kasten.
Der Reiter steht in der Adresse, nicht daneben (BE06, 21.09.2026)
Welcher Abschnitt offen ist, sagt ?a= — und sonst nichts. Der Schirm hält keinen zweiten Stand davon; er liest den Reiter bei jedem Bild aus der Adresse. Steht dort keine gültige Kennung, ist der erste Abschnitt offen.
Vorher stand er zweimal — als Zustand im Schirm und in der Adresse —, und abgeglichen wurde nur in eine Richtung: nennt die Adresse einen gültigen Abschnitt, übernimm ihn. Nennt sie keinen, blieb der alte Reiter stehen. Genau dorthin führen drei Wege in Denotato: der Bereichseintrag in der Leiste, die Schnellaktion „Lernen" und ihr Befehl in der Schnellsuche — alle drei zeigen auf den Schirm selbst. Wer schon dort stand, wechselte die Route nicht, der Schirm wurde nicht neu gebaut, die Adresse verlor ihren Abschnitt, und der Reiter blieb, wo er war. Danach behaupteten Adresse und Schirm Verschiedenes, und das Neuladen zeigte einen anderen Abschnitt als der hervorgehobene Reiter.
Daraus folgt eine Regel für jeden Verweis: Wer einen Abschnitt meint, nennt ihn — mitAbschnitt(weg, kennung) in config/frontendPaths.ts, nicht eine von Hand zusammengeklebte Adresse. Ein Verweis ohne ?a= führt auf den ersten Reiter, und zwar verlässlich; das ist besser als „mal dorthin, mal dahin", aber es ist selten das, was die Beschriftung verspricht.
Die Ansicht folgt derselben Regel, wo sie in der Adresse steht. Gibt ein Schirm Ansichtskennungen mit, kommt ?v= aus der Adresse; gibt er keine mit, ist die Ansicht ein Zustand im Schirm — was die Adresse nicht trägt, kann mit ihr auch nicht auseinanderlaufen. Ein Abschnittswechsel setzt sie in beiden Fällen auf die erste zurück, auch wenn er von außen kommt.
Die Folge der Reiter stellt die Instanz (OE10, N500, 03.10.2026)
Abschnitte und Ansichten jedes Schirms lassen sich ordnen und ausblenden — nicht je Konto, sondern für alle: Der Schlüssel oberflaeche.reiter hat die Reichweite NUR_INSTANZ (N398) und trägt alle Folgen in einer Karte, je Folge eine Anordnung nach gestaltung/einstellungen.md §10. Die Abschnittsfolge heißt wie der Schirm (study), die Ansichten eines Abschnitts heißen <schirm>/<abschnitt> (study/modules), ein Schirm ohne Abschnitte nennt seine Ansichten beim Schirmnamen (tasks). Die Kategoriespalten von /settings und /admin sind deren Abschnittsfolge; die Ansichten unter /admin heißen nach der Kategorie (admin/vorhaben). Leer heißt wie eingebaut, ein neuer Reiter steht hinter seinem eingebauten Vorgänger, eine unbekannte Kennung fällt weg. Drei Folgen gehören keinem Schirm, sondern der Leiste: seitenleiste ordnet die festen Plätze der Seitenleiste (§1, NV-261007-seitenleiste), leiste/konto das Kontomenü und leiste/adresse die Knöpfe der Adresszeile (OE06). Der Bearbeitungsmodus der Schirme bietet sie nicht an; ihr Editor ist „Leiste bearbeiten“ im Kontomenü (§1).
„Bearbeiten“ steht im Kopf, neben dem Suchfeld, und nur für Konten mit dem Recht settings.global_default. Der Knopf öffnet den Bearbeitungsmodus (Style-Guide §15.2) mit dem Balken „Reiter · <Schirm>“: Die Schicht ist fest „Für alle“ (gesperrt, mit Grund), jede Änderung ist ein Entwurf, und erst „Übernehmen“ schreibt. An die Stelle beider Reiterreihen treten gestrichelte Plätze mit Griff und Stellenzahl; ein Platz lässt sich ziehen oder mit „Früher“, „Später“ und „Ausblenden“ bewegen. Ein Klick auf einen Abschnitt wählt ihn und öffnet ihn zugleich, damit seine Ansichten darunter erscheinen. „Zurücksetzen“ erscheint nur, wenn der Schirm eigene Folgen hat, und setzt sie alle auf eingebaut.
Was nicht ausgeblendet werden darf, ist gesperrt und sagt warum: der letzte sichtbare Reiter einer Reihe („sonst hätte der Schirm keinen Inhalt“) und ein Reiter, dem der Schirm ein schloss mitgibt. Ein ausgeblendeter Reiter, auf dem man stand — aus einem Lesezeichen oder einem Verweis —, weicht auf den ersten sichtbaren aus, und bis dahin zeichnet der Schirm keinen Inhalt. Die Ansicht bleibt intern die Stelle in der eingebauten Folge; MenuScreen übersetzt zwischen gezeigter und eingebauter, deshalb musste kein Schirm seine Ansichten umbauen (components/bearbeiten/reiterfolge.tsx, Nachweis Reiterfolge.test.tsx).
4. Die Schnellsuche (Strg+K)
Zwei Zustände, und der erste ist der wichtigere:
- leer — die Bereiche, die dieser Nutzer hat, plus die zuletzt benutzten Einträge. Damit ist sie auch der schnellste Weg irgendwohin, nicht nur zu etwas.
- getippt — Treffer aus allen Bereichen, nach Art gruppiert.
Die Suche im Text folgt der Kontosprache (seit 10.10.2026, VA-261010-suche-kontosprache): Ein deutsches Konto stemmt Wörter nach deutschen Regeln wie bisher, ein englisches nach englischen („running“ findet „run“), jede andere Sprache ohne Stemming. Das gilt für die Texte der Dokumente und des Wikis, für „Frag das Wiki“ und für die Quellentexte der Materialien; die Titelsuche bleibt, wie sie war.
Angeheftet steht ganz oben (seit 28.09.2026, E25, N405), noch vor den Befehlen: im leeren Zustand alle Seiten, die der Stern der Adresszeile angeheftet hat, beim Tippen die, deren Name passt. Unter „Zuletzt" fehlen sie dann, damit keine Seite zweimal dasteht.
Am 22.09.2026 wurden zwanzig Arten durchsucht, in einundzwanzig Abfragen: Dokument (Titel und Text — das ist die eine Art, die zweimal gefragt wird), Semester, Modul, Thema, Kategorie, Prüfung, Karteikarte, Aufgabe, Mitschrift, Arbeit, Quelle, Projekt, To-Do, Gedächtnis, Person, Ereignis, Tagebuch, Skill, Quest — und seit dem 17.09.2026 Interesse.
(Hier stand bis zum 22.09.2026 „einundzwanzig Arten": die Überschrift zählte die Abfragen, die Aufzählung die Arten. Und daneben „mit 846 Zeilen die größte Tabelle in Denotato" — das galt auf dem Pi am 17.09.2026; study.interests hat auf dem Server null Zeilen, und keine Tabelle dieser Datenbank kommt in die Nähe von 846. Eine Zeilenzahl ohne den Rechner daneben ist keine Aussage.)
Die Gruppenköpfe kommen aus der Antwort des Servers — art je Treffer, und es ist die einzige Stelle in Denotato, an der eine Überschrift aus einer Serverzeichenkette entsteht. Seit dem 22.09.2026 ist art ein Schlüssel und kein Text: components/search/gruppen.ts macht daraus den deutschen Satz, und t(...) übersetzt ihn wie jeden anderen. Vorher stand über den Treffern aus dem Gedächtnis „GEDAECHTNIS" — ohne Umlaut, weil eine Kennung im Quelltext keinen trägt (Grundsatz 1) —, und auf einer englischen Oberfläche standen deutsche Überschriften über englischen Befehlen. Geändert wurde die Oberfläche und nicht der Server: dieselbe Antwort liest der MCP-Server, und ein Feld, das Kennung und Überschrift ist, bricht beim nächsten Leser wieder.
Was im Papierkorb liegt oder ruht, findet sie nicht (seit 24.09.2026, F82): keine Seite im Papierkorb, weder über den Titel — eigene wie geteilte — noch über den Text, und keine Karteikarte, die ruht, weil ihre Seite im Papierkorb liegt oder ihr Block im Editor gelöscht ist (F77). Bis dahin fand sie beides und führte auf eine Seite, die der Editor als gelöscht zeigt. Seit dem 05.10.2026 gilt das auch für Personen, Ereignisse, Tagebuch, Gedächtnis, Quellen und Kalenderkategorien; bis dahin fand sie diese im Papierkorb weiter (Gegenprüfung von KI73).
Das Wiki findet sie seit dem 27.09.2026 (WI11), wie die Dokumente über Titel und Text: „Wiki“ für den Titel, mit der Seitenart als zweiter Zeile, und „Im Wiki“ für den Text, mit dem Satz, in dem das Wort steht — nicht dem Anfang des Blocks, der bei einem langen Absatz nichts darüber sagt, warum er getroffen wurde. Beide führen nach /wiki/<Kennung>. Eine Admin-Seite trifft nur, wer im Wiki schreiben darf; die Regel ist dieselbe wie beim Lesen (wiki.md). Bis dahin fand die Suche keine Wiki-Seite, weil jede Quelle nach dem Eigentümer fragte und eine Wiki-Seite keinen hat.
Sie vergleicht wortweise (seit 05.10.2026, KI73, N519). Leerraum, Bindestrich und Unterstrich trennen die Eingabe in höchstens acht Wörter. Jedes Wort muss im Titel stehen, in beliebiger Reihenfolge. Der Titel wird dabei ohne Trenner gelesen: „Mathe-Warmup“ trifft „Mathe Warm-up“. % und _ sind gewöhnliche Zeichen. Oben steht weiter, wer genau passt, dann wer so anfängt. Vorher verglich sie die ganze Phrase; „Warmup Mathe“ fand nichts.
Vier Arten kamen am selben Tag dazu, jede nur mit ihrem Bereich:
- Moodle-Kurs — aus den gespeicherten Zuordnungen (Modul, Semester oder lebende Kalenderkategorie), ohne Ruf an Moodle. Die Kennung ist die Kursnummer, der Titel das zugeordnete Modul, sonst „Moodle-Kurs 4711“: Den Kurstitel speichert Denotato nicht. Führt zu
/moodle?a=kurse. - Kalenderkategorie — die des eigenen Kalenders, mit dem Kalender draußen als zweiter Zeile. „Kategorie“ bleibt die des Studiums.
- Lesepfad — ohne die im Papierkorb, nach
/wiki/pfade/<Kennung>. Es gilt die Regel der Startseite des Wikis: Wer dort schreibt, findet jeden Pfad; ein Leser nur offene mit mindestens einer lesbaren Seite. - Persönlichkeit — nur, wenn auch der Bereich Personen an ist, denn der Treffer öffnet dessen Abschnitt Persönlichkeiten. Der Kopf trägt den Umlaut aus
gruppen.ts, wie „Gedächtnis“.
LaTeX-Texte findet sie seit dem 10.10.2026 (LX20), wie die Dokumente über Titel und Text. „LaTeX-Text“ für den Titel führt in den Editor; „Im LaTeX-Text“ für den Text zeigt die Stelle als zweite Zeile — bei einer anderen Datei als der Hauptdatei mit deren Pfad davor — und öffnet diese Datei an der Zeile (?datei=…&zeile=…). Befehle und Präambel stören nicht: Gelesen wird nur, was gesetzt würde, ohne Kommentare, Befehlsnamen und die Argumente von Namen wie \label, \ref oder \usepackage; was in \section{…} oder \emph{…} steht, ist Text (@shared/handlers/latex/latexsuche.ts). Finden darf, wer den Text lesen darf — der Besitzer, wer eine Freigabe hat, und wer ein Dokument lesen darf, das ihn einbindet (N425); im Papierkorb niemand. Je Text erscheint ein Treffer, und die Datenbank sucht nur grob vor: Von höchstens zwanzig Dateien, in denen jedes Wort irgendwo steht, prüft der Server, ob es im Text steht.
verify:search prüft jede neue Art gegen ein zweites Konto; verify:tempo maß /api/search am 05.10.2026 mit p90 100 ms auf einer Wegwerf-Datenbank in der Cloud, nicht auf dem CX33.
Die zweite Zeile eines Treffers „Im Dokument“ ersetzte bis zum selben Tag jedes s durch ein Leerzeichen („Die Verwandlungen de Zwergpinguin ind“): Das Muster E'\s+' ist in Postgres ein schlichtes s. Der Nachweis prüfte nur ein Wort ohne s.
Die Rangfolge hat drei Stufen: genau dieser Titel, fängt damit an, steht irgendwo darin — und Text im Dokument dahinter. Die erste Stufe fehlte bis zum 17.09.: die genaue Übereinstimmung teilte sich den ersten Rang mit jedem Anfangstreffer, und darunter entschied der Name des Bereichs alphabetisch. Dass der richtige Treffer oben stand, war Zufall — er flog auf, als „Interesse" dazukam und sich vor „Thema" schob.
Jede Zeile trägt das Zeichen ihres Ziels (23.09.2026, N134). Links vor dem Titel steht das Zeichen des Bereichs, in den die Zeile führt — 14 px, still (aria-hidden), in der Farbe dieses Bereichs; das Wort der Herkunft rechts bleibt neutral und bleibt stehen — außer bei Befehlen (E33) und Angeheftetem (E27, 13.10.2026), wo es nur den Gruppenkopf darüber wiederholte. Gelesen wird es aus dem Weg der Zeile (bereichFuerRoute, Abfrage und Anker abgeschnitten) und gezeichnet über BereichGrenze — dieselbe Deklaration, aus der die Leiste zeichnet, samt eigener Überlagerung des Nutzers. Das gilt für die Bereiche im leeren Zustand, für „Zuletzt" und für jeden Treffer: ein Modul trägt die Kappe, eine Mitschrift den Stapel, ein To-Do das Kästchen mit Haken. Der Kern nennt dabei keinen Bereich beim Namen (Grundsatz 43). Die Befehle bleiben ohne Zeichen: Die Registry hat keines, das „Befehl" meint, und nur ein Teil von ihnen hat überhaupt ein Ziel; der Platz bleibt frei, sobald eine Zeile der Liste ein Zeichen trägt, damit alle Titel auf einer Achse stehen (Christian am 13.10.2026, E-261013-funde-blick-teilen). Trägt keine eines, rückt auch keine ein. Die Gruppenköpfe tragen keines — das Zeichen steht an der Zeile, die beim Blättern im Bild bleibt. Die Zuordnung ist Daten (KERNZEICHEN in Schnellsuche.tsx) mit Nachweis in Schnellsuche.test.tsx. Die Pfeile der Fußzeile sind Tastenmarken und kommen weiter aus der Schrift, wie die Registry es für Tasten vorsieht.
Ein Treffer, der woanders zu Hause ist, nennt seinen Raum (seit 29.09.2026, NV08 Schnitt 5, N388, N390). Die Suche fragt alle Räume. Führt eine Zeile in einen Bereich, der im gezeigten Raum kein Mitglied ist, steht rechts vom Titel — vor dem Wort der Herkunft — das Zeichen seines ersten Raums (12 px, currentColor) und dessen Name, 12 px in der Lesetinte, mit „Öffnet im Raum …" als title. Der Klick wechselt den Raum sichtbar: Der Treffer führt ohne Präfix hin, der Klick schreibt dessen Raum als Wahl, und die Leiste folgt (E10); ohne Klick wechselt nichts (N388). Bis zum 09.10.2026 bekam der Weg ohne den Schalter der neuen Navigation das Raumpräfix (wegImRaum, entfernt). Gerechnet wird der Raum wie das Zeichen aus dem Weg der Zeile (fremderRaumDesZiels), über die Raumstände der Leiste (useRaeume) und damit mit der Überlagerung des Admins. Ein Bereich des gezeigten Raums, ein Befehl ohne Ziel und ein Treffer ohne Bereich tragen keinen Hinweis. Trägt ein angehefteter Weg noch einen Raum von damals (Präfix oder altes ?raum=), führt die Suche auf die Adresse ohne ihn (adresseOhneRaum). Beim Tippen finden sich seither auch die Bereiche: ab zwei Zeichen, über ihren übersetzten Titel, vor den Treffern und mit demselben Raumhinweis. Bis dahin standen sie nur im leeren Zustand, und ihr Titel ging nicht durch t(...); wer „Aufg" tippte, sah To-Dos, aber nicht den Bereich. Ein Präfix, das auf eine Art einschränkt (#, @), lässt sie weg wie die Angehefteten. Nachweise: raum.test.ts („der Raum am Treffer", „wohin ein Treffer fuehrt") und Schnellsuche.test.tsx („Der Raum am Treffer"), die den Bereich aus Register und Navigationsfolge ableiten statt ihn zu nennen (Grundsatz 43); Blicke .blick/20260929-160216-vorher-suche, -160321-nachher-suche, -160422-nachher-bereich.
Bedienbar mit ↑ ↓ und Enter, Escape schließt — im Fragemodus (unten) führt Escape zuerst zurück zur Suche, erst das zweite schließt. Eine Schnellsuche, für die man zur Maus greifen muss, ist keine.
Das Kürzel heißt, wie es auf der Tastatur steht (RL18, 30.09.2026): An Geräten von Apple „⌘K“, sonst „Strg+K“ — in der Adresszeile, auf der 404-Seite und in der Tastenhilfe, die dort „⌘“ statt „Strg“ zeigt (hooks/useSuchkuerzel.ts). Am Telefon nennt der Fuß keine Pfeile, kein Enter und kein Esc, die eine Bildschirmtastatur nicht hat; „>“, „#“, „@“ und „?“ bleiben ($nurTastatur an Hinweis, bei pointer: coarse und hover: none).
Sechsundzwanzig Befehle (auch ohne Treffer erreichbar), gelesen aus components/search/befehle.ts am 05.10.2026, in der Reihenfolge, in der sie stehen: Neues Dokument · Lernen (auf /study?a=cards, den Lerndurchgang — bis zum 21.09.2026 auf /study und damit auf „Module", BE06) · To-Do anlegen · Termin anlegen · Heute · Farbschema wechseln · Einstellungen · Tastenkürzel · Willkommenstour · Abmelden · Person anlegen · Ereignis eintragen · Kalender · Skills und Gewohnheiten (Schlüssel quest; der Name ist seit N66 dieser, weil es keine Quests mehr gibt) · Studienmaterial · Tutor · Den Begleiter fragen (seit dem 24.09.2026, NB09; nur mit dem Anschluss des Begleiters und aktivem Studium — er lässt den Kasten offen und setzt ? davor) · Interessenbaum · Papierkorb · Verlauf · Profil · Mit mir geteilt · Papierkorb der Seiten · Inhaltsbreite wechseln · Tabellenumbruch umschalten · Fehler melden.
Die drei fett gesetzten ohne Datum fehlten hier bis zum 22.09.2026 — die Willkommenstour ausgerechnet der Befehl, den §8 als den Weg zum Neustart der Tour beschreibt. „Profil" und „Mit mir geteilt" standen im Code, bevor sie hier standen (05.10.2026).
„Termin anlegen" und „Heute" seit dem 05.10.2026 (NV-261005-palette-luecken). „Termin anlegen" führt nach /calendar?neu, derselbe Weg wie „Neu anlegen → Termin" in der Kopfleiste und kein zweites Formular; navigation.test.ts hält beide Wege gleich. Seine Zusatzzeile „Zum Anlegefach im Kalender“ trennt ihn bei der Suche nach „termin“ von „Ereignis eintragen“, das auf den Leben-Schirm führt. „Heute" führt auf die Übersicht des gezeigten Raums mit ?tag=heute (etwa /alltag?tag=heute) und zeigt den heutigen Tag auch abends, wenn die Startseite schon morgen zeigt (N316, dashboard.md). Seit demselben Tag tragen „To-Do anlegen", „Person anlegen" und „Ereignis eintragen" ?neu wie der Neu-Knopf: Das Formular steht beim Ankommen offen, bei den To-Dos steht der Cursor in der Eingabezeile.
Was die Schnellsuche anbietet, fragt den Rechtebaum (N149, 23.09.2026), dieselbe Rechnung wie die Leiste (§1):
- Die Bereiche im leeren Zustand sind genau die Einträge der Leiste (
visibleNavItems) — gewährt und eingeschaltet. Unterbereiche wie Noten stehen dort nicht (Was fehlt, Punkt 39). - Ein Befehl mit Bereich fragt den Knoten seines Ziels (
befehlsbindunginbefehle.ts): „Tutor" fragtgold.tutor, „Studienmaterial"gold.materials— wie die Seitenleiste —, „Lernen" und „Interessenbaum" fragengold.study. Führt der Weg auf den Schirm eines anderen Bereichs („Ereignis eintragen" öffnet/life), bleibt es beim Knoten des Merkmals, hier dem Kalender. Ein Befehl ohne Ziel (handlung) fragt ebenfalls den Knoten seines Merkmals. - Ein Befehl verschwindet nur, wenn der Bereich fehlt. Ist er gewährt und bloß ausgeschaltet, bleibt der Befehl stehen — so stand es im Feld
bereichschon vorher, und so blieb es (Was fehlt, Punkt 38).
Nachweis: befehle.test.ts — jeder Weg in einen Raum mit eigenem Knoten fragt diesen, und keiner fragt je den Knoten eines fremden Merkmals.
„Farbschema wechseln" geht zur nächsten Szene. Folgt die Szene der Tageszeit (N132), ist das eine Handwahl bis zum nächsten Abschnitt; sonst schreibt sie theme.szene.
? außerhalb eines Eingabefelds öffnet die Tastenhilfe (im Kasten der Schnellsuche ist ? das Präfix des Fragemodus, unten). Sie nennt seit dem 23.09.2026 auch Z im Lernmodus und eine Gruppe „Im Editor" — Schrägstrich am Zeilenanfang, Ein- und Ausrücken, Blöcke schieben, Zurück und Vor, die vier Auszeichnungen, Suche im Dokument, sofort sichern (Q08). Nach „Überall“ steht die Gruppe „Bereich wechseln“ (§1, „Der Wechsler und die Kapsel“): Strg+Leertaste, Strg+Umschalt, zweimal Umschalt. Am Mac zeigt sie „⌃“ statt „⌘“, denn der Wechsler hört dort auf die Steuerungstaste.
Listen wählt man mit der Tastatur (E-261021-hotkeys-schirmen-listen, E-261021-hotkeys-uebrigen-listen, 21. bis 24.10.2026). Eine Liste trägt data-row-list, eine Zeile data-row, ihr Fokusziel data-row-focus, und jeder Knopf einer Zeile nennt seine Taste in data-tasten (hooks/useZeilentasten.ts, useRowKeys). J und K wählen die nächste und die vorige Zeile, Enter öffnet sie. Das gilt für die Aufgaben, die Blätter der Dokumente, die Gesichter und die Tabelle der Personen (DataTable.tsx: jede Tabellenzeile mit Klick trägt data-row) und die Mitteilungen der Glocke; ein offenes Blatt geht für J und K der Seite dahinter vor. Weitere Tasten je Zeile: E hakt eine Aufgabe ab, M öffnet in der Glocke das Menü der Zeile (Abschalten, Verschieben), Entf stellt an der gewählten Seite der Seitenleiste dieselbe Rückfrage wie der Knopf „In den Papierkorb“ (Wegtun, Eigenschaft taste). „Endgültig löschen“ hat keine Taste. In einem Eingabefeld gelten die Tasten nicht, dort löscht Entf weiter Zeichen. Die Tastenhilfe führt sie; Karten haben keine Listenansicht und brauchen nichts.
Überlagerungen halten den Fokus (Q08, 23.09.2026). Schnellsuche, Tastenhilfe, Navigationsschublade, Rückmeldung, Datumsblatt, Darstellungswähler und Symbolwähler: Solange sie offen sind, läuft Tab in ihnen im Kreis, und beim Schließen steht der Fokus wieder dort, woher er kam (hooks/useFokusfalle.ts). Die Tour nicht — sie ist mit Absicht nicht modal (Abschnitt 8, „Die Willkommenstour").
Das Datumsblatt geht auch in einem Fenster (F70, 24.09.2026). Es hängt am Körper, damit kein Rahmen es beschneidet, und ist eine eigene Radix-Schicht: Über einem Fenster (etwa „Im Fenster öffnen" auf /tasks) nimmt es Maus und Tastatur an, der Fokus steht beim Öffnen auf dem gewählten Tag, und Escape oder ein Druck daneben schließen nur das Blatt, nicht das Fenster. Vorher kam dort weder ein Klick noch eine Taste an.
Der Fragemodus — ? am Anfang (24.09.2026, NB09 Stufe 2)
Beginnt die Eingabe mit ?, fragt die Schnellsuche nicht den Index, sondern den Begleiter (Fragemodus.tsx); die Fußzeile nennt dafür „? fragen". Das gilt nur, wenn der Anschluss des Begleiters da und das Studium aktiv ist — sonst ist ? gewöhnlicher Suchtext und der Befehl fehlt.
- Was mitgeht, steht vor dem Senden da: die Frage, der inhaltsfreie Fensterumriss (Pfad, Ansicht und Scrollstand), Kontext und Profil aus dem Gedächtnis (sensible Zeilen eingeschlossen, soweit das Konto sie sehen darf; KI22, N501), der Ort und die sichtbaren Kontextchips; eine eigene Zeile nennt den Überblick mit Datum, Moodle-Verbindung, Semester, Modulen und Kursen (KI70,
data-ueberblick). Die Grenze hinter „von {m} Zeichen Kontext“ istzeichenKontextder Stufe; der Überblick zählt nicht dagegen (KI79, N525) und hat seine eigene Grenze,zeichenUeberblickder Stufe (KI88, N528). Der Ort kommt aus der Adresse (bereichFuerRouteund?a=) und nennt die Kennung der Ansicht, nicht ihren Titel — die Titel leben nur im Schirm des Bereichs, und der Server bekommt ohnehin die Kennung. Außerhalb eines Bereichs bleibt der Umriss trotzdem sichtbar. Geprüft wird der Ort mit den Mustern des Begleiters (begleiter/shared/ort.ts), die über den Anschluss kommen (ort,grenzeFrage). Ist ein Objekt offen, das der Bereich deklariert (KI74, etwa ein Moodle-Kurs), steht hinter dem Ort „· offen: Moodle-Kurs (nur die Kennung)“, und mit dem Ort gehen Art und Kennung hinaus (docs/seiten/begleiter.md, „Das offene Objekt im Ort“). - Kontext+ (KI05): Eine sichtbare Markierung im Dokument hängt sich automatisch als Chip „Markierung im Dokument“ an und lässt sich vor dem Senden abwählen. Darunter steht ihre Zeichenzahl gegen
zeichenKontextder Abo-Stufe. Sensible Inhalte werden nie automatisch beobachtet. - Der Kontextkorb (KI05, 26.09.2026): Der Chip „+ Kontext“ hinter den Kontextchips hält die aktuelle Markierung fest, damit die nächste dazukommen kann. Andere Bereiche legen über den Anschluss des Begleiters (
kontext,Kontextknopf) einzelne Stücke hinein — im Tagebuch und im Gedächtnis steht dafür an jedem Eintrag „+ Kontext“. Jedes Stück erscheint hier als Chip; ein sensibles (Tagebuch, sensible Erinnerung) mit Rand und Schrift in der Warnfarbe und dem Titel „Sensibel — aus Kontext entfernen“. Höchstens zwölf Stücke. Der Korb lebt nur im Speicher des Tabs und wird nach jeder gesendeten Frage geleert: Ein Stück geht mit genau einer Frage hinaus. - Zähler: „noch 500 Zeichen" (KI27: ohne Einheit las es sich wie 500 Fragen), in Mono mit Tabellenziffern, gezählt wie beim Server; darüber in Warnfarbe mit echtem Minus und einer Zeile, um wie viel zu lang — dann sendet Enter nicht.
- Verbrauchsring: Rechts im Kopf stehen Ring und Zähler beieinander, mittig zur Zeile. Der Ring zeigt den knappsten Anteil aus den Tagesgrenzen aller Anlässe und dem Monatsbetrag des Kontos. Ein Klick öffnet ein schwebendes Fach aus Glas über allem anderen: je Anlass sein kurzer Titel mit „heute“ und dem Zähler, die Modellkosten im Monat und die Rücksetzung täglich beziehungsweise am Monatsanfang. Das Fach öffnet sich nach unten oder, wenn darunter kein Platz ist, nach oben, und schließt mit Escape oder einem Klick daneben. Ohne Modellschlüssel steht dessen Grund statt eines leeren Rings (KI07).
- Enter sendet, Escape führt zurück zur Suche, die Worte bleiben stehen. Eine Frage wartet höchstens 30 Sekunden.
- Die Antwort steht gegliedert mit ihrer Herkunft, gesetzt von
Blocksatzim Dialekt der Dokumente wie eine Seite im Editor (KI-261007-antworten-dialekt): Überschriften, Listen, Tabellen, Trenner, Hinweise; Formeln zwischen Dollarzeichen überFormeltext; HTML bleibt Text (KI43, N501). Die Herkunft lautet „Vom Modell — ohne Blick in deine Daten", oder, wenn das Modell nachgelesen hat, „Vom Modell — Nachgelesen: Themen zu „Graphen“ · …" (KI19, N348). Steht man in einem Bereich mit Leser (Studium: Themen und Materialien; Lernkarten: Karten; Materialien), sagt die Zeile „Geht mit" dazu, dass auch mitgeht, was der Begleiter dort in den eigenen Daten findet. Ging die Frage gestaffelt hinaus (KI78, N525), steht darunter „Der Rest deines Monatsbetrags reichte nur für weniger Nachlesen oder ein kleineres Modell.“ - Im Begleiter bestätigen (KI36, N501): Will der Begleiter etwas anlegen, ändern oder löschen, steht unter „Nachgelesen“ ein „Vorgeschlagen: …“, und darunter ein kleiner Knopf „Im Begleiter bestätigen“. Er schließt die Schnellsuche und öffnet den Begleiterschirm, wo die Tafel „Vorschläge des Begleiters“ steht; ohne Vorschlag fehlt er. Im Auto-Modus oder bei „Immer erlaubt“ läuft das Werkzeug sofort und steht als „Ausgeführt: …“ da (KI24).
- Die Rückfälle (Grundsatz 40): Kein Schlüssel oder Deckel erreicht steht schon vor dem Senden da — dann entfällt die Zeile „Geht mit", weil nichts hinausgeht; nach dem Senden die Regelfassung, eine abgelaufene Frist oder eine gescheiterte Anfrage. Jedes Mal steht eine Satzzeile, warum (
role=status), und darunter „Stattdessen gesucht:" mit den Treffern der gewöhnlichen Suche.
Der Server dahinter ist POST /api/begleiter/fragen (BEGLEITER_FRAGEN): ab Werk 500 Zeichen hinein (N240), seit KI44 je Stufe einstellbar bis 2000, und der Fragemodus zählt gegen die Grenze, die die Lage der Stufe meldet; wie viele Fragen je Tag gehen, wie viel Kontext mitgeht und wie lang die Antwort wird, sagt seit KI04 die Abo-Stufe des Kontos (admin.abo_kontingente, ab Werk frei 5 / 1000 / 400, premium 30 / 10000 / 1500, admin 100 / 25000 / 3000, dev ohne Tagesgrenze / 50000 / 4000), dazu ein Monatsbetrag je Stufe unter dem Deckel der Instanz; hinaus gehen nur die feste Anweisung, der Ort und die Frage — und in einem Bereich mit Leser, was die Werkzeuge dort zurückgeben, so oft, wie die Stufe Runden hat (kontingent.werkzeugrunden, KI19) —, das Protokoll trägt weder Frage noch Antwort noch Ort (B22). Angesehen am 24.09.2026 auf Telefon und Desktop, hell und dunkel (.blick-Läufe p3-vorher, p3-nachher, p3-nachher-frage); die Fußzeile bricht am Telefon seitdem in zwei Zeilen um, statt die Wörter unter ihre Tasten zu quetschen.
5. Die Schnellaktionen (nur am Telefon)
Eine Reihe am unteren Rand. „Desktop entwirft, Telefon prüft" — am Rechner konfiguriert und plant man, am Telefon macht man das eine, weswegen man es herausgeholt hat.
Die Reihe steht seit dem 09.10.2026 nicht mehr da (Entscheidung 2026-10-09-neue-navigation-immer.md; mit dem Schalter der neuen Navigation schon seit dem 08.10.2026): An ihrer Stelle steht die Leiste der Bereiche, und die Aktionen des Raums stehen oben in deren Blatt (§1, „Die Telefonleiste“; useRaumhandgriffe und Aktionsknopf). Was folgt, beschreibt die Reihe bis dahin; Vorrat, Folge und die Anordnung je Raum gelten im Blatt weiter, Raumknopf und Raumwechsel sind entfernt.
Seit dem 29.09.2026 bringt jeder Raum seine Reihe mit (NV08 Schnitt 4, N419; Christians Wahl aus drei Entwürfen, „Daumen im Raum"). Die Reihe zeigt die Aktionen des gezeigten Raums — Studium: Lernen · Material · Lern-Timer; Alltag: To-Do · Melden · Skills; Ablage: Schnellnotiz · Zuletzt geöffnet; Konto: nichts Eigenes — und zuletzt immer die Suche, höchstens vier (REIHE_HOECHSTENS). Rechts davon, durch eine Haarlinie abgesetzt, der Raumknopf: Zeichen und Name des Raums mit dem Winkel ausklappen, 72 px bis ein Viertel der Breite. Er öffnet ein Blatt (role="dialog"): oben die Räume als Kapsel mit Optionsfeldern (N400, wie in der Schublade), darunter „Weitere Aktionen" — alles, was das Konto sieht und die Reihe nicht zeigt, in der Folge des Guides. Wechselt der Raum, tauscht die Reihe mit der Bewegung wechsel des Themas (nach oben hinaus, von unten herein). Welche Aktion von Haus aus in welchem Raum steht, sagt sie selbst (raeume in aktionen.ts, wie ein Bereich seine Räume; die Suche in allen); der Admin ordnet je Raum mit raeume.aktionen.<raum> als Anordnung (einstellungen.md §10): Was er dazuholt, steht vorn, was er ausblendet, wandert ins Blatt — nichts verschwindet, die Suche weicht der Grenze nie. Die Mitglieder des Raums bleiben in der Schublade; N388 sagte für das Telefon „Ziele des Raums" unten und „die Schublade entfällt" — beides verfeinert N419. Nachweise: aktionen.test.ts („reiheDesRaums"), Schnellaktionen.test.tsx, raeume.test.ts (Fach aktionen). Blicke: .blick/20260929-092244-d-nachher, -092336-d-blatt. Die beiden Listen darunter sind seither Vorrat und Folge, keine Reihe für alle.
„Weitere Aktionen" nennen seit demselben Tag den Raum ihres Ziels (NV08 Schnitt 5, N390): Führt eine Aktion in einen Bereich, der im gezeigten Raum kein Mitglied ist — die Schnellnotiz aus dem Alltag in die Ablage —, stehen rechts in ihrer Zeile Zeichen und Name dieses Raums (12 px, Lesetinte, title „Öffnet im Raum …"), vor der Zahl, wo eine steht. Ausführen wechselt den Raum sichtbar wie ein Treffer der Schnellsuche (§4): ohne Präfix, und den Raum schreibt die Aktion als Wahl (E10; bis zum 09.10.2026 ohne den Schalter über das Präfix). Der Raum ist der des Bereichs hinter dem Weg der Aktion (fremderRaumDesWegs, Abfrage und Anker abgeschnitten), nicht der Vorrat raeume: Das Feld sagt, in welcher Reihe die Aktion von Haus aus steht, der Bereich, wohin sie führt, und ein Admin kann beides getrennt verschieben. Die Knöpfe der Reihe wechseln genauso, tragen aber keinen Hinweis — eine fremde Aktion steht dort nur, wenn ein Admin sie hineingelegt hat, und der Knopf hat für ein zweites Wort keinen Platz. Ein Ruf ohne Weg (Suche, Lern-Timer) hat keinen Raum. Nachweis: Schnellaktionen.test.tsx („nennt im Blatt den Raum"); Blick .blick/20260929-160343-nachher-blatt.
Hauptreihe (5): To-Do · Lernen (mit der Zahl der fälligen Karten; auf /study?a=cards — bis zum 21.09.2026 auf /study und damit auf „Module", BE06) · Suche · Melden (öffnet „Lange nicht gemeldet") · Skills (Kennung quest.offen; der Guide nennt sie S15 „Quests", die es nicht mehr gibt — der Knopf heißt, was er tut) Nebenreihe (4, hinter „Weitere Aktionen"): Schnellnotiz · Zuletzt geöffnet · Material · Lern-Timer (seit 26.09.2026, NB06; beginnt seit 15.10.2026 einen Block mit der zuletzt gewählten Dauer, siehe unten)
Eine Aktion ohne ihr Plugin verschwindet, die nächste rückt auf — wer kein Spiel hat, bekommt vier Knöpfe und keine Lücke.
Die Wörter unter den Zeichen stehen in 12 px und der Lesetinte (E16, 26.09.2026). Es sind die Namen von Aktionen, keine Beschriftung neben etwas anderem; in 10 px und der Nebentinte lagen sie unter der kleinsten Stufe (Guide §9) und im Hellen bei 3,93 : 1 (§17).
Jedes Bedienwort des Rahmens hält 4,5 : 1 (N323, 26.09.2026): die Wörter der Leiste, die Umschalter der Leistenwahl samt Sprachkürzel, die Einträge der Kategoriespalte und „Zurück“ in der Brotkrume stehen auch inaktiv in der Lesetinte, die Reiter — sie liegen auf dem Himmel — in der vollen Tinte. Vorher maßen sie in der Nebentinte 3,1 bis 4,1 : 1. Aktiv und inaktiv trennen Fläche, Rand und Stärke; „Strg+K“ bleibt Nebentext.
„Ohne ihr Plugin" rechnet seit dem 23.09.2026 der Rechtebaum (N149, §1): Jede Aktion mit Merkmal fragt isAreaActive am Knoten ihres Ziels (aktionsbindung in aktionen.ts) — gewährt und eingeschaltet, wie die Leiste. „Material" fragt gold.materials und nicht das Studium, „Lernen" gold.study, Schnellnotiz und Zuletzt geöffnet gold.documents. Eine Aktion ohne Ziel (ruf) fragt den Knoten ihres Merkmals — die Suche hat keines und steht immer da. Gehört der Ruf einem eigenen Bereich, nennt die Aktion dessen Knoten in knoten: „Lern-Timer" fragt gold.timer (26.09.2026), damit ein abgeschalteter Timer keinen Knopf hinterlässt, der nichts öffnet — seit dem 27.09.2026 mit seinem eigenen Merkmal TIMER (N328), vorher mit dem des Studiums. Vorher standen hier drei Rückfragen nach dem Merkmal — gewährt, an, schaltbar —, die dasselbe von Hand nachrechneten. Nachweis: aktionen.test.ts, darunter „Material" ohne und mit Studium.
Der Guide wählt neun, gebaut sind seit dem 26.09.2026 alle neun. §14.2 nennt fünf Haupt- und vier Nebenaktionen; als letzte kam timer.lernen (S19) mit der Leiste des Lern-Timers (NB06).
Die lange Liste dahinter (gestaltung/philosophie.md §9.1) führt neunzehn Kennungen, aus denen die neun gewählt wurden. Was davon nicht gebaut ist, ist deshalb kein Rückstand, sondern eine offene Wahl — eine davon wird bereits vermisst: gedaechtnis.frage (S11), „eine Gedächtnisfrage beantworten", notiert in docs/seiten/memories.md. Sie steht unten unter „Was fehlt", damit der Wunsch nicht in einer Seitendatei allein bleibt.
6. Die Datenansicht (DataView)
Zwei Arten: Tabelle und Brett. Beide lesen dieselbe Ansichtsdefinition (Spalten, Filter, Sortierung, Gruppierung) — der Schirm selbst kennt weder Spalten noch Filter.
| Element | Verhalten |
|---|---|
| Zeile anklicken | klappt den Editor unter der Zeile auf (oder im Fenster — table.editor entscheidet), Escape schließt |
| Rechtsklick auf Zeile oder Karte | „Öffnen“ und die Knöpfe der Zeile als eigenes Menü (§1, „Der Rechtsklick“, Q-261015-rechtsklick-aktionen) |
| Zeilen-Aktionen | stehen an der Zeile, nicht in einem Streifen oben: was man mit einer Sache tun kann, gehört an die Sache. Sie bleiben am rechten Rand stehen (F64, 23.09.2026): Ist die Tabelle breiter als das Blatt, rollt der Rest unter ihnen durch (position: sticky, eigene Papierfläche samt Korn, beim Überfahren und an der gemeinten Zeile dieselbe Fläche wie die Zeile). Was den Fokus bekommt, rollt unter ihr hervor: Der Browser kennt die angeheftete Spalte nicht und ließ einen Sortierknopf, den man mit Tab erreicht, verdeckt stehen; jetzt rollt die Tabelle um das bedeckte Stück weiter, eine ganze Zeile ausgenommen. Der Fokusring einer Zeile setzt sich in der Knopfspalte fort, und beim Überfahren blendet sie mit derselben Dauer über wie die Zeile. Ob die Knöpfe in einer Reihe stehen, entscheidet der Schirm (/tasks setzt nowrap an seiner Knopfreihe); die Tabelle erzwingt es nicht — drei lose Knöpfe auf /people stapeln sich wie vorher, statt als angeheftete Reihe ein Viertel des Blattes zu verdecken. Das Korn des Blattes reicht so weit wie die Tabelle (vorher nur so weit wie das Sichtfenster, rechts davon lag beim Rollen glattes Papier) Vorher war die Knopfspalte als letzte die erste, die aus dem Bild fiel — Bens Meldung: „die löschen-knöpfe verschwinden aus dem bild". Am Telefon, wo die Tabelle Karten ist, gilt das nicht |
| Spaltenbreiten | Datum, Zahl, Marke, Auswahl, Rang, Punkte, Fortschritt und Haken brechen nicht um (UNTEILBAR); Freitext bricht, wo es muss, auch im Wort. Vorher brach unter Druck „21.09.20 / 26" und „medi / um", und die Ansichten hielten das mit festen Pixelbreiten auf, die dann dem Namen fehlten (F64). Eine Untergrenze nennt die Ansicht selbst (minWidth an der Spalte) — heute der Name einer Aufgabe und eines Ereignisses, je 16 Zeichen. Sie gilt für den Text, nicht für die Zelle (box-sizing: content-box an dieser Zelle; index.css setzt sonst border-box, und Innenabstand und Baumeinzug fräßen sie auf). Nicht nach Stelle: Eine feste Regel „erste Freitextspalte 16 Zeichen" nahm in der Gegenprüfung den anderen Textspalten Breite und traf in /life die „Nr" statt des Namens |
| Datumsspalten | Ein reines Tagesdatum (JJJJ-MM-TT) steht in Tabelle und Brett in der Schreibweise der Kontosprache wie ein Zeitstempel daneben, deutsch 15.03.2026, englisch 03/15/2026 (VA-261009-datumszellen; vorher fest deutsch). Der Tag bleibt der gespeicherte, in jeder Zone des Kontos |
| Editor unter der Zeile | Die Zeile, die ihn trägt, steht immer da (das Aufklappen misst sonst von nichts), hat aber geschlossen weder Höhe noch Fläche. Bis zum 23.09.2026 lag unter jeder Zeile ein 12 px hoher Glasstreifen, und die Tabelle sah aus wie Kärtchen mit Fugen statt wie ein Blatt mit Zeilen (F64). Offen bleibt die Fläche im sichtbaren Teil: angeheftet an den linken Rand und so breit wie das Sichtfenster (--sichtbreite, gemessen mit einem ResizeObserver) — vorher standen „Im Fenster öffnen" und „Editor schließen" am rechten Ende der Tabelle und rollten bei einer breiten mit hinaus |
| Bewegung | Eine neue Zeile blendet ein, eine gelöschte aus, die übrigen gleiten an ihren Platz (useListeneintrag('tabelle'), BW-261007-listen). Geklappt wird eine Tabellenzeile nicht: In einer Tabelle zuckten dabei die Spalten. Bei der Bewegungsstufe „aus“ springt alles |
| Gruppenüberschrift | überspannt die ganze Zeile. Bis zum 23.09.2026 stand display: flex am th; damit war er keine Tabellenzelle mehr, colSpan wirkte nicht, und die Linie der Gruppe lag nur unter der ersten Spalte |
| Karten am Telefon | Unter 600 px wird jede Zeile eine Karte, und die Karte wächst mit ihrem Inhalt. Bis zum 23.09.2026 behielt sie die Höhe einer Tabellenzeile, und acht Beschriftungen liefen über die Karte darunter (F64) |
| Spaltenkopf | sortiert — drei Stufen, nicht zwei (N37): auf, noch einmal ab, ein drittes Mal zurück zur Reihenfolge der Ansicht. Ohne den dritten Klick gäbe es keinen Weg zurück zu der Ordnung, die die Ansicht meint; er schreibt null und nicht die Vorgabe hinein, damit eine geänderte Ansicht auch geändert durchschlägt |
| Gruppierung | nach jeder gruppierbaren Spalte. Zeilen ohne Wert stehen in der letzten Gruppe „Ohne Angabe" — in der Tabelle wie auf dem Brett, beide mit demselben Platzhalter (OHNE_WERT, seit E02 am 30.09.2026) |
| Brett | trägt über sich die Ordnungsleiste (E02, seit dem 30.09.2026 an jedem Brett): wonach gruppiert, wonach sortiert und ein Richtungsknopf mit denselben drei Stufen wie der Spaltenkopf. Gemerkt wird im selben Stand wie bei der Tabelle, je Ansicht (N416). Die Gruppierwahl nennt die gruppierbaren Spalten und immer das Feld, nach dem das Brett von sich aus gruppiert (groupBy); „ohne Gruppen" zeigt Kacheln. Die Leiste steht auch beim Laden da und fehlt nur, wo es gar nichts gibt. Ein Zeichen trägt sie nicht — <option> kann keines, und die Zeichen einer Spalte gehören ihren Werten |
| Leerzustand | der Horizont (die Felssilhouette aus dem Hintergrundbild, an den Rändern ausgeblendet) mit der Eule darauf, ein Satz in der Lesetinte, und ein Knopf, der das Anlegefach aufklappt (N312, N318, Guide §15) |
| Ladezustand | Skelettzeilen, keine Drehscheibe |
| Umbruch | „Umbruch" / „Eine Zeile" schaltet um, ob lange Zellen umbrechen; vor dem Wort die Zeichen umbruch und einzeilig (seit I06 gezeichnet, vorher „⏎" und „⇥" aus der Schrift). Eine Zelle vom Typ check zeigt haken mit dem Wort „Ja" für Vorleser |
| Zeichen zum Wert | Nennt eine Spalte zeichen (Wert → Name aus der Registry), steht das Zeichen stumm vor dem Wort in der Pille; im kompakten Modus ersetzt es den Farbpunkt, das Wort steht im Label |
Ein gefülltes Feld im Anlegefach trägt seinen Namen darüber (F103, N361, 27.09.2026). Solange ein Feld leer ist, steht sein Name als Platzhalter darin; sobald es einen Wert hat, steht der Name klein in Großbuchstaben über dem Feld — bei Text, Zahl, Datum und Auswahl gleich. Ein mit heute vorbelegtes Datumsfeld zeigt ihn deshalb von Anfang an. Bis dahin standen Beginn und Ende eines Semesters als zweimal derselbe Tag nebeneinander, und welcher welcher war, sagte nur die Reihenfolge. Eine Auswahl, die ihr eigenes leeres Wort mitbringt („—"), trägt den Namen immer darüber. Die Felder einer Reihe stehen an ihrer Unterkante, das Häkchen ist so hoch wie ein Feld; der Name erscheint mit der Bewegung für Interaktion und ist für den Bildschirmleser verborgen, der ihn über das aria-label des Feldes hört. Das eigene Prüfungsformular aus BE38 behält seine festen Namen über jedem Feld.
Scheitert das Absenden im Anlegefach, ist der Knopf sofort wieder frei, und die Fehlerzeile sagt es (F28a, 23.09.2026). Bis dahin blieb er gesperrt, bis der Schirm neu geladen wurde — ohne jeden Hinweis, warum; RecordComposer setzt den Laufmerker jetzt über useBusyLock (packages/frontend/src/hooks/useBusyLock.ts), das ihn in einem try/finally wieder freigibt, gleich, ob onSubmit einen Fehlertext liefert oder wirft. Die Eingaben bleiben dabei stehen, geworfen wird nichts verschluckt — ein Netzfehler etwa steht als „Fehler bei der Anfrage aufgrund eines unbekannten Fehlers" in derselben Fehlerzeile.
Dasselbe gilt jetzt für die übrigen Rahmenbausteine (F28b, 23.09.2026): Der Fremdkonto-Banner („Beenden"), die Rücknahmeleiste, das Dateifeld, „Wegtun" und der Teilen-Knopf setzen ihren Laufmerker über useBusyLock. Die Schnellsuche, die Verlaufstafel, die Briefingschicht und der Haken useDateiadresse (löst eine abgelegte Datei zu ihrer Adresse auf, benutzt in Bewertungsfeld und Blockinhalt) haben keinen Riegel, weil ihr Ladezustand an einem Effekt oder einem Kontext hängt — ein try/finally sorgt auch dort dafür, dass eine Ladeanzeige nach einem geworfenen Fehler endet, statt stehen zu bleiben.
Die Filterleiste (dataview/Filterleiste.tsx) steht über Listen, die Felder haben: je Feld eine Knopfreihe, an jedem Knopf die Zahl, die ein Klick übrig ließe. Seit dem 22.09.2026 kann ein Feld zugeklappt anfangen (zugeklappt: true am Feld, Vorgabe aus): Dann stehen nur die Überschrift, was gewählt ist — als dieselbe Pille, die die Wahl auch zurücknimmt — und ein Knopf „7 Werte zeigen". Eine Wahl verschwindet nie hinter dem Zuklappen; sonst filterte etwas, das man nicht sieht. Ob ein Feld gerade offen steht, merkt sich die Leiste selbst, nicht der Schirm. Benutzt von /admin für das Feld „Bereich".
Ein Knopf kann ein Zeichen tragen (N132, 22.09.2026): zeichen am Filterknopf setzt die Leiste vor das Wort — Ring, Rang, Scheibe. Das Wort bleibt stehen (Guide §17), das Zeichen ist für Vorleser stumm. Heute gibt nur /admin seinen Werten Zeichen mit.
Werte und Ansichten können ein Zeichen tragen (N134, 23.09.2026). ColumnDefinition.zeichen ordnet den Werten einer badge- oder auswahl-Spalte je einen Namen aus der Registry zu. Das Zeichen steht stumm vor dem Wort, in der Farbe des Wertes, und das Wort wird dann neutral: Die Farbe trägt das Zeichen (Guide §7.3, §17). In einer kompakten Tabelle tritt es an die Stelle des Farbpunkts; das Wort bleibt in title und aria-label. Dasselbe Zeichen steht im Kopf jeder Gruppe, wenn nach dieser Spalte gruppiert wird, in der Tafel wie in der Tabelle. ViewDefinition.zeichen gibt dem Ansichtsreiter sein Zeichen; MenuScreen reicht es unverändert durch. Ohne zeichen sieht alles aus wie vorher. Die Zeichen kommen nur aus der Registry; ein Bereich malt keine eigenen. Dass das Wort neutral wird, sobald ein Zeichen daneben steht, ist eine Ableitung aus §7.3, keine Entscheidung Christians.
Eine Wahl verschwindet auch nicht, wenn nichts mehr auf sie passt (22.09.2026). Die Werte eines Feldes nennen nur, was in der gezählten Menge vorkommt; schränkt eine Suche oder Sicht sie so ein, dass der gewählte Wert fehlt, steht er trotzdem da — gedrückt, mit einer 0 —, und die Leiste bleibt, solange irgendetwas gewählt ist, samt „alles zeigen". Vorher fiel er aus der Reihe und filterte unsichtbar weiter. Wer seine Werte beschriftet, ergänzt die fehlenden vorher selbst (mitGewaehlten), sonst stehen sie mit ihrem Rohwert da.
Sortierung und Gruppierung werden gemerkt, je Ansicht (N69) — nicht je Schirm. Christian: „die Sortierung auf jeweiliger Seite soll persisten." Ein Schirm hat mehrere Reiter, und wer die Kontakte nach Nachnamen sortiert, meint die Kontakte und nicht den Schirm.
7. Wann ein Schirm lädt
Steht einmal hier, weil es auf jedem Schirm gleich ist (Q07, 21.09.2026).
| Lage | Was geschieht |
|---|---|
| Schirm betreten | Der Ladeeffekt läuft beim Aufbauen, einmal |
| Reiter oder Ansicht wechseln | Er läuft wieder, weil der Abschnitt in seinen Abhängigkeiten steht |
| Hartes Neuladen (F5) | Die gemerkte Sitzung steht vor dem ersten Rendern, nicht erst in einem Effekt — der Schirm fragt also nie, bevor der Schlüssel da ist |
| Sitzung abgelaufen, Wiedererkennung glückt | Der Schirm lädt noch einmal, weil die Sitzungsrunde in seinen Abhängigkeiten steht |
| Sitzung abgelaufen, Wiedererkennung misslingt | Abmelden mit einer Meldung, zurück auf /login |
| Tiefer Link ohne Anmeldung | → /login, danach direkt zurück auf den verlangten Weg (zehn Minuten gemerkt, nur eigene Wege) — nicht erst auf die Übersicht und von dort ein zweites Mal weiter (F40/B-16, 23.09.2026) |
Ein Schirm nennt das nicht in seiner eigenen Datei. Wer einen neuen baut, holt sich useNachAnmeldung(laden) — oder, wenn sein Effekt einen Aufräumer braucht, useSitzungsrunde() in die Abhängigkeiten.
Nachgemessen, nicht angenommen (21.09.2026). verify:arch geht die Aufrufkette selbst durch: welche Datei normalRequest ruft, welche Namen ein Schirm daraus holt, welches useCallback daneben sie ihrerseits ruft — und dann muss jeder useEffect, der einen davon ruft, die Runde in seinen Abhängigkeiten haben, selbst oder über den Haken, den er dort nennt. Von 23 gezählten Ladeeffekten (gemessen am 22.09.2026) stehen sechs mit Datei, Funktion und Grund in der Ausnahmeliste des Nachweises: was beim Tippen sucht (Schnellsuche, Freigabesuche, Verknüpfungsfeld, Namensvorschläge), was vor jeder Sitzung läuft (Mailbestätigung), und die Runde selbst. Ein Effekt, der nur einen Lauscher anmeldet, zählt gar nicht mit — er wartet, statt zu laden. Alle übrigen Ladestellen benutzen useNachAnmeldung und tauchen als Effekt nicht mehr auf.
Und was er zeigt, wenn nichts kommt (G03, 21.09.2026)
Steht ebenfalls einmal hier, weil es seit dem 21.09.2026 auf jedem Schirm gleich ist, der selbst lädt. Vorher gab es das an einer Stelle — auf /moodle —, und überall sonst stand dieselbe Handarbeit: eine Liste im Arbeitsspeicher, die beim nächsten Laden leer ist. Und [] sieht aus wie „du hast nichts" statt „ich weiß es gerade nicht" (Grundsatz 33).
„Jeder Bereichsschirm" ist die Regel, nicht der Bestand — und der Unterschied gehört hierher, weil der Rahmen sich sonst wie eine Zählung liest. Was verify:rueckfall einen Bereichsschirm nennt, ist, wer useMenuScreen führt und einen eigenen Ladezustand hat (setzeLaedt); wer nichts lädt, kann auch nichts vermissen. Das waren am 22.09.2026 zwölf von siebzehn Bereichen — nicht dabei sind dashboard, documents, flashcards, calendar und settings. Wer einen von ihnen das nächste Mal anfasst, bringt ihn mit; solange er es nicht tut, steht er unten unter „Was fehlt".
| Lage | Was der Schirm zeigt |
|---|---|
| Die erste Abfrage läuft noch | Nichts — der Leerwert, keine Marke. Über etwas, das noch niemand gefragt hat, wird nichts behauptet |
| Die Antwort kommt | Sie. Und sie wird aufgehoben, im Browser, nicht im Arbeitsspeicher |
| Die Antwort kommt nicht, es gibt einen aufgehobenen Stand | Den aufgehobenen — und darüber eine bernsteinfarbene Zeile: „Der Server antwortet gerade nicht — Stand von Mo., 14.09., 21:47." Darüber, wie bei jedem Fehler, die Fehlerzeile des Schirms (MenuScreen setzt sie vor den Inhalt; bis zum 30.09.2026 stand hier „darunter") |
| Die Antwort kommt nicht, und es gibt keinen Stand | Den Leerwert, ohne Marke. „Stand von …" ohne ein Danach wäre ein halber Satz |
| Die Antwort ist leer | Leer, ohne Marke. Eine leere Liste ist ein Ergebnis, kein Ausfall — sonst zeigte der Schirm beim nächsten Ausfall die Kurse von vorgestern und behauptete damit, es gäbe welche |
Ein Schirm mit mehreren Listen trägt trotzdem eine Marke, und sie nennt den ältesten der veralteten Stände: Sie darf nicht frischer klingen als das Schlechteste, was darunter steht.
Wer einen neuen Bereichsschirm baut, nimmt useListenstand('<bereich>.<was>') statt useState([]) und stand.uebernimm(antwort) statt if (antwort.success) setzeX(antwort.body). Der Schlüssel fängt mit dem Namen des Plugin-Verzeichnisses an und gibt es nur einmal; der Nachweis verify:rueckfall hält das fest — und dass jeder, der einen Stand hält, die Marke auch zeichnet. Ein alter Stand, der aussieht wie ein frischer, ist schlimmer als gar keiner, denn dann glaubt man ihm.
Nicht jede Liste gehört dazu. Was zu einer Auswahl gehört und nicht zum Schirm, bleibt bloßer Zustand. Ein Rückfall unter einem Schlüssel zeigte beim nächsten Ausfall das Zubehör der vorigen Auswahl unter dem Namen der jetzigen — und ein Stand, der zum falschen Ding gehört, ist schlimmer als keiner. Welche Liste das auf welchem Schirm ist, sagt die Seitendatei dieses Schirms; hier steht nur die Regel.
Und was über einen Anschluss aus einem anderen Bereich kommt, gehört dem anderen Bereich: Zwei Rückfälle derselben Liste, je einer auf jeder Seite, könnten einander widersprechen.
Und wenn gar kein Netz da ist — die Hülle (L03, 27.09.2026)
Die Marke oben setzt voraus, dass Denotato überhaupt startet. Seit dem 27.09.2026 tut es das auch ohne Netz: Ein Service Worker (public/sw.js, angemeldet in src/huelle/anmelden.ts, nur im Bau) legt nach dem ersten Besuch die Hülle ab — index.html, Bündel, Stile und Schriften aus einer festen Liste des Baus, je mit Prüfsumme. Online kommt jede Seite weiter aus dem Netz; die Hülle springt nur ein, wenn keine Antwort kommt oder der Server mit 5xx antwortet. Was die Schirme dann zeigen, ist ihr aufgehobener Stand mit Marke, wie oben — der Worker legt keine Antworten ab, keine Inhalte, nichts vom Konto.
| Lage | Was geschieht |
|---|---|
| Erster Besuch, noch keine Hülle | Wie vorher: ohne Netz kein Start |
| Hülle da, gemerkte Sitzung („angemeldet bleiben") | Denotato startet, Leiste und Schirm stehen, jeder Bereich zeigt seinen Stand von zuletzt |
| Hülle da, Sitzung nur im Reiter, der Reiter war zu | Die Anmeldung erscheint — und geht ohne Netz nicht. Ein Neuladen im selben Reiter behält die Sitzung |
| Neuer Bau, alter Reiter offen | Der neue Worker wartet; der offene Reiter findet die Bündel seines Baus weiter. Wer den letzten Reiter schließt und neu öffnet, hat den neuen Bau |
| Kontoknopf › Abmelden | lässt die Hülle liegen. Clear-Site-Data: "cache" leert den HTTP-Zwischenspeicher, nicht die Ablage des Workers — und die Hülle trägt nichts, was einem Konto gehört |
Wie man den Worker zurückzieht, steht in L03.
8. Immer da, auf jeder Seite
- Rücknahmeschicht (seit 28.09.2026, E25, N379) —
context/Ruecknahmeschicht.tsx. Ein Schirm meldet mituseRuecknahme({ bezeichnung, zurueck, wieder })an, was er zurücknehmen und wiederholen kann; der zuletzt angemeldete gewinnt, ein Dialog geht also vor dem Schirm darunter. Die Knöpfe der Adresszeile und die Tasten Strg+Z, Strg+Y und Umschalt+Strg+Z (Mac: Befehl) fragen ihn; in einem Eingabefeld bleiben die Tasten beim Feld. Angemeldet sind heute die Rücknahmeleiste des Servers (Q05, solange sie steht), der Lerndurchgang (die letzte Bewertung), der Rückgängig-Stapel des Seiteneditors und seine Löschleiste; die Löschleiste hört nicht mehr selbst auf Strg+Z, sonst nähmen zwei Hörer zwei Schritte zurück. Ist nichts angemeldet, stehen beide Knöpfe grau. Der Server kann wiederholen (seit 28.09.2026, N379): Zurückgenommenes zieht mit Vor- und Nachzustand und der gelöschten Gutschrift ausgame.xp_eventsinpersonal.redo_log(Wanderung 187) und lässt sich zehn Minuten lang wieder hinlegen (/ruecknahme/wiederholbar,/ruecknahme/wiederholen, MCPruecknahme_*); eine neue Handlung leert das Buch. Die Rücknahmeleiste zeigt dann „Rückgängig gemacht · … — Wiederholen". Die Leiste geht früher als das Fenster (F-261013-ruecknahme-meldung, 14.10.2026): nach dem Instanzwertruecknahme.anzeige(Vorgabe 15 Sekunden), mit dem Kreuz an ihrem Ende, mit Escape oder nach unten gewischt; Zeiger oder Fokus auf ihr halten die Zeit an. Beim Öffnen zählt die Zeit ab der Handlung, nach einer Handlung auf dem Schirm ab jetzt. Die Rücknahme bleibt dabei angemeldet: Strg+Z und die Knöpfe der Adresszeile nehmen die zehn Minuten weiter zurück. - Rückmeldeknopf — legt eine Zeile in
admin.rueckmeldungenan (Grundsatz 48; bis 30.09.2026 eine Datei unterdocs/feedback/, N451). Seit dem 23.09.2026 (N134) trägt die Artwahl ein Zeichen vor dem Wort: den Käfer (fehler) vor „Etwas geht nicht", die Sternschnuppe (wunsch) vor „Etwas fehlt" — dieselben wie im Meta-Server und in/admin, 16 px, in der Schriftfarbe des Knopfs: der Strich in ihr, die Fläche in ihr gedämpft. Den Strich legt der Artknopf eigens auf die Knopfschrift — Duotone zeichnet ihn sonst immer in der Textfarbe, und die kam auf dem violetten Grund der gewählten Art am Tag nur auf 2,49:1; in der Knopfschrift sind es 3,2:1 bis 5,4:1. Der Zähler ist neutral; ist der Text zu kurz, stehtwarnungdavor — 14 px, die Fläche in der Warnfarbe, der Strich in der Textfarbe —, und „noch {n} Zeichen" bleibt stehen. Vorher sagte das nur die Farbe der Zahl. Beide Zuordnungen sind Daten (ARTZEICHEN,ZAEHLERZEICHENinRueckmeldeknopf.tsx);Rueckmeldeknopf.test.tsxprüft die Namen gegen die Registry und die gezeichneten Striche gegen deren Pfade. Der Knopf heißt, was auf ihm steht (E16, 26.09.2026): Sein zugänglicher Name ist „Rückmeldung"; „Fehler melden oder Wunsch äußern" steht nur noch als Titel und wird als Beschreibung vorgelesen. Vorher war es umgekehrt, und wer per Sprache bedient und sagt, was er sieht, traf ihn nicht (Guide §17).Der schwebende Knopf ist unter
pointer: coarsemindestens so groß wie die Zielfläche (44 × 44) (§16.1, F79 — am Telefon trug er nur sein Zeichen und war 34 × 34) und nie höher alsFIGURHOEHE, mit der die Rollfläche unten Platz freihält.Seit dem 23.09.2026 (N151) kann eine Meldung ein Bild mitbringen — nur angemeldet. Mit dem Haken nimmt Denotato die Ansicht selbst auf (
handlers/bildschirmfoto.ts,modern-screenshot, an der gerollten Stelle, ohne Knopf und Formular, höchstens 900 KiB JPEG; so hoch, wiebodygezeichnet ist, damit eine offene Tastatur am Telefon das Bild nicht unten abschneidet, F-261015-rueckmeldebild-telefon). Solange das läuft, steht „Bildschirm wird aufgenommen …"; sonst das Kästchen „Bildschirmfoto mitschicken" und die Knöpfe: „Eigenes Bild wählen" (PNG, JPEG oder WebP, ersetzt die Aufnahme — der genaue Weg, weil die Nachzeichnung Glas und Festgestecktes nicht ganz trifft) und „Bild entfernen".Seit dem 14.10.2026 beginnt die Aufnahme erst mit dem Haken (F-261014-bildschirmaufnahme). Sie hält den Hauptfaden fest, auf einer vollen Seite wie
/calendarbis zu 7,5 s; lief sie beim Öffnen, sah man getippte Buchstaben so lange nicht (am selben Tag hatte F-261013-rueckmeldeknopf-haengt sie schon hinter die Feder des Blattes geschoben). Jetzt wartet nur, wer ein Bild will. Scheitert die Aufnahme, sagt es „Der Bildschirm ließ sich nicht aufnehmen.“, und der Haken geht wieder aus. „Bild entfernen“ steht erst da, wenn es ein Bild gibt.Seit dem 09.10.2026 ist das Kästchen aus (D-261009-bildschirmfoto, nach einer Rückmeldung vom 08.10.2026: Das Bild zeigt alles auf dem Schirm, auch sonst Verschlüsseltes). Ohne Haken geht kein Bild ab; Knopf, Formular und Schleier blendet die Aufnahme aus. Unter dem Kästchen steht, wer das Bild sieht: „Die Betreiber von Denotato sehen darauf alles, was gerade auf deinem Schirm steht." (bei einem eigenen Bild „… sehen das ganze Bild."); das Kästchen trägt den Satz als Beschreibung. Ein eigenes Bild setzt den Haken selbst — wer es wählt, will es schicken. Mit dem Haken klappt die Vorschau auf (
Ausklapp), bis 240 px hoch und im Seitenverhältnis des Bildes, darüber „Zieh über Stellen, die niemand sehen soll — sie werden geschwärzt." Ziehen mit Maus, Stift oder Finger (Pointer Events, ab 4 px;touch-action: none) legt ein schwarzes Rechteck an, gestrichelt inhandlung, solange es gezogen wird; „Letzte Schwärzung zurücknehmen" nimmt das letzte wieder weg. Die Rechtecke stehen in Anteilen des Bildes (handlers/schwaerzung.ts); beim Abschicken maltschwaerze(handlers/bildschirmfoto.ts) sie deckend schwarz auf eine Leinwand in voller Bildgröße und macht daraus wieder ein JPEG unterBILD_GRENZEN. Geschickt wird nur dieses Bild; lässt es sich nicht schwärzen, geht gar nichts ab, und eine Meldung sagt es. Ein neues Bild beginnt ohne Schwärzung. Rechtecke ziehen geht nur mit dem Zeiger; Satz, Kästchen und Knöpfe erreicht die Tastatur.Die Liste „Mitgeschickt" nennt mit Haken „Bildschirmfoto", mit Schwärzung „Bildschirmfoto, geschwärzt". Mit dem Bild geht eine kurze Angabe zur Ansicht (Fenstermaß, Pixeldichte, Szene). Der Server prüft Anmeldung, Größe und Magic Bytes und legt das Bild in der Dateiablage unter
rueckmeldungen/<id>.<endung>ab (N451); die Zeile trägt nur den Namen inbildund die Angabe inansicht. Der Meta-Server zeigt es in der aufgeklappten Meldung und löscht es beim Ablehnen. Unangemeldet gibt es keinen Bildteil (N41), und ein Bild ohne Anmeldung weist der Server ab.Scheitert das Absenden, bleibt „Abschicken" bedienbar (F28b, 23.09.2026): Der Knopf setzt seinen Laufmerker jetzt über
useBusyLock, das ihn in einemtry/finallywieder freigibt, statt bei „Schickt …" gesperrt stehen zu bleiben, wenn die Anfrage wirft.Im Nur-Lesen-Modus sagt er vorher, dass nichts abgeht (V06, 27.09.2026): Während ein Entwickler ein fremdes Konto nur ansieht, weist der Server
/feedback/saveab. Über dem Fuß steht dann, woran es liegt und was zu tun ist — den Wechsel im Band beenden —, und „Abschicken" bleibt aus. Vorher nahm das Formular den Text an und meldete danach „Bitte noch einmal versuchen", ein Rat, der nie helfen konnte. - Impersonationsband — wenn ein Entwickler ein fremdes Konto ansieht (eigener Abschnitt unten)
- Fehlerfang — fängt einen Absturz ab und zeigt eine gestaltete Seite statt eines weißen Schirms
- Einfrier-Schalter —
?zeit=3,5oder?anteil=94hält jede Bewegung an; nur für Aufnahmen, nicht für Nutzer - Schirmwechsel — der Übergang zwischen zwei Seiten (der Saal öffnet sich zur Seite)
Der Kopf jeder Seite (11.10.2026, D-261011-titel-je-seite)
Die öffentlichen Seiten stehen in config/oeffentlicheSeiten.ts: Weg, Titel, Beschreibung und ob sie in den Index dürfen. Heute sind das die Startseite, Anmeldung, Konto anlegen und die drei Rechtstexte (canonical auf https://denotato.com<weg>) sowie Passwort vergessen, neues Passwort, Adresse bestätigen und Post abbestellen (noindex).
- Im Bau schreibt
bau/vorrendern.tsje Seite eine eigene Datei (imprint/index.html…) mit eigenem<title>, Beschreibung,canonicalodernoindexund Open-Graph-Angaben; die Startseite trägt dazu JSON-LD mitWebSiteundOrganization(Logo/android-chrome-512x512.png). Im#rootsteht schlichter Text aus denselben Quellen, auf dem Nachtgrund der Szene und mit Verweisen auf die übrigen öffentlichen Seiten; den Satz „ohne JavaScript leer“ lassen sie weg. React ersetzt den Text beim Start; es gibt keine Hydration.app.htmlist die leere Hülle, auf die nginx für jeden anderen Weg zurückfällt — ein Neuladen in den Aufgaben zeigt so keinen Augenblick lang die Startseite. - Im Browser hält
layout/Seitenkopf.tsxdasselbe beim Wechsel nach: Grundtitel, Beschreibung (sonst die der Startseite),robotsundcanonical. Hinter der Anmeldung heißt der Reiter „Denotato“, bis ein Schirm mituseSeitentitelseinen Namen setzt; verlässt man ihn, fällt der Reiter auf den Grundtitel des neuen Weges zurück. - Geprüft von
verify:auffindbaram jüngsten Bau: jede Seite da, kein Titel doppelt,canonicalodernoindex, JSON-LD auf der Startseite,app.htmlleer.
Eine neue öffentliche Seite braucht nur ihren Eintrag in der Liste; Titel und Beschreibung laufen über satz() (Grundsatz 1).
Das Impersonationsband (F18, nachgemessen am 22.09.2026)
Es steht fest ganz oben, über der Leiste (seit 22.09.2026, F52, Christians Wahl N131), und liegt in App.tsx außerhalb der Routen — ein Seitenwechsel hängt es nicht ab und baut es nicht neu. Wegklicken kann man es nicht. Seine Ebene liegt eine Stufe über der Leiste und unter jedem Dialog; es hält die Aussparung des Geräts (Notch) selbst frei.
Es schiebt die Leiste, nicht den Inhalt darunter. Das Band misst sich selbst und legt die Höhe als --denotato-bandhoehe ans Wurzelelement; die Leiste steht bei top: var(--denotato-bandhoehe, 0px), und GeneralMenu hält Leiste plus Band frei. Ohne Impersonation ist die Variable nicht gesetzt und zählt null.
(Bis zum 22.09.2026 stand es sticky mit z-index: 100 im Fluss vor .App — unter der festen Leiste (1000), die es ganz verdeckte. Gesehen hat man nur, dass die Anwendung um seine Höhe nach unten rückte.)
Was es zeigt. „Du siehst" bzw. „Du bearbeitest", dahinter fett der Name des fremden Kontos, und als Nebensatz „angemeldet als …" — als wen und als wer, beides in einer Zeile. Trägt das fremde Konto einen gezeigten Rang, steht sein Abzeichen hinter dem Namen (E22, N367): Das Band nennt, wer das Zielkonto ist, und dazu gehört der Rang so wie am eigenen Namen oben rechts.
Was man dort tun kann.
| Bedienelement | Was es tut | Endpunkt |
|---|---|---|
| Nur lesen / Bearbeiten | zwei Stellungen nebeneinander, die gewählte ausgefüllt; vor dem Wechsel zu Bearbeiten nennt eine Bestätigung das Zielkonto, erst danach legt der Endpunkt den Zustand im Server um und lädt neu | POST /api/dev/impersonate/mode |
| Beenden | schließt den Protokolleintrag (ended_at) und setzt das Ziel der Sitzung auf null | POST /api/dev/impersonate/stop |
Die drei Knöpfe sind unter pointer: coarse 44 × 44 (§16.1, V06, seit E30 die Marke); am Telefon waren sie 21 bis 23 hoch, und Danebengreifen kann hier in einem fremden Konto auf Bearbeiten schalten. Am Rechner bleibt das Band schmal.
Der Schalter ist keine Anzeige: Steht er auf „nur lesen", weist der Server jede schreibende Route ab — gemessen in verify:dev, samt „es ist wirklich nichts entstanden" und „ein zweiter Wechsel schließt den ersten Eintrag".
Die Farbe gehört dem Bearbeiten, nicht dem Modus. Nur lesen trägt die Anwendungsfarbe, Bearbeiten die Warnfarbe und ein langsames Pulsieren (2,4 s, 8 % Helligkeit, aus bei prefers-reduced-motion). Ein Band, das immer rot ist, ist nach zehn Minuten unsichtbar.
Die Schrift kommt aus der Fläche, nicht aus der Szene (seit 22.09.2026). Vorher war sie der Grundton der Szene — elegant, aber in allen neun dunklen Szenen zu leise (schneenacht 3,22:1 gegen die 4,5:1 aus Guide §17). Jetzt leitet das Theme die Tinte aus der Bandfarbe ab (theme/schriftfarbe.ts); gemessen liegt das Band in allen Szenen und in beiden Mitgliedschaften bei mindestens 4,66:1, die gewählte Schalterstellung ebenso, weil sie dieselben zwei Töne umkehrt. Der Nebensatz hat dafür seine opacity: 0.8 verloren — er ist kleiner und leichter, aber nicht blasser.
Die Willkommenstour (W06, seit dem 18.10.2026 eine Checkliste)
Eine Pille unten rechts: „Erste Schritte 1/6“ (D-261017-tour-neu, Christians Wahl am 18.10.2026: „B · Checkliste“). Sie steht über dem Rückmeldeknopf, am Telefon über der Reihe, und zeigt je Schritt einen Strich; erledigte sind grün. Vorher bekam man acht Kapitel in fester Folge in einer Karte, die man der Reihe nach durchklicken musste.
Ein Klick öffnet die Liste. Sie schwebt aus Glas über der Pille und zeigt das Okular, „Erste Schritte“ und den Stand. Darunter stehen sechs Schritte, und nur die, die das Konto betreffen: Die Übersicht öffnen, Die Suche aufrufen, Dein Semester ansehen (nur mit Studium), Die Karteikarten öffnen, Aufgaben und Termine öffnen, Die Einstellungen finden (config/tourkapitel.ts). Gefiltert wird vor dem Zählen, sonst hieße „2/6“ etwas anderes als die Liste darunter. Ist die Liste länger als der Schirm, rollt nur sie; der Fuß bleibt stehen.
Ein Schritt hakt sich von selbst ab, in beliebiger Folge. Wer den Weg betritt (/flashcards oder darunter) oder das Kürzel drückt (Strg+K, am Mac ⌘K), hat ihn erledigt — gleich, ob über die Liste, die Leiste oder die Schnellsuche. Der Stand liegt je Schritt in der Einstellung tour.schritte und gilt damit auf jedem Gerät.
„Zeig mir“ zeigt das Ziel. Ist das Bedienelement sichtbar (data-tour="…"), legt die Liste einen Ring darum und klappt zu; sonst führt der Knopf auf den Weg des Schritts. Die Schicht über der Seite trägt pointer-events: none: Es gibt keine Verdunklung, das Menü bleibt bedienbar, nur Pille und Liste nehmen Klicks an.
Ausblenden und zurückholen. „Ausblenden“ im Fuß, sind alle Schritte erledigt „Fertig“, setzt tour.stand auf −1; die Pille meldet sich nicht von selbst wieder. Der Fuß nennt den Weg zurück: Strg+K und „Tour“ (der Befehl heißt „Erste Schritte“) setzt beide Einstellungen zurück. Der Neustart steht dort und nicht in den Einstellungen, weil jemand, der die Tour sucht, sich nicht auskennt.
Escape in der Liste klappt sie zu und gibt den Fokus an die Pille zurück (Q08). Nur aus der Liste heraus: Auf der Seite gehört Escape dem, was dort gerade offen ist. Eine Fokusfalle hat die Liste aus demselben Grund nicht.
Erst die Einwilligung, dann die Tour (D-261008-startseite-funktioniert, 12.10.2026). Solange eine Frage, die sich von selbst öffnet, eine Antwort verlangt — heute die Einwilligung in die Nutzungserfassung —, steht keine Pille da (context/Vortrittschicht.tsx, über Tourfach.tsx). Was man selbst öffnet — Schublade, Schnellsuche —, hat keinen Vortritt: Dorthin zeigt die Tour.
Die Zweitmarke steht im Kopf der Liste (2026-10-05-logo-freier-kranz): das Okular in seiner Mindestgröße (components/marke/Okular.tsx).
Sie liegt in App.tsx außerhalb der Routen — wie der Rückmeldeknopf, damit sie beim Wechsel nicht neu entsteht und ihr Stand nicht springt. Aber nicht in UEBERALL, der Liste, die die Plugin-Bauteile dorthin bringt: Die verlangt eine Plugin-Kennung, und die Tour ist Gerüst — sie erzählt von allen Bereichen und gehört keinem.
Die Eule (21.09.2026, schwebend seit 22.09.2026)
Sie steht seit dem 21.09.2026 im Rahmen und damit auf jedem Schirm, der einen Bereich hat, nicht mehr nur in Leerzuständen. Vorher war sie in zwölf Bereichen — aber ausschließlich über EmptyState, also nur, solange nichts da war; auf einem gefüllten Schirm stand sie nirgends.
Sie schwebt unten links (F52, Christians Wahl N131: „Schwebende Ecke") — gegenüber dem Rückmeldeknopf unten rechts, auf dem Telefon wie er über der Hauptreihe. Zugeklappt ist sie ein runder Knopf mit der kleinen Figur (52 px), deren Stimmung die Lage sagt (müde ohne Schlüssel).
Das Ende eines Schirms steht über ihr (F79, 23.09.2026). Die Höhe der Figur ist FIGURHOEHE neben REIHENHOEHE (Schnellaktionen.tsx), und die Rollfläche in GeneralMenu.tsx hält unten lg + FIGURHOEHE + xl frei, am Telefon REIHENHOEHE + sm + FIGURHOEHE + xl — auf jedem Schirm mit Rahmen, nicht nur dort, wo die Eule steht: Der Rückmeldeknopf schwebt überall in derselben Höhe, und der Rahmen fragt nicht, was ein Plugin gerade zeigt (Grundsatz 43). Vorher lag auf dem Tablet die letzte Zeile der Einstellungen unter der Figur. verify:optik meldet so etwas seither als Fehler (unter-schicht).
| Bedienelement | Was es tut | Endpunkt |
|---|---|---|
| Figur („Die Eule" / „Eule schließen") | klappt das Fach auf und zu | — |
| Fach | ein kleiner Chat (KI-261013-eule-kleiner-chat): kein Spruch, keine Zeilen zu Zweck und Weg ohne Modell; oben die Hinweise und der Korb, dann die Runden des Eckengesprächs untereinander, darunter Vorschläge und Feld; rollt selbst, höchstens 60 % der Höhe | — |
| Vorschlag (etwa „Eine Reihenfolge vorschlagen“, KI20) | ein kleiner Knopf für die erste Nachricht, nur solange das Gespräch leer ist; vorgeschlagen wird nur, was über den Begleiter fragt und dessen Sache offen ist. Ein Vorschlag mit Feld („Eine Frage ans Wiki“) wählt das Ziel der nächsten Nachricht, „Frei fragen“ nimmt die Wahl zurück. Die Antwort steht darunter, darüber frei, ohne Blase, die getippte Frage oder der Titel des Angebots (ES-261008-begleiter-chat); der Klick vermerkt den Gebrauch, damit der leere Chat des Begleiters das Angebot auf jedem Gerät zuerst anbietet (KI90); was im Kontextkorb liegt, steht als Chips über den Angeboten und geht mit (KI41); eine neue Antwort hören Vorleser einmal als „Die Eule hat geantwortet“ | POST /api/begleiter/angebot, POST /api/begleiter/einstiege/vermerken |
| „Frag die Eule“ (Feld, „Senden“) | die freie Frage (KI-261013-eule-kleiner-chat) mit der Grenze der Stufe für freie Fragen; mit geht der Ort wie bei der Schnellsuche — Bereich und offenes Objekt als Kennung (KI74, N519), den Inhalt liest der Server mit den Rechten des Kontos —, das offene Gespräch der Ecke und der Kontextkorb; kein Text des Schirms | POST /api/begleiter/fragen |
| Vorschlagskarte (KI-261007-vorschlagskarten) | über den Angeboten, je Karte dieses Bereichs: „Anlegen“, „Bearbeiten“, „Nicht jetzt“, nach dem Anlegen „Ansehen“ und „Zurücknehmen“; ab zwei anlegbaren „Alle anlegen“ (KI-261015-vorschlaege-alle); liegt eine offen, trägt die Figur ihren Punkt | POST /api/begleiter/karten, …/karten/anlegen, …/karten/wegklicken, …/karten/zuruecknehmen |
| Abbrechen | während die Eule fragt: lässt die Antwort fallen; beantwortet der Server die Frage trotzdem, zählt sie. Vorleser hören das als Beschreibung des Knopfes; sichtbar schweigt die Eule beim Arbeiten (N438, KI41) | — |
| Escape, Schirmwechsel | schließen das Fach; lag der Fokus im Fach, geht er an die Figur zurück (KI41) | — |
Beim ersten Zeichnen fragt sie einmal das Budget ab, ob ein Schlüssel hinterlegt ist: GET /api/begleiter/budget (bis 24.09.2026 GET /api/tutor/budget). Ohne hinterlegten Modellschlüssel (C08) steht im Fach nur der Satz, wo der Schlüssel hingehört — kein Feld, kein Vorschlag; sie tut nicht so, als denke sie nach (Grundsatz 40). Mit Schlüssel werden die gebauten Angebote zu Vorschlägen (KI20); die übrigen fehlen in der Ecke, bis sie gebaut sind (KI18). Den Weg ohne Modell nennt sie seit KI-261013-eule-kleiner-chat erst, wenn eine Frage scheitert — dann ist er die Antwort. Was dahinter steht, sagt docs/seiten/begleiter.md, „Die Angebote der Eule“.
Sie kommt über UEBERALL aus dem Plugin-Register (register.client.tsx: { id: 'begleiter', bauteil: Eulenbegleiter } — bis 24.09.2026 unter der Kennung tutor, der Baustein selbst liegt seit NB09 Stufe 2 in begleiter/client/Eulenbegleiter.tsx), wie der Rückmeldeknopf. Den Bereich nimmt sie aus der Route (bereichFuerRoute, dieselbe Quelle wie BereichAusRoute), nicht aus useBereich(): UEBERALL hängt außerhalb jedes GeneralMenu, und dort fiel die Frage bis zum 22.09.2026 auf dashboard zurück — die Ecke bot auf jedem Schirm „Den Tag zusammenfassen" an. Wo die Route keinen Bereich hat (Anmeldung, Rechtstexte, Stil-Guide) oder niemand angemeldet ist, gibt es keine Ecke und keine Abfrage.
Was vor .App steht, muss schweben. Bis zum 22.09.2026 war die Ecke ein gewöhnlicher Block vor der Anwendung: Die Leiste verdeckte sie, und alles darunter rückte um ihre Höhe nach unten — ein leerer Streifen unter der Leiste auf jedem Schirm. Die Regel steht bei Leistenplatz in GeneralMenu.tsx.
(Hier stand bis zum 22.09.2026 ein Absatz über etwas, das nicht in UEBERALL steht, weil die Liste eine Bereichskennung verlangt. Das stimmt — nur gilt es für die Tour und nicht für die Eule, und es widersprach dem Absatz zwei darüber. Er steht jetzt bei der Tour.)
Die Leiste des Lern-Timers (26.09.2026, NB06)
Eine schwebende Glasleiste über Eule und Rückmeldeknopf, mittig, am Telefon zusätzlich über der Hauptreihe. Sie kommt über UEBERALL ({ id: 'timer', bauteil: Timerleiste }, timer/client/Timerleiste.tsx) und steht nur, solange ein Block offen ist oder jemand die Dauer wählt — sonst ist sie nicht da, auch nicht als leerer Platz. Ein Block überlebt so jeden Seitenwechsel. Ohne Anmeldung oder mit abgeschaltetem Timer fragt sie nichts und hört keinen Ruf.
| Zustand | Was dasteht | Knöpfe |
|---|---|---|
Wahl (nach TIMER_RUF mit waehlen) | „Wie lange?" | 15 / 25 / 50 Min. · Abbrechen (auch Escape) |
| läuft | „Lernblock" und die Restzeit, darunter eine Linie, die kürzer wird | Pause · Beenden |
| pausiert | „Pausiert" und die angehaltene Restzeit | Fortsetzen · Beenden |
| Zeit um | „Zeit um" und die überzogene Zeit mit „+" | Beenden · Auf {n} Min. kürzen |
| liegengeblieben (über der doppelten Zeit) | „Der Block läuft seit {dauer}. Wie soll er zählen?" — keine Zahl | Ganz zählen · Auf {n} Min. kürzen · Verwerfen |
Nach Beenden verschwindet die Leiste ohne Toast; bis zum 08.10.2026 sagte einer, wie viele Minuten gezählt sind (seither erscheinen keine Bestätigungen mehr, 2026-10-08-keine-erfolgsmeldungen). Dass ein verworfener Block nicht zählt, bleibt ein Hinweis, sichtbar ab Stufe 3 der Meldungseinstellungen. Farbe tragen nur Zeichen und Linie (N266): Violett, solange er läuft, gedämpft in der Pause, Warnfarbe, wenn die Zeit um ist.
Sie tickt, der Server nicht (Entwurf B, N310). Die Leiste holt den offenen Block beim Erscheinen, nach einer Anmeldung und wenn der Reiter wieder sichtbar wird — POST /api/timer —, und rechnet dazwischen jede Sekunde selbst, mit standVon aus timer/shared/lernblock.ts, derselben Rechnung wie der Server. Die eigene Uhr wird um den Abstand zur Uhr des Servers berichtigt. Beginnen und die Schritte gehen an POST /api/timer/starten und POST /api/timer/schritt; ein abgelehnter Schritt meldet sich als Fehler-Toast und holt den Stand neu (meist hat ein zweiter Reiter oder das MCP den Block schon beendet).
Sie läutet nicht. Ein geschlossener Reiter weckt niemanden; was überzogen ist, steht beim nächsten Blick da.
Das Ende eines Schirms steht auch über ihr. Solange sie steht, setzt sie ihre gemessene Höhe als CSS-Variable SCHWEBELEISTE (--schwebeleiste, Schnellaktionen.tsx) an die Wurzel des Dokuments; die Rollfläche in GeneralMenu.tsx rechnet sie zum Polster aus dem Absatz über die Eule hinzu und zählt sie sonst 0px. So fragt der Rahmen nicht, was ein Plugin zeigt (Grundsatz 43). Aufgefallen im Blick vom 26.09.2026: Ohne die Variable lagen die letzten Kacheln der Übersicht unter der Leiste (unter-schicht); danach meldete der Bericht dort nichts mehr. Angesehen am Telefon, hell und dunkel, laufend und in der Wahl (.blick-Läufe nachher-hell, nachher-dunkel, wahl).
Ein Tippen beginnt (15.10.2026, KN-261015-timer-vorbelegt, Stelle B17). Ein TIMER_RUF ohne Dauer beginnt den Block gleich, mit der vorgenommenen Dauer des jüngsten Blocks; vor dem ersten sind es 25 Minuten. Die Dauer nennt der Server in jeder Antwort des Timers (letzteMinuten, aus personal.lernbloecke gelesen, kein eigenes Feld); die Leiste legt sie in blockstand.ts ab, wo Startknopf und Kasten „Jetzt" sie lesen und anzeigen. Die Wahl zeigt nur ein Ruf mit waehlen — der schlichte Knopf „Andere Dauer" neben dem Startknopf. Das Fach des Schirms trägt der Block noch nicht; das braucht ein neues Feld und ist KN-261015-lern-timer-zaehlt-fach.
Gerufen wird sie von drei Stellen, alle über TIMER_RUF: aus der Nebenreihe (timer.lernen, §5), vom Kasten „Jetzt" auf der Startseite und vom Knopf „Lern-Timer · {n} Min." im Lerndurchgang von Studium und Karteikarten. Den Knopf bietet der Timer über seinen Anschluss an (ANSCHLUESSE.timer?.Startknopf, Vertrag Timerklientanschluss in @shared/types/anschluesse.ts); die beiden Schirme reichen ihn dem Lerndurchgang als zusatz, weil dieser selbst von anschluesse.client geladen wird und nicht zurückgreifen darf. So gibt es einen Timer und nicht drei, und wer im Lerndurchgang beginnt und ins Material wechselt, nimmt den Block mit.
Der Knopf steht nur, wenn er etwas tut. Er fehlt bei abgeschaltetem Timer und solange ein Block offen ist. Den offenen Block kennt nur die Leiste; sie meldet ihn über timer/client/blockstand.ts, einen kleinen Stand auf Modulebene, den der Knopf mit useSyncExternalStore liest — Leiste und Knopf liegen nicht im selben Baum, und ein Provider um die ganze Anwendung wäre für ein Ja oder Nein zu schwer. Ein Ruf bei offenem Block öffnet nach dem Beenden auch keine Wahl mehr. Angesehen am 26.09.2026 am Desktop und am Telefon, hell (.blick-Läufe knopf und knopf-klick): nach „Lern-Timer" und „25 Min." steht die Leiste unten, der Knopf ist verschwunden.
Was die Blöcke ergeben, steht im Studium (27.09.2026, N328): Der Timer reicht über denselben Anschluss auch den Kasten „Lernzeit" (ANSCHLUESSE.timer?.Verlauf, timer/client/Lernzeit.tsx), und das Studium stellt ihn im Reiter Lernen unter den Lerndurchgang (docs/seiten/study.md). Er holt den Verlauf neu, sobald die Leiste einen Block schließt — über denselben blockstand.ts.
Die Bitte nach einem Erfolg (10.10.2026, D-261008-erfolgsmomente)
Denotato bittet um etwas nur, wenn jemand gerade etwas geschafft hat, und nie mitten in einer Handlung (Florians Notiz vom 08.10.2026: „Only ask for something after success.“). Welche Momente als Erfolg zählen und welche Bitte auf welchen wartet, steht an einer Stelle: @shared/config/erfolgsmomente.ts. Bisher gibt es einen Moment und eine Bitte:
| Moment | Gemeldet von | Bitte | An wen |
|---|---|---|---|
Runde gelernt (lernen.runde) — die letzte Karte eines Lerndurchgangs ist bewertet, gleich in welcher Betriebsart | study/client/Lerndurchgang.tsx (Studium und Karteikarten) | Konto anlegen | nur ein Gastkonto |
Wie es aussieht. Eine Glaskarte unten, mittig im Inhalt, an der Stelle der Timerleiste und eine Stufe über ihr (components/bitten/Bittenstelle.tsx, eingehängt in App.tsx neben dem Impersonationsband, außerhalb der Routen). Sie federt von unten herein, dunkelt nichts ab und fängt den Fokus nicht; der Schirm dahinter bleibt bedienbar. Darauf „Runde geschafft.“, der Satz „Dein Gastkonto hängt an diesem Browser. Ein eigenes Konto erreichst du von jedem Gerät. Was du angelegt hast, kommt mit.“ und zwei gleich breite Knöpfe: Konto anlegen führt auf /register, Später schließt die Karte. „Später“ ist so groß wie „Konto anlegen“: Nein ist kein kleinerer Klick als Ja. Die Karte bleibt beim Schirmwechsel stehen, bis eine der beiden Antworten kommt.
Wann sie kommt (@shared/handlers/erfolg/bitten.ts, darfBitten):
- nur nach einem Moment, auf den die Bitte wartet — einem Gast also nie, bevor er eine Runde zu Ende gelernt hat;
- höchstens so oft je Sitzung, wie die Instanz erlaubt (Vorgabe: einmal);
- eine in dieser Sitzung abgelehnte Bitte kommt in ihr nicht wieder;
- nach „Später“ ruht sie so viele Tage, wie die Instanz sagt (Vorgabe: vierzehn), auch über Neuladen und Geräte hinweg.
Wo der Stand liegt. Wie oft die Sitzung gebeten hat und was in ihr abgelehnt wurde, liegt im Speicher, nach Sitzungskennung, wie beim Mailhinweis. Am Konto stehen zwei Einstellungen der Schicht nutzer: erfolge.erstmals (wann jeder Moment zum ersten Mal eintrat) und bitten.abgelehnt (wann jede Bitte zuletzt abgelehnt wurde). Keine eigene Tabelle, kein Browserspeicher. Die Grenzen stellt ein Admin unter Verwaltung › Neue Konten (bitten.grenzen, verwaltung.md).
Die Bitte führt zur gewöhnlichen Registrierung, wie die Gastzeile. In einer Gastsitzung macht die Registrierung das Gastkonto zum Konto, unter derselben Kennung (D-261008-gast-uebertrag, siehe anmeldung.md); deshalb sagt der Satz seit dem 10.10.2026, dass das Angelegte mitkommt. Nachweise: Bittenstelle.test.tsx, Lerndurchgang.erfolg.test.tsx, bitten.test.ts.
Gesten am Telefon (seit 07.10.2026, BW-261007-gesten)
Zuschnitt nach Christians Wahl „Schublade + Blatt" vom 07.10.2026.
- Die Schublade wischte nach links weg (bis zum 09.10.2026; sie ist mit dem alten Weg entfernt). Sie folgte dem Finger zum linken Rand hin ganz, nach rechts gar nicht; losgelassen jenseits eines Viertels ihrer Breite (mindestens 72 px) oder mit einem Schnipser geht sie mit der Geschwindigkeit des Fingers, sonst federt sie zurück. Ihre Liste rollt weiter (
touch-action: pan-y), und ein Tippen nach dem Wischen öffnet keinen Eintrag. - Ein Dialog ist am Telefon ein Blatt an der Unterkante. Volle Breite, oben gerundet, unten mit dem Abstand der Betriebssystemleiste; es schiebt sich von der Unterkante herein. Oben trägt es einen Griff, an dem es sich nach unten wegwischen lässt — nur dort, damit ein langes Formular rollt statt zu gehen. Der Griff ist für Vorleser unsichtbar; Kreuz, Schleier und Escape bleiben. Das Kreuz sitzt unter dem Griff auf der Titelzeile. Am Rechner bleibt das Fenster mittig.
- Der linke Rand gehört dem Zurück. In den ersten 24 px beginnt keine Geste von Denotato — weder das Wischen an einer Aufgabenzeile noch das Blättern im Kalender. Dort wischt das Betriebssystem oder der Browser zurück.
- Gerüttelt wird beim Einrasten: kurz, wenn eine Aufgabe per Wischen erledigt wird. Die Navigation rüttelt nicht (Guide §11.6). Das Rütteln liegt seit diesem Vorgang im Gerüst (
components/bewegung/haptik.ts,useHaptik()), nicht mehr im Plugin Einstellungen. - Die Lernkarte bleibt ohne Wischen (Teil des Zuschnitts): Bewertet wird weiter über die vier Knöpfe.
- Hochwischen auf der Leiste unten öffnet alle Bereiche (seit 08.10.2026): dieselbe Grenze wie beim Wegwischen eines Blatts, in die andere Richtung. Ein Griffstrich oben mittig zeigt es an, den Knopf dazu trägt die Leiste rechts (Pfeil nach oben, „Alle Bereiche“). Das Blatt geht am Griff nach unten weg wie jedes Blatt (§1, „Die Telefonleiste“).
Belegt am 07.10.2026 mit /ansehen am Telefon (dunkel): 250 px am Griff nach unten schließen das Blatt, 30 px federn zurück, 200 px nach links schließen die Schublade. Das Datumsblatt (DateField) bleibt ein angehängtes Klappblatt und kein Blatt an der Unterkante: Es hängt an seinem Feld. Wochentagskürzel und Monatsname im Blatt stehen in der Sprache des Kontos, und die Woche beginnt, wie unter zeit.wochenstart gewählt, am Montag oder Sonntag (09.10.2026, VA-261009).
Was fehlt
- Die Brotkrume gibt es zweimal, und nur in zwei Bereichen. Das gemeinsame Bauteil
components/menus/shell/Brotkrume.tsxbenutzen Studium und Material. Der Dokumentenbereich benutzt es nicht — er hat inEditorschirm.tsxein eigenesstyled.navnamensBrotkrumen. Aus allen übrigen Unterschirmen führt kein Weg zurück außer dem des Browsers. (Hier stand bis zum 22.09.2026 das Gegenteil: „es gibt eineBrotkrume, aber sie steht nur im Dokumentenbereich" — genau verkehrt herum.) - „Melden" öffnet die Liste, nicht die Person. Seit dem 17.09.2026 führt die Aktion auf
?v=lange-nicht— das steht in §5 und stimmt. Was der Guide (S12) meint, ist die eine Person mit dem längsten Kontaktabstand; was aufgeht, ist die nach ihr sortierte Liste. Die Restlücke steht ausführlich in docs/seiten/people.md. (Hier stand bis zum 22.09.2026 „führt auf/people" und widersprach damit §5 derselben Datei.) timer.lernen(S19) gibt es nicht— gebaut am 26.09.2026 (NB06): Die Nebenreihe ruft die Leiste des Lern-Timers (§5 und „Die Leiste des Lern-Timers"). Am breiten Schirm, wo es keine Schnellaktionen gibt, rufen sie seit demselben Tag Studium und Karteikarten mit dem Knopf „Lern-Timer" im Lerndurchgang. Die andere Schnellaktion außerhalb der neun steht unten als Punkt 20.material.foto(S14) führt auf ein Formular, das jetzt eine Datei annimmt (seit 17.09.2026) — aber die Kamera ruft es nicht auf. Der Knopf heißt deshalb weiter „Material" und nicht „Foto";captuream Dateiwähler wäre der nächste Schritt. Das ist Arbeit an BE24 (Upload), nicht am Rahmen — hier steht sie nur, weil die Schnellaktion im Rahmen liegt.- Kein Tastenkürzel je Bereich.
ggefolgt von einem Buchstaben wäre der übliche Weg; heute führt jeder Weg über Strg+K. Strg+Leertaste wechselt zwischen Bereichen (§1, „Der Wechsler und die Kapsel“, 08.10.2026) — eine Folge, kein Kürzel je Bereich. - Die Leiste zeigt keine Zahlen. Wie viele Karten fällig sind, sieht man erst im Bereich — außer am Telefon, wo die Schnellaktion sie trägt.
- Kein „zuletzt besucht" über Bereiche hinweg — und was die Schnellsuche führt, ist schwächer, als dieser Satz klingen lässt:
merkeZuletzt(components/search/zuletzt.ts) wird ausschließlich ausSchnellsuche.tsxgerufen. Gemerkt wird also, was man über die Schnellsuche geöffnet hat, sieben Zeilen weit imlocalStorage. Wer einen Bereich über die Leiste betritt, hinterlässt gar nichts. Seit dem 08.10.2026 führt der Rahmen daneben einen Verlauf der Bereiche im Speicher des Tabs: Der Wechsler zeigt die zuletzt benutzten zuerst, die Kapsel führt in den vorigen zurück (§1, „Der Wechsler und die Kapsel“). - Der Rückfall fehlt in fünf Bereichen. Gemessen am 22.09.2026 mit
verify:rueckfall: Von siebzehn Bereichen sieht der Nachweis zwölf überhaupt an — nicht dabei sinddashboard,documents,flashcards,calendarundsettings. Er sieht sie nicht, weil er nur zählt, wasuseMenuScreenundsetzeLaedtbenutzt — wer kein Ladezeichen setzt, wird nicht gefragt, ob er einen Stand hat. Grundsatz 33 meint jeden Bereich, der von außen liest; der Kalender liest von außen. (Hier stand bis zum 22.09.2026 „benutzt werden sie bisher nur von/moodle" — überholt seit dem 21.09.2026 und im Widerspruch zu §7 derselben Datei.) - Der Nachweis zählt Effekte, nicht Fehlgriffe am Haken.
useNachAnmeldung(laden)mit einemladen, das nicht in einemuseCallbacksteht, fragt bei jedem Rendern neu — eine Endlosschleife, die niemandem auffällt außer dem Server.verify:archsieht sie nicht: Es prüft Effekte, und hier gibt es keinen mehr. - Die Ausnahmeliste des Nachweises wird von Hand gepflegt. Jeder Eintrag trägt einen Grund — aber nichts prüft, ob der Grund heute noch stimmt. Wer aus einer Suche beim Tippen ein Laden beim Aufbauen macht, nimmt seine Ausnahme mit.
- Ein unangemeldeter Aufruf eines Bereichsschirms wird nicht abgefangen. Keine der Routen ist bewacht; wer
/tasksohne Sitzung öffnet, bekommt den Schirm samt Fehlerzeile statt/login. Das ist der Grund, warumuseNachAnmeldungnicht aufisAuthenticatedsperrt: Die Sperre ersetzte den Satz durch einen Kreisel, der nie aufhört. - Zahlenspalten der Datenansicht ohne Geber fallen auf die Geräteeinstellung zurück.
renderCell/zellentextsind reine Funktionen und bekommen Zeit- und Zahlgeber seit dem 21.09.2026 hereingereicht (I05). Wer sie ohne ruft — heute nur der jsdom-Nachweis —, bekommtspracheJetzt()und die Zone des Browsers. Ein Rückfall, der nichts weiß, ist besser als ein fest genanntes'de-DE', aber er bleibt ein Rückfall. - Die Zahlenspalte kennt kein Format je Spalte. Nachkommastellen, Einheiten und Prozent stehen alle als blanke Zahl;
ColumnDefinitionhat kein Feld dafür, und eine Geldspalte sieht aus wie eine Stückzahl. Der aktive Eintrag der Leiste hält sich nicht an §7.3.Behoben am 26.09.2026 (E16): Leiste und Schublade zeichnen den aktiven Eintrag als Fläche (16 %) mit Rand (55 %) in seiner Bereichsfarbe; der Strich darunter ist fort, und die Marken der übrigen Einträge tragen nur noch ihren Rand (N318).- Der Klick in der Leiste ist nachgewiesen, aber nicht gesehen. Die Proben laufen in jsdom; sie zeigen, dass der Baum wechselt, nicht, dass das Bild wechselt. Eine Bewegung, die in einem echten Browser hängenbleibt, sähe in jsdom genauso grün aus —
Schirmwechselsteht bewusst ohne Abgang da, aber bestätigt hat es noch niemand (BE04, „Fertig, wenn"). - Das Impersonationsband ist gesehen (V06, 27.09.2026, mit
/ansehen --kontowechselund zwei Wegwerf-Konten): hell und dunkel, Telefon und Desktop, nur lesen und bearbeiten. Am Telefon steht es in zwei Zeilen — der Satz oben, die Knöpfe darunter —, und die Leiste rückt um genau diese Höhe. Beide Kontonamen waren 15 Zeichen lang; mit einem deutlich längeren ist eine dritte Zeile möglich, sie schöbe die Leiste ebenso mit. Die Begrüßung darunter nannte zuerst den eigenen Namen; seit N338 nennt sie den Anzeigenamen des Zielkontos, den der Impersonationsstand alstargetDisplayNameliefert — gesehen am selben Tag: „Guten Tag, Blickziel". colors.status.onwar eine Farbe für fünf Flächen.Seit F21 wählt jede Stelle den Ton ihrer tatsächlichen Fläche:status.onDangerund Geschwister für Zustände,handlung.onfür die Anwendungsfarbe,knopf.primaer.textfür den Primärknopf undschriftAufFlaeche(farbe)für erst zur Laufzeit bekannte Farben. Der alte Sammelton ist aus Palette, Theme und Typ entfernt;verify:statustoeneweist jede neue Lesestelle ab.- Kein Weg von einem Treffer zurück in die Schnellsuche. Wer daneben greift, hat nur Strg+K, und das Feld setzt beim Öffnen zurück (
Schnellsuche.tsx, „Beim Oeffnen zuruecksetzen"). Die Merkzeile von eben steht dann zwar oben, der getippte Suchtext ist weg — man tippt ihn ein zweites Mal. Das Zurücksetzen ist Absicht (eine Suche, die mit dem alten Wort aufgeht, sieht aus wie ein Fehler); was fehlt, ist der andere Fall: dieselbe Suche noch einmal öffnen, statt neu beginnen. Die Räume hinter „Mehr" stehen ohne Zeichen da.Entfallen am 09.10.2026: „Mehr“ ist mit der Bereichszeile entfernt (2026-10-09-neue-navigation-immer.md); in der Seitenleiste trägt jeder Eintrag sein Zeichen. Bis dahin: Jeder Eintrag der Bereichszeile trägt sein Zeichen aus der Deklaration — die hinter „Mehr" nicht:Wahlmoeglichkeitkennt nurwertundlabel, undTopNavigationButtons.tsxwirftitem.zeichenbeim Umbauen weg. Der Knopf selbst zeigt „mehr" und sagt damit nicht, dass Tutor und Material dahinterliegen; wer sie sucht, muss ihn aufklappen.gedaechtnis.frage(S11) gibt es nicht — bis zum 26.09.2026 die zweite fehlende Schnellaktion nebentimer.lernen(Punkt 3), seither die einzige; sie gehört nicht zu den neun des Guides. Am 23.09.2026 waren acht gebaut, der Guide wählt neun; der Rahmen las sich bis zum 22.09.2026, als fehle genau eine. Notiert war sie nur in docs/seiten/memories.md, also an der Seite und nicht am Rahmen — dabei ist die Reihe der Rahmen.- Die Arten der Schnellsuche sind nicht übersetzt. Seit dem 22.09.2026 gehen die Gruppenköpfe durch
t(...)(components/search/gruppen.ts), aber im englischen Katalog stand am 22.09.2026 von allen Arten genau eine:Gedächtnis. Eine englische Oberfläche zeigt also weiterhin „Dokument", „Person", „Quelle" über ihren Treffern. Der Weg ist gebaut, der Katalog ist leer — und das bleibt so, bis jemandoberflaeche.en_us.jsonnachträgt. - „Eigene Szene" steht nicht im Sprachkatalog. Die Szenenwahl zeigt seit dem 22.09.2026 auch
eigen, wenn jemand eine eigene Szene fährt (vorher hob sie gar nichts hervor). Der Satz dafür ist neu und hat keinen englischen Eintrag;verify:spracheist gelb und nicht rot, also fällt er auf Deutsch zurück, statt zu fehlen. - Der Anlegeknopf in der Reiterreihe ist gerechnet, nicht gesehen. Seit N130 (22.09.2026) steht er am rechten Ende der Ansichtsreiter statt in einer eigenen Zeile darüber; das spart auf
/admindie gemessenen 46 px am Rechner und 52 px am Telefon. Geprüft ist nur der Aufbau (Anlegefach.test.tsx: Knopf und Reiter in einer Reihe, das Formular darunter). Zwei Stellen sollte ein Browserlauf ansehen: ein Schirm mit vielen Reitern am Telefon, wo die Reiter jetzt in einem schmaleren Platz rollen, und ein Schirm ganz ohne Reiter, wo der Knopf jetzt rechts statt links steht. Nachtrag 23.09.2026 (F69): Der erste ist gesehen und war ein Fehler — auf/tasksund/adminendete die Reihe am Telefon hart vor dem Knopf, und nichts zeigte, dass sie rollt. Seitdem blendet ihr Rand aus (siehe Ansichtsreiter).verify:optikmeldet den angeschnittenen Reiter weiter als Hinweis „verdeckt", weil die Kontrastmessung seinen Kasten am Fenster beschneidet und nicht an der Reihe; im Bild ist es der Rand. Der Schirm ohne Reiter ist noch nicht angesehen. - Die Filterleiste spricht beim Zuklappen nur Deutsch. „einen Wert zeigen", „{n} Werte zeigen" und „zuklappen" sind neu (22.09.2026) und stehen nicht in
oberflaeche.en_us.json; sie fallen auf Deutsch zurück, wie „Eigene Szene" (Punkt 22). - Die schwebende Eule ist gerechnet, nicht gesehen (F52). Die Tests lesen
position: fixedaus dem Stilblatt; wie die Figur unten links neben der Rücknahmeleiste (unten Mitte) und über der Hauptreihe auf einem schmalen Telefon steht, zeigt erst ein Bildschirm. Ihre Aufschriften („Die Eule", „Eule schließen") stehen außerdem nicht inoberflaeche.en_us.json. Nachtrag 23.09.2026 (F79): Über der Hauptreihe und am Ende eines Schirms ist sie jetzt gesehen, auf Telefon, Tablet und Desktop; neben der Rücknahmeleiste noch nicht, und die Aufschriften fehlen weiter. - Die Figur ist ein Knopf, und Guide §2.3 sagt „nicht auf Knöpfen". Mit der schwebenden Ecke (N131) ist eine Antwort gebaut, die der Guide noch nicht kennt; §2.3 braucht die Ausnahme ausdrücklich, oder die Figur wird still und ein Wort trägt den Klick.
- Reiterzeichen gibt es erst in
/admin, und gesehen hat sie kein Browser. Seit N132 (22.09.2026) nehmen Abschnitte und Ansichtsreiter ein freiwilligeszeichen; die anderen Schirme tragen noch keines, und ein Schirm, der Wörter und Zeichen mischt, sähe unfertig aus.Reiterzeichen.test.tsxprüft Aufbau und Namen der Knöpfe, nicht, ob die Reihe am Telefon mit Zeichen noch ohne Rollen auskommt. - Der kleinere Abstand unter der Leiste ist gerechnet, nicht gesehen (23.09.2026). Ob 16 px zwischen Leiste und Ortwort jetzt zu knapp wirken, zeigt erst ein Blick nach dem Bauen. Am Server fehlte außerdem noch F52: Das dort ausgelieferte Stilblatt stammte vom 22.09.2026, 20:17 UTC, und kannte
--denotato-bandhoehenicht. Der Streifen der Eule war dort also noch zu sehen. - Die Befehle der Schnellsuche stehen ohne Zeichen da (N134, 23.09.2026). Die Registry hat keines, das „Befehl" meint; gewünscht ist
befehl. Das Zeichen des Zielbereichs taugt nicht als Ersatz: „Farbschema wechseln" hat kein Ziel, und eine Gruppe, in der nur die Hälfte ein Zeichen trägt, verbietet Guide §7.3. - Ein Treffer trägt das Zeichen seines Bereichs, nicht das seiner Art. Modul, Thema, Prüfung und Karteikarte tragen alle die Kappe, obwohl die Registry
pruefungundkartekennt; die „Aufgabe" des Tutors trägt dessen Sprechblase neben dem Wort „Aufgabe". Ein Zeichen je Art müsste der Bereich selbst nennen — als Feldzeichenam Treffer, den der Server aus der Deklaration füllt, oder als Anschlusssuche.zeichen(art). Der Kern darf die Arten nicht auf Bereiche abbilden (Grundsatz 43). „Zuletzt" hat kein eigenes Zeichen.— geklärt am 30.09.2026 (E12): Die Zeilen tragen weiter das Zeichen ihres Ziels, und das bleibt so.verlaufgibt es seit E12, aber vor jeder Zeile derselben Gruppe sagte es nur, was der Kopf „Zuletzt" schon sagt; das Zeichen des Bereichs sagt, wohin die Zeile führt. Ein eigenesbefehlist aus demselben Grund verworfen.verlaufträgt stattdessen das Werkzeug „Verlauf" im Raum Konto (vorherzeit, die Sanduhr des Stundenplans).- Die Zeichen der Schnellsuche und des Rückmeldeknopfs sind gerechnet, nicht gesehen (N134). Die Nachweise laufen in jsdom und prüfen Aufbau, Namen,
aria-hiddenund die Strichfarbe im Artknopf. Ob 14 px neben einem Titel insmmittig sitzen und ob der Käfer im gefüllten Knopf der gewählten Art bei 16 px wirklich erkennbar ist — der Kontrast ist gerechnet, nicht angesehen —, zeigt erst ein Browser. - Das Warnzeichen am Zähler steht schon beim leeren Formular. Wer den Rückmeldeknopf öffnet, sieht sofort „noch {n} Zeichen" mit Warnzeichen — vorher stand dort dieselbe Aussage in Warnfarbe, also nichts Neues, aber jetzt deutlicher. Ob die Warnung erst nach dem ersten Anschlag erscheinen soll, ist eine Frage an Christian.
- Die angeheftete Knopfspalte hat keine Kante (F64, 23.09.2026). Rollt eine breite Tabelle seitwärts, verschwindet der Rest unter den Knöpfen, ohne dass eine Linie oder ein Schatten sagt, dass dort etwas weitergeht — Papier trägt keinen Schatten (Guide §5). Die Rollleiste unter der Tabelle ist heute der einzige Hinweis. Ob eine leise Kante erscheinen soll, sobald etwas darunter liegt, ist eine Gestaltungsfrage.
- Das Bildschirmfoto der Rückmeldung ist eine Nachzeichnung (N151, 23.09.2026). Glas (
backdrop-filter) zeichnet sie nicht weich, und wasposition: stickyoben festhält, steht dort, wo es ungerollt stünde. Für ein genaues Bild gibt es „Eigenes Bild wählen". Ob die Aufnahme am Desktop stattdessen die Bildschirmfreigabe des Browsers (getDisplayMedia) anbieten soll — echte Pixel, aber eine Rückfrage des Browsers —, ist offen. - Das Kästchen „Bildschirmfoto mitschicken" ist das native Kästchen des Browsers — blau, wie überall, wo
CheckLabelsteht (Stil-Guide, Tutor, Kalender). Ein Kästchen in Denotato-Gestalt gibt es noch nicht. - Tutor, Material und Noten lassen sich keinem Konto einzeln nehmen (N149; vorerst so gewollt, N223). Christian hat am 24.09.2026 die Möglichkeit C gewählt: Die drei bleiben am Studium, und das Konto, für das der zweite Satz galt, bekommt sie mit C41 ohnehin (C51). Ein eigenes Merkmal kommt erst, wenn ein Konto sie wirklich nicht haben soll. Was vorher dastand: Ihr Knoten wird aus dem Studium abgeleitet (§1); wer das Studium hat, hat die drei. Damit ist der zweite Satz von N149 nicht umgesetzt: Das Konto, für das er galt, behält die drei, solange es das Studium hat, und
rechte_baumsagt für es angold.noten„erlaubt,uebergold.study" statt „nicht gewährt". Drei Wege liegen zur Wahl. B1: je ein eigenes Merkmal für Tutor, Material und Noten (der Timer hat seines seit N328, Punkt 43) samt einer Wanderung, die sie jedem gewährt, der heute das Studium hat — danach nimmt Christian sie in Meta, wem er will. Ein halber bis ein ganzer Tag: Deklarationen, Sperren der Wege, der Anschluss der Noten, Befehle und Schnellaktionen, die Pläne vonverify:bereichstor, MCP, die Schalter der Einstellungen,BEREICHSGRUPPEN. B2: Verbote für Pfadrechte, die „zweite Stufe". Der Baum lässt ein Verbot am Knoten die abgeleitete Vergabe schon heute stechen (rechtepfade.test.ts, „lässt ein Verbot am Knoten stechen"); es fehlen Tabelle, Wanderung, Schreibweg und Schirm — ein Tag oder mehr. C: so lassen — die drei gehören zum Studium, der zweite Satz von N149 entfällt, und C41 entscheidet für das Konto nur noch über Schlaf und Rückblick (deren Sperre an A03 hängt). Kein Aufwand;noten/plugin.tsbegründet das heute schon („Kein eigenes Merkmal"). - Ein Befehl der Schnellsuche in einen ausgeschalteten Bereich bleibt stehen (§4). Die Leiste zeigt den Bereich nicht mehr, der Befehl führt trotzdem hin, und dort steht nur, dass er ausgeschaltet ist. So war es schon vor N149 — das Feld
bereichfragte die Gewährung, nicht den Schalter. Ob Befehle wie die Leiste auch dem Schalter folgen, ist eine kleine Entscheidung. - Unterbereiche fehlen unter den Bereichen der Schnellsuche. Die Liste im leeren Zustand nimmt nur die obersten Bereiche (
visibleNavItems). Tutor und Material erreicht man dort über ihre Befehle, Noten gar nicht: Es gibt weder einen Befehl noch einen Eintrag. Noten steht nur in der Seitenleiste, im Blatt der Telefonleiste und als Kachel auf der Übersicht. - Zwei abschaltbare Bereiche haben keinen Schalter. Leben, Einstellungen, Schlaf und Rückblick tragen
abschaltbar: true, aber kein Merkmal;bereichslagegibt ihnen deshalb immeraktiv. Schlaf und Rückblick haben seit dem 27.09.2026 ihren Schalterplugin.<id>.aktiv(N363, D33), denbereichslagenicht kennt; die Bereichswand fragt ihn eigens (leseBereichslagenMitSchaltern), die Systemtafel zählt nur Bereiche mit Schirm und führt beide nicht. Leben und Einstellungen bleiben ohne. Die Übersicht gehört seit A01 zum Gerüst (abschaltbar: false) und braucht keinen. - Die Wege jedes Bereichs sind gemessen (seit 27.09.2026, D33).
verify:bereichstorhat für jeden abschaltbaren Bereich mit Merkmal einen Probenplan (rights/nachweis/probenplaene/), zusammen 236 Wege in 16 Bereichen;NOCH_NICHT_ABGEDECKTist leer.verify:rechteTeil 10 prüft Baum, Sperre und Oberflächenrechnung für die Räume im eigenen Prozess, nicht über HTTP: Der Dienst auf 5443 trägt die Rechnung von N149 erst nach dem nächsten Neustart, und ein Nachweis gegen den laufenden Dienst misst bis dahin den alten Stand. - Die Einstellungen fragen für ihre Schalter
grantedFeaturesam Merkmal, nicht den Baum (SettingsMenu.tsx, vier Stellen). Das ist heute gleich, bis auf einen Fall: Ein Konto mit dem Grant, aber ohne die Fähigkeit eines der fünf Bereiche mit Fähigkeit sähe den Schalter eines Bereichs, den Leiste und Wege ihm nicht zeigen. Daneben steht inhandlers/requests/accessHandler.tsnochisVisiblemit eigener Rechnung am Merkmal — ohne einen einzigen Aufrufer. timerhat keinen Schirm, aber einen Knoten.Erledigt am 27.09.2026 (N328, NB06): Der Timer hat ein eigenes MerkmalFeature.TIMER(gold.timerinFEATURE_ZU_PFAD), einen Schalter „Lern-Timer" in den Einstellungen (Gruppe Studium) und ist für neue Konten an. Bestehende Konten bekommen ihn über den Klick in Meta (N306/F08); bis dahin fehlen ihnen Knopf, Leiste, Schnellaktion und der Kasten „Lernzeit". Vorher wurdegold.timerwie Tutor aus dem Studium abgeleitet.- Noten hat keine eigenen Wege. Der Schirm liest die Module über den Anschluss des Studiums (
ANSCHLUESSE.studium?.module), und die Wege dahinter fragengold.study. Ein Verbot angold.noten(B2) nähme den Schirm, nicht die Zahlen — die stehen weiter unter Studium. - Die ersten Schritte der Tageslage (Übersicht) fragen den Knoten des Merkmals, nicht den des Bereichs (
schrittSichtbarinlagestand.ts, überisGrantedundisActive). Heute gleich, weil der Knoten jedes Raums aus seinem Merkmal folgt; mit B1 oder B2 gehört das nachgezogen. - Die Umstellung auf den Baum ist gerechnet, nicht gesehen. Für jedes bestehende Konto ändert sich an der Oberfläche nichts, und die Nachweise laufen in jsdom und im eigenen Prozess. Einen Blick (
/ansehen) gab es nicht, weil der Stand des Zweigs nirgends läuft und der Bau des Frontends, den/ansehendafür braucht, mehr Speicher verlangt, als der Rechner neben dem laufenden Dienst frei hat (23.09.2026). Nachzuholen nach dem Einspielen, mit einem Konto ohne Studium: Seitenleiste, Übersicht und der Weg nach der Anmeldung. Ein Bereich, den die Einstellungraeumein den Raum Konto stellt, fehlt in der Seitenleiste.Erledigt am 08.10.2026 (NV-261007-seitenleiste-schliff): Er steht im Abschnitt seines Ausgangsraums, und die Einstellungen bieten Konto nicht als Raum an (Christians Wahl; „Die Seitenleiste“, Abschnitte je Raum).Was die Sichtprüfung der Seitenleiste offen ließ(07.10.2026).Erledigt am 08.10.2026 (NV-261007-seitenleiste-schliff): eigenes Zeichenseitenleistefür „Alle Bereiche“, Verlauf am unteren Rand der Rollfläche, Blatt aus Glas; „Verwandt“ zeigt kein Raumabzeichen, und die Übersicht am Tablet filtert die Kacheln statt der Raumkapsel.- Der Filmstreifen zeigt das Wegwischen nicht.
/ansehen --filmstreifenhält die Uhr an, bevor das Blatt hereingefahren ist; ein--ziehedanach greift ins Leere. Das Wegwischen ist deshalb nur im Standbild belegt (Klick, Ziehen, Foto: das Blatt ist fort) und im jsdom-Test vonuseWegwischen, nicht als Bewegung Bild für Bild. Ebenso nicht gesehen: das Wischen mit einem echten Finger (Playwright zieht mit der Maus) und die Rückwisch-Geste von iOS am linken Rand. - Die Leiste unten am Telefon zeigt den Entwurf der Leiste nicht. Sie steht in
App.tsxaußerhalb der Kopfleiste und damit außerhalb des Rahmens, der den Entwurf von „Leiste bearbeiten“ weitergibt; sie zeigt erst den gespeicherten Stand (OE06). Am Telefon gibt es den Modus ohnehin nur über das Kontomenü der Kopfleiste. - Ein Bereich außerhalb der Vorgabe lässt sich nicht als fester Platz hinzufügen. Die Reihe „Feste Plätze der Seitenleiste“ zeigt die Vorgabe aus
bereiche/festePlaetze.tsund was die gespeicherte Folge darüber hinaus nennt; ein Knopf, der einen weiteren Bereich der Folge hinzufügt, fehlt (OE06). Heute geht das nur über den Wert vonoberflaeche.reiterselbst.
Meldungen als Glas (F66, 25.09.2026). Toasts verwenden den Werkstoff glas; Text und Fläche bleiben die normale Glastinte und Glasfläche. Den Zustand zeigt seit E-261008-eigenes-toastsystem nur ein Punkt vorn in der Zustandsfarbe; Kante und Zeitbalken gibt es nicht mehr.
Die Kurzmeldungen (E-261008-eigenes-toastsystem, 12.10.2026). Die Toasts kommen aus einem eigenen Bauteil (components/feedback/kurzmeldungen/) statt aus react-toastify. Christian wählte am 12.10.2026 jeweils die Empfehlung: unten mittig, wo die Rücknahmeleiste steht — über den Figuren, am Telefon über der Reihe der Schnellaktionen, mittig im Inhalt neben der Seitenleiste; unten rechts hatten die Karten den Rückmeldeknopf verdeckt. Eine Glaspille mit dem Zustandspunkt vorn; ein langer Satz bricht um, die Ecke bleibt die halbe Mindesthöhe. Die Dauer richtet sich nach der Länge, vier bis zwölf Sekunden, ein Fehler doppelt so lang, ohne Zeitbalken; die Zeit steht, solange der Zeiger auf der Karte liegt, der Fokus in ihr ist oder der Tab verborgen. Tippen schließt (und führt aus, was die Meldung verspricht), ebenso nach unten Wischen und Escape. Höchstens drei stehen zugleich, die neue unten; die vierte schiebt die älteste hinaus. Steht die Rücknahme- oder die schwebende Auswahlleiste, rücken die Meldungen um deren Höhe hinauf. Vorgelesen wird über zwei Ansagen, die immer im Baum stehen: Fehler über alert, alles andere über status. Nachweise: toastHelper.container.test.tsx (eine Karte je Satz, höchstens drei, die Ansagen), verify:statustoene (Glas, kein Seitenstreifen, ein Ton je Art).
Keine Bestätigungen (2026-10-08-keine-erfolgsmeldungen, 08.10.2026). Was gelungen ist, erscheint nicht mehr als Toast, für alle, in beiden Modi und auf jeder Stufe. Christian: „Erfolgsmeldungen allgemein raus. Es sind aktuell viel zu viele Toasts für Trivialitäten“. Die Regel steht an einer Stelle, zeigen in meldungsstufen.ts; die Aufrufer sagen weiter, dass sie einen Erfolg melden, und die Konsole bekommt ihn wie bisher. Fehler, Warnungen und Hinweise bleiben, ebenso die Zeile „Denotato hat gemeldet …“ (zeigeSelbstmeldung) und die technische Zeile des Entwicklermodus an Fehlern. Keiner der entfallenen Toasts trug einen Handgriff (Zurücknehmen, Öffnen, Verweis). Die Probe in den Meldungseinstellungen zeigt die leiseste Art, die die gewählte Stufe noch durchlässt (siehe settings.md). Nachweise: verify:meldungen (keine Stufe zeigt eine Bestätigung) und toastHelper.test.ts.
Ausgenommen: Bestätigungen, deren Wirkung niemand sieht (NV-261007-seitenleiste-schliff, Schritt 8, 09.10.2026). Christian am 08.10.2026: „Bleiben Toast, aber neues Toastsystem von Denotato intern, damit sie ins Theme passen.“ Der Aufruf kennzeichnet sie mit ToastType.CONFIRMATION (Art bestaetigung in meldungsstufen.ts); erraten wird nichts nach Kennung oder Satz. Sie erscheinen auf jeder Stufe außer „Still“ und in beiden Modi, mit grünem Punkt; zweimal derselbe Satz steht als eine Karte. Gekennzeichnet sind: die Zwischenablage (Codeblock, Zitat, Sammelmappe, Briefing), „Fehlermeldung/Wunsch angekommen“, „Lernblock beendet — n Minuten gezählt“, „n XP gutgeschrieben“ (nur mit XP), Inhaltsbreite und Tabellenumbruch aus der Schnellsuche und „Konto angelegt“, seit D-261008-registrierung-gleich (10.10.2026) nur noch, wenn die Anmeldung nach der Registrierung ausbleibt (beta). Stumm bleiben „Angemeldet als …“ (die Weiterleitung zeigt es) und die Sätze des Anmerkungsfelds (die Liste zeigt die erledigte Anmerkung). Nachweise: verify:meldungen (eine unsichtbare Wirkung meldet sich auf jeder Stufe außer Still), toastHelper.test.ts und toastHelper.container.test.tsx.
Gleiche Meldungen stehen einmal (NV-261007-seitenleiste-schliff, 08.10.2026). Kommt eine Warnung oder ein Hinweis mit demselben Satz, solange die erste Karte noch steht, erneuert er diese, und ihre Zeit beginnt von vorn. Anlass war „Einstellung gesetzt“, das beim Einschalten der neuen Navigation zweimal erschien; seit Bestätigungen nicht mehr erscheinen, bündelt sie den wiederholten Handgriff, etwa dreimal „Zeile löschen“ an einer Tabelle mit einer Zeile, und die wiederholte Selbstmeldung. Fehler stehen weiter je für sich, weil jeder seinen Meldeknopf mit eigenem Umstand trägt. Das Schreiben, das niemand ausgelöst hat, steht in NV-261008-raumabgleich-leise. Nachweise: toastHelper.test.ts gegen das Lager der Kurzmeldungen, toastHelper.container.test.tsx mit dem echten Bauteil (eine Karte).