@zihanw/pi-forge 0.5.4 → 0.5.6

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 (237) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +67 -103
  3. package/README.zh-CN.md +67 -95
  4. package/assets/pi-forge-header-concept-1.png +0 -0
  5. package/assets/readme/PROVENANCE.md +95 -0
  6. package/assets/readme/en/capability-tools.gif +0 -0
  7. package/assets/readme/en/context-composition.gif +0 -0
  8. package/assets/readme/en/context-toggle.gif +0 -0
  9. package/assets/readme/en/draft-diff.png +0 -0
  10. package/assets/readme/en/edit-draft-diff.gif +0 -0
  11. package/assets/readme/en/editor-overview-v3.png +0 -0
  12. package/assets/readme/en/editor-overview.png +0 -0
  13. package/assets/readme/en/mode-tools.gif +0 -0
  14. package/assets/readme/en/regex-transforms.gif +0 -0
  15. package/assets/readme/en/tool-selection.gif +0 -0
  16. package/assets/readme/tui-quickstart.gif +0 -0
  17. package/assets/readme/zh-CN/capability-tools.gif +0 -0
  18. package/assets/readme/zh-CN/context-composition.gif +0 -0
  19. package/assets/readme/zh-CN/context-toggle.gif +0 -0
  20. package/assets/readme/zh-CN/draft-diff.png +0 -0
  21. package/assets/readme/zh-CN/edit-draft-diff.gif +0 -0
  22. package/assets/readme/zh-CN/editor-overview-v3.png +0 -0
  23. package/assets/readme/zh-CN/editor-overview.png +0 -0
  24. package/assets/readme/zh-CN/mode-tools.gif +0 -0
  25. package/assets/readme/zh-CN/regex-transforms.gif +0 -0
  26. package/assets/readme/zh-CN/tool-selection.gif +0 -0
  27. package/dist/active-state.d.ts +148 -0
  28. package/dist/active-state.d.ts.map +1 -0
  29. package/dist/active-state.js +374 -0
  30. package/dist/active-state.js.map +1 -0
  31. package/dist/agent-profile.d.ts +1 -0
  32. package/dist/agent-profile.d.ts.map +1 -1
  33. package/dist/agent-profile.js +20 -14
  34. package/dist/agent-profile.js.map +1 -1
  35. package/dist/capabilities.d.ts +39 -0
  36. package/dist/capabilities.d.ts.map +1 -0
  37. package/dist/capabilities.js +160 -0
  38. package/dist/capabilities.js.map +1 -0
  39. package/dist/capability-anchors.d.ts +45 -0
  40. package/dist/capability-anchors.d.ts.map +1 -0
  41. package/dist/capability-anchors.js +263 -0
  42. package/dist/capability-anchors.js.map +1 -0
  43. package/dist/capability-command.d.ts +4 -0
  44. package/dist/capability-command.d.ts.map +1 -0
  45. package/dist/capability-command.js +164 -0
  46. package/dist/capability-command.js.map +1 -0
  47. package/dist/capability-events.d.ts +79 -0
  48. package/dist/capability-events.d.ts.map +1 -0
  49. package/dist/capability-events.js +478 -0
  50. package/dist/capability-events.js.map +1 -0
  51. package/dist/capability-projection.d.ts +22 -0
  52. package/dist/capability-projection.d.ts.map +1 -0
  53. package/dist/capability-projection.js +273 -0
  54. package/dist/capability-projection.js.map +1 -0
  55. package/dist/capability-protocol.d.ts +21 -0
  56. package/dist/capability-protocol.d.ts.map +1 -0
  57. package/dist/capability-protocol.js +15 -0
  58. package/dist/capability-protocol.js.map +1 -0
  59. package/dist/capability-state.d.ts +74 -0
  60. package/dist/capability-state.d.ts.map +1 -0
  61. package/dist/capability-state.js +43 -0
  62. package/dist/capability-state.js.map +1 -0
  63. package/dist/capability-tool.d.ts +11 -0
  64. package/dist/capability-tool.d.ts.map +1 -0
  65. package/dist/capability-tool.js +25 -0
  66. package/dist/capability-tool.js.map +1 -0
  67. package/dist/capability-web-host.d.ts +11 -0
  68. package/dist/capability-web-host.d.ts.map +1 -0
  69. package/dist/capability-web-host.js +105 -0
  70. package/dist/capability-web-host.js.map +1 -0
  71. package/dist/codecs/capability.d.ts +71 -0
  72. package/dist/codecs/capability.d.ts.map +1 -0
  73. package/dist/codecs/capability.js +363 -0
  74. package/dist/codecs/capability.js.map +1 -0
  75. package/dist/codecs/prompt-stack.d.ts +1 -1
  76. package/dist/codecs/prompt-stack.d.ts.map +1 -1
  77. package/dist/codecs/prompt-stack.js +140 -13
  78. package/dist/codecs/prompt-stack.js.map +1 -1
  79. package/dist/command-contribution/index.d.ts +21 -0
  80. package/dist/command-contribution/index.d.ts.map +1 -0
  81. package/dist/command-contribution/index.js +14 -0
  82. package/dist/command-contribution/index.js.map +1 -0
  83. package/dist/compile-cycle.d.ts +1 -0
  84. package/dist/compile-cycle.d.ts.map +1 -1
  85. package/dist/compile-cycle.js.map +1 -1
  86. package/dist/compiler.d.ts.map +1 -1
  87. package/dist/compiler.js +81 -17
  88. package/dist/compiler.js.map +1 -1
  89. package/dist/forge-command.d.ts +10 -0
  90. package/dist/forge-command.d.ts.map +1 -0
  91. package/dist/forge-command.js +106 -0
  92. package/dist/forge-command.js.map +1 -0
  93. package/dist/index.d.ts +2 -2
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +58 -5
  96. package/dist/index.js.map +1 -1
  97. package/dist/json-fingerprint.d.ts +11 -0
  98. package/dist/json-fingerprint.d.ts.map +1 -0
  99. package/dist/json-fingerprint.js +66 -0
  100. package/dist/json-fingerprint.js.map +1 -0
  101. package/dist/lifecycle.d.ts +14 -0
  102. package/dist/lifecycle.d.ts.map +1 -1
  103. package/dist/lifecycle.js +167 -67
  104. package/dist/lifecycle.js.map +1 -1
  105. package/dist/payload-command.d.ts +2 -2
  106. package/dist/payload-command.d.ts.map +1 -1
  107. package/dist/payload-command.js +80 -26
  108. package/dist/payload-command.js.map +1 -1
  109. package/dist/payload-state.d.ts +1 -0
  110. package/dist/payload-state.d.ts.map +1 -1
  111. package/dist/payload-state.js +1 -0
  112. package/dist/payload-state.js.map +1 -1
  113. package/dist/policy.d.ts +2 -1
  114. package/dist/policy.d.ts.map +1 -1
  115. package/dist/policy.js +3 -0
  116. package/dist/policy.js.map +1 -1
  117. package/dist/preset-command.d.ts +1 -0
  118. package/dist/preset-command.d.ts.map +1 -1
  119. package/dist/preset-command.js +94 -36
  120. package/dist/preset-command.js.map +1 -1
  121. package/dist/preview-text.d.ts +5 -0
  122. package/dist/preview-text.d.ts.map +1 -0
  123. package/dist/preview-text.js +27 -0
  124. package/dist/preview-text.js.map +1 -0
  125. package/dist/preview.d.ts +18 -1
  126. package/dist/preview.d.ts.map +1 -1
  127. package/dist/preview.js +132 -97
  128. package/dist/preview.js.map +1 -1
  129. package/dist/profile-command.js +68 -9
  130. package/dist/profile-command.js.map +1 -1
  131. package/dist/regex.d.ts.map +1 -1
  132. package/dist/regex.js +5 -0
  133. package/dist/regex.js.map +1 -1
  134. package/dist/render-helpers.d.ts.map +1 -1
  135. package/dist/render-helpers.js +2 -0
  136. package/dist/render-helpers.js.map +1 -1
  137. package/dist/repositories/capability.d.ts +53 -0
  138. package/dist/repositories/capability.d.ts.map +1 -0
  139. package/dist/repositories/capability.js +294 -0
  140. package/dist/repositories/capability.js.map +1 -0
  141. package/dist/runtime/capability-runtime.d.ts +93 -0
  142. package/dist/runtime/capability-runtime.d.ts.map +1 -0
  143. package/dist/runtime/capability-runtime.js +987 -0
  144. package/dist/runtime/capability-runtime.js.map +1 -0
  145. package/dist/runtime/profile-runtime.d.ts.map +1 -1
  146. package/dist/runtime/profile-runtime.js +10 -9
  147. package/dist/runtime/profile-runtime.js.map +1 -1
  148. package/dist/runtime/prompt-stack-runtime.d.ts +7 -4
  149. package/dist/runtime/prompt-stack-runtime.d.ts.map +1 -1
  150. package/dist/runtime/prompt-stack-runtime.js +47 -11
  151. package/dist/runtime/prompt-stack-runtime.js.map +1 -1
  152. package/dist/runtime/tool-policy-runtime.d.ts +10 -0
  153. package/dist/runtime/tool-policy-runtime.d.ts.map +1 -1
  154. package/dist/runtime/tool-policy-runtime.js +171 -30
  155. package/dist/runtime/tool-policy-runtime.js.map +1 -1
  156. package/dist/session-adapter.d.ts +13 -0
  157. package/dist/session-adapter.d.ts.map +1 -1
  158. package/dist/session-adapter.js +110 -0
  159. package/dist/session-adapter.js.map +1 -1
  160. package/dist/session-usage.d.ts +65 -0
  161. package/dist/session-usage.d.ts.map +1 -0
  162. package/dist/session-usage.js +134 -0
  163. package/dist/session-usage.js.map +1 -0
  164. package/dist/subagent/fingerprints.d.ts +3 -15
  165. package/dist/subagent/fingerprints.d.ts.map +1 -1
  166. package/dist/subagent/fingerprints.js +5 -69
  167. package/dist/subagent/fingerprints.js.map +1 -1
  168. package/dist/subagent/index.d.ts +2 -0
  169. package/dist/subagent/index.d.ts.map +1 -1
  170. package/dist/subagent/index.js +2 -0
  171. package/dist/subagent/index.js.map +1 -1
  172. package/dist/subagent-host.d.ts +2 -2
  173. package/dist/subagent-host.d.ts.map +1 -1
  174. package/dist/subagent-host.js +13 -1
  175. package/dist/subagent-host.js.map +1 -1
  176. package/dist/types.d.ts +6 -1
  177. package/dist/types.d.ts.map +1 -1
  178. package/dist/types.js.map +1 -1
  179. package/dist/web-editor/client-script.generated.d.ts.map +1 -1
  180. package/dist/web-editor/client-script.generated.js +1 -1
  181. package/dist/web-editor/client-script.generated.js.map +1 -1
  182. package/dist/web-editor/client-styles.generated.d.ts.map +1 -1
  183. package/dist/web-editor/client-styles.generated.js +1 -1
  184. package/dist/web-editor/client-styles.generated.js.map +1 -1
  185. package/dist/web-editor/server.d.ts.map +1 -1
  186. package/dist/web-editor/server.js +152 -4
  187. package/dist/web-editor/server.js.map +1 -1
  188. package/dist/web-editor/styles.d.ts.map +1 -1
  189. package/dist/web-editor/styles.js +573 -165
  190. package/dist/web-editor/styles.js.map +1 -1
  191. package/dist/web-editor/types.d.ts +81 -1
  192. package/dist/web-editor/types.d.ts.map +1 -1
  193. package/dist/web-host.d.ts +9 -0
  194. package/dist/web-host.d.ts.map +1 -1
  195. package/dist/web-host.js +210 -11
  196. package/dist/web-host.js.map +1 -1
  197. package/dist/workspace.d.ts +11 -0
  198. package/dist/workspace.d.ts.map +1 -1
  199. package/dist/workspace.js +63 -5
  200. package/dist/workspace.js.map +1 -1
  201. package/docs/README.md +4 -0
  202. package/docs/design/README.md +3 -1
  203. package/docs/design/architecture-0.5.md +22 -0
  204. package/docs/design/archive/2026-09-12-system-update-design.md +229 -0
  205. package/docs/design/pi-forge-system-update-design-notes.md +157 -229
  206. package/docs/development/release.md +20 -20
  207. package/docs/development/roadmap.md +21 -2
  208. package/docs/development/scoped-global-profiles-stacks.md +1 -1
  209. package/docs/development/setup.md +1 -1
  210. package/docs/getting-started.md +1 -1
  211. package/docs/guides/delegation.md +22 -20
  212. package/docs/guides/migrating-to-0.5.md +29 -0
  213. package/docs/guides/use-cases.md +6 -2
  214. package/docs/guides/web-editor.md +74 -5
  215. package/docs/reference/active-state.md +77 -0
  216. package/docs/reference/capabilities.md +259 -0
  217. package/docs/reference/commands.md +52 -24
  218. package/docs/reference/configuration.md +4 -2
  219. package/docs/reference/features.md +70 -4
  220. package/docs/reference/provider-support.md +67 -0
  221. package/docs/reference/public-api.md +49 -3
  222. package/docs/reference/session-cache.md +112 -0
  223. package/docs/reference/stack-schema.md +18 -4
  224. package/docs/reference/subagent-host-port.md +8 -0
  225. package/docs/zh-CN/README.md +3 -0
  226. package/docs/zh-CN/getting-started.md +1 -1
  227. package/docs/zh-CN/guides/delegation.md +22 -10
  228. package/docs/zh-CN/guides/migrating-to-0.5.md +29 -0
  229. package/docs/zh-CN/guides/web-editor.md +75 -7
  230. package/docs/zh-CN/reference/capabilities.md +259 -0
  231. package/docs/zh-CN/reference/commands.md +61 -33
  232. package/docs/zh-CN/reference/provider-support.md +67 -0
  233. package/docs/zh-CN/reference/session-cache.md +112 -0
  234. package/examples/capabilities/review.json +12 -0
  235. package/examples/capabilities/write-tools.json +15 -0
  236. package/examples/read-first-worker-prompt-stack.json +49 -0
  237. package/package.json +16 -9
@@ -1,23 +1,27 @@
1
1
  export const EDITOR_STYLES = String.raw `
2
2
  :root {
3
3
  color-scheme: light;
4
- --bg: #f7f8fb;
4
+ --bg: #f5f8f7;
5
5
  --pane: #ffffff;
6
- --line: #d8dee8;
7
- --line-strong: #aeb8c7;
8
- --text: #18202c;
9
- --muted: #647083;
10
- --accent: #146b5f;
11
- --accent-bg: #e5f3ef;
12
- --warning: #9b6200;
13
- --warning-bg: #fff4d8;
6
+ --line: #d7e3de;
7
+ --line-strong: #a9bdb5;
8
+ --text: #20312f;
9
+ --muted: #657774;
10
+ --accent: #176c5b;
11
+ --accent-bg: #e9f4f0;
12
+ --warning: #8b5d10;
13
+ --warning-bg: #fff4dc;
14
14
  --error: #b42318;
15
15
  --error-bg: #fde8e7;
16
- --success: #1f7a3a;
16
+ --success: #20764b;
17
17
  --role-system: #7564a8;
18
18
  --role-user: #2f7d68;
19
19
  --role-assistant: #3e76ad;
20
20
  --role-tool-result: #b16b2e;
21
+ --item-off-bg: #eef0ef;
22
+ --item-off-text: #6b7570;
23
+ --item-off-line: #bac3be;
24
+ --item-off-selected: #87978e;
21
25
  --item-block: #4f6f9f;
22
26
  --item-slot: #8b5fa8;
23
27
  --slot-chat-history: #2f8a78;
@@ -39,14 +43,14 @@ export const EDITOR_STYLES = String.raw `
39
43
  }
40
44
  body[data-theme="dark"] {
41
45
  color-scheme: dark;
42
- --bg: #111315;
43
- --pane: #181a1d;
44
- --line: #32363b;
45
- --line-strong: #525a63;
46
- --text: #edf0f2;
47
- --muted: #a0a8b2;
48
- --accent: #2aa889;
49
- --accent-bg: #15362f;
46
+ --bg: #111716;
47
+ --pane: #19211f;
48
+ --line: #33413d;
49
+ --line-strong: #536761;
50
+ --text: #e7efeb;
51
+ --muted: #a4b3ad;
52
+ --accent: #3dbb99;
53
+ --accent-bg: #173b33;
50
54
  --warning: #e4b75f;
51
55
  --warning-bg: #3a2d13;
52
56
  --error: #f06f64;
@@ -56,6 +60,10 @@ body[data-theme="dark"] {
56
60
  --role-user: #65c6a9;
57
61
  --role-assistant: #82b9ef;
58
62
  --role-tool-result: #e5ad70;
63
+ --item-off-bg: #131917;
64
+ --item-off-text: #7d8b83;
65
+ --item-off-line: #3b4942;
66
+ --item-off-selected: #788a80;
59
67
  --item-block: #88a9dc;
60
68
  --item-slot: #c59be0;
61
69
  --slot-chat-history: #70d0ba;
@@ -67,10 +75,10 @@ body[data-theme="dark"] {
67
75
  --slot-date-cwd: #b697dc;
68
76
  --slot-built-in: #a9bacb;
69
77
  --slot-custom: #d0a5c3;
70
- --control: #202327;
71
- --control-muted: #25292e;
72
- --pane-soft: #151719;
73
- --row: #1c1f23;
78
+ --control: #202a27;
79
+ --control-muted: #25312e;
80
+ --pane-soft: #151d1b;
81
+ --row: #1c2623;
74
82
  --code-bg: #0b0d10;
75
83
  --code-text: #e8edf2;
76
84
  --shadow: rgba(0, 0, 0, .42);
@@ -105,20 +113,25 @@ button[data-icon]::before {
105
113
  color: currentColor;
106
114
  }
107
115
  button.icon[data-icon]::before {
108
- margin-right: 0;
116
+ margin:0; font-size:14px; line-height:30px;
109
117
  }
110
118
  button.primary {
111
119
  border-color: var(--accent);
112
120
  background: var(--accent);
113
121
  color: white;
114
122
  }
123
+ button.quiet-danger {
124
+ background:transparent; border-color:transparent; color:var(--muted);
125
+ }
126
+ button.quiet-danger:hover, button.quiet-danger:focus-visible {
127
+ border-color:var(--error); color:var(--error);
128
+ }
115
129
  button.danger {
116
130
  border-color: var(--error);
117
131
  color: var(--error);
118
132
  }
119
133
  button.icon {
120
- width: 34px;
121
- padding: 5px 0;
134
+ width:32px; height:32px; min-height:32px; flex:0 0 32px; padding:0; font-size:0; overflow:hidden;
122
135
  }
123
136
  button:disabled {
124
137
  cursor: default;
@@ -153,14 +166,7 @@ html, body {
153
166
  }
154
167
  }
155
168
  .topbar {
156
- display: flex;
157
- align-items: center;
158
- flex-wrap: wrap;
159
- gap: 8px;
160
- min-height: 40px;
161
- padding: 4px 10px;
162
- border-bottom: 1px solid var(--line);
163
- background: var(--pane);
169
+ display:flex; align-items:center; gap:8px; flex:none; min-height:32px; padding:3px 10px; border-top:1px solid var(--line); background:var(--pane); font-size:12px;
164
170
  }
165
171
  .brand {
166
172
  font-weight: 700;
@@ -190,7 +196,7 @@ html, body {
190
196
  }
191
197
  .shell {
192
198
  display: grid;
193
- grid-template-columns: minmax(210px, 260px) minmax(0, 1fr);
199
+ grid-template-columns: var(--preset-pane-width, 212px) minmax(0, 1fr);
194
200
  height: calc(100vh - 48px);
195
201
  min-height: 0;
196
202
  transition: grid-template-columns .16s ease;
@@ -199,6 +205,8 @@ html, body {
199
205
  grid-template-columns: 0 minmax(0, 1fr);
200
206
  }
201
207
  .sidebar {
208
+ position: relative;
209
+ padding-right: 8px;
202
210
  border-right: 1px solid var(--line);
203
211
  background: var(--pane);
204
212
  min-width: 0;
@@ -207,8 +215,39 @@ html, body {
207
215
  flex-direction: column;
208
216
  }
209
217
  .shell.sidebar-collapsed .sidebar {
218
+ padding-right: 0;
210
219
  border-right: 0;
211
220
  }
221
+ .pane-width-handle {
222
+ position: absolute;
223
+ inset: 0 0 0 auto;
224
+ width: 8px;
225
+ z-index: 3;
226
+ cursor: col-resize;
227
+ touch-action: none;
228
+ }
229
+ .pane-width-handle::after {
230
+ content: "";
231
+ position: absolute;
232
+ inset: 0 0 0 auto;
233
+ width: 2px;
234
+ background: transparent;
235
+ }
236
+ .pane-width-handle:hover::after,
237
+ .pane-width-handle:focus-visible::after {
238
+ background: var(--accent);
239
+ }
240
+ .pane-width-handle:focus-visible {
241
+ outline: 1px solid var(--accent);
242
+ outline-offset: -2px;
243
+ }
244
+ .shell.sidebar-collapsed #presetWidthHandle { display: none; }
245
+ .shell.pane-width-dragging { transition: none; }
246
+ .shell.pane-width-dragging,
247
+ .shell.pane-width-dragging * { cursor: col-resize !important; user-select: none !important; }
248
+ @media (max-width: 800px) {
249
+ .pane-width-handle { display: none; }
250
+ }
212
251
  .side-head {
213
252
  padding: 9px 10px;
214
253
  border-bottom: 1px solid var(--line);
@@ -285,16 +324,7 @@ html, body {
285
324
  flex-direction: column;
286
325
  }
287
326
  .main-actions {
288
- display: flex;
289
- align-items: center;
290
- gap: 6px;
291
- flex-wrap: nowrap;
292
- min-height: 42px;
293
- padding: 5px 10px;
294
- border-bottom: 1px solid var(--line);
295
- background: var(--pane);
296
- position: relative;
297
- z-index: 3;
327
+ display:flex; flex-wrap:wrap; align-items:center; gap:5px; position:relative; z-index:3; flex:0 1 auto; padding:0; border:0; background:transparent;
298
328
  }
299
329
  .new-stack-control {
300
330
  display: flex;
@@ -438,7 +468,7 @@ html, body {
438
468
  }
439
469
  .workspace {
440
470
  display: grid;
441
- grid-template-columns: minmax(220px, 300px) minmax(0, 1fr);
471
+ grid-template-columns: var(--stack-pane-width, 190px) minmax(0, 1fr);
442
472
  flex: 1;
443
473
  min-height: 0;
444
474
  }
@@ -470,33 +500,12 @@ html, body {
470
500
  display: grid;
471
501
  grid-template-columns: minmax(0, 1fr);
472
502
  }
473
- .editor-dock-area.dock-open {
474
- grid-template-columns: minmax(0, 1fr) minmax(440px, 48%);
475
- }
476
503
  .editor-dock-area .workspace,
477
504
  .editor-dock-area .tab-panel,
478
505
  .editor-dock-area .context-diff-panel {
479
506
  min-width: 0;
480
507
  min-height: 0;
481
508
  }
482
- .editor-dock-area.dock-open .workspace {
483
- display: grid;
484
- grid-template-columns: minmax(200px, 260px) minmax(0, 1fr);
485
- border-right: 1px solid var(--line);
486
- }
487
- .editor-dock-area.dock-open .context-diff-panel {
488
- display: block;
489
- border-left: 1px solid var(--line);
490
- }
491
- .editor-dock-area.dock-open.dock-focus {
492
- grid-template-columns: minmax(0, 1fr);
493
- }
494
- .editor-dock-area.dock-open.dock-focus .workspace {
495
- display: none;
496
- }
497
- .editor-dock-area.dock-open.dock-focus .context-diff-panel {
498
- border-left: 0;
499
- }
500
509
  .tab-section {
501
510
  border: 1px solid var(--line);
502
511
  border-radius: 6px;
@@ -514,6 +523,8 @@ html, body {
514
523
  margin-bottom: 10px;
515
524
  }
516
525
  .items-pane {
526
+ position: relative;
527
+ padding-right: 8px;
517
528
  border-right: 1px solid var(--line);
518
529
  background: var(--pane);
519
530
  min-width: 0;
@@ -530,22 +541,6 @@ html, body {
530
541
  border-bottom: 1px solid var(--line);
531
542
  font-weight: 650;
532
543
  }
533
- .item-tools {
534
- display: flex;
535
- flex-wrap: wrap;
536
- gap: 6px;
537
- padding: 8px 12px;
538
- border-bottom: 1px solid var(--line);
539
- flex: 0 0 auto;
540
- }
541
- .item-tools button,
542
- .main-actions button {
543
- white-space: nowrap;
544
- }
545
- .item-tools-spacer {
546
- flex: 1 1 auto;
547
- min-width: 8px;
548
- }
549
544
  .item-list {
550
545
  padding: 8px;
551
546
  overflow: auto;
@@ -556,20 +551,7 @@ html, body {
556
551
  background: var(--accent-bg);
557
552
  }
558
553
  .item-row {
559
- width: 100%;
560
- text-align: left;
561
- border: 1px solid var(--line);
562
- border-left-width: 3px;
563
- background: var(--row);
564
- border-radius: 6px;
565
- padding: 8px;
566
- margin-bottom: 6px;
567
- display: grid;
568
- grid-template-columns: 18px minmax(0, 1fr) 48px;
569
- gap: 8px;
570
- align-items: center;
571
- cursor: grab;
572
- position: relative;
554
+ width:100%; text-align:left; border:1px solid transparent; border-left:2px solid var(--line); border-bottom-color:var(--line); background:transparent; border-radius:5px; padding:8px 7px 8px 20px; margin-bottom:3px; display:grid; grid-template-columns:minmax(0,1fr) 46px; gap:3px 6px; align-items:center; cursor:grab; position:relative;
573
555
  }
574
556
  .item-row:active {
575
557
  cursor: grabbing;
@@ -581,19 +563,26 @@ html, body {
581
563
  border-left-color: var(--item-slot);
582
564
  }
583
565
  .item-row.selected {
584
- border-top-color: var(--accent);
585
- border-right-color: var(--accent);
586
- border-bottom-color: var(--accent);
566
+ border-color: var(--accent);
587
567
  background: var(--accent-bg);
588
568
  }
589
- .item-row.selected.kind-block {
590
- border-left-color: var(--item-block);
569
+ .item-row.disabled {
570
+ background: var(--item-off-bg);
571
+ border-left-color: var(--item-off-line);
572
+ border-bottom-color: var(--item-off-line);
591
573
  }
592
- .item-row.selected.kind-slot {
593
- border-left-color: var(--item-slot);
574
+ .item-row.disabled.selected {
575
+ border-color: var(--item-off-selected);
576
+ border-left-color: var(--item-off-line);
577
+ background: var(--item-off-bg);
594
578
  }
595
- .item-row.disabled {
596
- opacity: .62;
579
+ .item-row.disabled .item-title,
580
+ .item-row.disabled .item-meta,
581
+ .item-row.disabled .drag-handle {
582
+ color: var(--item-off-text);
583
+ }
584
+ .item-row.disabled .item-title {
585
+ font-weight: 500;
597
586
  }
598
587
  .item-row.dragging {
599
588
  border-style: dashed;
@@ -626,22 +615,58 @@ html, body {
626
615
  user-select: none;
627
616
  }
628
617
  .item-toggle {
629
- width: 44px;
630
- min-height: 26px;
631
- padding: 2px 0;
618
+ display: inline-flex;
619
+ align-items: center;
620
+ justify-content: center;
621
+ gap: 4px;
622
+ width: 46px;
623
+ min-height: 28px;
624
+ height: 28px;
625
+ padding: 0 4px;
632
626
  border-radius: 999px;
633
- font-size: 12px;
627
+ font-size: 11px;
628
+ font-weight: 600;
629
+ line-height: 1;
630
+ letter-spacing: 0.01em;
634
631
  cursor: pointer;
632
+ box-sizing: border-box;
633
+ user-select: none;
634
+ transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
635
+ }
636
+ .item-toggle::before {
637
+ content: "";
638
+ display: inline-block;
639
+ width: 6px;
640
+ height: 6px;
641
+ border-radius: 50%;
642
+ flex: 0 0 6px;
635
643
  }
636
644
  .item-toggle.enabled {
645
+ border: 1px solid var(--accent);
646
+ background: var(--accent);
647
+ color: #ffffff;
648
+ }
649
+ .item-toggle.enabled::before {
650
+ background: currentColor;
651
+ }
652
+ body[data-theme="dark"] .item-toggle.enabled {
637
653
  border-color: var(--accent);
638
654
  background: var(--accent);
639
- color: white;
655
+ color: #0b1a16;
640
656
  }
641
657
  .item-toggle.disabled {
642
- border-color: var(--line-strong);
643
- background: var(--control-muted);
644
- color: var(--muted);
658
+ border: 1px solid var(--line-strong);
659
+ background: var(--control);
660
+ color: var(--text);
661
+ }
662
+ .item-toggle.disabled::before {
663
+ border: 1.5px solid currentColor;
664
+ box-sizing: border-box;
665
+ background: transparent;
666
+ }
667
+ .item-toggle:focus-visible {
668
+ outline: 2px solid var(--accent);
669
+ outline-offset: 1px;
645
670
  }
646
671
  .item-badge {
647
672
  display: inline-block;
@@ -662,40 +687,8 @@ html, body {
662
687
  background: var(--warning-bg);
663
688
  border-color: var(--warning);
664
689
  }
665
- .item-kind-badge,
666
- .item-slot-badge {
667
- display: inline-block;
668
- border: 1px solid currentColor;
669
- border-radius: 999px;
670
- padding: 0 6px;
671
- line-height: 17px;
672
- font-size: 11px;
673
- font-weight: 650;
674
- }
675
- .item-kind-badge {
676
- margin-right: 4px;
677
- }
678
- .item-kind-badge.block {
679
- color: var(--item-block);
680
- background: color-mix(in srgb, var(--item-block) 12%, var(--row));
681
- }
682
- .item-kind-badge.slot {
683
- color: var(--item-slot);
684
- background: color-mix(in srgb, var(--item-slot) 12%, var(--row));
685
- }
686
- .item-slot-badge {
687
- margin-left: 2px;
688
- }
689
- .item-slot-badge.slot-chat-history { color: var(--slot-chat-history); background: color-mix(in srgb, var(--slot-chat-history) 12%, var(--row)); }
690
- .item-slot-badge.slot-tools { color: var(--slot-tools); background: color-mix(in srgb, var(--slot-tools) 12%, var(--row)); }
691
- .item-slot-badge.slot-tool-guidelines { color: var(--slot-tool-guidelines); background: color-mix(in srgb, var(--slot-tool-guidelines) 12%, var(--row)); }
692
- .item-slot-badge.slot-skills { color: var(--slot-skills); background: color-mix(in srgb, var(--slot-skills) 12%, var(--row)); }
693
- .item-slot-badge.slot-project-context { color: var(--slot-project-context); background: color-mix(in srgb, var(--slot-project-context) 12%, var(--row)); }
694
- .item-slot-badge.slot-date { color: var(--slot-date); background: color-mix(in srgb, var(--slot-date) 12%, var(--row)); }
695
- .item-slot-badge.slot-date-cwd { color: var(--slot-date-cwd); background: color-mix(in srgb, var(--slot-date-cwd) 12%, var(--row)); }
696
- .item-slot-badge.slot-built-in { color: var(--slot-built-in); background: color-mix(in srgb, var(--slot-built-in) 12%, var(--row)); }
697
- .item-slot-badge.slot-custom { color: var(--slot-custom); background: color-mix(in srgb, var(--slot-custom) 12%, var(--row)); }
698
690
  .item-title {
691
+ font-size: 13px;
699
692
  font-weight: 650;
700
693
  overflow-wrap: anywhere;
701
694
  }
@@ -732,6 +725,7 @@ html, body {
732
725
  gap: 10px;
733
726
  flex: 0 0 auto;
734
727
  }
728
+ .slot-flags { grid-column:1 / -1; display:flex; flex-wrap:wrap; gap:6px 24px; }
735
729
  .item-body {
736
730
  flex: 1;
737
731
  min-height: 0;
@@ -774,13 +768,7 @@ html, body {
774
768
  color: var(--accent);
775
769
  }
776
770
  .options-grid {
777
- display: grid;
778
- grid-template-columns: repeat(3, minmax(150px, 1fr));
779
- gap: 10px;
780
- overflow: auto;
781
- padding-right: 4px;
782
- flex: 1;
783
- min-height: 0;
771
+ display:grid; grid-template-columns:repeat(auto-fit,minmax(min(190px,100%),1fr)); align-content:start; align-items:start; gap:14px 16px; overflow:auto; padding-right:4px; flex:1; min-height:0;
784
772
  }
785
773
  .option-note {
786
774
  color: var(--muted);
@@ -1012,6 +1000,48 @@ html, body {
1012
1000
  padding: 12px;
1013
1001
  background: var(--pane-soft);
1014
1002
  }
1003
+ .modal-dialog.resource-modal {
1004
+ align-self: center;
1005
+ width: min(560px, calc(100vw - 32px));
1006
+ height: auto;
1007
+ max-height: calc(100vh - 32px);
1008
+ }
1009
+ .resource-form {
1010
+ display: grid;
1011
+ gap: 6px;
1012
+ max-width: 480px;
1013
+ margin: 0 auto;
1014
+ }
1015
+ .resource-form label {
1016
+ color: var(--muted);
1017
+ font-size: 12px;
1018
+ font-weight: 600;
1019
+ }
1020
+ /* New-preset choices share the existing resource dialog and scroll container. */
1021
+ .template-options { display: flex; flex-direction: column; gap: 6px; margin: 2px 0 6px; }
1022
+ .template-option { display: flex; align-items: flex-start; gap: 10px; padding: 8px 10px; border: 1px solid var(--line); border-radius: 6px; background: var(--pane); cursor: pointer; }
1023
+ .template-option:hover { border-color: var(--line-strong); }
1024
+ .template-option:has(input:checked) { border-color: var(--accent); background: var(--accent-bg); }
1025
+ .template-option input[type="radio"] { margin: 2px 0 0; width: auto; flex: none; cursor: pointer; accent-color: var(--accent); }
1026
+ .template-option:focus-within { outline: 2px solid var(--accent); outline-offset: 1px; }
1027
+ .template-option-content { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
1028
+ .template-option-title { font-size: 13px; font-weight: 600; color: var(--text); }
1029
+ .template-option-desc { font-size: 12px; font-weight: 400; color: var(--muted); line-height: 1.4; }
1030
+ .resource-form-note {
1031
+ margin: 6px 0 2px;
1032
+ padding: 8px;
1033
+ border: 1px solid var(--line);
1034
+ border-radius: 6px;
1035
+ color: var(--warning);
1036
+ background: var(--warning-bg);
1037
+ font-size: 12px;
1038
+ }
1039
+ .resource-form-actions {
1040
+ display: flex;
1041
+ justify-content: flex-end;
1042
+ gap: 8px;
1043
+ margin-top: 8px;
1044
+ }
1015
1045
  .modal-toolbar {
1016
1046
  display: flex;
1017
1047
  gap: 8px;
@@ -1249,17 +1279,7 @@ html, body {
1249
1279
  .workspace {
1250
1280
  display: block;
1251
1281
  }
1252
- .editor-dock-area.dock-open,
1253
- .editor-dock-area.dock-open.dock-focus {
1254
- grid-template-columns: minmax(0, 1fr);
1255
- }
1256
- .editor-dock-area.dock-open .workspace {
1257
- display: none;
1258
- }
1259
- .editor-dock-area.dock-open .context-diff-panel {
1260
- border-left: 0;
1261
- }
1262
- .item-form {
1282
+ .item-form {
1263
1283
  height: auto;
1264
1284
  overflow: visible;
1265
1285
  }
@@ -1279,11 +1299,14 @@ html, body {
1279
1299
  min-height: calc(100vh - 80px);
1280
1300
  }
1281
1301
  .sidebar, .items-pane {
1302
+ padding-right: 0;
1282
1303
  border-right: 0;
1283
1304
  border-bottom: 1px solid var(--line);
1284
1305
  }
1306
+ .shell.sidebar-collapsed { grid-template-columns:minmax(0,1fr); }
1307
+ .shell.sidebar-collapsed .sidebar { display:none; }
1285
1308
  .sidebar {
1286
- min-height: 180px;
1309
+ min-height: 0;
1287
1310
  max-height: 240px;
1288
1311
  }
1289
1312
  .metadata-head {
@@ -1332,5 +1355,390 @@ html, body {
1332
1355
  font-size: 14px;
1333
1356
  }
1334
1357
  }
1358
+
1359
+ /* V4 workspace: the library owns creation/reload; the editor header owns identity. */
1360
+ .topbar .brand {
1361
+ display: none;
1362
+ }
1363
+ .resource-header {
1364
+ display: flex;
1365
+ align-items: center;
1366
+ gap: 10px;
1367
+ flex-wrap: wrap;
1368
+ min-width: 0;
1369
+ padding: 4px 10px;
1370
+ border-bottom: 1px solid var(--line);
1371
+ background: var(--pane);
1372
+ }
1373
+ .resource-identity,
1374
+ .resource-title-line,
1375
+ .resource-subline {
1376
+ min-width: 0;
1377
+ }
1378
+ .resource-title-line {
1379
+ display:flex; flex-wrap:wrap; align-items:center; gap:4px 8px; min-width:0;
1380
+ }
1381
+ .resource-title-line h1 {
1382
+ flex:0 1 auto; min-width:0; max-width:100%; margin:0; font-size:18px; line-height:1.3; font-weight:700; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;
1383
+ }
1384
+ .resource-subline {
1385
+ display: flex;
1386
+ align-items: center;
1387
+ gap: 6px;
1388
+ margin-top: 3px;
1389
+ color: var(--muted);
1390
+ font-size: 12px;
1391
+ overflow-wrap: anywhere;
1392
+ }
1393
+ .resource-subline code {
1394
+ color: var(--accent);
1395
+ overflow-wrap: anywhere;
1396
+ }
1397
+ .resource-editing-label {
1398
+ flex: 0 0 auto;
1399
+ color: var(--muted);
1400
+ font-size: 11px;
1401
+ }
1402
+ .runtime-badge {
1403
+ flex: 0 0 auto;
1404
+ border: 1px solid var(--line);
1405
+ border-radius: 999px;
1406
+ padding: 1px 7px;
1407
+ color: var(--muted);
1408
+ font-size: 11px;
1409
+ white-space: nowrap;
1410
+ }
1411
+ .runtime-badge.active {
1412
+ color: var(--accent);
1413
+ border-color: var(--accent);
1414
+ background: var(--accent-bg);
1415
+ }
1416
+ .side-head {
1417
+ display: flex;
1418
+ flex-direction: column;
1419
+ align-items: stretch;
1420
+ justify-content: space-between;
1421
+ gap: 8px;
1422
+ }
1423
+ .side-head-title {
1424
+ min-width: 0;
1425
+ flex: 1 1 auto;
1426
+ }
1427
+ .library-actions {
1428
+ display: flex;
1429
+ flex-wrap: wrap;
1430
+ align-items: center;
1431
+ gap: 4px;
1432
+ flex: 0 0 auto;
1433
+ }
1434
+ .library-actions select {
1435
+ width: auto;
1436
+ min-width: 74px;
1437
+ padding: 4px 6px;
1438
+ font-size: 12px;
1439
+ }
1440
+ .library-actions button {
1441
+ font-size: 12px;
1442
+ min-height: 30px;
1443
+ padding: 4px 7px;
1444
+ white-space: nowrap;
1445
+ }
1446
+ .library-actions #reloadBtn {
1447
+ width: 30px;
1448
+ padding-inline: 0;
1449
+ overflow: hidden;
1450
+ color: transparent;
1451
+ font-size: 0;
1452
+ }
1453
+ .library-actions #reloadBtn::before {
1454
+ margin-right: 0;
1455
+ color: var(--text);
1456
+ font-size: 14px;
1457
+ }
1458
+ .resource-header .resource-identity {
1459
+ flex:1 1 280px; min-width:min(280px,100%);
1460
+ }
1461
+ .resource-header .main-actions .action-spacer {
1462
+ min-width: 4px;
1463
+ }
1464
+ .item-row:focus-visible {
1465
+ outline: 2px solid var(--accent);
1466
+ outline-offset: 2px;
1467
+ }
1468
+ .item-row.disabled:focus-visible {
1469
+ outline-color: var(--item-off-selected);
1470
+ }
1471
+ .item-title {
1472
+ display: -webkit-box;
1473
+ -webkit-line-clamp: 2;
1474
+ -webkit-box-orient: vertical;
1475
+ overflow: hidden;
1476
+ color: var(--text);
1477
+ }
1478
+ .item-meta {
1479
+ display: block;
1480
+ white-space: nowrap;
1481
+ overflow: hidden;
1482
+ text-overflow: ellipsis;
1483
+ overflow-wrap: normal;
1484
+ }
1485
+ .item-form {
1486
+ gap: 8px;
1487
+ padding: 14px 16px;
1488
+ }
1489
+ .item-primary-field {
1490
+ flex: 0 0 auto;
1491
+ }
1492
+ .item-primary-field label {
1493
+ color: var(--text);
1494
+ font-weight: 650;
1495
+ }
1496
+ .item-primary-field input {
1497
+ min-height: 36px;
1498
+ font-size: 15px;
1499
+ }
1500
+ .item-technical-row {
1501
+ display: flex;
1502
+ align-items: center;
1503
+ flex-wrap: wrap;
1504
+ gap: 8px;
1505
+ min-width: 0;
1506
+ color: var(--muted);
1507
+ font-size: 12px;
1508
+ }
1509
+ .role-control {
1510
+ display: inline-flex;
1511
+ align-items: center;
1512
+ gap: 4px;
1513
+ min-width: 0;
1514
+ color: var(--text);
1515
+ font-size: 12px;
1516
+ }
1517
+ .role-control select {
1518
+ width: auto;
1519
+ min-width: 88px;
1520
+ min-height: 30px;
1521
+ padding: 3px 22px 3px 5px;
1522
+ border: 1px solid transparent;
1523
+ background-color: transparent;
1524
+ color: var(--text);
1525
+ font-size: 14px;
1526
+ appearance: none;
1527
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23677770' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 7.5l5 5 5-5'/%3E%3C/svg%3E");
1528
+ background-position: right 3px center;
1529
+ background-size: 16px 16px;
1530
+ background-repeat: no-repeat;
1531
+ }
1532
+ .role-control select:hover,
1533
+ .role-control select:focus-visible {
1534
+ border-color: var(--line);
1535
+ background: var(--accent-bg);
1536
+ }
1537
+ .item-properties {
1538
+ position: relative;
1539
+ flex: 0 0 auto;
1540
+ }
1541
+ .item-properties > summary {
1542
+ cursor: pointer;
1543
+ list-style: none;
1544
+ color: var(--muted);
1545
+ padding: 3px 5px;
1546
+ border-radius: 4px;
1547
+ }
1548
+ .item-properties > summary::-webkit-details-marker {
1549
+ display: none;
1550
+ }
1551
+ .item-properties > summary::after {
1552
+ content: "⌄";
1553
+ margin-left: 4px;
1554
+ font-size: 16px;
1555
+ line-height: 12px;
1556
+ vertical-align: -1px;
1557
+ }
1558
+ .item-properties[open] > summary::after {
1559
+ content: "⌃";
1560
+ }
1561
+ .item-properties > summary:hover,
1562
+ .item-properties > summary:focus-visible {
1563
+ color: var(--accent);
1564
+ background: var(--accent-bg);
1565
+ outline: none;
1566
+ }
1567
+ .item-properties-popover {
1568
+ position:fixed; z-index:4; display:grid; grid-template-columns:1fr; gap:10px; width:min(330px,calc(100vw - 32px)); max-height:65vh; overflow:auto; padding:12px; border:1px solid var(--line); border-radius:6px; background:var(--pane); box-shadow:0 8px 24px var(--shadow);
1569
+ }
1570
+ .item-properties-popover .field:last-child {
1571
+ grid-column: 1 / -1;
1572
+ }
1573
+ .item-body {
1574
+ min-width: 0;
1575
+ }
1576
+ .content-field {
1577
+ min-width: 0;
1578
+ }
1579
+ .content-field textarea {
1580
+ color: var(--text);
1581
+ background: var(--control);
1582
+ line-height: 1.6;
1583
+ }
1584
+ .metadata-details > summary {
1585
+ display: flex;
1586
+ align-items: center;
1587
+ gap: 8px;
1588
+ min-width: 0;
1589
+ padding: 5px 10px;
1590
+ cursor: pointer;
1591
+ list-style: none;
1592
+ color: var(--muted);
1593
+ font-size: 12px;
1594
+ }
1595
+ .metadata-details > summary::-webkit-details-marker {
1596
+ display: none;
1597
+ }
1598
+ .metadata-details > summary::before {
1599
+ content: "▸";
1600
+ color: var(--accent);
1601
+ }
1602
+ .metadata-details[open] > summary::before {
1603
+ content: "▾";
1604
+ }
1605
+ .metadata-summary-title {
1606
+ flex: 0 0 auto;
1607
+ color: var(--text);
1608
+ font-weight: 650;
1609
+ }
1610
+ .metadata-details .metadata-summary {
1611
+ margin: 0;
1612
+ }
1613
+ @media (max-width: 900px) {
1614
+ .resource-header {
1615
+ padding: 5px 10px;
1616
+ }
1617
+ .resource-header .main-actions {
1618
+ flex: 1 1 auto;
1619
+ }
1620
+ .resource-editing-label {
1621
+ display: none;
1622
+ }
1623
+ .library-actions {
1624
+ flex-wrap: wrap;
1625
+ justify-content: flex-end;
1626
+ }
1627
+ .library-actions select {
1628
+ max-width: 82px;
1629
+ }
1630
+ }
1631
+ @media (max-width: 520px) {
1632
+ .side-head {
1633
+ display: block;
1634
+ }
1635
+ .library-actions {
1636
+ margin-top: 7px;
1637
+ justify-content: flex-start;
1638
+ }
1639
+ .resource-title-line h1 {
1640
+ font-size: 16px;
1641
+ }
1642
+ }
1643
+
1644
+ .item-row .drag-handle { position: absolute; left: 3px; top: 13px; font-size: 14px; width: 12px; }
1645
+ .item-row > div:not(.drag-handle) { min-width: 0; }
1646
+ .item-row .item-title { grid-column:1; grid-row:1; }
1647
+ .item-row .item-toggle { grid-column:2; grid-row:1; }
1648
+ .stack-row { display: flex; flex-direction: column; align-items: stretch; }
1649
+ .stack-row .stack-meta:nth-child(2) { order: -1; font-size: 13px; color: var(--text); font-weight: 650; margin-top: 0; }
1650
+ .stack-row .stack-name { font-size: 11px; color: var(--muted); margin-top: 4px; }
1651
+ .view-tabs { gap: 18px; padding: 0 12px; }
1652
+ .view-tabs button { border: 0; border-radius: 0; background: transparent; padding: 7px 2px; position: relative; }
1653
+ .view-tabs button[data-icon]::before { display: none; }
1654
+ .view-tabs button.active { background: transparent; color: var(--accent); }
1655
+ .view-tabs button.active::after { content: ""; position: absolute; bottom: 0; height: 2px; left: 0; right: 0; background: var(--accent); }
1656
+ .library-actions { flex-wrap: nowrap; }
1657
+ @media(max-width:520px) { .view-tabs { gap: 14px; } }
1658
+
1659
+ .stack-list, .item-list { flex: 0 1 auto; }
1660
+ .side-head { flex-direction: row; align-items: flex-start; }
1661
+ .side-head .library-actions { flex: 0 0 auto; }
1662
+ .side-head .cwd { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1663
+
1664
+ /* Second-pass workspace polish: keep creation and item operations close to their
1665
+ owning list/editor, while the preview remains a separate dock column. */
1666
+ .library-create {
1667
+ flex: 0 0 auto;
1668
+ display: grid;
1669
+ gap: 5px;
1670
+ padding: 10px 8px 12px;
1671
+ border-top: 1px solid var(--line);
1672
+ background: var(--pane-soft);
1673
+ }
1674
+ .library-create #newStackBtn {
1675
+ width: 100%;
1676
+ margin-top: 2px;
1677
+ border-style: dashed;
1678
+ justify-content: center;
1679
+ }
1680
+ .item-add-wrap {
1681
+ position: relative;
1682
+ flex: 0 0 auto;
1683
+ padding: 8px 12px 12px;
1684
+ border-top: 1px solid var(--line);
1685
+ background: var(--pane);
1686
+ }
1687
+ .item-add-wrap > .outline-add {
1688
+ width: 100%;
1689
+ border-style: dashed;
1690
+ color: var(--muted);
1691
+ }
1692
+ .add-content-menu {
1693
+ position: absolute;
1694
+ z-index: 5;
1695
+ left: 12px;
1696
+ right: 12px;
1697
+ bottom: calc(100% - 4px);
1698
+ display: grid;
1699
+ gap: 4px;
1700
+ padding: 6px;
1701
+ border: 1px solid var(--line-strong);
1702
+ border-radius: 7px;
1703
+ background: var(--pane);
1704
+ box-shadow: 0 8px 24px var(--shadow);
1705
+ }
1706
+ .add-content-menu[hidden] {
1707
+ display: none;
1708
+ }
1709
+ .add-content-menu button {
1710
+ width: 100%;
1711
+ display: grid;
1712
+ grid-template-columns: auto minmax(0, 1fr);
1713
+ text-align: left;
1714
+ border-color: transparent;
1715
+ }
1716
+ .add-content-menu button small {
1717
+ grid-column: 2;
1718
+ color: var(--muted);
1719
+ font-size: 11px;
1720
+ }
1721
+ .view-tabs [data-dock-tab] {
1722
+ margin-left: auto;
1723
+ border: 1px solid var(--line);
1724
+ border-radius: 5px;
1725
+ background: var(--pane-soft);
1726
+ padding-inline: 10px;
1727
+ color: var(--muted);
1728
+ font-size: 12px;
1729
+ }
1730
+ .view-tabs [data-dock-tab].active {
1731
+ border-color: var(--accent);
1732
+ background: var(--accent-bg);
1733
+ color: var(--accent);
1734
+ }
1735
+ .view-tabs [data-dock-tab].active::after {
1736
+ display: none;
1737
+ }
1738
+
1739
+
1740
+ /* Navigation has one summary line, not a second miniature form. */
1741
+ .item-row .item-meta { grid-column:1 / -1; margin:0; font-size:11px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
1742
+ .preset-properties-entry { flex:0 0 auto; }
1335
1743
  `;
1336
1744
  //# sourceMappingURL=styles.js.map