# Cockpit Die Startseite. Jede Kachel beantwortet eine Frage auf einen Blick. ## Welche Kacheln erscheinen Es gibt fünf: **Vermögensentwicklung**, **Einnahmen und Ausgaben**, **Meine Ausgaben**, **Kontostände** und **Offene Vorgänge**. Welche davon gezeigt werden, steht im Einstellungsdialog unter *Darstellung* – der Katalog dazu in `Cockpit::KACHELN`, die Auswahl als kommagetrennte Liste unter `cockpit_kacheln`. Vorgabe ist: alle. Eine abgewählte Kachel wird nicht nur ausgeblendet, sondern gar nicht erst berechnet – `CockpitController::index()` holt die Daten je Kachel einzeln. Wer das Cockpit entschlacken will, macht es damit auch schneller. Die Reihenfolge im Raster ist die des Katalogs, nicht die der Ankreuzfelder: Ein Formular liefert Ankreuzfelder in der Reihenfolge des HTML, und die wäre für den Nutzer keine sinnvolle Sortierung. ## Vermögensentwicklung Ein gestapeltes Balkendiagramm der **Kontostände zum Monatsende** über die letzten zwölf Monate – ein Balken je Monat, ein Farbton je Konto. ### Woher die Zahlen kommen Welche Konten zählen, entscheidet allein der Schalter „nur aktive“. Das Σ-Kennzeichen (`in_summe`) spielt hier **keine** Rolle – anders als in der Kontenübersicht. Stillgelegte Konten tragen es meist nicht; würde es mitfiltern, fiele beim Ausschalten des Schalters genau das weg, was man sehen will. Die Summe der Kachel kann bei ausgeschaltetem Schalter deshalb von der Summe der Kontenübersicht abweichen. Der Stand eines Monats ist der Stand des Vormonats plus dessen Bewegungen: * `Buchung::saldenJeKonto()` liefert den Stand am Tag vor dem Zeitraum – alles Ältere steckt damit im ersten Balken. * `Buchung::bewegungenJeKontoUndMonat()` liefert die Bewegungen innerhalb des Zeitraums, nach Monat getrennt. Zwei Abfragen statt zwölf Stichtagsabfragen. Beide Methoden zählen dieselben drei Quellen: die Buchungen des Kontos, die Gegenseiten fremder Umbuchungen und die Gegenseiten aus Splitzeilen. Eine Umbuchung verschiebt deshalb zwischen zwei Balkenstücken, ohne die Summe zu ändern. Konten, die zwölf Monate lang auf null standen, fallen weg; sie zeichnen ohnehin keinen Balken. ### Der Schalter „nur aktive“ Oben rechts an der Kachel sitzt ein Ein/Aus-Schalter. Eingeschaltet – der Standard – zählen nur Konten, die noch geführt werden. Ausgeschaltet kommen stillgelegte dazu: Sonst fehlte im Rückblick Vermögen, das damals auf einem inzwischen aufgelösten Konto lag. Der Zustand liegt unter `cockpit_vermoegen_nur_aktive` in den Einstellungen und gilt bis zur nächsten Umschaltung – auch über das Abmelden hinaus. Im Einstellungsdialog erscheint er nicht: Er gehört an die Kachel, nicht in einen Reiter. Umgeschaltet wird über einen abschickenden Knopf, nicht über ein Ankreuzfeld. Ein Ankreuzfeld könnte sein Formular nur mit einem Inline-Skript selbst abschicken, und die Content-Security-Policy verbietet Inline-Skripte. ### Stapel und Farben Positive Stände stapeln sich über der Nulllinie, negative darunter – ein überzogenes Girokonto oder eine Kreditkarte zieht den Balken nach unten. Die Palette in `app.css` hat zwölf Töne (`.serie-1` bis `.serie-12`). Gibt es mehr Konten, behalten die größten ihre eigene Farbe und der Rest wird zu **Übrige Konten (n)** zusammengefasst – zwei Konten in derselben Farbe wären in der Legende nicht auseinander zu halten. Jede Serie setzt `--farbe`; davon leben der Balken (`fill`) und der Legendenpunkt (`background`) gleichermaßen, und beide folgen dem hellen wie dem dunklen Thema. ### Ebenen: in „Übrige Konten“ hineinsehen Der Legendeneintrag **Übrige Konten (n)** ist ein Link. Er führt auf `/?ebene=1`: Dort stehen die nächstelf Konten einzeln, und was dann noch bleibt, sammelt sich erneut. So geht es beliebig tief, bis der Rest in die Palette passt – dann entfällt das Sammelstück, und das ist die letzte Ebene. `Vermoegensentwicklung::ebenen()` rechnet aus, wie viele es sind; eine zu hohe Ebene fällt auf die letzte zurück, statt eine leere Kachel zu zeigen. Zurück geht es über die Zeile unter der Legende: *eine Ebene zurück* und, ab der dritten, *zu den größten Konten*. Jedes Konto steht auf genau einer Ebene: Was oben schon eine eigene Farbe hatte, ist im Sammelstück nicht mehr enthalten. Sonst wüchse der Rest mit jeder Ebene, statt zu schrumpfen. Weil auf tieferen Ebenen die großen Konten fehlen, passt sich die Achse an – die kleinen Konten werden dadurch überhaupt erst sichtbar. Die Ebene steht in der Adresse und nicht in den Einstellungen: Beim nächsten Aufruf beginnt man wieder oben. ### SVG von Hand Keine Diagrammbibliothek (siehe `PLAN.md`): `src/Views/cockpit/vermoegensdiagramm.php` schreibt das SVG selbst. Farben stehen als Klasse am Element, nicht als `fill`-Attribut – ein Attribut käme zwar an der Content-Security-Policy vorbei, könnte aber nicht auf die Themenumschaltung reagieren. Ein `style`-Attribut verwürfe die CSP ohnehin. Die Achse rundet über `Vermoegensentwicklung::skala()` auf Schritte von 1, 2, 2,5 oder 5 mal einer Zehnerpotenz und schließt die Null immer ein. Jedes Balkenstück trägt ein `