pmx-canvas 0.8.2 → 0.9.1

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 (338) 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 +59 -0
  4. package/Readme.md +131 -532
  5. package/dist/canvas/global.css +2724 -476
  6. package/dist/canvas/index.js +168 -107
  7. package/dist/canvas/mcp-app.html +2899 -596
  8. package/dist/json-render/index.js +20 -20
  9. package/dist/types/client/canvas/BarHint.d.ts +12 -2
  10. package/dist/types/client/canvas/BoardLinkDialog.d.ts +3 -1
  11. package/dist/types/client/canvas/BoardPinButton.d.ts +10 -0
  12. package/dist/types/client/canvas/BoardSwitcher.d.ts +1 -1
  13. package/dist/types/client/canvas/CanvasViewport.d.ts +1 -1
  14. package/dist/types/client/canvas/CommandBar.d.ts +3 -4
  15. package/dist/types/client/canvas/ConnectionBanner.d.ts +2 -1
  16. package/dist/types/client/canvas/ContextChip.d.ts +3 -0
  17. package/dist/types/client/canvas/CrossBoardReferences.d.ts +5 -0
  18. package/dist/types/client/canvas/EdgeLayer.d.ts +14 -3
  19. package/dist/types/client/canvas/EmptyState.d.ts +4 -4
  20. package/dist/types/client/canvas/HomeGraphView.d.ts +2 -0
  21. package/dist/types/client/canvas/HomeMapView.d.ts +1 -0
  22. package/dist/types/client/canvas/HomeReviewView.d.ts +6 -0
  23. package/dist/types/client/canvas/HomeView.d.ts +9 -7
  24. package/dist/types/client/canvas/KnowledgeDialog.d.ts +4 -0
  25. package/dist/types/client/canvas/LifecycleChrome.d.ts +5 -0
  26. package/dist/types/client/canvas/LifecycleFields.d.ts +7 -0
  27. package/dist/types/client/canvas/LifecyclePanel.d.ts +1 -0
  28. package/dist/types/client/canvas/MemoryInspector.d.ts +7 -0
  29. package/dist/types/client/canvas/NearPinLayer.d.ts +14 -0
  30. package/dist/types/client/canvas/NodeContextMark.d.ts +40 -7
  31. package/dist/types/client/canvas/RelationPresetsDialog.d.ts +4 -0
  32. package/dist/types/client/canvas/RelationsPanel.d.ts +4 -0
  33. package/dist/types/client/canvas/SessionPanel.d.ts +2 -0
  34. package/dist/types/client/canvas/canvas-area.d.ts +1 -1
  35. package/dist/types/client/canvas/graph-geometry.d.ts +27 -0
  36. package/dist/types/client/canvas/graph-model.d.ts +37 -0
  37. package/dist/types/client/canvas/memory-layout.d.ts +23 -0
  38. package/dist/types/client/canvas/use-chrome-height.d.ts +2 -0
  39. package/dist/types/client/canvas/use-focus-trap.d.ts +1 -0
  40. package/dist/types/client/canvas/use-memory-graph.d.ts +8 -0
  41. package/dist/types/client/canvas/use-pan-zoom.d.ts +4 -1
  42. package/dist/types/client/icons.d.ts +0 -10
  43. package/dist/types/client/nodes/AxStepControls.d.ts +1 -1
  44. package/dist/types/client/nodes/InlineMarkdownEditor.d.ts +4 -4
  45. package/dist/types/client/nodes/MarkdownNode.d.ts +5 -1
  46. package/dist/types/client/nodes/McpAppNode.d.ts +4 -4
  47. package/dist/types/client/nodes/viewer-runtime-state.d.ts +1 -1
  48. package/dist/types/client/state/boards-store.d.ts +81 -9
  49. package/dist/types/client/state/canvas-store.d.ts +14 -1
  50. package/dist/types/client/state/context-chip-store.d.ts +22 -0
  51. package/dist/types/client/state/context-status-store.d.ts +35 -0
  52. package/dist/types/client/state/human-store.d.ts +2 -1
  53. package/dist/types/client/state/intent-bridge.d.ts +11 -8
  54. package/dist/types/client/state/knowledge-store.d.ts +22 -0
  55. package/dist/types/client/state/near-pin-store.d.ts +44 -1
  56. package/dist/types/client/state/presence-store.d.ts +4 -4
  57. package/dist/types/client/state/presentation.d.ts +28 -0
  58. package/dist/types/client/state/relation-store.d.ts +10 -0
  59. package/dist/types/client/state/session-store.d.ts +41 -2
  60. package/dist/types/client/state/workspace-settings.d.ts +7 -0
  61. package/dist/types/client/types.d.ts +13 -1
  62. package/dist/types/client/utils/keyboard.d.ts +2 -0
  63. package/dist/types/client/utils/time-ago.d.ts +4 -0
  64. package/dist/types/mcp/context-uri-template.d.ts +3 -1
  65. package/dist/types/server/agent-presence.d.ts +10 -3
  66. package/dist/types/server/ax-context.d.ts +1 -1
  67. package/dist/types/server/canvas-db.d.ts +30 -7
  68. package/dist/types/server/canvas-operations.d.ts +24 -2
  69. package/dist/types/server/canvas-provenance.d.ts +22 -2
  70. package/dist/types/server/canvas-serialization.d.ts +2 -0
  71. package/dist/types/server/canvas-state.d.ts +93 -15
  72. package/dist/types/server/canvas-validation.d.ts +1 -1
  73. package/dist/types/server/context-brief.d.ts +94 -6
  74. package/dist/types/server/context-reads.d.ts +33 -7
  75. package/dist/types/server/edit-summary.d.ts +20 -0
  76. package/dist/types/server/index.d.ts +71 -10
  77. package/dist/types/server/knowledge-lifecycle.d.ts +221 -0
  78. package/dist/types/server/lifecycle-status.d.ts +10 -0
  79. package/dist/types/server/memory-graph.d.ts +9 -0
  80. package/dist/types/server/mutation-history.d.ts +2 -0
  81. package/dist/types/server/operations/ops/ax-shared.d.ts +1 -1
  82. package/dist/types/server/operations/ops/boards.d.ts +2 -1
  83. package/dist/types/server/operations/ops/lifecycle.d.ts +2 -0
  84. package/dist/types/server/operations/ops/memory-graph.d.ts +2 -0
  85. package/dist/types/server/operations/ops/nodes.d.ts +5 -0
  86. package/dist/types/server/operations/ops/query.d.ts +23 -0
  87. package/dist/types/server/operations/registry.d.ts +1 -0
  88. package/dist/types/server/placement.d.ts +7 -0
  89. package/dist/types/server/scope-fence.d.ts +2 -1
  90. package/dist/types/server/spatial-analysis.d.ts +6 -3
  91. package/dist/types/server/tour-control.d.ts +32 -0
  92. package/dist/types/server/wiki-links.d.ts +14 -0
  93. package/dist/types/server/workbench-auth.d.ts +2 -0
  94. package/dist/types/shared/agent-context.d.ts +2 -0
  95. package/dist/types/shared/agent-presence.d.ts +15 -12
  96. package/dist/types/shared/auto-arrange.d.ts +1 -0
  97. package/dist/types/shared/boards.d.ts +4 -4
  98. package/dist/types/shared/knowledge-lifecycle.d.ts +41 -0
  99. package/dist/types/shared/knowledge-presets.d.ts +6 -0
  100. package/dist/types/shared/lifecycle-status.d.ts +24 -0
  101. package/dist/types/shared/memory-graph.d.ts +53 -0
  102. package/dist/types/shared/relations.d.ts +68 -0
  103. package/dist/types/shared/semantic-attention.d.ts +2 -0
  104. package/dist/types/shared/tour.d.ts +38 -0
  105. package/dist/types/shared/workspace-settings.d.ts +11 -0
  106. package/docs/RELEASE.md +21 -3
  107. package/docs/adr-001-bun-only-runtime.md +7 -1
  108. package/docs/adr-002-shared-product-separate-runtimes.md +93 -0
  109. package/docs/api-reference.md +109 -0
  110. package/docs/ax-host-adapter-contract.md +1 -1
  111. package/docs/ax-state-contract.md +5 -4
  112. package/docs/cli.md +153 -15
  113. package/docs/demos/pmx-canvas-demo.mp4 +0 -0
  114. package/docs/design/AgentContext.dc.html +3 -3
  115. package/docs/design/BoardPins.dc.html +37 -22
  116. package/docs/design/Categories.dc.html +208 -0
  117. package/docs/design/CategoryEditor.dc.html +33 -0
  118. package/docs/design/Chrome.dc.html +52 -9
  119. package/docs/design/ContextChip.dc.html +224 -0
  120. package/docs/design/ContextChip600.dc.html +136 -0
  121. package/docs/design/EmptyState.dc.html +45 -0
  122. package/docs/design/Flows.dc.html +23 -1
  123. package/docs/design/HeaderMarks.dc.html +183 -0
  124. package/docs/design/Home.dc.html +19 -1
  125. package/docs/design/HomeGraph.dc.html +86 -202
  126. package/docs/design/HomeMap.dc.html +23 -1
  127. package/docs/design/HomeTeam.dc.html +32 -14
  128. package/docs/design/Lifecycle.dc.html +22 -0
  129. package/docs/design/Lifecycle600.dc.html +18 -0
  130. package/docs/design/LifecycleVariants.dc.html +157 -0
  131. package/docs/design/LinkAuthorship.dc.html +139 -0
  132. package/docs/design/LinksChanged.dc.html +203 -0
  133. package/docs/design/LinksOptions.dc.html +137 -0
  134. package/docs/design/LinksOptions600.dc.html +134 -0
  135. package/docs/design/NearPin.dc.html +9 -10
  136. package/docs/design/Pane600.dc.html +4 -3
  137. package/docs/design/Relations.dc.html +3 -2
  138. package/docs/design/Restore.dc.html +152 -0
  139. package/docs/design/SeeChange.dc.html +267 -0
  140. package/docs/design/Uses.dc.html +12 -6
  141. package/docs/design/canvas.json +146 -19
  142. package/docs/design.md +449 -16
  143. package/docs/environment.md +0 -1
  144. package/docs/evals/curation-effect.md +128 -0
  145. package/docs/http-api.md +459 -37
  146. package/docs/mcp.md +146 -18
  147. package/docs/node-types.md +58 -3
  148. package/docs/plans/design-gaps-2026-10-08.md +53 -0
  149. package/docs/plans/plan-009-tech-debt-backlog.md +379 -0
  150. package/docs/plans/plan-016-context-made-visible-wave-1.md +150 -5
  151. package/docs/plans/plan-017-knowledge-categories-and-lifecycle.md +175 -0
  152. package/docs/plans/plan-018-connected-memory-wave-2.md +594 -0
  153. package/docs/plans/plan-019-post-0.9-roadmap.md +198 -0
  154. package/docs/product-context-vision-2026-09.md +17 -1
  155. package/docs/product-vision-2026-09.md +1082 -43
  156. package/docs/product-vision-review-2026-09.md +13 -1
  157. package/docs/screenshots/workbench-live-dark.png +0 -0
  158. package/docs/screenshots/workbench-live-light.png +0 -0
  159. package/docs/sdk.md +62 -2
  160. package/package.json +1 -1
  161. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +1 -1
  162. package/plugins/pmx-canvas/plugin.json +1 -1
  163. package/plugins/pmx-canvas/runtime.json +1 -1
  164. package/plugins/pmx-canvas/tools.json +601 -22
  165. package/skills/pmx-canvas/SKILL.md +216 -42
  166. package/skills/pmx-canvas/evals/evals.json +224 -0
  167. package/skills/pmx-canvas/references/full-reference.md +120 -21
  168. package/skills/pmx-canvas/references/github-copilot-app-adapter.md +2 -2
  169. package/skills/pmx-canvas/references/importing-context.md +132 -0
  170. package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
  171. package/skills/pmx-canvas/references/tours-and-recording.md +16 -1
  172. package/skills/pmx-canvas-testing/SKILL.md +20 -0
  173. package/src/cli/agent.ts +2 -0
  174. package/src/cli/commands/ax.ts +12 -0
  175. package/src/cli/commands/boards.ts +88 -11
  176. package/src/cli/commands/edges.ts +28 -0
  177. package/src/cli/commands/groups.ts +7 -0
  178. package/src/cli/commands/nodes.ts +1 -0
  179. package/src/cli/commands/query.ts +34 -2
  180. package/src/cli/commands/record.ts +199 -48
  181. package/src/cli/index.ts +6 -1
  182. package/src/client/App.tsx +177 -70
  183. package/src/client/canvas/AttentionHistory.tsx +0 -2
  184. package/src/client/canvas/BarHint.tsx +40 -2
  185. package/src/client/canvas/BoardCopyDialog.tsx +1 -1
  186. package/src/client/canvas/BoardFolderDialog.tsx +7 -7
  187. package/src/client/canvas/BoardLinkDialog.tsx +138 -33
  188. package/src/client/canvas/BoardPinButton.tsx +33 -0
  189. package/src/client/canvas/BoardSwitcher.tsx +26 -40
  190. package/src/client/canvas/CanvasNode.tsx +360 -237
  191. package/src/client/canvas/CanvasViewport.tsx +45 -7
  192. package/src/client/canvas/CommandBar.tsx +29 -23
  193. package/src/client/canvas/CommandPalette.tsx +5 -12
  194. package/src/client/canvas/ConnectionBanner.tsx +3 -3
  195. package/src/client/canvas/ContextChip.tsx +296 -0
  196. package/src/client/canvas/ContextMenu.tsx +63 -5
  197. package/src/client/canvas/CrossBoardReferences.tsx +60 -0
  198. package/src/client/canvas/EdgeLayer.tsx +339 -76
  199. package/src/client/canvas/EmptyState.tsx +33 -18
  200. package/src/client/canvas/ExpandedNodeOverlay.tsx +72 -40
  201. package/src/client/canvas/ExternalWriters.tsx +57 -42
  202. package/src/client/canvas/HomeGraphView.tsx +942 -0
  203. package/src/client/canvas/HomeMapView.tsx +641 -0
  204. package/src/client/canvas/HomeReviewView.tsx +167 -0
  205. package/src/client/canvas/HomeView.tsx +687 -160
  206. package/src/client/canvas/IntentLayer.tsx +19 -12
  207. package/src/client/canvas/KnowledgeDialog.tsx +488 -0
  208. package/src/client/canvas/LifecycleChrome.tsx +133 -0
  209. package/src/client/canvas/LifecycleFields.tsx +91 -0
  210. package/src/client/canvas/LifecyclePanel.tsx +543 -0
  211. package/src/client/canvas/MemoryInspector.tsx +104 -0
  212. package/src/client/canvas/Minimap.tsx +3 -3
  213. package/src/client/canvas/NearPinLayer.tsx +187 -0
  214. package/src/client/canvas/NodeContextMark.tsx +175 -97
  215. package/src/client/canvas/Presentation.tsx +23 -57
  216. package/src/client/canvas/RelationPresetsDialog.tsx +413 -0
  217. package/src/client/canvas/RelationsPanel.tsx +82 -0
  218. package/src/client/canvas/SelectionBar.tsx +3 -6
  219. package/src/client/canvas/SessionPanel.tsx +90 -50
  220. package/src/client/canvas/SessionReceipt.tsx +311 -39
  221. package/src/client/canvas/ShortcutOverlay.tsx +1 -1
  222. package/src/client/canvas/SnapshotPanel.tsx +27 -36
  223. package/src/client/canvas/ToolRail.tsx +367 -192
  224. package/src/client/canvas/TopBar.tsx +354 -124
  225. package/src/client/canvas/canvas-area.ts +10 -3
  226. package/src/client/canvas/graph-geometry.ts +195 -0
  227. package/src/client/canvas/graph-model.ts +254 -0
  228. package/src/client/canvas/memory-layout.ts +106 -0
  229. package/src/client/canvas/use-chrome-height.ts +20 -0
  230. package/src/client/canvas/use-focus-trap.ts +31 -5
  231. package/src/client/canvas/use-memory-graph.ts +58 -0
  232. package/src/client/canvas/use-node-drag.ts +2 -1
  233. package/src/client/canvas/use-pan-zoom.ts +64 -7
  234. package/src/client/icons.tsx +0 -63
  235. package/src/client/mcp-app/style.css +0 -6
  236. package/src/client/nodes/AxStepControls.tsx +74 -50
  237. package/src/client/nodes/BoardNode.tsx +5 -1
  238. package/src/client/nodes/ContextNode.tsx +18 -11
  239. package/src/client/nodes/ExtAppFrame.tsx +6 -3
  240. package/src/client/nodes/FileNode.tsx +46 -42
  241. package/src/client/nodes/HtmlNode.tsx +32 -0
  242. package/src/client/nodes/ImageNode.tsx +1 -1
  243. package/src/client/nodes/InlineFormatBar.tsx +6 -9
  244. package/src/client/nodes/InlineMarkdownEditor.tsx +56 -17
  245. package/src/client/nodes/MarkdownNode.tsx +377 -109
  246. package/src/client/nodes/McpAppNode.tsx +50 -20
  247. package/src/client/nodes/MdFormatBar.tsx +21 -18
  248. package/src/client/nodes/PromptNode.tsx +1 -1
  249. package/src/client/nodes/ResponseNode.tsx +1 -1
  250. package/src/client/nodes/viewer-runtime-state.ts +54 -22
  251. package/src/client/state/attention-bridge.ts +64 -15
  252. package/src/client/state/boards-store.ts +193 -39
  253. package/src/client/state/canvas-store.ts +99 -12
  254. package/src/client/state/context-chip-store.ts +70 -0
  255. package/src/client/state/context-status-store.ts +53 -0
  256. package/src/client/state/human-store.ts +13 -7
  257. package/src/client/state/intent-bridge.ts +51 -30
  258. package/src/client/state/knowledge-store.ts +43 -0
  259. package/src/client/state/near-pin-store.ts +115 -6
  260. package/src/client/state/presence-store.ts +7 -10
  261. package/src/client/state/presentation.ts +91 -0
  262. package/src/client/state/relation-store.ts +81 -0
  263. package/src/client/state/session-store.ts +144 -18
  264. package/src/client/state/sse-bridge.ts +235 -32
  265. package/src/client/state/workspace-settings.ts +11 -0
  266. package/src/client/theme/global.css +2724 -476
  267. package/src/client/types.ts +12 -0
  268. package/src/client/utils/keyboard.ts +10 -0
  269. package/src/client/utils/time-ago.ts +14 -0
  270. package/src/json-render/renderer/index.tsx +31 -0
  271. package/src/mcp/canvas-app.ts +12 -2
  272. package/src/mcp/context-uri-template.ts +7 -4
  273. package/src/mcp/server.ts +63 -41
  274. package/src/mcp/workbench-app.ts +39 -6
  275. package/src/server/agent-presence.ts +128 -28
  276. package/src/server/ax-context.ts +27 -13
  277. package/src/server/board-export.ts +12 -1
  278. package/src/server/canvas-db.ts +331 -42
  279. package/src/server/canvas-operations.ts +195 -83
  280. package/src/server/canvas-provenance.ts +53 -22
  281. package/src/server/canvas-serialization.ts +2 -0
  282. package/src/server/canvas-state.ts +950 -122
  283. package/src/server/canvas-validation.ts +9 -2
  284. package/src/server/context-brief.ts +345 -38
  285. package/src/server/context-reads.ts +178 -30
  286. package/src/server/demo-state.json +355 -24
  287. package/src/server/edit-summary.ts +74 -0
  288. package/src/server/html-surface.ts +8 -1
  289. package/src/server/index.ts +181 -11
  290. package/src/server/knowledge-lifecycle.ts +304 -0
  291. package/src/server/lifecycle-status.ts +232 -0
  292. package/src/server/memory-graph.ts +166 -0
  293. package/src/server/mutation-history.ts +18 -6
  294. package/src/server/operations/composites.ts +32 -11
  295. package/src/server/operations/http.ts +7 -2
  296. package/src/server/operations/index.ts +4 -0
  297. package/src/server/operations/mcp.ts +26 -1
  298. package/src/server/operations/ops/ax-presence.ts +1 -1
  299. package/src/server/operations/ops/ax-read.ts +57 -6
  300. package/src/server/operations/ops/ax-timeline.ts +28 -2
  301. package/src/server/operations/ops/backup.ts +5 -3
  302. package/src/server/operations/ops/batch.ts +35 -4
  303. package/src/server/operations/ops/boards.ts +188 -47
  304. package/src/server/operations/ops/canvas-wire.ts +31 -1
  305. package/src/server/operations/ops/edges.ts +36 -2
  306. package/src/server/operations/ops/groups.ts +6 -1
  307. package/src/server/operations/ops/lifecycle.ts +262 -0
  308. package/src/server/operations/ops/memory-graph.ts +45 -0
  309. package/src/server/operations/ops/nodes.ts +107 -24
  310. package/src/server/operations/ops/query.ts +281 -68
  311. package/src/server/operations/ops/snapshots.ts +73 -1
  312. package/src/server/operations/ops/validate.ts +5 -1
  313. package/src/server/operations/ops/viewport.ts +97 -3
  314. package/src/server/operations/registry.ts +74 -25
  315. package/src/server/placement.ts +29 -0
  316. package/src/server/scope-fence.ts +78 -6
  317. package/src/server/server.ts +115 -16
  318. package/src/server/spatial-analysis.ts +48 -23
  319. package/src/server/tour-control.ts +82 -0
  320. package/src/server/wiki-links.ts +137 -0
  321. package/src/server/workbench-auth.ts +11 -0
  322. package/src/shared/agent-context.ts +3 -0
  323. package/src/shared/agent-presence.ts +15 -15
  324. package/src/shared/auto-arrange.ts +2 -0
  325. package/src/shared/boards.ts +4 -4
  326. package/src/shared/knowledge-lifecycle.ts +22 -0
  327. package/src/shared/knowledge-presets.ts +80 -0
  328. package/src/shared/lifecycle-status.ts +26 -0
  329. package/src/shared/memory-graph.ts +74 -0
  330. package/src/shared/relations.ts +98 -0
  331. package/src/shared/semantic-attention.ts +15 -1
  332. package/src/shared/tour.ts +23 -5
  333. package/src/shared/workspace-settings.ts +13 -0
  334. package/dist/types/client/canvas/ContextPinBar.d.ts +0 -1
  335. package/dist/types/client/canvas/FocusFieldLayer.d.ts +0 -1
  336. package/dist/types/client/canvas/kind-colors.d.ts +0 -3
  337. package/dist/types/server/agent-context.d.ts +0 -22
  338. 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(4px * var(--node-port-scale, 1));
640
- height: calc(4px * 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;
@@ -1010,6 +1034,8 @@ body,
1010
1034
  .app-main {
1011
1035
  flex: 1;
1012
1036
  min-width: 0;
1037
+ min-height: 0;
1038
+ container-type: inline-size;
1013
1039
  display: flex;
1014
1040
  flex-direction: column;
1015
1041
  }
@@ -1066,6 +1092,154 @@ body,
1066
1092
  min-width: 0;
1067
1093
  }
1068
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
+
1069
1243
  .top-bar-sep {
1070
1244
  width: 1px;
1071
1245
  height: 20px;
@@ -1113,9 +1287,22 @@ body,
1113
1287
 
1114
1288
  .canvas-region {
1115
1289
  flex: 1;
1290
+ min-width: 0;
1116
1291
  min-height: 0;
1117
1292
  position: relative;
1118
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; }
1119
1306
  }
1120
1307
 
1121
1308
  /* ── Agent presence (rail-chrome-v2 phase 3) ────────────────────
@@ -1213,6 +1400,25 @@ body,
1213
1400
  white-space: nowrap;
1214
1401
  min-width: 0;
1215
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
+ }
1216
1422
  .agent-chip-who {
1217
1423
  font: 10px var(--font-code);
1218
1424
  font-weight: 400;
@@ -1305,6 +1511,65 @@ body,
1305
1511
  .agent-chip {
1306
1512
  border-left: 3px solid var(--identity-color, transparent);
1307
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
+ }
1308
1573
  .minimap-presence {
1309
1574
  background: var(--identity-color, var(--presence-color));
1310
1575
  }
@@ -1359,7 +1624,9 @@ body,
1359
1624
 
1360
1625
  /* The node an attached agent is editing right now: the violet agent bar
1361
1626
  across the top of the header (docs/design/Context.dc.html). */
1362
- .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 {
1363
1630
  box-shadow: inset 0 2.5px 0 var(--c-agent);
1364
1631
  }
1365
1632
 
@@ -1929,6 +2196,64 @@ body,
1929
2196
  letter-spacing: 0;
1930
2197
  }
1931
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
+
1932
2257
  /* ── Command bar (rail-chrome-v2 phase 5) ─────────────────────
1933
2258
  The human's steering surface while a session is attached: the design's
1934
2259
  floating composer, centered at the bottom of the canvas region, with the
@@ -1960,13 +2285,9 @@ body,
1960
2285
  border: 1px solid color-mix(in srgb, var(--c-pin) 35%, transparent);
1961
2286
  background: color-mix(in srgb, var(--c-pin) 12%, transparent);
1962
2287
  color: var(--c-pin);
1963
- font-size: 10px;
2288
+ font-size: 11px;
1964
2289
  font-weight: 600;
1965
2290
  }
1966
- .command-bar-chip-glyph {
1967
- font-size: 10px;
1968
- line-height: 1;
1969
- }
1970
2291
  .command-bar-chip-label {
1971
2292
  overflow: hidden;
1972
2293
  text-overflow: ellipsis;
@@ -2117,53 +2438,6 @@ body,
2117
2438
  cursor: default;
2118
2439
  }
2119
2440
 
2120
- /* Context-budget meter in the top bar (session-only) */
2121
- .context-budget {
2122
- --tone: var(--c-ok);
2123
- display: inline-flex;
2124
- align-items: center;
2125
- gap: 8px;
2126
- flex-shrink: 0;
2127
- }
2128
- .context-budget.tone-warn {
2129
- --tone: var(--c-warn);
2130
- }
2131
- .context-budget.tone-danger {
2132
- --tone: var(--c-danger);
2133
- }
2134
- .context-budget-caption {
2135
- font-size: 10px;
2136
- font-weight: 600;
2137
- letter-spacing: 0.06em;
2138
- text-transform: uppercase;
2139
- color: var(--c-muted);
2140
- }
2141
- .context-budget-track {
2142
- display: block;
2143
- width: 72px;
2144
- height: 5px;
2145
- border-radius: 3px;
2146
- background: var(--c-line);
2147
- overflow: hidden;
2148
- }
2149
- .context-budget-fill {
2150
- display: block;
2151
- height: 100%;
2152
- border-radius: 3px;
2153
- background: var(--c-accent);
2154
- transition: width 180ms ease;
2155
- }
2156
- .context-budget.tone-warn .context-budget-fill,
2157
- .context-budget.tone-danger .context-budget-fill {
2158
- background: var(--tone);
2159
- }
2160
- .context-budget-label {
2161
- font: 11px var(--font-code);
2162
- color: var(--c-text-soft);
2163
- min-width: 30px;
2164
- text-align: right;
2165
- }
2166
-
2167
2441
  /* ── External Steering (rail-chrome-v2 phase 6) ───────────────
2168
2442
  External writers, no session: a passive top-bar indicator, the activity
2169
2443
  feed popover under it, and the connected-writers sheet. Quiet otherwise. */
@@ -2624,6 +2898,7 @@ body,
2624
2898
  .session-panel button:focus-visible,
2625
2899
  .session-panel input:focus-visible,
2626
2900
  .command-bar button:focus-visible,
2901
+ .context-pin-bar button:focus-visible,
2627
2902
  .command-bar-input:focus-visible,
2628
2903
  .selection-bar button:focus-visible,
2629
2904
  .activity-feed button:focus-visible,
@@ -2674,23 +2949,13 @@ body,
2674
2949
  .start-session-dot {
2675
2950
  animation: none;
2676
2951
  }
2677
- .command-palette,
2678
- .snapshot-panel,
2679
- .session-receipt,
2680
- .canvas-node.group-node,
2681
- .activity-feed,
2682
- .writers-sheet,
2683
- .context-budget-fill {
2684
- animation: none;
2685
- transition: none;
2686
- }
2687
2952
  }
2688
2953
 
2689
2954
  /* ── Edge creation (rail-chrome-v2 item 15) ───────────────────── */
2690
2955
  .canvas-node.is-edge-target {
2691
2956
  box-shadow: 0 0 0 2px var(--c-accent), 0 0 0 6px color-mix(in srgb, var(--c-accent) 18%, transparent);
2692
2957
  }
2693
- .canvas-node.is-edge-target .node-port {
2958
+ .canvas-node.is-edge-target .node-port-dot {
2694
2959
  opacity: 1;
2695
2960
  background: var(--c-accent);
2696
2961
  }
@@ -2829,12 +3094,14 @@ body,
2829
3094
  top: 14px;
2830
3095
  right: 14px;
2831
3096
  width: 290px;
2832
- 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. */
2833
3100
  padding: 12px 14px;
2834
3101
  border-radius: 12px;
2835
3102
  border: 1px solid var(--c-line);
2836
- background: color-mix(in srgb, var(--c-panel) 96%, transparent);
2837
- box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
3103
+ background: var(--c-panel);
3104
+ box-shadow: var(--e-2);
2838
3105
  animation: session-panel-in 180ms ease;
2839
3106
  }
2840
3107
  .session-receipt-head {
@@ -2920,6 +3187,9 @@ body,
2920
3187
  color: var(--c-warn);
2921
3188
  font-size: var(--fs-meta);
2922
3189
  }
3190
+ .session-receipt-warn > span {
3191
+ flex: 1;
3192
+ }
2923
3193
  .session-receipt-warn svg,
2924
3194
  .session-receipt-context-head svg {
2925
3195
  width: 13px;
@@ -2959,25 +3229,108 @@ body,
2959
3229
  font-size: var(--fs-meta);
2960
3230
  color: var(--c-muted);
2961
3231
  }
2962
- .session-receipt-mini {
2963
- padding: 2px var(--space-2);
2964
- border: 1px solid var(--c-line);
2965
- border-radius: var(--r-control);
2966
- background: none;
2967
- color: var(--c-text);
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;
3237
+ display: flex;
3238
+ flex-direction: column;
3239
+ gap: 4px;
2968
3240
  font-size: var(--fs-meta);
2969
- cursor: pointer;
3241
+ color: var(--c-text-soft);
2970
3242
  }
2971
- .session-receipt-lens {
3243
+ .session-receipt-edit-line {
2972
3244
  display: flex;
2973
- align-items: center;
2974
- gap: var(--space-2);
2975
- padding: 0;
2976
- border: none;
2977
- background: none;
3245
+ align-items: baseline;
3246
+ justify-content: space-between;
3247
+ gap: 8px;
3248
+ }
3249
+ .session-receipt-edit-change {
2978
3250
  color: var(--c-muted);
2979
- font-size: var(--fs-meta);
2980
- cursor: pointer;
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;
2981
3334
  }
2982
3335
  .session-receipt-lens-track {
2983
3336
  position: relative;
@@ -3116,7 +3469,13 @@ body,
3116
3469
  /* The resize handle and connect ports carry their own pointer-events: auto,
3117
3470
  which punches through the inert world — a pan started on them never pans. */
3118
3471
  .canvas-viewport.pan-mode .node-resize-handle,
3119
- .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 {
3120
3479
  pointer-events: none;
3121
3480
  }
3122
3481
  .canvas-viewport.pan-mode:active {
@@ -3420,6 +3779,11 @@ body,
3420
3779
  box-shadow: 0 18px 48px var(--c-shadow-heavy);
3421
3780
  }
3422
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
+
3423
3787
  .toolbar-menu-item {
3424
3788
  display: flex;
3425
3789
  align-items: center;
@@ -3456,6 +3820,21 @@ body,
3456
3820
  color: var(--c-accent);
3457
3821
  }
3458
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
+
3459
3838
  .toolbar-menu-separator {
3460
3839
  height: 1px;
3461
3840
  margin: 4px 8px;
@@ -3488,6 +3867,73 @@ body,
3488
3867
  border-radius: 50%;
3489
3868
  }
3490
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
+
3491
3937
 
3492
3938
  @media (max-width: 900px) {
3493
3939
  .toolbar-tooltip {
@@ -3927,6 +4373,9 @@ body,
3927
4373
  }
3928
4374
 
3929
4375
  /* Auto-fit transition */
4376
+ .canvas-node-owner {
4377
+ transition: height 0.2s ease;
4378
+ }
3930
4379
  .canvas-node {
3931
4380
  transition: height 0.2s ease, box-shadow 0.15s ease;
3932
4381
  }
@@ -3977,8 +4426,23 @@ html.is-node-resizing .canvas-node {
3977
4426
  transition: box-shadow 0.15s ease !important;
3978
4427
  }
3979
4428
 
3980
- html.is-node-dragging,
3981
- 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
+
3982
4446
  html.is-canvas-panning,
3983
4447
  html.is-canvas-panning * {
3984
4448
  cursor: grabbing !important;
@@ -4193,6 +4657,86 @@ html.is-node-resizing .ext-app-preview-catcher {
4193
4657
  stroke-width: calc(0.5 * var(--edge-label-scale, 1));
4194
4658
  }
4195
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
+
4196
4740
  /* Trace nodes — compact pills for agent tool/subagent visualization */
4197
4741
  .canvas-node.trace-node {
4198
4742
  border-radius: 28px;
@@ -4385,6 +4929,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4385
4929
  /* MCP app iframe */
4386
4930
  .mcp-app-frame-stack {
4387
4931
  position: relative;
4932
+ isolation: isolate;
4388
4933
  flex: 1;
4389
4934
  min-width: 0;
4390
4935
  min-height: 0;
@@ -4719,13 +5264,9 @@ html.is-node-resizing .ext-app-preview-catcher {
4719
5264
  /* Selection action bar — floating bottom-center of the canvas region
4720
5265
  (rail-chrome-v2 phase 7, item 13). */
4721
5266
  /* In a session the command bar owns the bottom-center slot — lift the
4722
- selection bar clear of it (composer + chips row); on the quiet board the
4723
- pin bar does, so lift past that instead. */
4724
- [data-session-active='true'] .selection-bar {
4725
- bottom: 124px;
4726
- }
4727
- .selection-bar.is-above-pin-bar {
4728
- 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));
4729
5270
  }
4730
5271
  .selection-bar {
4731
5272
  position: absolute;
@@ -4733,7 +5274,12 @@ html.is-node-resizing .ext-app-preview-catcher {
4733
5274
  left: 50%;
4734
5275
  transform: translateX(-50%);
4735
5276
  display: flex;
5277
+ flex-wrap: wrap;
5278
+ justify-content: center;
4736
5279
  align-items: center;
5280
+ box-sizing: border-box;
5281
+ width: max-content;
5282
+ max-width: calc(100% - 32px);
4737
5283
  gap: 2px;
4738
5284
  padding: 6px 8px;
4739
5285
  background: color-mix(in srgb, var(--c-panel) 97%, transparent);
@@ -5159,7 +5705,24 @@ html.is-node-resizing .ext-app-preview-catcher {
5159
5705
  border-color 150ms ease,
5160
5706
  background 150ms ease;
5161
5707
  }
5162
- .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 {
5163
5726
  border-color: color-mix(in srgb, var(--group-color, var(--c-accent)) 55%, transparent);
5164
5727
  }
5165
5728
  .canvas-node.group-node.active,
@@ -5397,73 +5960,6 @@ html.is-node-resizing .ext-app-preview-catcher {
5397
5960
  color: var(--c-dim);
5398
5961
  }
5399
5962
 
5400
- /* ── Context pin bar — persistent floating indicator ─────────── */
5401
- .context-pin-bar {
5402
- position: absolute;
5403
- bottom: 18px;
5404
- left: 50%;
5405
- transform: translateX(-50%);
5406
- display: flex;
5407
- align-items: center;
5408
- gap: 8px;
5409
- padding: 8px 14px;
5410
- background: var(--c-panel-glass);
5411
- backdrop-filter: blur(12px);
5412
- border: 1px solid var(--c-pin);
5413
- border-radius: var(--radius);
5414
- box-shadow: 0 8px 32px var(--c-shadow), 0 0 0 1px color-mix(in srgb, var(--c-pin) 15%, transparent);
5415
- z-index: 64;
5416
- white-space: nowrap;
5417
- }
5418
-
5419
- .context-pin-bar-count {
5420
- font-size: 12px;
5421
- font-weight: 600;
5422
- color: var(--c-pin);
5423
- }
5424
-
5425
- .context-pin-bar-btn {
5426
- padding: 5px 12px;
5427
- font-size: 12px;
5428
- font-weight: 600;
5429
- background: color-mix(in srgb, var(--c-pin) 10%, transparent);
5430
- border: 1px solid color-mix(in srgb, var(--c-pin) 30%, transparent);
5431
- border-radius: var(--radius-sm);
5432
- color: var(--c-pin);
5433
- cursor: pointer;
5434
- font-family: var(--font-ui);
5435
- }
5436
-
5437
- .context-pin-bar-btn:hover {
5438
- background: color-mix(in srgb, var(--c-pin) 20%, transparent);
5439
- border-color: var(--c-pin);
5440
- }
5441
-
5442
- .context-pin-bar-ask {
5443
- background: var(--c-pin);
5444
- color: var(--c-on-pin);
5445
- border-color: var(--c-pin);
5446
- }
5447
-
5448
- .context-pin-bar-ask:hover {
5449
- background: color-mix(in srgb, var(--c-pin) 85%, var(--c-text));
5450
- border-color: color-mix(in srgb, var(--c-pin) 85%, var(--c-text));
5451
- }
5452
-
5453
- .context-pin-bar-clear {
5454
- background: none;
5455
- border: none;
5456
- color: var(--c-muted);
5457
- font-size: 16px;
5458
- padding: 2px 6px;
5459
- line-height: 1;
5460
- }
5461
-
5462
- .context-pin-bar-clear:hover {
5463
- color: var(--c-text);
5464
- background: var(--c-surface-hover);
5465
- }
5466
-
5467
5963
  /* ── Expanded overlay actions ────────────────────────────────── */
5468
5964
  /* Expanded node view (rail-chrome-v2 phase 7, item 16): scrim + inset panel
5469
5965
  with 36/48px margins, header with kind pill + pin state, footer strip. */
@@ -5491,10 +5987,34 @@ html.is-node-resizing .ext-app-preview-catcher {
5491
5987
  .expanded-overlay-panel.is-pinned {
5492
5988
  border-color: color-mix(in srgb, var(--c-pin) 45%, var(--c-line));
5493
5989
  }
5494
- .expanded-header {
5990
+ .expanded-overlay-panel .ax-step-dock {
5991
+ /* Its sticky/backdrop-filter context must paint hints above the Source FAB. */
5992
+ z-index: 2;
5993
+ }
5994
+ .expanded-overlay-panel:has(.ax-step-dock) .md-expanded-document {
5495
5995
  display: flex;
5496
- align-items: center;
5497
- gap: 10px;
5996
+ flex-direction: column;
5997
+ }
5998
+ .expanded-overlay-panel:has(.ax-step-dock) .md-reader {
5999
+ flex: 1;
6000
+ min-height: 0;
6001
+ }
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;
6013
+ }
6014
+ .expanded-header {
6015
+ display: flex;
6016
+ align-items: center;
6017
+ gap: 10px;
5498
6018
  height: 46px;
5499
6019
  padding: 0 16px;
5500
6020
  border-bottom: 1px solid var(--c-line);
@@ -5729,8 +6249,22 @@ html.is-node-resizing .ext-app-preview-catcher {
5729
6249
  background: color-mix(in srgb, var(--c-warn) 14%, transparent);
5730
6250
  }
5731
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
+
5732
6263
  /* Near a pin (docs/design/NearPin.dc.html): dotted, weaker than in context. */
5733
6264
  .node-near-mark {
6265
+ background: none;
6266
+ font-family: inherit;
6267
+ cursor: pointer;
5734
6268
  display: inline-flex;
5735
6269
  align-items: center;
5736
6270
  gap: calc(4px * var(--node-chrome-scale, 1));
@@ -5757,6 +6291,139 @@ html.is-node-resizing .ext-app-preview-catcher {
5757
6291
  .node-near-dot {
5758
6292
  fill: currentColor;
5759
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
+ }
5760
6427
 
5761
6428
  /* Pinned by an agent: a violet dot on the pin badge. */
5762
6429
  .ctx-pin-mark {
@@ -5800,6 +6467,31 @@ html.is-node-resizing .ext-app-preview-catcher {
5800
6467
  color: var(--c-on-pin);
5801
6468
  }
5802
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
+
5803
6495
  /* ── Context pin HUD — top-right pill ────────────────────────── */
5804
6496
  .context-pin-hud {
5805
6497
  display: flex;
@@ -6427,6 +7119,10 @@ html.is-node-resizing .ext-app-preview-catcher {
6427
7119
  z-index: 5;
6428
7120
  width: 560px;
6429
7121
  max-width: calc(100% - 48px);
7122
+ max-height: calc(100% - 48px);
7123
+ overflow-y: auto;
7124
+ box-sizing: border-box;
7125
+ padding: 2px;
6430
7126
  display: flex;
6431
7127
  flex-direction: column;
6432
7128
  align-items: center;
@@ -6434,6 +7130,9 @@ html.is-node-resizing .ext-app-preview-catcher {
6434
7130
  text-align: center;
6435
7131
  animation: empty-state-in 0.4s ease-out;
6436
7132
  }
7133
+ .empty-state > * {
7134
+ flex-shrink: 0;
7135
+ }
6437
7136
  @keyframes empty-state-in {
6438
7137
  from {
6439
7138
  opacity: 0;
@@ -6464,7 +7163,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6464
7163
  }
6465
7164
  .empty-state-grid {
6466
7165
  display: grid;
6467
- grid-template-columns: 1fr 1fr;
7166
+ grid-template-columns: minmax(0, 1fr);
6468
7167
  gap: 10px;
6469
7168
  width: 100%;
6470
7169
  }
@@ -6484,6 +7183,9 @@ html.is-node-resizing .ext-app-preview-catcher {
6484
7183
  .empty-state-action:hover {
6485
7184
  border-color: color-mix(in srgb, var(--c-accent) 40%, transparent);
6486
7185
  }
7186
+ .empty-state-action > svg {
7187
+ flex-shrink: 0;
7188
+ }
6487
7189
  .empty-state-action.is-agent:hover {
6488
7190
  border-color: color-mix(in srgb, var(--c-agent) 45%, transparent);
6489
7191
  }
@@ -6501,8 +7203,31 @@ html.is-node-resizing .ext-app-preview-catcher {
6501
7203
  }
6502
7204
  .empty-state-action-label {
6503
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 {
6504
7224
  font-size: 12px;
6505
7225
  font-weight: 600;
7226
+ color: var(--c-text-soft);
7227
+ }
7228
+ .empty-state-agent .is-agent {
7229
+ width: 100%;
7230
+ margin-top: 12px;
6506
7231
  }
6507
7232
  .empty-state-action kbd {
6508
7233
  padding: 1px 6px;
@@ -7004,7 +7729,8 @@ html.is-node-dragging .intent-line-layer {
7004
7729
  cursor: pointer;
7005
7730
  }
7006
7731
  .is-presenting > :not(.app-main):not(.presentation-error):not(.presentation-navigation),
7007
- .is-presenting .app-main > :not(.canvas-region),
7732
+ .is-presenting .app-main > :not(.workspace),
7733
+ .is-presenting .workspace > :not(.canvas-region),
7008
7734
  .is-presenting .canvas-region > :not(.canvas-viewport) {
7009
7735
  display: none !important;
7010
7736
  }
@@ -7045,9 +7771,9 @@ html.is-node-dragging .intent-line-layer {
7045
7771
  display: inline-flex;
7046
7772
  align-items: center;
7047
7773
  gap: 6px;
7048
- max-width: 280px;
7774
+ min-width: 0;
7775
+ max-width: min(280px, 100%);
7049
7776
  padding: 6px 8px;
7050
- margin-left: -8px;
7051
7777
  background: none;
7052
7778
  border: 1px solid transparent;
7053
7779
  border-radius: 8px;
@@ -7086,6 +7812,8 @@ html.is-node-dragging .intent-line-layer {
7086
7812
  flex-shrink: 0;
7087
7813
  }
7088
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; }
7089
7817
  .board-switcher-menu .toolbar-menu-item { padding: 10px; gap: 12px; }
7090
7818
  .board-switcher-menu .toolbar-menu-item:hover,
7091
7819
  .board-switcher-menu .toolbar-menu-item:focus-visible {
@@ -7112,132 +7840,6 @@ html.is-node-dragging .intent-line-layer {
7112
7840
  }
7113
7841
  .board-switcher-actions { border-top: 1px solid var(--c-line); margin-top: 6px; padding-top: 6px; flex-shrink: 0; }
7114
7842
 
7115
- .home-view {
7116
- position: absolute;
7117
- inset: 0;
7118
- /* Above the canvas's floating chrome (the updates tab sits at 60), below menus and prompts. */
7119
- z-index: 70;
7120
- overflow-y: auto;
7121
- background: var(--c-bg);
7122
- padding: 32px 16px;
7123
- }
7124
- .home-view-inner {
7125
- max-width: 720px;
7126
- margin: 0 auto;
7127
- display: flex;
7128
- flex-direction: column;
7129
- gap: 18px;
7130
- }
7131
- .home-view-head {
7132
- display: flex;
7133
- align-items: center;
7134
- justify-content: space-between;
7135
- gap: 12px;
7136
- }
7137
- .home-view-title {
7138
- margin: 0;
7139
- font-size: 20px;
7140
- font-weight: 650;
7141
- color: var(--c-text);
7142
- }
7143
- .home-view-new {
7144
- padding: 7px 14px;
7145
- border-radius: 8px;
7146
- border: 1px solid var(--c-accent);
7147
- background: var(--c-accent);
7148
- color: var(--c-bg);
7149
- font-weight: 600;
7150
- cursor: pointer;
7151
- }
7152
- .home-view-empty {
7153
- color: var(--c-text-soft);
7154
- font-size: 13px;
7155
- }
7156
- .home-view-list {
7157
- list-style: none;
7158
- margin: 0;
7159
- padding: 0;
7160
- display: flex;
7161
- flex-direction: column;
7162
- gap: 7px;
7163
- }
7164
- .home-board {
7165
- display: flex;
7166
- align-items: center;
7167
- gap: 8px;
7168
- padding: 7px 8px 7px 5px;
7169
- border: 1px solid var(--c-line);
7170
- border-radius: 10px;
7171
- background: var(--c-panel);
7172
- }
7173
- .home-board.is-confirming {
7174
- border-color: var(--c-danger);
7175
- padding: 10px 12px;
7176
- flex-wrap: wrap;
7177
- }
7178
- .home-board-open {
7179
- flex: 1;
7180
- min-width: 0;
7181
- display: flex;
7182
- flex-direction: column;
7183
- align-items: flex-start;
7184
- gap: 2px;
7185
- padding: 6px 8px;
7186
- background: none;
7187
- border: none;
7188
- border-radius: 8px;
7189
- color: var(--c-text);
7190
- cursor: pointer;
7191
- text-align: left;
7192
- }
7193
- .home-board-open:hover {
7194
- background: color-mix(in srgb, var(--c-accent) 10%, transparent);
7195
- }
7196
- .home-board-name {
7197
- max-width: 100%;
7198
- font-size: 14px;
7199
- font-weight: 600;
7200
- overflow: hidden;
7201
- text-overflow: ellipsis;
7202
- white-space: nowrap;
7203
- }
7204
- .home-board-meta {
7205
- font: 11px var(--font-code);
7206
- color: var(--c-text-soft);
7207
- }
7208
- .home-board-confirm-text {
7209
- flex: 1 1 240px;
7210
- font-size: 13px;
7211
- color: var(--c-text);
7212
- }
7213
- .home-board-actions {
7214
- display: flex;
7215
- gap: 2px;
7216
- flex-shrink: 0;
7217
- }
7218
- .home-board-action {
7219
- padding: 6px 7px;
7220
- border-radius: 6px;
7221
- border: 1px solid transparent;
7222
- background: none;
7223
- color: var(--c-dim);
7224
- font-size: 11px;
7225
- cursor: pointer;
7226
- }
7227
- .home-board-action:hover {
7228
- border-color: var(--c-line);
7229
- background: color-mix(in srgb, var(--c-text) 5%, transparent);
7230
- color: var(--c-text-soft);
7231
- }
7232
- .home-board-action.is-danger {
7233
- border-color: var(--c-danger);
7234
- background: var(--c-danger);
7235
- color: var(--c-bg);
7236
- font-weight: 600;
7237
- }
7238
- .home-board-open:focus-visible,
7239
- .home-board-action:focus-visible,
7240
- .home-view-new:focus-visible,
7241
7843
  .board-switcher-button:focus-visible {
7242
7844
  outline: 2px solid var(--c-accent);
7243
7845
  outline-offset: 2px;
@@ -7291,204 +7893,1850 @@ html.is-node-dragging .intent-line-layer {
7291
7893
  word-break: normal;
7292
7894
  }
7293
7895
 
7294
- /* ── Home categories ── */
7295
- .home-section {
7296
- display: flex;
7297
- flex-direction: column;
7298
- gap: 8px;
7299
- }
7300
- .home-section-head {
7301
- display: flex;
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 {
7924
+ display: flex;
7925
+ flex-direction: column;
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));
7931
+ }
7932
+ .home-library {
7933
+ padding: 16px 12px;
7934
+ border-right: 1px solid var(--c-line);
7935
+ }
7936
+ .home-library-head {
7937
+ display: flex;
7302
7938
  align-items: center;
7303
- gap: 9px;
7304
- min-height: 42px;
7939
+ justify-content: space-between;
7940
+ padding: 0 4px;
7941
+ }
7942
+ .home-library-title {
7943
+ font-size: 15px;
7944
+ font-weight: 600;
7945
+ }
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);
7956
+ }
7957
+ .home-search svg {
7958
+ width: 14px;
7959
+ height: 14px;
7960
+ flex-shrink: 0;
7961
+ }
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;
7971
+ }
7972
+ .home-search:focus-within {
7973
+ border-color: var(--c-accent);
7974
+ }
7975
+ .home-library-section {
7976
+ display: flex;
7977
+ flex-direction: column;
7978
+ gap: 2px;
7979
+ }
7980
+ .home-library-section.is-folders {
7981
+ flex: 1;
7982
+ }
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);
7990
+ }
7991
+ .home-main-section .home-section-label {
7992
+ padding: 0;
7993
+ }
7994
+ .home-tree,
7995
+ .home-pinned {
7996
+ margin: 0;
7997
+ padding: 0;
7998
+ list-style: none;
7999
+ display: flex;
8000
+ flex-direction: column;
8001
+ gap: 2px;
8002
+ }
8003
+ .home-tree-row,
8004
+ .home-pinned-row,
8005
+ .home-tree-new {
8006
+ display: flex;
8007
+ align-items: center;
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;
8017
+ }
8018
+ .home-tree-row:hover,
8019
+ .home-pinned-row:hover {
8020
+ background: color-mix(in srgb, var(--c-panel) 70%, transparent);
8021
+ }
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 {
8029
+ display: flex;
8030
+ align-items: center;
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);
8039
+ cursor: pointer;
8040
+ }
8041
+ .home-tree-chevron svg {
8042
+ width: 12px;
8043
+ height: 12px;
8044
+ }
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;
8057
+ font-size: 12px;
8058
+ font-weight: 500;
8059
+ text-align: left;
8060
+ cursor: pointer;
8061
+ }
8062
+ .home-pinned-row {
7305
8063
  width: 100%;
7306
- padding: 9px 10px;
7307
- background: none;
7308
- border: none;
7309
- border-radius: 8px;
8064
+ cursor: pointer;
8065
+ }
8066
+ .home-tree-row.is-unfiled .home-tree-name {
7310
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);
7311
8089
  font-size: 12px;
7312
- font-weight: 600;
7313
- text-transform: uppercase;
7314
- letter-spacing: 0.06em;
7315
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;
7316
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;
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"] {
9175
+ background: var(--c-panel);
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;
9182
+ font: inherit;
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;
9243
+ cursor: pointer;
9244
+ }
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;
7317
9281
  }
7318
- .home-section-head:hover {
7319
- color: var(--c-text);
7320
- background: color-mix(in srgb, var(--c-text) 5%, transparent);
9282
+ .memory-edge.is-missing {
9283
+ stroke: var(--c-warn);
9284
+ stroke-dasharray: 5 3;
7321
9285
  }
7322
- .home-section-chevron,
7323
- .home-section-folder {
7324
- flex: 0 0 18px;
7325
- stroke: currentColor;
7326
- stroke-width: 1.75;
7327
- stroke-linecap: round;
7328
- stroke-linejoin: round;
9286
+ .memory-edge.is-missing text {
9287
+ fill: var(--c-warn);
7329
9288
  }
7330
- .home-section-chevron {
7331
- transition: transform 120ms ease;
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);
7332
9299
  }
7333
- .home-section-head[aria-expanded='true'] .home-section-chevron {
7334
- transform: rotate(90deg);
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));
7335
9303
  }
7336
- .home-section-folder { color: var(--c-dim); }
7337
- .home-section-count {
7338
- font: 11px var(--font-code);
7339
- text-transform: none;
7340
- color: var(--c-dim);
7341
- margin-left: auto;
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;
7342
9310
  }
7343
- .home-section-head:focus-visible {
7344
- outline: 2px solid var(--c-accent);
7345
- outline-offset: 2px;
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;
9321
+ display: flex;
9322
+ flex-direction: column;
9323
+ justify-content: center;
9324
+ gap: 4px;
7346
9325
  }
7347
- .home-section-head {
7348
- text-transform: none;
7349
- letter-spacing: normal;
9326
+ .home-memory-select strong {
9327
+ overflow: hidden;
9328
+ text-overflow: ellipsis;
9329
+ white-space: nowrap;
7350
9330
  max-width: 100%;
7351
9331
  }
7352
- .home-section-name {
7353
- font-size: 13px;
7354
- font-weight: 650;
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;
7355
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;
7356
9365
  }
7357
- .home-folder-children {
9366
+ .home-memory-details li {
7358
9367
  display: flex;
7359
9368
  flex-direction: column;
7360
- gap: 10px;
7361
- padding-left: 12px;
7362
- border-left: 1px solid var(--c-line);
9369
+ align-items: flex-start;
9370
+ gap: 4px;
9371
+ margin-bottom: 10px;
7363
9372
  }
7364
- .home-search { width: 100%; box-sizing: border-box; }
7365
- .board-copy-dialog,
7366
- .board-link-dialog {
7367
- width: min(540px, calc(100vw - 32px));
7368
- max-height: calc(100dvh - 40px);
7369
- overflow-y: auto;
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);
9387
+ border-top: 1px solid var(--c-line);
7370
9388
  box-sizing: border-box;
7371
9389
  }
7372
- .board-copy-dialog form,
7373
- .board-copy-field,
7374
- .board-copy-options {
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 {
7375
9417
  display: flex;
7376
9418
  flex-direction: column;
7377
- gap: 8px;
9419
+ height: 100%;
9420
+ min-height: 0;
9421
+ border: 0;
9422
+ border-radius: 0;
9423
+ padding: 8px 16px 12px;
7378
9424
  }
7379
- .board-copy-dialog h2,
7380
- .board-link-dialog h2 { margin: 0 0 12px; font-size: 17px; }
7381
- .board-copy-field { color: var(--c-text-soft); font-size: 12px; }
7382
- .board-copy-cards {
7383
- margin: 14px 0;
7384
- padding: 8px;
7385
- border: 1px solid var(--c-line);
7386
- border-radius: 9px;
7387
- max-height: 230px;
7388
- overflow-y: auto;
9425
+ .home-memory-inspector .home-memory-detail-header {
9426
+ flex-shrink: 0;
9427
+ padding-bottom: 8px;
9428
+ border-bottom: 1px solid var(--c-line);
7389
9429
  }
7390
- .board-copy-cards legend { color: var(--c-text-soft); font-size: 12px; }
7391
- .board-copy-card {
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;
7392
9463
  display: flex;
7393
9464
  align-items: center;
7394
- gap: 9px;
9465
+ gap: 8px;
9466
+ background: var(--c-panel);
9467
+ padding: 4px;
9468
+ border-radius: var(--r-node);
9469
+ }
9470
+ .home-memory-status {
9471
+ position: absolute;
9472
+ top: 8px;
9473
+ left: 12px;
9474
+ background: var(--c-panel);
7395
9475
  padding: 8px;
7396
- border-radius: 7px;
7397
- cursor: pointer;
7398
9476
  }
7399
- .board-copy-card:hover { background: color-mix(in srgb, var(--c-accent) 9%, transparent); }
7400
- .board-copy-card span { display: flex; flex-direction: column; min-width: 0; }
7401
- .board-copy-card strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
7402
- .board-copy-card small,
7403
- .board-link-results small { color: var(--c-text-soft); font: 11px var(--font-code); }
7404
- .board-copy-options { font-size: 13px; }
7405
- .board-copy-options label { display: flex; gap: 8px; align-items: center; }
7406
- .board-copy-note,
7407
- .board-copy-status { color: var(--c-text-soft); font-size: 12px; line-height: 1.5; }
7408
- .board-copy-error { color: var(--c-danger); font-size: 12px; margin-top: 8px; }
7409
- .board-link-results { display: flex; flex-direction: column; gap: 5px; margin: 12px 0; padding: 0; max-height: 320px; overflow-y: auto; list-style: none; }
7410
- .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; }
7411
- .board-link-results button:hover,
7412
- .board-link-results button:focus-visible { border-color: var(--c-accent); outline: none; }
7413
- .home-folder-dialog {
7414
- width: min(460px, calc(100vw - 32px));
7415
- max-height: calc(100dvh - 48px);
7416
- overflow-y: auto;
7417
- box-sizing: border-box;
9477
+ .home-memory-legend {
9478
+ font-size: 11px;
9479
+ color: var(--c-muted);
9480
+ border-top: 1px solid var(--c-line);
7418
9481
  }
7419
- .home-folder-hint {
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;
7420
9545
  color: var(--c-text-soft);
7421
- font-size: 12px;
7422
- line-height: 1.5;
9546
+ font: var(--fs-ui) var(--font-ui);
9547
+ cursor: pointer;
7423
9548
  overflow-wrap: anywhere;
9549
+ text-align: left;
7424
9550
  }
7425
- .home-folder-options {
7426
- margin: 12px 0;
7427
- padding: 8px;
7428
- border: 1px solid var(--c-line);
7429
- border-radius: 8px;
7430
- max-height: 240px;
7431
- overflow-y: auto;
9551
+ .wiki-link.is-unresolved {
9552
+ text-decoration-style: dashed;
9553
+ color: var(--c-warn);
7432
9554
  }
7433
- .home-folder-options legend { color: var(--c-text-soft); font-size: 12px; }
7434
- .home-folder-option {
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 */
7435
9595
  display: flex;
7436
9596
  align-items: center;
7437
- gap: 8px;
7438
- padding: 8px;
7439
- border-radius: 6px;
7440
- font-size: 13px;
7441
- overflow-wrap: anywhere;
7442
- cursor: pointer;
9597
+ justify-content: center;
9598
+ padding: 20px;
9599
+ background: var(--c-panel-overlay);
7443
9600
  }
7444
- .home-folder-option:has(input:checked) { background: color-mix(in srgb, var(--c-accent) 12%, transparent); }
7445
- .home-folder-option input { accent-color: var(--c-accent); flex-shrink: 0; }
7446
- .home-folder-new { display: flex; flex-direction: column; gap: 6px; font-size: 12px; overflow-wrap: anywhere; }
7447
- .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; }
7448
- .attachment-node p { margin: 0; color: var(--c-text-soft); line-height: 1.5; }
7449
- .attachment-node a, .md-import-source a { color: var(--c-accent); }
7450
- .attachment-status { font-weight: 600; }
7451
- .attachment-button,
7452
- .presentation-exit,
7453
- .export-dialog-links a {
7454
- min-height: 38px;
7455
- padding: 8px 14px;
7456
- border: 1px solid var(--c-text-soft);
7457
- border-radius: 8px;
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;
7458
9609
  background: var(--c-panel);
7459
9610
  color: var(--c-text);
7460
- font: inherit;
7461
- font-weight: 600;
7462
- cursor: pointer;
7463
- }
7464
- .attachment-button.is-primary,
7465
- .export-dialog-links a.is-primary { background: var(--c-accent); border-color: var(--c-accent); color: var(--c-bg); }
7466
- .attachment-button:hover:not(:disabled),
7467
- .presentation-exit:hover,
7468
- .export-dialog-links a:hover { filter: brightness(1.12); }
7469
- .attachment-button:focus-visible,
7470
- .presentation-exit:focus-visible,
7471
- .export-dialog-links a:focus-visible { outline: 2px solid var(--c-accent); outline-offset: 3px; }
7472
- .attachment-button:disabled { opacity: 0.5; cursor: default; }
7473
- .attachment-review { width: 100%; border-top: 1px solid var(--c-line); padding-top: 12px; }
7474
- .attachment-review-actions {
7475
- position: sticky;
7476
- bottom: -16px;
7477
- display: flex;
7478
- flex-wrap: wrap;
7479
- justify-content: flex-end;
7480
- gap: 12px;
7481
- margin-top: 24px;
7482
- padding: 16px 0;
7483
- border-top: 1px solid var(--c-line);
7484
- background: var(--c-panel);
7485
- z-index: 1;
7486
- }
7487
- .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; }
7488
- .attachment-review h4 { margin-bottom: 6px; }
7489
- .md-import-source { padding: 6px 12px; font-size: 11px; overflow-wrap: anywhere; color: var(--c-text-soft); border-top: 1px solid var(--c-line); }
7490
- @media (max-width: 640px) {
7491
- .home-board { flex-wrap: wrap; }
7492
- .home-board-open { flex-basis: 100%; }
7493
- .home-board-actions { padding: 0 8px 4px; }
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; }
7494
9742
  }