Erstelle für mich die "Parqet-Treppe" — ein doppeltes Wasserfall-Diagramm,
das die Entwicklung meines Portfolios über die letzten 12 vollen Kalendermonate
in zwei getrennten Hälften visualisiert.

## Schritt 1: Zeitraum bestimmen

Das heutige Datum ist [HEUTE]. Die 12 rollierenden Monate laufen vom ersten Tag
des Monats vor 12 Monaten bis zum letzten Tag des Vormonats. Beispiel: Ist heute
der 01.05.2026, so ist der Zeitraum 01.05.2025–30.04.2026.

## Schritt 2: Portfolios auswählen

Hole zunächst alle verfügbaren Portfolios mit parqet_list_portfolios und zeige
sie dem Nutzer. Frage, welche Portfolios einbezogen werden sollen, falls mehrere
vorhanden sind. Fahre erst nach der Auswahl fort.

Hole dann für JEDEN der 12 Kalendermonate die Performance der gewählten
Portfolios einzeln mit parqet_get_performance und intervalType="absolute",
wobei alle gewählten Portfolio-IDs aggregiert übergeben werden.

Berechne für jeden Monat:
  invest = (wert_ende - wert_start) - unrealized_gains_net
  kurs   = unrealized_gains_net

Dabei ist wert_start der Portfoliowert zu Monatsbeginn, wert_ende der Wert
am Monatsende, unrealized_gains_net aus performance.unrealizedGains.inInterval.gainNet.

## Schritt 3: Diagramm erstellen

Erstelle ein Python-Skript mit matplotlib, das folgendes Diagramm erzeugt
und als PNG speichert.

### Aufbau: Doppelter Wasserfall

Das Diagramm besteht aus zwei Wasserfall-Hälften auf einer gemeinsamen
Y-Achse (Portfoliowert in Tausend Euro):

**LINKE HÄLFTE — "Was ich kontrolliere"**
- Graue Start-Säule: Portfoliowert zu Beginn des 12-Monats-Zeitraums
- 12 Wasserfall-Balken: monatliche Netto-Kapitalzuflüsse (invest je Monat)
- Graue Ergebnis-Säule: fiktiver Portfoliowert ohne jede Kursschwankung
  (= Startwert + Summe aller Investitionen); X-Achsen-Label: "Ergebnis"

**RECHTE HÄLFTE — "Was der Markt macht"**
- Startet auf der Höhe der Ergebnis-Säule (nicht bei 0!)
- 12 Wasserfall-Balken: monatliche Kurseffekte
- Endet auf der Höhe des realen aktuellen Portfoliowerts (graue End-Säule)

**WICHTIG zur rechten Hälfte:**
Der erste Balken der rechten Hälfte beginnt exakt auf der Höhe der
Ergebnis-Säule. Verbindungslinien laufen waagerecht von der Oberkante des
Vorbalkens zur Unterkante des Folgebalkens.

### Y-Achse
- Unterer Grenzwert: 10 % unterhalb des niedrigsten vorkommenden
  Portfoliowerts (Start, Ende, alle Zwischenwerte beider Hälften)
- Oberer Grenzwert: 5 % oberhalb des höchsten vorkommenden Portfoliowerts
- Tick-Abstand: 25 T€
- Achsenbeschriftung: "Portfoliowert (T€)", ganzzahlige Labels

### Graue Säulen
- Darstellung: Balken beginnen am unteren Y-Achsen-Grenzwert (nicht bei 0),
  d.h. height = wert - y_bottom
- Beschriftung: Wert in T€ über der Säule, um 90° gegen den Uhrzeigersinn
  gedreht, fett, Schriftgröße 5.8, Farbe #2C3E50

### Farben
- Positive Balken (Zufluss / Kursgewinn): #1E8449 (Dunkelgrün)
- Negative Balken (Abfluss / Kursverlust): #C0392B (Dunkelrot)
- Graue Säulen (Start, Ergebnis, Ende): #7F8C8D
- Hintergrund: #FAFAFA

### Beschriftungen der Balken
- Grüne Balken: Label IMMER über dem Balken → y = bottom + height + GAP
- Rote Balken:  Label IMMER unter dem Balken → y = bottom + height - GAP
  (bei negativem height ist bottom + height der untere Rand des Balkens)
- GAP = span * 0.013 (span = y_top - y_bottom)
- Wert in T€ mit Vorzeichen: grün "+X.X", rot "−X.X"
- Schriftfarbe grün: #1A5C35, rot: #7B241C, fett, Schriftgröße 4.8

