|
1 | 1 | # UI/UX Overhaul Plan — OpenCode Desktop |
2 | 2 |
|
3 | 3 | **Date:** 2026-02-24 |
4 | | -**Status:** TODO — needs brainstorming session with ui-ux-pro-max + frontend-pe skills |
| 4 | +**Status:** ✅ PHASE 1 COMPLETE |
5 | 5 |
|
6 | 6 | ## User Requirements |
7 | | -- UI looks "very bad" — needs visual polish and tactile feel |
8 | | -- More themes and theme customization |
9 | | -- Better UI rendering quality |
| 7 | +- UI looks "very bad" — needs visual polish and tactile feel ✅ |
| 8 | +- More themes and theme customization ✅ |
| 9 | +- Better UI rendering quality ✅ |
10 | 10 | - Font size ✅ (fixed in PR #14821) |
11 | 11 | - Zoom in/out ✅ (already works via Cmd+/-/0) |
12 | 12 | - Wide mode ✅ (added in PR #14835) |
13 | | -- More UI settings options needed |
14 | | - |
15 | | -## Skills to Use |
16 | | -- `ui-ux-pro-max` — Design system, color palettes, typography, UX guidelines |
17 | | -- `frontend-pe` — Avant-garde UI design, micro-interactions, visual polish |
18 | | -- `brainstorming` — Plan before implementing |
19 | | - |
20 | | -## Areas to Investigate |
21 | | -1. **Theme system** — opencode already has theming (`packages/ui/src/context/theme/`). How to add more? |
22 | | -2. **Tactile UI** — Micro-interactions, hover states, transitions, shadows |
23 | | -3. **Typography** — Font rendering, line-height, letter-spacing refinements |
24 | | -4. **Spacing** — Consistent padding/margin system |
25 | | -5. **Colors** — More vibrant palettes, better contrast |
26 | | -6. **Animations** — Smooth transitions between states |
27 | | -7. **Settings page** — More appearance options (line-height, letter-spacing, sidebar width, etc.) |
28 | | - |
29 | | -## Tonight's Completed Fixes (6 PRs) |
30 | | -- #14820: Streaming content duplication |
31 | | -- #14821: Font size settings (CSS + terminal + UI) |
32 | | -- #14826: ContextOverflowError recovery |
33 | | -- #14827: Prune before compaction |
34 | | -- #14831: Context usage card + compact button |
35 | | -- #14835: Wide mode setting (full-width chat) |
| 13 | +- More UI settings options needed (future) |
| 14 | + |
| 15 | +## Phase 1 Changes (Completed) |
| 16 | + |
| 17 | +### 1. Font Rendering (`base.css`) |
| 18 | +- Added `-webkit-font-smoothing: antialiased` for crisp text on macOS |
| 19 | +- Added `-moz-osx-font-smoothing: grayscale` for Firefox |
| 20 | +- Added `text-rendering: optimizeLegibility` for better kerning |
| 21 | +- Added `scroll-behavior: smooth` for smooth scrolling |
| 22 | + |
| 23 | +### 2. Animation System (`animations.css`) |
| 24 | +- Added CSS custom property easing tokens (`--ease-out-expo`, `--ease-spring`, etc.) |
| 25 | +- Added duration tokens (`--duration-instant` through `--duration-slower`) |
| 26 | +- Added new keyframes: `fadeIn`, `fadeInScale`, `slideInFromRight/Left/Bottom` |
| 27 | +- Added `subtleGlow` for focus states, `shimmer` for loading, `spin` |
| 28 | +- Halved stagger delay (50ms instead of 100ms) for snappier text reveals |
| 29 | +- Added `prefers-reduced-motion: reduce` media query for accessibility |
| 30 | + |
| 31 | +### 3. Utilities (`utilities.css`) |
| 32 | +- Added `::selection` styling with theme-aware color |
| 33 | +- Added global transition defaults for all interactive elements |
| 34 | +- Added `:focus-visible` ring with theme color |
| 35 | +- Added thin scrollbar styling for scroll views |
| 36 | +- Suppressed focus ring for components that handle their own |
| 37 | + |
| 38 | +### 4. Shadow/Depth System (`theme.css`) |
| 39 | +- Refined `--shadow-xs` with slightly stronger presence |
| 40 | +- Added new `--shadow-sm` level for subtle elevation |
| 41 | +- Enhanced `--shadow-md` with deeper, more dramatic depth |
| 42 | +- Enhanced `--shadow-lg` with softer, more premium feel |
| 43 | +- Added new `--shadow-xl` for maximum elevation (modals, floating panels) |
| 44 | + |
| 45 | +### 5. Button Micro-Interactions (`button.css`) |
| 46 | +- Added explicit transition for bg-color, border, box-shadow, transform, opacity |
| 47 | +- Primary: hover now lifts with `--shadow-sm`, active presses with `scale(0.98)` |
| 48 | +- Ghost: icon color transitions on hover, active presses with `scale(0.97)` |
| 49 | +- Secondary: hover adds border shadow hint, active presses |
| 50 | +- Disabled states now use `opacity: 0.6` for clearer visual feedback |
| 51 | + |
| 52 | +### 6. Card Polish (`card.css`) |
| 53 | +- Upgraded border-radius from `--radius-md` to `--radius-lg` |
| 54 | +- Added full transition for bg-color, border-color, box-shadow, transform |
| 55 | +- Hover state now shows subtle border highlight and `--shadow-xs` elevation |
| 56 | + |
| 57 | +### 7. Dialog Animations (`dialog.css`) |
| 58 | +- Overlay now uses `backdrop-filter: blur(4px)` for frosted glass effect |
| 59 | +- Overlay opacity increased from 0.2 to 0.35 for better focus |
| 60 | +- Content now uses combined `scale(0.96) + translateY(4px)` entrance |
| 61 | +- Animation uses `cubic-bezier(0.16, 1, 0.3, 1)` expo-out for premium feel |
| 62 | +- Added subtle 1px border ring on dialog content for depth definition |
| 63 | +- Overlay entrance/exit now animated separately |
| 64 | + |
| 65 | +### 8. Icon Button Interactions (`icon-button.css`) |
| 66 | +- Added explicit transitions for bg-color, box-shadow, transform |
| 67 | +- Ghost variant: icon color now transitions on hover (to `--icon-hover`) |
| 68 | +- Active state now scales to `0.92` for satisfying tactile press |
| 69 | +- Icon SVG color now properly transitions through states |
| 70 | +- Disabled state uses `opacity: 0.5` |
| 71 | + |
| 72 | +### 9. New Themes (3 premium additions) |
| 73 | +- **Rosé Pine** — Dreamy, soft palette with purple/rose accents. Very popular community theme. |
| 74 | +- **Kanagawa** — Japanese-inspired warm palette. Distinctive golden/purple tones based on "The Great Wave." |
| 75 | +- **Everforest** — Calming green/earth tones nature-inspired palette. Easy on the eyes for long sessions. |
| 76 | + |
| 77 | +All themes include full light + dark variants with seeds, borders, surfaces, text, syntax highlighting, and markdown colors. |
| 78 | + |
| 79 | +## Files Modified |
| 80 | +- `packages/ui/src/styles/base.css` — Font rendering |
| 81 | +- `packages/ui/src/styles/animations.css` — Animation system |
| 82 | +- `packages/ui/src/styles/utilities.css` — Selection, focus, transitions, scrollbars |
| 83 | +- `packages/ui/src/styles/theme.css` — Shadow system |
| 84 | +- `packages/ui/src/components/button.css` — Button interactions |
| 85 | +- `packages/ui/src/components/card.css` — Card polish |
| 86 | +- `packages/ui/src/components/dialog.css` — Dialog animations |
| 87 | +- `packages/ui/src/components/icon-button.css` — Icon button interactions |
| 88 | +- `packages/ui/src/theme/themes/rosepine.json` — NEW |
| 89 | +- `packages/ui/src/theme/themes/kanagawa.json` — NEW |
| 90 | +- `packages/ui/src/theme/themes/everforest.json` — NEW |
| 91 | +- `packages/ui/src/theme/default-themes.ts` — Theme registration |
| 92 | + |
| 93 | +## Build Status |
| 94 | +✅ `vite build` passes with zero errors (7.98s) |
0 commit comments