# UI-Spezifikation der WinForms-Oberfläche (Rekonstruktionsvorlage für Avalonia)

**Stand:** 06.08.2026 · **Zweck:** Die WinForms-UI wird im Zuge der Linux-Portierung entfernt.
Dieses Dokument hält fest, **wie sie aussah und was sie konnte**, damit die Avalonia-Umsetzung
so nah wie möglich am Original bleibt.

> **Der Originalcode ist nicht verloren.** Der Git-Tag **`winforms-final`** enthält den vollständigen
> letzten Stand. Auschecken und ansehen:
>
> ```bash
> git checkout winforms-final
> ```
>
> Dieses Dokument ist die *lesbare Zusammenfassung* — für Details (Pixelabstände, Andockung,
> Farbwerte) immer in den Tag schauen. Die Angaben unten sind maschinell aus den
> `.Designer.cs`-Dateien extrahiert, also exakt und nicht aus dem Gedächtnis rekonstruiert.

## Screenshots — bitte einmal selbst anlegen

Was dieses Dokument **nicht** leisten kann, ist der optische Gesamteindruck: Proportionen,
Abstände, Farbwirkung, wie voll die Fenster im Alltag aussehen. Dafür lohnt sich einmalig:

```bash
git checkout winforms-final
```

Dann die App starten, jedes Fenster **mit echten Daten** öffnen und einen Screenshot ablegen
(Vorschlag: `docs/ui-referenz/<Fenstername>.png`). Zehn Minuten Arbeit, die beim Nachbau mehr
wert sind als jede Beschreibung. Danach mit `git checkout main` zurück.

---

## Übergreifende Gestaltungsregeln

Diese Muster ziehen sich durch alle Fenster und sollten in Avalonia erhalten bleiben:

| Regel | Umsetzung in WinForms | Entsprechung in Avalonia |
|---|---|---|
| **Alle Fenster maximiert öffnen** | `WindowState = Maximized`, `StartPosition = CenterScreen` (`ShellUiHost.OpenView`) | `WindowState="Maximized"` |
| **Gemeinsame Fenster-Menüleiste** auf JEDEM Fenster | `WindowMenu.Wire()` hängt oben einen `MenuStrip` an; alle Fenster nebeneinander mit Icon, aktuelles fett + angehakt | `Menu` mit `ItemsSource`-Bindung (deklarativ!) |
| **Rechte Menüaktion kontextabhängig** | Launcher → „Beenden" (mit Sicherheitsabfrage); alle anderen Fenster → „Fenster schließen" | `DockPanel` — Avalonia kennt kein `ToolStripItemAlignment.Right` |
| **Ein Fenster je View** | `ShellUiHost` hält höchstens eine Instanz, holt sie sonst nach vorn | gleiche Logik; der Contract ist bereits toolkit-neutral |
| **Zahlenformate in Tabellen** | `DefaultCellStyle.Format` (`N2`, `N1`, …) | `Binding StringFormat` |
| **Schriftart** | „Segoe UI" (21×), Terminal „Consolas" (1×) | Systemschrift + Monospace-Fallback — Segoe UI gibt es auf Linux nicht |
| **Zeilenfärbung nach PnL** | `TradeRowColoring` lieferte die Farbe direkt in `DefaultCellStyle.BackColor` | bereits umgestellt: Logik liefert `TradeRowTint`, die UI mappt auf Farbe |

**Farbwerte der Zeilenfärbung** (aus `TradeRowPalette` — unverändert übernehmen):

| Kategorie | RGB | Bedeutung |
|---|---|---|
| `Loss` | 245, 200, 200 | < 0 % — rot |
| `SmallWin` | 212, 240, 212 | 0–10 % — hellgrün |
| `BigWin` | 140, 214, 140 | > 10 % — grün |

**Symbol-Schlüssel je Fenster** (siehe `Ui/ViewIcons.cs` — die Schlüssel bleiben gültig):

| View-ID | Schlüssel | Bildressource |
|---|---|---|
| `core.dashboard` | `dashboard` | dashboard.png |
| `core.settings` | `settings` | setting_tools.png |
| `core.terminal` | `terminal` | error_log.png |
| `core.jobs` | `jobs` | system_time.png |
| `copytrading.main` | `copytrading` | cross_reference.png |
| `resolutionfarming.main` | `resolutionfarming` | file_start_workflow.png |
| `supervisor.main` | `supervisor` | emotion_batman.png |
| `accounting.main` | `accounting` | coins_in_hand.png |

Die PNG-Dateien liegen weiterhin in `Resources/` und können unverändert weiterverwendet werden.


---

## A. Modul-Fenster (in diesem Schritt entfernt)

### CopyTradingMainForm — Hauptfenster Copytrading

**Fenstergröße:** 1714 × 1167 px

**Tabs (Reihenfolge):** Master-Trader | Offene Trades | Geschlossene Trades | Account-Einstellungen

**Steuerelemente:** TabPage ×4, TabControl ×1, MasterTradersView ×1, OpenTradesView ×1, ClosedTradesView ×1, AccountSettingsView ×1

### MasterTradersView — Tab „Master-Trader“

**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):

| # | Spaltenkopf | Feldname | Format | Breite |
|--:|---|---|---|---|
| 1 | # | `colId` | — | 50 px |
| 2 | Wallet | `colWallet` | — | 170 px |
| 3 | Name | `colName` | — | Rest/Auto |
| 4 | Kategorie | `colCategory` | — | 110 px |
| 5 | Aktiv | `colActive` | — | 50 px |
| 6 | Trades (7T) | `colTrades` | — | 90 px |
| 7 | Winrate % | `colWinrate` | — | 90 px |
| 8 | PnL (7T) | `colPnl` | — | 100 px |
| 9 | Copy-PnL (30T) | `colCopyPnl` | — | 110 px |
| 10 | Profit-Faktor | `colCopyPf` | — | 100 px |
| 11 | Ø PnL/Trade | `colCopyAvg` | — | 100 px |
| 12 | Copy-Trades | `colCopyCount` | — | 90 px |

**Steuerelemente:** DataGridViewTextBoxColumn ×11, ToolStripButton ×4, Panel ×2, ToolStrip ×1, ToolStripSeparator ×1, DataGridView ×1, DataGridViewCheckBoxColumn ×1, Splitter ×1, PropertyGrid ×1, GroupBox ×1, CheckedListBox ×1, Label ×1

### OpenTradesView — Tab „Offene Trades“

**Beschriftungen:**

- `lblSummary` = „—"

**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):

| # | Spaltenkopf | Feldname | Format | Breite |
|--:|---|---|---|---|
| 1 | Account | `colAccount` | — | Fill 120 |
| 2 | Master-Trader | `colTrader` | — | Fill 120 |
| 3 | Markt | `colMarket` | — | Fill 240 |
| 4 | Outcome | `colOutcome` | — | Fill 80 |
| 5 | Side | `colSide` | — | Fill 55 |
| 6 | Entry | `colEntry` | — | Fill 65 |
| 7 | Aktuell | `colCurrent` | — | Fill 65 |
| 8 | Size | `colSize` | — | Fill 70 |
| 9 | Einsatz | `colAmount` | — | Fill 80 |
| 10 | Wert | `colValue` | — | Fill 80 |
| 11 | Buchgewinn | `colUnrealized` | — | Fill 90 |
| 12 | Buchgew. % | `colUnrealizedPct` | — | Fill 80 |
| 13 | Status | `colStatus` | — | Fill 90 |

**Steuerelemente:** DataGridViewTextBoxColumn ×13, ToolStrip ×1, ToolStripButton ×1, DataGridView ×1, Panel ×1, Label ×1

### ClosedTradesView — Tab „Geschlossene Trades“

**Beschriftungen:**

- `lblSummary` = „—"
- `lblMarkt` = „Markt:"
- `lblMaster` = „Master:"
- `lblErgebnis` = „Ergebnis:"
- `lblVon` = „Von:"
- `lblBis` = „Bis:"

**Schaltflächen:** „Zurücksetzen"

**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):

| # | Spaltenkopf | Feldname | Format | Breite |
|--:|---|---|---|---|
| 1 | # | `colTradeId` | — | 60 px |
| 2 | Account | `colAccount` | — | 130 px |
| 3 | Master-Trader | `colTrader` | — | 130 px |
| 4 | Markt | `colMarket` | — | Rest/Auto |
| 5 | Outcome | `colOutcome` | — | 80 px |
| 6 | Side | `colSide` | — | 60 px |
| 7 | Entry | `colEntry` | — | 70 px |
| 8 | Exit | `colExit` | — | 70 px |
| 9 | Size | `colSize` | — | 70 px |
| 10 | PnL | `colPnl` | — | 80 px |
| 11 | PnL % | `colPnlPct` | — | 70 px |
| 12 | Eröffnet | `colOpenedAt` | — | 130 px |
| 13 | Geschlossen | `colClosedAt` | — | 130 px |

**Steuerelemente:** DataGridViewTextBoxColumn ×13, Label ×6, Panel ×2, ComboBox ×2, DateTimePicker ×2, ToolStrip ×1, ToolStripButton ×1, DataGridView ×1, TextBox ×1, Button ×1

### AccountSettingsView — Tab „Account-Einstellungen“

**Steuerelemente:** ToolStrip ×1, ToolStripLabel ×1, ToolStripComboBox ×1, ToolStripSeparator ×1, ToolStripButton ×1, PropertyGrid ×1, Panel ×1, Label ×1

### ResolutionFarmingMainForm

**Fenstergröße:** 1429 × 1030 px

**Tabs (Reihenfolge):** Kandidaten | Positionen | Historie / Statistik | Settings

**Beschriftungen:**

- `lblCandKonto` = „Konto:"
- `lblSetKonto` = „Konto:"

**Schaltflächen:** „Aktualisieren", „Speichern"

**Steuerelemente:** TabPage ×4, Panel ×4, Label ×4, Button ×4, DataGridView ×3, ComboBox ×2, TabControl ×1, PropertyGrid ×1

### SupervisorMainForm

**Fenstergröße:** 1786 × 1163 px

**Tabs (Reihenfolge):** Analyse | Dossiers | Berichte | Counterfactual

**Beschriftungen:**

- `lblProfil` = „Profil:"
- `lblModel` = „Modell:"
- `lblSignal` = „SignalId:"

**Schaltflächen:** „Aktualisieren", „Dossier öffnen", „Senden", „Verlauf leeren"

**Steuerelemente:** ToolStripButton ×5, TabPage ×4, ToolStrip ×4, ToolStripLabel ×3, TextBox ×3, DataGridView ×3, ToolStripTextBox ×2, ToolStripSeparator ×2, SplitContainer ×2, TabControl ×1, ToolStripComboBox ×1, RichTextBox ×1, Panel ×1, Button ×1, Label ×1

### AccountingMainForm

**Fenstergröße:** 1571 × 1067 px

**Tabs (Reihenfolge):** Übersicht / BWA | Ledger | Abruf / Status

**Beschriftungen:**

- `lblKpiNet` = „Netto-Handelsergebnis ↵ —"
- `lblKpiClosing` = „Endsaldo ↵ —"
- `lblKpiDeposits` = „Einzahlungen ↵ —"
- `lblKpiWithdrawals` = „Auszahlungen ↵ —"
- `lblKpiFees` = „Fees ↵ —"
- `lblKpiRewards` = „Rewards ↵ —"
- `lblKpiVolume` = „Handelsvolumen ↵ —"
- `lblKpiTrades` = „Trades ↵ —"
- `lblWaehrung` = „Währung:"
- `lblBis` = „Bis:"
- `lblVon` = „Von:"
- `lblOvKonto` = „Konto:"
- `lblLedgerKonto` = „Konto:"
- `lblStatusKonto` = „Konto:"

**Schaltflächen:** „Aktualisieren", „Backfill (volle Historie)", „Berechnen", „CSV-Export", „Inkrement jetzt", „PDF-Export"

**Steuerelemente:** Label ×13, ToolStripButton ×4, TabPage ×3, Button ×3, DataGridView ×3, ToolStripSeparator ×3, ComboBox ×2, DateTimePicker ×2, ToolStrip ×2, ToolStripLabel ×2, ToolStripComboBox ×2, TabControl ×1, Panel ×1, FlowLayoutPanel ×1


---

## B. Core-/Shell-Fenster (bleiben vorerst bestehen)

### LauncherForm — Startleiste

**Fenstergröße:** 2599 × 669 px

**Beschriftungen:**

- `lbl_trading` = „Trading: —"
- `lbl_modules` = „Module: —"
- `lbl_ratelimit` = „API: —"

**Schaltflächen:** „API: —", „Accounting", „CopyTrading", „Dashboard", „DemoTrading (—)", „LiveTrading (—)", „ResolutionFarming", „Server Jobs", „Settings", „Supervisor", „Terminal / Logs"

**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):