### Verbindungslinien
- Gestrichelte horizontale Linie (#BBBBBB, lw=0.8, ls='--')
- Verbindet rechte Kante des Vorbalkens mit linker Kante des Folgebalkens
  auf der Höhe der jeweiligen Balkenoberkante (bzw. Unterkante bei negativen)
- Erste Verbindung: von Start-Säule zum ersten linken Balken
- Übergang Ergebnis→rechts: von Ergebnis-Säule zum ersten rechten Balken

### Pfeile und Summen-Boxen oben
- Zwei Doppelpfeile (<->) gespannt über je eine Hälfte
- arrow_y = y_top - span * 0.06
- Linker Pfeil: von Start-Säule bis Ergebnis-Säule, Beschriftung:
  "Zu-/Abflüsse\n±XX.X T€"
- Rechter Pfeil: von erstem rechten Balken bis End-Säule, Beschriftung:
  "Kursschwankungen\n±XX.X T€"
- Beide Boxen: weißer Hintergrund, Rand #7F8C8D, abgerundete Ecken,
  Schrift fett, Schriftgröße 7.0

### Bereichstexte
- Links:  "← Zu-/Abflüsse (direkt steuerbar) →"
- Rechts: "← Kursschwankungen (nicht steuerbar) →"
- Position: y = y_bottom + span * 0.015 (innerhalb des Plotbereichs,
  knapp über dem unteren Rand — NICHT unterhalb der X-Achse)
- va='bottom', kursiv, Schriftgröße 5.8, Farbe #566573

### X-Achse
- Alle Monatsnamen (z.B. "Mai 25", "Jun 25" etc.) 45° gedreht, ha='right'
- Graue Säulen-Labels ("Start", "Ergebnis", "Ende"): fett, Schriftgröße 5.8
- Monatslabels: Schriftgröße 5.0

### Legende
- 3 Einträge: Grün = "Zufluss / pos. Kurseffekt",
  Rot = "Abfluss / neg. Kurseffekt", Grau = "Portfoliostand"
- Positionierung: unterhalb des Plots, rechtsbündig, über der
  X-Achsenbeschriftung, sodass keine Balken, Werte oder Labels überlagert
  werden. Umsetzung mit fig.legend():
    fig.legend(
        handles=[p1, p2, p3],
        loc='lower right',
        bbox_to_anchor=(0.98, 0.01),
        bbox_transform=fig.transFigure,
        fontsize=6.0,
        framealpha=0.9,
        edgecolor='#7F8C8D',
        ncol=1,
    )

### Achsen und Titel
- Keine obere, rechte und untere Achsenlinie (spines entfernen)
- Horizontales Gitternetz: alpha=0.25, Farbe #CCCCCC
- Titel: "Parqet-Treppe – MMM JJJJ bis MMM JJJJ (rollierende 12 Monate)"
  Schriftgröße 8.5, fett, Farbe #1B2A4A

### Bildgröße
- w_pt=1150, h_pt=720, dpi=150
- subplots_adjust: bottom=0.20, top=0.88, left=0.07, right=0.98

### Balkenbreite und X-Positionen
- Balkenbreite: 0.72
- X-Positionen: Start=0, linke Balken=1..12, Ergebnis=13,
  rechte Balken=14..25, Ende=26

## Schritt 4: Ausgabe

Speichere das Diagramm als PNG-Datei und zeige es mir.

Zeige mir außerdem eine Tabelle mit den verwendeten Monatsdaten:
Monat | Invest (T€) | Kurseffekt (T€) | Wert Ende (T€)

Führe abschließend die Probe durch:
start + Σ(invest) + Σ(kurs) muss = Endwert. Abweichungen > 0.5 T€ bitte melden.

## Hinweise zur Datenqualität

- invest = was ich aktiv entschieden habe: Käufe, Verkäufe, Einzahlungen,
  Entnahmen. Dividenden auf dem Verrechnungskonto zählen NICHT als
  Investition — sie erscheinen erst dann, wenn ich sie reinvestiere.
- kurs = alles, was der Markt macht: Kursschwankungen aller Positionen.
- Die Formel invest = (wert_ende - wert_start) - unrealized_gains_net
  liefert genau diese Trennung, weil Parqet unrealizedGains nur
  Preisveränderungen enthält, nicht Kapitalflüsse.