@pencil-agent/nano-pencil 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/README.md +267 -267
  2. package/dist/build-meta.json +3 -3
  3. package/dist/core/export-html/AGENT.md +11 -11
  4. package/dist/core/export-html/template.css +971 -971
  5. package/dist/core/export-html/template.html +54 -54
  6. package/dist/core/model/custom-providers.js +1 -1
  7. package/dist/core/model-registry.js +5 -5
  8. package/dist/extensions/builtin/AGENT.md +115 -115
  9. package/dist/extensions/builtin/browser/AGENT.md +17 -17
  10. package/dist/extensions/builtin/browser/agent-workspace/agent_helpers.py +12 -12
  11. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/amazon/product-search.md +198 -198
  12. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/archive-org/scraping.md +341 -341
  13. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv/scraping.md +311 -311
  14. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv-bulk/scraping.md +333 -333
  15. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/atlas/overview.md +70 -70
  16. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/booking-com/scraping.md +578 -578
  17. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/capterra/scraping.md +440 -440
  18. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/centilebrain/generate-estimates.md +110 -110
  19. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coingecko/scraping.md +325 -325
  20. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coinmarketcap/scraping.md +463 -463
  21. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coursera/scraping.md +360 -360
  22. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/craigslist/scraping.md +390 -390
  23. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/crossref/scraping.md +568 -568
  24. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/dev-to/scraping.md +323 -323
  25. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/duckduckgo/scraping.md +349 -349
  26. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/ebay/scraping.md +435 -435
  27. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/etsy/scraping.md +506 -506
  28. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/eventbrite/scraping.md +363 -363
  29. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/expedia/automation.md +168 -168
  30. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/groups.md +236 -236
  31. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/pages.md +295 -295
  32. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/framer/editor.md +108 -108
  33. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/fred/scraping.md +493 -493
  34. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/g2/scraping.md +580 -580
  35. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/genius/scraping.md +511 -511
  36. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/repo-actions.md +65 -65
  37. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/scraping.md +184 -184
  38. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/glassdoor/scraping.md +543 -543
  39. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gmail/compose.md +122 -122
  40. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/goodreads/scraping.md +461 -461
  41. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gutenberg/scraping.md +383 -383
  42. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/hackernews/scraping.md +243 -243
  43. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/howlongtobeat/scraping.md +473 -473
  44. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/imdb/scraping.md +271 -271
  45. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/itch-io/scraping.md +436 -436
  46. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/job-boards/indeed-glassdoor.md +1021 -1021
  47. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/letterboxd/scraping.md +349 -349
  48. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/linkedin/invitation-manager.md +109 -109
  49. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/loom/folder-enumeration.md +170 -170
  50. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/macrotrends/scraping.md +537 -537
  51. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/article-hydration.md +120 -120
  52. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/scraping.md +414 -414
  53. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/metacritic/scraping.md +477 -477
  54. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/musicbrainz/scraping.md +478 -478
  55. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/nasa/scraping.md +339 -339
  56. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/news-aggregation/multi-source.md +205 -205
  57. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/open-library/scraping.md +472 -472
  58. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openalex/scraping.md +470 -470
  59. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openstreetmap/scraping.md +490 -490
  60. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/package-registries/npm-pypi.md +478 -478
  61. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/polymarket/scraping.md +234 -234
  62. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/producthunt/scraping.md +307 -307
  63. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/pubmed/scraping.md +421 -421
  64. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/quora/scraping.md +364 -364
  65. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rawg/scraping.md +352 -352
  66. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/reddit/scraping.md +124 -124
  67. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rest-countries/scraping.md +233 -233
  68. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/sec-edgar/scraping.md +361 -361
  69. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/README.md +36 -36
  70. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/embedded-apps.md +72 -72
  71. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/knowledge-base.md +109 -109
  72. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/polaris-inputs.md +137 -137
  73. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/soundcloud/scraping.md +362 -362
  74. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/spotify/scraping.md +339 -339
  75. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/stackoverflow/scraping.md +435 -435
  76. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/steam/scraping.md +575 -575
  77. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/substack/scraping.md +338 -338
  78. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/thetechgeeks/pricing.md +52 -52
  79. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tiktok/upload.md +107 -107
  80. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tradingview/scraping.md +309 -309
  81. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trello/boards-and-lists.md +88 -88
  82. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trustpilot/scraping.md +375 -375
  83. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/walmart/scraping.md +444 -444
  84. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wayback-machine/scraping.md +306 -306
  85. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/weather/scraping.md +398 -398
  86. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wellfound/scraping.md +596 -596
  87. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/world-bank/scraping.md +356 -356
  88. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/xiaohongshu/scraping.md +84 -84
  89. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/youtube/scraping.md +418 -418
  90. package/dist/extensions/builtin/browser/agent-workspace/domain-skills/zillow/scraping.md +433 -433
  91. package/dist/extensions/builtin/browser/browser.md +73 -73
  92. package/dist/extensions/builtin/browser/install.md +142 -142
  93. package/dist/extensions/builtin/browser/interaction-skills/connection.md +48 -48
  94. package/dist/extensions/builtin/browser/interaction-skills/cookies.md +3 -3
  95. package/dist/extensions/builtin/browser/interaction-skills/cross-origin-iframes.md +3 -3
  96. package/dist/extensions/builtin/browser/interaction-skills/dialogs.md +64 -64
  97. package/dist/extensions/builtin/browser/interaction-skills/downloads.md +3 -3
  98. package/dist/extensions/builtin/browser/interaction-skills/drag-and-drop.md +3 -3
  99. package/dist/extensions/builtin/browser/interaction-skills/dropdowns.md +3 -3
  100. package/dist/extensions/builtin/browser/interaction-skills/iframes.md +3 -3
  101. package/dist/extensions/builtin/browser/interaction-skills/network-requests.md +3 -3
  102. package/dist/extensions/builtin/browser/interaction-skills/print-as-pdf.md +3 -3
  103. package/dist/extensions/builtin/browser/interaction-skills/profile-sync.md +90 -90
  104. package/dist/extensions/builtin/browser/interaction-skills/screenshots.md +17 -17
  105. package/dist/extensions/builtin/browser/interaction-skills/scrolling.md +3 -3
  106. package/dist/extensions/builtin/browser/interaction-skills/shadow-dom.md +3 -3
  107. package/dist/extensions/builtin/browser/interaction-skills/tabs.md +69 -69
  108. package/dist/extensions/builtin/browser/interaction-skills/uploads.md +1 -1
  109. package/dist/extensions/builtin/browser/interaction-skills/viewport.md +3 -3
  110. package/dist/extensions/builtin/browser/src/browser_harness/AGENT.md +15 -15
  111. package/dist/extensions/builtin/browser/src/browser_harness/__init__.py +8 -8
  112. package/dist/extensions/builtin/browser/src/browser_harness/_ipc.py +90 -90
  113. package/dist/extensions/builtin/browser/src/browser_harness/admin.py +722 -722
  114. package/dist/extensions/builtin/browser/src/browser_harness/daemon.py +328 -328
  115. package/dist/extensions/builtin/browser/src/browser_harness/helpers.py +396 -396
  116. package/dist/extensions/builtin/browser/src/browser_harness/run.py +103 -103
  117. package/dist/extensions/builtin/debug/index.js +9 -9
  118. package/dist/extensions/builtin/discipline/skills/brainstorming/SKILL.md +33 -33
  119. package/dist/extensions/builtin/discipline/skills/executing-plans/SKILL.md +25 -25
  120. package/dist/extensions/builtin/discipline/skills/finishing-development-branch/SKILL.md +25 -25
  121. package/dist/extensions/builtin/discipline/skills/receiving-code-review/SKILL.md +22 -22
  122. package/dist/extensions/builtin/discipline/skills/requesting-code-review/SKILL.md +31 -31
  123. package/dist/extensions/builtin/discipline/skills/systematic-debugging/SKILL.md +28 -28
  124. package/dist/extensions/builtin/discipline/skills/test-driven-development/SKILL.md +32 -32
  125. package/dist/extensions/builtin/discipline/skills/using-git-worktrees/SKILL.md +25 -25
  126. package/dist/extensions/builtin/discipline/skills/verification-before-completion/SKILL.md +27 -27
  127. package/dist/extensions/builtin/discipline/skills/writing-plans/SKILL.md +26 -26
  128. package/dist/extensions/builtin/goal/README.md +67 -67
  129. package/dist/extensions/builtin/goal/index.js +6 -6
  130. package/dist/extensions/builtin/grub/README.md +112 -112
  131. package/dist/extensions/builtin/link-world/agent-workspace/README.md +16 -16
  132. package/dist/extensions/builtin/link-world/internet-search/internet-search.md +65 -65
  133. package/dist/extensions/builtin/link-world/link-world-agent.md +82 -82
  134. package/dist/extensions/builtin/link-world/linkworld.md +313 -313
  135. package/dist/extensions/builtin/link-world/network-routing/network-routing.md +67 -67
  136. package/dist/extensions/builtin/loop/README.md +92 -92
  137. package/dist/extensions/builtin/mcp/figma-design.md +68 -68
  138. package/dist/extensions/builtin/mcp/mcp-management.md +85 -85
  139. package/dist/extensions/builtin/recap/AGENT.md +15 -15
  140. package/dist/extensions/builtin/sal/README.md +72 -72
  141. package/dist/extensions/builtin/security-audit/README.md +289 -289
  142. package/dist/extensions/builtin/team/AGENT.md +112 -112
  143. package/dist/extensions/builtin/team/TESTING.md +299 -299
  144. package/dist/extensions/builtin/token-save/README.md +56 -56
  145. package/dist/extensions/optional/AGENT.md +10 -10
  146. package/dist/modes/interactive/controllers/input-submit-controller.js +2 -2
  147. package/dist/modes/interactive/controllers/stream-render-controller.js +2 -2
  148. package/dist/modes/interactive/interactive-mode.js +19 -19
  149. package/dist/modes/interactive/theme/dark.json +85 -85
  150. package/dist/modes/interactive/theme/light.json +84 -84
  151. package/dist/modes/interactive/theme/theme-schema.json +335 -335
  152. package/dist/modes/interactive/theme/warm.json +81 -81
  153. package/dist/node_modules/@pencil-agent/ai/dist/cli.js +0 -0
  154. package/dist/node_modules/@pencil-agent/ai/dist/models.generated.js +1 -1
  155. package/docs/ACP/345/215/217/350/256/256/351/233/206/346/210/220/345/274/200/345/217/221/346/226/207/346/241/243.md +851 -0
  156. package/docs/SDK-TESTING.md +364 -0
  157. package/docs/codex-goal-command-impl.md +1055 -1055
  158. package/docs/codex-goal-vs-grub.md +500 -500
  159. package/docs/custom-provider.md +27 -27
  160. package/docs/extensions.md +27 -27
  161. package/docs/keybindings.md +27 -27
  162. package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md" +250 -250
  163. package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/212/245/345/221/212.md" +122 -122
  164. package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210.md" +1222 -1222
  165. package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/256/236/347/216/260/346/212/245/345/221/212.md" +158 -158
  166. package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/257/271/346/257/224/345/210/206/346/236/220.md" +128 -128
  167. package/docs/loop /351/207/215/346/236/204/350/256/241/345/210/222.md" +320 -320
  168. package/docs/loop-usage-examples.md +214 -214
  169. package/docs/mem-core/346/212/200/346/234/257/346/226/207/346/241/243.md +593 -0
  170. package/docs/models.md +27 -27
  171. package/docs/packages.md +27 -27
  172. package/docs/pi-design-philosophy.md +457 -457
  173. package/docs/planmode.md +1987 -1987
  174. package/docs/prompt-templates.md +27 -27
  175. package/docs/providers.md +27 -27
  176. package/docs/sdk.md +27 -27
  177. package/docs/skills.md +27 -27
  178. package/docs/startup-performance-optimization.md +301 -0
  179. package/docs/themes.md +27 -27
  180. package/docs/tui.md +27 -27
  181. package/docs//350/256/244/347/237/245/345/234/260/345/233/276.md +47 -0
  182. package/package.json +190 -190
  183. package/docs/cc-agent-design.md +0 -1297
  184. package/docs/cc-tui-design.md +0 -1333
  185. package/docs/nanoPencil-/345/255/246/344/271/240/350/256/241/345/210/222.md +0 -170
  186. package/docs/scan-report.md +0 -3820
  187. package/docs//345/257/271/346/240/207Claude-Code.md +0 -1775
  188. package/docs//351/230/277/351/207/214/345/267/264/345/267/264/350/264/242/346/212/245/345/210/206/346/236/220/344/271/246.md +0 -261
@@ -1,971 +1,971 @@
1
- :root {
2
- {{THEME_VARS}}
3
- --body-bg: {{BODY_BG}};
4
- --container-bg: {{CONTAINER_BG}};
5
- --info-bg: {{INFO_BG}};
6
- }
7
-
8
- * { margin: 0; padding: 0; box-sizing: border-box; }
9
-
10
- :root {
11
- --line-height: 18px; /* 12px font * 1.5 */
12
- }
13
-
14
- body {
15
- font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace;
16
- font-size: 12px;
17
- line-height: var(--line-height);
18
- color: var(--text);
19
- background: var(--body-bg);
20
- }
21
-
22
- #app {
23
- display: flex;
24
- min-height: 100vh;
25
- }
26
-
27
- /* Sidebar */
28
- #sidebar {
29
- width: 400px;
30
- background: var(--container-bg);
31
- flex-shrink: 0;
32
- display: flex;
33
- flex-direction: column;
34
- position: sticky;
35
- top: 0;
36
- height: 100vh;
37
- border-right: 1px solid var(--dim);
38
- }
39
-
40
- .sidebar-header {
41
- padding: 8px 12px;
42
- flex-shrink: 0;
43
- }
44
-
45
- .sidebar-controls {
46
- padding: 8px 8px 4px 8px;
47
- }
48
-
49
- .sidebar-search {
50
- width: 100%;
51
- box-sizing: border-box;
52
- padding: 4px 8px;
53
- font-size: 11px;
54
- font-family: inherit;
55
- background: var(--body-bg);
56
- color: var(--text);
57
- border: 1px solid var(--dim);
58
- border-radius: 3px;
59
- }
60
-
61
- .sidebar-filters {
62
- display: flex;
63
- padding: 4px 8px 8px 8px;
64
- gap: 4px;
65
- align-items: center;
66
- flex-wrap: wrap;
67
- }
68
-
69
- .sidebar-search:focus {
70
- outline: none;
71
- border-color: var(--accent);
72
- }
73
-
74
- .sidebar-search::placeholder {
75
- color: var(--muted);
76
- }
77
-
78
- .filter-btn {
79
- padding: 3px 8px;
80
- font-size: 10px;
81
- font-family: inherit;
82
- background: transparent;
83
- color: var(--muted);
84
- border: 1px solid var(--dim);
85
- border-radius: 3px;
86
- cursor: pointer;
87
- }
88
-
89
- .filter-btn:hover {
90
- color: var(--text);
91
- border-color: var(--text);
92
- }
93
-
94
- .filter-btn.active {
95
- background: var(--accent);
96
- color: var(--body-bg);
97
- border-color: var(--accent);
98
- }
99
-
100
- .sidebar-close {
101
- display: none;
102
- padding: 3px 8px;
103
- font-size: 12px;
104
- font-family: inherit;
105
- background: transparent;
106
- color: var(--muted);
107
- border: 1px solid var(--dim);
108
- border-radius: 3px;
109
- cursor: pointer;
110
- margin-left: auto;
111
- }
112
-
113
- .sidebar-close:hover {
114
- color: var(--text);
115
- border-color: var(--text);
116
- }
117
-
118
- .tree-container {
119
- flex: 1;
120
- overflow: auto;
121
- padding: 4px 0;
122
- }
123
-
124
- .tree-node {
125
- padding: 0 8px;
126
- cursor: pointer;
127
- display: flex;
128
- align-items: baseline;
129
- font-size: 11px;
130
- line-height: 13px;
131
- white-space: nowrap;
132
- }
133
-
134
- .tree-node:hover {
135
- background: var(--selectedBg);
136
- }
137
-
138
- .tree-node.active {
139
- background: var(--selectedBg);
140
- }
141
-
142
- .tree-node.active .tree-content {
143
- font-weight: bold;
144
- }
145
-
146
- .tree-node.in-path {
147
- background: color-mix(in srgb, var(--accent) 10%, transparent);
148
- }
149
-
150
- .tree-node:not(.in-path) {
151
- opacity: 0.5;
152
- }
153
-
154
- .tree-node:not(.in-path):hover {
155
- opacity: 1;
156
- }
157
-
158
- .tree-prefix {
159
- color: var(--muted);
160
- flex-shrink: 0;
161
- font-family: monospace;
162
- white-space: pre;
163
- }
164
-
165
- .tree-marker {
166
- color: var(--accent);
167
- flex-shrink: 0;
168
- }
169
-
170
- .tree-content {
171
- color: var(--text);
172
- }
173
-
174
- .tree-role-user {
175
- color: var(--accent);
176
- }
177
-
178
- .tree-role-assistant {
179
- color: var(--success);
180
- }
181
-
182
- .tree-role-tool {
183
- color: var(--muted);
184
- }
185
-
186
- .tree-muted {
187
- color: var(--muted);
188
- }
189
-
190
- .tree-error {
191
- color: var(--error);
192
- }
193
-
194
- .tree-compaction {
195
- color: var(--borderAccent);
196
- }
197
-
198
- .tree-branch-summary {
199
- color: var(--warning);
200
- }
201
-
202
- .tree-custom-message {
203
- color: var(--customMessageLabel);
204
- }
205
-
206
- .tree-status {
207
- padding: 4px 12px;
208
- font-size: 10px;
209
- color: var(--muted);
210
- flex-shrink: 0;
211
- }
212
-
213
- /* Main content */
214
- #content {
215
- flex: 1;
216
- overflow-y: auto;
217
- padding: var(--line-height) calc(var(--line-height) * 2);
218
- display: flex;
219
- flex-direction: column;
220
- align-items: center;
221
- }
222
-
223
- #content > * {
224
- width: 100%;
225
- max-width: 800px;
226
- }
227
-
228
- /* Help bar */
229
- .help-bar {
230
- font-size: 11px;
231
- color: var(--warning);
232
- margin-bottom: var(--line-height);
233
- display: flex;
234
- align-items: center;
235
- gap: 12px;
236
- }
237
-
238
- .download-json-btn {
239
- font-size: 10px;
240
- padding: 2px 8px;
241
- background: var(--container-bg);
242
- border: 1px solid var(--border);
243
- border-radius: 3px;
244
- color: var(--text);
245
- cursor: pointer;
246
- font-family: inherit;
247
- }
248
-
249
- .download-json-btn:hover {
250
- background: var(--hover);
251
- border-color: var(--borderAccent);
252
- }
253
-
254
- /* Header */
255
- .header {
256
- background: var(--container-bg);
257
- border-radius: 4px;
258
- padding: var(--line-height);
259
- margin-bottom: var(--line-height);
260
- }
261
-
262
- .header h1 {
263
- font-size: 12px;
264
- font-weight: bold;
265
- color: var(--borderAccent);
266
- margin-bottom: var(--line-height);
267
- }
268
-
269
- .header-info {
270
- display: flex;
271
- flex-direction: column;
272
- gap: 0;
273
- font-size: 11px;
274
- }
275
-
276
- .info-item {
277
- color: var(--dim);
278
- display: flex;
279
- align-items: baseline;
280
- }
281
-
282
- .info-label {
283
- font-weight: 600;
284
- margin-right: 8px;
285
- min-width: 100px;
286
- }
287
-
288
- .info-value {
289
- color: var(--text);
290
- flex: 1;
291
- }
292
-
293
- /* Messages */
294
- #messages {
295
- display: flex;
296
- flex-direction: column;
297
- gap: var(--line-height);
298
- }
299
-
300
- .message-timestamp {
301
- font-size: 10px;
302
- color: var(--dim);
303
- opacity: 0.8;
304
- }
305
-
306
- .user-message {
307
- background: var(--userMessageBg);
308
- color: var(--userMessageText);
309
- padding: var(--line-height);
310
- border-radius: 4px;
311
- position: relative;
312
- }
313
-
314
- .assistant-message {
315
- padding: 0;
316
- position: relative;
317
- }
318
-
319
- /* Copy link button - appears on hover */
320
- .copy-link-btn {
321
- position: absolute;
322
- top: 8px;
323
- right: 8px;
324
- width: 28px;
325
- height: 28px;
326
- padding: 6px;
327
- background: var(--container-bg);
328
- border: 1px solid var(--dim);
329
- border-radius: 4px;
330
- color: var(--muted);
331
- cursor: pointer;
332
- opacity: 0;
333
- transition: opacity 0.15s, background 0.15s, color 0.15s;
334
- display: flex;
335
- align-items: center;
336
- justify-content: center;
337
- z-index: 10;
338
- }
339
-
340
- .user-message:hover .copy-link-btn,
341
- .assistant-message:hover .copy-link-btn {
342
- opacity: 1;
343
- }
344
-
345
- .copy-link-btn:hover {
346
- background: var(--accent);
347
- color: var(--body-bg);
348
- border-color: var(--accent);
349
- }
350
-
351
- .copy-link-btn.copied {
352
- background: var(--success, #22c55e);
353
- color: white;
354
- border-color: var(--success, #22c55e);
355
- }
356
-
357
- /* Highlight effect for deep-linked messages */
358
- .user-message.highlight,
359
- .assistant-message.highlight {
360
- animation: highlight-pulse 2s ease-out;
361
- }
362
-
363
- @keyframes highlight-pulse {
364
- 0% {
365
- box-shadow: 0 0 0 3px var(--accent);
366
- }
367
- 100% {
368
- box-shadow: 0 0 0 0 transparent;
369
- }
370
- }
371
-
372
- .assistant-message > .message-timestamp {
373
- padding-left: var(--line-height);
374
- }
375
-
376
- .assistant-text {
377
- padding: var(--line-height);
378
- padding-bottom: 0;
379
- }
380
-
381
- .message-timestamp + .assistant-text,
382
- .message-timestamp + .thinking-block {
383
- padding-top: 0;
384
- }
385
-
386
- .thinking-block + .assistant-text {
387
- padding-top: 0;
388
- }
389
-
390
- .thinking-text {
391
- padding: var(--line-height);
392
- color: var(--thinkingText);
393
- font-style: italic;
394
- white-space: pre-wrap;
395
- }
396
-
397
- .message-timestamp + .thinking-block .thinking-text,
398
- .message-timestamp + .thinking-block .thinking-collapsed {
399
- padding-top: 0;
400
- }
401
-
402
- .thinking-collapsed {
403
- display: none;
404
- padding: var(--line-height);
405
- color: var(--thinkingText);
406
- font-style: italic;
407
- }
408
-
409
- /* Tool execution */
410
- .tool-execution {
411
- padding: var(--line-height);
412
- border-radius: 4px;
413
- }
414
-
415
- .tool-execution + .tool-execution {
416
- margin-top: var(--line-height);
417
- }
418
-
419
- .assistant-text + .tool-execution {
420
- margin-top: var(--line-height);
421
- }
422
-
423
- .tool-execution.pending { background: var(--toolPendingBg); }
424
- .tool-execution.success { background: var(--toolSuccessBg); }
425
- .tool-execution.error { background: var(--toolErrorBg); }
426
-
427
- .tool-header, .tool-name {
428
- font-weight: bold;
429
- }
430
-
431
- .tool-path {
432
- color: var(--accent);
433
- word-break: break-all;
434
- }
435
-
436
- .line-numbers {
437
- color: var(--warning);
438
- }
439
-
440
- .line-count {
441
- color: var(--dim);
442
- }
443
-
444
- .tool-command {
445
- font-weight: bold;
446
- white-space: pre-wrap;
447
- word-wrap: break-word;
448
- overflow-wrap: break-word;
449
- word-break: break-word;
450
- }
451
-
452
- .tool-output {
453
- margin-top: var(--line-height);
454
- color: var(--toolOutput);
455
- word-wrap: break-word;
456
- overflow-wrap: break-word;
457
- word-break: break-word;
458
- font-family: inherit;
459
- overflow-x: auto;
460
- }
461
-
462
- .tool-output > div,
463
- .output-preview,
464
- .output-full {
465
- margin: 0;
466
- padding: 0;
467
- line-height: var(--line-height);
468
- }
469
-
470
- .tool-output pre {
471
- margin: 0;
472
- padding: 0;
473
- font-family: inherit;
474
- color: inherit;
475
- white-space: pre-wrap;
476
- word-wrap: break-word;
477
- overflow-wrap: break-word;
478
- }
479
-
480
- .tool-output code {
481
- padding: 0;
482
- background: none;
483
- color: var(--text);
484
- }
485
-
486
- .tool-output.expandable {
487
- cursor: pointer;
488
- }
489
-
490
- .tool-output.expandable:hover {
491
- opacity: 0.9;
492
- }
493
-
494
- .tool-output.expandable .output-full {
495
- display: none;
496
- }
497
-
498
- .tool-output.expandable.expanded .output-preview {
499
- display: none;
500
- }
501
-
502
- .tool-output.expandable.expanded .output-full {
503
- display: block;
504
- }
505
-
506
- .ansi-line {
507
- white-space: pre-wrap;
508
- }
509
-
510
- .tool-images {
511
- }
512
-
513
- .tool-image {
514
- max-width: 100%;
515
- max-height: 500px;
516
- border-radius: 4px;
517
- margin: var(--line-height) 0;
518
- }
519
-
520
- .expand-hint {
521
- color: var(--toolOutput);
522
- }
523
-
524
- /* Diff */
525
- .tool-diff {
526
- font-size: 11px;
527
- overflow-x: auto;
528
- white-space: pre;
529
- }
530
-
531
- .diff-added { color: var(--toolDiffAdded); }
532
- .diff-removed { color: var(--toolDiffRemoved); }
533
- .diff-context { color: var(--toolDiffContext); }
534
-
535
- /* Model change */
536
- .model-change {
537
- padding: 0 var(--line-height);
538
- color: var(--dim);
539
- font-size: 11px;
540
- }
541
-
542
- .model-name {
543
- color: var(--borderAccent);
544
- font-weight: bold;
545
- }
546
-
547
- /* Compaction / Branch Summary - matches customMessage colors from TUI */
548
- .compaction {
549
- background: var(--customMessageBg);
550
- border-radius: 4px;
551
- padding: var(--line-height);
552
- cursor: pointer;
553
- }
554
-
555
- .compaction-label {
556
- color: var(--customMessageLabel);
557
- font-weight: bold;
558
- }
559
-
560
- .compaction-collapsed {
561
- color: var(--customMessageText);
562
- }
563
-
564
- .compaction-content {
565
- display: none;
566
- color: var(--customMessageText);
567
- white-space: pre-wrap;
568
- margin-top: var(--line-height);
569
- }
570
-
571
- .compaction.expanded .compaction-collapsed {
572
- display: none;
573
- }
574
-
575
- .compaction.expanded .compaction-content {
576
- display: block;
577
- }
578
-
579
- /* System prompt */
580
- .system-prompt {
581
- background: var(--customMessageBg);
582
- padding: var(--line-height);
583
- border-radius: 4px;
584
- margin-bottom: var(--line-height);
585
- }
586
-
587
- .system-prompt.expandable {
588
- cursor: pointer;
589
- }
590
-
591
- .system-prompt-header {
592
- font-weight: bold;
593
- color: var(--customMessageLabel);
594
- }
595
-
596
- .system-prompt-preview {
597
- color: var(--customMessageText);
598
- white-space: pre-wrap;
599
- word-wrap: break-word;
600
- font-size: 11px;
601
- margin-top: var(--line-height);
602
- }
603
-
604
- .system-prompt-expand-hint {
605
- color: var(--muted);
606
- font-style: italic;
607
- margin-top: 4px;
608
- }
609
-
610
- .system-prompt-full {
611
- display: none;
612
- color: var(--customMessageText);
613
- white-space: pre-wrap;
614
- word-wrap: break-word;
615
- font-size: 11px;
616
- margin-top: var(--line-height);
617
- }
618
-
619
- .system-prompt.expanded .system-prompt-preview,
620
- .system-prompt.expanded .system-prompt-expand-hint {
621
- display: none;
622
- }
623
-
624
- .system-prompt.expanded .system-prompt-full {
625
- display: block;
626
- }
627
-
628
- .system-prompt.provider-prompt {
629
- border-left: 3px solid var(--warning);
630
- }
631
-
632
- .system-prompt-note {
633
- font-size: 10px;
634
- font-style: italic;
635
- color: var(--muted);
636
- margin-top: 4px;
637
- }
638
-
639
- /* Tools list */
640
- .tools-list {
641
- background: var(--customMessageBg);
642
- padding: var(--line-height);
643
- border-radius: 4px;
644
- margin-bottom: var(--line-height);
645
- }
646
-
647
- .tools-header {
648
- font-weight: bold;
649
- color: var(--customMessageLabel);
650
- margin-bottom: var(--line-height);
651
- }
652
-
653
- .tool-item {
654
- font-size: 11px;
655
- }
656
-
657
- .tool-item-name {
658
- font-weight: bold;
659
- color: var(--text);
660
- }
661
-
662
- .tool-item-desc {
663
- color: var(--dim);
664
- }
665
-
666
- .tool-params-hint {
667
- color: var(--muted);
668
- font-style: italic;
669
- }
670
-
671
- .tool-item:has(.tool-params-hint) {
672
- cursor: pointer;
673
- }
674
-
675
- .tool-params-hint::after {
676
- content: '[click to show parameters]';
677
- }
678
-
679
- .tool-item.params-expanded .tool-params-hint::after {
680
- content: '[hide parameters]';
681
- }
682
-
683
- .tool-params-content {
684
- display: none;
685
- margin-top: 4px;
686
- margin-left: 12px;
687
- padding-left: 8px;
688
- border-left: 1px solid var(--dim);
689
- }
690
-
691
- .tool-item.params-expanded .tool-params-content {
692
- display: block;
693
- }
694
-
695
- .tool-param {
696
- margin-bottom: 4px;
697
- font-size: 11px;
698
- }
699
-
700
- .tool-param-name {
701
- font-weight: bold;
702
- color: var(--text);
703
- }
704
-
705
- .tool-param-type {
706
- color: var(--dim);
707
- font-style: italic;
708
- }
709
-
710
- .tool-param-required {
711
- color: var(--warning, #e8a838);
712
- font-size: 10px;
713
- }
714
-
715
- .tool-param-optional {
716
- color: var(--dim);
717
- font-size: 10px;
718
- }
719
-
720
- .tool-param-desc {
721
- color: var(--dim);
722
- margin-left: 8px;
723
- }
724
-
725
- /* Hook/custom messages */
726
- .hook-message {
727
- background: var(--customMessageBg);
728
- color: var(--customMessageText);
729
- padding: var(--line-height);
730
- border-radius: 4px;
731
- }
732
-
733
- .hook-type {
734
- color: var(--customMessageLabel);
735
- font-weight: bold;
736
- }
737
-
738
- /* Branch summary */
739
- .branch-summary {
740
- background: var(--customMessageBg);
741
- padding: var(--line-height);
742
- border-radius: 4px;
743
- }
744
-
745
- .branch-summary-header {
746
- font-weight: bold;
747
- color: var(--borderAccent);
748
- }
749
-
750
- /* Error */
751
- .error-text {
752
- color: var(--error);
753
- padding: 0 var(--line-height);
754
- }
755
- .tool-error {
756
- color: var(--error);
757
- }
758
-
759
- /* Images */
760
- .message-images {
761
- margin-bottom: 12px;
762
- }
763
-
764
- .message-image {
765
- max-width: 100%;
766
- max-height: 400px;
767
- border-radius: 4px;
768
- margin: var(--line-height) 0;
769
- }
770
-
771
- /* Markdown content */
772
- .markdown-content h1,
773
- .markdown-content h2,
774
- .markdown-content h3,
775
- .markdown-content h4,
776
- .markdown-content h5,
777
- .markdown-content h6 {
778
- color: var(--mdHeading);
779
- margin: var(--line-height) 0 0 0;
780
- font-weight: bold;
781
- }
782
-
783
- .markdown-content h1 { font-size: 1em; }
784
- .markdown-content h2 { font-size: 1em; }
785
- .markdown-content h3 { font-size: 1em; }
786
- .markdown-content h4 { font-size: 1em; }
787
- .markdown-content h5 { font-size: 1em; }
788
- .markdown-content h6 { font-size: 1em; }
789
- .markdown-content p { margin: 0; }
790
- .markdown-content p + p { margin-top: var(--line-height); }
791
-
792
- .markdown-content a {
793
- color: var(--mdLink);
794
- text-decoration: underline;
795
- }
796
-
797
- .markdown-content code {
798
- background: rgba(128, 128, 128, 0.2);
799
- color: var(--mdCode);
800
- padding: 0 4px;
801
- border-radius: 3px;
802
- font-family: inherit;
803
- }
804
-
805
- .markdown-content pre {
806
- background: transparent;
807
- margin: var(--line-height) 0;
808
- overflow-x: auto;
809
- }
810
-
811
- .markdown-content pre code {
812
- display: block;
813
- background: none;
814
- color: var(--text);
815
- }
816
-
817
- .markdown-content blockquote {
818
- border-left: 3px solid var(--mdQuoteBorder);
819
- padding-left: var(--line-height);
820
- margin: var(--line-height) 0;
821
- color: var(--mdQuote);
822
- font-style: italic;
823
- }
824
-
825
- .markdown-content ul,
826
- .markdown-content ol {
827
- margin: var(--line-height) 0;
828
- padding-left: calc(var(--line-height) * 2);
829
- }
830
-
831
- .markdown-content li { margin: 0; }
832
- .markdown-content li::marker { color: var(--mdListBullet); }
833
-
834
- .markdown-content hr {
835
- border: none;
836
- border-top: 1px solid var(--mdHr);
837
- margin: var(--line-height) 0;
838
- }
839
-
840
- .markdown-content table {
841
- border-collapse: collapse;
842
- margin: 0.5em 0;
843
- width: 100%;
844
- }
845
-
846
- .markdown-content th,
847
- .markdown-content td {
848
- border: 1px solid var(--mdCodeBlockBorder);
849
- padding: 6px 10px;
850
- text-align: left;
851
- }
852
-
853
- .markdown-content th {
854
- background: rgba(128, 128, 128, 0.1);
855
- font-weight: bold;
856
- }
857
-
858
- .markdown-content img {
859
- max-width: 100%;
860
- border-radius: 4px;
861
- }
862
-
863
- /* Syntax highlighting */
864
- .hljs { background: transparent; color: var(--text); }
865
- .hljs-comment, .hljs-quote { color: var(--syntaxComment); }
866
- .hljs-keyword, .hljs-selector-tag { color: var(--syntaxKeyword); }
867
- .hljs-number, .hljs-literal { color: var(--syntaxNumber); }
868
- .hljs-string, .hljs-doctag { color: var(--syntaxString); }
869
- /* Function names: hljs v11 uses .hljs-title.function_ compound class */
870
- .hljs-function, .hljs-title, .hljs-title.function_, .hljs-section, .hljs-name { color: var(--syntaxFunction); }
871
- /* Types: hljs v11 uses .hljs-title.class_ for class names */
872
- .hljs-type, .hljs-class, .hljs-title.class_, .hljs-built_in { color: var(--syntaxType); }
873
- .hljs-attr, .hljs-variable, .hljs-variable.language_, .hljs-params, .hljs-property { color: var(--syntaxVariable); }
874
- .hljs-meta, .hljs-meta .hljs-keyword, .hljs-meta .hljs-string { color: var(--syntaxKeyword); }
875
- .hljs-operator { color: var(--syntaxOperator); }
876
- .hljs-punctuation { color: var(--syntaxPunctuation); }
877
- .hljs-subst { color: var(--text); }
878
-
879
- /* Footer */
880
- .footer {
881
- margin-top: 48px;
882
- padding: 20px;
883
- text-align: center;
884
- color: var(--dim);
885
- font-size: 10px;
886
- }
887
-
888
- /* Mobile */
889
- #hamburger {
890
- display: none;
891
- position: fixed;
892
- top: 10px;
893
- left: 10px;
894
- z-index: 100;
895
- padding: 3px 8px;
896
- font-size: 12px;
897
- font-family: inherit;
898
- background: transparent;
899
- color: var(--muted);
900
- border: 1px solid var(--dim);
901
- border-radius: 3px;
902
- cursor: pointer;
903
- }
904
-
905
- #hamburger:hover {
906
- color: var(--text);
907
- border-color: var(--text);
908
- }
909
-
910
-
911
-
912
- #sidebar-overlay {
913
- display: none;
914
- position: fixed;
915
- top: 0;
916
- left: 0;
917
- right: 0;
918
- bottom: 0;
919
- background: rgba(0, 0, 0, 0.5);
920
- z-index: 98;
921
- }
922
-
923
- @media (max-width: 900px) {
924
- #sidebar {
925
- position: fixed;
926
- left: -400px;
927
- width: 400px;
928
- top: 0;
929
- bottom: 0;
930
- height: 100vh;
931
- z-index: 99;
932
- transition: left 0.3s;
933
- }
934
-
935
- #sidebar.open {
936
- left: 0;
937
- }
938
-
939
- #sidebar-overlay.open {
940
- display: block;
941
- }
942
-
943
- #hamburger {
944
- display: block;
945
- }
946
-
947
- .sidebar-close {
948
- display: block;
949
- }
950
-
951
- #content {
952
- padding: var(--line-height) 16px;
953
- }
954
-
955
- #content > * {
956
- max-width: 100%;
957
- }
958
- }
959
-
960
- @media (max-width: 500px) {
961
- #sidebar {
962
- width: 100vw;
963
- left: -100vw;
964
- }
965
- }
966
-
967
- @media print {
968
- #sidebar, #sidebar-toggle { display: none !important; }
969
- body { background: white; color: black; }
970
- #content { max-width: none; }
971
- }
1
+ :root {
2
+ {{THEME_VARS}}
3
+ --body-bg: {{BODY_BG}};
4
+ --container-bg: {{CONTAINER_BG}};
5
+ --info-bg: {{INFO_BG}};
6
+ }
7
+
8
+ * { margin: 0; padding: 0; box-sizing: border-box; }
9
+
10
+ :root {
11
+ --line-height: 18px; /* 12px font * 1.5 */
12
+ }
13
+
14
+ body {
15
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace;
16
+ font-size: 12px;
17
+ line-height: var(--line-height);
18
+ color: var(--text);
19
+ background: var(--body-bg);
20
+ }
21
+
22
+ #app {
23
+ display: flex;
24
+ min-height: 100vh;
25
+ }
26
+
27
+ /* Sidebar */
28
+ #sidebar {
29
+ width: 400px;
30
+ background: var(--container-bg);
31
+ flex-shrink: 0;
32
+ display: flex;
33
+ flex-direction: column;
34
+ position: sticky;
35
+ top: 0;
36
+ height: 100vh;
37
+ border-right: 1px solid var(--dim);
38
+ }
39
+
40
+ .sidebar-header {
41
+ padding: 8px 12px;
42
+ flex-shrink: 0;
43
+ }
44
+
45
+ .sidebar-controls {
46
+ padding: 8px 8px 4px 8px;
47
+ }
48
+
49
+ .sidebar-search {
50
+ width: 100%;
51
+ box-sizing: border-box;
52
+ padding: 4px 8px;
53
+ font-size: 11px;
54
+ font-family: inherit;
55
+ background: var(--body-bg);
56
+ color: var(--text);
57
+ border: 1px solid var(--dim);
58
+ border-radius: 3px;
59
+ }
60
+
61
+ .sidebar-filters {
62
+ display: flex;
63
+ padding: 4px 8px 8px 8px;
64
+ gap: 4px;
65
+ align-items: center;
66
+ flex-wrap: wrap;
67
+ }
68
+
69
+ .sidebar-search:focus {
70
+ outline: none;
71
+ border-color: var(--accent);
72
+ }
73
+
74
+ .sidebar-search::placeholder {
75
+ color: var(--muted);
76
+ }
77
+
78
+ .filter-btn {
79
+ padding: 3px 8px;
80
+ font-size: 10px;
81
+ font-family: inherit;
82
+ background: transparent;
83
+ color: var(--muted);
84
+ border: 1px solid var(--dim);
85
+ border-radius: 3px;
86
+ cursor: pointer;
87
+ }
88
+
89
+ .filter-btn:hover {
90
+ color: var(--text);
91
+ border-color: var(--text);
92
+ }
93
+
94
+ .filter-btn.active {
95
+ background: var(--accent);
96
+ color: var(--body-bg);
97
+ border-color: var(--accent);
98
+ }
99
+
100
+ .sidebar-close {
101
+ display: none;
102
+ padding: 3px 8px;
103
+ font-size: 12px;
104
+ font-family: inherit;
105
+ background: transparent;
106
+ color: var(--muted);
107
+ border: 1px solid var(--dim);
108
+ border-radius: 3px;
109
+ cursor: pointer;
110
+ margin-left: auto;
111
+ }
112
+
113
+ .sidebar-close:hover {
114
+ color: var(--text);
115
+ border-color: var(--text);
116
+ }
117
+
118
+ .tree-container {
119
+ flex: 1;
120
+ overflow: auto;
121
+ padding: 4px 0;
122
+ }
123
+
124
+ .tree-node {
125
+ padding: 0 8px;
126
+ cursor: pointer;
127
+ display: flex;
128
+ align-items: baseline;
129
+ font-size: 11px;
130
+ line-height: 13px;
131
+ white-space: nowrap;
132
+ }
133
+
134
+ .tree-node:hover {
135
+ background: var(--selectedBg);
136
+ }
137
+
138
+ .tree-node.active {
139
+ background: var(--selectedBg);
140
+ }
141
+
142
+ .tree-node.active .tree-content {
143
+ font-weight: bold;
144
+ }
145
+
146
+ .tree-node.in-path {
147
+ background: color-mix(in srgb, var(--accent) 10%, transparent);
148
+ }
149
+
150
+ .tree-node:not(.in-path) {
151
+ opacity: 0.5;
152
+ }
153
+
154
+ .tree-node:not(.in-path):hover {
155
+ opacity: 1;
156
+ }
157
+
158
+ .tree-prefix {
159
+ color: var(--muted);
160
+ flex-shrink: 0;
161
+ font-family: monospace;
162
+ white-space: pre;
163
+ }
164
+
165
+ .tree-marker {
166
+ color: var(--accent);
167
+ flex-shrink: 0;
168
+ }
169
+
170
+ .tree-content {
171
+ color: var(--text);
172
+ }
173
+
174
+ .tree-role-user {
175
+ color: var(--accent);
176
+ }
177
+
178
+ .tree-role-assistant {
179
+ color: var(--success);
180
+ }
181
+
182
+ .tree-role-tool {
183
+ color: var(--muted);
184
+ }
185
+
186
+ .tree-muted {
187
+ color: var(--muted);
188
+ }
189
+
190
+ .tree-error {
191
+ color: var(--error);
192
+ }
193
+
194
+ .tree-compaction {
195
+ color: var(--borderAccent);
196
+ }
197
+
198
+ .tree-branch-summary {
199
+ color: var(--warning);
200
+ }
201
+
202
+ .tree-custom-message {
203
+ color: var(--customMessageLabel);
204
+ }
205
+
206
+ .tree-status {
207
+ padding: 4px 12px;
208
+ font-size: 10px;
209
+ color: var(--muted);
210
+ flex-shrink: 0;
211
+ }
212
+
213
+ /* Main content */
214
+ #content {
215
+ flex: 1;
216
+ overflow-y: auto;
217
+ padding: var(--line-height) calc(var(--line-height) * 2);
218
+ display: flex;
219
+ flex-direction: column;
220
+ align-items: center;
221
+ }
222
+
223
+ #content > * {
224
+ width: 100%;
225
+ max-width: 800px;
226
+ }
227
+
228
+ /* Help bar */
229
+ .help-bar {
230
+ font-size: 11px;
231
+ color: var(--warning);
232
+ margin-bottom: var(--line-height);
233
+ display: flex;
234
+ align-items: center;
235
+ gap: 12px;
236
+ }
237
+
238
+ .download-json-btn {
239
+ font-size: 10px;
240
+ padding: 2px 8px;
241
+ background: var(--container-bg);
242
+ border: 1px solid var(--border);
243
+ border-radius: 3px;
244
+ color: var(--text);
245
+ cursor: pointer;
246
+ font-family: inherit;
247
+ }
248
+
249
+ .download-json-btn:hover {
250
+ background: var(--hover);
251
+ border-color: var(--borderAccent);
252
+ }
253
+
254
+ /* Header */
255
+ .header {
256
+ background: var(--container-bg);
257
+ border-radius: 4px;
258
+ padding: var(--line-height);
259
+ margin-bottom: var(--line-height);
260
+ }
261
+
262
+ .header h1 {
263
+ font-size: 12px;
264
+ font-weight: bold;
265
+ color: var(--borderAccent);
266
+ margin-bottom: var(--line-height);
267
+ }
268
+
269
+ .header-info {
270
+ display: flex;
271
+ flex-direction: column;
272
+ gap: 0;
273
+ font-size: 11px;
274
+ }
275
+
276
+ .info-item {
277
+ color: var(--dim);
278
+ display: flex;
279
+ align-items: baseline;
280
+ }
281
+
282
+ .info-label {
283
+ font-weight: 600;
284
+ margin-right: 8px;
285
+ min-width: 100px;
286
+ }
287
+
288
+ .info-value {
289
+ color: var(--text);
290
+ flex: 1;
291
+ }
292
+
293
+ /* Messages */
294
+ #messages {
295
+ display: flex;
296
+ flex-direction: column;
297
+ gap: var(--line-height);
298
+ }
299
+
300
+ .message-timestamp {
301
+ font-size: 10px;
302
+ color: var(--dim);
303
+ opacity: 0.8;
304
+ }
305
+
306
+ .user-message {
307
+ background: var(--userMessageBg);
308
+ color: var(--userMessageText);
309
+ padding: var(--line-height);
310
+ border-radius: 4px;
311
+ position: relative;
312
+ }
313
+
314
+ .assistant-message {
315
+ padding: 0;
316
+ position: relative;
317
+ }
318
+
319
+ /* Copy link button - appears on hover */
320
+ .copy-link-btn {
321
+ position: absolute;
322
+ top: 8px;
323
+ right: 8px;
324
+ width: 28px;
325
+ height: 28px;
326
+ padding: 6px;
327
+ background: var(--container-bg);
328
+ border: 1px solid var(--dim);
329
+ border-radius: 4px;
330
+ color: var(--muted);
331
+ cursor: pointer;
332
+ opacity: 0;
333
+ transition: opacity 0.15s, background 0.15s, color 0.15s;
334
+ display: flex;
335
+ align-items: center;
336
+ justify-content: center;
337
+ z-index: 10;
338
+ }
339
+
340
+ .user-message:hover .copy-link-btn,
341
+ .assistant-message:hover .copy-link-btn {
342
+ opacity: 1;
343
+ }
344
+
345
+ .copy-link-btn:hover {
346
+ background: var(--accent);
347
+ color: var(--body-bg);
348
+ border-color: var(--accent);
349
+ }
350
+
351
+ .copy-link-btn.copied {
352
+ background: var(--success, #22c55e);
353
+ color: white;
354
+ border-color: var(--success, #22c55e);
355
+ }
356
+
357
+ /* Highlight effect for deep-linked messages */
358
+ .user-message.highlight,
359
+ .assistant-message.highlight {
360
+ animation: highlight-pulse 2s ease-out;
361
+ }
362
+
363
+ @keyframes highlight-pulse {
364
+ 0% {
365
+ box-shadow: 0 0 0 3px var(--accent);
366
+ }
367
+ 100% {
368
+ box-shadow: 0 0 0 0 transparent;
369
+ }
370
+ }
371
+
372
+ .assistant-message > .message-timestamp {
373
+ padding-left: var(--line-height);
374
+ }
375
+
376
+ .assistant-text {
377
+ padding: var(--line-height);
378
+ padding-bottom: 0;
379
+ }
380
+
381
+ .message-timestamp + .assistant-text,
382
+ .message-timestamp + .thinking-block {
383
+ padding-top: 0;
384
+ }
385
+
386
+ .thinking-block + .assistant-text {
387
+ padding-top: 0;
388
+ }
389
+
390
+ .thinking-text {
391
+ padding: var(--line-height);
392
+ color: var(--thinkingText);
393
+ font-style: italic;
394
+ white-space: pre-wrap;
395
+ }
396
+
397
+ .message-timestamp + .thinking-block .thinking-text,
398
+ .message-timestamp + .thinking-block .thinking-collapsed {
399
+ padding-top: 0;
400
+ }
401
+
402
+ .thinking-collapsed {
403
+ display: none;
404
+ padding: var(--line-height);
405
+ color: var(--thinkingText);
406
+ font-style: italic;
407
+ }
408
+
409
+ /* Tool execution */
410
+ .tool-execution {
411
+ padding: var(--line-height);
412
+ border-radius: 4px;
413
+ }
414
+
415
+ .tool-execution + .tool-execution {
416
+ margin-top: var(--line-height);
417
+ }
418
+
419
+ .assistant-text + .tool-execution {
420
+ margin-top: var(--line-height);
421
+ }
422
+
423
+ .tool-execution.pending { background: var(--toolPendingBg); }
424
+ .tool-execution.success { background: var(--toolSuccessBg); }
425
+ .tool-execution.error { background: var(--toolErrorBg); }
426
+
427
+ .tool-header, .tool-name {
428
+ font-weight: bold;
429
+ }
430
+
431
+ .tool-path {
432
+ color: var(--accent);
433
+ word-break: break-all;
434
+ }
435
+
436
+ .line-numbers {
437
+ color: var(--warning);
438
+ }
439
+
440
+ .line-count {
441
+ color: var(--dim);
442
+ }
443
+
444
+ .tool-command {
445
+ font-weight: bold;
446
+ white-space: pre-wrap;
447
+ word-wrap: break-word;
448
+ overflow-wrap: break-word;
449
+ word-break: break-word;
450
+ }
451
+
452
+ .tool-output {
453
+ margin-top: var(--line-height);
454
+ color: var(--toolOutput);
455
+ word-wrap: break-word;
456
+ overflow-wrap: break-word;
457
+ word-break: break-word;
458
+ font-family: inherit;
459
+ overflow-x: auto;
460
+ }
461
+
462
+ .tool-output > div,
463
+ .output-preview,
464
+ .output-full {
465
+ margin: 0;
466
+ padding: 0;
467
+ line-height: var(--line-height);
468
+ }
469
+
470
+ .tool-output pre {
471
+ margin: 0;
472
+ padding: 0;
473
+ font-family: inherit;
474
+ color: inherit;
475
+ white-space: pre-wrap;
476
+ word-wrap: break-word;
477
+ overflow-wrap: break-word;
478
+ }
479
+
480
+ .tool-output code {
481
+ padding: 0;
482
+ background: none;
483
+ color: var(--text);
484
+ }
485
+
486
+ .tool-output.expandable {
487
+ cursor: pointer;
488
+ }
489
+
490
+ .tool-output.expandable:hover {
491
+ opacity: 0.9;
492
+ }
493
+
494
+ .tool-output.expandable .output-full {
495
+ display: none;
496
+ }
497
+
498
+ .tool-output.expandable.expanded .output-preview {
499
+ display: none;
500
+ }
501
+
502
+ .tool-output.expandable.expanded .output-full {
503
+ display: block;
504
+ }
505
+
506
+ .ansi-line {
507
+ white-space: pre-wrap;
508
+ }
509
+
510
+ .tool-images {
511
+ }
512
+
513
+ .tool-image {
514
+ max-width: 100%;
515
+ max-height: 500px;
516
+ border-radius: 4px;
517
+ margin: var(--line-height) 0;
518
+ }
519
+
520
+ .expand-hint {
521
+ color: var(--toolOutput);
522
+ }
523
+
524
+ /* Diff */
525
+ .tool-diff {
526
+ font-size: 11px;
527
+ overflow-x: auto;
528
+ white-space: pre;
529
+ }
530
+
531
+ .diff-added { color: var(--toolDiffAdded); }
532
+ .diff-removed { color: var(--toolDiffRemoved); }
533
+ .diff-context { color: var(--toolDiffContext); }
534
+
535
+ /* Model change */
536
+ .model-change {
537
+ padding: 0 var(--line-height);
538
+ color: var(--dim);
539
+ font-size: 11px;
540
+ }
541
+
542
+ .model-name {
543
+ color: var(--borderAccent);
544
+ font-weight: bold;
545
+ }
546
+
547
+ /* Compaction / Branch Summary - matches customMessage colors from TUI */
548
+ .compaction {
549
+ background: var(--customMessageBg);
550
+ border-radius: 4px;
551
+ padding: var(--line-height);
552
+ cursor: pointer;
553
+ }
554
+
555
+ .compaction-label {
556
+ color: var(--customMessageLabel);
557
+ font-weight: bold;
558
+ }
559
+
560
+ .compaction-collapsed {
561
+ color: var(--customMessageText);
562
+ }
563
+
564
+ .compaction-content {
565
+ display: none;
566
+ color: var(--customMessageText);
567
+ white-space: pre-wrap;
568
+ margin-top: var(--line-height);
569
+ }
570
+
571
+ .compaction.expanded .compaction-collapsed {
572
+ display: none;
573
+ }
574
+
575
+ .compaction.expanded .compaction-content {
576
+ display: block;
577
+ }
578
+
579
+ /* System prompt */
580
+ .system-prompt {
581
+ background: var(--customMessageBg);
582
+ padding: var(--line-height);
583
+ border-radius: 4px;
584
+ margin-bottom: var(--line-height);
585
+ }
586
+
587
+ .system-prompt.expandable {
588
+ cursor: pointer;
589
+ }
590
+
591
+ .system-prompt-header {
592
+ font-weight: bold;
593
+ color: var(--customMessageLabel);
594
+ }
595
+
596
+ .system-prompt-preview {
597
+ color: var(--customMessageText);
598
+ white-space: pre-wrap;
599
+ word-wrap: break-word;
600
+ font-size: 11px;
601
+ margin-top: var(--line-height);
602
+ }
603
+
604
+ .system-prompt-expand-hint {
605
+ color: var(--muted);
606
+ font-style: italic;
607
+ margin-top: 4px;
608
+ }
609
+
610
+ .system-prompt-full {
611
+ display: none;
612
+ color: var(--customMessageText);
613
+ white-space: pre-wrap;
614
+ word-wrap: break-word;
615
+ font-size: 11px;
616
+ margin-top: var(--line-height);
617
+ }
618
+
619
+ .system-prompt.expanded .system-prompt-preview,
620
+ .system-prompt.expanded .system-prompt-expand-hint {
621
+ display: none;
622
+ }
623
+
624
+ .system-prompt.expanded .system-prompt-full {
625
+ display: block;
626
+ }
627
+
628
+ .system-prompt.provider-prompt {
629
+ border-left: 3px solid var(--warning);
630
+ }
631
+
632
+ .system-prompt-note {
633
+ font-size: 10px;
634
+ font-style: italic;
635
+ color: var(--muted);
636
+ margin-top: 4px;
637
+ }
638
+
639
+ /* Tools list */
640
+ .tools-list {
641
+ background: var(--customMessageBg);
642
+ padding: var(--line-height);
643
+ border-radius: 4px;
644
+ margin-bottom: var(--line-height);
645
+ }
646
+
647
+ .tools-header {
648
+ font-weight: bold;
649
+ color: var(--customMessageLabel);
650
+ margin-bottom: var(--line-height);
651
+ }
652
+
653
+ .tool-item {
654
+ font-size: 11px;
655
+ }
656
+
657
+ .tool-item-name {
658
+ font-weight: bold;
659
+ color: var(--text);
660
+ }
661
+
662
+ .tool-item-desc {
663
+ color: var(--dim);
664
+ }
665
+
666
+ .tool-params-hint {
667
+ color: var(--muted);
668
+ font-style: italic;
669
+ }
670
+
671
+ .tool-item:has(.tool-params-hint) {
672
+ cursor: pointer;
673
+ }
674
+
675
+ .tool-params-hint::after {
676
+ content: '[click to show parameters]';
677
+ }
678
+
679
+ .tool-item.params-expanded .tool-params-hint::after {
680
+ content: '[hide parameters]';
681
+ }
682
+
683
+ .tool-params-content {
684
+ display: none;
685
+ margin-top: 4px;
686
+ margin-left: 12px;
687
+ padding-left: 8px;
688
+ border-left: 1px solid var(--dim);
689
+ }
690
+
691
+ .tool-item.params-expanded .tool-params-content {
692
+ display: block;
693
+ }
694
+
695
+ .tool-param {
696
+ margin-bottom: 4px;
697
+ font-size: 11px;
698
+ }
699
+
700
+ .tool-param-name {
701
+ font-weight: bold;
702
+ color: var(--text);
703
+ }
704
+
705
+ .tool-param-type {
706
+ color: var(--dim);
707
+ font-style: italic;
708
+ }
709
+
710
+ .tool-param-required {
711
+ color: var(--warning, #e8a838);
712
+ font-size: 10px;
713
+ }
714
+
715
+ .tool-param-optional {
716
+ color: var(--dim);
717
+ font-size: 10px;
718
+ }
719
+
720
+ .tool-param-desc {
721
+ color: var(--dim);
722
+ margin-left: 8px;
723
+ }
724
+
725
+ /* Hook/custom messages */
726
+ .hook-message {
727
+ background: var(--customMessageBg);
728
+ color: var(--customMessageText);
729
+ padding: var(--line-height);
730
+ border-radius: 4px;
731
+ }
732
+
733
+ .hook-type {
734
+ color: var(--customMessageLabel);
735
+ font-weight: bold;
736
+ }
737
+
738
+ /* Branch summary */
739
+ .branch-summary {
740
+ background: var(--customMessageBg);
741
+ padding: var(--line-height);
742
+ border-radius: 4px;
743
+ }
744
+
745
+ .branch-summary-header {
746
+ font-weight: bold;
747
+ color: var(--borderAccent);
748
+ }
749
+
750
+ /* Error */
751
+ .error-text {
752
+ color: var(--error);
753
+ padding: 0 var(--line-height);
754
+ }
755
+ .tool-error {
756
+ color: var(--error);
757
+ }
758
+
759
+ /* Images */
760
+ .message-images {
761
+ margin-bottom: 12px;
762
+ }
763
+
764
+ .message-image {
765
+ max-width: 100%;
766
+ max-height: 400px;
767
+ border-radius: 4px;
768
+ margin: var(--line-height) 0;
769
+ }
770
+
771
+ /* Markdown content */
772
+ .markdown-content h1,
773
+ .markdown-content h2,
774
+ .markdown-content h3,
775
+ .markdown-content h4,
776
+ .markdown-content h5,
777
+ .markdown-content h6 {
778
+ color: var(--mdHeading);
779
+ margin: var(--line-height) 0 0 0;
780
+ font-weight: bold;
781
+ }
782
+
783
+ .markdown-content h1 { font-size: 1em; }
784
+ .markdown-content h2 { font-size: 1em; }
785
+ .markdown-content h3 { font-size: 1em; }
786
+ .markdown-content h4 { font-size: 1em; }
787
+ .markdown-content h5 { font-size: 1em; }
788
+ .markdown-content h6 { font-size: 1em; }
789
+ .markdown-content p { margin: 0; }
790
+ .markdown-content p + p { margin-top: var(--line-height); }
791
+
792
+ .markdown-content a {
793
+ color: var(--mdLink);
794
+ text-decoration: underline;
795
+ }
796
+
797
+ .markdown-content code {
798
+ background: rgba(128, 128, 128, 0.2);
799
+ color: var(--mdCode);
800
+ padding: 0 4px;
801
+ border-radius: 3px;
802
+ font-family: inherit;
803
+ }
804
+
805
+ .markdown-content pre {
806
+ background: transparent;
807
+ margin: var(--line-height) 0;
808
+ overflow-x: auto;
809
+ }
810
+
811
+ .markdown-content pre code {
812
+ display: block;
813
+ background: none;
814
+ color: var(--text);
815
+ }
816
+
817
+ .markdown-content blockquote {
818
+ border-left: 3px solid var(--mdQuoteBorder);
819
+ padding-left: var(--line-height);
820
+ margin: var(--line-height) 0;
821
+ color: var(--mdQuote);
822
+ font-style: italic;
823
+ }
824
+
825
+ .markdown-content ul,
826
+ .markdown-content ol {
827
+ margin: var(--line-height) 0;
828
+ padding-left: calc(var(--line-height) * 2);
829
+ }
830
+
831
+ .markdown-content li { margin: 0; }
832
+ .markdown-content li::marker { color: var(--mdListBullet); }
833
+
834
+ .markdown-content hr {
835
+ border: none;
836
+ border-top: 1px solid var(--mdHr);
837
+ margin: var(--line-height) 0;
838
+ }
839
+
840
+ .markdown-content table {
841
+ border-collapse: collapse;
842
+ margin: 0.5em 0;
843
+ width: 100%;
844
+ }
845
+
846
+ .markdown-content th,
847
+ .markdown-content td {
848
+ border: 1px solid var(--mdCodeBlockBorder);
849
+ padding: 6px 10px;
850
+ text-align: left;
851
+ }
852
+
853
+ .markdown-content th {
854
+ background: rgba(128, 128, 128, 0.1);
855
+ font-weight: bold;
856
+ }
857
+
858
+ .markdown-content img {
859
+ max-width: 100%;
860
+ border-radius: 4px;
861
+ }
862
+
863
+ /* Syntax highlighting */
864
+ .hljs { background: transparent; color: var(--text); }
865
+ .hljs-comment, .hljs-quote { color: var(--syntaxComment); }
866
+ .hljs-keyword, .hljs-selector-tag { color: var(--syntaxKeyword); }
867
+ .hljs-number, .hljs-literal { color: var(--syntaxNumber); }
868
+ .hljs-string, .hljs-doctag { color: var(--syntaxString); }
869
+ /* Function names: hljs v11 uses .hljs-title.function_ compound class */
870
+ .hljs-function, .hljs-title, .hljs-title.function_, .hljs-section, .hljs-name { color: var(--syntaxFunction); }
871
+ /* Types: hljs v11 uses .hljs-title.class_ for class names */
872
+ .hljs-type, .hljs-class, .hljs-title.class_, .hljs-built_in { color: var(--syntaxType); }
873
+ .hljs-attr, .hljs-variable, .hljs-variable.language_, .hljs-params, .hljs-property { color: var(--syntaxVariable); }
874
+ .hljs-meta, .hljs-meta .hljs-keyword, .hljs-meta .hljs-string { color: var(--syntaxKeyword); }
875
+ .hljs-operator { color: var(--syntaxOperator); }
876
+ .hljs-punctuation { color: var(--syntaxPunctuation); }
877
+ .hljs-subst { color: var(--text); }
878
+
879
+ /* Footer */
880
+ .footer {
881
+ margin-top: 48px;
882
+ padding: 20px;
883
+ text-align: center;
884
+ color: var(--dim);
885
+ font-size: 10px;
886
+ }
887
+
888
+ /* Mobile */
889
+ #hamburger {
890
+ display: none;
891
+ position: fixed;
892
+ top: 10px;
893
+ left: 10px;
894
+ z-index: 100;
895
+ padding: 3px 8px;
896
+ font-size: 12px;
897
+ font-family: inherit;
898
+ background: transparent;
899
+ color: var(--muted);
900
+ border: 1px solid var(--dim);
901
+ border-radius: 3px;
902
+ cursor: pointer;
903
+ }
904
+
905
+ #hamburger:hover {
906
+ color: var(--text);
907
+ border-color: var(--text);
908
+ }
909
+
910
+
911
+
912
+ #sidebar-overlay {
913
+ display: none;
914
+ position: fixed;
915
+ top: 0;
916
+ left: 0;
917
+ right: 0;
918
+ bottom: 0;
919
+ background: rgba(0, 0, 0, 0.5);
920
+ z-index: 98;
921
+ }
922
+
923
+ @media (max-width: 900px) {
924
+ #sidebar {
925
+ position: fixed;
926
+ left: -400px;
927
+ width: 400px;
928
+ top: 0;
929
+ bottom: 0;
930
+ height: 100vh;
931
+ z-index: 99;
932
+ transition: left 0.3s;
933
+ }
934
+
935
+ #sidebar.open {
936
+ left: 0;
937
+ }
938
+
939
+ #sidebar-overlay.open {
940
+ display: block;
941
+ }
942
+
943
+ #hamburger {
944
+ display: block;
945
+ }
946
+
947
+ .sidebar-close {
948
+ display: block;
949
+ }
950
+
951
+ #content {
952
+ padding: var(--line-height) 16px;
953
+ }
954
+
955
+ #content > * {
956
+ max-width: 100%;
957
+ }
958
+ }
959
+
960
+ @media (max-width: 500px) {
961
+ #sidebar {
962
+ width: 100vw;
963
+ left: -100vw;
964
+ }
965
+ }
966
+
967
+ @media print {
968
+ #sidebar, #sidebar-toggle { display: none !important; }
969
+ body { background: white; color: black; }
970
+ #content { max-width: none; }
971
+ }