| # | Spaltenkopf | Feldname | Format | Breite |
|--:|---|---|---|---|
| 1 | Account | `colAccName` | — | 113 px |
| 2 | Module | `colAccModules` | — | 109 px |
| 3 | Polymarket | `colAccPoly` | — | 106 px |
| 4 | Wallet (USDC) | `colAccBalance` | — | 157 px |
| 5 | 3T PnL | `colAccPnl3d` | — | Rest/Auto |
| 6 | 3T Winrate % | `colAccWin3d` | — | 153 px |
| 7 | Overall P/L | `colAccOverall` | — | 133 px |

**Steuerelemente:** ToolStripButton ×10, DataGridViewTextBoxColumn ×6, ToolStripStatusLabel ×3, ToolStrip ×2, ToolStripSeparator ×2, MenuStrip ×1, StatusStrip ×1, DataGridView ×1, DataGridViewButtonColumn ×1, LauncherWidgetsPanel ×1

### LauncherWidgetsPanel — Live-Überblick

**Tabs (Reihenfolge):** Auffällige Trades (24h)

**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):

| # | Spaltenkopf | Feldname | Format | Breite |
|--:|---|---|---|---|
| 1 | Zeit | `colAlertTime` | — | 70 px |
| 2 | Level | `colAlertLevel` | — | 70 px |
| 3 | Nachricht | `colAlertMsg` | — | Rest/Auto |
| 4 | Modul | `colNotModule` | — | 100 px |
| 5 | Markt | `colNotMarket` | — | Rest/Auto |
| 6 | PnL | `colNotPnl` | — | 80 px |
| 7 | PnL % | `colNotPnlPct` | — | 70 px |

**Steuerelemente:** DataGridViewTextBoxColumn ×7, GroupBox ×3, DataGridView ×2, TableLayoutPanel ×1, FlowLayoutPanel ×1, RichTextBox ×1

### DashboardView

**Fenstergröße:** 1714 × 1083 px

**Tabs (Reihenfolge):** Dashboard | Tradehistorie | Module

**Beschriftungen:**

- `lblKpiPnl` = „Netto-PnL ↵ —"
- `lblKpiWin` = „Winrate ↵ —"
- `lblKpiTrades` = „Trades ↵ —"
- `lblKpiAvg` = „Ø PnL/Trade ↵ —"
- `lblKpiPf` = „Profit-Faktor ↵ —"
- `lblErgebnis` = „Ergebnis:"
- `lblSuche` = „Suche:"
- `lblModulesInfo` = „Module aktivieren/deaktivieren. Änderungen greifen nach dem nächsten Neustart von PolyTrader."

**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):

| # | Spaltenkopf | Feldname | Format | Breite |
|--:|---|---|---|---|
| 1 | Modul | `colModule` | — | 110 px |
| 2 | Konto | `colAccount` | — | 130 px |
| 3 | Markt | `colMarket` | — | Rest/Auto |
| 4 | Outcome | `colOutcome` | — | 80 px |
| 5 | Side | `colSide` | — | 60 px |
| 6 | Entry | `colEntry` | — | 70 px |
| 7 | Exit | `colExit` | — | 70 px |
| 8 | Size | `colSize` | — | 70 px |
| 9 | PnL | `colPnl` | — | 80 px |
| 10 | PnL % | `colPnlPct` | — | 70 px |
| 11 | Geschlossen | `colClosedAt` | — | 140 px |
| 12 | Modul | `colModName` | — | 220 px |
| 13 | Status | `colModStatus` | — | 260 px |
| 14 | Hinweis | `colModHint` | — | Rest/Auto |
| 15 | Aktion | `colModAction` | — | 160 px |

**Steuerelemente:** DataGridViewTextBoxColumn ×14, Label ×8, ToolStripLabel ×4, ToolStripComboBox ×4, TabPage ×3, PictureBox ×3, Panel ×2, DataGridView ×2, ToolStrip ×1, ToolStripButton ×1, TabControl ×1, FlowLayoutPanel ×1, TextBox ×1, ComboBox ×1, DataGridViewButtonColumn ×1

### TerminalView

**Fenstergröße:** 1429 × 1083 px

**Tabs (Reihenfolge):** Live | Log Viewer

**Beschriftungen:**

- `lblFilter` = „Level:"
- `lblViewerStatus` = „—"
- `lblVText` = „Text:"
- `lblVCid` = „CID:"
- `lblVLevel` = „Level:"
- `lblVDatum` = „Datum:"

**Schaltflächen:** „Alles auswählen", „Alles kopieren", „Kopieren", „Laden", „Stop Autoscroll", „Terminal leeren"

**Steuerelemente:** Label ×6, ToolStripMenuItem ×4, DataGridViewTextBoxColumn ×4, TabPage ×2, Panel ×2, ComboBox ×2, Button ×2, TextBox ×2, TabControl ×1, RichTextBox ×1, ContextMenuStrip ×1, ToolStripSeparator ×1, DateTimePicker ×1, DataGridView ×1

### SettingsView

**Fenstergröße:** 1185 × 820 px

**Tabs (Reihenfolge):** General Settings | Polymarket Accounts

**Schaltflächen:** „Lizenz prüfen / setzen …", „Load Settings from File", „Löschen", „Master-Key erzeugen", „Neuer Account", „OpenRouter-Key setzen …", „Save Changes", „Test-Heartbeat senden", „Watchdog-Token setzen …"

**Steuerelemente:** ToolStripButton ×9, PropertyGrid ×2, TabPage ×2, ToolStrip ×2, DataGridViewTextBoxColumn ×2, DataGridViewCheckBoxColumn ×2, TabControl ×1, DataGridView ×1

### JobsView

**Fenstergröße:** 1429 × 833 px

**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):

| # | Spaltenkopf | Feldname | Format | Breite |
|--:|---|---|---|---|
| 1 | Job Name | `colJobName` | — | 150 px |
| 2 | Status | `colStatus` | — | 150 px |
| 3 | Zuletzt ausgeführt | `colLastRun` | — | 130 px |
| 4 | Nächster Lauf | `colNextRun` | — | 130 px |
| 5 | Aktiv | `col_dgv_jobs_Enabled` | — | 60 px |
| 6 | Aktion | `col_dgv_jobs_Run` | — | 90 px |
| 7 | Beschreibung | `colDescription` | — | Rest/Auto |

**Steuerelemente:** DataGridViewTextBoxColumn ×5, DataGridView ×1, DataGridViewCheckBoxColumn ×1, DataGridViewButtonColumn ×1, ToolStrip ×1, ToolStripButton ×1

### LicenseDialog

**Beschriftungen:**

- `lblHeadline` = „Für PolyTrader wird eine gültige Lizenz benötigt."
- `lblStatus` = „Status:"
- `lblHwCaption` = „Hardware-ID dieses Rechners (für die Aktivierung):"
- `lblKeyCaption` = „Lizenzschlüssel:"

**Schaltflächen:** „Kopieren", „Ohne Lizenz starten (eingeschränkt)", „Validieren"

**Steuerelemente:** Label ×5, Button ×3, TextBox ×2

### ShutdownConfirmDialog

**Beschriftungen:**

- `lblTitle` = „PolyTrader sicher beenden?"
- `lblCountdown` = „Beenden möglich in 10 s …"

**Schaltflächen:** „Abbrechen", „Beenden (10 s)"

**Steuerelemente:** Label ×3, Button ×2, Timer ×1


---

## Verhaltensnotizen aus dem Code-Behind

Was die Designer-Dateien nicht zeigen — Verhalten, das beim Nachbau leicht untergeht:

### Copytrading

- **MasterTradersView**: Links das Grid, rechts ein `PropertyGrid` für den gewählten Trader, darunter
  eine `CheckedListBox` „Zugewiesene Accounts". Getrennt durch einen `Splitter`. Nach dem Speichern
  erscheint ein Hinweistext mit Uhrzeit: „Gespeichert: #ID Name (n Account(s)) um HH:mm:ss".
- **OpenTradesView / ClosedTradesView**: Die Zeilenfärbung wird bei `DataBindingComplete` neu gesetzt.
  Unter dem Grid zeigt eine Zusammenfassungszeile (`lblSummary`) die Summen.
- **ClosedTradesView**: Filterleiste mit Markt-Suche, Master-Auswahl, Ergebnis-Auswahl
  (Alle / Gewinner / Verlierer) und Datumsbereich; dazu „Zurücksetzen".
- **AccountSettingsView**: Konto-Auswahl in der Toolbar, darunter ein `PropertyGrid` auf
  `CopyTradingAccountSettings`. **Die `[Description]`-Attribute der Modellklasse sind die
  Feldbeschreibungen — beim Nachbau als Tooltips oder Hilfetexte übernehmen.**

### ResolutionFarming

Vier Tabs (Kandidaten / Positionen / Historie + Statistik / Settings), je ein Grid mit einer
„Aktualisieren"-Schaltfläche und Konto-Auswahl oben. Der Settings-Tab zeigt ein `PropertyGrid`
plus „Speichern" mit Bestätigungstext samt Uhrzeit.

### Supervisor

- **Analyse-Tab**: chat-artig — `RichTextBox` für den Verlauf (je Eintrag Zeitstempel + Sprecher),
  Eingabefeld, „Senden", „Verlauf leeren"; Profil- und Modellauswahl in der Toolbar.
- **Dossiers-Tab**: Grid plus „Dossier öffnen".
- **Berichte / Counterfactual**: Grid plus „Aktualisieren", Filterung über `SignalId`.

### Accounting

- Drei Tabs: Übersicht/BWA, Ledger, Abruf/Status.
- **KPI-Kacheln** in einem `FlowLayoutPanel`: Netto-Handelsergebnis, Endsaldo, Einzahlungen,
  Auszahlungen, Fees, Rewards, Handelsvolumen, Trades. Format je Kachel zweizeilig:
  `"<Titel>\n<Wert:N2> <Währung>"` — der Wert steht unter dem Titel.
- Zeitraumwahl über zwei `DateTimePicker` (Von/Bis), dazu Währungs- und Kontoauswahl.
- Export über „PDF-Export" und „CSV-Export"; im Status-Tab „Inkrement jetzt" und
  „Backfill (volle Historie)".

### Shell

- **LauncherForm**: Startleiste mit einem Button je Fenster (angehakt, wenn das Fenster offen ist),
  Schnellaktionen „LiveTrading" und „DemoTrading" (dreistufig: Inactive → SellOnly → Active),
  Statuszeile mit Trading-Status, Modul-Status und API-Ratelimit. Darunter die Account-Übersicht
  und der Live-Überblick (`LauncherWidgetsPanel`).
- **Das Schließen-X ist abgefangen** und läuft über dieselbe Sicherheitsabfrage wie „Beenden".
- **ShutdownConfirmDialog**: Die Beenden-Schaltfläche ist **10 Sekunden gesperrt**, mit Countdown im
  Text („Beenden möglich in 10 s"); Abbrechen ist jederzeit möglich.
- **TerminalView**: Live-Tab mit farbigen Log-Zeilen und abschaltbarem Autoscroll, Kontextmenü
  (Alles auswählen / Alles kopieren), Auto-Clear bei Erreichen der RAM-Grenze. Log-Viewer-Tab mit
  Filtern über Datum, Level, CID und Volltext.
- **DashboardView**: KPI-Kacheln (Netto-PnL, Winrate, Trades, Ø PnL/Trade, Profit-Faktor), drei
  Diagramme (Equity-Kurve, PnL je Modul, PnL je Tag), Tradehistorie mit Suche und
  Gewinner/Verlierer-Filter sowie ein Modul-Tab zum Aktivieren/Deaktivieren (wirkt nach Neustart).
  **Der Profit-Faktor zeigt „∞", wenn es keine Verluste gab.**

---

## Was beim Nachbau bewusst *anders* werden darf

Nicht alles ist erhaltenswert — diese Punkte sind Altlasten der WinForms-Umsetzung:

1. **Die `PropertyGrid`-Fenster** (Settings, Account-Einstellungen, Master-Trader,
   ResolutionFarming): statt einer alphabetischen Reflection-Liste künftig fachlich gruppierte
   Formulare mit Validierung, Einheiten am Feld und abhängigen Feldern. Die `[Description]`-Attribute
   liefern die Texte, die `[Browsable(false)]`-Markierungen die auszublendenden Felder.
2. **Menüaufbau zur Laufzeit** (`WindowMenu.Populate` leert und füllt `menu.Items`): verstößt gegen
   die neue Layout-Regel. In Avalonia ein deklaratives `Menu` mit `ItemsSource`-Bindung.
3. **Diagramme als Bitmap** (ScottPlot → PNG → `PictureBox`): entfällt mit LiveCharts2.
4. **Das `RichTextBox`-Terminal**: als virtualisiertes `ItemsControl` über eine
   `ObservableCollection<LogLine>` neu bauen — das löst nebenbei das RAM-Problem, wegen dem heute
   ein Auto-Clear nötig ist.
5. **Feste Pixelbreiten** in den Grids: in Avalonia besser mit `*`-Sternbreiten arbeiten. Die Werte
   in den Tabellen oben geben die *Proportionen* vor, nicht die absoluten Zahlen.
