Skip to content

Fix: keep the empty-state message readable over a background image - #63

Merged
DevMando merged 1 commit into
mainfrom
fix/empty-state-readability
Sep 10, 2026
Merged

DevMando merged 1 commit into
mainfrom
fix/empty-state-readability

Conversation

@DevMando

Copy link
Copy Markdown
Owner

Summary

With a chat background image set, closing the last agent left the "no agents open" message sitting directly on the picture, where it could be hard to read. The message now sits in a translucent card, so the background still shows through while the text stays legible on any image.

What was happening

The empty state — the screen you land on after closing every agent — drew its icon, heading, explanation, and "New agent" button straight onto the window background. With no background image that is fine. With one, the text landed on whatever the picture happened to be at that spot, and a busy or light image made it unreadable. The problem got worse the higher the user had set their background opacity.

What changed

  • The message sits in a card. The empty-state content is now grouped inside a rounded, bordered panel that is partly see-through, so the background image still reads around and behind it while the text has a consistent surface underneath.
  • The card matches the rest of the app. It uses the same recipe as the chat's own message bubbles — the theme's panel color at partial transparency — so the empty state looks like the chat it replaces rather than a new kind of surface.
  • It follows the user's theme. The card color is derived from whichever theme is active, so switching themes recolors it along with everything else.
  • The explanation line is less faded. It was deliberately dimmed to read as secondary text. Over a background image that dimming only cost readability, so it is now closer to full strength.
  • The card is always shown, not only when a background image is set. On a plain background it reads as an ordinary empty-state card, which avoids the panel appearing and disappearing depending on the user's wallpaper choice.

Scope and risk

Low. The change is confined to the one screen shown when no agents are open, plus one new theme color. No behavior changes: the "New agent" button, the rail, snapshots, and saved conversations are untouched. The empty state's show/hide logic is unchanged — the element that gets shown is now the card rather than the text stack.

One thing a reviewer may want to weigh in on is the "always shown" decision above. Making the card conditional on a background image being set is a small change if the preference is for a bare empty state otherwise.

Verification

Desktop builds clean (0 warnings, 0 errors) and the full Desktop test suite passes — 330 of 330.

Not covered: this was not visually confirmed in a running app. The empty state is XAML with no test coverage, so a reviewer should open the app, close every agent, and check it with a background image set (ideally a light or busy one) and with none, in both a light and a dark theme.

Closing the last agent left the 'no agents open' copy painted directly on
the user's chat background image, where a busy or light picture could make
it unreadable.

Wrap the copy in a translucent card instead: MandoGlassBrush is the theme's
panel color with alpha, mirroring the transcript's own message bubbles, so
the image still reads through the card while the text sits on a predictable
surface. Alpha rather than Opacity — Opacity on a container fades its text
too, which is the problem, not the fix. ThemeManager re-derives the brush
from each theme's panel color so it tracks theme switches.

The body line moves from 0.6 to 0.8 opacity: dimming reads as secondary
against a flat panel, but over an image it only costs contrast.
@DevMando
DevMando merged commit 1fe87c6 into main Sep 10, 2026
1 check passed
@DevMando
DevMando deleted the fix/empty-state-readability branch September 10, 2026 03:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant