# UI-Sollmodell – ferrite.fm Signal Flow View

Status: Entwurf / Arbeitsgrundlage  
Zweck: Neuer zusätzlicher UI-View neben der bestehenden Control-Plane-Oberfläche  
Arbeitsname: `Flow View`

---

## 1. Zielbild

Der neue View soll **nicht** die bestehende UI sofort ersetzen, sondern eine zweite, domänengerechtere Hauptansicht für professionelle Broadcast- und Signalpfad-Arbeit liefern.

Die Grundidee:
- Statt primär Formulare, Panels und technische Gruppierungen zu zeigen, visualisiert der View den **realen Signalfluss** der Applikation.
- Das UI wird damit näher an Broadcast-, Routing-, Audio- und DSP-Systemen.
- Der Nutzer soll auf einen Blick sehen:
  - **wo** sich das Signal gerade befindet,
  - **welche Stufe** gesund / degradiert / fehlerhaft / inaktiv ist,
  - **welches Modul** welchen Einfluss auf das On-Air-Signal hat,
  - **wo** eine Störung tatsächlich sitzt,
  - und **wo** man für Eingriffe klicken muss.

Kurzform:
**Weniger Settings-App, mehr Signal- und Sendeweg-Konsole.**

---

## 2. Produktprinzipien

### 2.1 Operator-first
Der View muss innerhalb von 1–2 Sekunden lesbar sein.
Keine dekorative Technikgrafik, kein animiertes Spielzeug, kein "Dashboard um des Dashboards willen".

### 2.2 Systemmodell statt Menüstruktur
Die Oberfläche bildet nicht zuerst Menüpunkte ab, sondern die tatsächliche Kette:
**Input → Buffer/Ingest → Audio → Processing → Stereo/RDS/MPX → TX**

### 2.3 Status ist primär, Settings sekundär
Die erste Funktion des Views ist Verstehen und Überwachen.
Die zweite Funktion ist Eingreifen.
Darum gilt:
- **Farbe und Form** zeigen Zustand.
- **Hover** erklärt.
- **Click** öffnet Steuerung.

### 2.4 Bestehende UI bleibt erhalten
Die aktuelle tab-basierte Oberfläche bleibt vorerst als:
- Detailansicht
- Fallback
- Vollkonfigurationsraum
- Diagnose-/Engineering-Oberfläche

Der neue Flow View ist also ein **zusätzlicher View**, kein sofortiger kompletter Ersatz.

---

## 3. Hauptnutzen des Views

Der View soll drei Dinge gleichzeitig leisten:

1. **Observability**  
   Wo steht das System? Welche Stufe ist gesund? Was ist degradet? Wo liegt der Fehler?

2. **Navigation**  
   Klick auf ein Modul führt direkt zur passenden Steuerung, statt Tabs/Panels suchen zu müssen.

3. **Control**  
   Häufige und domänennah passende Eingriffe können direkt am jeweiligen Modul stattfinden.

---

## 4. Platz im Produkt

## Top-Level-Position
Empfohlene Tabs / Hauptviews:
- `Flow`
- `Control`
- `Diagnostics`
- `Activity`

Dabei gilt:
- **Flow** = Hauptansicht für Operatoren und für systemisches Verständnis
- **Control** = Form-/Panel-basierte Bearbeitung und Vollkonfiguration
- **Diagnostics** = tiefe Runtime-/Health-/Audit-Ansicht
- **Activity** = Logs / Historie

Der neue View soll also idealerweise als erster oder linker Haupttab erscheinen.

---

## 5. Grundlayout des Flow Views

## 5.1 Grundstruktur
Der View besteht aus vier Zonen:

### A. Top Status Bar
Persistente Betriebsleiste mit:
- Markenname `ferrite.fm`
- TX-Status (`ON AIR`, `OFF AIR`, `DEGRADED`, `FAULT`)
- Frequency (Applied / Target)
- Connection / Control-Plane-Status
- Last issue / active alarm
- Emergency Actions (`Stop TX`, `Reset Fault`)

### B. Horizontale Signalfluss-Zeile
Die zentrale Fläche des Views.
Hier liegen die Module als horizontale Pipeline mit Verbindungsstrecken dazwischen.

### C. Detail / Popover-Ebene
Nicht dauerhaft offen. Öffnet sich:
- per Hover als kompakte Statusblase
- per Klick als interaktiver Popover / Inspector

### D. Optionaler Bottom Strip / Runtime Summary
Schmale sekundäre Leiste für:
- aktive Warnings
- Queue Health
- Ingest state
- last change
- runtime age

---

## 6. Die Module im Signalfluss

Der Flow View soll echte, betrieblich relevante Knoten zeigen.
Keine dekorativen Zwischenboxen.

Empfohlene Basiskette:

1. **Source**
2. **Ingest / Buffer**
3. **Audio**
4. **Processing**
5. **Stereo**
6. **RDS**
7. **Composite / MPX**
8. **TX / RF**

### 6.1 Source
**Bedeutung:** Ursprungsquelle des Programmsignals.

**Mögliche Zustände:**
- no source / idle
- connected
- reconnecting
- missing
- blocked

**Beispiele für Daten:**
- `ingest.kind`
- active origin / URL / stream name
- stream title (falls relevant)
- transport / codec
- connected / disconnected

**Popover-Steuerung:**
- Source kind
- Source URL / stream target
- Decoder mode
- grundlegende source-spezifische Optionen
- Link zur vollen Ingest-Konfiguration

### 6.2 Ingest / Buffer
**Bedeutung:** Annahme, Vorpufferung, Runtime-Stabilisierung.

**Mögliche Zustände:**
- healthy
- low buffer
- write blocked
- reconnecting
- stalled
- critical

**Beispiele für Daten:**
- prebuffer state
- buffered seconds
- reconnect count
- source state
- runtime state
- last chunk time

**Popover-Steuerung:**
- Prebuffer
- reconnect settings
- ggf. source-related runtime controls
- Link zu tiefer Diagnose

### 6.3 Audio
**Bedeutung:** Programmaudio-Grundparameter vor Stereo-/MPX-Pfaden.

**Mögliche Zustände:**
- active
- tone mode active
- muted / no input
- warning if gain/levels suspicious

**Beispiele für Daten:**
- input gain
- tone left / right / amplitude
- source activity summary

**Popover-Steuerung:**
- input gain
- tone controls
- ggf. source audio mode

### 6.4 Processing
**Bedeutung:** Eingriffe in Klangbearbeitung und Compliance-nahe Audio-/Processing-Stufen.

**Mögliche Zustände:**
- healthy
- limiter active
- compliance pending restart
- clipper active
- warning if inconsistent config/runtime impact exists

**Beispiele für Daten:**
- limiter enabled / ceiling
- pre-emphasis
- BS.412 enabled
- composite clipper enabled / iterations / knee / lookahead

**Popover-Steuerung:**
- limiter
- ceiling
- pre-emphasis
- compliance settings
- composite clipper settings

### 6.5 Stereo
**Bedeutung:** Stereo-Multiplex-Aufbereitung.

**Mögliche Zustände:**
- stereo on
- mono / stereo disabled
- pilot warning
- degraded if stereo mode or pilot abnormal

**Beispiele für Daten:**
- stereo enabled
- stereo mode
- pilot level

**Popover-Steuerung:**
- stereo on/off
- stereo mode
- pilot level

### 6.6 RDS
**Bedeutung:** Metadaten- und RDS-Subsystem.

**Mögliche Zustände:**
- active
- disabled
- active text relay
- degraded if metadata mismatch / relay issue / config inconsistency

**Beispiele für Daten:**
- RDS enabled
- PI / PTY
- PS / RadioText
- TP / TA
- active on-air text
- RDS2 summary if enabled

**Popover-Steuerung:**
- enable/disable
- PI / PTY
- PS / RT
- TP / TA
- RDS features shortcut

### 6.7 Composite / MPX
**Bedeutung:** Endstufe des zusammengesetzten Multiplexsignals vor TX.

**Mögliche Zustände:**
- healthy
- high injection
- compliance risk
- degraded if MPX gain / injection values suspicious

**Beispiele für Daten:**
- pilot level
- RDS injection
- MPX gain
- clipper state
- BS.412 state

**Popover-Steuerung:**
- pilot
- RDS injection
- MPX gain
- clipper toggle shortcut

### 6.8 TX / RF
**Bedeutung:** Ausgang / SDR / Sendezustand.

**Mögliche Zustände:**
- on air
- idle
- arming
n- degraded
- muted
- faulted
- stopping

**Beispiele für Daten:**
- applied frequency
- desired frequency
- runtime state
- queue health
- underruns
- last fault
- backend / driver

**Popover-Steuerung:**
- start / stop TX
- reset fault
- frequency
- quick runtime summary

---

## 7. Statusmodell

Farben und Zustände müssen über alle Module konsistent sein.

### 7.1 Primäre Modulzustände
- **Green** → active / healthy / normal
- **Amber** → degraded / warning / pending / attention needed
- **Red** → fault / error / blocked / disconnected in fault-relevant stage
- **Gray** → disabled / bypassed / inactive / not configured
- **Blue outline** → selected / focused in UI

### 7.2 Zustandslogik
Nicht jedes Modul nutzt dieselben Regeln, aber dieselbe Farbe bedeutet denselben operativen Charakter.

Beispiele:
- Source disconnected = rot, wenn ingest erwartet wird
- RDS disabled = grau, nicht rot
- TX idle = grau oder neutral, nicht rot
- queue critical = rot
- restart required = amber indicator, aber nicht automatisch roter Modulstatus

### 7.3 Zusätzliche Marker
Neben der Grundfarbe kann ein Modul kleine sekundäre Marker tragen:
- `pending` indicator
- `restart required`
- `reload required`
- `draft exists`

Diese Marker sollen aber klein und sekundär bleiben.

---

## 8. Hover-Verhalten

Hover soll eine **kompakte Statusblase** öffnen.

### Prinzipien
- Schnell erfassbar
- Kein Formular
- Kein Scrollmonster
- Max. 5–7 Zeilen
- Klare Typografie

### Inhalt pro Hover-Blase
1. Modulname
2. Zustand in Klartext
3. 2–5 wichtigste Metriken / Werte
4. optional letzter Hinweis / letzter Fehler
5. evtl. Zeitbezug (`updated 4s ago`)

### Beispiel RDS Hover
- RDS
- Status: Active
- PI: BEEF
- PS: FERRITE
- RT: Now playing ...
- TP/TA: off / off
- updated 2s ago

### Beispiel TX Hover
- TX / RF
- State: Running
- Applied: 99.5 MHz
- Target: 99.5 MHz
- Queue: normal (67%)
- Underruns: 0
- Runtime age: 18m

---

## 9. Click-Verhalten / Popover

Ein Klick auf ein Modul öffnet einen **Popover / Inspector**, nicht sofort ein Fullscreen-Modal.

## 9.1 Ziel
- Schnell editierbare Kernparameter
- Kontext bleibt sichtbar
- Fokus bleibt auf dem Signalfluss

## 9.2 Struktur des Popovers
- Modulname + Statuskopf
- kleine Summary
- relevante Einstellfelder
- Apply-/Action-Bereich
- Link / Button zu "Open full controls"

## 9.3 Regeln
- Nur die wichtigsten Bedienelemente inline
- Tiefe Spezialkonfiguration weiter in der bestehenden Control-View
- Kritische Aktionen klar trennen

### Beispiele

#### TX Popover
- Start TX / Stop TX
- Reset Fault
- Frequency field
- Applied / target summary

#### RDS Popover
- Enable RDS
- PI
- PTY
- PS
- RT
- TP/TA

#### Processing Popover
- Limiter on/off
- Ceiling
- Pre-emphasis
- BS.412 on/off
- Composite clipper toggle

---

## 10. Navigations- und Wechselmodell

Der Flow View soll sich nicht isoliert anfühlen.
Jedes Modul kann zusätzlich einen Übergang in die bestehende UI bieten:
- `Open full controls`
- `Open diagnostics`
- `Open ingest panel`
- direkter Link zum **entsprechenden Tab bzw. Panel** der bestehenden Detail-UI

So wird der Flow View zur Primärnavigation, ohne alles selbst lösen zu müssen.

### Festlegung
Popover bleiben **Quick Control** und sollen bewusst flach bleiben. Für tiefere Arbeit gibt es immer einen direkten Sprung in die bestehende Detail-UI an die passende Stelle.

---

## 11. Visual Language

## 11.1 Stilprinzipien
- nüchtern
- präzise
- professionell
- ruhig
- hohe Informationsdichte ohne Chaos

## 11.2 Look & Feel
- heller bis neutraler Hintergrund bleibt möglich
- weniger Card-Sammlung, mehr zusammenhängende technische Arbeitsfläche
- Module als klar definierte Knoten mit Verbindungslinien
- Verbindungslinien dezent, aber lesbar
- Symbole sachlich und funktional, nicht verspielt

## 11.3 Symbolik
Jedes Modul erhält ein einfaches, wiedererkennbares Icon, z. B.:
- Source → Stecker / Input / Antenne / Link
- Buffer → Stack / Queue / Reservoir
- Audio → Waveform / Fader
- Processing → Filter / dynamics / knob cluster
- Stereo → linked channels / L-R icon
- RDS → text / metadata / broadcast tag
- Composite → multiplex / spectrum-like icon
- TX → antenna / RF output

Wichtig:
Icons unterstützen, ersetzen aber nie die Lesbarkeit.

---

## 12. Responsive Verhalten

Der View ist primär Desktop-/Operator-first.
Mobile ist sekundär, aber nicht ignoriert.

### Desktop
- horizontale Kette in einer Zeile
- Popover seitlich / unterhalb des aktiven Moduls

### Tablet / kleinere Fenster
- Kette darf umbrechen in 2 Zeilen, aber logisch lesbar bleiben
- Verbindungslogik optisch erhalten

### Mobile
- keine ambitionierte Vollsimulation der Horizontalkonsole
- stattdessen vereinfachte vertikale Step-Ansicht
- Hover-Konzept wird zu Tap-Details

---

## 13. Technische Datenquellen

Der View soll möglichst aus bereits vorhandenen Daten gespeist werden.

### Bereits vorhanden / nutzbar
- `/status`
- `/runtime`
- `/config`
- bestehende Draft-/Apply-Logik in `ui.html`

### Erwartete Zuordnung
- Source / Ingest / Buffer ← `runtime.ingest`, `config.ingest`
- Audio / Processing / Stereo / RDS / MPX ← `config`, `runtime.engine`, teilweise `status`
- TX / RF ← `runtime.engine`, `runtime.driver`, `status`

### Wichtige Designregel
Der View darf zunächst **read-mostly + selectively writable** sein.
Nicht alles muss in Version 1 voll editierbar sein.

---

## 14. MVP-Scope

Für eine erste brauchbare Version reichen:

### Muss enthalten
- neuer `Flow`-Tab
- horizontale Modulkette
- Statusfarben pro Modul
- Hover-Details pro Modul
- Click öffnet kompakten Popover
- pro Modul 1–3 relevante Kernaktionen
- klare Verbindung zur bestehenden Control-Ansicht

### Darf zunächst fehlen
- hochkomplexe Inline-Editoren
- Drag & Drop
- Mini-Sparklines in jedem Modul
- Animationen entlang des Flows
- komplette Mobile-Perfektion

---

## 15. Anti-Ziele

Der Flow View soll **nicht** werden:
- eine dekorative Netzwerkgraph-Spielerei
- eine überanimierte "wow"-Fläche
- ein unlesbares Technikposter
- ein Vollersatz für jede Detailkonfiguration in Version 1
- eine Oberfläche, bei der Farbe das einzige Statussignal ist

---

## 16. Nächste Umsetzungsstufe

### Stufe 1 — UX-Skelett
- neuen Tab `Flow` anlegen
- statische Modulkette rendern
- Icons + Titel + Statusfarben
- ausgewählte Runtime-/Config-Werte anbinden

### Stufe 2 — Interaktion
- Hover-Bubbles
- Click-Popover
- Quick actions für TX / RDS / Frequency / Source

### Stufe 3 — Integration
- Draft-/Apply-Mechanik für Kernmodule
- Übergänge zu bestehender Detail-UI
- sauberer Pending-/Restart-/Reload-Status

### Stufe 4 — Broadcast-Polish
- strengere visuelle Hierarchie
- Alarm-Layer
- optional Operator-/Engineering-Abstufung

---

## 17. Getroffene Designentscheidungen

### 17.1 Stereo und RDS
**Entscheidung:** `Stereo` und `RDS` werden als **getrennte Knoten** dargestellt.

**Begründung:**
- fachlich klarer
- RDS bleibt als eigenes Broadcast-Subsystem sichtbar
- Fehlerursachen werden präziser lesbar
- passt besser zu einer professionellen Broadcast-/Signalpfad-Sicht

### 17.2 Composite / MPX
**Entscheidung:** `Composite / MPX` wird als **eigener Knoten** dargestellt.

**Begründung:**
- Broadcast-technisch zentrale Stufe
- trennt Audio-/Processing-Welt sauber von der Multiplex-/Deviation-Ebene
- macht Pilot, RDS-Injection, MPX Gain und Composite-Verhalten sichtbar an der richtigen Stelle

### 17.3 Popover-Tiefe
**Entscheidung:** Popover bleiben **Quick Control**.

**Regel:**
- wenige Kernaktionen / Kernfelder direkt im Popover
- keine Vollkonfiguration im Flow View
- tiefe Bearbeitung erfolgt über direkten Link in den passenden Tab bzw. das passende Panel der bestehenden Detail-UI

### 17.4 Globaler Alarm-Banner
**Entscheidung:** Ein globaler Alarm-Banner oberhalb des Flows ist sinnvoll, aber **nur kontextuell sichtbar**.

**Regel:**
- sichtbar bei aktiven Faults / relevanten Degraded-Zuständen / betrieblich relevanten Warnings
- nicht als permanentes Alarmband
- kompakt, klar, operator-first

### 17.5 Stil
**Entscheidung:** Der View wird **technisch-klar mit leichter visueller Abstraktion** umgesetzt.

**Regel:**
- echte Modulnamen
- echte Signalpfad-Logik
- präzise Zustände
- nüchterne, moderne technische Konsole statt Spielerei oder retro-technischer Härte

---

## 18. Festgelegte Architektur für die erste Realisierung

Empfehlung für die erste Realisierung:
- eigener `Flow`-Tab
- acht klare Knoten
- strikte Statusfarben
- Hover für Status
- Click für kleine Popover
- Popover als Quick Control
- direkter Link in passende Detail-Tabs/Panels
- globaler Alarm-Banner nur bei Relevanz
- bestehende UI bleibt Vollkonfigurations-/Fallback-Ebene

### Festgelegte Modulkette
- `Source`
- `Ingest / Buffer`
- `Audio`
- `Processing`
- `Stereo`
- `RDS`
- `Composite / MPX`
- `TX / RF`

Das ist der pragmatischste Weg zu einer professionelleren Broadcast-Oberfläche, ohne die vorhandene UI sofort wegzuwerfen.

---

## 19. Konkretes Modul- und Wireframe-Schema

Dieser Abschnitt definiert den ersten baubaren MVP des Flow Views.

## 19.1 Gesamt-Wireframe

### Obere Leiste
Von links nach rechts:
1. `ferrite.fm` Wortmarke / Produktname
2. globaler TX-Zustand
3. Applied / Target Frequency
4. Source Summary
5. Active Alarm / Warning Banner (nur wenn relevant)
6. Emergency Actions (`Stop TX`, `Reset Fault`)

### Flow-Zeile
Eine horizontale Kette mit 8 Modulknoten.
Jeder Knoten besitzt:
- Icon
- Namen
- Statusfarbe
- 1 kurze Sekundärzeile
- Hover-Bubble
- Click-Popover

### Verbindungssegmente
Zwischen den Knoten liegen simple horizontale Linien / Segmente.
Optional können Segmente dieselbe Statusfarbe wie der nachfolgende Knoten aufnehmen oder neutral bleiben. Für MVP besser neutral und ruhig halten.

### Untere Sekundärzone
Schmale Zeile für:
- queue health
- ingest state
- runtime age
- last update

Keine große zweite Dashboard-Wand. Nur kompakte Betriebszusammenfassung.

---

## 19.2 Knoten-Spezifikation

## A. Source
### Icon
- Input / link / connector symbol

### Primärlabel
- `Source`

### Sekundärzeile
- aktiver Typ, z. B. `icecast`, `srt`, `aes67`, `stdin`, `http-raw`, `none`

### Primärstatuslogik
- green → connected / active source
- amber → reconnecting / degraded
- red → source expected but disconnected / failed
- gray → no source / none configured

### Hover-Inhalt
- Source kind
- Origin / endpoint / stream name
- Transport / codec (falls verfügbar)
- Connection state
- Reconnect count / last error (falls vorhanden)

### Quick-Control-Popover
- source kind (read-only oder einfacher selector nur wenn sinnvoll)
- URL / endpoint (wenn einfache Bearbeitung vertretbar)
- decoder mode (bei icecast)
- reconnect enabled
- Button: `Open Input details`

### Linkziel im Detail-UI
- Tab: `Ingest`
- Fokus: `Ingest Config`

---

## B. Ingest / Buffer
### Icon
- queue / buffer / stacked blocks

### Primärlabel
- `Ingest / Buffer`

### Sekundärzeile
- z. B. `1.5s buffered`, `prebuffering`, `write blocked`, `healthy`

### Primärstatuslogik
- green → healthy ingest runtime
- amber → low buffer / reconnecting / prebuffering / delayed
- red → critical / stalled / write blocked with active fault relevance
- gray → ingest inactive

### Hover-Inhalt
- Runtime state
- Buffered seconds
- Prebuffer state
- Last chunk age
- Reconnect count
- Write blocked yes/no

### Quick-Control-Popover
- prebuffer ms
- reconnect enabled
- initial/max backoff
- Button: `Open Ingest config`
- Button: `Open Diagnostics`

### Linkziel im Detail-UI
- Tab: `Ingest`
- Fokus: `Ingest Config`

---

## C. Audio
### Icon
- waveform / fader

### Primärlabel
- `Audio`

### Sekundärzeile
- z. B. `gain 1.00`, `tones off`, `tones active`

### Primärstatuslogik
- green → active / healthy
- amber → unusual tone mode / suspicious gain / weak signal condition
- red → no usable audio in relevant runtime state
- gray → inactive / no source

### Hover-Inhalt
- input gain
- tone left/right
- tone amplitude
- audio activity summary

### Quick-Control-Popover
- input gain
- tone left
- tone right
- tone amplitude
- Button: `Open Audio controls`

### Linkziel im Detail-UI
- Tab: `TX Control`
- Fokus: `Audio & Drive`

---

## D. Processing
### Icon
- filter / dynamics / processor block

### Primärlabel
- `Processing`

### Sekundärzeile
- z. B. `limiter on`, `pre-emphasis 50µs`, `BS.412 off`

### Primärstatuslogik
- green → healthy / nominal
- amber → restart required / compliance attention / unusual setting combination
- red → critical processing/compliance state (nur falls wirklich fault-relevant)
- gray → inactive / bypassed if such mode exists

### Hover-Inhalt
- limiter on/off + ceiling
- pre-emphasis
- BS.412 enabled + threshold
- clipper enabled summary

### Quick-Control-Popover
- limiter enabled
- limiter ceiling
- pre-emphasis
- BS.412 enabled
- Button: `Open Processing controls`

### Linkziel im Detail-UI
- Tab: `TX Control`
- Fokus: `Audio & Drive` oder `MPX Compliance`

---

## E. Stereo
### Icon
- linked L/R or stereo channels icon

### Primärlabel
- `Stereo`

### Sekundärzeile
- z. B. `DSB`, `stereo on`, `mono`

### Primärstatuslogik
- green → stereo enabled and healthy
- amber → non-default mode / pilot attention / pending state
- gray → stereo disabled / mono
- red → only if runtime actually indicates a fault-worthy stereo stage problem

### Hover-Inhalt
- stereo enabled
- stereo mode
- pilot level

### Quick-Control-Popover
- stereo enabled
- stereo mode
- pilot level
- Button: `Open Stereo controls`

### Linkziel im Detail-UI
- Tab: `TX Control`
- Fokus: `Switches`

---

## F. RDS
### Icon
- metadata / text / radio-data symbol

### Primärlabel
- `RDS`

### Sekundärzeile
- z. B. `PS FERRITE`, `RT active`, `disabled`

### Primärstatuslogik
- green → enabled and active
- amber → enabled but metadata stale / pending / mixed runtime impact / relay mismatch
- gray → disabled
- red → only if a real operational RDS fault state is surfaced

### Hover-Inhalt
- enabled / disabled
- PI
- PTY
- PS
- active RT
- TP / TA
- RDS2 summary if applicable

### Quick-Control-Popover
- enable RDS
- PI
- PTY
- PS
- RT
- TP / TA
- Button: `Open RDS details`

### Linkziel im Detail-UI
- Tab: `RDS`
- Fokus: `Station Identity` or `On-Air Text`

---

## G. Composite / MPX
### Icon
- multiplex / layered-spectrum symbol

### Primärlabel
- `Composite / MPX`

### Sekundärzeile
- z. B. `pilot 9%`, `RDS 4%`, `mpx 1.00`

### Primärstatuslogik
- green → nominal multiplex state
- amber → high injection / compliance attention / restart pending / unusual MPX values
- red → critical compliance or composite issue if surfaced
- gray → inactive when TX chain inactive

### Hover-Inhalt
- pilot level
- RDS injection
- MPX gain
- composite clipper state
- BS.412 state

### Quick-Control-Popover
- pilot level
- RDS injection
- MPX gain
- clipper enabled shortcut
- Button: `Open MPX controls`

### Linkziel im Detail-UI
- Tab: `TX Control` or `RDS`
- Fokus: `MPX Compliance` or `Injection Levels`

---

## H. TX / RF
### Icon
- antenna / RF output / transmitter symbol

### Primärlabel
- `TX / RF`

### Sekundärzeile
- z. B. `99.5 MHz`, `ON AIR`, `idle`, `faulted`

### Primärstatuslogik
- green → running / on air
- amber → arming / degraded / muted / stopping
- red → faulted
- gray → idle / off air

### Hover-Inhalt
- runtime state
- applied frequency
- target frequency
- queue health
- underruns
- backend / driver
- last fault summary

### Quick-Control-Popover
- start TX / stop TX
- reset fault
- frequency
- refresh runtime
- Button: `Open TX control`

### Linkziel im Detail-UI
- Tab: `Overview` or `TX Control`
- Fokus: `Frequency` / Hero area

---

## 19.3 Globale Interaktion

### Hover
- Öffnet kompakte Bubble
- bubble schließt automatisch beim Verlassen
- kein interaktives Formular im Hover

### Click
- öffnet Popover am Knoten
- nur ein Popover gleichzeitig offen
- Klick außerhalb schließt Popover
- ESC schließt Popover

### Statusbanner
- erscheint oberhalb des Flows nur bei Relevanz
- enthält Severity + Kurztext + optionalen Deep-Link

---

## 19.4 MVP-Bauplan

### Phase MVP-1
- statischer `Flow`-Tab
- acht Knoten
- Statusfarben
- Sekundärzeilen
- read-only Hover-Bubbles

### Phase MVP-2
- interaktive Popover
- erste Quick Controls für TX, RDS, Source, Processing
- Deep-Links in bestehende Tabs/Panels

### Phase MVP-3
- Draft-/Apply-Anbindung
- konsistente Pending-/Restart-/Reload-Marker
- Alarm-Banner
