Klassenlehrer-Tab: Warnung/Gefahr-Farben per validate_palette.js ersetzt

Amber und Korallrot waren laut Nutzer-Feedback auf dem Bildschirm kaum
auseinanderzuhalten. Die dataviz-Skill-Validierung bestätigte das
quantitativ (ΔE 2.5 unter Deuteranopie, 11.4 selbst bei normaler
Farbwahrnehmung — beides unter der Zielschwelle). Neue Werte aus der
validierten Kategorial-/Statuspalette der Skill statt erneut freihändig
gewählter Farben; Tagesüberblick-Balken tauscht zusätzlich die
Segmentreihenfolge, weil Grün und das neue Dunkel-Gelb sonst direkt
aneinanderstießen. Auch ein Kopiereinfügen-Duplikat in TODO.md behoben.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-27 13:33:54 +02:00
co-authored by Claude Sonnet 5
parent b3b86f0cf4
commit 3f8dab4abd
3 changed files with 58 additions and 22 deletions
+21 -10
View File
@@ -27,11 +27,22 @@
<SolidColorBrush x:Key="AppFilterActiveBackgroundBrush" Color="#173765"/>
<SolidColorBrush x:Key="AppFilterActiveBorderBrush" Color="#3C86F7"/>
<SolidColorBrush x:Key="AppFilterActiveForegroundBrush" Color="#FFFFFF"/>
<!-- Status -->
<SolidColorBrush x:Key="AppStatusOkBrush" Color="#73C45A"/>
<SolidColorBrush x:Key="AppStatusInfoBrush" Color="#4C8DFF"/>
<SolidColorBrush x:Key="AppStatusWarningBrush" Color="#F59E0B"/>
<SolidColorBrush x:Key="AppStatusDangerBrush" Color="#FF5A67"/>
<!-- Status: Nutzer-Feedback (August 2026) — Warnung (Amber) und Gefahr (Korallrot) waren
auf dem Bildschirm kaum auseinanderzuhalten. Per scripts/validate_palette.js der
dataviz-Skill gegen AppTrackBackgroundBrush/AppCardBackgroundBrush geprüft (adjacent
pairs, wie sie im gestapelten Balken tatsächlich aneinanderstoßen): die alte Kombi
lag bei ΔE nur 4.610.8 (protan/deutan), jetzt 10.224.4 — deutlich über der
Zielschwelle von 8. Ok/Warnung mussten zusätzlich im Tagesüberblick-Balken die
Reihenfolge tauschen (Info dazwischen), weil Grün und das validierte Dunkel-Gelb sonst
direkt aneinanderstießen (ΔE nur 3.0 unter Protanopie) — siehe
ClassTeacherOverviewView.axaml.
good=#008300, warning(dunkel)=#c98500, warning(hell)=#eda100, critical=#d03b3b
sind dieselben Stufen wie die validierte Kategorial-/Statuspalette der dataviz-Skill;
bewusst nicht wieder frei gewählt, um nicht erneut ins selbe Problem zu laufen. -->
<SolidColorBrush x:Key="AppStatusOkBrush" Color="#008300"/>
<SolidColorBrush x:Key="AppStatusInfoBrush" Color="#3987E5"/>
<SolidColorBrush x:Key="AppStatusWarningBrush" Color="#C98500"/>
<SolidColorBrush x:Key="AppStatusDangerBrush" Color="#D03B3B"/>
</ResourceDictionary>
<ResourceDictionary x:Key="Light">
@@ -52,11 +63,11 @@
<SolidColorBrush x:Key="AppFilterActiveBackgroundBrush" Color="#D7E6FC"/>
<SolidColorBrush x:Key="AppFilterActiveBorderBrush" Color="#2C6FD8"/>
<SolidColorBrush x:Key="AppFilterActiveForegroundBrush" Color="#10243F"/>
<!-- Status -->
<SolidColorBrush x:Key="AppStatusOkBrush" Color="#2E7D32"/>
<SolidColorBrush x:Key="AppStatusInfoBrush" Color="#1B5FC7"/>
<SolidColorBrush x:Key="AppStatusWarningBrush" Color="#A45B00"/>
<SolidColorBrush x:Key="AppStatusDangerBrush" Color="#C0272D"/>
<!-- Status: siehe Dark-Kommentar oben — dieselbe Validierung, helle Stufen. -->
<SolidColorBrush x:Key="AppStatusOkBrush" Color="#008300"/>
<SolidColorBrush x:Key="AppStatusInfoBrush" Color="#2A78D6"/>
<SolidColorBrush x:Key="AppStatusWarningBrush" Color="#EDA100"/>
<SolidColorBrush x:Key="AppStatusDangerBrush" Color="#D03B3B"/>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
@@ -236,7 +236,13 @@
Prozentzahlen erschlossen. Jedes Segment multipliziert per MultiBinding
die gerenderte Breite der Track-Leiste (x:Name="DayOverviewTrack") mit
seinem Anteil 0…1 (FractionWidthConverter) — bleibt dadurch korrekt, egal
wie breit die Seitenspalte in XAML gerade ist. -->
wie breit die Seitenspalte in XAML gerade ist.
Reihenfolge Ok→Info→Warnung→Gefahr (nicht Ok→Warnung→Info→Gefahr):
Grün und das validierte Dunkel-Gelb liegen unter Protanopie zu nah
beieinander (ΔE 3.0), direkt benachbart wäre das dieselbe Verwechslung
wie beim ursprünglichen Nutzer-Feedback zu Warnung/Gefahr. Mit Info
dazwischen entspricht die Reihenfolge zudem der echten Dringlichkeit
(siehe ClassTeacherRosterRow.AttentionRank: Gefahr > Warnung > Info > Ok). -->
<Grid Height="10" ToolTip.Tip="{Binding DayOverviewTooltip}">
<Border x:Name="DayOverviewTrack" Background="{DynamicResource AppTrackBackgroundBrush}"
CornerRadius="5"/>
@@ -250,14 +256,6 @@
</MultiBinding>
</Border.Width>
</Border>
<Border Classes="statusFill warning">
<Border.Width>
<MultiBinding Converter="{x:Static conv:FractionWidthConverter.Instance}">
<Binding ElementName="DayOverviewTrack" Path="Bounds.Width"/>
<Binding Path="LateFraction"/>
</MultiBinding>
</Border.Width>
</Border>
<Border Classes="statusFill info">
<Border.Width>
<MultiBinding Converter="{x:Static conv:FractionWidthConverter.Instance}">
@@ -266,6 +264,14 @@
</MultiBinding>
</Border.Width>
</Border>
<Border Classes="statusFill warning">
<Border.Width>
<MultiBinding Converter="{x:Static conv:FractionWidthConverter.Instance}">
<Binding ElementName="DayOverviewTrack" Path="Bounds.Width"/>
<Binding Path="LateFraction"/>
</MultiBinding>
</Border.Width>
</Border>
<Border Classes="statusFill danger">
<Border.Width>
<MultiBinding Converter="{x:Static conv:FractionWidthConverter.Instance}">
@@ -279,8 +285,8 @@
</Grid>
<StackPanel Spacing="5">
<StackPanel Orientation="Horizontal" Spacing="6"><Border Width="7" Height="7" CornerRadius="4" Classes="statusFill"/><TextBlock Text="{Binding PresentSummaryLabel}" FontSize="12"/></StackPanel>
<StackPanel Orientation="Horizontal" Spacing="6"><Border Width="7" Height="7" CornerRadius="4" Classes="statusFill warning"/><TextBlock Text="{Binding LateSummaryLabel}" FontSize="12"/></StackPanel>
<StackPanel Orientation="Horizontal" Spacing="6"><Border Width="7" Height="7" CornerRadius="4" Classes="statusFill info"/><TextBlock Text="{Binding ExcusedAbsenceSummaryLabel}" FontSize="12"/></StackPanel>
<StackPanel Orientation="Horizontal" Spacing="6"><Border Width="7" Height="7" CornerRadius="4" Classes="statusFill warning"/><TextBlock Text="{Binding LateSummaryLabel}" FontSize="12"/></StackPanel>
<StackPanel Orientation="Horizontal" Spacing="6"><Border Width="7" Height="7" CornerRadius="4" Classes="statusFill danger"/><TextBlock Text="{Binding UnexcusedAbsenceSummaryLabel}" FontSize="12"/></StackPanel>
</StackPanel>
</StackPanel>