diff --git a/LehrerApp.TemplateDesigner.Tests/ProjectLifecycleTests.cs b/LehrerApp.TemplateDesigner.Tests/ProjectLifecycleTests.cs
index 9a48ac7..ef0ee59 100644
--- a/LehrerApp.TemplateDesigner.Tests/ProjectLifecycleTests.cs
+++ b/LehrerApp.TemplateDesigner.Tests/ProjectLifecycleTests.cs
@@ -55,6 +55,8 @@ public sealed class ProjectLifecycleTests
placeholder.Sample = "Deutsch";
Assert.Same(placeholder, viewModel.SelectedPlaceholder);
+ Assert.True(viewModel.HasSelectedPlaceholder);
+ Assert.False(viewModel.HasNoSelectedPlaceholder);
var definition = Assert.Single(viewModel.BuildManifest().Placeholders);
Assert.Equal("Sprache", definition.Name);
Assert.Equal(LehrerApp.Templating.PlaceholderType.Text, definition.Type);
@@ -63,6 +65,8 @@ public sealed class ProjectLifecycleTests
viewModel.RemoveSelectedPlaceholder();
Assert.Empty(viewModel.Placeholders);
Assert.Null(viewModel.SelectedPlaceholder);
+ Assert.False(viewModel.HasSelectedPlaceholder);
+ Assert.True(viewModel.HasNoSelectedPlaceholder);
}
[Fact]
diff --git a/LehrerApp.TemplateDesigner/App.axaml b/LehrerApp.TemplateDesigner/App.axaml
index 00cbfb5..78119ae 100644
--- a/LehrerApp.TemplateDesigner/App.axaml
+++ b/LehrerApp.TemplateDesigner/App.axaml
@@ -2,6 +2,7 @@
x:Class="LehrerApp.TemplateDesigner.App" RequestedThemeVariant="Default">
+
diff --git a/LehrerApp.TemplateDesigner/DesignerViewModel.cs b/LehrerApp.TemplateDesigner/DesignerViewModel.cs
index abe5d12..5b75859 100644
--- a/LehrerApp.TemplateDesigner/DesignerViewModel.cs
+++ b/LehrerApp.TemplateDesigner/DesignerViewModel.cs
@@ -59,9 +59,17 @@ public partial class DesignerViewModel : ObservableObject
public Dictionary Assets { get; } = new(StringComparer.OrdinalIgnoreCase);
public ObservableCollection AssetItems { get; } = [];
public ObservableCollection StarterTemplates { get; } = [];
+ public bool HasSelectedPlaceholder => SelectedPlaceholder is not null;
+ public bool HasNoSelectedPlaceholder => SelectedPlaceholder is null;
public DesignerViewModel() => SelectedPlaceholder = Placeholders.FirstOrDefault();
+ partial void OnSelectedPlaceholderChanged(DesignerPlaceholder? value)
+ {
+ OnPropertyChanged(nameof(HasSelectedPlaceholder));
+ OnPropertyChanged(nameof(HasNoSelectedPlaceholder));
+ }
+
public void Reset()
{
TemplateId = "neue-vorlage"; TemplateName = "Neue Vorlage"; Description = "";
diff --git a/LehrerApp.TemplateDesigner/MainWindow.axaml b/LehrerApp.TemplateDesigner/MainWindow.axaml
index a5b58fa..fa2494a 100644
--- a/LehrerApp.TemplateDesigner/MainWindow.axaml
+++ b/LehrerApp.TemplateDesigner/MainWindow.axaml
@@ -42,123 +42,138 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TODO.md b/TODO.md
index 20fec94..7406756 100644
--- a/TODO.md
+++ b/TODO.md
@@ -2329,6 +2329,33 @@ CSV-Exports der Auswertung (6.3.3) über die gemeinsame Export-Infrastruktur aus
welche TickTick-Liste ist die Zielliste (fest in den Einstellungen hinterlegt, analog zur
WebUntis-URL)?
+- [ ] **6.1.8** E-Mail-Ordner-Triage fürs dienstliche Postfach (Nutzerwunsch, 2026-08-30): Der
+ Nutzer verwaltet Termine/Bitten/Rundschreiben/Messevorbereitungen aktuell ausschließlich per
+ Mail (eM Client gegen ein schlecht konfiguriertes Open-Xchange-"Fake-Exchange", echtes
+ Outlook/EWS funktioniert dort nicht zuverlässig — Open-Xchange spricht aber Standard-IMAP).
+ Ziel ist **keine** vollwertige Mail-Client-Funktion in LehrerApp (kein Compose/Reply, keine
+ Ordnerverwaltung, kein Postfach-weites Lesen), sondern eine schmale Brücke: Der Nutzer legt
+ in eM Client einen Ordner an (z.B. "→LehrerApp") und verschiebt dorthin manuell, was eine
+ Aktion in der Schule braucht. LehrerApp verbindet sich **nur read-only per IMAP** und
+ **nur mit diesem einen Ordner** (kein `DELETE`/`STORE`/`MOVE` auf dem Server), zeigt die
+ Mails dort an (Betreff/Absender/Datum/Textvorschau) und bietet pro Mail "→ Termin anlegen"
+ / "→ Aufgabe anlegen" (öffnet die bestehenden Dialoge aus 6.1.2 bzw. Kapitel 4, vorbefüllt
+ mit Betreff als Titel). Als "bearbeitet" markierte Mails verschwinden nur lokal aus der
+ LehrerApp-Ansicht (Merkliste bereits gesehener IMAP-UIDs) — das tatsächliche Verschieben
+ zurück in Posteingang/Archiv bleibt bewusst manuelle Aufgabe des Nutzers in eM Client, damit
+ LehrerApp ganz ohne Schreibrechte auf dem Postfach auskommt.
+ - **Architektur-Vorbild:** wie `LehrerApp.WebUntis` ein eigenständiger, serverunabhängiger
+ Client — neues `LehrerApp.Mail`-Projekt (IMAP-Verbindung + Nachrichtenliste, z.B. via
+ `MailKit`, Eintrag in `Directory.Packages.props`), Desktop bindet es analog zu
+ `LehrerApp.WebUntis` direkt ein. Zugangsdaten (IMAP-Host/Port/Nutzer/Passwort, Ordnername)
+ dürfen wie WebUntis-Zugangsdaten **nicht** über `LehrerApp.Api` laufen — rein lokal, gleiches
+ Einstellungsfeld-Muster wie die WebUntis-URL (Kapitel 12).
+ - **Offen:** Passwort-Speicherung (OS-Credential-Store vs. verschlüsselt in den lokalen
+ Settings, wie es die übrigen gespeicherten Zugangsdaten der App bereits handhaben — dort
+ nachsehen statt neu entscheiden); Poll-Intervall; ob eine Mail-Vorschau nur Text oder auch
+ einfaches HTML rendern soll; Verhalten bei Anhängen (zunächst vermutlich ignorieren, nur
+ Text/Metadaten).
+
**Nachtrag — Pädagogische Klassen-Aufgaben (Nutzer-Feedback):** Wunsch nach einer zweiten,
"weniger arbeitszeitrelevant als pädagogisch" gedachten Art von Todo-Item (Beispiele:
"Ansage an die Klasse", "Etwas zum Stichtag einsammeln/austeilen"), gleichberechtigt im