pmx-canvas 0.8.0 → 0.9.0

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 (341) hide show
  1. package/.github/extensions/pmx-canvas/runtime.json +1 -1
  2. package/.github/extensions/pmx-canvas/tools.json +601 -22
  3. package/CHANGELOG.md +66 -0
  4. package/Readme.md +131 -532
  5. package/dist/canvas/global.css +2759 -510
  6. package/dist/canvas/index.js +168 -107
  7. package/dist/canvas/mcp-app.html +2936 -632
  8. package/dist/json-render/index.css +81 -1
  9. package/dist/json-render/index.js +20 -20
  10. package/dist/types/client/canvas/BarHint.d.ts +12 -2
  11. package/dist/types/client/canvas/BoardLinkDialog.d.ts +3 -1
  12. package/dist/types/client/canvas/BoardPinButton.d.ts +10 -0
  13. package/dist/types/client/canvas/BoardSwitcher.d.ts +1 -1
  14. package/dist/types/client/canvas/CanvasViewport.d.ts +1 -1
  15. package/dist/types/client/canvas/CommandBar.d.ts +3 -4
  16. package/dist/types/client/canvas/ConnectionBanner.d.ts +2 -1
  17. package/dist/types/client/canvas/ContextChip.d.ts +3 -0
  18. package/dist/types/client/canvas/CrossBoardReferences.d.ts +5 -0
  19. package/dist/types/client/canvas/EdgeLayer.d.ts +14 -3
  20. package/dist/types/client/canvas/EmptyState.d.ts +4 -4
  21. package/dist/types/client/canvas/HomeGraphView.d.ts +2 -0
  22. package/dist/types/client/canvas/HomeMapView.d.ts +1 -0
  23. package/dist/types/client/canvas/HomeReviewView.d.ts +6 -0
  24. package/dist/types/client/canvas/HomeView.d.ts +9 -7
  25. package/dist/types/client/canvas/KnowledgeDialog.d.ts +4 -0
  26. package/dist/types/client/canvas/LifecycleChrome.d.ts +5 -0
  27. package/dist/types/client/canvas/LifecycleFields.d.ts +7 -0
  28. package/dist/types/client/canvas/LifecyclePanel.d.ts +1 -0
  29. package/dist/types/client/canvas/MemoryInspector.d.ts +7 -0
  30. package/dist/types/client/canvas/NearPinLayer.d.ts +14 -0
  31. package/dist/types/client/canvas/NodeContextMark.d.ts +40 -7
  32. package/dist/types/client/canvas/RelationPresetsDialog.d.ts +4 -0
  33. package/dist/types/client/canvas/RelationsPanel.d.ts +4 -0
  34. package/dist/types/client/canvas/SessionPanel.d.ts +2 -0
  35. package/dist/types/client/canvas/canvas-area.d.ts +1 -1
  36. package/dist/types/client/canvas/graph-geometry.d.ts +27 -0
  37. package/dist/types/client/canvas/graph-model.d.ts +37 -0
  38. package/dist/types/client/canvas/memory-layout.d.ts +23 -0
  39. package/dist/types/client/canvas/use-chrome-height.d.ts +2 -0
  40. package/dist/types/client/canvas/use-focus-trap.d.ts +1 -0
  41. package/dist/types/client/canvas/use-memory-graph.d.ts +8 -0
  42. package/dist/types/client/canvas/use-pan-zoom.d.ts +4 -1
  43. package/dist/types/client/icons.d.ts +0 -10
  44. package/dist/types/client/nodes/AxStepControls.d.ts +1 -1
  45. package/dist/types/client/nodes/HtmlNode.d.ts +1 -0
  46. package/dist/types/client/nodes/InlineMarkdownEditor.d.ts +4 -4
  47. package/dist/types/client/nodes/MarkdownNode.d.ts +5 -1
  48. package/dist/types/client/nodes/McpAppNode.d.ts +4 -4
  49. package/dist/types/client/nodes/viewer-runtime-state.d.ts +1 -1
  50. package/dist/types/client/state/boards-store.d.ts +81 -9
  51. package/dist/types/client/state/canvas-store.d.ts +14 -1
  52. package/dist/types/client/state/context-chip-store.d.ts +22 -0
  53. package/dist/types/client/state/context-status-store.d.ts +35 -0
  54. package/dist/types/client/state/intent-bridge.d.ts +11 -8
  55. package/dist/types/client/state/knowledge-store.d.ts +22 -0
  56. package/dist/types/client/state/near-pin-store.d.ts +44 -1
  57. package/dist/types/client/state/presence-store.d.ts +4 -4
  58. package/dist/types/client/state/presentation.d.ts +28 -0
  59. package/dist/types/client/state/relation-store.d.ts +10 -0
  60. package/dist/types/client/state/session-store.d.ts +41 -2
  61. package/dist/types/client/state/workspace-settings.d.ts +7 -0
  62. package/dist/types/client/types.d.ts +13 -1
  63. package/dist/types/client/utils/keyboard.d.ts +2 -0
  64. package/dist/types/client/utils/time-ago.d.ts +4 -0
  65. package/dist/types/mcp/context-uri-template.d.ts +3 -1
  66. package/dist/types/server/agent-presence.d.ts +10 -3
  67. package/dist/types/server/ax-context.d.ts +1 -1
  68. package/dist/types/server/canvas-db.d.ts +30 -7
  69. package/dist/types/server/canvas-operations.d.ts +24 -2
  70. package/dist/types/server/canvas-provenance.d.ts +22 -2
  71. package/dist/types/server/canvas-serialization.d.ts +2 -0
  72. package/dist/types/server/canvas-state.d.ts +93 -15
  73. package/dist/types/server/canvas-validation.d.ts +1 -1
  74. package/dist/types/server/context-brief.d.ts +94 -6
  75. package/dist/types/server/context-reads.d.ts +33 -7
  76. package/dist/types/server/edit-summary.d.ts +20 -0
  77. package/dist/types/server/index.d.ts +71 -10
  78. package/dist/types/server/knowledge-lifecycle.d.ts +221 -0
  79. package/dist/types/server/lifecycle-status.d.ts +10 -0
  80. package/dist/types/server/memory-graph.d.ts +9 -0
  81. package/dist/types/server/mutation-history.d.ts +2 -0
  82. package/dist/types/server/operations/ops/ax-shared.d.ts +1 -1
  83. package/dist/types/server/operations/ops/boards.d.ts +2 -1
  84. package/dist/types/server/operations/ops/lifecycle.d.ts +2 -0
  85. package/dist/types/server/operations/ops/memory-graph.d.ts +2 -0
  86. package/dist/types/server/operations/ops/nodes.d.ts +5 -0
  87. package/dist/types/server/operations/ops/query.d.ts +23 -0
  88. package/dist/types/server/operations/registry.d.ts +1 -0
  89. package/dist/types/server/placement.d.ts +7 -0
  90. package/dist/types/server/scope-fence.d.ts +2 -1
  91. package/dist/types/server/spatial-analysis.d.ts +6 -3
  92. package/dist/types/server/tour-control.d.ts +32 -0
  93. package/dist/types/server/wiki-links.d.ts +14 -0
  94. package/dist/types/server/workbench-auth.d.ts +2 -0
  95. package/dist/types/shared/agent-context.d.ts +2 -0
  96. package/dist/types/shared/agent-presence.d.ts +15 -12
  97. package/dist/types/shared/auto-arrange.d.ts +1 -0
  98. package/dist/types/shared/boards.d.ts +4 -4
  99. package/dist/types/shared/knowledge-lifecycle.d.ts +41 -0
  100. package/dist/types/shared/knowledge-presets.d.ts +6 -0
  101. package/dist/types/shared/lifecycle-status.d.ts +24 -0
  102. package/dist/types/shared/memory-graph.d.ts +53 -0
  103. package/dist/types/shared/relations.d.ts +68 -0
  104. package/dist/types/shared/semantic-attention.d.ts +2 -0
  105. package/dist/types/shared/tour.d.ts +38 -0
  106. package/dist/types/shared/workspace-settings.d.ts +11 -0
  107. package/docs/RELEASE.md +21 -3
  108. package/docs/adr-001-bun-only-runtime.md +7 -1
  109. package/docs/adr-002-shared-product-separate-runtimes.md +93 -0
  110. package/docs/api-reference.md +109 -0
  111. package/docs/ax-host-adapter-contract.md +1 -1
  112. package/docs/ax-state-contract.md +5 -4
  113. package/docs/cli.md +153 -15
  114. package/docs/demos/pmx-canvas-demo.mp4 +0 -0
  115. package/docs/design/AgentContext.dc.html +3 -3
  116. package/docs/design/BoardPins.dc.html +37 -22
  117. package/docs/design/Categories.dc.html +208 -0
  118. package/docs/design/CategoryEditor.dc.html +33 -0
  119. package/docs/design/Chrome.dc.html +55 -9
  120. package/docs/design/ContextChip.dc.html +224 -0
  121. package/docs/design/ContextChip600.dc.html +136 -0
  122. package/docs/design/EmptyState.dc.html +45 -0
  123. package/docs/design/Flows.dc.html +23 -1
  124. package/docs/design/HeaderMarks.dc.html +183 -0
  125. package/docs/design/Home.dc.html +19 -1
  126. package/docs/design/HomeGraph.dc.html +86 -202
  127. package/docs/design/HomeMap.dc.html +23 -1
  128. package/docs/design/HomeTeam.dc.html +32 -14
  129. package/docs/design/Lifecycle.dc.html +22 -0
  130. package/docs/design/Lifecycle600.dc.html +18 -0
  131. package/docs/design/LifecycleVariants.dc.html +157 -0
  132. package/docs/design/LinkAuthorship.dc.html +139 -0
  133. package/docs/design/LinksChanged.dc.html +203 -0
  134. package/docs/design/LinksOptions.dc.html +137 -0
  135. package/docs/design/LinksOptions600.dc.html +134 -0
  136. package/docs/design/NearPin.dc.html +9 -10
  137. package/docs/design/Pane600.dc.html +4 -3
  138. package/docs/design/Relations.dc.html +3 -2
  139. package/docs/design/Restore.dc.html +152 -0
  140. package/docs/design/SeeChange.dc.html +267 -0
  141. package/docs/design/Uses.dc.html +12 -6
  142. package/docs/design/canvas.json +146 -19
  143. package/docs/design.md +454 -18
  144. package/docs/environment.md +0 -1
  145. package/docs/evals/curation-effect.md +128 -0
  146. package/docs/http-api.md +465 -38
  147. package/docs/mcp.md +150 -19
  148. package/docs/node-types.md +58 -3
  149. package/docs/plans/design-gaps-2026-10-08.md +53 -0
  150. package/docs/plans/plan-009-tech-debt-backlog.md +379 -0
  151. package/docs/plans/plan-016-context-made-visible-wave-1.md +150 -5
  152. package/docs/plans/plan-017-knowledge-categories-and-lifecycle.md +175 -0
  153. package/docs/plans/plan-018-connected-memory-wave-2.md +594 -0
  154. package/docs/plans/plan-019-post-0.9-roadmap.md +198 -0
  155. package/docs/product-context-vision-2026-09.md +17 -1
  156. package/docs/product-vision-2026-09.md +1082 -43
  157. package/docs/product-vision-review-2026-09.md +13 -1
  158. package/docs/screenshots/workbench-live-dark.png +0 -0
  159. package/docs/screenshots/workbench-live-light.png +0 -0
  160. package/docs/sdk.md +62 -2
  161. package/package.json +1 -1
  162. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +1 -1
  163. package/plugins/pmx-canvas/plugin.json +1 -1
  164. package/plugins/pmx-canvas/runtime.json +1 -1
  165. package/plugins/pmx-canvas/tools.json +601 -22
  166. package/skills/pmx-canvas/SKILL.md +234 -43
  167. package/skills/pmx-canvas/evals/evals.json +62 -0
  168. package/skills/pmx-canvas/references/ax-html-control-surface.md +6 -0
  169. package/skills/pmx-canvas/references/full-reference.md +120 -21
  170. package/skills/pmx-canvas/references/github-copilot-app-adapter.md +2 -2
  171. package/skills/pmx-canvas/references/importing-context.md +132 -0
  172. package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
  173. package/skills/pmx-canvas/references/tours-and-recording.md +16 -1
  174. package/skills/pmx-canvas-testing/SKILL.md +20 -0
  175. package/src/cli/agent.ts +2 -0
  176. package/src/cli/commands/ax.ts +12 -0
  177. package/src/cli/commands/boards.ts +87 -11
  178. package/src/cli/commands/edges.ts +28 -0
  179. package/src/cli/commands/groups.ts +7 -0
  180. package/src/cli/commands/nodes.ts +4 -2
  181. package/src/cli/commands/query.ts +34 -2
  182. package/src/cli/commands/record.ts +199 -48
  183. package/src/cli/index.ts +7 -1
  184. package/src/client/App.tsx +177 -70
  185. package/src/client/canvas/AttentionHistory.tsx +0 -2
  186. package/src/client/canvas/BarHint.tsx +40 -2
  187. package/src/client/canvas/BoardCopyDialog.tsx +1 -1
  188. package/src/client/canvas/BoardFolderDialog.tsx +7 -7
  189. package/src/client/canvas/BoardLinkDialog.tsx +138 -33
  190. package/src/client/canvas/BoardPinButton.tsx +33 -0
  191. package/src/client/canvas/BoardSwitcher.tsx +26 -40
  192. package/src/client/canvas/CanvasNode.tsx +360 -237
  193. package/src/client/canvas/CanvasViewport.tsx +45 -7
  194. package/src/client/canvas/CommandBar.tsx +29 -23
  195. package/src/client/canvas/CommandPalette.tsx +5 -12
  196. package/src/client/canvas/ConnectionBanner.tsx +3 -3
  197. package/src/client/canvas/ContextChip.tsx +296 -0
  198. package/src/client/canvas/ContextMenu.tsx +63 -5
  199. package/src/client/canvas/CrossBoardReferences.tsx +60 -0
  200. package/src/client/canvas/EdgeLayer.tsx +339 -76
  201. package/src/client/canvas/EmptyState.tsx +33 -18
  202. package/src/client/canvas/ExpandedNodeOverlay.tsx +72 -40
  203. package/src/client/canvas/ExternalWriters.tsx +57 -42
  204. package/src/client/canvas/HomeGraphView.tsx +942 -0
  205. package/src/client/canvas/HomeMapView.tsx +641 -0
  206. package/src/client/canvas/HomeReviewView.tsx +167 -0
  207. package/src/client/canvas/HomeView.tsx +687 -160
  208. package/src/client/canvas/IntentLayer.tsx +19 -12
  209. package/src/client/canvas/KnowledgeDialog.tsx +488 -0
  210. package/src/client/canvas/LifecycleChrome.tsx +133 -0
  211. package/src/client/canvas/LifecycleFields.tsx +91 -0
  212. package/src/client/canvas/LifecyclePanel.tsx +533 -0
  213. package/src/client/canvas/MemoryInspector.tsx +104 -0
  214. package/src/client/canvas/Minimap.tsx +3 -3
  215. package/src/client/canvas/NearPinLayer.tsx +187 -0
  216. package/src/client/canvas/NodeContextMark.tsx +175 -97
  217. package/src/client/canvas/Presentation.tsx +23 -57
  218. package/src/client/canvas/RelationPresetsDialog.tsx +413 -0
  219. package/src/client/canvas/RelationsPanel.tsx +82 -0
  220. package/src/client/canvas/SelectionBar.tsx +3 -6
  221. package/src/client/canvas/SessionPanel.tsx +90 -50
  222. package/src/client/canvas/SessionReceipt.tsx +311 -39
  223. package/src/client/canvas/ShortcutOverlay.tsx +1 -1
  224. package/src/client/canvas/SnapshotPanel.tsx +27 -36
  225. package/src/client/canvas/ToolRail.tsx +367 -192
  226. package/src/client/canvas/TopBar.tsx +354 -124
  227. package/src/client/canvas/canvas-area.ts +10 -3
  228. package/src/client/canvas/graph-geometry.ts +195 -0
  229. package/src/client/canvas/graph-model.ts +254 -0
  230. package/src/client/canvas/memory-layout.ts +106 -0
  231. package/src/client/canvas/use-chrome-height.ts +20 -0
  232. package/src/client/canvas/use-focus-trap.ts +31 -5
  233. package/src/client/canvas/use-memory-graph.ts +58 -0
  234. package/src/client/canvas/use-node-drag.ts +2 -1
  235. package/src/client/canvas/use-pan-zoom.ts +64 -7
  236. package/src/client/icons.tsx +0 -63
  237. package/src/client/mcp-app/style.css +0 -6
  238. package/src/client/nodes/AxStepControls.tsx +74 -50
  239. package/src/client/nodes/BoardNode.tsx +5 -1
  240. package/src/client/nodes/ContextNode.tsx +18 -11
  241. package/src/client/nodes/ExtAppFrame.tsx +0 -1
  242. package/src/client/nodes/FileNode.tsx +46 -42
  243. package/src/client/nodes/HtmlNode.tsx +44 -2
  244. package/src/client/nodes/ImageNode.tsx +1 -1
  245. package/src/client/nodes/InlineFormatBar.tsx +6 -9
  246. package/src/client/nodes/InlineMarkdownEditor.tsx +56 -17
  247. package/src/client/nodes/MarkdownNode.tsx +377 -109
  248. package/src/client/nodes/McpAppNode.tsx +50 -20
  249. package/src/client/nodes/MdFormatBar.tsx +21 -18
  250. package/src/client/nodes/PromptNode.tsx +1 -1
  251. package/src/client/nodes/ResponseNode.tsx +1 -1
  252. package/src/client/nodes/viewer-runtime-state.ts +54 -22
  253. package/src/client/state/attention-bridge.ts +64 -15
  254. package/src/client/state/boards-store.ts +193 -39
  255. package/src/client/state/canvas-store.ts +99 -12
  256. package/src/client/state/context-chip-store.ts +70 -0
  257. package/src/client/state/context-status-store.ts +53 -0
  258. package/src/client/state/intent-bridge.ts +51 -30
  259. package/src/client/state/knowledge-store.ts +43 -0
  260. package/src/client/state/near-pin-store.ts +115 -6
  261. package/src/client/state/presence-store.ts +7 -10
  262. package/src/client/state/presentation.ts +91 -0
  263. package/src/client/state/relation-store.ts +81 -0
  264. package/src/client/state/session-store.ts +144 -18
  265. package/src/client/state/sse-bridge.ts +206 -29
  266. package/src/client/state/workspace-settings.ts +11 -0
  267. package/src/client/theme/global.css +2759 -510
  268. package/src/client/types.ts +12 -0
  269. package/src/client/utils/keyboard.ts +10 -0
  270. package/src/client/utils/time-ago.ts +14 -0
  271. package/src/json-render/renderer/index.css +6 -1
  272. package/src/json-render/renderer/index.tsx +31 -1
  273. package/src/mcp/canvas-app.ts +12 -2
  274. package/src/mcp/context-uri-template.ts +7 -4
  275. package/src/mcp/server.ts +63 -41
  276. package/src/mcp/workbench-app.ts +39 -6
  277. package/src/server/agent-presence.ts +128 -28
  278. package/src/server/ax-context.ts +27 -13
  279. package/src/server/board-export.ts +12 -1
  280. package/src/server/canvas-db.ts +331 -42
  281. package/src/server/canvas-operations.ts +196 -84
  282. package/src/server/canvas-provenance.ts +53 -22
  283. package/src/server/canvas-serialization.ts +2 -0
  284. package/src/server/canvas-state.ts +950 -122
  285. package/src/server/canvas-validation.ts +9 -2
  286. package/src/server/context-brief.ts +345 -38
  287. package/src/server/context-reads.ts +179 -30
  288. package/src/server/demo-state.json +355 -24
  289. package/src/server/edit-summary.ts +74 -0
  290. package/src/server/html-surface.ts +8 -1
  291. package/src/server/index.ts +203 -13
  292. package/src/server/knowledge-lifecycle.ts +304 -0
  293. package/src/server/lifecycle-status.ts +232 -0
  294. package/src/server/memory-graph.ts +166 -0
  295. package/src/server/mutation-history.ts +18 -6
  296. package/src/server/operations/composites.ts +32 -11
  297. package/src/server/operations/http.ts +7 -2
  298. package/src/server/operations/index.ts +4 -0
  299. package/src/server/operations/mcp.ts +32 -1
  300. package/src/server/operations/ops/ax-presence.ts +1 -1
  301. package/src/server/operations/ops/ax-read.ts +57 -6
  302. package/src/server/operations/ops/ax-timeline.ts +28 -2
  303. package/src/server/operations/ops/backup.ts +5 -3
  304. package/src/server/operations/ops/batch.ts +35 -4
  305. package/src/server/operations/ops/boards.ts +188 -47
  306. package/src/server/operations/ops/canvas-wire.ts +31 -1
  307. package/src/server/operations/ops/edges.ts +36 -2
  308. package/src/server/operations/ops/groups.ts +6 -1
  309. package/src/server/operations/ops/json-render.ts +5 -1
  310. package/src/server/operations/ops/lifecycle.ts +262 -0
  311. package/src/server/operations/ops/memory-graph.ts +45 -0
  312. package/src/server/operations/ops/nodes.ts +107 -24
  313. package/src/server/operations/ops/query.ts +281 -68
  314. package/src/server/operations/ops/snapshots.ts +73 -1
  315. package/src/server/operations/ops/validate.ts +5 -1
  316. package/src/server/operations/ops/viewport.ts +97 -3
  317. package/src/server/operations/registry.ts +77 -26
  318. package/src/server/placement.ts +29 -0
  319. package/src/server/scope-fence.ts +78 -6
  320. package/src/server/server.ts +115 -16
  321. package/src/server/spatial-analysis.ts +48 -23
  322. package/src/server/tour-control.ts +82 -0
  323. package/src/server/wiki-links.ts +137 -0
  324. package/src/server/workbench-auth.ts +11 -0
  325. package/src/shared/agent-context.ts +3 -0
  326. package/src/shared/agent-presence.ts +15 -15
  327. package/src/shared/auto-arrange.ts +2 -0
  328. package/src/shared/boards.ts +4 -4
  329. package/src/shared/knowledge-lifecycle.ts +22 -0
  330. package/src/shared/knowledge-presets.ts +80 -0
  331. package/src/shared/lifecycle-status.ts +26 -0
  332. package/src/shared/memory-graph.ts +74 -0
  333. package/src/shared/relations.ts +98 -0
  334. package/src/shared/semantic-attention.ts +15 -1
  335. package/src/shared/tour.ts +23 -5
  336. package/src/shared/workspace-settings.ts +13 -0
  337. package/dist/types/client/canvas/ContextPinBar.d.ts +0 -1
  338. package/dist/types/client/canvas/FocusFieldLayer.d.ts +0 -1
  339. package/dist/types/client/canvas/kind-colors.d.ts +0 -3
  340. package/dist/types/server/agent-context.d.ts +0 -22
  341. package/src/client/canvas/ContextPinBar.tsx +0 -25
@@ -558,6 +558,16 @@ body,
558
558
  background: var(--c-muted);
559
559
  }
560
560
 
561
+ /* An owner must never establish a stacking context. Card bodies own their
562
+ z-order; their sibling port hitboxes sit below every body in the world. */
563
+ .canvas-node-owner {
564
+ position: absolute;
565
+ pointer-events: none;
566
+ }
567
+ .canvas-node-owner > .canvas-node {
568
+ pointer-events: auto;
569
+ }
570
+
561
571
  /* Node card shared styles */
562
572
  .canvas-node {
563
573
  position: absolute;
@@ -571,7 +581,7 @@ body,
571
581
  display: flex;
572
582
  flex-direction: column;
573
583
  overflow: visible;
574
- transition: box-shadow 0.15s ease;
584
+ transition: box-shadow 0.15s ease, opacity 0.15s ease;
575
585
  contain: layout style;
576
586
  }
577
587
 
@@ -601,7 +611,7 @@ body,
601
611
  .canvas-node.neighbor {
602
612
  border-color: color-mix(in srgb, var(--c-accent) 40%, transparent);
603
613
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--c-accent) 30%, transparent), 0 4px 20px color-mix(in srgb, var(--c-accent) 15%, transparent);
604
- transition: border-color 0.2s, box-shadow 0.2s;
614
+ transition: border-color 0.2s, box-shadow 0.2s, opacity 0.15s ease;
605
615
  }
606
616
 
607
617
  /* Spatial search highlighting — canvas lights up as you type in Cmd+K */
@@ -629,35 +639,50 @@ body,
629
639
  place-items: center;
630
640
  opacity: 0;
631
641
  cursor: crosshair;
632
- z-index: 10;
642
+ z-index: var(--node-port-z, -1);
633
643
  touch-action: none;
634
644
  transition: opacity 0.15s;
635
- pointer-events: auto;
645
+ pointer-events: none;
636
646
  }
