Skip to content

Redesign Bondi theme — fix washed-out light surfaces and surface hierarchy #3353

@gregpriday

Description

@gregpriday

Summary

The Bondi light theme is inspired by Bondi Beach, Sydney — warm sand, ocean blue, and coastal green. The canvas and sidebar colors are in the right territory but the theme is visually flat: surfaces blend together, there isn't enough contrast between UI layers, and the light theme derivation system under-generates the border and overlay contrasts needed to separate components clearly.

Problem Statement

Bondi uses #F6F0E4 (canvas) and #E5DDCF (sidebar) — warm sandy tones. The concept works thematically but falls short visually:

  • border-default: #CFC4B3 is derived as a slightly darker warm tone. On light sandy backgrounds, this border is faint and provides insufficient visual separation between the sidebar, panels, and worktree cards. The worktree section headers blend into the card body.
  • surface-grid: #E8E2D6 is only a few tones away from surface-canvas — the grid background (which separates panels) barely reads as a structural element.
  • The border-subtle and border-divider tokens are derived via the createCanopyTokens helper using opacity-based formulas that were calibrated for dark themes. On Bondi's warm light surfaces, these produce borders that are nearly invisible (see issue Improve theme token coverage to fix washed-out light themes #3346).
  • text-muted: #6E746D is a cool grey-green against warm sandy surfaces — slightly off-character for the warm beach palette and potentially lower contrast than needed for secondary text.
  • activity-active: #22c55e and activity-working: #22c55e use the dark-theme neon green. On a light warm surface, this green is very vivid and feels jarring compared to the muted coastal palette.
  • The terminal palette uses deep high-contrast colors (e.g. terminal-blue: #2B5573) that look fine but could be more specifically tuned to the Bondi beach palette (ocean blue, coral red) for a more cohesive feel.
  • The E2E light theme smoke test (core-light-theme-smoke.spec.ts) currently flags Bondi for worktreeSectionContrast — the contrast between the worktree card sections is too low, confirming the visual flatness.

Relevant code:

Desired Behavior

Bondi should read as a bright coastal day: warm sun-bleached sand surfaces with clear blue ocean accents and lush coastal green. Surfaces should have unmistakable hierarchy — sidebar recedes, panels pop forward, borders are visible but not heavy. Specifically:

  • Sidebar should be noticeably distinct from the canvas — a sand color while the canvas is closer to sun-bleached white, or vice versa.
  • Worktree card sections, headers, and borders should be clearly separated.
  • Agent state indicators should use activity colors appropriate for a light theme — not neon green on cream.
  • The overall feel should be bright, airy, and Australian coastal — clearly distinct from the more European/neutral Svalbard theme.

Verification Workflow

  1. Apply the theme: await setAppTheme(window, "bondi").
  2. Run getThemeChromeMetrics — verify worktreeSectionContrast ≥ 1.08 and quickRunFieldBorderContrast ≥ 1.2 pass.
  3. Capture full-page screenshot.
  4. Take targeted screenshots of: sidebar, worktree dashboard, settings panel.
  5. AI visual evaluation: does the theme read as warm coastal? Are surfaces differentiated? Does it feel flat or washed out?
  6. Iterate; npm run check.

Acceptance Criteria

  • E2E smoke test passes: worktreeSectionContrast ≥ 1.08 and quickRunFieldBorderContrast ≥ 1.2 for Bondi.
  • The sidebar is visually distinct from the canvas background at a glance.
  • Worktree card sections (header, body, details) have visible separation.
  • Agent state indicators (activity-active, activity-waiting) read clearly without being jarring on the warm light surface.
  • Screenshot evaluation confirms the theme reads as bright, warm, and coastal — not washed-out or flat.
  • All E2E tests pass.

Dependencies

Depends on #3346 for the improved token coverage that makes explicit border values respected per-theme.

Edge Cases & Risks

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions