diff.diff

  1diff --git a/.opencode.json b/.opencode.json
  2index 75e357d..59be1e8 100644
  3--- a/.opencode.json
  4+++ b/.opencode.json
  5@@ -6,6 +6,6 @@
  6     }
  7   },
  8   "tui": {
  9-    "theme": "opencode-dark"
 10+    "theme": "charm"
 11   }
 12 }
 13diff --git a/go.mod b/go.mod
 14index 18ad042..940a8e8 100644
 15--- a/go.mod
 16+++ b/go.mod
 17@@ -36,6 +36,8 @@ require (
 18 	github.com/stretchr/testify v1.10.0
 19 )
 20 
 21+require github.com/charmbracelet/x/exp/charmtone v0.0.0-20250530202730-6ba1785cd7b9 // indirect
 22+
 23 require (
 24 	cloud.google.com/go v0.116.0 // indirect
 25 	cloud.google.com/go/auth v0.13.0 // indirect
 26diff --git a/go.sum b/go.sum
 27index f6e08b7..8f347ed 100644
 28--- a/go.sum
 29+++ b/go.sum
 30@@ -84,6 +84,8 @@ github.com/charmbracelet/x/ansi v0.9.3-0.20250516160309-24eee56f89fa h1:JU05TLAB
 31 github.com/charmbracelet/x/ansi v0.9.3-0.20250516160309-24eee56f89fa/go.mod h1:3RQDQ6lDnROptfpWuUVIUG64bD2g2BgntdxH0Ya5TeE=
 32 github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa h1:lphz0Z3rsiOtMYiz8axkT24i9yFiueDhJbzyNUADmME=
 33 github.com/charmbracelet/x/cellbuf v0.0.14-0.20250516160309-24eee56f89fa/go.mod h1:xBlh2Yi3DL3zy/2n15kITpg0YZardf/aa/hgUaIM6Rk=
 34+github.com/charmbracelet/x/exp/charmtone v0.0.0-20250530202730-6ba1785cd7b9 h1:f6tG7ApqIvXTpgF6MZ+C4Ga7669eiW9BsMkXEjDFHfY=
 35+github.com/charmbracelet/x/exp/charmtone v0.0.0-20250530202730-6ba1785cd7b9/go.mod h1:vr+xCFylsPYq2qSz+n5/jItjcK2/PgrKFMTI7VRR6CI=
 36 github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a h1:FsHEJ52OC4VuTzU8t+n5frMjLvpYWEznSr/u8tnkCYw=
 37 github.com/charmbracelet/x/exp/golden v0.0.0-20250207160936-21c02780d27a/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U=
 38 github.com/charmbracelet/x/exp/slice v0.0.0-20250528180458-2d5d6cb84620 h1:/PN4jqP3ki9NvtHRrYZ9ewCutKZB6DK8frTW+Dj/MWs=
 39diff --git a/internal/tui/components/chat/chat.go b/internal/tui/components/chat/chat.go
 40index 2ee0b04..52c4dae 100644
 41--- a/internal/tui/components/chat/chat.go
 42+++ b/internal/tui/components/chat/chat.go
 43@@ -95,7 +95,7 @@ func lspsConfigured() string {
 44 func logoBlock() string {
 45 	t := theme.CurrentTheme()
 46 	return logo.Render(version.Version, true, logo.Opts{
 47-		FieldColor:   t.Accent(),
 48+		FieldColor:   t.Secondary(),
 49 		TitleColorA:  t.Primary(),
 50 		TitleColorB:  t.Secondary(),
 51 		CharmColor:   t.Primary(),
 52diff --git a/internal/tui/tui.go b/internal/tui/tui.go
 53index 9e8a62a..3f07956 100644
 54--- a/internal/tui/tui.go
 55+++ b/internal/tui/tui.go
 56@@ -18,6 +18,7 @@ import (
 57 	"github.com/opencode-ai/opencode/internal/tui/util"
 58 )
 59 
 60+// appModel represents the main application model that manages pages, dialogs, and UI state.
 61 type appModel struct {
 62 	width, height int
 63 	keyMap        KeyMap
 64@@ -35,6 +36,7 @@ type appModel struct {
 65 	completions completions.Completions
 66 }
 67 
 68+// Init initializes the application model and returns initial commands.
 69 func (a appModel) Init() tea.Cmd {
 70 	var cmds []tea.Cmd
 71 	cmd := a.pages[a.currentPage].Init()
 72@@ -46,6 +48,7 @@ func (a appModel) Init() tea.Cmd {
 73 	return tea.Batch(cmds...)
 74 }
 75 
 76+// Update handles incoming messages and updates the application state.
 77 func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 78 	var cmds []tea.Cmd
 79 	var cmd tea.Cmd
 80@@ -111,6 +114,7 @@ func (a *appModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 81 	return a, tea.Batch(cmds...)
 82 }
 83 
 84+// handleWindowResize processes window resize events and updates all components.
 85 func (a *appModel) handleWindowResize(msg tea.WindowSizeMsg) tea.Cmd {
 86 	var cmds []tea.Cmd
 87 	msg.Height -= 1 // Make space for the status bar
 88@@ -134,6 +138,7 @@ func (a *appModel) handleWindowResize(msg tea.WindowSizeMsg) tea.Cmd {
 89 	return tea.Batch(cmds...)
 90 }
 91 
 92+// handleKeyPressMsg processes keyboard input and routes to appropriate handlers.
 93 func (a *appModel) handleKeyPressMsg(msg tea.KeyPressMsg) tea.Cmd {
 94 	switch {
 95 	// completions
 96@@ -182,11 +187,7 @@ func (a *appModel) handleKeyPressMsg(msg tea.KeyPressMsg) tea.Cmd {
 97 	}
 98 }
 99 
100-// RegisterCommand adds a command to the command dialog
101-// func (a *appModel) RegisterCommand(cmd dialog.Command) {
102-// 	a.commands = append(a.commands, cmd)
103-// }
104-
105+// moveToPage handles navigation between different pages in the application.
106 func (a *appModel) moveToPage(pageID page.PageID) tea.Cmd {
107 	if a.app.CoderAgent.IsBusy() {
108 		// For now we don't move to any page if the agent is busy
109@@ -209,6 +210,7 @@ func (a *appModel) moveToPage(pageID page.PageID) tea.Cmd {
110 	return tea.Batch(cmds...)
111 }
112 
113+// View renders the complete application interface including pages, dialogs, and overlays.
114 func (a *appModel) View() tea.View {
115 	pageView := a.pages[a.currentPage].View()
116 	components := []string{
117@@ -252,6 +254,7 @@ func (a *appModel) View() tea.View {
118 	return view
119 }
120 
121+// New creates and initializes a new TUI application model.
122 func New(app *app.App) tea.Model {
123 	startPage := page.ChatPage
124 	model := &appModel{