637
- .node-port::after {
638
- content: '';
639
- width: calc(6px * var(--node-port-scale, 1));
640
- height: calc(6px * var(--node-port-scale, 1));
647
+ .node-port-dot {
648
+ position: absolute;
649
+ pointer-events: none;
650
+ width: calc(8px * var(--node-port-scale, 1));
651
+ height: calc(8px * var(--node-port-scale, 1));
641
652
  border-radius: 50%;
642
653
  background: var(--c-accent);
643
654
  border: calc(2px * var(--node-port-scale, 1)) solid var(--c-panel);
644
655
  box-shadow: 0 0 0 calc(1px * var(--node-port-scale, 1)) var(--c-accent);
656
+ opacity: 0;
657
+ transition: opacity 0.15s;
658
+ z-index: 10;
659
+ }
660
+ .canvas-node-owner:hover > .node-port,
661
+ .canvas-node-owner:has(> .canvas-node.selected) > .node-port,
662
+ .canvas-node-owner:focus-within > .node-port {
663
+ opacity: 1;
664
+ pointer-events: auto;
645
665
  }
646
- .canvas-node:hover .node-port,
647
- .canvas-node.selected .node-port,
648
- .canvas-node:focus-within .node-port {
666
+ .canvas-node-owner:hover .node-port-dot,
667
+ .canvas-node.selected .node-port-dot,
668
+ .canvas-node:focus-within .node-port-dot {
649
669
  opacity: 1;
650
670
  }
651
- .node-port:hover::after {
671
+ .canvas-node-owner:has(> .node-port-top:hover) .node-port-dot-top,
672
+ .canvas-node-owner:has(> .node-port-right:hover) .node-port-dot-right,
673
+ .canvas-node-owner:has(> .node-port-bottom:hover) .node-port-dot-bottom,
674
+ .canvas-node-owner:has(> .node-port-left:hover) .node-port-dot-left {
652
675
  background: var(--c-accent-hover);
653
676
  }
654
- /* Bias vertical grab areas outward so they do not steal title/footer clicks. */
655
- .node-port-top { top: 0; left: 50%; transform: translate(-50%, -75%); }
656
- .node-port-bottom { bottom: 0; left: 50%; transform: translate(-50%, 75%); }
657
- .node-port-top::after { transform: translateY(calc(8px * var(--node-port-scale, 1))); }
658
- .node-port-bottom::after { transform: translateY(calc(-8px * var(--node-port-scale, 1))); }
659
- .node-port-left { left: 0; top: 50%; transform: translate(-50%, -50%); }
660
- .node-port-right { right: 0; top: 50%; transform: translate(50%, -50%); }
677
+ /* Grab outside the card; even at low zoom its title and controls own their pixels. */
678
+ .node-port-top { top: 0; left: 50%; transform: translate(-50%, -100%); }
679
+ .node-port-bottom { bottom: 0; left: 50%; transform: translate(-50%, 100%); }
680
+ .node-port-left { left: 0; top: 50%; transform: translate(-100%, -50%); }
681
+ .node-port-right { right: 0; top: 50%; transform: translate(100%, -50%); }
682
+ .node-port-dot-top { top: 0; left: 50%; transform: translate(-50%, -50%); }
683
+ .node-port-dot-bottom { bottom: 0; left: 50%; transform: translate(-50%, 50%); }
684
+ .node-port-dot-left { left: 0; top: 50%; transform: translate(-50%, -50%); }
685
+ .node-port-dot-right { right: 0; top: 50%; transform: translate(50%, -50%); }
661
686
 
662
687
  .canvas-node .node-titlebar {
663
688
  display: flex;
@@ -683,14 +708,13 @@ body,
683
708
  overflow: hidden;
684
709
  text-overflow: ellipsis;
685
710
  flex: 1;
686
- /* The name is the one thing that must survive a cramped title bar. Everything
687
- else in the bar is flex-shrink: 0, so without a floor the title absorbed all
688
- the pressure and collapsed to an ellipsis on narrow nodes. */
689
- min-width: 9ch;
711
+ /* The title's floor is kept by folding the header's chip (HeaderMarks.dc.html,
712
+ CanvasNode useHeaderFold), not by a CSS minimum. */
690
713
  min-width: 0;
691
714
  }
692
715
 
693
716
  .canvas-node .node-type-icon {
717
+ position: relative;
694
718
  display: inline-flex;
695
719
  align-items: center;
696
720
  justify-content: center;
@@ -775,14 +799,15 @@ body,
775
799
  }
776
800
 
777
801
  /* ⋯ and × appear on hover or keyboard focus; expand and the context pin
778
- always show (docs/design/Chrome.dc.html). */
802
+ always show (docs/design/Chrome.dc.html). Reserve their slots so revealing
803
+ them cannot move the pin out from under the pointer onto Close. */
779
804
  .canvas-node .node-controls .node-hover-control {
780
- display: none;
805
+ visibility: hidden;
781
806
  }
782
807
 
783
808
  .canvas-node:hover .node-controls .node-hover-control,
784
809
  .canvas-node:focus-within .node-controls .node-hover-control {
785
- display: inline-flex;
810
+ visibility: visible;
786
811
  }
787
812
 
788
813
  .canvas-node .node-body {
@@ -1009,6 +1034,8 @@ body,
1009
1034
  .app-main {
1010
1035
  flex: 1;
1011
1036
  min-width: 0;
1037
+ min-height: 0;
1038
+ container-type: inline-size;
1012
1039
  display: flex;
1013
1040
  flex-direction: column;
1014
1041
  }
@@ -1065,6 +1092,154 @@ body,
1065
1092
  min-width: 0;
1066
1093
  }
1067
1094
 
1095
+ /* The right-hand group never shrinks: the context summary stays top-right at
1096
+ every width while the left side (board name) ellipsizes. Narrow bars
1097
+ collapse by step instead (ContextChip600.dc.html): meta text, then the
1098
+ actions into ⋯ More, then the agent chip and Start session to icons. */
1099
+ .top-bar-right {
1100
+ display: flex;
1101
+ align-items: center;
1102
+ gap: 12px;
1103
+ flex-shrink: 0;
1104
+ }
1105
+ .top-bar-actions {
1106
+ display: contents;
1107
+ }
1108
+ .top-bar-more {
1109
+ position: relative;
1110
+ display: none;
1111
+ }
1112
+ .top-bar.is-folded .top-bar-actions,
1113
+ .top-bar.is-folded > .hud-collapsible-text {
1114
+ display: none;
1115
+ }
1116
+ .top-bar.is-folded .top-bar-more {
1117
+ display: inline-flex;
1118
+ }
1119
+ .top-bar.is-compact {
1120
+ gap: 4px;
1121
+ padding-inline: 8px;
1122
+ }
1123
+ .top-bar.is-compact .top-bar-right {
1124
+ gap: 4px;
1125
+ margin-left: auto;
1126
+ }
1127
+ .top-bar.is-compact .board-switcher {
1128
+ min-width: 56px;
1129
+ }
1130
+ .top-bar.is-compact .board-switcher-button {
1131
+ gap: 2px;
1132
+ padding-inline: 2px;
1133
+ }
1134
+ .top-bar.is-compact .agent-chips {
1135
+ gap: 4px;
1136
+ }
1137
+ .top-bar.is-compact .context-chip {
1138
+ gap: 4px;
1139
+ padding-inline: 4px;
1140
+ }
1141
+ .top-bar.is-compact .top-bar-spacer,
1142
+ .top-bar.is-folded .top-bar-sep {
1143
+ display: none;
1144
+ }
1145
+ .top-bar.is-compact .agent-chip {
1146
+ padding: 0;
1147
+ border: none;
1148
+ background: none;
1149
+ }
1150
+ .top-bar.is-compact .start-session-btn {
1151
+ padding: 5px 6px;
1152
+ }
1153
+ .top-bar.is-compact .external-indicator {
1154
+ gap: 4px;
1155
+ padding: 4px 6px;
1156
+ }
1157
+ .top-bar.is-compact .agent-chip > :not(.agent-chip-initial),
1158
+ .top-bar.is-compact .external-indicator-label,
1159
+ .top-bar.is-compact .external-indicator-ops,
1160
+ .top-bar.is-compact .start-session-label,
1161
+ .top-bar.is-compact .start-session-btn .beta-tag,
1162
+ .top-bar.is-compact .context-chip-cost {
1163
+ display: none;
1164
+ }
1165
+ .top-bar.is-compact .agent-chip-initial {
1166
+ display: inline-flex;
1167
+ }
1168
+ .top-bar.is-compact .agent-chip-initial .agent-chip-dot {
1169
+ position: absolute;
1170
+ right: -2px;
1171
+ bottom: -2px;
1172
+ width: 8px;
1173
+ height: 8px;
1174
+ box-shadow: 0 0 0 2px var(--c-panel);
1175
+ }
1176
+ .top-bar-more-menu {
1177
+ position: absolute;
1178
+ top: calc(100% + 8px);
1179
+ right: 0;
1180
+ min-width: 180px;
1181
+ z-index: 60;
1182
+ }
1183
+ @media (max-width: 980px) {
1184
+ .top-bar-actions {
1185
+ display: none;
1186
+ }
1187
+ .top-bar-more {
1188
+ display: inline-flex;
1189
+ }
1190
+ }
1191
+ .agent-chip-initial {
1192
+ display: none;
1193
+ position: relative;
1194
+ width: 24px;
1195
+ height: 24px;
1196
+ padding: 0;
1197
+ border: none;
1198
+ border-radius: 999px;
1199
+ align-items: center;
1200
+ justify-content: center;
1201
+ background: color-mix(in srgb, var(--c-agent) 16%, transparent);
1202
+ box-shadow: inset 0 0 0 1.5px var(--c-agent);
1203
+ color: var(--c-agent);
1204
+ font: 600 11px var(--font-ui);
1205
+ cursor: pointer;
1206
+ }
1207
+ @media (max-width: 760px) {
1208
+ .top-bar-right {
1209
+ gap: 8px;
1210
+ }
1211
+ .agent-chip-label,
1212
+ .agent-chip-workers,
1213
+ .start-session-label,
1214
+ .start-session-btn .beta-tag,
1215
+ .context-chip-cost,
1216
+ .context-panel-wide {
1217
+ display: none;
1218
+ }
1219
+ /* ContextChip600.dc.html: "7 in context C ⋯" — the agent chip shrinks to its
1220
+ initial and follows the summary; ⋯ comes last. */
1221
+ .top-bar-right > .context-chip-wrap {
1222
+ order: 1;
1223
+ }
1224
+ .top-bar-right > .agent-chips {
1225
+ order: 2;
1226
+ }
1227
+ .top-bar-right > .top-bar-more {
1228
+ order: 3;
1229
+ }
1230
+ .agent-chip {
1231
+ padding: 0;
1232
+ border: none;
1233
+ background: none;
1234
+ }
1235
+ .agent-chip > :not(.agent-chip-initial) {
1236
+ display: none;
1237
+ }
1238
+ .agent-chip-initial {
1239
+ display: inline-flex;
1240
+ }
1241
+ }
1242
+
1068
1243
  .top-bar-sep {
1069
1244
  width: 1px;
1070
1245
  height: 20px;
@@ -1112,9 +1287,22 @@ body,
1112
1287
 
1113
1288
  .canvas-region {
1114
1289
  flex: 1;
1290
+ min-width: 0;
1115
1291
  min-height: 0;
1116
1292
  position: relative;
1117
1293
  overflow: hidden;
1294
+ container: canvas / inline-size;
1295
+ }
1296
+
1297
+ .workspace { display: flex; flex: 1; min-width: 0; min-height: 0; overflow: hidden; }
1298
+ .lifecycle-dock { flex: 0 0 380px; min-width: 0; min-height: 0; border-left: 1px solid var(--c-line); background: var(--c-panel); }
1299
+ .lifecycle-dock .knowledge-dialog.lifecycle-dialog { width: 100%; height: 100%; max-height: 100%; border: 0; border-radius: 0; box-shadow: none; }
1300
+ .lifecycle-dock .knowledge-dialog header { position: sticky; top: -16px; z-index: 1; padding-top: 12px; background: var(--c-panel); }
1301
+ .workspace.is-reviewing .expanded-overlay-backdrop { padding: 12px; background: var(--c-bg); }
1302
+ @container (max-width: 900px) {
1303
+ .workspace.is-reviewing { flex-direction: column; }
1304
+ .lifecycle-dock { flex: 0 0 46%; border-left: 0; border-top: 1px solid var(--c-line); }
1305
+ .workspace.is-reviewing .expanded-overlay-backdrop { padding: 8px; }
1118
1306
  }
1119
1307
 
1120
1308
  /* ── Agent presence (rail-chrome-v2 phase 3) ────────────────────
@@ -1212,6 +1400,25 @@ body,
1212
1400
  white-space: nowrap;
1213
1401
  min-width: 0;
1214
1402
  }
1403
+ .agent-chip-touches {
1404
+ height: 20px;
1405
+ padding: 0 8px;
1406
+ border: 1px solid color-mix(in srgb, var(--c-agent) 35%, transparent);
1407
+ border-radius: 999px;
1408
+ background: transparent;
1409
+ color: var(--c-agent);
1410
+ font: 500 11px var(--font-ui);
1411
+ white-space: nowrap;
1412
+ cursor: pointer;
1413
+ }
1414
+ .agent-chip-touches:hover,
1415
+ .agent-chip-touches.is-on {
1416
+ background: color-mix(in srgb, var(--c-agent) 16%, transparent);
1417
+ }
1418
+ .agent-chip-touches:focus-visible {
1419
+ outline: 2px solid var(--c-accent);
1420
+ outline-offset: 2px;
1421
+ }
1215
1422
  .agent-chip-who {
1216
1423
  font: 10px var(--font-code);
1217
1424
  font-weight: 400;
@@ -1304,6 +1511,65 @@ body,
1304
1511
  .agent-chip {
1305
1512
  border-left: 3px solid var(--identity-color, transparent);
1306
1513
  }
1514
+ /* SeeChange.dc.html: the narrow avatar keeps its ring and phase dot;
1515
+ live counts and the lens live in a popover outside the chip's clip. */
1516
+ @media (max-width: 760px) {
1517
+ .agent-chip {
1518
+ padding: 0;
1519
+ border: none;
1520
+ background: none;
1521
+ }
1522
+ .agent-chips {
1523
+ overflow: visible;
1524
+ }
1525
+ .agent-chips .toolbar-tooltip {
1526
+ display: none;
1527
+ }
1528
+ .agent-chip-initial .agent-chip-dot {
1529
+ position: absolute;
1530
+ right: -2px;
1531
+ bottom: -2px;
1532
+ width: 8px;
1533
+ height: 8px;
1534
+ box-shadow: 0 0 0 2px var(--c-panel);
1535
+ }
1536
+ }
1537
+ .agent-session-popover {
1538
+ --presence-color: var(--c-agent);
1539
+ position: fixed;
1540
+ z-index: 10020;
1541
+ width: 240px;
1542
+ padding: var(--space-3);
1543
+ box-sizing: border-box;
1544
+ display: flex;
1545
+ flex-direction: column;
1546
+ align-items: flex-start;
1547
+ gap: var(--space-2);
1548
+ border: 1px solid var(--c-line);
1549
+ border-radius: var(--r-overlay);
1550
+ background: var(--c-panel);
1551
+ box-shadow: var(--e-2);
1552
+ color: var(--c-text);
1553
+ font-size: var(--fs-ui);
1554
+ }
1555
+ .agent-session-popover.phase-idle {
1556
+ --presence-color: var(--c-dim);
1557
+ }
1558
+ .agent-session-popover.phase-waiting-approval {
1559
+ --presence-color: var(--c-warn);
1560
+ }
1561
+ .agent-session-popover-head {
1562
+ display: flex;
1563
+ align-items: center;
1564
+ gap: var(--space-2);
1565
+ }
1566
+ .agent-session-counts {
1567
+ padding: 4px 10px;
1568
+ border-radius: var(--r-pill);
1569
+ background: color-mix(in srgb, var(--c-agent) 14%, transparent);
1570
+ color: var(--c-agent);
1571
+ font-weight: 500;
1572
+ }
1307
1573
  .minimap-presence {
1308
1574
  background: var(--identity-color, var(--presence-color));
1309
1575
  }
@@ -1358,7 +1624,9 @@ body,
1358
1624
 
1359
1625
  /* The node an attached agent is editing right now: the violet agent bar
1360
1626
  across the top of the header (docs/design/Context.dc.html). */
1361
- .canvas-node.agent-mutating .node-titlebar {
1627
+ .canvas-node.agent-mutating .node-titlebar,
1628
+ /* AgentContext.dc.html: "violet bar for the session" on cards the agent edited. */
1629
+ .canvas-node.session-edited .node-titlebar {
1362
1630
  box-shadow: inset 0 2.5px 0 var(--c-agent);
1363
1631
  }
1364
1632
 
@@ -1928,6 +2196,64 @@ body,
1928
2196
  letter-spacing: 0;
1929
2197
  }
1930
2198
 
2199
+ /* Context stays useful with Agent sessions off, without the composer. */
2200
+ .context-pin-bar {
2201
+ position: absolute;
2202
+ left: 50%;
2203
+ bottom: 18px;
2204
+ transform: translateX(-50%);
2205
+ display: flex;
2206
+ align-items: center;
2207
+ gap: 8px;
2208
+ box-sizing: border-box;
2209
+ height: 34px;
2210
+ padding: 0 6px 0 12px;
2211
+ border: 1px solid color-mix(in srgb, var(--c-pin) 30%, transparent);
2212
+ border-radius: var(--r-pill);
2213
+ background: var(--c-panel);
2214
+ color: var(--c-pin);
2215
+ box-shadow: 0 10px 30px var(--c-shadow);
2216
+ font: 500 12px var(--font-ui);
2217
+ white-space: nowrap;
2218
+ z-index: 65;
2219
+ }
2220
+ .context-pin-bar button {
2221
+ display: flex;
2222
+ align-items: center;
2223
+ justify-content: center;
2224
+ width: 22px;
2225
+ height: 22px;
2226
+ padding: 0;
2227
+ border: 0;
2228
+ border-radius: var(--r-pill);
2229
+ background: color-mix(in srgb, var(--c-pin) 14%, transparent);
2230
+ color: var(--c-pin);
2231
+ cursor: pointer;
2232
+ }
2233
+ .context-pin-bar button:hover {
2234
+ background: color-mix(in srgb, var(--c-pin) 24%, transparent);
2235
+ }
2236
+ .canvas-region:has(> .context-pin-bar) > .selection-bar {
2237
+ bottom: 62px;
2238
+ }
2239
+ @container canvas (max-width: 1200px) {
2240
+ .canvas-region:has(> .selection-bar) > .minimap {
2241
+ bottom: calc(28px + var(--selection-bar-height));
2242
+ }
2243
+ .canvas-region:has(> .context-pin-bar) > .minimap {
2244
+ bottom: 62px;
2245
+ }
2246
+ .canvas-region:has(> .context-pin-bar):has(> .selection-bar) > .minimap {
2247
+ bottom: calc(72px + var(--selection-bar-height));
2248
+ }
2249
+ .canvas-region:has(> .command-bar:not([hidden])) > .minimap {
2250
+ bottom: calc(28px + var(--command-bar-height));
2251
+ }
2252
+ .canvas-region:has(> .command-bar:not([hidden])):has(> .selection-bar) > .minimap {
2253
+ bottom: calc(38px + var(--command-bar-height) + var(--selection-bar-height));
2254
+ }
2255
+ }
2256
+
1931
2257
  /* ── Command bar (rail-chrome-v2 phase 5) ─────────────────────
1932
2258
  The human's steering surface while a session is attached: the design's
1933
2259
  floating composer, centered at the bottom of the canvas region, with the
@@ -1959,13 +2285,9 @@ body,
1959
2285
  border: 1px solid color-mix(in srgb, var(--c-pin) 35%, transparent);
1960
2286
  background: color-mix(in srgb, var(--c-pin) 12%, transparent);
1961
2287
  color: var(--c-pin);
1962
- font-size: 10px;
2288
+ font-size: 11px;
1963
2289
  font-weight: 600;
1964
2290
  }
1965
- .command-bar-chip-glyph {
1966
- font-size: 10px;
1967
- line-height: 1;
1968
- }
1969
2291
  .command-bar-chip-label {
1970
2292
  overflow: hidden;
1971
2293
  text-overflow: ellipsis;
@@ -2116,53 +2438,6 @@ body,
2116
2438
  cursor: default;
2117
2439
  }
2118
2440
 
2119
- /* Context-budget meter in the top bar (session-only) */
2120
- .context-budget {
2121
- --tone: var(--c-ok);
2122
- display: inline-flex;
2123
- align-items: center;
2124
- gap: 8px;
2125
- flex-shrink: 0;
2126
- }
2127
- .context-budget.tone-warn {
2128
- --tone: var(--c-warn);
2129
- }
2130
- .context-budget.tone-danger {
2131
- --tone: var(--c-danger);
2132
- }
2133
- .context-budget-caption {
2134
- font-size: 10px;
2135
- font-weight: 600;
2136
- letter-spacing: 0.06em;
2137
- text-transform: uppercase;
2138
- color: var(--c-muted);
2139
- }
2140
- .context-budget-track {
2141
- display: block;
2142
- width: 72px;
2143
- height: 5px;
2144
- border-radius: 3px;
2145
- background: var(--c-line);
2146
- overflow: hidden;
2147
- }
2148
- .context-budget-fill {
2149
- display: block;
2150
- height: 100%;
2151
- border-radius: 3px;
2152
- background: var(--c-accent);
2153
- transition: width 180ms ease;
2154
- }
2155
- .context-budget.tone-warn .context-budget-fill,
2156
- .context-budget.tone-danger .context-budget-fill {
2157
- background: var(--tone);
2158
- }
2159
- .context-budget-label {
2160
- font: 11px var(--font-code);
2161
- color: var(--c-text-soft);
2162
- min-width: 30px;
2163
- text-align: right;
2164
- }
2165
-
2166
2441
  /* ── External Steering (rail-chrome-v2 phase 6) ───────────────
2167
2442
  External writers, no session: a passive top-bar indicator, the activity
2168
2443
  feed popover under it, and the connected-writers sheet. Quiet otherwise. */
@@ -2623,6 +2898,7 @@ body,
2623
2898
  .session-panel button:focus-visible,
2624
2899
  .session-panel input:focus-visible,
2625
2900
  .command-bar button:focus-visible,
2901
+ .context-pin-bar button:focus-visible,
2626
2902
  .command-bar-input:focus-visible,
2627
2903
  .selection-bar button:focus-visible,
2628
2904
  .activity-feed button:focus-visible,
@@ -2673,23 +2949,13 @@ body,
2673
2949
  .start-session-dot {
2674
2950
  animation: none;
2675
2951
  }
2676
- .command-palette,
2677
- .snapshot-panel,
2678
- .session-receipt,
2679
- .canvas-node.group-node,
2680
- .activity-feed,
2681
- .writers-sheet,
2682
- .context-budget-fill {
2683
- animation: none;
2684
- transition: none;
2685
- }
2686
2952
  }
2687
2953
 
2688
2954
  /* ── Edge creation (rail-chrome-v2 item 15) ───────────────────── */
2689
2955
  .canvas-node.is-edge-target {
2690
2956
  box-shadow: 0 0 0 2px var(--c-accent), 0 0 0 6px color-mix(in srgb, var(--c-accent) 18%, transparent);
2691
2957
  }
2692
- .canvas-node.is-edge-target .node-port {
2958
+ .canvas-node.is-edge-target .node-port-dot {
2693
2959
  opacity: 1;
2694
2960
  background: var(--c-accent);
2695
2961
  }
@@ -2828,12 +3094,14 @@ body,
2828
3094
  top: 14px;
2829
3095
  right: 14px;
2830
3096
  width: 290px;
2831
- z-index: 9998;
3097
+ max-height: calc(100% - 28px);
3098
+ overflow-y: auto;
3099
+ z-index: 9996; /* Retained evidence stays below the session drawer and toolbar menus. */
2832
3100
  padding: 12px 14px;
2833
3101
  border-radius: 12px;
2834
3102
  border: 1px solid var(--c-line);
2835
- background: color-mix(in srgb, var(--c-panel) 96%, transparent);
2836
- box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
3103
+ background: var(--c-panel);
3104
+ box-shadow: var(--e-2);
2837
3105
  animation: session-panel-in 180ms ease;
2838
3106
  }
2839
3107
  .session-receipt-head {
@@ -2919,6 +3187,9 @@ body,
2919
3187
  color: var(--c-warn);
2920
3188
  font-size: var(--fs-meta);
2921
3189
  }
3190
+ .session-receipt-warn > span {
3191
+ flex: 1;
3192
+ }
2922
3193
  .session-receipt-warn svg,
2923
3194
  .session-receipt-context-head svg {
2924
3195
  width: 13px;
@@ -2958,25 +3229,108 @@ body,
2958
3229
  font-size: var(--fs-meta);
2959
3230
  color: var(--c-muted);
2960
3231
  }
2961
- .session-receipt-mini {
2962
- padding: 2px var(--space-2);
2963
- border: 1px solid var(--c-line);
2964
- border-radius: var(--r-control);
2965
- background: none;
2966
- color: var(--c-text);
2967
- font-size: var(--fs-meta);
2968
- cursor: pointer;
2969
- }
2970
- .session-receipt-lens {
3232
+ /* Edited row (AgentContext.dc.html): one line per card, what the edit did, See change. */
3233
+ .session-receipt-edits {
3234
+ margin: 0;
3235
+ padding: 0 0 0 19px;
3236
+ list-style: none;
2971
3237
  display: flex;
2972
- align-items: center;
2973
- gap: var(--space-2);
2974
- padding: 0;
2975
- border: none;
2976
- background: none;
2977
- color: var(--c-muted);
3238
+ flex-direction: column;
3239
+ gap: 4px;
2978
3240
  font-size: var(--fs-meta);
2979
- cursor: pointer;
3241
+ color: var(--c-text-soft);
3242
+ }
3243
+ .session-receipt-edit-line {
3244
+ display: flex;
3245
+ align-items: baseline;
3246
+ justify-content: space-between;
3247
+ gap: 8px;
3248
+ }
3249
+ .session-receipt-edit-change {
3250
+ color: var(--c-muted);
3251
+ }
3252
+ .session-receipt-link {
3253
+ flex-shrink: 0;
3254
+ padding: 0;
3255
+ border: 0;
3256
+ background: transparent;
3257
+ color: var(--c-agent);
3258
+ font: inherit;
3259
+ cursor: pointer;
3260
+ }
3261
+ .session-receipt-link:hover {
3262
+ text-decoration: underline;
3263
+ }
3264
+ .session-receipt-diff-pair {
3265
+ display: flex;
3266
+ flex-direction: column;
3267
+ gap: 6px;
3268
+ margin-top: 4px;
3269
+ }
3270
+ .session-receipt-undo {
3271
+ display: flex;
3272
+ flex-direction: column;
3273
+ align-items: flex-start;
3274
+ gap: 3px;
3275
+ }
3276
+ .session-receipt-diff-side {
3277
+ display: flex;
3278
+ flex-direction: column;
3279
+ gap: 2px;
3280
+ min-width: 0;
3281
+ padding: 6px 8px;
3282
+ border-radius: 6px;
3283
+ border: 1px solid var(--c-line);
3284
+ }
3285
+ .session-receipt-diff-label {
3286
+ font-size: 11px;
3287
+ font-weight: 500;
3288
+ color: var(--c-dim);
3289
+ }
3290
+ .session-receipt-diff-text {
3291
+ max-height: 120px;
3292
+ overflow-y: auto;
3293
+ white-space: pre-wrap;
3294
+ overflow-wrap: anywhere;
3295
+ color: var(--c-text);
3296
+ }
3297
+ .session-receipt-diff-text del {
3298
+ color: var(--c-muted);
3299
+ background: var(--c-panel-soft);
3300
+ border-radius: 3px;
3301
+ }
3302
+ .session-receipt-diff-text ins {
3303
+ text-decoration: none;
3304
+ background: color-mix(in srgb, var(--c-agent) 16%, transparent);
3305
+ box-shadow: inset 0 -1.5px 0 var(--c-agent);
3306
+ border-radius: 3px;
3307
+ }
3308
+ .session-receipt-diff-cut {
3309
+ color: var(--c-dim);
3310
+ }
3311
+ .session-receipt-mini {
3312
+ padding: 2px var(--space-2);
3313
+ border: 1px solid var(--c-line);
3314
+ border-radius: var(--r-control);
3315
+ background: none;
3316
+ color: var(--c-text);
3317
+ font-size: var(--fs-meta);
3318
+ cursor: pointer;
3319
+ }
3320
+ .session-receipt-mini:disabled {
3321
+ color: var(--c-dim);
3322
+ cursor: default;
3323
+ }
3324
+ .session-receipt-lens {
3325
+ display: flex;
3326
+ align-items: center;
3327
+ gap: var(--space-2);
3328
+ padding: 0;
3329
+ border: none;
3330
+ background: none;
3331
+ color: var(--c-muted);
3332
+ font-size: var(--fs-meta);
3333
+ cursor: pointer;
2980
3334
  }
2981
3335
  .session-receipt-lens-track {
2982
3336
  position: relative;
@@ -3115,7 +3469,13 @@ body,
3115
3469
  /* The resize handle and connect ports carry their own pointer-events: auto,
3116
3470
  which punches through the inert world — a pan started on them never pans. */
3117
3471
  .canvas-viewport.pan-mode .node-resize-handle,
3118
- .canvas-viewport.pan-mode .node-port {
3472
+ .canvas-viewport.pan-mode .group-frame-hit,
3473
+ .canvas-viewport.pan-mode .edge-pill-hit,
3474
+ .canvas-viewport.pan-mode .canvas-node-owner > .node-port,
3475
+ .canvas-viewport.pan-mode .canvas-node-owner > .canvas-node,
3476
+ .canvas-viewport.pan-mode .canvas-node.group-node .node-titlebar,
3477
+ .canvas-viewport.pan-mode .canvas-node.group-node .node-lifecycle-warning,
3478
+ .canvas-viewport.pan-mode .canvas-node.group-node .node-memory-links {
3119
3479
  pointer-events: none;
3120
3480
  }
3121
3481
  .canvas-viewport.pan-mode:active {
@@ -3419,6 +3779,11 @@ body,
3419
3779
  box-shadow: 0 18px 48px var(--c-shadow-heavy);
3420
3780
  }
3421
3781
 
3782
+ .toolbar-menu.top-bar-more-menu {
3783
+ /* The top bar's backdrop root prevents this menu from blurring the drawer. */
3784
+ background: var(--c-panel);
3785
+ }
3786
+
3422
3787
  .toolbar-menu-item {
3423
3788
  display: flex;
3424
3789
  align-items: center;
@@ -3455,6 +3820,21 @@ body,
3455
3820
  color: var(--c-accent);
3456
3821
  }
3457
3822
 
3823
+ /* Rail Settings menu (docs/design/Chrome.dc.html §7): a muted value or key on the right. */
3824
+ .toolbar-menu-hint {
3825
+ margin-left: auto;
3826
+ color: var(--c-muted);
3827
+ font: 12px var(--font-ui);
3828
+ }
3829
+ kbd.toolbar-menu-hint {
3830
+ font-family: var(--font-code);
3831
+ }
3832
+ .toolbar-menu-divider {
3833
+ height: 1px;
3834
+ margin: 4px 6px;
3835
+ background: var(--c-line);
3836
+ }
3837
+
3458
3838
  .toolbar-menu-separator {
3459
3839
  height: 1px;
3460
3840
  margin: 4px 8px;
@@ -3487,6 +3867,73 @@ body,
3487
3867
  border-radius: 50%;
3488
3868
  }
3489
3869
 
3870
+ .rail-settings-menu {
3871
+ width: min(300px, calc(100vw - 76px));
3872
+ }
3873
+
3874
+ .settings-item-label {
3875
+ display: flex;
3876
+ align-items: center;
3877
+ gap: 6px;
3878
+ }
3879
+
3880
+ .settings-caption,
3881
+ .settings-error {
3882
+ margin: 0;
3883
+ padding: 5px 10px;
3884
+ color: var(--c-muted);
3885
+ font-size: 10px;
3886
+ line-height: 1.5;
3887
+ }
3888
+
3889
+ .settings-error {
3890
+ color: var(--c-danger);
3891
+ }
3892
+
3893
+ .settings-switch {
3894
+ display: block;
3895
+ flex-shrink: 0;
3896
+ margin-left: auto;
3897
+ width: 28px;
3898
+ height: 16px;
3899
+ padding: 2px;
3900
+ border: 1px solid var(--c-line);
3901
+ border-radius: 999px;
3902
+ background: var(--c-panel-soft);
3903
+ }
3904
+
3905
+ .settings-switch::after {
3906
+ content: '';
3907
+ display: block;
3908
+ width: 10px;
3909
+ height: 10px;
3910
+ border-radius: 50%;
3911
+ background: var(--c-muted);
3912
+ }
3913
+
3914
+ .settings-switch.is-on {
3915
+ background: var(--c-accent);
3916
+ border-color: var(--c-accent);
3917
+ }
3918
+
3919
+ .settings-switch.is-on::after {
3920
+ margin-left: auto;
3921
+ background: var(--c-contrast-fg);
3922
+ }
3923
+
3924
+ .toolbar-tooltip.settings-tooltip {
3925
+ position: fixed;
3926
+ width: 280px;
3927
+ min-width: 0;
3928
+ max-width: calc(100vw - 24px);
3929
+ opacity: 1;
3930
+ transform: none;
3931
+ }
3932
+
3933
+ .toolbar-tooltip.settings-tooltip::after {
3934
+ display: none;
3935
+ }
3936
+
3490
3937
 
3491
3938
  @media (max-width: 900px) {
3492
3939
  .toolbar-tooltip {
@@ -3926,6 +4373,9 @@ body,
3926
4373
  }
3927
4374
 
3928
4375
  /* Auto-fit transition */
4376
+ .canvas-node-owner {
4377
+ transition: height 0.2s ease;
4378
+ }
3929
4379
  .canvas-node {
3930
4380
  transition: height 0.2s ease, box-shadow 0.15s ease;
3931
4381
  }
@@ -3976,8 +4426,23 @@ html.is-node-resizing .canvas-node {
3976
4426
  transition: box-shadow 0.15s ease !important;
3977
4427
  }
3978
4428
 
3979
- html.is-node-dragging,
3980
- html.is-node-dragging *,
4429
+ /* One drag curtain keeps the cursor and pointer events over embedded frames
4430
+ without restyling every descendant at pickup and drop on a large board. */
4431
+ html.is-node-dragging .canvas-viewport::after {
4432
+ content: '';
4433
+ position: absolute;
4434
+ inset: 0;
4435
+ z-index: 2147483647;
4436
+ pointer-events: none;
4437
+ cursor: grabbing;
4438
+ user-select: none;
4439
+ }
4440
+
4441
+ /* A click must release on its original target so double-click menus still work. */
4442
+ html.is-node-moving .canvas-viewport::after {
4443
+ pointer-events: auto;
4444
+ }
4445
+
3981
4446
  html.is-canvas-panning,
3982
4447
  html.is-canvas-panning * {
3983
4448
  cursor: grabbing !important;
@@ -4192,6 +4657,86 @@ html.is-node-resizing .ext-app-preview-catcher {
4192
4657
  stroke-width: calc(0.5 * var(--edge-label-scale, 1));
4193
4658
  }
4194
4659
 
4660
+ /* Authorship lives in the hint. A person's new link keeps its muted
4661
+ "not seen by <agent>" state until the agent's next read. */
4662
+ .edge-pill {
4663
+ pointer-events: none;
4664
+ }
4665
+ .edge-pill-hit {
4666
+ pointer-events: all;
4667
+ cursor: pointer;
4668
+ }
4669
+
4670
+ .edge-link-mark {
4671
+ pointer-events: none;
4672
+ font-weight: 500;
4673
+ }
4674
+
4675
+ .edge-link-mark.is-not-seen {
4676
+ color: var(--c-muted);
4677
+ }
4678
+
4679
+ /* The pill's hint, drawn at screen level below the pill. */
4680
+ .toolbar-tooltip.edge-hint {
4681
+ position: fixed;
4682
+ right: auto;
4683
+ bottom: auto;
4684
+ min-width: 0;
4685
+ max-width: min(340px, calc(100vw - 24px));
4686
+ white-space: pre-line;
4687
+ overflow-wrap: anywhere;
4688
+ opacity: 1;
4689
+ transform: translateX(-50%);
4690
+ pointer-events: none;
4691
+ }
4692
+
4693
+ .relation-kind-control { display: grid; gap: 4px; padding: 6px 12px; }
4694
+ .relation-kind-control select,
4695
+ .relation-vocabulary input:not([type="checkbox"]),
4696
+ .relation-vocabulary select {
4697
+ min-width: 0;
4698
+ width: 100%;
4699
+ box-sizing: border-box;
4700
+ border: 1px solid var(--c-line);
4701
+ border-radius: var(--r-control);
4702
+ padding: 6px;
4703
+ font: inherit;
4704
+ background: var(--c-input-bg);
4705
+ color: var(--c-text);
4706
+ }
4707
+ .relation-legend { position: absolute; top: 8px; left: 12px; right: 12px; display: flex; flex-wrap: wrap; align-content: flex-start; gap: 6px; max-height: min(180px, 25%); overflow-x: hidden; overflow-y: auto; }
4708
+ .lifecycle-filters ~ .relation-legend { top: 48px; }
4709
+ .relation-legend > * { pointer-events: auto; flex-shrink: 0; max-width: 100%; height: 24px; box-sizing: border-box; border: 1px solid var(--c-line); border-radius: var(--r-control); background: var(--c-panel); color: var(--c-text); font: 500 11px var(--font-ui); padding: 0 9px; cursor: pointer; }
4710
+ .relation-legend select { background: var(--c-panel-soft); font-weight: 600; padding: 0 10px; }
4711
+ .relation-legend button { display: flex; align-items: center; gap: 6px; min-height: 24px; height: auto; overflow-wrap: anywhere; text-align: left; border-radius: var(--r-pill); }
4712
+ .relation-legend button[aria-pressed="true"] { border-color: var(--relation-ink); }
4713
+ .relation-swatch { width: 14px; height: 2.5px; border-radius: 2px; background: var(--relation-ink); }
4714
+ .relation-count { color: var(--c-muted); font-variant-numeric: tabular-nums; }
4715
+ .expanded-content-row { display: flex; flex: 1; min-height: 0; }
4716
+ .expanded-content-row > .expanded-body { flex: 1; min-width: 0; }
4717
+ .relations-panel {
4718
+ width: 280px;
4719
+ flex: 0 0 280px;
4720
+ padding: 16px;
4721
+ box-sizing: border-box;
4722
+ border-left: 1px solid var(--c-line);
4723
+ overflow: auto;
4724
+ background: var(--c-panel);
4725
+ font-size: var(--fs-ui);
4726
+ }
4727
+ .relations-panel h3 { margin: 0 0 12px; font-size: var(--fs-title); }
4728
+ .relation-row { display: grid; gap: 4px; padding: 12px 0; border-bottom: 1px solid var(--c-line); overflow-wrap: anywhere; }
4729
+ .relation-row h4 { margin: 0 0 4px; font-size: var(--fs-meta); color: var(--c-muted); }
4730
+ .relation-row p, .relation-vocabulary p { margin: 0 0 8px; color: var(--c-muted); font-size: var(--fs-meta); }
4731
+ .relation-target { border: 0; padding: 0; background: none; color: var(--c-text); font: inherit; font-weight: 600; text-align: left; cursor: pointer; }
4732
+ .relation-vocabulary { display: grid; gap: 8px; margin-top: 12px; }
4733
+ .vocabulary-row { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; }
4734
+ @media (max-width: 760px) {
4735
+ .expanded-content-row:has(.relations-panel) { flex-direction: column; overflow: auto; }
4736
+ .expanded-content-row:has(.relations-panel) > .expanded-body { flex: 0 0 240px; }
4737
+ .relations-panel { width: auto; flex: none; border-left: 0; border-top: 1px solid var(--c-line); overflow: visible; }
4738
+ }
4739
+
4195
4740
  /* Trace nodes — compact pills for agent tool/subagent visualization */
4196
4741
  .canvas-node.trace-node {
4197
4742
  border-radius: 28px;
@@ -4384,6 +4929,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4384
4929
  /* MCP app iframe */
4385
4930
  .mcp-app-frame-stack {
4386
4931
  position: relative;
4932
+ isolation: isolate;
4387
4933
  flex: 1;
4388
4934
  min-width: 0;
4389
4935
  min-height: 0;
@@ -4718,13 +5264,9 @@ html.is-node-resizing .ext-app-preview-catcher {
4718
5264
  /* Selection action bar — floating bottom-center of the canvas region
4719
5265
  (rail-chrome-v2 phase 7, item 13). */
4720
5266
  /* In a session the command bar owns the bottom-center slot — lift the
4721
- selection bar clear of it (composer + chips row); on the quiet board the
4722
- pin bar does, so lift past that instead. */
4723
- [data-session-active='true'] .selection-bar {
4724
- bottom: 124px;
4725
- }
4726
- .selection-bar.is-above-pin-bar {
4727
- bottom: 70px;
5267
+ selection bar clear of it (composer + chips row). */
5268
+ .canvas-region:has(> .command-bar:not([hidden])) > .selection-bar {
5269
+ bottom: calc(28px + var(--command-bar-height));
4728
5270
  }
4729
5271
  .selection-bar {
4730
5272
  position: absolute;
@@ -4732,7 +5274,12 @@ html.is-node-resizing .ext-app-preview-catcher {
4732
5274
  left: 50%;
4733
5275
  transform: translateX(-50%);
4734
5276
  display: flex;
5277
+ flex-wrap: wrap;
5278
+ justify-content: center;
4735
5279
  align-items: center;
5280
+ box-sizing: border-box;
5281
+ width: max-content;
5282
+ max-width: calc(100% - 32px);
4736
5283
  gap: 2px;
4737
5284
  padding: 6px 8px;
4738
5285
  background: color-mix(in srgb, var(--c-panel) 97%, transparent);
@@ -5158,7 +5705,24 @@ html.is-node-resizing .ext-app-preview-catcher {
5158
5705
  border-color 150ms ease,
5159
5706
  background 150ms ease;
5160
5707
  }
5161
- .canvas-node.group-node:hover {
5708
+ .canvas-node-owner > .canvas-node.group-node {
5709
+ /* Only the body's transparent hit target sits below child ports. Keep the
5710
+ frame's visual z-order and its existing chrome/menu elevation unchanged. */
5711
+ pointer-events: none;
5712
+ }
5713
+ .group-frame-hit {
5714
+ position: absolute;
5715
+ inset: 0;
5716
+ border-radius: 14px;
5717
+ pointer-events: auto;
5718
+ }
5719
+ .canvas-node.group-node .node-titlebar,
5720
+ .canvas-node.group-node .node-lifecycle-warning,
5721
+ .canvas-node.group-node .node-memory-links {
5722
+ pointer-events: auto;
5723
+ }
5724
+ .canvas-node.group-node:hover,
5725
+ .canvas-node-owner:hover > .canvas-node.group-node {
5162
5726
  border-color: color-mix(in srgb, var(--group-color, var(--c-accent)) 55%, transparent);
5163
5727
  }
5164
5728
  .canvas-node.group-node.active,
@@ -5396,99 +5960,56 @@ html.is-node-resizing .ext-app-preview-catcher {
5396
5960
  color: var(--c-dim);
5397
5961
  }
5398
5962
 
5399
- /* ── Context pin bar — persistent floating indicator ─────────── */
5400
- .context-pin-bar {
5963
+ /* ── Expanded overlay actions ────────────────────────────────── */
5964
+ /* Expanded node view (rail-chrome-v2 phase 7, item 16): scrim + inset panel
5965
+ with 36/48px margins, header with kind pill + pin state, footer strip. */
5966
+ .expanded-overlay-backdrop {
5401
5967
  position: absolute;
5402
- bottom: 18px;
5403
- left: 50%;
5404
- transform: translateX(-50%);
5968
+ inset: 0;
5969
+ z-index: 10001;
5970
+ background: rgba(4, 10, 18, 0.6);
5405
5971
  display: flex;
5406
- align-items: center;
5407
- gap: 8px;
5408
- padding: 8px 14px;
5409
- background: var(--c-panel-glass);
5410
- backdrop-filter: blur(12px);
5411
- border: 1px solid var(--c-pin);
5412
- border-radius: var(--radius);
5413
- box-shadow: 0 8px 32px var(--c-shadow), 0 0 0 1px color-mix(in srgb, var(--c-pin) 15%, transparent);
5414
- z-index: 64;
5415
- white-space: nowrap;
5972
+ align-items: stretch;
5973
+ justify-content: center;
5974
+ padding: 36px 48px;
5416
5975
  }
5417
-
5418
- .context-pin-bar-count {
5419
- font-size: 12px;
5420
- font-weight: 600;
5421
- color: var(--c-pin);
5976
+ .expanded-overlay-panel {
5977
+ flex: 1;
5978
+ max-width: 1400px;
5979
+ display: flex;
5980
+ flex-direction: column;
5981
+ background: var(--c-panel);
5982
+ border: 1px solid var(--c-line);
5983
+ border-radius: 14px;
5984
+ box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6);
5985
+ overflow: hidden;
5422
5986
  }
5423
-
5424
- .context-pin-bar-btn {
5425
- padding: 5px 12px;
5426
- font-size: 12px;
5427
- font-weight: 600;
5428
- background: color-mix(in srgb, var(--c-pin) 10%, transparent);
5429
- border: 1px solid color-mix(in srgb, var(--c-pin) 30%, transparent);
5430
- border-radius: var(--radius-sm);
5431
- color: var(--c-pin);
5432
- cursor: pointer;
5433
- font-family: var(--font-ui);
5987
+ .expanded-overlay-panel.is-pinned {
5988
+ border-color: color-mix(in srgb, var(--c-pin) 45%, var(--c-line));
5434
5989
  }
5435
-
5436
- .context-pin-bar-btn:hover {
5437
- background: color-mix(in srgb, var(--c-pin) 20%, transparent);
5438
- border-color: var(--c-pin);
5990
+ .expanded-overlay-panel .ax-step-dock {
5991
+ /* Its sticky/backdrop-filter context must paint hints above the Source FAB. */
5992
+ z-index: 2;
5439
5993
  }
5440
-
5441
- .context-pin-bar-ask {
5442
- background: var(--c-pin);
5443
- color: var(--c-on-pin);
5444
- border-color: var(--c-pin);
5445
- }
5446
-
5447
- .context-pin-bar-ask:hover {
5448
- background: color-mix(in srgb, var(--c-pin) 85%, var(--c-text));
5449
- border-color: color-mix(in srgb, var(--c-pin) 85%, var(--c-text));
5450
- }
5451
-
5452
- .context-pin-bar-clear {
5453
- background: none;
5454
- border: none;
5455
- color: var(--c-muted);
5456
- font-size: 16px;
5457
- padding: 2px 6px;
5458
- line-height: 1;
5459
- }
5460
-
5461
- .context-pin-bar-clear:hover {
5462
- color: var(--c-text);
5463
- background: var(--c-surface-hover);
5464
- }
5465
-
5466
- /* ── Expanded overlay actions ────────────────────────────────── */
5467
- /* Expanded node view (rail-chrome-v2 phase 7, item 16): scrim + inset panel
5468
- with 36/48px margins, header with kind pill + pin state, footer strip. */
5469
- .expanded-overlay-backdrop {
5470
- position: absolute;
5471
- inset: 0;
5472
- z-index: 10001;
5473
- background: rgba(4, 10, 18, 0.6);
5994
+ .expanded-overlay-panel:has(.ax-step-dock) .md-expanded-document {
5474
5995
  display: flex;
5475
- align-items: stretch;
5476
- justify-content: center;
5477
- padding: 36px 48px;
5996
+ flex-direction: column;
5478
5997
  }
5479
- .expanded-overlay-panel {
5998
+ .expanded-overlay-panel:has(.ax-step-dock) .md-reader {
5480
5999
  flex: 1;
5481
- max-width: 1400px;
5482
- display: flex;
5483
- flex-direction: column;
5484
- background: var(--c-panel);
5485
- border: 1px solid var(--c-line);
5486
- border-radius: 14px;
5487
- box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6);
5488
- overflow: hidden;
6000
+ min-height: 0;
5489
6001
  }
5490
- .expanded-overlay-panel.is-pinned {
5491
- border-color: color-mix(in srgb, var(--c-pin) 45%, var(--c-line));
6002
+ .expanded-overlay-panel:has(.ax-step-dock) .md-edit-fab {
6003
+ /* Keep Source and the document out of the bottom dock's hint area. */
6004
+ position: static;
6005
+ order: -1;
6006
+ align-self: flex-end;
6007
+ flex-shrink: 0;
6008
+ margin-bottom: 16px;
6009
+ }
6010
+ .ax-step-dock:has(.toolbar-tooltip-anchor:hover) .toolbar-tooltip-anchor:not(:hover) > :focus-visible + .toolbar-tooltip {
6011
+ /* Pointer exploration temporarily takes precedence without moving keyboard focus. */
6012
+ opacity: 0;
5492
6013
  }
5493
6014
  .expanded-header {
5494
6015
  display: flex;
@@ -5728,8 +6249,22 @@ html.is-node-resizing .ext-app-preview-catcher {
5728
6249
  background: color-mix(in srgb, var(--c-warn) 14%, transparent);
5729
6250
  }
5730
6251
 
6252
+ /* Folded to its glyph when the title needs the room (HeaderMarks.dc.html): a
6253
+ 22 px round chip, the word in its hint. */
6254
+ .node-context-mark.is-glyph,
6255
+ .node-near-mark.is-glyph {
6256
+ justify-content: center;
6257
+ width: calc(22px * var(--node-chrome-scale, 1));
6258
+ height: calc(22px * var(--node-chrome-scale, 1));
6259
+ padding: 0;
6260
+ box-sizing: border-box;
6261
+ }
6262
+
5731
6263
  /* Near a pin (docs/design/NearPin.dc.html): dotted, weaker than in context. */
5732
6264
  .node-near-mark {
6265
+ background: none;
6266
+ font-family: inherit;
6267
+ cursor: pointer;
5733
6268
  display: inline-flex;
5734
6269
  align-items: center;
5735
6270
  gap: calc(4px * var(--node-chrome-scale, 1));
@@ -5756,6 +6291,139 @@ html.is-node-resizing .ext-app-preview-catcher {
5756
6291
  .node-near-dot {
5757
6292
  fill: currentColor;
5758
6293
  }
6294
+ /* §3 the moment it changes: preview while dragged, one pulse on a drop inside, fade on a drop outside. */
6295
+ .node-near-mark.is-preview {
6296
+ opacity: 0.6;
6297
+ }
6298
+ .node-near-mark.is-pulse {
6299
+ animation: near-pulse 0.9s ease-out 1;
6300
+ }
6301
+ .node-near-mark.is-fading {
6302
+ animation: near-fade 0.9s ease-in 1 forwards;
6303
+ }
6304
+ @keyframes near-pulse {
6305
+ 0%,
6306
+ 100% {
6307
+ background: transparent;
6308
+ box-shadow: none;
6309
+ }
6310
+ 35% {
6311
+ background: color-mix(in srgb, var(--c-pin) 18%, transparent);
6312
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--c-pin) 12%, transparent);
6313
+ }
6314
+ }
6315
+ @keyframes near-fade {
6316
+ to {
6317
+ opacity: 0;
6318
+ }
6319
+ }
6320
+ /* §2 hover a near chip: the pins by distance, then Pin / Show pins. Lives
6321
+ over the canvas, not in the node: .node-content paints contained. */
6322
+ .near-hint {
6323
+ position: fixed;
6324
+ overflow-y: auto;
6325
+ box-sizing: border-box;
6326
+ z-index: 10010;
6327
+ display: flex;
6328
+ flex-direction: column;
6329
+ gap: 6px;
6330
+ width: 240px;
6331
+ padding: 12px 14px;
6332
+ border-radius: 10px;
6333
+ border: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
6334
+ background: color-mix(in srgb, var(--c-panel) 92%, black 8%);
6335
+ box-shadow: 0 14px 36px var(--c-shadow-heavy);
6336
+ color: var(--c-text);
6337
+ }
6338
+ .near-hint-label {
6339
+ font-size: 12px;
6340
+ font-weight: 600;
6341
+ }
6342
+ .near-hint-row {
6343
+ display: flex;
6344
+ justify-content: space-between;
6345
+ gap: 12px;
6346
+ font-size: 12px;
6347
+ }
6348
+ .near-hint-title {
6349
+ overflow: hidden;
6350
+ text-overflow: ellipsis;
6351
+ white-space: nowrap;
6352
+ }
6353
+ .near-hint-distance {
6354
+ flex-shrink: 0;
6355
+ font-family: var(--font-code);
6356
+ font-size: 11px;
6357
+ color: var(--c-muted);
6358
+ }
6359
+ .near-hint-body {
6360
+ font-size: 11px;
6361
+ line-height: 1.45;
6362
+ color: var(--c-text-soft);
6363
+ }
6364
+ .near-hint-actions {
6365
+ display: flex;
6366
+ gap: 6px;
6367
+ }
6368
+ .near-hint-actions button {
6369
+ height: 26px;
6370
+ padding: 0 10px;
6371
+ border-radius: 6px;
6372
+ font: inherit;
6373
+ font-size: 11px;
6374
+ cursor: pointer;
6375
+ }
6376
+ .near-hint-pin {
6377
+ border: 0;
6378
+ background: var(--c-pin);
6379
+ color: var(--c-contrast-fg);
6380
+ font-weight: 600;
6381
+ }
6382
+ .near-hint-show {
6383
+ border: 1px solid var(--c-line);
6384
+ background: transparent;
6385
+ color: var(--c-text);
6386
+ }
6387
+ .near-hint-show[aria-pressed='true'] {
6388
+ border-color: var(--c-pin);
6389
+ color: var(--c-pin);
6390
+ }
6391
+
6392
+ /* §2 which pin: tethers and the 600 px radius, in screen space over the world. */
6393
+ .near-pin-layer {
6394
+ position: absolute;
6395
+ inset: 0;
6396
+ width: 100%;
6397
+ height: 100%;
6398
+ overflow: visible;
6399
+ pointer-events: none;
6400
+ z-index: 5;
6401
+ }
6402
+ .near-pin-radius {
6403
+ fill: none;
6404
+ stroke: color-mix(in srgb, var(--c-pin) 25%, transparent);
6405
+ stroke-width: 1.5;
6406
+ stroke-dasharray: 3 6;
6407
+ }
6408
+ .near-pin-tether path {
6409
+ fill: none;
6410
+ stroke: var(--c-pin);
6411
+ stroke-width: 1.5;
6412
+ stroke-dasharray: 2 5;
6413
+ stroke-linecap: round;
6414
+ }
6415
+ .near-pin-number {
6416
+ fill: var(--c-bg);
6417
+ stroke: var(--c-pin);
6418
+ stroke-dasharray: 1.5 2;
6419
+ }
6420
+ .near-pin-number-label {
6421
+ fill: var(--c-pin);
6422
+ font-size: 11px;
6423
+ font-weight: 600;
6424
+ text-anchor: middle;
6425
+ dominant-baseline: central;
6426
+ }
5759
6427
 
5760
6428
  /* Pinned by an agent: a violet dot on the pin badge. */
5761
6429
  .ctx-pin-mark {
@@ -5799,6 +6467,31 @@ html.is-node-resizing .ext-app-preview-catcher {
5799
6467
  color: var(--c-on-pin);
5800
6468
  }
5801
6469
 
6470
+ /* Board pins (docs/design/BoardPins.dc.html): the card pin's mark on a bare
6471
+ 22 px hit target, on Home cards, the switcher, portal cards and the top bar. */
6472
+ .board-pin-btn {
6473
+ width: 22px;
6474
+ height: 22px;
6475
+ padding: 0;
6476
+ border: 0;
6477
+ background: transparent;
6478
+ display: inline-flex;
6479
+ align-items: center;
6480
+ justify-content: center;
6481
+ flex-shrink: 0;
6482
+ cursor: pointer;
6483
+ border-radius: var(--r-pill);
6484
+ }
6485
+ .board-pin-btn:focus-visible {
6486
+ outline: 2px solid var(--c-pin);
6487
+ outline-offset: 1px;
6488
+ }
6489
+ .board-pin-btn .ctx-pin-mark {
6490
+ width: 18px;
6491
+ height: 18px;
6492
+ font-size: 10px;
6493
+ }
6494
+
5802
6495
  /* ── Context pin HUD — top-right pill ────────────────────────── */
5803
6496
  .context-pin-hud {
5804
6497
  display: flex;
@@ -6426,6 +7119,10 @@ html.is-node-resizing .ext-app-preview-catcher {
6426
7119
  z-index: 5;
6427
7120
  width: 560px;
6428
7121
  max-width: calc(100% - 48px);
7122
+ max-height: calc(100% - 48px);
7123
+ overflow-y: auto;
7124
+ box-sizing: border-box;
7125
+ padding: 2px;
6429
7126
  display: flex;
6430
7127
  flex-direction: column;
6431
7128
  align-items: center;
@@ -6433,6 +7130,9 @@ html.is-node-resizing .ext-app-preview-catcher {
6433
7130
  text-align: center;
6434
7131
  animation: empty-state-in 0.4s ease-out;
6435
7132
  }
7133
+ .empty-state > * {
7134
+ flex-shrink: 0;
7135
+ }
6436
7136
  @keyframes empty-state-in {
6437
7137
  from {
6438
7138
  opacity: 0;
@@ -6463,7 +7163,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6463
7163
  }
6464
7164
  .empty-state-grid {
6465
7165
  display: grid;
6466
- grid-template-columns: 1fr 1fr;
7166
+ grid-template-columns: minmax(0, 1fr);
6467
7167
  gap: 10px;
6468
7168
  width: 100%;
6469
7169
  }
@@ -6483,6 +7183,9 @@ html.is-node-resizing .ext-app-preview-catcher {
6483
7183
  .empty-state-action:hover {
6484
7184
  border-color: color-mix(in srgb, var(--c-accent) 40%, transparent);
6485
7185
  }
7186
+ .empty-state-action > svg {
7187
+ flex-shrink: 0;
7188
+ }
6486
7189
  .empty-state-action.is-agent:hover {
6487
7190
  border-color: color-mix(in srgb, var(--c-agent) 45%, transparent);
6488
7191
  }
@@ -6500,8 +7203,31 @@ html.is-node-resizing .ext-app-preview-catcher {
6500
7203
  }
6501
7204
  .empty-state-action-label {
6502
7205
  flex: 1;
7206
+ min-width: 0;
7207
+ font-size: 12px;
7208
+ font-weight: 600;
7209
+ }
7210
+ .empty-state-action-description {
7211
+ display: block;
7212
+ margin-top: 4px;
7213
+ font-size: 12px;
7214
+ font-weight: 400;
7215
+ line-height: 1.5;
7216
+ color: var(--c-muted);
7217
+ }
7218
+ .empty-state-agent {
7219
+ width: 100%;
7220
+ padding-top: 16px;
7221
+ border-top: 1px solid var(--c-line);
7222
+ }
7223
+ .empty-state-agent-title {
6503
7224
  font-size: 12px;
6504
7225
  font-weight: 600;
7226
+ color: var(--c-text-soft);
7227
+ }
7228
+ .empty-state-agent .is-agent {
7229
+ width: 100%;
7230
+ margin-top: 12px;
6505
7231
  }
6506
7232
  .empty-state-action kbd {
6507
7233
  padding: 1px 6px;
@@ -7003,7 +7729,8 @@ html.is-node-dragging .intent-line-layer {
7003
7729
  cursor: pointer;
7004
7730
  }
7005
7731
  .is-presenting > :not(.app-main):not(.presentation-error):not(.presentation-navigation),
7006
- .is-presenting .app-main > :not(.canvas-region),
7732
+ .is-presenting .app-main > :not(.workspace),
7733
+ .is-presenting .workspace > :not(.canvas-region),
7007
7734
  .is-presenting .canvas-region > :not(.canvas-viewport) {
7008
7735
  display: none !important;
7009
7736
  }
@@ -7044,9 +7771,9 @@ html.is-node-dragging .intent-line-layer {
7044
7771
  display: inline-flex;
7045
7772
  align-items: center;
7046
7773
  gap: 6px;
7047
- max-width: 280px;
7774
+ min-width: 0;
7775
+ max-width: min(280px, 100%);
7048
7776
  padding: 6px 8px;
7049
- margin-left: -8px;
7050
7777
  background: none;
7051
7778
  border: 1px solid transparent;
7052
7779
  border-radius: 8px;
@@ -7085,6 +7812,8 @@ html.is-node-dragging .intent-line-layer {
7085
7812
  flex-shrink: 0;
7086
7813
  }
7087
7814
  .board-switcher-recents { min-height: 0; overflow-y: auto; }
7815
+ .board-switcher-row { display: flex; align-items: center; gap: 4px; padding-right: 8px; }
7816
+ .board-switcher-row > .toolbar-menu-item { flex: 1; min-width: 0; }
7088
7817
  .board-switcher-menu .toolbar-menu-item { padding: 10px; gap: 12px; }
7089
7818
  .board-switcher-menu .toolbar-menu-item:hover,
7090
7819
  .board-switcher-menu .toolbar-menu-item:focus-visible {
@@ -7111,161 +7840,35 @@ html.is-node-dragging .intent-line-layer {
7111
7840
  }
7112
7841
  .board-switcher-actions { border-top: 1px solid var(--c-line); margin-top: 6px; padding-top: 6px; flex-shrink: 0; }
7113
7842
 
7114
- .home-view {
7115
- position: absolute;
7116
- inset: 0;
7117
- /* Above the canvas's floating chrome (the updates tab sits at 60), below menus and prompts. */
7118
- z-index: 70;
7119
- overflow-y: auto;
7120
- background: var(--c-bg);
7121
- padding: 32px 16px;
7122
- }
7123
- .home-view-inner {
7124
- max-width: 720px;
7125
- margin: 0 auto;
7126
- display: flex;
7127
- flex-direction: column;
7128
- gap: 18px;
7129
- }
7130
- .home-view-head {
7131
- display: flex;
7132
- align-items: center;
7133
- justify-content: space-between;
7134
- gap: 12px;
7135
- }
7136
- .home-view-title {
7137
- margin: 0;
7138
- font-size: 20px;
7139
- font-weight: 650;
7140
- color: var(--c-text);
7843
+ .board-switcher-button:focus-visible {
7844
+ outline: 2px solid var(--c-accent);
7845
+ outline-offset: 2px;
7141
7846
  }
7142
- .home-view-new {
7143
- padding: 7px 14px;
7144
- border-radius: 8px;
7145
- border: 1px solid var(--c-accent);
7146
- background: var(--c-accent);
7147
- color: var(--c-bg);
7148
- font-weight: 600;
7149
- cursor: pointer;
7847
+
7848
+ /* ── Board export dialog (plan 013) ── */
7849
+ .export-dialog {
7850
+ width: min(520px, calc(100% - 32px));
7150
7851
  }
7151
- .home-view-empty {
7852
+ .export-dialog-note {
7853
+ font-size: 12px;
7152
7854
  color: var(--c-text-soft);
7153
- font-size: 13px;
7154
7855
  }
7155
- .home-view-list {
7156
- list-style: none;
7856
+ .export-dialog-list {
7157
7857
  margin: 0;
7158
- padding: 0;
7858
+ padding-left: 18px;
7859
+ font-size: 13px;
7860
+ color: var(--c-text);
7159
7861
  display: flex;
7160
7862
  flex-direction: column;
7161
- gap: 7px;
7863
+ gap: 4px;
7162
7864
  }
7163
- .home-board {
7865
+ .export-dialog-files {
7164
7866
  display: flex;
7165
- align-items: center;
7166
7867
  gap: 8px;
7167
- padding: 7px 8px 7px 5px;
7168
- border: 1px solid var(--c-line);
7169
- border-radius: 10px;
7170
- background: var(--c-panel);
7171
- }
7172
- .home-board.is-confirming {
7173
- border-color: var(--c-danger);
7174
- padding: 10px 12px;
7175
- flex-wrap: wrap;
7176
- }
7177
- .home-board-open {
7178
- flex: 1;
7179
- min-width: 0;
7180
- display: flex;
7181
- flex-direction: column;
7182
7868
  align-items: flex-start;
7183
- gap: 2px;
7184
- padding: 6px 8px;
7185
- background: none;
7186
- border: none;
7187
- border-radius: 8px;
7869
+ font-size: 12px;
7188
7870
  color: var(--c-text);
7189
- cursor: pointer;
7190
- text-align: left;
7191
- }
7192
- .home-board-open:hover {
7193
- background: color-mix(in srgb, var(--c-accent) 10%, transparent);
7194
- }
7195
- .home-board-name {
7196
- max-width: 100%;
7197
- font-size: 14px;
7198
- font-weight: 600;
7199
- overflow: hidden;
7200
- text-overflow: ellipsis;
7201
- white-space: nowrap;
7202
- }
7203
- .home-board-meta {
7204
- font: 11px var(--font-code);
7205
- color: var(--c-text-soft);
7206
- }
7207
- .home-board-confirm-text {
7208
- flex: 1 1 240px;
7209
- font-size: 13px;
7210
- color: var(--c-text);
7211
- }
7212
- .home-board-actions {
7213
- display: flex;
7214
- gap: 2px;
7215
- flex-shrink: 0;
7216
- }
7217
- .home-board-action {
7218
- padding: 6px 7px;
7219
- border-radius: 6px;
7220
- border: 1px solid transparent;
7221
- background: none;
7222
- color: var(--c-dim);
7223
- font-size: 11px;
7224
- cursor: pointer;
7225
- }
7226
- .home-board-action:hover {
7227
- border-color: var(--c-line);
7228
- background: color-mix(in srgb, var(--c-text) 5%, transparent);
7229
- color: var(--c-text-soft);
7230
- }
7231
- .home-board-action.is-danger {
7232
- border-color: var(--c-danger);
7233
- background: var(--c-danger);
7234
- color: var(--c-bg);
7235
- font-weight: 600;
7236
- }
7237
- .home-board-open:focus-visible,
7238
- .home-board-action:focus-visible,
7239
- .home-view-new:focus-visible,
7240
- .board-switcher-button:focus-visible {
7241
- outline: 2px solid var(--c-accent);
7242
- outline-offset: 2px;
7243
- }
7244
-
7245
- /* ── Board export dialog (plan 013) ── */
7246
- .export-dialog {
7247
- width: min(520px, calc(100% - 32px));
7248
- }
7249
- .export-dialog-note {
7250
- font-size: 12px;
7251
- color: var(--c-text-soft);
7252
- }
7253
- .export-dialog-list {
7254
- margin: 0;
7255
- padding-left: 18px;
7256
- font-size: 13px;
7257
- color: var(--c-text);
7258
- display: flex;
7259
- flex-direction: column;
7260
- gap: 4px;
7261
- }
7262
- .export-dialog-files {
7263
- display: flex;
7264
- gap: 8px;
7265
- align-items: flex-start;
7266
- font-size: 12px;
7267
- color: var(--c-text);
7268
- word-break: break-all;
7871
+ word-break: break-all;
7269
7872
  }
7270
7873
  .export-dialog-result {
7271
7874
  font-size: 12px;
@@ -7290,204 +7893,1850 @@ html.is-node-dragging .intent-line-layer {
7290
7893
  word-break: normal;
7291
7894
  }
7292
7895
 
7293
- /* ── Home categories ── */
7294
- .home-section {
7896
+ /* Visually hidden, still read by assistive tech. */
7897
+ .sr-only {
7898
+ position: absolute;
7899
+ width: 1px;
7900
+ height: 1px;
7901
+ overflow: hidden;
7902
+ clip: rect(0 0 0 0);
7903
+ white-space: nowrap;
7904
+ }
7905
+
7906
+ /* ── Home (docs/design/Home.dc.html; Pane600.dc.html at ≤ 760 px) ──
7907
+ Library tree left, the folder's subfolders and board cards in the middle,
7908
+ the selected board's details right. Folders carry no colour. */
7909
+ .home-view {
7910
+ position: absolute;
7911
+ inset: 0;
7912
+ display: grid;
7913
+ grid-template-columns: 256px minmax(0, 1fr);
7914
+ background: var(--c-bg);
7915
+ color: var(--c-text);
7916
+ font-family: var(--font-ui);
7917
+ overflow: hidden;
7918
+ }
7919
+ .home-view.has-details {
7920
+ grid-template-columns: 256px minmax(0, 1fr) 280px;
7921
+ }
7922
+ .home-library,
7923
+ .home-details {
7295
7924
  display: flex;
7296
7925
  flex-direction: column;
7297
- gap: 8px;
7926
+ gap: 16px;
7927
+ min-height: 0;
7928
+ overflow-y: auto;
7929
+ box-sizing: border-box;
7930
+ background: color-mix(in srgb, var(--c-bg) 60%, var(--c-panel));
7298
7931
  }
7299
- .home-section-head {
7932
+ .home-library {
7933
+ padding: 16px 12px;
7934
+ border-right: 1px solid var(--c-line);
7935
+ }
7936
+ .home-library-head {
7300
7937
  display: flex;
7301
7938
  align-items: center;
7302
- gap: 9px;
7303
- min-height: 42px;
7304
- width: 100%;
7305
- padding: 9px 10px;
7306
- background: none;
7307
- border: none;
7308
- border-radius: 8px;
7309
- color: var(--c-text-soft);
7310
- font-size: 12px;
7939
+ justify-content: space-between;
7940
+ padding: 0 4px;
7941
+ }
7942
+ .home-library-title {
7943
+ font-size: 15px;
7311
7944
  font-weight: 600;
7312
- text-transform: uppercase;
7313
- letter-spacing: 0.06em;
7314
- cursor: pointer;
7315
- text-align: left;
7316
7945
  }
7317
- .home-section-head:hover {
7318
- color: var(--c-text);
7319
- background: color-mix(in srgb, var(--c-text) 5%, transparent);
7946
+ .home-search {
7947
+ display: flex;
7948
+ align-items: center;
7949
+ gap: 8px;
7950
+ height: 32px;
7951
+ padding: 0 10px;
7952
+ border-radius: 6px;
7953
+ border: 1px solid var(--c-line);
7954
+ background: var(--c-panel);
7955
+ color: var(--c-muted);
7320
7956
  }
7321
- .home-section-chevron,
7322
- .home-section-folder {
7323
- flex: 0 0 18px;
7324
- stroke: currentColor;
7325
- stroke-width: 1.75;
7326
- stroke-linecap: round;
7327
- stroke-linejoin: round;
7957
+ .home-search svg {
7958
+ width: 14px;
7959
+ height: 14px;
7960
+ flex-shrink: 0;
7328
7961
  }
7329
- .home-section-chevron {
7330
- transition: transform 120ms ease;
7962
+ .home-search input {
7963
+ flex: 1;
7964
+ min-width: 0;
7965
+ border: 0;
7966
+ outline: none;
7967
+ background: transparent;
7968
+ color: var(--c-text);
7969
+ font: inherit;
7970
+ font-size: 12px;
7331
7971
  }
7332
- .home-section-head[aria-expanded='true'] .home-section-chevron {
7333
- transform: rotate(90deg);
7972
+ .home-search:focus-within {
7973
+ border-color: var(--c-accent);
7334
7974
  }
7335
- .home-section-folder { color: var(--c-dim); }
7336
- .home-section-count {
7337
- font: 11px var(--font-code);
7338
- text-transform: none;
7339
- color: var(--c-dim);
7340
- margin-left: auto;
7975
+ .home-library-section {
7976
+ display: flex;
7977
+ flex-direction: column;
7978
+ gap: 2px;
7341
7979
  }
7342
- .home-section-head:focus-visible {
7343
- outline: 2px solid var(--c-accent);
7344
- outline-offset: 2px;
7980
+ .home-library-section.is-folders {
7981
+ flex: 1;
7345
7982
  }
7346
- .home-section-head {
7347
- text-transform: none;
7348
- letter-spacing: normal;
7349
- max-width: 100%;
7983
+ .home-section-label {
7984
+ padding: 0 8px 4px;
7985
+ font-size: 11px;
7986
+ font-weight: 500;
7987
+ letter-spacing: 0.06em;
7988
+ text-transform: uppercase;
7989
+ color: var(--c-dim);
7350
7990
  }
7351
- .home-section-name {
7352
- font-size: 13px;
7353
- font-weight: 650;
7354
- overflow-wrap: anywhere;
7991
+ .home-main-section .home-section-label {
7992
+ padding: 0;
7355
7993
  }
7356
- .home-folder-children {
7994
+ .home-tree,
7995
+ .home-pinned {
7996
+ margin: 0;
7997
+ padding: 0;
7998
+ list-style: none;
7357
7999
  display: flex;
7358
8000
  flex-direction: column;
7359
- gap: 10px;
7360
- padding-left: 12px;
7361
- border-left: 1px solid var(--c-line);
7362
- }
7363
- .home-search { width: 100%; box-sizing: border-box; }
7364
- .board-copy-dialog,
7365
- .board-link-dialog {
7366
- width: min(540px, calc(100vw - 32px));
7367
- max-height: calc(100dvh - 40px);
7368
- overflow-y: auto;
7369
- box-sizing: border-box;
8001
+ gap: 2px;
7370
8002
  }
7371
- .board-copy-dialog form,
7372
- .board-copy-field,
7373
- .board-copy-options {
8003
+ .home-tree-row,
8004
+ .home-pinned-row,
8005
+ .home-tree-new {
7374
8006
  display: flex;
7375
- flex-direction: column;
8007
+ align-items: center;
7376
8008
  gap: 8px;
8009
+ height: 30px;
8010
+ padding: 0 8px;
8011
+ border: 0;
8012
+ border-radius: 6px;
8013
+ background: transparent;
8014
+ color: var(--c-text);
8015
+ font: inherit;
8016
+ text-align: left;
7377
8017
  }
7378
- .board-copy-dialog h2,
7379
- .board-link-dialog h2 { margin: 0 0 12px; font-size: 17px; }
7380
- .board-copy-field { color: var(--c-text-soft); font-size: 12px; }
7381
- .board-copy-cards {
7382
- margin: 14px 0;
7383
- padding: 8px;
7384
- border: 1px solid var(--c-line);
7385
- border-radius: 9px;
7386
- max-height: 230px;
7387
- overflow-y: auto;
8018
+ .home-tree-row:hover,
8019
+ .home-pinned-row:hover {
8020
+ background: color-mix(in srgb, var(--c-panel) 70%, transparent);
7388
8021
  }
7389
- .board-copy-cards legend { color: var(--c-text-soft); font-size: 12px; }
7390
- .board-copy-card {
8022
+ .home-tree-row.is-selected {
8023
+ background: var(--c-panel);
8024
+ }
8025
+ .home-tree-indent {
8026
+ flex-shrink: 0;
8027
+ }
8028
+ .home-tree-chevron {
7391
8029
  display: flex;
7392
8030
  align-items: center;
7393
- gap: 9px;
7394
- padding: 8px;
7395
- border-radius: 7px;
8031
+ justify-content: center;
8032
+ width: 16px;
8033
+ height: 16px;
8034
+ flex-shrink: 0;
8035
+ padding: 0;
8036
+ border: 0;
8037
+ background: transparent;
8038
+ color: var(--c-muted);
7396
8039
  cursor: pointer;
7397
8040
  }
7398
- .board-copy-card:hover { background: color-mix(in srgb, var(--c-accent) 9%, transparent); }
7399
- .board-copy-card span { display: flex; flex-direction: column; min-width: 0; }
7400
- .board-copy-card strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
7401
- .board-copy-card small,
7402
- .board-link-results small { color: var(--c-text-soft); font: 11px var(--font-code); }
7403
- .board-copy-options { font-size: 13px; }
7404
- .board-copy-options label { display: flex; gap: 8px; align-items: center; }
7405
- .board-copy-note,
7406
- .board-copy-status { color: var(--c-text-soft); font-size: 12px; line-height: 1.5; }
7407
- .board-copy-error { color: var(--c-danger); font-size: 12px; margin-top: 8px; }
7408
- .board-link-results { display: flex; flex-direction: column; gap: 5px; margin: 12px 0; padding: 0; max-height: 320px; overflow-y: auto; list-style: none; }
7409
- .board-link-results button { width: 100%; display: flex; justify-content: space-between; gap: 12px; padding: 10px; border: 1px solid var(--c-line); border-radius: 8px; background: var(--c-panel); color: var(--c-text); text-align: left; cursor: pointer; }
7410
- .board-link-results button:hover,
7411
- .board-link-results button:focus-visible { border-color: var(--c-accent); outline: none; }
7412
- .home-folder-dialog {
7413
- width: min(460px, calc(100vw - 32px));
7414
- max-height: calc(100dvh - 48px);
7415
- overflow-y: auto;
7416
- box-sizing: border-box;
8041
+ .home-tree-chevron svg {
8042
+ width: 12px;
8043
+ height: 12px;
7417
8044
  }
7418
- .home-folder-hint {
7419
- color: var(--c-text-soft);
8045
+ .home-tree-name,
8046
+ .home-pinned-name {
8047
+ flex: 1;
8048
+ min-width: 0;
8049
+ overflow: hidden;
8050
+ text-overflow: ellipsis;
8051
+ white-space: nowrap;
8052
+ padding: 0;
8053
+ border: 0;
8054
+ background: transparent;
8055
+ color: inherit;
8056
+ font: inherit;
7420
8057
  font-size: 12px;
7421
- line-height: 1.5;
7422
- overflow-wrap: anywhere;
7423
- }
7424
- .home-folder-options {
7425
- margin: 12px 0;
7426
- padding: 8px;
7427
- border: 1px solid var(--c-line);
7428
- border-radius: 8px;
7429
- max-height: 240px;
7430
- overflow-y: auto;
8058
+ font-weight: 500;
8059
+ text-align: left;
8060
+ cursor: pointer;
7431
8061
  }
7432
- .home-folder-options legend { color: var(--c-text-soft); font-size: 12px; }
7433
- .home-folder-option {
7434
- display: flex;
7435
- align-items: center;
7436
- gap: 8px;
7437
- padding: 8px;
7438
- border-radius: 6px;
7439
- font-size: 13px;
7440
- overflow-wrap: anywhere;
8062
+ .home-pinned-row {
8063
+ width: 100%;
7441
8064
  cursor: pointer;
7442
8065
  }
7443
- .home-folder-option:has(input:checked) { background: color-mix(in srgb, var(--c-accent) 12%, transparent); }
7444
- .home-folder-option input { accent-color: var(--c-accent); flex-shrink: 0; }
7445
- .home-folder-new { display: flex; flex-direction: column; gap: 6px; font-size: 12px; overflow-wrap: anywhere; }
7446
- .attachment-node { padding: 16px; display: flex; flex-direction: column; align-items: flex-start; gap: 10px; font-size: 13px; overflow: auto; height: 100%; box-sizing: border-box; }
7447
- .attachment-node p { margin: 0; color: var(--c-text-soft); line-height: 1.5; }
7448
- .attachment-node a, .md-import-source a { color: var(--c-accent); }
7449
- .attachment-status { font-weight: 600; }
7450
- .attachment-button,
7451
- .presentation-exit,
7452
- .export-dialog-links a {
7453
- min-height: 38px;
7454
- padding: 8px 14px;
7455
- border: 1px solid var(--c-text-soft);
8066
+ .home-tree-row.is-unfiled .home-tree-name {
8067
+ color: var(--c-text-soft);
8068
+ }
8069
+ .home-tree-pin {
8070
+ width: 6px;
8071
+ height: 6px;
8072
+ border-radius: 999px;
8073
+ background: var(--c-pin);
8074
+ flex-shrink: 0;
8075
+ }
8076
+ .home-tree-count,
8077
+ .home-pinned-cost {
8078
+ font-size: 11px;
8079
+ color: var(--c-dim);
8080
+ font-variant-numeric: tabular-nums;
8081
+ white-space: nowrap;
8082
+ }
8083
+ .home-pinned-cost {
8084
+ padding: 2px 8px 0 32px;
8085
+ }
8086
+ .home-tree-new {
8087
+ margin-top: 4px;
8088
+ color: var(--c-muted);
8089
+ font-size: 12px;
8090
+ cursor: pointer;
8091
+ }
8092
+ .home-pin-dot {
8093
+ display: flex;
8094
+ align-items: center;
8095
+ justify-content: center;
8096
+ width: 16px;
8097
+ height: 16px;
8098
+ border-radius: 999px;
8099
+ background: var(--c-pin);
8100
+ color: var(--c-bg);
8101
+ flex-shrink: 0;
8102
+ }
8103
+ .home-pin-dot svg {
8104
+ width: 9px;
8105
+ height: 9px;
8106
+ }
8107
+ .home-main {
8108
+ display: flex;
8109
+ flex-direction: column;
8110
+ gap: 20px;
8111
+ min-width: 0;
8112
+ min-height: 0;
8113
+ padding: 24px 32px;
8114
+ overflow-y: auto;
8115
+ box-sizing: border-box;
8116
+ }
8117
+ .home-main-head {
8118
+ display: flex;
8119
+ flex-wrap: wrap;
8120
+ align-items: flex-start;
8121
+ gap: 16px;
8122
+ }
8123
+ .home-main-title {
8124
+ flex: 1 1 240px;
8125
+ min-width: 0;
8126
+ }
8127
+ .home-crumbs {
8128
+ display: flex;
8129
+ flex-wrap: wrap;
8130
+ font-size: 12px;
8131
+ color: var(--c-dim);
8132
+ }
8133
+ .home-crumbs button {
8134
+ padding: 0;
8135
+ border: 0;
8136
+ background: transparent;
8137
+ color: inherit;
8138
+ font: inherit;
8139
+ cursor: pointer;
8140
+ }
8141
+ .home-crumbs > span:last-child button {
8142
+ color: var(--c-text-soft);
8143
+ }
8144
+ .home-crumb-sep {
8145
+ margin: 0 6px;
8146
+ opacity: 0.6;
8147
+ }
8148
+ .home-view-title {
8149
+ margin: 2px 0 0;
8150
+ font-size: 20px;
8151
+ line-height: 28px;
8152
+ font-weight: 600;
8153
+ overflow-wrap: anywhere;
8154
+ }
8155
+ .home-main-section {
8156
+ display: flex;
8157
+ flex-direction: column;
8158
+ gap: 10px;
8159
+ }
8160
+ .home-folders,
8161
+ .home-cards,
8162
+ .home-hits {
8163
+ margin: 0;
8164
+ padding: 0;
8165
+ list-style: none;
8166
+ display: grid;
8167
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
8168
+ gap: 16px;
8169
+ }
8170
+ .home-hits {
8171
+ grid-template-columns: 1fr;
8172
+ gap: 6px;
8173
+ }
8174
+ .home-folder {
8175
+ position: relative;
8176
+ display: flex;
8177
+ flex-direction: column;
8178
+ justify-content: flex-end;
8179
+ gap: 2px;
8180
+ width: 100%;
8181
+ height: 112px;
8182
+ box-sizing: border-box;
8183
+ padding: 14px;
8184
+ border-radius: 10px;
8185
+ border: 1px solid var(--c-line);
8186
+ background: var(--c-panel);
8187
+ color: var(--c-text);
8188
+ font: inherit;
8189
+ text-align: left;
8190
+ overflow: hidden;
8191
+ cursor: pointer;
8192
+ }
8193
+ .home-folder:hover,
8194
+ .home-card:hover {
8195
+ border-color: color-mix(in srgb, var(--c-line) 50%, var(--c-accent));
8196
+ }
8197
+ .home-folder-stack span {
8198
+ position: absolute;
8199
+ width: 56px;
8200
+ height: 36px;
8201
+ border-radius: 4px;
8202
+ border: 1px solid var(--c-line);
8203
+ background: color-mix(in srgb, var(--c-panel) 80%, var(--c-text) 4%);
8204
+ }
8205
+ .home-folder-stack span:nth-child(1) { left: 14px; top: 14px; }
8206
+ .home-folder-stack span:nth-child(2) { left: 22px; top: 20px; }
8207
+ .home-folder-stack span:nth-child(3) { left: 30px; top: 26px; }
8208
+ .home-folder-context {
8209
+ position: absolute;
8210
+ right: 12px;
8211
+ top: 12px;
8212
+ height: 20px;
8213
+ padding: 0 8px;
8214
+ border-radius: 999px;
8215
+ background: color-mix(in srgb, var(--c-pin) 12%, transparent);
8216
+ color: var(--c-pin);
8217
+ font-size: 11px;
8218
+ font-weight: 500;
8219
+ line-height: 20px;
8220
+ }
8221
+ .home-folder-name {
8222
+ font-size: 13px;
8223
+ font-weight: 600;
8224
+ }
8225
+ .home-folder-meta {
8226
+ font-size: 11px;
8227
+ color: var(--c-muted);
8228
+ }
8229
+ .home-card {
8230
+ position: relative;
8231
+ border-radius: 10px;
8232
+ border: 1px solid var(--c-line);
8233
+ background: var(--c-panel);
8234
+ box-shadow: 0 1px 2px var(--c-shadow);
8235
+ overflow: hidden;
8236
+ }
8237
+ .home-card.is-pinned {
8238
+ border: 1.5px solid var(--c-pin);
8239
+ }
8240
+ .home-card.is-selected {
8241
+ outline: 2px solid var(--c-accent);
8242
+ outline-offset: 2px;
8243
+ }
8244
+ .home-card-select {
8245
+ display: flex;
8246
+ flex-direction: column;
8247
+ width: 100%;
8248
+ padding: 0;
8249
+ border: 0;
8250
+ background: transparent;
8251
+ color: inherit;
8252
+ font: inherit;
8253
+ text-align: left;
8254
+ cursor: pointer;
8255
+ }
8256
+ .home-card .board-pin-btn {
8257
+ position: absolute;
8258
+ right: 10px;
8259
+ top: 10px;
8260
+ }
8261
+ .home-thumb {
8262
+ position: relative;
8263
+ width: 100%;
8264
+ height: 128px;
8265
+ box-sizing: border-box;
8266
+ border-bottom: 1px solid var(--c-line);
8267
+ background-color: var(--c-bg);
8268
+ background-image: radial-gradient(color-mix(in srgb, var(--c-muted) 18%, transparent) 1px, transparent 1.2px);
8269
+ background-size: 12px 12px;
8270
+ }
8271
+ /* The board's extent, drawn inside a 16 px margin. */
8272
+ .home-thumb-inner {
8273
+ position: absolute;
8274
+ inset: 16px;
8275
+ }
8276
+ .home-thumb-card {
8277
+ position: absolute;
8278
+ box-sizing: border-box;
8279
+ min-width: 3px;
8280
+ min-height: 3px;
8281
+ border-radius: 3px;
8282
+ border: 1px solid var(--c-line);
8283
+ background: var(--c-panel);
8284
+ }
8285
+ .home-thumb-card.is-pinned {
8286
+ border-color: var(--c-pin);
8287
+ }
8288
+ .home-card-body,
8289
+ .home-hit {
8290
+ display: flex;
8291
+ flex-direction: column;
8292
+ gap: 6px;
8293
+ padding: 12px 14px;
8294
+ min-width: 0;
8295
+ }
8296
+ .home-hit {
8297
+ width: 100%;
8298
+ gap: 2px;
8299
+ border: 1px solid var(--c-line);
8300
+ border-radius: 8px;
8301
+ background: var(--c-panel);
8302
+ color: var(--c-text);
8303
+ font: inherit;
8304
+ text-align: left;
8305
+ cursor: pointer;
8306
+ }
8307
+ .home-card-name {
8308
+ font-size: 13px;
8309
+ font-weight: 600;
8310
+ overflow: hidden;
8311
+ text-overflow: ellipsis;
8312
+ white-space: nowrap;
8313
+ }
8314
+ .home-card-readme {
8315
+ height: 33px;
8316
+ overflow: hidden;
8317
+ font-size: 11px;
8318
+ line-height: 1.5;
8319
+ color: var(--c-text-soft);
8320
+ }
8321
+ .home-card-meta {
8322
+ display: flex;
8323
+ gap: 10px;
8324
+ font-size: 11px;
8325
+ color: var(--c-dim);
8326
+ overflow: hidden;
8327
+ white-space: nowrap;
8328
+ }
8329
+ .home-card-when {
8330
+ margin-left: auto;
8331
+ }
8332
+ .home-review-link, .home-card-review {
8333
+ border: 0;
8334
+ background: transparent;
8335
+ color: var(--c-warn);
8336
+ font: 12px var(--font-ui);
8337
+ text-align: left;
8338
+ cursor: pointer;
8339
+ }
8340
+ .home-review-link { padding: 0; color: var(--c-text-soft); text-decoration: underline; text-underline-offset: 3px; }
8341
+ .home-review-link.has-review { color: var(--c-warn); }
8342
+ .home-card-review { margin: 0 14px 12px; padding: 0; }
8343
+ .home-review-link:focus-visible, .home-card-review:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 3px; }
8344
+ .home-details {
8345
+ padding: 20px 18px;
8346
+ border-left: 1px solid var(--c-line);
8347
+ }
8348
+ .home-details-grip {
8349
+ display: none;
8350
+ }
8351
+ .home-details-head {
8352
+ display: flex;
8353
+ flex-direction: column;
8354
+ gap: 2px;
8355
+ }
8356
+ .home-details-folder {
8357
+ font-size: 11px;
8358
+ color: var(--c-dim);
8359
+ }
8360
+ .home-details-name {
8361
+ font-size: 15px;
8362
+ font-weight: 600;
8363
+ overflow-wrap: anywhere;
8364
+ }
8365
+ .home-details-context {
8366
+ display: flex;
8367
+ align-items: center;
8368
+ justify-content: space-between;
8369
+ gap: 10px;
8370
+ padding: 10px 12px;
7456
8371
  border-radius: 8px;
8372
+ border: 1px solid var(--c-line);
8373
+ }
8374
+ .home-details-context.is-on {
8375
+ border-color: color-mix(in srgb, var(--c-pin) 30%, transparent);
8376
+ background: color-mix(in srgb, var(--c-pin) 8%, transparent);
8377
+ }
8378
+ .home-details-context-text {
8379
+ display: flex;
8380
+ flex-direction: column;
8381
+ min-width: 0;
8382
+ }
8383
+ .home-details-context-label {
8384
+ font-size: 12px;
8385
+ font-weight: 600;
8386
+ }
8387
+ .home-details-context.is-on .home-details-context-label {
8388
+ color: var(--c-pin);
8389
+ }
8390
+ .home-switch {
8391
+ position: relative;
8392
+ width: 32px;
8393
+ height: 18px;
8394
+ flex-shrink: 0;
8395
+ padding: 0;
8396
+ border: 0;
8397
+ border-radius: 999px;
8398
+ background: var(--c-line);
8399
+ cursor: pointer;
8400
+ }
8401
+ .home-switch[aria-checked='true'] {
8402
+ background: var(--c-pin);
8403
+ }
8404
+ .home-switch-knob {
8405
+ position: absolute;
8406
+ left: 2px;
8407
+ top: 2px;
8408
+ width: 14px;
8409
+ height: 14px;
8410
+ border-radius: 999px;
8411
+ background: var(--c-bg);
8412
+ transition: left 0.12s ease;
8413
+ }
8414
+ .home-switch[aria-checked='true'] .home-switch-knob {
8415
+ left: 16px;
8416
+ }
8417
+ .home-details-actions {
8418
+ margin-top: 0;
8419
+ display: flex;
8420
+ gap: 8px;
8421
+ }
8422
+ .home-details-confirm {
8423
+ margin-top: auto;
8424
+ display: flex;
8425
+ flex-direction: column;
8426
+ gap: 10px;
8427
+ font-size: 12px;
8428
+ line-height: 1.5;
8429
+ }
8430
+ .home-details-confirm .home-details-actions {
8431
+ margin-top: 0;
8432
+ }
8433
+ .home-button {
8434
+ height: 34px;
8435
+ padding: 0 14px;
8436
+ border-radius: 6px;
8437
+ border: 1px solid var(--c-line);
8438
+ background: var(--c-panel);
8439
+ color: var(--c-text);
8440
+ font: inherit;
8441
+ font-size: 12px;
8442
+ font-weight: 500;
8443
+ cursor: pointer;
8444
+ flex-shrink: 0;
8445
+ }
8446
+ .home-button.is-primary {
8447
+ border: 0;
8448
+ background: var(--c-pin);
8449
+ color: var(--c-bg);
8450
+ font-weight: 600;
8451
+ }
8452
+ .home-details-actions .home-button.is-primary {
8453
+ flex: 1;
8454
+ white-space: nowrap;
8455
+ }
8456
+ .home-main-head .home-button {
8457
+ height: 32px;
8458
+ }
8459
+ .home-button.is-icon {
8460
+ width: 34px;
8461
+ padding: 0;
8462
+ display: flex;
8463
+ align-items: center;
8464
+ justify-content: center;
8465
+ }
8466
+ .home-button.is-icon svg {
8467
+ width: 16px;
8468
+ height: 16px;
8469
+ }
8470
+ .home-button.is-danger {
8471
+ border-color: color-mix(in srgb, var(--c-danger) 50%, transparent);
8472
+ color: var(--c-danger);
8473
+ }
8474
+ .home-more {
8475
+ position: relative;
8476
+ }
8477
+ .home-more-menu {
8478
+ position: absolute;
8479
+ right: 0;
8480
+ bottom: calc(100% + 6px);
8481
+ display: flex;
8482
+ flex-direction: column;
8483
+ min-width: 160px;
8484
+ padding: 4px;
8485
+ border-radius: 8px;
8486
+ border: 1px solid var(--c-line);
8487
+ background: var(--c-panel);
8488
+ box-shadow: 0 10px 30px var(--c-shadow-heavy);
8489
+ z-index: 2;
8490
+ }
8491
+ .home-more-item {
8492
+ height: 30px;
8493
+ padding: 0 10px;
8494
+ border: 0;
8495
+ border-radius: 6px;
8496
+ background: transparent;
8497
+ color: var(--c-text);
8498
+ font: inherit;
8499
+ font-size: 12px;
8500
+ text-align: left;
8501
+ cursor: pointer;
8502
+ }
8503
+ .home-more-item:hover {
8504
+ background: color-mix(in srgb, var(--c-accent) 12%, transparent);
8505
+ }
8506
+ .home-view-empty {
8507
+ font-size: 13px;
8508
+ color: var(--c-text-soft);
8509
+ }
8510
+ .home-narrow {
8511
+ display: none;
8512
+ }
8513
+ .home-tree-row button:focus-visible,
8514
+ .home-pinned-row:focus-visible,
8515
+ .home-tree-new:focus-visible,
8516
+ .home-folder:focus-visible,
8517
+ .home-card-select:focus-visible,
8518
+ .home-button:focus-visible,
8519
+ .home-switch:focus-visible,
8520
+ .home-more-item:focus-visible,
8521
+ .home-hit:focus-visible,
8522
+ .home-crumbs button:focus-visible {
8523
+ outline: 2px solid var(--c-accent);
8524
+ outline-offset: 2px;
8525
+ }
8526
+ /* Pane600.dc.html: one column; the tree is a folder picker, pins a banner,
8527
+ boards a list, details a bottom sheet. */
8528
+ @media (max-width: 760px) {
8529
+ .home-view,
8530
+ .home-view.has-details {
8531
+ grid-template-columns: minmax(0, 1fr);
8532
+ }
8533
+ .home-library {
8534
+ display: none;
8535
+ }
8536
+ .home-library.is-open {
8537
+ display: flex;
8538
+ position: absolute;
8539
+ left: 12px;
8540
+ right: 12px;
8541
+ top: 120px;
8542
+ max-height: 60%;
8543
+ z-index: 3;
8544
+ border: 1px solid var(--c-line);
8545
+ border-radius: 10px;
8546
+ box-shadow: 0 14px 36px var(--c-shadow-heavy);
8547
+ }
8548
+ .home-library.is-open .home-library-head,
8549
+ .home-library.is-open .home-search,
8550
+ .home-library.is-open .home-library-section:not(.is-folders) {
8551
+ display: none;
8552
+ }
8553
+ .home-main {
8554
+ padding: 12px 12px 160px;
8555
+ gap: 12px;
8556
+ }
8557
+ .home-narrow {
8558
+ display: flex;
8559
+ flex-direction: column;
8560
+ gap: 8px;
8561
+ }
8562
+ .home-narrow-context {
8563
+ display: flex;
8564
+ align-items: center;
8565
+ gap: 8px;
8566
+ padding: 8px 10px;
8567
+ border-radius: 8px;
8568
+ border: 1px solid color-mix(in srgb, var(--c-pin) 30%, transparent);
8569
+ background: color-mix(in srgb, var(--c-pin) 8%, transparent);
8570
+ color: var(--c-muted);
8571
+ font: inherit;
8572
+ font-size: 12px;
8573
+ text-align: left;
8574
+ cursor: pointer;
8575
+ }
8576
+ .home-narrow-context-label {
8577
+ color: var(--c-pin);
8578
+ font-weight: 600;
8579
+ }
8580
+ .home-narrow-context-cost {
8581
+ flex: 1;
8582
+ }
8583
+ .home-narrow-picker {
8584
+ align-self: flex-start;
8585
+ display: flex;
8586
+ align-items: center;
8587
+ gap: 6px;
8588
+ height: 30px;
8589
+ padding: 0 10px;
8590
+ border-radius: 6px;
8591
+ border: 1px solid var(--c-line);
8592
+ background: var(--c-panel);
8593
+ color: var(--c-text);
8594
+ font: inherit;
8595
+ font-size: 13px;
8596
+ font-weight: 600;
8597
+ cursor: pointer;
8598
+ }
8599
+ .home-main-head .home-button {
8600
+ height: 30px;
8601
+ }
8602
+ .home-folders {
8603
+ display: flex;
8604
+ gap: 8px;
8605
+ overflow-x: auto;
8606
+ }
8607
+ .home-folder {
8608
+ flex-direction: row;
8609
+ align-items: center;
8610
+ width: auto;
8611
+ height: 30px;
8612
+ padding: 0 12px;
8613
+ border-radius: 999px;
8614
+ white-space: nowrap;
8615
+ }
8616
+ .home-folder-stack,
8617
+ .home-folder-context {
8618
+ display: none;
8619
+ }
8620
+ .home-folder-meta::before {
8621
+ content: ' · ';
8622
+ }
8623
+ .home-cards {
8624
+ grid-template-columns: minmax(0, 1fr);
8625
+ gap: 8px;
8626
+ }
8627
+ .home-card-select {
8628
+ flex-direction: row;
8629
+ gap: 12px;
8630
+ padding: 10px;
8631
+ }
8632
+ .home-thumb {
8633
+ width: 96px;
8634
+ height: 64px;
8635
+ flex-shrink: 0;
8636
+ border: 1px solid var(--c-line);
8637
+ border-radius: 6px;
8638
+ background-size: 8px 8px;
8639
+ }
8640
+ .home-thumb-inner {
8641
+ inset: 6px;
8642
+ }
8643
+ .home-card-body {
8644
+ padding: 0 28px 0 0;
8645
+ gap: 2px;
8646
+ }
8647
+ .home-card-readme {
8648
+ height: auto;
8649
+ white-space: nowrap;
8650
+ text-overflow: ellipsis;
8651
+ }
8652
+ .home-details {
8653
+ position: absolute;
8654
+ left: 0;
8655
+ right: 0;
8656
+ bottom: 0;
8657
+ max-height: 70%;
8658
+ padding: 12px;
8659
+ gap: 10px;
8660
+ border-left: 0;
8661
+ border-top: 1px solid var(--c-line);
8662
+ border-radius: 14px 14px 0 0;
8663
+ box-shadow: 0 -10px 30px var(--c-shadow-heavy);
8664
+ z-index: 3;
8665
+ }
8666
+ .home-details-grip {
8667
+ display: block;
8668
+ align-self: center;
8669
+ box-sizing: content-box;
8670
+ width: 36px;
8671
+ height: 4px;
8672
+ /* A 4 px bar is the look; the padding makes the tap target. */
8673
+ padding: 10px 12px;
8674
+ margin: -10px 0;
8675
+ border: 0;
8676
+ border-radius: 999px;
8677
+ background: var(--c-line);
8678
+ background-clip: content-box;
8679
+ cursor: pointer;
8680
+ }
8681
+ }
8682
+ .board-copy-dialog,
8683
+ .board-link-dialog {
8684
+ width: min(540px, calc(100vw - 32px));
8685
+ max-height: calc(100dvh - 40px);
8686
+ overflow-y: auto;
8687
+ box-sizing: border-box;
8688
+ }
8689
+ .board-copy-dialog form,
8690
+ .board-copy-field,
8691
+ .board-copy-options {
8692
+ display: flex;
8693
+ flex-direction: column;
8694
+ gap: 8px;
8695
+ }
8696
+ .board-copy-dialog h2,
8697
+ .board-link-dialog h2 { margin: 0 0 12px; font-size: 17px; }
8698
+ .board-copy-field { color: var(--c-text-soft); font-size: 12px; }
8699
+ .board-copy-cards {
8700
+ margin: 14px 0;
8701
+ padding: 8px;
8702
+ border: 1px solid var(--c-line);
8703
+ border-radius: 9px;
8704
+ max-height: 230px;
8705
+ overflow-y: auto;
8706
+ }
8707
+ .board-copy-cards legend { color: var(--c-text-soft); font-size: 12px; }
8708
+ .board-copy-card {
8709
+ display: flex;
8710
+ align-items: center;
8711
+ gap: 9px;
8712
+ padding: 8px;
8713
+ border-radius: 7px;
8714
+ cursor: pointer;
8715
+ }
8716
+ .board-copy-card:hover { background: color-mix(in srgb, var(--c-accent) 9%, transparent); }
8717
+ .board-copy-card span { display: flex; flex-direction: column; min-width: 0; }
8718
+ .board-copy-card strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
8719
+ .board-copy-card small,
8720
+ .board-link-results small { color: var(--c-text-soft); font: 11px var(--font-code); }
8721
+ .board-copy-options { font-size: 13px; }
8722
+ .board-copy-options label { display: flex; gap: 8px; align-items: center; }
8723
+ .board-copy-note,
8724
+ .board-copy-status { color: var(--c-text-soft); font-size: 12px; line-height: 1.5; }
8725
+ .board-copy-error { color: var(--c-danger); font-size: 12px; margin-top: 8px; }
8726
+ .board-link-results { display: flex; flex-direction: column; gap: 5px; margin: 12px 0; padding: 0; max-height: 320px; overflow-y: auto; list-style: none; }
8727
+ .board-link-results button { width: 100%; display: flex; justify-content: space-between; gap: 12px; padding: 10px; border: 1px solid var(--c-line); border-radius: 8px; background: var(--c-panel); color: var(--c-text); text-align: left; cursor: pointer; }
8728
+ .board-link-results button:hover,
8729
+ .board-link-results button:focus-visible { border-color: var(--c-accent); outline: none; }
8730
+ .home-folder-dialog {
8731
+ width: min(460px, calc(100vw - 32px));
8732
+ max-height: calc(100dvh - 48px);
8733
+ overflow-y: auto;
8734
+ box-sizing: border-box;
8735
+ }
8736
+ .home-folder-hint {
8737
+ color: var(--c-text-soft);
8738
+ font-size: 12px;
8739
+ line-height: 1.5;
8740
+ overflow-wrap: anywhere;
8741
+ }
8742
+ .home-folder-options {
8743
+ margin: 12px 0;
8744
+ padding: 8px;
8745
+ border: 1px solid var(--c-line);
8746
+ border-radius: 8px;
8747
+ max-height: 240px;
8748
+ overflow-y: auto;
8749
+ }
8750
+ .home-folder-options legend { color: var(--c-text-soft); font-size: 12px; }
8751
+ .home-folder-option {
8752
+ display: flex;
8753
+ align-items: center;
8754
+ gap: 8px;
8755
+ padding: 8px;
8756
+ border-radius: 6px;
8757
+ font-size: 13px;
8758
+ overflow-wrap: anywhere;
8759
+ cursor: pointer;
8760
+ }
8761
+ .home-folder-option:has(input:checked) { background: color-mix(in srgb, var(--c-accent) 12%, transparent); }
8762
+ .home-folder-option input { accent-color: var(--c-accent); flex-shrink: 0; }
8763
+ .home-folder-new { display: flex; flex-direction: column; gap: 6px; font-size: 12px; overflow-wrap: anywhere; }
8764
+ .attachment-node { padding: 16px; display: flex; flex-direction: column; align-items: flex-start; gap: 10px; font-size: 13px; overflow: auto; height: 100%; box-sizing: border-box; }
8765
+ .attachment-node p { margin: 0; color: var(--c-text-soft); line-height: 1.5; }
8766
+ .attachment-node a, .md-import-source a { color: var(--c-accent); }
8767
+ .attachment-status { font-weight: 600; }
8768
+ .attachment-button,
8769
+ .presentation-exit,
8770
+ .export-dialog-links a {
8771
+ min-height: 38px;
8772
+ padding: 8px 14px;
8773
+ border: 1px solid var(--c-text-soft);
8774
+ border-radius: 8px;
8775
+ background: var(--c-panel);
8776
+ color: var(--c-text);
8777
+ font: inherit;
8778
+ font-weight: 600;
8779
+ cursor: pointer;
8780
+ }
8781
+ .attachment-button.is-primary,
8782
+ .export-dialog-links a.is-primary { background: var(--c-accent); border-color: var(--c-accent); color: var(--c-bg); }
8783
+ .attachment-button:hover:not(:disabled),
8784
+ .presentation-exit:hover,
8785
+ .export-dialog-links a:hover { filter: brightness(1.12); }
8786
+ .attachment-button:focus-visible,
8787
+ .presentation-exit:focus-visible,
8788
+ .export-dialog-links a:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 3px; }
8789
+ .attachment-button:disabled { opacity: 0.5; cursor: default; }
8790
+ .attachment-review { width: 100%; border-top: 1px solid var(--c-line); padding-top: 12px; }
8791
+ .attachment-review-actions {
8792
+ position: sticky;
8793
+ bottom: -16px;
8794
+ display: flex;
8795
+ flex-wrap: wrap;
8796
+ justify-content: flex-end;
8797
+ gap: 12px;
8798
+ margin-top: 24px;
8799
+ padding: 16px 0;
8800
+ border-top: 1px solid var(--c-line);
8801
+ background: var(--c-panel);
8802
+ z-index: 1;
8803
+ }
8804
+ .attachment-review pre { white-space: pre-wrap; overflow-wrap: anywhere; font: 12px/1.6 var(--font-code); padding: 12px; background: var(--c-bg); border-radius: 8px; }
8805
+ .attachment-review h4 { margin-bottom: 6px; }
8806
+ .md-import-source { padding: 6px 12px; font-size: 11px; overflow-wrap: anywhere; color: var(--c-text-soft); border-top: 1px solid var(--c-line); }
8807
+ @media (max-width: 640px) {
8808
+ .home-board { flex-wrap: wrap; }
8809
+ .home-board-open { flex-basis: 100%; }
8810
+ .home-board-actions { padding: 0 8px 4px; }
8811
+ }
8812
+
8813
+ /* ── One context chip (docs/design/ContextChip.dc.html) ───────────────
8814
+ Top bar, right side: what is in the agent's context in brief order, with
8815
+ what it costs in tokens. Blue in context, violet the agent's, amber only
8816
+ when a card changed since the agent read it. */
8817
+ .context-chip-wrap {
8818
+ position: relative;
8819
+ flex-shrink: 0;
8820
+ }
8821
+ .context-chip {
8822
+ display: inline-flex;
8823
+ align-items: center;
8824
+ gap: 6px;
8825
+ height: 28px;
8826
+ box-sizing: border-box;
8827
+ padding: 0 10px;
8828
+ border-radius: var(--r-pill);
8829
+ border: 1px solid color-mix(in srgb, var(--c-pin) 35%, transparent);
8830
+ background: color-mix(in srgb, var(--c-pin) 8%, transparent);
8831
+ color: var(--c-pin);
8832
+ font: 500 12px var(--font-ui);
8833
+ white-space: nowrap;
8834
+ cursor: pointer;
8835
+ }
8836
+ .context-chip.is-open {
8837
+ border-color: var(--c-pin);
8838
+ background: color-mix(in srgb, var(--c-pin) 16%, transparent);
8839
+ }
8840
+ .context-chip.is-empty {
8841
+ border: 1px dashed var(--c-line-30);
8842
+ background: transparent;
8843
+ color: var(--c-muted);
8844
+ }
8845
+ .context-chip:focus-visible {
8846
+ outline: 2px solid var(--c-pin);
8847
+ outline-offset: 2px;
8848
+ }
8849
+ .context-chip-pin {
8850
+ position: relative;
8851
+ display: inline-flex;
8852
+ }
8853
+ .context-chip-agent-dot {
8854
+ position: absolute;
8855
+ right: -3px;
8856
+ top: -2px;
8857
+ width: 6px;
8858
+ height: 6px;
8859
+ border-radius: var(--r-pill);
8860
+ background: var(--c-agent);
8861
+ box-shadow: 0 0 0 1.5px var(--c-panel);
8862
+ }
8863
+ .context-chip-wide .is-near {
8864
+ color: var(--c-muted);
8865
+ }
8866
+ .context-chip-wide .is-agent {
8867
+ color: var(--c-agent);
8868
+ }
8869
+ .context-chip-narrow {
8870
+ display: none;
8871
+ }
8872
+ .context-chip-cost {
8873
+ font: 11px var(--font-code);
8874
+ color: var(--c-muted);
8875
+ }
8876
+
8877
+ .context-panel {
8878
+ position: absolute;
8879
+ top: calc(100% + 8px);
8880
+ right: 0;
8881
+ z-index: 60;
8882
+ width: 440px;
8883
+ max-height: min(70vh, 640px);
8884
+ overflow-y: auto;
8885
+ box-sizing: border-box;
8886
+ padding: 12px;
8887
+ border-radius: 12px;
8888
+ border: 1px solid var(--c-line-30);
8889
+ background: var(--c-panel);
8890
+ box-shadow: var(--e-2);
8891
+ display: flex;
8892
+ flex-direction: column;
8893
+ gap: 6px;
8894
+ color: var(--c-text);
8895
+ font: 12px var(--font-ui);
8896
+ text-align: left;
8897
+ }
8898
+ .context-panel-head {
8899
+ display: flex;
8900
+ align-items: baseline;
8901
+ gap: 8px;
8902
+ }
8903
+ .context-panel-title {
8904
+ flex: 1;
8905
+ font-size: 13px;
8906
+ font-weight: 600;
8907
+ }
8908
+ .context-panel-mono {
8909
+ font: 11px var(--font-code);
8910
+ color: var(--c-muted);
8911
+ }
8912
+ .context-panel-cap,
8913
+ .context-panel-cap-inline {
8914
+ margin: 0;
8915
+ font-size: 11px;
8916
+ color: var(--c-muted);
8917
+ }
8918
+ .context-panel-cap-inline {
8919
+ white-space: nowrap;
8920
+ flex-shrink: 0;
8921
+ }
8922
+ .context-panel-section {
8923
+ display: flex;
8924
+ align-items: center;
8925
+ gap: 8px;
8926
+ margin-top: 6px;
8927
+ padding: 6px 8px 2px;
8928
+ border-top: 1px solid var(--c-line);
8929
+ font-size: 11px;
8930
+ font-weight: 600;
8931
+ color: var(--c-muted);
8932
+ }
8933
+ .context-panel-section > span:first-child {
8934
+ flex: 1;
8935
+ }
8936
+ .context-panel-link,
8937
+ .context-panel-promote {
8938
+ border: 0;
8939
+ padding: 0 4px;
8940
+ background: transparent;
8941
+ color: var(--c-pin);
8942
+ font: 500 11px var(--font-ui);
8943
+ cursor: pointer;
8944
+ }
8945
+ .context-panel-list {
8946
+ list-style: none;
8947
+ margin: 0;
8948
+ padding: 0;
8949
+ }
8950
+ .context-panel-row {
8951
+ display: flex;
8952
+ align-items: center;
8953
+ gap: 8px;
8954
+ min-height: 30px;
8955
+ padding: 0 8px;
8956
+ border-radius: 6px;
8957
+ }
8958
+ /* Revealed on hover or focus; opacity (not visibility) keeps Pin focusable. */
8959
+ .context-panel-row.is-near .context-panel-promote {
8960
+ opacity: 0;
8961
+ }
8962
+ .context-panel-row.is-near:hover,
8963
+ .context-panel-row.is-near:focus-within {
8964
+ background: var(--c-panel-soft);
8965
+ }
8966
+ .context-panel-row.is-near:hover .context-panel-promote,
8967
+ .context-panel-row.is-near:focus-within .context-panel-promote {
8968
+ opacity: 1;
8969
+ }
8970
+ .context-panel-pin {
8971
+ position: relative;
8972
+ width: 16px;
8973
+ height: 16px;
8974
+ border-radius: var(--r-pill);
8975
+ display: flex;
8976
+ align-items: center;
8977
+ justify-content: center;
8978
+ flex-shrink: 0;
8979
+ background: var(--c-pin);
8980
+ color: var(--c-on-pin);
8981
+ }
8982
+ .context-panel-near-ring {
8983
+ width: 12px;
8984
+ height: 12px;
8985
+ margin: 0 2px;
8986
+ box-sizing: border-box;
8987
+ border-radius: var(--r-pill);
8988
+ border: 1.5px dotted var(--c-pin);
8989
+ flex-shrink: 0;
8990
+ }
8991
+ .context-panel-board {
8992
+ fill: none;
8993
+ stroke: var(--c-pin);
8994
+ stroke-width: 1.8;
8995
+ stroke-linejoin: round;
8996
+ flex-shrink: 0;
8997
+ }
8998
+ .context-panel-name {
8999
+ flex: 1;
9000
+ min-width: 0;
9001
+ overflow: hidden;
9002
+ text-overflow: ellipsis;
9003
+ white-space: nowrap;
9004
+ font-weight: 500;
9005
+ }
9006
+ .context-panel-name.is-soft {
9007
+ font-weight: 400;
9008
+ color: var(--c-text-soft);
9009
+ }
9010
+ .context-tag {
9011
+ display: inline-flex;
9012
+ align-items: center;
9013
+ height: 20px;
9014
+ box-sizing: border-box;
9015
+ padding: 0 7px;
9016
+ border-radius: var(--r-pill);
9017
+ font-size: 11px;
9018
+ font-weight: 500;
9019
+ white-space: nowrap;
9020
+ flex-shrink: 0;
9021
+ }
9022
+ .context-tag.is-read {
9023
+ color: var(--c-agent);
9024
+ background: color-mix(in srgb, var(--c-agent) 14%, transparent);
9025
+ }
9026
+ .context-tag.is-not-read {
9027
+ color: var(--c-muted);
9028
+ background: var(--c-panel-soft);
9029
+ }
9030
+ .context-tag.is-changed {
9031
+ color: var(--c-warn);
9032
+ background: color-mix(in srgb, var(--c-warn) 14%, transparent);
9033
+ }
9034
+ .context-tag {
9035
+ gap: 4px;
9036
+ }
9037
+ .context-tag svg {
9038
+ fill: none;
9039
+ stroke: currentColor;
9040
+ stroke-width: 2;
9041
+ stroke-linecap: round;
9042
+ stroke-linejoin: round;
9043
+ flex-shrink: 0;
9044
+ }
9045
+ /* Links changed after the last read: information, never "needs a look" (option C). */
9046
+ .context-tag.is-links {
9047
+ gap: 4px;
9048
+ color: var(--c-muted);
9049
+ background: var(--c-panel-soft);
9050
+ }
9051
+ .context-tag.is-links svg {
9052
+ fill: none;
9053
+ stroke: currentColor;
9054
+ stroke-width: 2;
9055
+ stroke-linecap: round;
9056
+ stroke-linejoin: round;
9057
+ }
9058
+ .context-panel-x {
9059
+ width: 22px;
9060
+ height: 22px;
9061
+ border: 0;
9062
+ padding: 0;
9063
+ background: transparent;
9064
+ color: var(--c-muted);
9065
+ font-size: 14px;
9066
+ cursor: pointer;
9067
+ flex-shrink: 0;
9068
+ border-radius: var(--r-pill);
9069
+ }
9070
+ .context-panel-x:hover {
9071
+ color: var(--c-text);
9072
+ background: var(--c-surface-hover);
9073
+ }
9074
+
9075
+ /* 600 px (ContextChip600.dc.html): one count, and the panel becomes a sheet. */
9076
+ @media (max-width: 760px) {
9077
+ .context-chip-wide {
9078
+ display: none;
9079
+ }
9080
+ .context-chip-narrow {
9081
+ display: inline;
9082
+ }
9083
+ .context-panel {
9084
+ position: fixed;
9085
+ top: var(--hud-bar-height, 44px);
9086
+ left: 8px;
9087
+ right: 8px;
9088
+ width: auto;
9089
+ }
9090
+ }
9091
+
9092
+ /* Home Map / Graph: neutral folder regions; workspace context is the only blue. */
9093
+ .home-shell {
9094
+ position: absolute;
9095
+ inset: 0;
9096
+ display: flex;
9097
+ flex-direction: column;
9098
+ overflow: hidden;
9099
+ background: var(--c-bg);
9100
+ color: var(--c-text);
9101
+ }
9102
+ .home-view-tabs {
9103
+ display: flex;
9104
+ flex-wrap: wrap;
9105
+ gap: 6px;
9106
+ padding: 8px 16px;
9107
+ border-bottom: 1px solid var(--c-line);
9108
+ }
9109
+ .home-view-tabs [aria-pressed="true"] {
9110
+ background: var(--c-surface-hover);
9111
+ font-weight: 600;
9112
+ }
9113
+ .home-shell > .home-view {
9114
+ position: relative;
9115
+ flex: 1;
9116
+ min-height: 0;
9117
+ }
9118
+ .home-memory {
9119
+ display: flex;
9120
+ flex-direction: column;
9121
+ flex: 1;
9122
+ min-height: 0;
9123
+ min-width: 0;
9124
+ font-family: var(--font-ui);
9125
+ font-size: 13px;
9126
+ }
9127
+ .home-memory-toolbar,
9128
+ .home-memory-legend,
9129
+ .home-memory-actions {
9130
+ display: flex;
9131
+ align-items: center;
9132
+ flex-wrap: wrap;
9133
+ gap: 10px;
9134
+ padding: 10px 16px;
9135
+ }
9136
+ .home-memory-toolbar {
9137
+ border-bottom: 1px solid var(--c-line);
9138
+ font-size: 12px;
9139
+ color: var(--c-muted);
9140
+ }
9141
+ .home-memory-live { margin-left: auto; }
9142
+ .home-memory-live::before { content: '●'; margin-right: 6px; }
9143
+ .home-memory-live.is-error { color: var(--c-warn); }
9144
+ .home-memory-sidebar-toggle { display: none; }
9145
+ .home-memory-sidebar {
9146
+ display: flex;
9147
+ flex-direction: column;
9148
+ flex: 0 0 280px;
9149
+ min-width: 0;
9150
+ overflow: auto;
9151
+ padding: 18px;
9152
+ box-sizing: border-box;
9153
+ background: var(--c-panel-soft);
9154
+ border-left: 1px solid var(--c-line);
9155
+ }
9156
+ .home-memory-sidebar section { margin-bottom: 20px; flex-shrink: 0; }
9157
+ .home-memory-sidebar h2 {
9158
+ margin: 0 0 8px;
9159
+ font-size: 11px;
9160
+ font-weight: 500;
9161
+ letter-spacing: .06em;
9162
+ text-transform: uppercase;
9163
+ color: var(--c-muted);
9164
+ }
9165
+ .home-memory-sidebar label {
9166
+ display: flex;
9167
+ align-items: center;
9168
+ flex-wrap: wrap;
9169
+ gap: 8px;
9170
+ min-width: 0;
9171
+ margin: 5px 0;
9172
+ font-size: 12px;
9173
+ }
9174
+ .home-memory-sidebar input[type="search"] {
7457
9175
  background: var(--c-panel);
7458
9176
  color: var(--c-text);
9177
+ border: 1px solid var(--c-line);
9178
+ border-radius: var(--r-control);
9179
+ padding: 6px;
9180
+ width: 100%;
9181
+ min-width: 0;
7459
9182
  font: inherit;
7460
- font-weight: 600;
9183
+ }
9184
+ .home-memory-sidebar input { accent-color: var(--c-text-soft); }
9185
+ .home-memory-search { margin-bottom: 12px !important; }
9186
+ .home-memory-search > span {
9187
+ position: absolute;
9188
+ width: 1px;
9189
+ height: 1px;
9190
+ overflow: hidden;
9191
+ clip-path: inset(50%);
9192
+ }
9193
+ .home-memory-check { min-height: 24px; }
9194
+ .home-memory-check > span { flex: 1; overflow-wrap: anywhere; }
9195
+ .home-memory-check small { color: var(--c-muted); font-family: var(--font-mono); }
9196
+ .home-memory-help { font-size: 12px; color: var(--c-muted); }
9197
+ .home-memory-body {
9198
+ display: flex;
9199
+ flex: 1;
9200
+ min-height: 0;
9201
+ overflow: hidden;
9202
+ }
9203
+ .home-memory-stage {
9204
+ position: relative;
9205
+ flex: 1;
9206
+ min-width: 0;
9207
+ overflow: hidden;
9208
+ touch-action: none;
9209
+ background-color: var(--c-bg);
9210
+ background-image: radial-gradient(color-mix(in srgb, var(--c-muted) 16%, transparent) 1px, transparent 1px);
9211
+ background-size: 24px 24px;
9212
+ cursor: grab;
9213
+ }
9214
+ .home-memory-stage:active { cursor: grabbing; }
9215
+ .graph-view .home-memory-stage { background-image: none; }
9216
+ .home-memory-world {
9217
+ position: absolute;
9218
+ transform-origin: 0 0;
9219
+ }
9220
+ .home-memory-region {
9221
+ position: absolute;
9222
+ box-sizing: border-box;
9223
+ border: 1px dashed var(--c-line);
9224
+ border-radius: var(--r-overlay);
9225
+ padding: 10px 16px;
9226
+ color: var(--c-muted);
9227
+ background: color-mix(in srgb, var(--c-panel) 30%, transparent);
9228
+ pointer-events: none;
9229
+ }
9230
+ .home-memory-region.is-nested { background: transparent; }
9231
+ .home-memory-region > button {
9232
+ position: absolute;
9233
+ top: -12px;
9234
+ left: 16px;
9235
+ max-width: calc(100% - 32px);
9236
+ border: 1px solid var(--c-line);
9237
+ border-radius: var(--r-pill);
9238
+ padding: 4px 10px;
9239
+ background: var(--c-panel);
9240
+ color: var(--c-text-soft);
9241
+ font: 500 12px var(--font-ui);
9242
+ pointer-events: auto;
7461
9243
  cursor: pointer;
7462
9244
  }
7463
- .attachment-button.is-primary,
7464
- .export-dialog-links a.is-primary { background: var(--c-accent); border-color: var(--c-accent); color: var(--c-bg); }
7465
- .attachment-button:hover:not(:disabled),
7466
- .presentation-exit:hover,
7467
- .export-dialog-links a:hover { filter: brightness(1.12); }
7468
- .attachment-button:focus-visible,
7469
- .presentation-exit:focus-visible,
7470
- .export-dialog-links a:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 3px; }
7471
- .attachment-button:disabled { opacity: 0.5; cursor: default; }
7472
- .attachment-review { width: 100%; border-top: 1px solid var(--c-line); padding-top: 12px; }
7473
- .attachment-review-actions {
7474
- position: sticky;
7475
- bottom: -16px;
9245
+ .home-memory-region small { margin-left: 6px; font-weight: 400; color: var(--c-muted); }
9246
+ .home-memory-links {
9247
+ position: absolute;
9248
+ width: 1px;
9249
+ height: 1px;
9250
+ overflow: visible;
9251
+ pointer-events: none;
9252
+ }
9253
+ .memory-edge {
9254
+ stroke: var(--c-muted);
9255
+ fill: none;
9256
+ stroke-width: 1.5;
9257
+ opacity: .5;
9258
+ }
9259
+ .home-memory .memory-edge.edge-portal { stroke: var(--c-rel-derived); }
9260
+ .home-memory .memory-edge.edge-wiki { stroke: var(--c-rel-cites); }
9261
+ .home-memory .memory-edge.edge-card { stroke: var(--c-rel-related); }
9262
+ .home-memory-connections li > small { display: block; color: var(--c-muted); font-size: 11px; }
9263
+ .home-memory .memory-edge.is-emphasized { opacity: 1; }
9264
+ .home-memory .memory-edge.is-dimmed { opacity: .08; }
9265
+ .home-memory .memory-legend-portal { color: var(--c-rel-derived); }
9266
+ .home-memory .memory-legend-wiki { color: var(--c-rel-cites); }
9267
+ .home-memory .memory-legend-card { color: var(--c-rel-related); }
9268
+ .memory-edge text {
9269
+ fill: var(--c-muted);
9270
+ stroke: none;
9271
+ font-size: 12px;
9272
+ }
9273
+ .edge-previous {
9274
+ stroke-dasharray: 8 4;
9275
+ }
9276
+ .edge-wiki {
9277
+ stroke-dasharray: 3 3;
9278
+ }
9279
+ .edge-card {
9280
+ stroke-width: 2.5;
9281
+ }
9282
+ .memory-edge.is-missing {
9283
+ stroke: var(--c-warn);
9284
+ stroke-dasharray: 5 3;
9285
+ }
9286
+ .memory-edge.is-missing text {
9287
+ fill: var(--c-warn);
9288
+ }
9289
+ .home-memory-node {
9290
+ position: absolute;
9291
+ width: 220px;
9292
+ height: 92px;
9293
+ transform: translate(-50%, -50%);
9294
+ box-sizing: border-box;
9295
+ border: 1px solid var(--c-line);
9296
+ border-radius: var(--r-node);
9297
+ background: var(--c-panel);
9298
+ box-shadow: 0 2px 8px color-mix(in srgb, var(--c-bg) 60%, transparent);
9299
+ }
9300
+ .home-memory-node.in-context {
9301
+ border-color: var(--c-pin);
9302
+ background: color-mix(in srgb, var(--c-pin) 8%, var(--c-panel));
9303
+ }
9304
+ .home-memory-node.is-dimmed { opacity: .3; }
9305
+ .home-memory-node.is-emphasized,
9306
+ .home-memory-node:focus-within { z-index: 2; }
9307
+ .home-memory-node.is-selected {
9308
+ outline: 2px solid var(--c-text);
9309
+ outline-offset: 3px;
9310
+ }
9311
+ .home-memory-select {
9312
+ width: 100%;
9313
+ height: 100%;
9314
+ border: 0;
9315
+ background: transparent;
9316
+ color: inherit;
9317
+ padding: 8px 32px 8px 12px;
9318
+ text-align: left;
9319
+ font: inherit;
9320
+ cursor: pointer;
7476
9321
  display: flex;
7477
- flex-wrap: wrap;
7478
- justify-content: flex-end;
7479
- gap: 12px;
7480
- margin-top: 24px;
7481
- padding: 16px 0;
9322
+ flex-direction: column;
9323
+ justify-content: center;
9324
+ gap: 4px;
9325
+ }
9326
+ .home-memory-select strong {
9327
+ overflow: hidden;
9328
+ text-overflow: ellipsis;
9329
+ white-space: nowrap;
9330
+ max-width: 100%;
9331
+ }
9332
+ .home-memory-select .home-memory-summary { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }
9333
+ .home-memory-select .home-memory-context { color: var(--c-pin); }
9334
+ .home-memory-select span {
9335
+ font-size: 11px;
9336
+ color: var(--c-muted);
9337
+ }
9338
+ .home-memory-node > .board-pin-btn {
9339
+ position: absolute;
9340
+ right: 4px;
9341
+ top: 5px;
9342
+ }
9343
+ .home-memory-details {
9344
+ position: relative;
9345
+ box-sizing: border-box;
9346
+ padding: 12px;
9347
+ overflow-wrap: anywhere;
9348
+ background: var(--c-panel);
9349
+ border: 1px solid var(--c-line);
9350
+ border-radius: var(--r-node);
9351
+ }
9352
+ .home-memory-details h3 {
9353
+ font-size: 13px;
9354
+ padding-right: 16px;
9355
+ margin: 0;
9356
+ }
9357
+ .home-memory-details p { font-size: 12px; color: var(--c-muted); }
9358
+ .home-memory-details p.memory-context-legend { color: var(--c-pin); }
9359
+ .home-memory-clear { position: absolute; top: 4px; right: 4px; border: 0; background: transparent; color: var(--c-muted); cursor: pointer; font: 18px var(--font-ui); }
9360
+ .home-memory-connections { margin-top: 14px; font-size: 12px; }
9361
+ .home-memory-connections summary { cursor: pointer; }
9362
+ .home-memory-details ul {
9363
+ padding: 0;
9364
+ list-style: none;
9365
+ }
9366
+ .home-memory-details li {
9367
+ display: flex;
9368
+ flex-direction: column;
9369
+ align-items: flex-start;
9370
+ gap: 4px;
9371
+ margin-bottom: 10px;
9372
+ }
9373
+ .home-memory-details .home-button { height: auto; min-height: 28px; padding: 6px 8px; max-width: 100%; overflow-wrap: anywhere; white-space: normal; text-align: left; }
9374
+ .home-memory-actions {
9375
+ padding: 0;
9376
+ }
9377
+ .home-memory-actions > .board-pin-btn {
9378
+ position: static;
9379
+ }
9380
+ .home-memory-inspector {
9381
+ position: relative;
9382
+ display: flex;
9383
+ flex-direction: column;
9384
+ flex-shrink: 0;
9385
+ min-height: 0;
9386
+ background: var(--c-panel);
7482
9387
  border-top: 1px solid var(--c-line);
9388
+ box-sizing: border-box;
9389
+ }
9390
+ .home-memory-inspector-resize {
9391
+ flex: 0 0 10px;
9392
+ cursor: ns-resize;
9393
+ touch-action: none;
9394
+ user-select: none;
9395
+ }
9396
+ .home-memory-inspector-resize::after {
9397
+ content: '';
9398
+ display: block;
9399
+ width: 48px;
9400
+ height: 3px;
9401
+ margin: 3px auto;
9402
+ border-radius: var(--r-pill);
9403
+ background: var(--c-muted);
9404
+ }
9405
+ .home-memory-inspector-resize:hover,
9406
+ .home-memory-inspector-resize:focus-visible { background: var(--c-surface-hover); }
9407
+ .home-memory-inspector-resize:focus-visible { outline: 2px solid var(--c-text-soft); outline-offset: -2px; }
9408
+ .home-memory-inspector-toggle { position: absolute; top: 18px; right: 44px; z-index: 1; }
9409
+ .home-memory-inspector.is-collapsed .home-memory-inspector-toggle { top: 8px; }
9410
+ .home-memory-inspector.is-collapsed .home-memory-detail-body,
9411
+ .home-memory-inspector.is-collapsed .home-memory-empty-details .home-memory-help { display: none; }
9412
+ .home-memory-inspector > #home-memory-details { flex: 1; min-height: 0; }
9413
+ .home-memory-inspector .home-button { font-size: 14px; min-height: 36px; }
9414
+ .home-memory-inspector .board-pin-btn { width: 36px; height: 36px; }
9415
+ .home-memory-inspector .home-memory-clear { top: 8px; width: 36px; height: 36px; font-size: 20px; }
9416
+ .home-memory-inspector .home-memory-details {
9417
+ display: flex;
9418
+ flex-direction: column;
9419
+ height: 100%;
9420
+ min-height: 0;
9421
+ border: 0;
9422
+ border-radius: 0;
9423
+ padding: 8px 16px 12px;
9424
+ }
9425
+ .home-memory-inspector .home-memory-detail-header {
9426
+ flex-shrink: 0;
9427
+ padding-bottom: 8px;
9428
+ border-bottom: 1px solid var(--c-line);
9429
+ }
9430
+ .home-memory-inspector .home-memory-details h3 { font-size: 15px; }
9431
+ .home-memory-inspector .home-memory-details p { font-size: 13px; }
9432
+ .home-memory-inspector .home-memory-details small { font-size: 13px; }
9433
+ .home-memory-inspector .home-memory-selection-title { padding-right: 180px; }
9434
+ .home-memory-inspector .home-memory-selection-title p { margin: 2px 0 8px; }
9435
+ .home-memory-inspector .home-memory-detail-body {
9436
+ flex: 1;
9437
+ min-height: 0;
9438
+ overflow: auto;
9439
+ /* Integer scroll extents can otherwise clip the final fractional row border. */
9440
+ padding-bottom: 1px;
9441
+ }
9442
+ .home-memory-inspector .home-memory-detail-body > p { margin: 8px 0; }
9443
+ .home-memory-inspector .home-memory-connections { margin-top: 8px; font-size: 14px; }
9444
+ .home-memory-inspector .home-memory-details li {
9445
+ display: grid;
9446
+ grid-template-columns: minmax(0, 1fr) minmax(0, 150px);
9447
+ column-gap: 16px;
9448
+ padding: 10px 0;
9449
+ margin: 0;
9450
+ min-height: 28px;
9451
+ border-bottom: 1px solid var(--c-line);
9452
+ }
9453
+ .home-memory-inspector .home-memory-details li > span,
9454
+ .home-memory-inspector .home-memory-details li > small { grid-column: 1; }
9455
+ .home-memory-inspector .home-memory-details li > .home-button { grid-column: 2; grid-row: 1 / span 2; justify-self: end; }
9456
+ .home-memory-inspector .home-memory-empty-details { padding: 8px 16px; }
9457
+ .home-memory-inspector .home-memory-empty-details h3 { font-size: 15px; margin: 0 0 8px; min-height: 36px; padding-right: 180px; }
9458
+ .home-memory-inspector .home-memory-help { font-size: 13px; }
9459
+ .home-memory-zoom {
9460
+ position: absolute;
9461
+ bottom: 12px;
9462
+ left: 12px;
9463
+ display: flex;
9464
+ align-items: center;
9465
+ gap: 8px;
7483
9466
  background: var(--c-panel);
7484
- z-index: 1;
9467
+ padding: 4px;
9468
+ border-radius: var(--r-node);
7485
9469
  }
7486
- .attachment-review pre { white-space: pre-wrap; overflow-wrap: anywhere; font: 12px/1.6 var(--font-code); padding: 12px; background: var(--c-bg); border-radius: 8px; }
7487
- .attachment-review h4 { margin-bottom: 6px; }
7488
- .md-import-source { padding: 6px 12px; font-size: 11px; overflow-wrap: anywhere; color: var(--c-text-soft); border-top: 1px solid var(--c-line); }
7489
- @media (max-width: 640px) {
7490
- .home-board { flex-wrap: wrap; }
7491
- .home-board-open { flex-basis: 100%; }
7492
- .home-board-actions { padding: 0 8px 4px; }
9470
+ .home-memory-status {
9471
+ position: absolute;
9472
+ top: 8px;
9473
+ left: 12px;
9474
+ background: var(--c-panel);
9475
+ padding: 8px;
9476
+ }
9477
+ .home-memory-legend {
9478
+ font-size: 11px;
9479
+ color: var(--c-muted);
9480
+ border-top: 1px solid var(--c-line);
9481
+ }
9482
+ .memory-context-legend {
9483
+ color: var(--c-pin);
9484
+ }
9485
+ .home-memory-missing {
9486
+ color: var(--c-warn);
9487
+ }
9488
+ .graph-view .home-memory-sidebar { flex-basis: 240px; }
9489
+ .graph-view .home-memory-toolbar { font-size: 13px; }
9490
+ .graph-node { position: absolute; box-sizing: border-box; width: var(--graph-node-width); height: var(--graph-node-height); transform: translate(-50%, -50%); color: var(--c-text); border: 1px solid var(--c-line); border-radius: var(--r-node); background: var(--c-panel); }
9491
+ .graph-node .home-memory-select { box-sizing: border-box; display: grid; grid-template-columns: 32px minmax(0, 1fr); grid-template-rows: minmax(0, 1fr) 16px 16px; align-items: center; text-align: left; padding: 8px; gap: 4px 8px; }
9492
+ .graph-node .home-memory-select strong { font-size: 14px; font-weight: 500; line-height: 1.3; white-space: normal; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; }
9493
+ .graph-node .home-memory-select > strong, .graph-node .home-memory-select > span:not(.graph-glyph) { grid-column: 2; }
9494
+ .graph-node .home-memory-select > span:not(.graph-glyph) { font-size: 12px; max-width: 100%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
9495
+ .graph-node .graph-glyph { display: block; grid-column: 1; grid-row: 1 / span 3; box-sizing: border-box; width: 28px; height: 28px; border: 2px solid var(--c-text-soft); border-radius: 50%; background: var(--c-bg); }
9496
+ .graph-node.is-card .graph-glyph { width: 24px; height: 24px; border-radius: var(--r-control); }
9497
+ .graph-node.is-external { border-style: dashed; }
9498
+ .graph-node.is-selected { border-color: var(--c-text); outline: 1px solid var(--c-text); }
9499
+ .graph-node.in-context .graph-glyph { border-color: var(--c-pin); outline: 2px solid var(--c-pin); outline-offset: 4px; }
9500
+ .graph-node .home-memory-select:focus-visible { outline: 2px solid var(--c-text-soft); outline-offset: 6px; border-radius: var(--r-control); }
9501
+ .graph-node:hover, .graph-node:focus-within, .graph-node.is-selected { z-index: 2; }
9502
+ .graph-links { fill: none; stroke: var(--c-muted); stroke-width: 1.5; }
9503
+ .graph-link { cursor: pointer; opacity: .65; }
9504
+ .graph-link:hover, .graph-link:focus-visible, .graph-link.is-selected, .graph-link.is-highlighted { opacity: 1; outline: none; }
9505
+ .graph-link-line { pointer-events: none; stroke-width: 1.5; }
9506
+ .graph-link.is-bundle .graph-link-line { stroke-width: 2.5; }
9507
+ .graph-link:hover .graph-link-line, .graph-link:focus-visible .graph-link-line, .graph-link.is-selected .graph-link-line, .graph-link.is-highlighted .graph-link-line { stroke-width: 3; }
9508
+ .graph-link-hit { stroke: transparent; stroke-width: 18; pointer-events: stroke; }
9509
+ .graph-link text { pointer-events: auto; }
9510
+ .graph-links text { font: 12px var(--font-code); fill: var(--c-text-soft); paint-order: stroke; stroke: var(--c-bg); stroke-width: 4px; stroke-linejoin: round; text-anchor: middle; }
9511
+ .graph-breadcrumb { display: flex; align-items: center; gap: 6px; min-width: 0; flex-wrap: wrap; }
9512
+ .graph-breadcrumb strong { max-width: 240px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
9513
+ .graph-direction-caption { position: absolute; top: 12px; left: 16px; right: 40px; z-index: 1; color: var(--c-muted); font-size: 13px; pointer-events: none; }
9514
+ .graph-unlinked { flex-shrink: 0; padding: 8px 16px; border-top: 1px solid var(--c-line); font-size: 13px; }
9515
+ .graph-unlinked summary { cursor: pointer; color: var(--c-muted); }
9516
+ .graph-unlinked > div { display: flex; flex-wrap: wrap; gap: 8px; max-height: 92px; overflow: auto; padding-top: 8px; }
9517
+ .graph-tray-node { display: flex; gap: 8px; align-items: center; max-width: 100%; white-space: normal; text-align: left; }
9518
+ .graph-tray-node small { color: var(--c-muted); }
9519
+ .graph-search-results { list-style: none; padding: 0; margin: 8px 0; }
9520
+ .graph-search-results .home-button { width: 100%; white-space: normal; text-align: left; height: auto; min-height: 36px; margin: 4px 0; }
9521
+ .graph-accounting { color: var(--c-muted); font-size: 13px; line-height: 1.6; }
9522
+ .node-body:has(> .node-memory-links),
9523
+ .node-body:has(> .node-lifecycle-warning) {
9524
+ display: flex;
9525
+ flex-direction: column;
9526
+ }
9527
+ .node-body:has(> .node-memory-links) > :first-child,
9528
+ .node-body:has(> .node-lifecycle-warning) > :first-child {
9529
+ flex: 1;
9530
+ min-height: 0;
9531
+ }
9532
+ .node-memory-links {
9533
+ flex-shrink: 0;
9534
+ max-height: min(40%, 132px);
9535
+ overflow: auto;
9536
+ overscroll-behavior: contain;
9537
+ }
9538
+ .node-memory-link {
9539
+ padding: 6px 12px;
9540
+ border-top: 1px solid var(--c-line);
9541
+ }
9542
+ .node-memory-link button {
9543
+ border: 0;
9544
+ background: transparent;
9545
+ color: var(--c-text-soft);
9546
+ font: var(--fs-ui) var(--font-ui);
9547
+ cursor: pointer;
9548
+ overflow-wrap: anywhere;
9549
+ text-align: left;
9550
+ }
9551
+ .wiki-link.is-unresolved {
9552
+ text-decoration-style: dashed;
9553
+ color: var(--c-warn);
9554
+ }
9555
+ @media (max-width: 760px) {
9556
+ .home-memory-body { position: relative; }
9557
+ .home-memory-sidebar { display: none; }
9558
+ .home-memory-sidebar-toggle { display: block; }
9559
+ .home-memory.sidebar-open .home-memory-sidebar {
9560
+ display: flex;
9561
+ position: absolute;
9562
+ top: 0;
9563
+ right: 0;
9564
+ bottom: 0;
9565
+ width: min(280px, 75%);
9566
+ z-index: 4;
9567
+ box-shadow: -6px 0 20px color-mix(in srgb, var(--c-bg) 50%, transparent);
9568
+ }
9569
+ .home-memory-toolbar { padding: 8px; gap: 8px; }
9570
+ .canvas-region:has(.home-memory) > .attention-history-tab,
9571
+ .canvas-region:has(.home-memory) > .attention-history {
9572
+ top: calc(var(--home-memory-content-top) + 8px);
9573
+ }
9574
+ .canvas-region:has(.home-memory.sidebar-open) > .attention-history-tab {
9575
+ left: 8px;
9576
+ right: auto;
9577
+ border-right: 1px solid var(--c-line);
9578
+ border-radius: 14px;
9579
+ }
9580
+ .canvas-region:has(.home-memory.sidebar-open) > .attention-history-tab .attention-history-tab-label {
9581
+ display: none;
9582
+ }
9583
+ .home-memory-legend {
9584
+ max-height: 68px;
9585
+ overflow: auto;
9586
+ padding: 8px;
9587
+ }
9588
+ }
9589
+
9590
+ /* Wave 3: Categories / Lifecycle / Lifecycle600, variant A. */
9591
+ .knowledge-backdrop {
9592
+ position: fixed;
9593
+ inset: 0;
9594
+ z-index: 10025; /* above top-bar chrome and the expanded card that opens Lifecycle */
9595
+ display: flex;
9596
+ align-items: center;
9597
+ justify-content: center;
9598
+ padding: 20px;
9599
+ background: var(--c-panel-overlay);
9600
+ }
9601
+ .knowledge-dialog {
9602
+ box-sizing: border-box;
9603
+ width: min(760px, 100%);
9604
+ max-height: 100%;
9605
+ overflow: auto;
9606
+ padding: 16px;
9607
+ border: 1px solid var(--c-line);
9608
+ border-radius: 14px;
9609
+ background: var(--c-panel);
9610
+ color: var(--c-text);
9611
+ font: 13px/1.5 var(--font-ui);
9612
+ box-shadow: 0 10px 30px var(--c-shadow-heavy);
9613
+ }
9614
+ .knowledge-dialog.is-category-editor { width: min(900px, 100%); }
9615
+ .knowledge-dialog:not(.is-category-editor):has(.knowledge-folder-path) { width: min(560px, 100%); }
9616
+ .knowledge-dialog header { display: flex; gap: 10px; align-items: center; padding-bottom: 12px; margin-bottom: 16px; border-bottom: 1px solid var(--c-line); }
9617
+ .knowledge-dialog-title { flex: 1; min-width: 0; }
9618
+ .knowledge-dialog h2 { margin: 0; font-size: 15px; overflow-wrap: anywhere; }
9619
+ .knowledge-dialog header > h2 { flex: 1; }
9620
+ .knowledge-folder-path { display: block; font-size: 11px; color: var(--c-muted); overflow-wrap: anywhere; }
9621
+ .knowledge-dialog h3 { font-size: 13px; margin: 12px 0 8px; }
9622
+ .knowledge-dialog p { margin: 4px 0; color: var(--c-text-soft); font-size: 12px; }
9623
+ .knowledge-dialog form, .lifecycle-fields { display: flex; flex-direction: column; gap: 12px; }
9624
+ .knowledge-dialog form { padding: 12px 0; }
9625
+ .knowledge-field { display: flex; flex-direction: column; gap: 6px; font-size: 12px; }
9626
+ .knowledge-dialog label { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; font-size: 12px; }
9627
+ .knowledge-dialog input:not([type="checkbox"]), .knowledge-dialog select, .knowledge-dialog textarea {
9628
+ width: 100%; min-width: 0; box-sizing: border-box; padding: 7px 10px; border: 1px solid var(--c-line);
9629
+ border-radius: 6px; background: var(--c-input-bg); color: var(--c-text); font: 13px var(--font-ui);
9630
+ }
9631
+ .knowledge-dialog textarea { min-height: 64px; resize: vertical; }
9632
+ .knowledge-dialog button, .lifecycle-filters button {
9633
+ padding: 5px 10px; border: 1px solid var(--c-line); border-radius: 6px; background: var(--c-panel);
9634
+ color: var(--c-text); font: 12px var(--font-ui); cursor: pointer;
9635
+ }
9636
+ .knowledge-dialog button:disabled,
9637
+ .knowledge-dialog button[aria-disabled="true"] { opacity: 0.5; cursor: wait; }
9638
+ .knowledge-dialog button[type="submit"] { align-self: flex-start; min-height: 30px; background: var(--c-accent); border-color: transparent; color: var(--c-contrast-fg); font-weight: 500; }
9639
+ :root[data-theme="sepia"] .knowledge-dialog button[type="submit"] { background: color-mix(in srgb, var(--c-accent) 75%, var(--c-text)); }
9640
+ .knowledge-dialog button.is-danger { align-self: flex-start; color: var(--c-danger); border-color: color-mix(in srgb, var(--c-danger) 50%, var(--c-line)); }
9641
+ .knowledge-dialog button:focus-visible, .knowledge-dialog input:focus-visible, .knowledge-dialog textarea:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 2px; }
9642
+ .knowledge-dialog .choice-menu-options { position: relative; top: auto; width: 100%; max-width: 100%; min-width: 0; max-height: 200px; margin-top: 6px; box-sizing: border-box; }
9643
+ .knowledge-dialog .choice-menu-options button { border: 0; background: transparent; min-height: 30px; }
9644
+ .knowledge-dialog .choice-menu-options button:hover, .knowledge-dialog .choice-menu-options button.active { background: var(--c-panel-soft); }
9645
+ .knowledge-dialog [aria-label="Confirm category deletion"] { display: flex; flex-wrap: wrap; gap: 8px; }
9646
+ .knowledge-dialog [aria-label="Confirm category deletion"] p { width: 100%; }
9647
+ .knowledge-dialog button[aria-pressed="true"], .lifecycle-filters button[aria-pressed="true"] { border-color: var(--c-text); background: var(--c-panel-soft); }
9648
+ .lifecycle-review-actions { display: flex; flex-wrap: wrap; gap: 8px; }
9649
+ .lifecycle-advanced { margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--c-line); }
9650
+ .lifecycle-advanced summary { color: var(--c-muted); cursor: pointer; font-size: 12px; }
9651
+ .lifecycle-advanced[open] summary { margin-bottom: 12px; }
9652
+ .lifecycle-clocks { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; margin-top: 12px; }
9653
+ .lifecycle-clocks > div { display: flex; flex-direction: column; gap: 2px; padding: 10px 12px; border-radius: 10px; background: var(--c-panel-soft); overflow-wrap: anywhere; }
9654
+ .lifecycle-clocks span, .lifecycle-clocks small { color: var(--c-muted); font-size: 11px; }
9655
+ .lifecycle-clocks strong { font-size: 13px; }
9656
+ .lifecycle-clocks .is-read span { color: var(--c-agent); }
9657
+ .lifecycle-warning { color: var(--c-warn); border: 1px solid var(--c-warn); border-radius: 6px; padding: 4px 7px; font-size: 11px; overflow-wrap: anywhere; }
9658
+ .knowledge-dialog .lifecycle-warning { color: var(--c-warn); }
9659
+ .lifecycle-review { padding: 12px; border: 1px solid var(--c-line); border-radius: 10px; }
9660
+ .lifecycle-history { display: flex; flex-wrap: wrap; gap: 8px; padding: 10px 0; border-bottom: 1px solid var(--c-line); overflow-wrap: anywhere; }
9661
+ .lifecycle-history p { width: 100%; margin: 0; }
9662
+ .lifecycle-history span { color: var(--c-muted); font-size: 11px; }
9663
+ .lifecycle-filters { position: absolute; top: 8px; left: 12px; display: flex; flex-wrap: wrap; gap: 6px; z-index: 40; max-width: calc(100% - 24px); }
9664
+ .retirement-toast { position: absolute; bottom: 64px; left: 50%; transform: translateX(-50%); display: flex; flex-wrap: wrap; align-items: center; gap: 10px; max-width: calc(100% - 32px); padding: 10px 14px; border: 1px solid var(--c-line); border-radius: 10px; background: var(--c-panel); color: var(--c-text-soft); font: 12px var(--font-ui); z-index: 50; box-shadow: 0 10px 30px var(--c-shadow-heavy); }
9665
+ .retirement-toast button { background: var(--c-panel-soft); color: var(--c-text); font: inherit; border: 1px solid var(--c-line); border-radius: 6px; padding: 5px 8px; cursor: pointer; }
9666
+ .relation-dimmed { opacity: 0.35; }
9667
+ .edge-line { transition: opacity 0.15s ease, stroke-width 0.15s ease; }
9668
+ .edge-pill { transition: opacity 0.15s ease; }
9669
+ @media (prefers-reduced-motion: reduce) {
9670
+ .canvas-node, .canvas-node.neighbor, .canvas-node.search-dimmed, .edge-line, .edge-pill { transition: none; }
9671
+ }
9672
+ .lifecycle-retired { opacity: 0.5; }
9673
+ .lifecycle-filter-dimmed { opacity: 0.15; }
9674
+ .node-lifecycle-warning { display: flex; flex-shrink: 0; gap: 6px; align-items: center; width: 100%; padding: 6px 8px; border: 0; border-top: 1px solid var(--c-line); background: var(--c-panel); color: var(--c-muted); text-align: left; font: 11px var(--font-ui); cursor: pointer; }
9675
+ .node-lifecycle-warning span:first-child { flex-shrink: 0; border: 1px solid var(--c-warn); color: var(--c-warn); border-radius: 999px; padding: 2px 6px; }
9676
+ .node-lifecycle-warning span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
9677
+ .knowledge-presets { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
9678
+ .knowledge-presets button, .category-choice { display: flex; flex-direction: column; gap: 6px; text-align: left; overflow-wrap: anywhere; }
9679
+ .knowledge-presets span, .category-choice span { color: var(--c-muted); font-size: 11px; }
9680
+ .category-editor-columns { display: grid; grid-template-columns: minmax(180px, 240px) minmax(0, 1fr); gap: 24px; margin-top: 16px; }
9681
+ .category-editor-columns > section { min-width: 0; padding-right: 16px; border-right: 1px solid var(--c-line); }
9682
+ .category-editor-columns h3 { margin-top: 0; }
9683
+ .category-list-panel > label + button { margin-top: 8px; }
9684
+ .category-library { max-height: min(420px, 50vh); overflow-y: auto; margin: 8px 0; padding: 2px; }
9685
+ .category-choice { margin-top: 4px; width: 100%; min-height: 42px; gap: 2px; }
9686
+ .category-tag { display: inline-block; border: 1px solid var(--c-line); border-radius: 6px; padding: 1px 6px; font-size: 11px; color: var(--c-text-soft); }
9687
+ .category-tag.is-unknown { border-style: dashed; }
9688
+ .category-inspector, .category-tab-content { min-width: 0; }
9689
+ .category-tab-content { margin: 0; padding: 12px 0; border: 0; display: flex; flex-direction: column; gap: 12px; }
9690
+ .category-tabs { display: flex; flex-wrap: wrap; gap: 6px; }
9691
+ .category-tabs [aria-selected="true"] { border-color: var(--c-text); background: var(--c-panel-soft); }
9692
+ .category-glyph-choices { display: flex; flex-wrap: wrap; gap: 6px; }
9693
+ .category-glyph-choices button { min-width: 36px; min-height: 34px; font-size: 18px; }
9694
+ .category-editor-footer { position: sticky; bottom: -16px; z-index: 2; display: flex; justify-content: flex-end; gap: 8px; padding: 12px 0; background: var(--c-panel); border-top: 1px solid var(--c-line); }
9695
+ .category-templates > summary, .lifecycle-triggers > summary { cursor: pointer; color: var(--c-text-soft); }
9696
+ .category-discard { position: sticky; top: 0; z-index: 3; padding: 12px; background: var(--c-panel); border: 1px solid var(--c-line); }
9697
+ .relation-presets-dialog .relation-preset-detail { min-width: 0; padding-right: 0; border-right: 0; }
9698
+ .relation-preset-preview { display: grid; gap: 12px; list-style: none; margin: 16px 0; padding: 0; }
9699
+ .relation-preset-preview li { display: grid; gap: 6px; padding: 12px; border: 1px solid var(--c-line); border-radius: var(--r-control); background: var(--c-panel-soft); }
9700
+ .relation-preset-preview li > span { color: var(--c-text-soft); font-size: var(--fs-meta); }
9701
+ .relation-preset-example { display: grid; grid-template-columns: minmax(0, 1fr) minmax(48px, 120px) minmax(0, 1fr); align-items: center; gap: 8px; }
9702
+ .relation-preset-example > span { padding: 6px; text-align: center; border: 1px solid var(--c-line); border-radius: var(--r-control); background: var(--c-panel); font-size: var(--fs-meta); }
9703
+ .relation-preset-example svg { display: block; width: 100%; height: 24px; color: var(--relation-ink); }
9704
+ .relation-preset-footer { position: sticky; bottom: -16px; z-index: 2; display: flex; flex-wrap: wrap; gap: 8px; align-items: center; padding: 12px 0; border-top: 1px solid var(--c-line); background: var(--c-panel); }
9705
+ .relation-preset-footer > label { flex: 1 1 100%; }
9706
+ .relation-preset-footer select { flex: 1; min-width: 0; }
9707
+ .knowledge-dialog button.relation-preset-use { min-height: 30px; background: var(--c-accent); border-color: transparent; color: var(--c-contrast-fg); font-weight: 500; }
9708
+ :root[data-theme="sepia"] .knowledge-dialog button.relation-preset-use { background: color-mix(in srgb, var(--c-accent) 75%, var(--c-text)); }
9709
+ .relation-presets-dialog .relation-vocabulary .vocabulary-row { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto auto; align-items: center; gap: 8px; }
9710
+ .relation-dirty-guard, .relation-presets-dialog [aria-label="Confirm preset deletion"] { display: flex; flex-wrap: wrap; gap: 8px; padding: 12px; border: 1px solid var(--c-line); border-radius: var(--r-control); background: var(--c-panel-soft); }
9711
+ .relation-dirty-guard p, .relation-presets-dialog [aria-label="Confirm preset deletion"] p { flex-basis: 100%; }
9712
+ .home-view-tabs { flex-wrap: wrap; }
9713
+ .home-review-view { min-width: 0; color: var(--c-text); }
9714
+ .home-review-view p { color: var(--c-text-soft); font-size: var(--fs-ui); }
9715
+ .home-review-view .home-main-head > label { min-width: 0; max-width: 100%; }
9716
+ .home-review-controls { display: flex; flex-wrap: wrap; align-items: end; gap: 12px; margin: 16px 0; }
9717
+ .home-review-view label { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; font-size: var(--fs-ui); }
9718
+ .home-review-view input[type="search"], .home-review-view select { min-width: 0; max-width: 100%; padding: 7px 10px; border: 1px solid var(--c-line); border-radius: var(--r-control); background: var(--c-input-bg); color: var(--c-text); font: inherit; }
9719
+ .home-review-table { width: 100%; border-collapse: collapse; table-layout: fixed; font-size: var(--fs-ui); }
9720
+ .home-review-table th { text-align: left; color: var(--c-muted); font-weight: 500; }
9721
+ .home-review-table td, .home-review-table th { padding: 12px 8px; border-bottom: 1px solid var(--c-line); vertical-align: top; overflow-wrap: anywhere; }
9722
+ .home-review-table th:nth-child(3) { width: 30%; }
9723
+ .home-review-table th:last-child { width: 100px; }
9724
+ .home-review-table .home-button { height: auto; min-height: 34px; max-width: 100%; padding: 6px 10px; }
9725
+ .home-review-neutral { padding-top: 12px; border-top: 1px solid var(--c-line); }
9726
+ @media (max-width: 1024px) {
9727
+ .home-review-table, .home-review-table tbody, .home-review-table tr, .home-review-table td { display: block; width: auto; }
9728
+ .home-review-table thead { display: none; }
9729
+ .home-review-table tr { border: 1px solid var(--c-line); border-radius: var(--r-node); padding: 8px; margin: 12px 0; background: var(--c-panel); }
9730
+ .home-review-table td { padding: 4px; border: 0; }
9731
+ .home-review-table td[data-label]::before { content: attr(data-label) ": "; color: var(--c-muted); }
9732
+ }
9733
+ @media (max-width: 760px) {
9734
+ .knowledge-backdrop { padding: 12px; }
9735
+ .knowledge-dialog { padding: 14px; }
9736
+ .knowledge-presets { grid-template-columns: repeat(2, minmax(0, 1fr)); }
9737
+ .category-editor-columns { grid-template-columns: minmax(0, 1fr); }
9738
+ .category-editor-columns > section { padding-right: 0; border-right: 0; }
9739
+ .category-library { max-height: 160px; }
9740
+ .relation-presets-dialog .relation-vocabulary .vocabulary-row { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
9741
+ .home-review-view .home-main-head { align-items: flex-start; }
7493
9742
  }