Skip to content

[Bug] Font size hierarchy imbalance causes flat visual hierarchy #300

@Astro-Han

Description

@Astro-Han

What happened?

The current UI uses 14px as a universal font size for almost all text elements, resulting in a flat visual hierarchy that makes the interface feel cluttered and indistinct. Group headers in the sidebar are too small to read comfortably in dark mode, while the empty-state headline is disproportionately large compared to the rest of the UI.

Steps to reproduce

  1. Open PawWork
  2. Look at the left sidebar session list — all session titles use text-14-regular (14px / 400 weight) with no distinction between active and inactive
  3. Observe the group headers (e.g., "All", "Pinned") — they use text-11-medium (11px), nearly invisible against the dark background
  4. Click "New Session" to enter the empty state — the headline "今天想做什么?" uses text-20-medium (20px), creating a jarring jump from the 14px baseline
  5. Compare with ChatGPT / Codex / Claude desktop apps — they use 13px as the body baseline and establish hierarchy through weight and color, not just size

What did you expect to happen?

  • Session list items should have clear visual distinction between active (bold/strong) and inactive (regular/weak) states
  • Group headers should be readable without straining, acting as clear section dividers
  • The empty-state headline should feel integrated with the overall typography scale, not oversized
  • The font size scale should have smooth gradations (11px → 12px → 13px → 14px → 16px → 20px) instead of large gaps

PawWork version

v0.2.14

OS version

macOS 15.4.1 (also reproducible on Windows 11)

Can you reproduce it again?

Yes, every time

Screenshots, recordings, or extra context

Current font size distribution:

Element Current Class Size Weight Issue
Session title (default) text-14-regular 14px 400 No distinction from body text
Session title (active) text-14-regular 14px 400 Same as inactive — no hierarchy
Group header ("All", "Pinned") text-11-medium 11px 500 Too small, nearly invisible in dark mode
Empty-state headline text-20-medium 20px 500 Oversized vs 14px baseline
Empty-state subtitle text-14-regular 14px 400 6px gap from headline, no middle ground
Button text inherited ~14px Same as content text
Input placeholder inherited ~14px Same as content text

Competitor comparison:

Element PawWork ChatGPT Codex Claude
Session list 14px regular 13px medium 13px 13px
Group header 11px medium 12–13px 12px 12px
Body / chat 14px 13px 13px 13–14px
Empty headline 20px 16–18px 16px 16px

Competitors use 13px as the body baseline and establish hierarchy primarily through weight (400/500/600) and color (text-strong / text-base / text-weak), not size jumps.

Proposed changes:

Element Current Proposed Change
Session title (inactive) 14px regular 13px regular -1px
Session title (active) 14px regular 13px medium -1px, +weight
Group header 11px medium 12px medium +1px
Empty-state headline 20px medium 16px regular -4px, -weight
Subtitle / description 14px regular 14px regular no change
Footer hint 12px regular 12px regular no change

Files involved:

  • packages/ui/src/styles/utilities.css — font utility classes
  • packages/ui/src/styles/theme.css — font size variables
  • packages/app/src/pages/layout/sidebar-items.tsx — session list items
  • packages/app/src/pages/layout/pawwork-sidebar.tsx — sidebar group headers
  • packages/app/src/components/session/session-new-view.tsx — empty-state headline
  • packages/app/src/pages/session/message-timeline.tsx — session title header

Acceptance criteria:

  • Active session titles are visually distinct from inactive ones (via weight or color)
  • Group headers are clearly readable in both light and dark modes
  • Empty-state headline feels proportional to the rest of the UI
  • Changes use existing color tokens; only size and weight are adjusted
  • Consistent rendering on macOS and Windows

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium prioritybugSomething isn't workinguiDesign system and user interface

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions