Design-Refresh: Themes (Iris/Graphit/Papier), Light/Dark, Liquid Glass #261

Closed
opened 2026-10-31 10:50:43 +00:00 by alf · 24 comments
Owner

Warum

Das Design ist funktional, aber austauschbar: Alle Farben in DS.Colors sind feste Hex-Werte (nur Dark), Akzent ist Tailwind-Blue-600, Eckenradien streuen (4/5/6/7/8/10/12), 357 Stellen umgehen DSFont mit .font(.system(size:)), 22 Dateien tragen Farbliterale. Es gibt kein Light/Dark und keine Themes.

Entscheidungen (grill-me, 2026-10-31)

  • Themes: Iris, Graphit, Papier; jedes mit Hell- und Dunkel-Variante. Modus (System/Hell/Dunkel) und Theme sind getrennte Einstellungen, pro Gerät lokal (UserDefaults), Standard Iris + System. Kein Wire-Protokoll.
  • Akzent: fester Akzent pro Theme, flache Farbe; Verlauf nur als Highlight (Primärbuttons, Logo, Leerzustände).
  • Iris-Palette: Indigo/Violett, kühle Neutrale.
  • Liquid Glass: überall, wo es passt, mit Theme-Tint; Inhalte auf opaken Theme-Flächen. Targets bleiben (macOS 14.2 / iOS 17), Glass per #available mit Material-Fallback.
  • Tokens: neues Swift Package im eigenen Repo iris/IrisDesign, per SPM in Mac und iOS; DS.Colors wird dünne Fassade.
  • Reichweite: Mac + iOS inkl. WebViews (CSS-Variablen) und Plugin-Tokens (IrisCanvasColorTokens). Linux-Client und iris-web bleiben außen vor.

Etappen

  • E1 Fundament + Iris-Theme hell/dunkel (gebaut, status/zu-testen; Mac #262/#263/#264, iOS 2ndbrain-ios#65, Package iris/IrisDesign#1): Package, dynamische Tokens, Moduswahl, WebViews, Plugin-Tokens, Literale/Fonts/Radien aufräumen. Palette-Vorschau abgenommen. Radien: drei Stufen 6 / 8 / 12; Schriftstufen laufen unter #217.
  • E2 Themes Graphit und Papier, Theme-Auswahl, Wechsel zur Laufzeit (gebaut, status/zu-testen; Package iris/IrisDesign#2, Mac Remote-Fenster, iOS-Einstellungen).
  • E3 Liquid Glass und Feinschliff (Chat-Layout, Animationen, Leerzustände).

iOS-Teil: iris/2ndbrain-ios (eigenes Issue).

## Warum Das Design ist funktional, aber austauschbar: Alle Farben in `DS.Colors` sind feste Hex-Werte (nur Dark), Akzent ist Tailwind-Blue-600, Eckenradien streuen (4/5/6/7/8/10/12), 357 Stellen umgehen `DSFont` mit `.font(.system(size:))`, 22 Dateien tragen Farbliterale. Es gibt kein Light/Dark und keine Themes. ## Entscheidungen (grill-me, 2026-10-31) - **Themes:** Iris, Graphit, Papier; jedes mit Hell- und Dunkel-Variante. Modus (System/Hell/Dunkel) und Theme sind getrennte Einstellungen, pro Gerät lokal (UserDefaults), Standard Iris + System. Kein Wire-Protokoll. - **Akzent:** fester Akzent pro Theme, flache Farbe; Verlauf nur als Highlight (Primärbuttons, Logo, Leerzustände). - **Iris-Palette:** Indigo/Violett, kühle Neutrale. - **Liquid Glass:** überall, wo es passt, mit Theme-Tint; Inhalte auf opaken Theme-Flächen. Targets bleiben (macOS 14.2 / iOS 17), Glass per `#available` mit Material-Fallback. - **Tokens:** neues Swift Package im eigenen Repo `iris/IrisDesign`, per SPM in Mac und iOS; `DS.Colors` wird dünne Fassade. - **Reichweite:** Mac + iOS inkl. WebViews (CSS-Variablen) und Plugin-Tokens (`IrisCanvasColorTokens`). Linux-Client und iris-web bleiben außen vor. ## Etappen - [x] **E1** Fundament + Iris-Theme hell/dunkel (gebaut, `status/zu-testen`; Mac #262/#263/#264, iOS 2ndbrain-ios#65, Package iris/IrisDesign#1): Package, dynamische Tokens, Moduswahl, WebViews, Plugin-Tokens, Literale/Fonts/Radien aufräumen. Palette-Vorschau abgenommen. Radien: drei Stufen 6 / 8 / 12; Schriftstufen laufen unter #217. - [x] **E2** Themes Graphit und Papier, Theme-Auswahl, Wechsel zur Laufzeit (gebaut, `status/zu-testen`; Package iris/IrisDesign#2, Mac Remote-Fenster, iOS-Einstellungen). - [ ] **E3** Liquid Glass und Feinschliff (Chat-Layout, Animationen, Leerzustände). iOS-Teil: iris/2ndbrain-ios (eigenes Issue).
Author
Owner

PR #1 gemergt: feat(palette): Package IrisDesign mit Iris-Palette, Theme und Modus (iris/Iris#261)
http://docker:3000/iris/IrisDesign/pulls/1

Commits:

  • feat(palette): Package IrisDesign mit Iris-Palette, Theme und Modus (iris/Iris#261)

Stand: Package IrisDesign angelegt (Etappe 1, Schritt 1)

Befund: Die Tokens liegen bisher nur im Mac-Target (DS.Colors, feste Hex-Werte, nur Dunkel); iOS hat einen eigenen Shim.

Geändert: Neues Repo iris/IrisDesign (main geschützt, Merge „Rebase“) mit dem Swift Package: Palette (Iris-Palette, Indigo mit kühlen Neutralen, Hell und Dunkel), Theme/ThemeMode (UserDefaults uiTheme, uiThemeMode), IrisColors (dynamische Colors für AppKit und UIKit), ThemeMode.applyToApp().

Geprüft: swift test auf macOS: Hex-Parser, Fallback auf Standardwerte, und der Kontrast aller Palette-Token in Hell und Dunkel (Text 4,5:1, Tertiärtext und Statusfarben 3:1, Text auf Akzent 4,5:1). Der Test hat einen Fehler der Vorschau gefunden: weißer Text auf dem dunklen Akzent #6C6CF0 kam nur auf 4,17:1; der dunkle Akzent ist jetzt #6262EA (4,71:1), Hover #5656DA.

Nicht geprüft: Der UIKit-Zweig (UIColor-Provider, applyToApp() auf iOS) ist noch nicht kompiliert. Die Einbindung in Iris.app und IrisRemote folgt im nächsten Schritt.

Offen: Einbinden in Iris.app/IrisClient.app (DS.Colors als Fassade), WebViews, Plugin-Tokens, Einstellungs-UI, Aufräumen der Farbliterale, danach iOS (iris/2ndbrain-ios#64).

PR #1 gemergt: feat(palette): Package IrisDesign mit Iris-Palette, Theme und Modus (iris/Iris#261) http://docker:3000/iris/IrisDesign/pulls/1 Commits: - feat(palette): Package IrisDesign mit Iris-Palette, Theme und Modus (iris/Iris#261) --- **Stand: Package IrisDesign angelegt (Etappe 1, Schritt 1)** **Befund:** Die Tokens liegen bisher nur im Mac-Target (`DS.Colors`, feste Hex-Werte, nur Dunkel); iOS hat einen eigenen Shim. **Geändert:** Neues Repo `iris/IrisDesign` (main geschützt, Merge „Rebase“) mit dem Swift Package: `Palette` (Iris-Palette, Indigo mit kühlen Neutralen, Hell und Dunkel), `Theme`/`ThemeMode` (UserDefaults `uiTheme`, `uiThemeMode`), `IrisColors` (dynamische Colors für AppKit und UIKit), `ThemeMode.applyToApp()`. **Geprüft:** `swift test` auf macOS: Hex-Parser, Fallback auf Standardwerte, und der Kontrast aller Palette-Token in Hell und Dunkel (Text 4,5:1, Tertiärtext und Statusfarben 3:1, Text auf Akzent 4,5:1). Der Test hat einen Fehler der Vorschau gefunden: weißer Text auf dem dunklen Akzent `#6C6CF0` kam nur auf 4,17:1; der dunkle Akzent ist jetzt `#6262EA` (4,71:1), Hover `#5656DA`. **Nicht geprüft:** Der UIKit-Zweig (`UIColor`-Provider, `applyToApp()` auf iOS) ist noch nicht kompiliert. Die Einbindung in Iris.app und IrisRemote folgt im nächsten Schritt. **Offen:** Einbinden in Iris.app/IrisClient.app (`DS.Colors` als Fassade), WebViews, Plugin-Tokens, Einstellungs-UI, Aufräumen der Farbliterale, danach iOS (iris/2ndbrain-ios#64).
Author
Owner

PR #262 gemergt: feat(design): IrisDesign einbinden, DS.Colors als Fassade, Darstellung System/Hell/Dunkel (#261)
http://docker:3000/iris/Iris/pulls/262

Commits:

  • feat(design): IrisDesign einbinden, DS.Colors als Fassade, Darstellung System/Hell/Dunkel (#261)

Stand: Mac-App auf IrisDesign umgestellt, Hell/Dunkel wählbar (Etappe 1, Schritt 2)

Befund: DS.Colors waren feste Dunkel-Hex-Werte; 54 Überlagerungen nutzten Color.white.opacity(…) (im Hellmodus unsichtbar), die Git-Diff-Ansichten hatten feste helle Textfarben auf festem dunklem Grund.

Geändert:

  • Package iris/IrisDesign (branch main) als Abhängigkeit von Iris und IrisClient eingetragen.
  • DS.Colors ist jetzt eine Fassade über IrisColors (Iris-Palette, dynamisch Hell/Dunkel). Die Namen bleiben, die rund 2000 Aufrufstellen sind unverändert. Das Tailwind-Blau (blue…) bleibt für die wenigen direkten Nutzer.
  • Einstellungen → Darstellung: System / Hell / Dunkel, gilt sofort (ThemeMode.applyToApp()), beim Start gesetzt in IrisApp und IrisClientApp.
  • 54× Color.white.opacity(x) → DS.Colors.textPrimary.opacity(x); Git-Diff-Ansichten (lokal und remote) auf Tokens umgestellt.
  • Übersetzungen (de) für die neuen Texte in Localizable.xcstrings.

Geprüft: Iris.xcodeproj baut (Scheme Iris, per Xcode), Binary-Zeitstempel kontrolliert; das Package löst sich auf (Package.resolved nennt irisdesign @ 637b2ab). Plugin-Blöcke bekommen DS-Farben und folgen damit dem Modus; Markdown ist natives SwiftUI mit DS-Tokens.

Nicht geprüft: Nichts davon wurde gestartet oder angesehen, weder Hell noch Dunkel. IrisClient wurde nicht gebaut (nur das Scheme Iris). Moduswechsel bei geöffneten Fenstern, KaTeX-Formeln (werden als Bild in der Farbe zum Renderzeitpunkt erzeugt, wechseln erst beim nächsten Rendern), WKWebView-Plugins mit festen Dunkelfarben (liegen bei den Plugins), die übrigen Farbliterale (Marken- und Statusfarben wie Hermes-Violett bleiben bewusst).

Grenzen: Das dunkle Aussehen ändert sich gegenüber vorher (neue Palette: Indigo statt Grün-Grau/Tailwind-Blau). Theme-Wechsel (Graphit, Papier) gibt es erst in Etappe 2.

Offen: Schriftstufen (357× .font(.system(size:))) und Eckenradien vereinheitlichen; Anschauen in Hell und Dunkel durch dich; iOS (iris/2ndbrain-ios#64).

PR #262 gemergt: feat(design): IrisDesign einbinden, DS.Colors als Fassade, Darstellung System/Hell/Dunkel (#261) http://docker:3000/iris/Iris/pulls/262 Commits: - feat(design): IrisDesign einbinden, DS.Colors als Fassade, Darstellung System/Hell/Dunkel (#261) --- **Stand: Mac-App auf IrisDesign umgestellt, Hell/Dunkel wählbar (Etappe 1, Schritt 2)** **Befund:** `DS.Colors` waren feste Dunkel-Hex-Werte; 54 Überlagerungen nutzten `Color.white.opacity(…)` (im Hellmodus unsichtbar), die Git-Diff-Ansichten hatten feste helle Textfarben auf festem dunklem Grund. **Geändert:** - Package `iris/IrisDesign` (branch `main`) als Abhängigkeit von Iris und IrisClient eingetragen. - `DS.Colors` ist jetzt eine Fassade über `IrisColors` (Iris-Palette, dynamisch Hell/Dunkel). Die Namen bleiben, die rund 2000 Aufrufstellen sind unverändert. Das Tailwind-Blau (`blue…`) bleibt für die wenigen direkten Nutzer. - Einstellungen → Darstellung: System / Hell / Dunkel, gilt sofort (`ThemeMode.applyToApp()`), beim Start gesetzt in `IrisApp` und `IrisClientApp`. - 54× `Color.white.opacity(x)` → `DS.Colors.textPrimary.opacity(x)`; Git-Diff-Ansichten (lokal und remote) auf Tokens umgestellt. - Übersetzungen (de) für die neuen Texte in `Localizable.xcstrings`. **Geprüft:** Iris.xcodeproj baut (Scheme Iris, per Xcode), Binary-Zeitstempel kontrolliert; das Package löst sich auf (Package.resolved nennt `irisdesign` @ 637b2ab). Plugin-Blöcke bekommen `DS`-Farben und folgen damit dem Modus; Markdown ist natives SwiftUI mit `DS`-Tokens. **Nicht geprüft:** Nichts davon wurde gestartet oder angesehen, weder Hell noch Dunkel. IrisClient wurde nicht gebaut (nur das Scheme Iris). Moduswechsel bei geöffneten Fenstern, KaTeX-Formeln (werden als Bild in der Farbe zum Renderzeitpunkt erzeugt, wechseln erst beim nächsten Rendern), WKWebView-Plugins mit festen Dunkelfarben (liegen bei den Plugins), die übrigen Farbliterale (Marken- und Statusfarben wie Hermes-Violett bleiben bewusst). **Grenzen:** Das dunkle Aussehen ändert sich gegenüber vorher (neue Palette: Indigo statt Grün-Grau/Tailwind-Blau). Theme-Wechsel (Graphit, Papier) gibt es erst in Etappe 2. **Offen:** Schriftstufen (357× `.font(.system(size:))`) und Eckenradien vereinheitlichen; Anschauen in Hell und Dunkel durch dich; iOS (iris/2ndbrain-ios#64).
Author
Owner

PR #137 gemergt: chore(repos): frontend/iris-design in Repo-Landkarte, Vertrag und gitignore (iris/Iris#261)
http://docker:3000/alf/2ndbrain/pulls/137

Commits:

  • chore(repos): frontend/iris-design in Repo-Landkarte, Vertrag und gitignore (iris/Iris#261)
PR #137 gemergt: chore(repos): frontend/iris-design in Repo-Landkarte, Vertrag und gitignore (iris/Iris#261) http://docker:3000/alf/2ndbrain/pulls/137 Commits: - chore(repos): frontend/iris-design in Repo-Landkarte, Vertrag und gitignore (iris/Iris#261)
Author
Owner

PR #138 gemergt: docs(repos): frontend/iris-design in Repo-Landkarte und Projekttabelle (iris/Iris#261)
http://docker:3000/alf/2ndbrain/pulls/138

Commits:

  • docs(repos): frontend/iris-design in Repo-Landkarte und Projekttabelle (iris/Iris#261)
PR #138 gemergt: docs(repos): frontend/iris-design in Repo-Landkarte und Projekttabelle (iris/Iris#261) http://docker:3000/alf/2ndbrain/pulls/138 Commits: - docs(repos): frontend/iris-design in Repo-Landkarte und Projekttabelle (iris/Iris#261)
Author
Owner

PR #263 gemergt: fix(design): Darstellung im Einstellungen-Menü des Remote-Fensters statt im Companion-Panel (#261)
http://docker:3000/iris/Iris/pulls/263

Commits:

  • fix(design): Darstellung im Einstellungen-Menü des Remote-Fensters statt im Companion-Panel (#261)

Stand: Darstellung gehört ins Einstellungen-Menü des Remote-Fensters (Korrektur zu PR #262)

Befund: Die Auswahl System/Hell/Dunkel stand im Companion-Panel. Das Companion-Panel zeigt die Einstellungen der Server-Funktion des Macs; der Client (Remote-Fenster, auch IrisClient) konfiguriert dagegen Client und verbundenen Server. Darstellung ist eine Client-Einstellung und war dort nicht auffindbar.

Geändert: Die Zeile aus CompanionPanelView entfernt. Im Menü „Einstellungen“ von RemoteClientView (Zahnrad in der Werkzeugleiste) gibt es jetzt den Untermenüpunkt „Darstellung“ mit System / Hell / Dunkel (Häkchen an der aktiven Wahl); die Wahl gilt sofort und ist nicht an eine Verbindung gebunden. Dieselbe Ansicht nutzt IrisClient.

Geprüft: Iris.xcodeproj baut (Xcode, Binary-Zeitstempel nach Buildstart kontrolliert).

Nicht geprüft: Nicht gestartet, das Menü und der Wechsel wurden nicht bedient. IrisClient nicht gebaut.

Offen: Die Schriftgröße (#217) liegt noch im Companion-Panel; nach demselben Prinzip wäre sie eine Client-Einstellung. Das gehört zu #217 und wurde hier nicht angefasst.

PR #263 gemergt: fix(design): Darstellung im Einstellungen-Menü des Remote-Fensters statt im Companion-Panel (#261) http://docker:3000/iris/Iris/pulls/263 Commits: - fix(design): Darstellung im Einstellungen-Menü des Remote-Fensters statt im Companion-Panel (#261) --- **Stand: Darstellung gehört ins Einstellungen-Menü des Remote-Fensters (Korrektur zu PR #262)** **Befund:** Die Auswahl System/Hell/Dunkel stand im Companion-Panel. Das Companion-Panel zeigt die Einstellungen der Server-Funktion des Macs; der Client (Remote-Fenster, auch IrisClient) konfiguriert dagegen Client und verbundenen Server. Darstellung ist eine Client-Einstellung und war dort nicht auffindbar. **Geändert:** Die Zeile aus `CompanionPanelView` entfernt. Im Menü „Einstellungen“ von `RemoteClientView` (Zahnrad in der Werkzeugleiste) gibt es jetzt den Untermenüpunkt „Darstellung“ mit System / Hell / Dunkel (Häkchen an der aktiven Wahl); die Wahl gilt sofort und ist nicht an eine Verbindung gebunden. Dieselbe Ansicht nutzt IrisClient. **Geprüft:** Iris.xcodeproj baut (Xcode, Binary-Zeitstempel nach Buildstart kontrolliert). **Nicht geprüft:** Nicht gestartet, das Menü und der Wechsel wurden nicht bedient. IrisClient nicht gebaut. **Offen:** Die Schriftgröße (#217) liegt noch im Companion-Panel; nach demselben Prinzip wäre sie eine Client-Einstellung. Das gehört zu #217 und wurde hier nicht angefasst.
Author
Owner

PR #264 gemergt: refactor(design): Eckenradien auf drei Stufen DS.CornerRadius (#261)
http://docker:3000/iris/Iris/pulls/264

Commits:

  • refactor(design): Eckenradien auf drei Stufen DS.CornerRadius (#261)

Stand: Eckenradien auf drei Stufen (Etappe 1, Abschluss Mac)

Befund: Rund 400 Stellen nutzten Radius-Literale mit sieben verschiedenen Werten (4, 5, 6, 7, 8, 9, 10, 12); DS.CornerRadius wurde nur 31-mal benutzt.

Geändert: DS.CornerRadius hat drei Stufen: small 6, medium 8, large 12 (extraLarge bleibt als Alias von large, pill unverändert). 407 Literale in 73 Dateien (Iris/ und IrisClient/) auf die Tokens umgestellt: 4–7 → small, 8–9 → medium, 10 und 12 → large. Nicht angefasst: 1,5 / 2 / 3 (Hairlines) und 18 (je 1–2 Stellen), IrisPluginKit.

Geprüft: Iris.xcodeproj baut (Xcode, Binary-Zeitstempel nach Buildstart kontrolliert). Alf hat zuvor Hell/Dunkel und das Menü „Darstellung“ im Remote-Fenster angesehen („passt soweit alles“).

Nicht geprüft: Die Radien selbst wurden nicht angesehen; die Änderung ist optisch klein (10 → 12 bei 54 Stellen, 4/5/7 → 6 bei 83 Stellen, sehr kleine Elemente könnten runder wirken). IrisClient nicht gebaut.

Offen: Etappe 2 (Graphit, Papier, Theme-Auswahl), Etappe 3 (Glass, Palette-Flächen auf iOS, Chat-Layout, Animationen, Leerzustände). Radien auf iOS bleiben bei den System-Stilen.

PR #264 gemergt: refactor(design): Eckenradien auf drei Stufen DS.CornerRadius (#261) http://docker:3000/iris/Iris/pulls/264 Commits: - refactor(design): Eckenradien auf drei Stufen DS.CornerRadius (#261) --- **Stand: Eckenradien auf drei Stufen (Etappe 1, Abschluss Mac)** **Befund:** Rund 400 Stellen nutzten Radius-Literale mit sieben verschiedenen Werten (4, 5, 6, 7, 8, 9, 10, 12); `DS.CornerRadius` wurde nur 31-mal benutzt. **Geändert:** `DS.CornerRadius` hat drei Stufen: `small` 6, `medium` 8, `large` 12 (`extraLarge` bleibt als Alias von `large`, `pill` unverändert). 407 Literale in 73 Dateien (Iris/ und IrisClient/) auf die Tokens umgestellt: 4–7 → small, 8–9 → medium, 10 und 12 → large. Nicht angefasst: 1,5 / 2 / 3 (Hairlines) und 18 (je 1–2 Stellen), `IrisPluginKit`. **Geprüft:** Iris.xcodeproj baut (Xcode, Binary-Zeitstempel nach Buildstart kontrolliert). Alf hat zuvor Hell/Dunkel und das Menü „Darstellung“ im Remote-Fenster angesehen („passt soweit alles“). **Nicht geprüft:** Die Radien selbst wurden nicht angesehen; die Änderung ist optisch klein (10 → 12 bei 54 Stellen, 4/5/7 → 6 bei 83 Stellen, sehr kleine Elemente könnten runder wirken). IrisClient nicht gebaut. **Offen:** Etappe 2 (Graphit, Papier, Theme-Auswahl), Etappe 3 (Glass, Palette-Flächen auf iOS, Chat-Layout, Animationen, Leerzustände). Radien auf iOS bleiben bei den System-Stilen.
Author
Owner

PR #2 gemergt: feat(themes): Graphit und Papier, Theme-Wechsel zur Laufzeit (iris/Iris#261)
http://docker:3000/iris/IrisDesign/pulls/2

Commits:

  • feat(themes): Graphit und Papier, Theme-Wechsel zur Laufzeit (iris/Iris#261)

Stand: Themes Graphit und Papier im Package, Wechsel zur Laufzeit (Etappe 2, Schritt 1)

Befund: IrisColors las das Theme einmalig beim ersten Zugriff; ein Wechsel wäre erst nach einem Neustart sichtbar gewesen.

Geändert: Palette.graphit (neutrale Graustufen, Akzent Petrol) und Palette.papier (warmes Papier, Akzent Füllfederblau) in Hell und Dunkel, abgenommen anhand der Vorschau. Theme hat drei Fälle; Theme.activate() speichert die Wahl, setzt das aktive Theme (gesperrter Zugriff) und zeichnet die App neu (ThemeMode.refreshApp(): kurz der gegenteilige Modus, im nächsten Durchlauf der gewählte). Dynamische Farben lesen das aktive Theme bei jedem Auflösen; die Farbkomponenten werden pro Token einmal vorgerechnet.

Geprüft: swift test: der Kontrast-Test läuft über alle drei Themes in beiden Modi (Text 4,5:1, Tertiärtext und Status 3:1, Text auf Akzent und Hover 4,5:1). Das Package kompiliert für macOS und für den iOS-Simulator.

Nicht geprüft: Dass das Neuzeichnen nach dem Wechsel in der echten App alle Fenster erfasst (Mac, iOS) und ob es flackert. Das folgt beim Einbinden.

Offen: Auswahl in Mac-Remote-Fenster und iOS-Einstellungen, danach Anschauen durch Alf.

PR #2 gemergt: feat(themes): Graphit und Papier, Theme-Wechsel zur Laufzeit (iris/Iris#261) http://docker:3000/iris/IrisDesign/pulls/2 Commits: - feat(themes): Graphit und Papier, Theme-Wechsel zur Laufzeit (iris/Iris#261) --- **Stand: Themes Graphit und Papier im Package, Wechsel zur Laufzeit (Etappe 2, Schritt 1)** **Befund:** `IrisColors` las das Theme einmalig beim ersten Zugriff; ein Wechsel wäre erst nach einem Neustart sichtbar gewesen. **Geändert:** `Palette.graphit` (neutrale Graustufen, Akzent Petrol) und `Palette.papier` (warmes Papier, Akzent Füllfederblau) in Hell und Dunkel, abgenommen anhand der Vorschau. `Theme` hat drei Fälle; `Theme.activate()` speichert die Wahl, setzt das aktive Theme (gesperrter Zugriff) und zeichnet die App neu (`ThemeMode.refreshApp()`: kurz der gegenteilige Modus, im nächsten Durchlauf der gewählte). Dynamische Farben lesen das aktive Theme bei jedem Auflösen; die Farbkomponenten werden pro Token einmal vorgerechnet. **Geprüft:** `swift test`: der Kontrast-Test läuft über alle drei Themes in beiden Modi (Text 4,5:1, Tertiärtext und Status 3:1, Text auf Akzent und Hover 4,5:1). Das Package kompiliert für macOS und für den iOS-Simulator. **Nicht geprüft:** Dass das Neuzeichnen nach dem Wechsel in der echten App alle Fenster erfasst (Mac, iOS) und ob es flackert. Das folgt beim Einbinden. **Offen:** Auswahl in Mac-Remote-Fenster und iOS-Einstellungen, danach Anschauen durch Alf.
Author
Owner

PR #265 gemergt: feat(themes): Theme-Auswahl Iris/Graphit/Papier im Remote-Fenster (#261)
http://docker:3000/iris/Iris/pulls/265

Commits:

  • feat(themes): Theme-Auswahl Iris/Graphit/Papier im Remote-Fenster (#261)

Stand: Theme-Auswahl im Remote-Fenster (Etappe 2, Mac)

Geändert: Im Einstellungen-Menü des Remote-Fensters (Zahnrad) gibt es neben „Darstellung“ den Punkt „Theme“ mit Iris / Graphit / Papier (Theme.activate(): speichern, aktives Theme setzen, App neu zeichnen). Package-Pin auf IrisDesign 1688e76 angehoben (Themes, Wechsel zur Laufzeit).

Geprüft: Iris.xcodeproj baut gegen das neue Package (Checkout 1688e76 bestätigt, Binary-Zeitstempel nach Buildstart kontrolliert). Das Package selbst: Kontrast-Test über alle Themes in beiden Modi.

Nicht geprüft: Der Wechsel wurde nicht bedient. Ob das Neuzeichnen (kurz gegenteiliger Modus, dann der gewählte) alle Fenster und die Seitenpanels erfasst, ob es flackert und wie Papier und Graphit in den Ansichten wirken, die eigene Farben mitbringen (Plugin-WebViews, KaTeX-Bilder), ist offen. IrisClient nicht gebaut.

Offen: Alf probiert die Themes aus; danach Etappe 3 (Glass, Feinschliff).

PR #265 gemergt: feat(themes): Theme-Auswahl Iris/Graphit/Papier im Remote-Fenster (#261) http://docker:3000/iris/Iris/pulls/265 Commits: - feat(themes): Theme-Auswahl Iris/Graphit/Papier im Remote-Fenster (#261) --- **Stand: Theme-Auswahl im Remote-Fenster (Etappe 2, Mac)** **Geändert:** Im Einstellungen-Menü des Remote-Fensters (Zahnrad) gibt es neben „Darstellung“ den Punkt „Theme“ mit Iris / Graphit / Papier (`Theme.activate()`: speichern, aktives Theme setzen, App neu zeichnen). Package-Pin auf IrisDesign `1688e76` angehoben (Themes, Wechsel zur Laufzeit). **Geprüft:** Iris.xcodeproj baut gegen das neue Package (Checkout `1688e76` bestätigt, Binary-Zeitstempel nach Buildstart kontrolliert). Das Package selbst: Kontrast-Test über alle Themes in beiden Modi. **Nicht geprüft:** Der Wechsel wurde nicht bedient. Ob das Neuzeichnen (kurz gegenteiliger Modus, dann der gewählte) alle Fenster und die Seitenpanels erfasst, ob es flackert und wie Papier und Graphit in den Ansichten wirken, die eigene Farben mitbringen (Plugin-WebViews, KaTeX-Bilder), ist offen. IrisClient nicht gebaut. **Offen:** Alf probiert die Themes aus; danach Etappe 3 (Glass, Feinschliff).
Author
Owner

PR #3 gemergt: feat(glass): irisGlass-Modifier mit Material-Fallback (iris/Iris#261)
http://docker:3000/iris/IrisDesign/pulls/3

Commits:

  • feat(glass): irisGlass-Modifier mit Material-Fallback (iris/Iris#261)

Stand: Glas-Modifier im Package (Etappe 3, Schritt 1)

Geändert: View.irisGlass(in:tint:interactive:). Ab macOS/iOS 26 glassEffect mit zartem Theme-Ton (surface1 bei 25 %, überschreibbar); darunter .ultraThinMaterial mit feiner Kante in borderSubtle. interactive wirkt nur auf iOS. Einsatz nur für schwebende Bedienelemente, nicht für Inhaltsflächen.

Geprüft: Package kompiliert für macOS und den iOS-Simulator (SDK mit Glass-API, Verfügbarkeitsprüfung #available).

Nicht geprüft: Aussehen und Lesbarkeit in den drei Themes, Verhalten auf Systemen unter 26 (Fallback).

Offen: Einsatz in Mac und iOS (nächste Schritte), Palette-Flächen auf iOS, Chat-Layout, Animationen, Leerzustände.

PR #3 gemergt: feat(glass): irisGlass-Modifier mit Material-Fallback (iris/Iris#261) http://docker:3000/iris/IrisDesign/pulls/3 Commits: - feat(glass): irisGlass-Modifier mit Material-Fallback (iris/Iris#261) --- **Stand: Glas-Modifier im Package (Etappe 3, Schritt 1)** **Geändert:** `View.irisGlass(in:tint:interactive:)`. Ab macOS/iOS 26 `glassEffect` mit zartem Theme-Ton (`surface1` bei 25 %, überschreibbar); darunter `.ultraThinMaterial` mit feiner Kante in `borderSubtle`. `interactive` wirkt nur auf iOS. Einsatz nur für schwebende Bedienelemente, nicht für Inhaltsflächen. **Geprüft:** Package kompiliert für macOS und den iOS-Simulator (SDK mit Glass-API, Verfügbarkeitsprüfung `#available`). **Nicht geprüft:** Aussehen und Lesbarkeit in den drei Themes, Verhalten auf Systemen unter 26 (Fallback). **Offen:** Einsatz in Mac und iOS (nächste Schritte), Palette-Flächen auf iOS, Chat-Layout, Animationen, Leerzustände.
Author
Owner

PR #266 gemergt: feat(glass): SysMonitor-Widget als Glas (#261)
http://docker:3000/iris/Iris/pulls/266

Commits:

  • feat(glass): SysMonitor-Widget als Glas (#261)

Stand: Glas für das SysMonitor-Widget (Etappe 3, Mac)

Geändert: Das schwebende SysMonitor-Widget nutzt irisGlass (ab macOS 26 Liquid Glass mit zartem Theme-Ton, darunter Material mit feiner Kante) statt eigenem Material plus Rand. Package-Pin auf IrisDesign 8d025dd. Fenster-Chrome (Toolbar, Sidebar) bekommt unter macOS 26 das System-Glas ohnehin, dort wurde nichts geändert. Die Eingabeleiste im Chat bleibt vorerst eine flache, angedockte Fläche: sie zu einem schwebenden Glas-Pill umzubauen wäre ein Layout-Eingriff und liegt bei Alf.

Geprüft: Iris.xcodeproj baut gegen IrisDesign 8d025dd (Checkout bestätigt, Binary-Zeitstempel nach Buildstart kontrolliert).

Nicht geprüft: Aussehen des Widgets in den drei Themes und auf Systemen unter 26. Nicht gestartet.

PR #266 gemergt: feat(glass): SysMonitor-Widget als Glas (#261) http://docker:3000/iris/Iris/pulls/266 Commits: - feat(glass): SysMonitor-Widget als Glas (#261) --- **Stand: Glas für das SysMonitor-Widget (Etappe 3, Mac)** **Geändert:** Das schwebende SysMonitor-Widget nutzt `irisGlass` (ab macOS 26 Liquid Glass mit zartem Theme-Ton, darunter Material mit feiner Kante) statt eigenem Material plus Rand. Package-Pin auf IrisDesign `8d025dd`. Fenster-Chrome (Toolbar, Sidebar) bekommt unter macOS 26 das System-Glas ohnehin, dort wurde nichts geändert. Die Eingabeleiste im Chat bleibt vorerst eine flache, angedockte Fläche: sie zu einem schwebenden Glas-Pill umzubauen wäre ein Layout-Eingriff und liegt bei Alf. **Geprüft:** Iris.xcodeproj baut gegen IrisDesign `8d025dd` (Checkout bestätigt, Binary-Zeitstempel nach Buildstart kontrolliert). **Nicht geprüft:** Aussehen des Widgets in den drei Themes und auf Systemen unter 26. Nicht gestartet.
Author
Owner

PR #4 gemergt: feat(chat): IrisBubble.userShape für die Nutzerblase (iris/Iris#261)
http://docker:3000/iris/IrisDesign/pulls/4

Commits:

  • feat(chat): IrisBubble.userShape für die Nutzerblase (iris/Iris#261)

Stand: Form der Nutzerblase im Package (Etappe 3, Chat-Layout)

Geändert: IrisBubble.userShape(radius:tail:): großer Radius mit kleiner Ecke unten zum Sprecher (UnevenRoundedRectangle, .continuous). Mac und iOS nutzen dieselbe Form. Assistenten-Antworten bekommen keine Blase.

Geprüft: Package kompiliert für macOS und den iOS-Simulator.

Nicht geprüft: Aussehen im Chat; folgt mit den Mac- und iOS-Änderungen.

PR #4 gemergt: feat(chat): IrisBubble.userShape für die Nutzerblase (iris/Iris#261) http://docker:3000/iris/IrisDesign/pulls/4 Commits: - feat(chat): IrisBubble.userShape für die Nutzerblase (iris/Iris#261) --- **Stand: Form der Nutzerblase im Package (Etappe 3, Chat-Layout)** **Geändert:** `IrisBubble.userShape(radius:tail:)`: großer Radius mit kleiner Ecke unten zum Sprecher (`UnevenRoundedRectangle`, `.continuous`). Mac und iOS nutzen dieselbe Form. Assistenten-Antworten bekommen keine Blase. **Geprüft:** Package kompiliert für macOS und den iOS-Simulator. **Nicht geprüft:** Aussehen im Chat; folgt mit den Mac- und iOS-Änderungen.
Author
Owner

PR #267 gemergt: feat(chat): Nutzerblase in Akzentfarbe, Antworten ohne Blase (#261)
http://docker:3000/iris/Iris/pulls/267

Commits:

  • feat(chat): Nutzerblase in Akzentfarbe, Antworten ohne Blase (#261)

Stand: Chat-Layout auf dem Mac (Etappe 3)

Geändert: ChatBubbleView: Die Nutzerblase hat die Form IrisBubble.userShape (kleine Ecke unten zum Sprecher) in der Akzentfarbe, etwas mehr Innenabstand (12/8). Antworten des Assistenten stehen ohne Blase (ohne surface2-Fläche) mit knappem Rand auf der Fläche. Package-Pin auf IrisDesign 42c775e.

Geprüft: Iris.xcodeproj baut gegen 42c775e (Checkout bestätigt, Binary-Zeitstempel kontrolliert).

Nicht geprüft: Aussehen im Chat. Nicht gesehen: Tabellen, Codeblöcke, Bilder und Memory-Pills ohne Blase, Anhänge unter Nutzernachrichten, Suchtreffer-Markierung, lange Antworten, die drei Themes in Hell und Dunkel. Die Zwischenschritte (aufklappbare, graue Pillen) und Denk-Blöcke haben weiter ihre Fläche. Codeblock-Karte mit Kopfzeile und Kopieren-Knopf sowie einklappbare Tool-Aufrufe sind nicht Teil dieses Schritts.

Offen: Alf sieht den Chat an; danach Codeblöcke und Tool-Aufrufe, Animationen, Leerzustände.

PR #267 gemergt: feat(chat): Nutzerblase in Akzentfarbe, Antworten ohne Blase (#261) http://docker:3000/iris/Iris/pulls/267 Commits: - feat(chat): Nutzerblase in Akzentfarbe, Antworten ohne Blase (#261) --- **Stand: Chat-Layout auf dem Mac (Etappe 3)** **Geändert:** `ChatBubbleView`: Die Nutzerblase hat die Form `IrisBubble.userShape` (kleine Ecke unten zum Sprecher) in der Akzentfarbe, etwas mehr Innenabstand (12/8). Antworten des Assistenten stehen ohne Blase (ohne `surface2`-Fläche) mit knappem Rand auf der Fläche. Package-Pin auf IrisDesign `42c775e`. **Geprüft:** Iris.xcodeproj baut gegen `42c775e` (Checkout bestätigt, Binary-Zeitstempel kontrolliert). **Nicht geprüft:** Aussehen im Chat. Nicht gesehen: Tabellen, Codeblöcke, Bilder und Memory-Pills ohne Blase, Anhänge unter Nutzernachrichten, Suchtreffer-Markierung, lange Antworten, die drei Themes in Hell und Dunkel. Die Zwischenschritte (aufklappbare, graue Pillen) und Denk-Blöcke haben weiter ihre Fläche. Codeblock-Karte mit Kopfzeile und Kopieren-Knopf sowie einklappbare Tool-Aufrufe sind nicht Teil dieses Schritts. **Offen:** Alf sieht den Chat an; danach Codeblöcke und Tool-Aufrufe, Animationen, Leerzustände.
Author
Owner

PR #268 gemergt: feat(chat): Codeblock als Karte mit Sprache und Kopieren-Knopf (#261)
http://docker:3000/iris/Iris/pulls/268

Commits:

  • feat(chat): Codeblock als Karte mit Sprache und Kopieren-Knopf (#261)

Stand: Codeblock als Karte mit Kopfzeile und Kopieren (Etappe 3, Mac)

Geändert: Im gemeinsamen Markdown-Theme (MarkdownTheme.swift; Chat, Notiz-Vorschau, Hilfe-Chat) ist der Codeblock eine Karte: Kopfzeile mit Sprache (oder „Code“) und einem Kopieren-Knopf („Kopiert“ mit Häkchen für 1,5 s), darunter der Code horizontal scrollbar. Fläche surface1, Kopfzeile surface2, Rand borderSubtle, Radius medium. Kopiert wird ohne abschließenden Zeilenumbruch.

Geprüft: Iris.xcodeproj baut (Xcode, Binary-Zeitstempel nach Buildstart kontrolliert).

Nicht geprüft: Aussehen und Verhalten des Knopfes (nicht gestartet). Nicht gesehen: lange Zeilen, leere Sprache, sehr kurze Blöcke, die drei Themes. InlineRichMarkdownView (Chat-Antworten) wurde nicht gegengeprüft: ob dort ein Codeblock das Theme nutzt oder selbst zeichnet, ist nicht verifiziert; falls selbst gezeichnet, bleibt der Chat beim alten Aussehen.

Offen: Tool-Aufrufe einklappbar und gedämpft, Animationen, Leerzustände.

PR #268 gemergt: feat(chat): Codeblock als Karte mit Sprache und Kopieren-Knopf (#261) http://docker:3000/iris/Iris/pulls/268 Commits: - feat(chat): Codeblock als Karte mit Sprache und Kopieren-Knopf (#261) --- **Stand: Codeblock als Karte mit Kopfzeile und Kopieren (Etappe 3, Mac)** **Geändert:** Im gemeinsamen Markdown-Theme (`MarkdownTheme.swift`; Chat, Notiz-Vorschau, Hilfe-Chat) ist der Codeblock eine Karte: Kopfzeile mit Sprache (oder „Code“) und einem Kopieren-Knopf („Kopiert“ mit Häkchen für 1,5 s), darunter der Code horizontal scrollbar. Fläche `surface1`, Kopfzeile `surface2`, Rand `borderSubtle`, Radius `medium`. Kopiert wird ohne abschließenden Zeilenumbruch. **Geprüft:** Iris.xcodeproj baut (Xcode, Binary-Zeitstempel nach Buildstart kontrolliert). **Nicht geprüft:** Aussehen und Verhalten des Knopfes (nicht gestartet). Nicht gesehen: lange Zeilen, leere Sprache, sehr kurze Blöcke, die drei Themes. `InlineRichMarkdownView` (Chat-Antworten) wurde nicht gegengeprüft: ob dort ein Codeblock das Theme nutzt oder selbst zeichnet, ist nicht verifiziert; falls selbst gezeichnet, bleibt der Chat beim alten Aussehen. **Offen:** Tool-Aufrufe einklappbar und gedämpft, Animationen, Leerzustände.
Author
Owner

Nachtrag zum Stand „Codeblock als Karte“ (PR #268): Die dort offene Frage ist im Code geklärt. InlineRichMarkdownView reicht Codeblöcke (Fences) unverändert an Markdown(…).markdownTheme(.iris(fontScale:)) weiter (Zeilen 189, 240, 256 und der Fence-Puffer ab Zeile 415), die Karte aus MarkdownTheme.swift gilt also auch für Chat-Antworten. Gesehen wurde sie weiterhin nicht.

**Nachtrag zum Stand „Codeblock als Karte“ (PR #268):** Die dort offene Frage ist im Code geklärt. `InlineRichMarkdownView` reicht Codeblöcke (Fences) unverändert an `Markdown(…).markdownTheme(.iris(fontScale:))` weiter (Zeilen 189, 240, 256 und der Fence-Puffer ab Zeile 415), die Karte aus `MarkdownTheme.swift` gilt also auch für Chat-Antworten. Gesehen wurde sie weiterhin nicht.
Author
Owner

PR #5 gemergt: feat(chat): irisQuietDetail für gedämpfte Zwischenschritte (iris/Iris#261)
http://docker:3000/iris/IrisDesign/pulls/5

Commits:

  • feat(chat): irisQuietDetail für gedämpfte Zwischenschritte (iris/Iris#261)

Stand: Modifier für gedämpfte Details (Etappe 3, Chat)

Geändert: View.irisQuietDetail(): rückt aufgeklappten Inhalt ein und setzt eine feine Linie (borderStrong, 2 pt) an die linke Kante, ohne Fläche. Gedacht für Zwischenschritte und Denkprozess im Chat, damit sie zu den flachen Antworten passen.

Geprüft: Package kompiliert für macOS.

Nicht geprüft: Aussehen; folgt mit dem Einsatz in Mac und iOS.

PR #5 gemergt: feat(chat): irisQuietDetail für gedämpfte Zwischenschritte (iris/Iris#261) http://docker:3000/iris/IrisDesign/pulls/5 Commits: - feat(chat): irisQuietDetail für gedämpfte Zwischenschritte (iris/Iris#261) --- **Stand: Modifier für gedämpfte Details (Etappe 3, Chat)** **Geändert:** `View.irisQuietDetail()`: rückt aufgeklappten Inhalt ein und setzt eine feine Linie (`borderStrong`, 2 pt) an die linke Kante, ohne Fläche. Gedacht für Zwischenschritte und Denkprozess im Chat, damit sie zu den flachen Antworten passen. **Geprüft:** Package kompiliert für macOS. **Nicht geprüft:** Aussehen; folgt mit dem Einsatz in Mac und iOS.
Author
Owner

PR #269 gemergt: feat(chat): Zwischenschritte und Reasoning gedämpft ohne Fläche (#261)
http://docker:3000/iris/Iris/pulls/269

Commits:

  • feat(chat): Zwischenschritte und Reasoning gedämpft ohne Fläche (#261)

Stand: Zwischenschritte und Reasoning gedämpft (Etappe 3, Mac)

Geändert: ChatBubbleView: Die aufklappbaren Zwischenschritte (Hermes-Zwischenantworten) und der Reasoning-Block haben keine Fläche mehr; der Pfeil ist in textTertiary getönt, der aufgeklappte Inhalt ist eingerückt mit feiner Linie links (irisQuietDetail). Dadurch passen sie zu den flachen Antworten. Package-Pin auf IrisDesign 9121fba.

Geprüft: Iris.xcodeproj baut gegen 9121fba (Checkout bestätigt, Binary-Zeitstempel kontrolliert).

Nicht geprüft: Aussehen (nicht gestartet). Ob die zugeklappte Zeile ohne Fläche noch als anklickbar erkennbar ist (nur Pfeil und Text in Tertiärfarbe), wurde nicht beurteilt. Bewusst nicht geändert: der Ablauf der Tool-Aufrufe selbst; es gibt keine eigene Tool-Aufruf-Darstellung, nur diese Zwischenantworten.

PR #269 gemergt: feat(chat): Zwischenschritte und Reasoning gedämpft ohne Fläche (#261) http://docker:3000/iris/Iris/pulls/269 Commits: - feat(chat): Zwischenschritte und Reasoning gedämpft ohne Fläche (#261) --- **Stand: Zwischenschritte und Reasoning gedämpft (Etappe 3, Mac)** **Geändert:** `ChatBubbleView`: Die aufklappbaren Zwischenschritte (Hermes-Zwischenantworten) und der Reasoning-Block haben keine Fläche mehr; der Pfeil ist in `textTertiary` getönt, der aufgeklappte Inhalt ist eingerückt mit feiner Linie links (`irisQuietDetail`). Dadurch passen sie zu den flachen Antworten. Package-Pin auf IrisDesign `9121fba`. **Geprüft:** Iris.xcodeproj baut gegen `9121fba` (Checkout bestätigt, Binary-Zeitstempel kontrolliert). **Nicht geprüft:** Aussehen (nicht gestartet). Ob die zugeklappte Zeile ohne Fläche noch als anklickbar erkennbar ist (nur Pfeil und Text in Tertiärfarbe), wurde nicht beurteilt. Bewusst nicht geändert: der Ablauf der Tool-Aufrufe selbst; es gibt keine eigene Tool-Aufruf-Darstellung, nur diese Zwischenantworten.
Author
Owner

PR #6 gemergt: fix(chat): IrisDisclosure als eigene Aufklapp-Zeile mit voller Tippfläche (iris/Iris#261)
http://docker:3000/iris/IrisDesign/pulls/6

Commits:

  • fix(chat): IrisDisclosure als eigene Aufklapp-Zeile mit voller Tippfläche (iris/Iris#261)

Stand: IrisDisclosure, eigene Aufklapp-Zeile (Etappe 3, Chat)

Befund: Alf meldete auf dem iPhone, dass der Denkprozess (vorher DisclosureGroup) nach dem gedämpften Umbau nicht mehr einklappt. Warum genau, ist nicht nachgewiesen (kein Tippen im Simulator möglich); der Umbau hatte Fläche und Innenabstand der Zeile entfernt.

Geändert: IrisDisclosure(isExpanded:content:label:): die ganze Zeile ist ein Button mit contentShape(Rectangle()), der Pfeil dreht sich (Mac links, iOS rechts), der Inhalt blendet ein (easeInOut 0,2 s), Inhalt mit irisQuietDetail; Zugänglichkeitswert „aufgeklappt/zugeklappt“. Doku-Kommentar in QuietDetail auf borderStrong korrigiert.

Geprüft: Package kompiliert für macOS und den iOS-Simulator.

Nicht geprüft: Tippen und Animation (folgt mit dem Einsatz in den Apps).

PR #6 gemergt: fix(chat): IrisDisclosure als eigene Aufklapp-Zeile mit voller Tippfläche (iris/Iris#261) http://docker:3000/iris/IrisDesign/pulls/6 Commits: - fix(chat): IrisDisclosure als eigene Aufklapp-Zeile mit voller Tippfläche (iris/Iris#261) --- **Stand: IrisDisclosure, eigene Aufklapp-Zeile (Etappe 3, Chat)** **Befund:** Alf meldete auf dem iPhone, dass der Denkprozess (vorher `DisclosureGroup`) nach dem gedämpften Umbau nicht mehr einklappt. Warum genau, ist nicht nachgewiesen (kein Tippen im Simulator möglich); der Umbau hatte Fläche und Innenabstand der Zeile entfernt. **Geändert:** `IrisDisclosure(isExpanded:content:label:)`: die ganze Zeile ist ein Button mit `contentShape(Rectangle())`, der Pfeil dreht sich (Mac links, iOS rechts), der Inhalt blendet ein (`easeInOut` 0,2 s), Inhalt mit `irisQuietDetail`; Zugänglichkeitswert „aufgeklappt/zugeklappt“. Doku-Kommentar in `QuietDetail` auf `borderStrong` korrigiert. **Geprüft:** Package kompiliert für macOS und den iOS-Simulator. **Nicht geprüft:** Tippen und Animation (folgt mit dem Einsatz in den Apps).
Author
Owner

PR #270 gemergt: fix(chat): Reasoning und Zwischenschritte als IrisDisclosure (#261)
http://docker:3000/iris/Iris/pulls/270

Commits:

  • fix(chat): Reasoning und Zwischenschritte als IrisDisclosure (#261)

Stand: Reasoning und Zwischenschritte als IrisDisclosure (Mac)

Geändert: Wie auf iOS: ChatBubbleView nutzt für Zwischenantworten und Reasoning IrisDisclosure statt DisclosureGroup (Pfeil links, Zeile ganz anklickbar, Inhalt eingerückt mit Linie). Package-Pin auf d796020. Auf dem Mac wurde das Einklapp-Problem nicht gemeldet; die Änderung gleicht beide Apps an, weil der gedämpfte Umbau dort dieselbe Struktur hatte.

Geprüft: Iris.xcodeproj baut gegen d796020 (Checkout bestätigt, Binary-Zeitstempel kontrolliert).

Nicht geprüft: Anklicken, Animation, Aussehen (nicht gestartet).

PR #270 gemergt: fix(chat): Reasoning und Zwischenschritte als IrisDisclosure (#261) http://docker:3000/iris/Iris/pulls/270 Commits: - fix(chat): Reasoning und Zwischenschritte als IrisDisclosure (#261) --- **Stand: Reasoning und Zwischenschritte als IrisDisclosure (Mac)** **Geändert:** Wie auf iOS: `ChatBubbleView` nutzt für Zwischenantworten und Reasoning `IrisDisclosure` statt `DisclosureGroup` (Pfeil links, Zeile ganz anklickbar, Inhalt eingerückt mit Linie). Package-Pin auf `d796020`. Auf dem Mac wurde das Einklapp-Problem nicht gemeldet; die Änderung gleicht beide Apps an, weil der gedämpfte Umbau dort dieselbe Struktur hatte. **Geprüft:** Iris.xcodeproj baut gegen `d796020` (Checkout bestätigt, Binary-Zeitstempel kontrolliert). **Nicht geprüft:** Anklicken, Animation, Aussehen (nicht gestartet).
Author
Owner

PR #7 gemergt: feat(ui): IrisEmptyState für Leerzustände (iris/Iris#261)
http://docker:3000/iris/IrisDesign/pulls/7

Commits:


Stand: IrisEmptyState (Etappe 3, Leerzustände)

Geändert: IrisEmptyState(symbol:title:message:emphasized:): Symbol (26 pt, leicht) in einem 60-pt-Kreis, Titel, optionaler Text; neutral (Fläche surface2) oder mit Akzent (emphasized). Titel und Text sind LocalizedStringKey, vorhandene Übersetzungen greifen. Feste Schriftgrößen (folgen dem Schriftfaktor des Macs nicht).

Geprüft: Package kompiliert für macOS und den iOS-Simulator.

Nicht geprüft: Aussehen; folgt mit dem Einsatz auf dem Mac.

PR #7 gemergt: feat(ui): IrisEmptyState für Leerzustände (iris/Iris#261) http://docker:3000/iris/IrisDesign/pulls/7 Commits: - feat(ui): IrisEmptyState für Leerzustände (iris/Iris#261) --- **Stand: IrisEmptyState (Etappe 3, Leerzustände)** **Geändert:** `IrisEmptyState(symbol:title:message:emphasized:)`: Symbol (26 pt, leicht) in einem 60-pt-Kreis, Titel, optionaler Text; neutral (Fläche `surface2`) oder mit Akzent (`emphasized`). Titel und Text sind `LocalizedStringKey`, vorhandene Übersetzungen greifen. Feste Schriftgrößen (folgen dem Schriftfaktor des Macs nicht). **Geprüft:** Package kompiliert für macOS und den iOS-Simulator. **Nicht geprüft:** Aussehen; folgt mit dem Einsatz auf dem Mac.
Author
Owner

PR #271 gemergt: feat(ui): Leerzustände der Jobliste und Seitenpanels mit IrisEmptyState (#261)
http://docker:3000/iris/Iris/pulls/271

Commits:

  • feat(ui): Leerzustände der Jobliste und Seitenpanels mit IrisEmptyState (#261)

Stand: Leerzustände auf dem Mac (Etappe 3)

Geändert: Die Jobliste des Remote-Fensters (keine Treffer, keine Jobs auf dem Server, nicht verbunden, Bereich leer, Archiv leer) und die drei Seitenpanels ohne Chat („Kein Chat ausgewählt“: Notiz, Plugin, Browser) nutzen IrisEmptyState aus dem Package: Symbol (Lupe, Sprechblasen, WLAN durchgestrichen, Ordner, Archiv) in einem Kreis, darunter der bisherige Text. Statt grauer Textzeile also ein erkennbarer Leerzustand. Texte unverändert. Package-Pin auf IrisDesign fa3fd1b.

Geprüft: Iris.xcodeproj baut (Xcode, Binary-Zeitstempel kontrolliert, nach Neuladen des Projekts in Xcode; siehe unten).

Nicht geprüft: Aussehen, nicht gestartet. Die Schrift des Leerzustands folgt dem Schriftfaktor (#217) nicht (feste Größen im Package). Eine Handlung („Neuer Job“) gibt es auf dem Mac noch nicht, dafür fehlt mir ein sicherer Einstiegspunkt im Remote-Fenster.

Anmerkung zum Build: Nach dem Anheben des Pins meldete Xcode viermal „Cannot find 'IrisEmptyState' in scope“, obwohl der Checkout die neue Datei enthielt: Die laufende Xcode-Sitzung hatte die Dateiliste des Packages zwischengespeichert. „Resolve Package Versions“ und ein separates -resolvePackageDependencies halfen nicht; erst Schließen und erneutes Öffnen von Iris.xcodeproj. Bei neuen Dateien im Package künftig gleich so vorgehen.

PR #271 gemergt: feat(ui): Leerzustände der Jobliste und Seitenpanels mit IrisEmptyState (#261) http://docker:3000/iris/Iris/pulls/271 Commits: - feat(ui): Leerzustände der Jobliste und Seitenpanels mit IrisEmptyState (#261) --- **Stand: Leerzustände auf dem Mac (Etappe 3)** **Geändert:** Die Jobliste des Remote-Fensters (keine Treffer, keine Jobs auf dem Server, nicht verbunden, Bereich leer, Archiv leer) und die drei Seitenpanels ohne Chat („Kein Chat ausgewählt“: Notiz, Plugin, Browser) nutzen `IrisEmptyState` aus dem Package: Symbol (Lupe, Sprechblasen, WLAN durchgestrichen, Ordner, Archiv) in einem Kreis, darunter der bisherige Text. Statt grauer Textzeile also ein erkennbarer Leerzustand. Texte unverändert. Package-Pin auf IrisDesign `fa3fd1b`. **Geprüft:** Iris.xcodeproj baut (Xcode, Binary-Zeitstempel kontrolliert, nach Neuladen des Projekts in Xcode; siehe unten). **Nicht geprüft:** Aussehen, nicht gestartet. Die Schrift des Leerzustands folgt dem Schriftfaktor (#217) nicht (feste Größen im Package). Eine Handlung („Neuer Job“) gibt es auf dem Mac noch nicht, dafür fehlt mir ein sicherer Einstiegspunkt im Remote-Fenster. **Anmerkung zum Build:** Nach dem Anheben des Pins meldete Xcode viermal „Cannot find 'IrisEmptyState' in scope“, obwohl der Checkout die neue Datei enthielt: Die laufende Xcode-Sitzung hatte die Dateiliste des Packages zwischengespeichert. „Resolve Package Versions“ und ein separates `-resolvePackageDependencies` halfen nicht; erst Schließen und erneutes Öffnen von Iris.xcodeproj. Bei neuen Dateien im Package künftig gleich so vorgehen.
Author
Owner

PR #8 gemergt: feat(web): Theme-Brücke irisFollowTheme für WebViews (iris/Iris#261)
http://docker:3000/iris/IrisDesign/pulls/8

Commits:

  • feat(web): Theme-Brücke irisFollowTheme für WebViews (iris/Iris#261)

Stand: Theme-Brücke für WebViews (WebViews, Schritt 1)

Befund: Plugin-Seiten (30 Seiten in rund 25 Plugins) sind fest dunkel (color-scheme: dark mit Hex-Werten der iOS-Dunkelpalette) und bleiben im Hellmodus und in Papier/Graphit dunkel (Screenshot von Alf, Plugin-Panel „ComfyUI Workflows“). Die Handbuch-Seiten haben keine Hell/Dunkel-Regeln.

Geändert: IrisWebTheme.css(theme:isDark:) erzeugt :root{--iris-color-scheme:…;--iris-bg:…;…} mit 22 Variablen (bg, surface1–4, border, border-strong, text, text-secondary, text-tertiary, on-accent, accent, accent-hover, accent-text, accent-subtle, success, warning, destructive, destructive-hover, destructive-text, info, code-text). WKWebView.irisFollowTheme() setzt ein Start-Skript (<style id="iris-theme">, window.__irisSetTheme) und zieht die Variablen live nach, wenn sich Modus (effectiveAppearance / Trait Collection) oder Theme (Notification.irisThemeDidChange, gesendet von Theme.activate()) ändern; andere Start-Skripte der WebView bleiben unberührt. Seiten schreiben var(--iris-bg, #1c1c1e): ohne Variablen gilt der Rückfallwert, ältere Apps ändern sich nicht.

Geprüft: swift test (6 Tests: Variablen vollständig in allen Themes und Modi, Werte aus der Palette, JS-Maskierung); Package kompiliert für macOS und den iOS-Simulator; die Skriptlogik (genau ein Style-Element, zweiter Aufruf aktualisiert) in Node mit Attrappe geprüft.

Nicht geprüft: In einer echten WKWebView (Start-Skript greift vor dem ersten Rendern, Live-Update, Ersetzen des Start-Skripts bei laufender WebView); das folgt mit dem Einbau in Mac und iOS.

Offen: Einbau in die WebViews (Mac, iOS), Umstellung der Plugin-Seiten, Handbuch.

PR #8 gemergt: feat(web): Theme-Brücke irisFollowTheme für WebViews (iris/Iris#261) http://docker:3000/iris/IrisDesign/pulls/8 Commits: - feat(web): Theme-Brücke irisFollowTheme für WebViews (iris/Iris#261) --- **Stand: Theme-Brücke für WebViews (WebViews, Schritt 1)** **Befund:** Plugin-Seiten (30 Seiten in rund 25 Plugins) sind fest dunkel (`color-scheme: dark` mit Hex-Werten der iOS-Dunkelpalette) und bleiben im Hellmodus und in Papier/Graphit dunkel (Screenshot von Alf, Plugin-Panel „ComfyUI Workflows“). Die Handbuch-Seiten haben keine Hell/Dunkel-Regeln. **Geändert:** `IrisWebTheme.css(theme:isDark:)` erzeugt `:root{--iris-color-scheme:…;--iris-bg:…;…}` mit 22 Variablen (bg, surface1–4, border, border-strong, text, text-secondary, text-tertiary, on-accent, accent, accent-hover, accent-text, accent-subtle, success, warning, destructive, destructive-hover, destructive-text, info, code-text). `WKWebView.irisFollowTheme()` setzt ein Start-Skript (`<style id="iris-theme">`, `window.__irisSetTheme`) und zieht die Variablen live nach, wenn sich Modus (`effectiveAppearance` / Trait Collection) oder Theme (`Notification.irisThemeDidChange`, gesendet von `Theme.activate()`) ändern; andere Start-Skripte der WebView bleiben unberührt. Seiten schreiben `var(--iris-bg, #1c1c1e)`: ohne Variablen gilt der Rückfallwert, ältere Apps ändern sich nicht. **Geprüft:** `swift test` (6 Tests: Variablen vollständig in allen Themes und Modi, Werte aus der Palette, JS-Maskierung); Package kompiliert für macOS und den iOS-Simulator; die Skriptlogik (genau ein Style-Element, zweiter Aufruf aktualisiert) in Node mit Attrappe geprüft. **Nicht geprüft:** In einer echten WKWebView (Start-Skript greift vor dem ersten Rendern, Live-Update, Ersetzen des Start-Skripts bei laufender WebView); das folgt mit dem Einbau in Mac und iOS. **Offen:** Einbau in die WebViews (Mac, iOS), Umstellung der Plugin-Seiten, Handbuch.
Author
Owner

PR #272 gemergt: feat(web): Theme-Variablen in Plugin- und Handbuch-WebViews (#261)
http://docker:3000/iris/Iris/pulls/272

Commits:

  • feat(web): Theme-Variablen in Plugin- und Handbuch-WebViews (#261)

Stand: Theme-Brücke in den Mac-WebViews (WebViews, Schritt 2)

Geändert: irisFollowTheme() (Package IrisDesign bb405a9) an PinnedWebView (Plugin-Seitenpanel, Workflow-Block, HTML-Vorschau), CanvasPluginWebBlockView (Canvas-Plugin-Blöcke) und die Handbuch-WebView. Jede Seite bekommt beim Start --iris-*-Variablen für Theme und Modus und wird bei Wechsel live nachgezogen. Ohne Seite, die die Variablen nutzt, ändert sich nichts Sichtbares.

Geprüft: Iris.xcodeproj baut gegen bb405a9 (Checkout bestätigt, Binary-Zeitstempel kontrolliert, nach Neuladen des Projekts in Xcode).

Nicht geprüft: Dass die Variablen in einer echten WebView vor dem ersten Rendern ankommen und beim Wechsel aktualisiert werden (nicht gestartet). Das GitServer-Fenster und das Hermes-Web-GUI bleiben unberührt (fremde bzw. eigene Seiten ohne Variablen).

Offen: Umstellung der Plugin-Seiten auf var(--iris-…, <bisheriger Hex>) und Veröffentlichung; Handbuch-CSS.

PR #272 gemergt: feat(web): Theme-Variablen in Plugin- und Handbuch-WebViews (#261) http://docker:3000/iris/Iris/pulls/272 Commits: - feat(web): Theme-Variablen in Plugin- und Handbuch-WebViews (#261) --- **Stand: Theme-Brücke in den Mac-WebViews (WebViews, Schritt 2)** **Geändert:** `irisFollowTheme()` (Package IrisDesign `bb405a9`) an `PinnedWebView` (Plugin-Seitenpanel, Workflow-Block, HTML-Vorschau), `CanvasPluginWebBlockView` (Canvas-Plugin-Blöcke) und die Handbuch-WebView. Jede Seite bekommt beim Start `--iris-*`-Variablen für Theme und Modus und wird bei Wechsel live nachgezogen. Ohne Seite, die die Variablen nutzt, ändert sich nichts Sichtbares. **Geprüft:** Iris.xcodeproj baut gegen `bb405a9` (Checkout bestätigt, Binary-Zeitstempel kontrolliert, nach Neuladen des Projekts in Xcode). **Nicht geprüft:** Dass die Variablen in einer echten WebView vor dem ersten Rendern ankommen und beim Wechsel aktualisiert werden (nicht gestartet). Das GitServer-Fenster und das Hermes-Web-GUI bleiben unberührt (fremde bzw. eigene Seiten ohne Variablen). **Offen:** Umstellung der Plugin-Seiten auf `var(--iris-…, <bisheriger Hex>)` und Veröffentlichung; Handbuch-CSS.
Author
Owner

PR #273 gemergt: docs(handbuch): Darstellung und Themes, Chat-Aussehen, Font Size (#261)
http://docker:3000/iris/Iris/pulls/273

Commits:

  • docs(handbuch): Darstellung und Themes, Chat-Aussehen, Font Size (#261)

Stand: Benutzerhandbuch aktualisiert (Darstellung, Themes, Chat)

Geändert (Kapitel im Vault, Build per deployment/handbuch/build_handbuch.py):

  • Neues Kapitel „Darstellung und Themes“ (Gruppe „Einstellungen & Sonstiges“): System/Hell/Dunkel und die Themes Iris, Graphit, Papier; wo man sie einstellt (Mac: Zahnrad im Remote-Fenster; iPhone: Einstellungen); pro Gerät, sofort wirksam; was dem Theme folgt, was nicht (Plugins ohne Update, ältere App-Versionen); Chat-Aussehen (Nutzerblase, Antworten ohne Blase, Codeblock mit Kopieren, aufklappbare Zeilen).
  • Iris-Remote-Panel: Zahnrad-Zeile in der Header-Tabelle, Absatz zum Chat. iPhone-und-iPad-Bedienung und iOS-Remote-App: Darstellung und Theme bei „Einstellungen“. Companion-Panel: Zeile „Font Size“ korrigiert (Faktor 85–150 % statt „−0 bis +12“, seit #217).
  • Handbuch-Site (style.css): Farben als var(--iris-…, <alter Wert>); das Handbuch folgt in der App Hell/Dunkel und dem Theme, die gehostete Version ohne App bleibt unverändert.
  • Generierte BENUTZERHANDBUCH.md (Iris-Hilfe-Wissensbasis) in Iris/Resources/ nachgezogen; die HTML-Site in beide Apps kopiert (Handbuch/, per .gitignore nicht im Repo, kommt beim App-Build ins Bundle).

Geprüft: Build ohne Fehler (29 Kapitel), neues Kapitel als HTML erzeugt, Variablen im CSS vorhanden, Diff der BENUTZERHANDBUCH.md enthält nur diese Änderungen.

Nicht geprüft: Das Handbuch in der laufenden App in Hell/Dunkel und mit Themes (nicht gestartet); ob die Aussagen zum Marktplatz-Update und zu älteren App-Versionen im Alltag stimmen (aus dem Verhalten der Brücke abgeleitet). Die Kapitel Remote-Panel und Companion-Panel sind insgesamt veraltet (z. B. nennt das Remote-Panel nur zwei Header-Buttons); ich habe nur die Stellen zu diesem Thema geändert.

Offen: Gesamtüberarbeitung des Handbuchs (Alf, 2026-09-19: erst nach Stabilisierung); Screenshots der neuen Darstellung.

PR #273 gemergt: docs(handbuch): Darstellung und Themes, Chat-Aussehen, Font Size (#261) http://docker:3000/iris/Iris/pulls/273 Commits: - docs(handbuch): Darstellung und Themes, Chat-Aussehen, Font Size (#261) --- **Stand: Benutzerhandbuch aktualisiert (Darstellung, Themes, Chat)** **Geändert (Kapitel im Vault, Build per `deployment/handbuch/build_handbuch.py`):** - Neues Kapitel „Darstellung und Themes“ (Gruppe „Einstellungen & Sonstiges“): System/Hell/Dunkel und die Themes Iris, Graphit, Papier; wo man sie einstellt (Mac: Zahnrad im Remote-Fenster; iPhone: Einstellungen); pro Gerät, sofort wirksam; was dem Theme folgt, was nicht (Plugins ohne Update, ältere App-Versionen); Chat-Aussehen (Nutzerblase, Antworten ohne Blase, Codeblock mit Kopieren, aufklappbare Zeilen). - Iris-Remote-Panel: Zahnrad-Zeile in der Header-Tabelle, Absatz zum Chat. iPhone-und-iPad-Bedienung und iOS-Remote-App: Darstellung und Theme bei „Einstellungen“. Companion-Panel: Zeile „Font Size“ korrigiert (Faktor 85–150 % statt „−0 bis +12“, seit #217). - Handbuch-Site (`style.css`): Farben als `var(--iris-…, <alter Wert>)`; das Handbuch folgt in der App Hell/Dunkel und dem Theme, die gehostete Version ohne App bleibt unverändert. - Generierte `BENUTZERHANDBUCH.md` (Iris-Hilfe-Wissensbasis) in `Iris/Resources/` nachgezogen; die HTML-Site in beide Apps kopiert (`Handbuch/`, per `.gitignore` nicht im Repo, kommt beim App-Build ins Bundle). **Geprüft:** Build ohne Fehler (29 Kapitel), neues Kapitel als HTML erzeugt, Variablen im CSS vorhanden, Diff der `BENUTZERHANDBUCH.md` enthält nur diese Änderungen. **Nicht geprüft:** Das Handbuch in der laufenden App in Hell/Dunkel und mit Themes (nicht gestartet); ob die Aussagen zum Marktplatz-Update und zu älteren App-Versionen im Alltag stimmen (aus dem Verhalten der Brücke abgeleitet). Die Kapitel Remote-Panel und Companion-Panel sind insgesamt veraltet (z. B. nennt das Remote-Panel nur zwei Header-Buttons); ich habe nur die Stellen zu diesem Thema geändert. **Offen:** Gesamtüberarbeitung des Handbuchs (Alf, 2026-09-19: erst nach Stabilisierung); Screenshots der neuen Darstellung.
Author
Owner

PR #139 gemergt: docs(handbuch): Handbuch-CSS folgt den Theme-Variablen (iris/Iris#261)
http://docker:3000/alf/2ndbrain/pulls/139

Commits:

  • docs(handbuch): Handbuch-CSS folgt den Theme-Variablen (iris/Iris#261)
PR #139 gemergt: docs(handbuch): Handbuch-CSS folgt den Theme-Variablen (iris/Iris#261) http://docker:3000/alf/2ndbrain/pulls/139 Commits: - docs(handbuch): Handbuch-CSS folgt den Theme-Variablen (iris/Iris#261)
alf 2026-10-31 15:40:44 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/Iris#261
No description provided.