Skip to content

[Bug]: The success toast uses dark-mode green on every theme — 1.83:1 on light presets #2106

Description

@laurentiu021

Problem

The completion toast paints three literal greens on a themed fill, so on every light preset the success glyph is close to invisible.

MainWindow.xaml, the ToastOverlay block: the container is Background="{DynamicResource Surface2}" — it follows the theme — while the check glyph is Foreground="#22C55E", the badge behind it Background="#2022C55E" and the border BorderBrush="#4022C55E". The literal is the dark-mode green, used unconditionally.

Measured against each light preset's real Surface2 from ThemeService:

Light preset Surface2 Toast glyph #22C55E Themed light Success #166534
clean-indigo #F1F5F9 2.08:1 6.51:1
sky-breeze #E0F2FE 1.99:1 6.21:1
mint-fresh #BBF7D0 1.88:1 5.88:1
warm-sand #FDE68A 1.83:1 5.73:1

For reference the same green measures 7.66:1 on midnight-indigo's #151A23, which is why it reads correctly in dark mode and was never noticed. WCAG asks 4.5:1 for text and 3:1 for a meaningful graphic; the toast clears neither on any light preset.

The theme system already solved this. ThemeService seeds Success per mode — #22C55E dark, #166534 light — and the source comment beside it names this exact failure: "mode-aware Success brush — one crisp card beside two washed-out ones." The toast simply does not use it.

Expected behavior

The toast uses the themed status brushes (Success / SuccessBgSubtle / SuccessBorder), which already carry per-mode values, so the glyph is legible on all twelve presets.

The guard is one word too narrow

ArchitectureTests.NoThemedFill_CarriesAHardcodedWhiteForeground pins exactly this shape — a hardcoded foreground literal over a DynamicResource fill — and its own remarks describe a hardcoded white measuring 2.15:1 on warm-ember. It watches white only, so a hardcoded green over Surface2 is the same defect in a colour the guard does not look for.

Widen that guard rather than adding a second one: any hardcoded foreground literal over a themed fill, contrast-checked against every preset's value for that fill. It should red on the toast today.

Evidence

  • SysManager/SysManager/MainWindow.xaml — the ToastOverlay block
  • SysManager/SysManager/Services/ThemeService.cs — per-mode Success / SuccessText / SuccessBgSubtle / SuccessBorder, and the light preset palettes the table above uses
  • SysManager/SysManager.Tests/ArchitectureTests.csNoThemedFill_CarriesAHardcodedWhiteForeground

Ratios computed with the WCAG 2.x relative-luminance formula against the preset values as they stand in source.

Affected area

Every tab — the toast is in the shell

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinguxVisual or interaction improvement

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions