Skip to content

Unread emails visually indistinguishable from read ones in the list (dark theme) #27

Description

@lucletoffe

Description

In the email list (both mailbox view and unified inbox), unread emails are visually almost indistinguishable from read ones, especially in the dark theme. Users can easily believe all their mail has been marked as read when the data is actually correct.

I verified end-to-end on v0.1.53 against a Stalwart 0.16 server:

  • JMAP wire data is correct (keywords: {} for unread, $seen: true for read), and the app renders state faithfully — this is not a data or logic bug.
  • The only unread cues are: sender name textSecondarytext color + fontWeight 400 → 600, and subject fontWeight 400 → 700 (EmailListScreen.tsx, styles textUnread / textBold).
  • On a OnePlus (CPH2653, Android 15, system font), the weight difference barely renders, so the only remaining cue is a subtle grey→white shift on the sender name. Subject color is identical (c.text) in both states.

I measured pixel brightness of sender names on a screenshot to confirm: read senders peak at ~0.64 luminance (grey), unread at ~0.98 (white) — that shift is the entire indicator, and it does not read as "unread" at a glance.

Steps to reproduce

  1. Dark theme, default density, Inbox with a mix of read/unread messages.
  2. Glance at the list.

Expected

An unambiguous unread indicator, e.g. a primary-color dot before the sender (Gmail/K-9 style) or an accent bar on the row edge, in addition to the weight/color change.

Actual

Read and unread rows look essentially identical; several users may interpret this as "all my mail got marked read" (I did, and went as far as auditing the server before understanding it was a rendering/contrast issue).

Environment

  • Bulwark Mobile v0.1.53 (sideloaded APK from Releases)
  • OnePlus CPH2653, Android 15, dark theme
  • Server: Stalwart 0.16.12, direct JMAP

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions