-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Summary
The Serengeti light theme is inspired by the East African savanna — warm golden earth, amber grasses, and acacia silhouettes. The warm-tone direction is stronger than Atacama's neutrality, but the theme still reads as washed out: surfaces don't have enough contrast between layers, and the activity/status palette uses defaults from dark themes that look out of place on warm ochre backgrounds.
Problem Statement
Serengeti uses #F4EDE0 (canvas) and #EBE1D0 (sidebar) — warm sandy cream. The palette has potential but several choices pull it toward mediocrity:
- The difference between
surface-canvas: #F4EDE0andsurface-sidebar: #EBE1D0is small. The sidebar and canvas blend together, especially when the panels are#FAF7F2(barely whiter than canvas). The panel grid#E4D9CAis only slightly darker — these four surfaces are all within a narrow warm-tan band. border-default: #D5C8B8disappears againstsurface-panel: #FAF7F2— they're both warm near-white. Component boundaries are invisible.activity-active: #22c55eandactivity-working: #22c55eare the dark-theme neon greens. Against a warm golden canvas, they're extremely jarring — they read like wrong-colored pixels rather than UI elements.activity-idle: #8b95a1andactivity-waiting: #d97706are borrowed from Daintree defaults. The amber for waiting (#d97706) clashes with the warm surface tones — they're the same color family, making waiting states nearly invisible.terminal-black: #4A3F35andterminal-white: #9B8D7Aare custom-set — good — butterminal-bright-black: #A89A8Aandterminal-bright-white: #4A3F35invert the black/white relationship in a way that may produce confusing output.text-muted: #9B8D7Ahas very low contrast againstsurface-panel: #FAF7F2(approximately 2.5:1) — below WCAG AA for normal text.
Relevant code:
shared/theme/themes.ts#L812-L877— current Serengeti token definitionse2e/core/core-light-theme-smoke.spec.ts— smoke test- Issue Improve theme token coverage to fix washed-out light themes #3346 — token coverage improvements (foundation)
Desired Behavior
Serengeti should feel like the savanna at golden hour: warm amber and cream surfaces with richer mid-tone contrast. There should be clear differentiation between the canvas, sidebar, panels, and grid. Activity colors should feel like they belong in a warm-earth palette — earth greens and deep ambers rather than neon. Specifically:
- Surface layers should have clear stepped contrast: canvas brighter than sidebar, panels floating above canvas.
- Borders should visibly separate UI regions.
- Agent state colors should be adapted to the warm palette — muted earthy greens and ambers instead of neons.
text-mutedshould meet a minimum contrast ratio for readability.
Verification Workflow
- Apply:
await setAppTheme(window, "serengeti"). - Run
getThemeChromeMetrics— verify smoke test checks pass. - Screenshot: full page plus sidebar, worktree cards, and a panel with activity indicators.
- Measure
text-mutedcontrast againstsurface-panel. - AI evaluation: does the theme evoke warm savanna? Are surfaces differentiated? Are the agent state colors coherent?
- Iterate;
npm run check.
Acceptance Criteria
- E2E smoke test passes for Serengeti.
-
text-mutedhas ≥ 3:1 contrast againstsurface-panel. - Surface layers are clearly stepped — canvas, sidebar, panel, and grid are visually distinct.
- Agent state indicators are adapted for the warm palette and don't appear as jarring neon intrusions.
- The theme reads as warm savanna — distinct from Bondi (coastal) and Atacama (mineral desert) in screenshot evaluation.
- All E2E tests pass.
Dependencies
Depends on #3346 for improved border token overridability.
Edge Cases & Risks
- The
terminal-black/terminal-bright-black/terminal-white/terminal-bright-whitecustom override creates an unusual inverted relationship — review this carefully, as terminal output depending on semantic ANSI black/white may render unexpectedly. - Terminal scheme pairing from PR feat(terminal): match terminal color scheme to app theme automatically #3345 — verify after changes.