pmx-canvas 0.7.3 → 0.8.2

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 (244) hide show
  1. package/.github/extensions/pmx-canvas/THIRD_PARTY_LICENSES.txt +331 -0
  2. package/.github/extensions/pmx-canvas/extension.mjs +25 -172
  3. package/.github/extensions/pmx-canvas/mcp-bootstrap.ts +198 -0
  4. package/.github/extensions/pmx-canvas/runtime.d.mts +41 -0
  5. package/.github/extensions/pmx-canvas/runtime.json +3 -0
  6. package/.github/extensions/pmx-canvas/runtime.mjs +194 -0
  7. package/.github/extensions/pmx-canvas/start-mcp.mjs +51 -0
  8. package/.github/extensions/pmx-canvas/tools.json +2560 -0
  9. package/CHANGELOG.md +64 -0
  10. package/Readme.md +21 -7
  11. package/dist/canvas/fonts/OFL.txt +93 -0
  12. package/dist/canvas/fonts/ibm-plex-mono-latin-400-normal.woff2 +0 -0
  13. package/dist/canvas/fonts/ibm-plex-mono-latin-500-normal.woff2 +0 -0
  14. package/dist/canvas/fonts/ibm-plex-mono-latin-ext-400-normal.woff2 +0 -0
  15. package/dist/canvas/fonts/ibm-plex-mono-latin-ext-500-normal.woff2 +0 -0
  16. package/dist/canvas/fonts/ibm-plex-sans-latin-400-normal.woff2 +0 -0
  17. package/dist/canvas/fonts/ibm-plex-sans-latin-500-normal.woff2 +0 -0
  18. package/dist/canvas/fonts/ibm-plex-sans-latin-600-normal.woff2 +0 -0
  19. package/dist/canvas/fonts/ibm-plex-sans-latin-ext-400-normal.woff2 +0 -0
  20. package/dist/canvas/fonts/ibm-plex-sans-latin-ext-500-normal.woff2 +0 -0
  21. package/dist/canvas/fonts/ibm-plex-sans-latin-ext-600-normal.woff2 +0 -0
  22. package/dist/canvas/global.css +726 -674
  23. package/dist/canvas/index.js +90 -88
  24. package/dist/canvas/mcp-app.html +7879 -0
  25. package/dist/canvas/mermaid-entry.js +1 -1
  26. package/dist/canvas/surface-theme.css +151 -46
  27. package/dist/json-render/index.css +81 -1
  28. package/dist/json-render/index.js +1 -1
  29. package/dist/types/cli/commands/record.d.ts +1 -1
  30. package/dist/types/client/canvas/NodeContextMark.d.ts +24 -0
  31. package/dist/types/client/canvas/SessionReceipt.d.ts +3 -1
  32. package/dist/types/client/icons.d.ts +1 -2
  33. package/dist/types/client/mcp-app/index.d.ts +1 -0
  34. package/dist/types/client/nodes/HtmlNode.d.ts +1 -0
  35. package/dist/types/client/nodes/ax-node-actions.d.ts +2 -2
  36. package/dist/types/client/nodes/markdown-sanitize.d.ts +2 -0
  37. package/dist/types/client/nodes/use-workbench-asset.d.ts +2 -0
  38. package/dist/types/client/state/attention-store.d.ts +0 -5
  39. package/dist/types/client/state/context-status-store.d.ts +53 -0
  40. package/dist/types/client/state/intent-bridge.d.ts +3 -0
  41. package/dist/types/client/state/near-pin-store.d.ts +16 -0
  42. package/dist/types/client/state/presence-store.d.ts +5 -0
  43. package/dist/types/client/state/session-store.d.ts +33 -3
  44. package/dist/types/client/state/workbench-transport.d.ts +16 -0
  45. package/dist/types/client/theme/tokens.d.ts +1 -3
  46. package/dist/types/client/types.d.ts +9 -0
  47. package/dist/types/json-render/server.d.ts +1 -1
  48. package/dist/types/mcp/app-server.d.ts +3 -0
  49. package/dist/types/mcp/canvas-access.d.ts +1 -1
  50. package/dist/types/mcp/canvas-app.d.ts +4 -0
  51. package/dist/types/mcp/workbench-app.d.ts +4 -0
  52. package/dist/types/server/agent-presence.d.ts +1 -1
  53. package/dist/types/server/ax-state.d.ts +1 -1
  54. package/dist/types/server/canvas-db.d.ts +8 -0
  55. package/dist/types/server/canvas-geometry.d.ts +25 -0
  56. package/dist/types/server/canvas-operations.d.ts +1 -11
  57. package/dist/types/server/canvas-state.d.ts +25 -3
  58. package/dist/types/server/context-brief.d.ts +8 -1
  59. package/dist/types/server/context-reads.d.ts +30 -7
  60. package/dist/types/server/index.d.ts +6 -1
  61. package/dist/types/server/mcp-app-runtime.d.ts +1 -0
  62. package/dist/types/server/operations/http.d.ts +2 -0
  63. package/dist/types/server/operations/invoker.d.ts +4 -2
  64. package/dist/types/server/operations/ops/nodes.d.ts +0 -6
  65. package/dist/types/server/server.d.ts +1 -0
  66. package/dist/types/server/spatial-analysis.d.ts +2 -0
  67. package/dist/types/shared/agent-context.d.ts +22 -0
  68. package/dist/types/shared/agent-presence.d.ts +3 -10
  69. package/dist/types/shared/canvas-app.d.ts +54 -0
  70. package/dist/types/shared/themes.d.ts +1 -1
  71. package/docs/RELEASE.md +7 -3
  72. package/docs/agent-plugin.md +123 -0
  73. package/docs/ax-state-contract.md +40 -0
  74. package/docs/cli.md +7 -2
  75. package/docs/design/AgentContext.dc.html +186 -0
  76. package/docs/design/Before.dc.html +208 -0
  77. package/docs/design/BoardPins.dc.html +151 -0
  78. package/docs/design/Chrome.dc.html +211 -0
  79. package/docs/design/Context.dc.html +239 -0
  80. package/docs/design/Flows.dc.html +181 -0
  81. package/docs/design/Home.dc.html +209 -0
  82. package/docs/design/HomeGraph.dc.html +211 -0
  83. package/docs/design/HomeMap.dc.html +117 -0
  84. package/docs/design/HomeTeam.dc.html +176 -0
  85. package/docs/design/Light.dc.html +28 -0
  86. package/docs/design/Main.dc.html +280 -0
  87. package/docs/design/NearPin.dc.html +260 -0
  88. package/docs/design/Pane600.dc.html +120 -0
  89. package/docs/design/Relations.dc.html +297 -0
  90. package/docs/design/Themes.dc.html +121 -0
  91. package/docs/design/TokenSystem.dc.html +136 -0
  92. package/docs/design/Tokens.dc.html +163 -0
  93. package/docs/design/Types1.dc.html +177 -0
  94. package/docs/design/Types2.dc.html +226 -0
  95. package/docs/design/Types3.dc.html +195 -0
  96. package/docs/design/Uses.dc.html +152 -0
  97. package/docs/design/Vision.dc.html +116 -0
  98. package/docs/design/Zoom.dc.html +82 -0
  99. package/docs/design/canvas.json +274 -0
  100. package/docs/design.md +217 -0
  101. package/docs/environment.md +1 -1
  102. package/docs/http-api.md +86 -16
  103. package/docs/mcp.md +202 -4
  104. package/docs/node-types.md +34 -10
  105. package/docs/plans/plan-009-tech-debt-backlog.md +1 -1
  106. package/docs/plans/plan-015-design-foundation-wave-0.md +177 -0
  107. package/docs/plans/plan-016-context-made-visible-wave-1.md +148 -0
  108. package/docs/product-vision-2026-09.md +47 -7
  109. package/docs/screenshot.png +0 -0
  110. package/docs/sdk.md +1 -0
  111. package/package.json +10 -4
  112. package/plugins/pmx-canvas/LICENSE +21 -0
  113. package/plugins/pmx-canvas/THIRD_PARTY_LICENSES.txt +331 -0
  114. package/plugins/pmx-canvas/assets/preview.png +0 -0
  115. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/extension.mjs +930 -0
  116. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +3 -0
  117. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.mjs +194 -0
  118. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/steering-delivery.mjs +79 -0
  119. package/plugins/pmx-canvas/mcp.json +12 -0
  120. package/plugins/pmx-canvas/plugin.json +24 -0
  121. package/plugins/pmx-canvas/runtime.json +3 -0
  122. package/plugins/pmx-canvas/runtime.mjs +194 -0
  123. package/plugins/pmx-canvas/start-mcp.mjs +51 -0
  124. package/plugins/pmx-canvas/tools.json +2560 -0
  125. package/skills/pmx-canvas/SKILL.md +29 -9
  126. package/skills/pmx-canvas/evals/evals.json +62 -0
  127. package/skills/pmx-canvas/references/ax-html-control-surface.md +6 -0
  128. package/skills/pmx-canvas/references/full-reference.md +11 -7
  129. package/skills/pmx-canvas/references/github-copilot-app-adapter.md +20 -8
  130. package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
  131. package/skills/pmx-canvas-testing/SKILL.md +5 -4
  132. package/src/cli/commands/copilot.ts +5 -0
  133. package/src/cli/commands/nodes.ts +3 -2
  134. package/src/cli/commands/view.ts +1 -1
  135. package/src/cli/index.ts +10 -4
  136. package/src/client/App.tsx +6 -1
  137. package/src/client/canvas/AgentPresenceLayer.tsx +3 -3
  138. package/src/client/canvas/AnnotationLayer.tsx +1 -1
  139. package/src/client/canvas/CanvasNode.tsx +32 -49
  140. package/src/client/canvas/CanvasViewport.tsx +0 -2
  141. package/src/client/canvas/CommandPalette.tsx +3 -2
  142. package/src/client/canvas/ContextMenu.tsx +11 -0
  143. package/src/client/canvas/EdgeLayer.tsx +1 -1
  144. package/src/client/canvas/ExportDialog.tsx +33 -6
  145. package/src/client/canvas/IntentLayer.tsx +2 -2
  146. package/src/client/canvas/Minimap.tsx +12 -7
  147. package/src/client/canvas/NodeContextMark.tsx +156 -0
  148. package/src/client/canvas/SessionPanel.tsx +4 -7
  149. package/src/client/canvas/SessionReceipt.tsx +114 -17
  150. package/src/client/canvas/ShortcutOverlay.tsx +6 -1
  151. package/src/client/canvas/SnapshotPanel.tsx +11 -2
  152. package/src/client/canvas/ToolRail.tsx +12 -9
  153. package/src/client/canvas/TopBar.tsx +16 -11
  154. package/src/client/icons.tsx +2 -12
  155. package/src/client/mcp-app/index.tsx +137 -0
  156. package/src/client/mcp-app/style.css +10 -0
  157. package/src/client/nodes/AttachmentNode.tsx +8 -1
  158. package/src/client/nodes/AxStepControls.tsx +1 -1
  159. package/src/client/nodes/ContextNode.tsx +9 -9
  160. package/src/client/nodes/ExtAppFrame.tsx +13 -8
  161. package/src/client/nodes/FileNode.tsx +8 -5
  162. package/src/client/nodes/HtmlNode.tsx +12 -2
  163. package/src/client/nodes/ImageNode.tsx +4 -2
  164. package/src/client/nodes/InlineMarkdownEditor.tsx +2 -1
  165. package/src/client/nodes/LedgerNode.tsx +2 -2
  166. package/src/client/nodes/MarkdownNode.tsx +44 -9
  167. package/src/client/nodes/McpAppNode.tsx +6 -4
  168. package/src/client/nodes/PromptNode.tsx +5 -17
  169. package/src/client/nodes/ResponseNode.tsx +3 -15
  170. package/src/client/nodes/StatusNode.tsx +2 -2
  171. package/src/client/nodes/StatusSummary.tsx +3 -1
  172. package/src/client/nodes/TraceNode.tsx +6 -4
  173. package/src/client/nodes/WebpageNode.tsx +1 -1
  174. package/src/client/nodes/ax-node-actions.ts +2 -2
  175. package/src/client/nodes/iframe-document-url.ts +3 -2
  176. package/src/client/nodes/markdown-sanitize.ts +10 -0
  177. package/src/client/nodes/surface-url.ts +10 -0
  178. package/src/client/nodes/use-surface-frame.ts +3 -1
  179. package/src/client/nodes/use-workbench-asset.ts +26 -0
  180. package/src/client/state/attention-bridge.ts +0 -8
  181. package/src/client/state/attention-store.ts +0 -17
  182. package/src/client/state/canvas-store.ts +4 -2
  183. package/src/client/state/context-status-store.ts +66 -0
  184. package/src/client/state/human-store.ts +2 -0
  185. package/src/client/state/iframe-mode.ts +5 -0
  186. package/src/client/state/intent-bridge.ts +10 -4
  187. package/src/client/state/near-pin-store.ts +53 -0
  188. package/src/client/state/presence-store.ts +5 -10
  189. package/src/client/state/session-store.ts +106 -9
  190. package/src/client/state/sse-bridge.ts +26 -7
  191. package/src/client/state/theme-override.ts +1 -1
  192. package/src/client/state/workbench-transport.ts +36 -0
  193. package/src/client/theme/global.css +726 -674
  194. package/src/client/theme/surface-theme.css +151 -46
  195. package/src/client/theme/tokens.ts +7 -11
  196. package/src/client/types.ts +10 -0
  197. package/src/json-render/renderer/index.css +6 -1
  198. package/src/json-render/renderer/index.tsx +0 -1
  199. package/src/json-render/server.ts +71 -14
  200. package/src/mcp/app-server.ts +64 -0
  201. package/src/mcp/canvas-access.ts +14 -11
  202. package/src/mcp/canvas-app.ts +318 -0
  203. package/src/mcp/server.ts +1 -1
  204. package/src/mcp/workbench-app.ts +211 -0
  205. package/src/server/agent-presence.ts +45 -6
  206. package/src/server/ax-context.ts +1 -1
  207. package/src/server/ax-state.ts +1 -1
  208. package/src/server/board-export.ts +5 -2
  209. package/src/server/canvas-db.ts +46 -12
  210. package/src/server/canvas-geometry.ts +64 -0
  211. package/src/server/canvas-operations.ts +7 -25
  212. package/src/server/canvas-state.ts +105 -15
  213. package/src/server/canvas-validation.ts +19 -4
  214. package/src/server/context-brief.ts +39 -2
  215. package/src/server/context-reads.ts +87 -15
  216. package/src/server/demo-state.json +31 -31
  217. package/src/server/html-surface.ts +4 -5
  218. package/src/server/index.ts +41 -5
  219. package/src/server/mcp-app-runtime.ts +11 -0
  220. package/src/server/operations/composites.ts +4 -3
  221. package/src/server/operations/http.ts +4 -4
  222. package/src/server/operations/invoker.ts +13 -4
  223. package/src/server/operations/mcp.ts +6 -0
  224. package/src/server/operations/ops/ax-read.ts +1 -1
  225. package/src/server/operations/ops/ax-timeline.ts +37 -0
  226. package/src/server/operations/ops/boards.ts +1 -1
  227. package/src/server/operations/ops/canvas-wire.ts +3 -6
  228. package/src/server/operations/ops/intent.ts +31 -2
  229. package/src/server/operations/ops/json-render.ts +6 -2
  230. package/src/server/operations/ops/nodes.ts +8 -76
  231. package/src/server/operations/ops/query.ts +8 -2
  232. package/src/server/operations/ops/snapshots.ts +4 -1
  233. package/src/server/operations/ops/viewport.ts +29 -5
  234. package/src/server/operations/registry.ts +41 -5
  235. package/src/server/scope-fence.ts +55 -10
  236. package/src/server/server.ts +83 -5
  237. package/src/server/spatial-analysis.ts +2 -2
  238. package/src/server/workboard.ts +6 -1
  239. package/src/{server → shared}/agent-context.ts +2 -2
  240. package/src/shared/agent-presence.ts +3 -15
  241. package/src/shared/canvas-app.ts +62 -0
  242. package/src/shared/themes.ts +5 -5
  243. package/src/client/canvas/FocusFieldLayer.tsx +0 -116
  244. package/src/client/canvas/kind-colors.ts +0 -23
@@ -1,3 +1,85 @@
1
+ /* ── Bundled fonts (IBM Plex, OFL-1.1; copied to dist/canvas/fonts by scripts/copy-fonts.ts) ── */
2
+ @font-face {
3
+ font-family: "IBM Plex Sans";
4
+ font-style: normal;
5
+ font-weight: 400;
6
+ font-display: swap;
7
+ src: url("fonts/ibm-plex-sans-latin-400-normal.woff2") format("woff2");
8
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
9
+ }
10
+ @font-face {
11
+ font-family: "IBM Plex Sans";
12
+ font-style: normal;
13
+ font-weight: 400;
14
+ font-display: swap;
15
+ src: url("fonts/ibm-plex-sans-latin-ext-400-normal.woff2") format("woff2");
16
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
17
+ }
18
+ @font-face {
19
+ font-family: "IBM Plex Sans";
20
+ font-style: normal;
21
+ font-weight: 500;
22
+ font-display: swap;
23
+ src: url("fonts/ibm-plex-sans-latin-500-normal.woff2") format("woff2");
24
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
25
+ }
26
+ @font-face {
27
+ font-family: "IBM Plex Sans";
28
+ font-style: normal;
29
+ font-weight: 500;
30
+ font-display: swap;
31
+ src: url("fonts/ibm-plex-sans-latin-ext-500-normal.woff2") format("woff2");
32
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
33
+ }
34
+ @font-face {
35
+ font-family: "IBM Plex Sans";
36
+ font-style: normal;
37
+ font-weight: 600;
38
+ font-display: swap;
39
+ src: url("fonts/ibm-plex-sans-latin-600-normal.woff2") format("woff2");
40
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
41
+ }
42
+ @font-face {
43
+ font-family: "IBM Plex Sans";
44
+ font-style: normal;
45
+ font-weight: 600;
46
+ font-display: swap;
47
+ src: url("fonts/ibm-plex-sans-latin-ext-600-normal.woff2") format("woff2");
48
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
49
+ }
50
+ @font-face {
51
+ font-family: "IBM Plex Mono";
52
+ font-style: normal;
53
+ font-weight: 400;
54
+ font-display: swap;
55
+ src: url("fonts/ibm-plex-mono-latin-400-normal.woff2") format("woff2");
56
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
57
+ }
58
+ @font-face {
59
+ font-family: "IBM Plex Mono";
60
+ font-style: normal;
61
+ font-weight: 400;
62
+ font-display: swap;
63
+ src: url("fonts/ibm-plex-mono-latin-ext-400-normal.woff2") format("woff2");
64
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
65
+ }
66
+ @font-face {
67
+ font-family: "IBM Plex Mono";
68
+ font-style: normal;
69
+ font-weight: 500;
70
+ font-display: swap;
71
+ src: url("fonts/ibm-plex-mono-latin-500-normal.woff2") format("woff2");
72
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
73
+ }
74
+ @font-face {
75
+ font-family: "IBM Plex Mono";
76
+ font-style: normal;
77
+ font-weight: 500;
78
+ font-display: swap;
79
+ src: url("fonts/ibm-plex-mono-latin-ext-500-normal.woff2") format("woff2");
80
+ unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
81
+ }
82
+
1
83
  :root {
2
84
  /* ── Core palette (dark · ink + cyan) ────────────────────── */
3
85
  --c-bg: #081524;
@@ -11,40 +93,27 @@
11
93
  --c-accent: #4BBCFF;
12
94
  --c-ok: #2fd07f;
13
95
  --c-warn: #f4c542;
14
- --c-warn-alt: #FFB300;
15
96
  --c-danger: #ff6a7f;
16
- --c-purple: #b07aff;
17
- --c-thinking: #B388FF;
18
- --c-subagent: #00E5FF;
97
+ /* ── Meaning (one hue per meaning in every theme; see docs/design.md) ── */
98
+ --c-pin: #4BBCFF;
99
+ --c-on-pin: #081524;
100
+ --c-agent: #B388FF;
101
+ --c-subagent: #E879F9;
102
+ --c-rel-supports: #5FCFC0;
103
+ --c-rel-contradicts: #E59B6B;
104
+ --c-rel-cites: #7C9CFF;
105
+ --c-rel-derived: #D5DEEA;
106
+ --c-rel-informs: #E58FB0;
107
+ --c-rel-related: #8ea3bd;
19
108
  --c-input-bg: #0a1729;
20
109
  --c-dot-grid: rgba(75, 188, 255, 0.08);
21
110
  --c-panel-overlay: rgba(8, 21, 36, 0.6);
22
111
  --c-panel-glass: rgba(15, 29, 49, 0.92);
23
112
  --c-shadow: rgba(0, 0, 0, 0.3);
24
113
  --c-shadow-heavy: rgba(0, 0, 0, 0.5);
25
- --c-glow-accent: rgba(75, 188, 255, 0.15);
26
114
  --c-surface-hover: rgba(255, 255, 255, 0.06);
27
115
  --c-surface-subtle: rgba(255, 255, 255, 0.03);
28
116
  --c-surface-th: rgba(255, 255, 255, 0.04);
29
- --c-accent-8: rgba(75, 188, 255, 0.08);
30
- --c-accent-10: rgba(75, 188, 255, 0.1);
31
- --c-accent-12: rgba(75, 188, 255, 0.12);
32
- --c-accent-15: rgba(75, 188, 255, 0.15);
33
- --c-accent-25: rgba(75, 188, 255, 0.25);
34
- --c-accent-30: rgba(75, 188, 255, 0.3);
35
- --c-accent-40: rgba(75, 188, 255, 0.4);
36
- --c-ok-10: rgba(47, 208, 127, 0.1);
37
- --c-ok-12: rgba(47, 208, 127, 0.12);
38
- --c-ok-20: rgba(47, 208, 127, 0.2);
39
- --c-ok-25: rgba(47, 208, 127, 0.25);
40
- --c-warn-10: rgba(244, 197, 66, 0.1);
41
- --c-warn-12: rgba(244, 197, 66, 0.12);
42
- --c-warn-15: rgba(244, 197, 66, 0.15);
43
- --c-warn-20: rgba(244, 197, 66, 0.2);
44
- --c-warn-22: rgba(244, 197, 66, 0.22);
45
- --c-warn-30: rgba(244, 197, 66, 0.3);
46
- --c-warn-60: rgba(244, 197, 66, 0.6);
47
- --c-danger-12: rgba(255, 106, 127, 0.12);
48
117
  --c-line-30: rgba(27, 44, 68, 0.3);
49
118
  --c-contrast-fg: #081524;
50
119
  --c-accent-hover: #6ECAFF;
@@ -52,12 +121,30 @@
52
121
  --c-canvas-wash: linear-gradient(180deg, rgba(255, 255, 255, 0.02), rgba(0, 0, 0, 0));
53
122
  --c-annotation: #F4EFE6;
54
123
  /* ── Non-color tokens ────────────────────────────────────── */
55
- --font: "IBM Plex Sans", "SF Pro Text", "Avenir Next", system-ui, sans-serif;
56
- --mono: "IBM Plex Mono", "SF Mono", "Fira Code", monospace;
124
+ --font-ui: "IBM Plex Sans", "SF Pro Text", "Avenir Next", system-ui, sans-serif;
125
+ --font-code: "IBM Plex Mono", "SF Mono", "Fira Code", monospace;
57
126
  --radius: 10px;
58
127
  --radius-sm: 6px;
59
128
  /* Shared height of the top bar and the session panel header. */
60
129
  --hud-bar-height: 44px;
130
+ /* ── Scale (same in every theme; see docs/design.md) ───────── */
131
+ --fs-meta: 11px;
132
+ --fs-ui: 12px;
133
+ --fs-body: 13px;
134
+ --fs-title: 15px;
135
+ --fs-heading: 20px;
136
+ --space-1: 4px;
137
+ --space-2: 8px;
138
+ --space-3: 12px;
139
+ --space-4: 16px;
140
+ --space-6: 24px;
141
+ --space-8: 32px;
142
+ --r-control: 6px;
143
+ --r-node: 10px;
144
+ --r-overlay: 14px;
145
+ --r-pill: 999px;
146
+ --e-1: 0 1px 2px rgba(0, 0, 0, 0.4), 0 6px 20px rgba(0, 0, 0, 0.24);
147
+ --e-2: 0 10px 30px rgba(0, 0, 0, 0.6);
61
148
  }
62
149
 
63
150
  .board-node, .md-card-preview { display: flex; flex-direction: column; height: 100%; min-height: 0; }
@@ -66,73 +153,63 @@
66
153
  .board-node-title { display: block; font-size: 17px; line-height: 1.35; margin-bottom: 6px; }
67
154
  .board-node-meta { color: var(--c-dim); font-size: 11px; line-height: 1.5; }
68
155
  .board-node-summary { color: var(--c-text-soft); font-size: 13px; line-height: 1.6; margin: 14px 0; }
69
- .board-node-open { display: flex; justify-content: space-between; align-items: center; flex-shrink: 0; width: 100%; padding: 10px 16px; border: 0; border-top: 1px solid var(--c-line); background: var(--c-panel); color: var(--c-accent); font: 500 12px var(--font); text-align: left; cursor: pointer; }
70
- .board-node-open:hover:not(:disabled) { background: var(--c-accent-8); }
156
+ .board-node-open { display: flex; justify-content: space-between; align-items: center; flex-shrink: 0; width: 100%; padding: 10px 16px; border: 0; border-top: 1px solid var(--c-line); background: var(--c-panel); color: var(--c-accent); font: 500 12px var(--font-ui); text-align: left; cursor: pointer; }
157
+ .board-node-open:hover:not(:disabled) { background: color-mix(in srgb, var(--c-accent) 8%, transparent); }
71
158
  .board-node-open:disabled { color: var(--c-dim); cursor: default; }
72
159
  .md-card-content { flex: 1; min-height: 0; overflow: auto; }
73
160
  .md-card-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; border-top: 1px solid var(--c-line); padding: 6px 36px 6px 8px; background: var(--c-panel); }
74
- .md-card-actions button { border: 1px solid transparent; border-radius: var(--radius-sm); background: transparent; color: var(--c-dim); padding: 4px 8px; font: 500 11px var(--font); cursor: pointer; }
75
- .md-card-actions button:hover { color: var(--c-text); background: var(--c-accent-8); }
76
- .md-card-actions .md-readme-btn[aria-pressed="true"] { color: var(--c-accent); background: var(--c-accent-8); border-color: var(--c-accent-25); }
161
+ .md-card-actions button { border: 1px solid transparent; border-radius: var(--radius-sm); background: transparent; color: var(--c-dim); padding: 4px 8px; font: 500 11px var(--font-ui); cursor: pointer; }
162
+ .md-card-actions button:hover { color: var(--c-text); background: color-mix(in srgb, var(--c-accent) 8%, transparent); }
163
+ .md-card-actions .md-readme-btn[aria-pressed="true"] { color: var(--c-accent); background: color-mix(in srgb, var(--c-accent) 8%, transparent); border-color: color-mix(in srgb, var(--c-accent) 25%, transparent); }
77
164
  .md-card-edit { margin-left: auto; }
78
165
  .board-node-open:focus-visible, .md-card-actions button:focus-visible { outline: 2px solid var(--c-accent); outline-offset: -2px; }
79
166
  .canvas-node[data-node-type="markdown"] .node-body,
80
167
  .canvas-node[data-node-type="board"] .node-body { padding: 0; }
81
168
  .md-card-content { padding: 10px 14px; }
82
169
 
83
- :root[data-theme="light"] {
84
- /* ── Core palette (light · paper + ink) ──────────────────── */
85
- --c-bg: #F4EFE6;
86
- --c-panel: #EFE7D4;
87
- --c-panel-soft: #ECE4D0;
88
- --c-line: #D6CBB4;
89
- --c-text: #081524;
170
+ :root[data-theme="daylight"] {
171
+ /* ── Core palette (Daylight · neutral paper + ink) ───────── */
172
+ --c-bg: #F6F7F9;
173
+ --c-panel: #FFFFFF;
174
+ --c-panel-soft: #F2F4F7;
175
+ --c-line: #DDE2E9;
176
+ --c-text: #0B1726;
90
177
  --c-text-soft: #3d4d63;
91
- --c-muted: #5c6b80;
92
- --c-dim: #8794a6;
178
+ --c-muted: #55657a;
179
+ --c-dim: #6f7d90;
93
180
  --c-accent: #1A7ABF;
94
- --c-ok: #1a9f55;
95
- --c-warn: #c89b2a;
96
- --c-warn-alt: #b8860b;
97
- --c-danger: #d32f2f;
98
- --c-purple: #7c4dff;
99
- --c-thinking: #7C4DFF;
100
- --c-subagent: #00838F;
101
- --c-input-bg: #FAF6EE;
102
- --c-dot-grid: rgba(8, 21, 36, 0.08);
103
- --c-panel-overlay: rgba(244, 239, 230, 0.88);
104
- --c-panel-glass: rgba(239, 231, 212, 0.88);
181
+ --c-ok: #1E7F51;
182
+ --c-warn: #94600A;
183
+ --c-danger: #B8344A;
184
+ /* ── Meaning (one hue per meaning in every theme; see docs/design.md) ── */
185
+ --c-pin: #1A7ABF;
186
+ --c-on-pin: #FFFFFF;
187
+ --c-agent: #7C4DDB;
188
+ --c-subagent: #A83BB0;
189
+ --c-rel-supports: #1E8C80;
190
+ --c-rel-contradicts: #B8572A;
191
+ --c-rel-cites: #4257C9;
192
+ --c-rel-derived: #4A5566;
193
+ --c-rel-informs: #B03F72;
194
+ --c-rel-related: #5c6b80;
195
+ /* Light themes: ink-tinted shadows (the drawn black ones are for dark surfaces). */
196
+ --e-1: 0 1px 2px rgba(8, 21, 36, 0.1), 0 6px 20px rgba(8, 21, 36, 0.08);
197
+ --e-2: 0 10px 30px rgba(8, 21, 36, 0.18);
198
+ --c-input-bg: #FFFFFF;
199
+ --c-dot-grid: rgba(11, 23, 38, 0.12);
200
+ --c-panel-overlay: rgba(246, 247, 249, 0.88);
201
+ --c-panel-glass: rgba(255, 255, 255, 0.88);
105
202
  --c-shadow: rgba(8, 21, 36, 0.08);
106
203
  --c-shadow-heavy: rgba(8, 21, 36, 0.16);
107
- --c-glow-accent: rgba(26, 122, 191, 0.12);
108
204
  --c-surface-hover: rgba(8, 21, 36, 0.06);
109
205
  --c-surface-subtle: rgba(8, 21, 36, 0.03);
110
206
  --c-surface-th: rgba(8, 21, 36, 0.04);
111
- --c-accent-8: rgba(26, 122, 191, 0.08);
112
- --c-accent-10: rgba(26, 122, 191, 0.1);
113
- --c-accent-12: rgba(26, 122, 191, 0.12);
114
- --c-accent-15: rgba(26, 122, 191, 0.15);
115
- --c-accent-25: rgba(26, 122, 191, 0.25);
116
- --c-accent-30: rgba(26, 122, 191, 0.3);
117
- --c-accent-40: rgba(26, 122, 191, 0.4);
118
- --c-ok-10: rgba(26, 159, 85, 0.1);
119
- --c-ok-12: rgba(26, 159, 85, 0.12);
120
- --c-ok-20: rgba(26, 159, 85, 0.2);
121
- --c-ok-25: rgba(26, 159, 85, 0.25);
122
- --c-warn-10: rgba(200, 155, 42, 0.1);
123
- --c-warn-12: rgba(200, 155, 42, 0.12);
124
- --c-warn-15: rgba(200, 155, 42, 0.15);
125
- --c-warn-20: rgba(200, 155, 42, 0.2);
126
- --c-warn-22: rgba(200, 155, 42, 0.22);
127
- --c-warn-30: rgba(200, 155, 42, 0.3);
128
- --c-warn-60: rgba(200, 155, 42, 0.6);
129
- --c-danger-12: rgba(211, 47, 47, 0.12);
130
- --c-line-30: rgba(214, 203, 180, 0.5);
131
- --c-contrast-fg: #F4EFE6;
207
+ --c-line-30: rgba(221, 226, 233, 0.5);
208
+ --c-contrast-fg: #FFFFFF;
132
209
  --c-accent-hover: #1588CE;
133
210
  --c-warn-hover: #dab040;
134
211
  --c-canvas-wash: linear-gradient(180deg, rgba(255, 255, 255, 0.12), rgba(8, 21, 36, 0.02));
135
- --c-annotation: #081524;
212
+ --c-annotation: #0B1726;
136
213
  }
137
214
 
138
215
  :root[data-theme="high-contrast"] {
@@ -147,40 +224,27 @@
147
224
  --c-accent: #00ffff;
148
225
  --c-ok: #00ff00;
149
226
  --c-warn: #ffff00;
150
- --c-warn-alt: #ffcc00;
151
227
  --c-danger: #ff0000;
152
- --c-purple: #e040fb;
153
- --c-thinking: #E040FB;
154
- --c-subagent: #18FFFF;
228
+ /* ── Meaning (one hue per meaning in every theme; see docs/design.md) ── */
229
+ --c-pin: #00ffff;
230
+ --c-on-pin: #000000;
231
+ --c-agent: #e040fb;
232
+ --c-subagent: #ff99ff;
233
+ --c-rel-supports: #00e5c0;
234
+ --c-rel-contradicts: #ff8a00;
235
+ --c-rel-cites: #8c9eff;
236
+ --c-rel-derived: #ffffff;
237
+ --c-rel-informs: #ff80ab;
238
+ --c-rel-related: #aaaaaa;
155
239
  --c-input-bg: #111111;
156
240
  --c-dot-grid: rgba(255, 255, 255, 0.12);
157
241
  --c-panel-overlay: rgba(0, 0, 0, 0.85);
158
242
  --c-panel-glass: rgba(0, 0, 0, 0.95);
159
243
  --c-shadow: rgba(0, 0, 0, 0.5);
160
244
  --c-shadow-heavy: rgba(0, 0, 0, 0.7);
161
- --c-glow-accent: rgba(0, 255, 255, 0.2);
162
245
  --c-surface-hover: rgba(255, 255, 255, 0.1);
163
246
  --c-surface-subtle: rgba(255, 255, 255, 0.05);
164
247
  --c-surface-th: rgba(255, 255, 255, 0.08);
165
- --c-accent-8: rgba(0, 255, 255, 0.08);
166
- --c-accent-10: rgba(0, 255, 255, 0.1);
167
- --c-accent-12: rgba(0, 255, 255, 0.12);
168
- --c-accent-15: rgba(0, 255, 255, 0.15);
169
- --c-accent-25: rgba(0, 255, 255, 0.25);
170
- --c-accent-30: rgba(0, 255, 255, 0.3);
171
- --c-accent-40: rgba(0, 255, 255, 0.4);
172
- --c-ok-10: rgba(0, 255, 0, 0.1);
173
- --c-ok-12: rgba(0, 255, 0, 0.12);
174
- --c-ok-20: rgba(0, 255, 0, 0.2);
175
- --c-ok-25: rgba(0, 255, 0, 0.25);
176
- --c-warn-10: rgba(255, 255, 0, 0.1);
177
- --c-warn-12: rgba(255, 255, 0, 0.12);
178
- --c-warn-15: rgba(255, 255, 0, 0.15);
179
- --c-warn-20: rgba(255, 255, 0, 0.2);
180
- --c-warn-22: rgba(255, 255, 0, 0.22);
181
- --c-warn-30: rgba(255, 255, 0, 0.3);
182
- --c-warn-60: rgba(255, 255, 0, 0.6);
183
- --c-danger-12: rgba(255, 0, 0, 0.12);
184
248
  --c-line-30: rgba(255, 255, 255, 0.3);
185
249
  --c-contrast-fg: #000000;
186
250
  --c-accent-hover: #33ffff;
@@ -202,40 +266,27 @@
202
266
  --c-accent: #8B96FF;
203
267
  --c-ok: #34D399;
204
268
  --c-warn: #F5C452;
205
- --c-warn-alt: #FFB300;
206
269
  --c-danger: #FF6B8A;
207
- --c-purple: #B388FF;
208
- --c-thinking: #B388FF;
209
- --c-subagent: #22D3EE;
270
+ /* ── Meaning (one hue per meaning in every theme; see docs/design.md) ── */
271
+ --c-pin: #4BBCFF;
272
+ --c-on-pin: #081524;
273
+ --c-agent: #B388FF;
274
+ --c-subagent: #E879F9;
275
+ --c-rel-supports: #5FCFC0;
276
+ --c-rel-contradicts: #E59B6B;
277
+ --c-rel-cites: #7C9CFF;
278
+ --c-rel-derived: #D5DEEA;
279
+ --c-rel-informs: #E58FB0;
280
+ --c-rel-related: #8D96BC;
210
281
  --c-input-bg: #0D1224;
211
282
  --c-dot-grid: rgba(139, 150, 255, 0.08);
212
283
  --c-panel-overlay: rgba(10, 13, 28, 0.6);
213
284
  --c-panel-glass: rgba(18, 23, 46, 0.92);
214
285
  --c-shadow: rgba(0, 0, 0, 0.3);
215
286
  --c-shadow-heavy: rgba(0, 0, 0, 0.5);
216
- --c-glow-accent: rgba(139, 150, 255, 0.15);
217
287
  --c-surface-hover: rgba(255, 255, 255, 0.06);
218
288
  --c-surface-subtle: rgba(255, 255, 255, 0.03);
219
289
  --c-surface-th: rgba(255, 255, 255, 0.04);
220
- --c-accent-8: rgba(139, 150, 255, 0.08);
221
- --c-accent-10: rgba(139, 150, 255, 0.1);
222
- --c-accent-12: rgba(139, 150, 255, 0.12);
223
- --c-accent-15: rgba(139, 150, 255, 0.15);
224
- --c-accent-25: rgba(139, 150, 255, 0.25);
225
- --c-accent-30: rgba(139, 150, 255, 0.3);
226
- --c-accent-40: rgba(139, 150, 255, 0.4);
227
- --c-ok-10: rgba(52, 211, 153, 0.1);
228
- --c-ok-12: rgba(52, 211, 153, 0.12);
229
- --c-ok-20: rgba(52, 211, 153, 0.2);
230
- --c-ok-25: rgba(52, 211, 153, 0.25);
231
- --c-warn-10: rgba(245, 196, 82, 0.1);
232
- --c-warn-12: rgba(245, 196, 82, 0.12);
233
- --c-warn-15: rgba(245, 196, 82, 0.15);
234
- --c-warn-20: rgba(245, 196, 82, 0.2);
235
- --c-warn-22: rgba(245, 196, 82, 0.22);
236
- --c-warn-30: rgba(245, 196, 82, 0.3);
237
- --c-warn-60: rgba(245, 196, 82, 0.6);
238
- --c-danger-12: rgba(255, 107, 138, 0.12);
239
290
  --c-line-30: rgba(35, 43, 74, 0.3);
240
291
  --c-contrast-fg: #0A0D1C;
241
292
  --c-accent-hover: #A3ACFF;
@@ -256,41 +307,31 @@
256
307
  --c-dim: #978870;
257
308
  --c-accent: #B4632C;
258
309
  --c-ok: #3E7D4F;
259
- --c-warn: #A97B1E;
260
- --c-warn-alt: #8F6A0D;
310
+ --c-warn: #8A5A00;
261
311
  --c-danger: #B3402E;
262
- --c-purple: #8456B0;
263
- --c-thinking: #8456B0;
264
- --c-subagent: #0E7C7B;
312
+ /* ── Meaning (one hue per meaning in every theme; see docs/design.md) ── */
313
+ --c-pin: #1F6FA8;
314
+ --c-on-pin: #FFFFFF;
315
+ --c-agent: #7046A6;
316
+ --c-subagent: #A83BB0;
317
+ --c-rel-supports: #1E8C80;
318
+ --c-rel-contradicts: #A3461C;
319
+ --c-rel-cites: #3D50B0;
320
+ --c-rel-derived: #4E4433;
321
+ --c-rel-informs: #9C3A66;
322
+ --c-rel-related: #6B6A66;
323
+ /* Light themes: ink-tinted shadows (the drawn black ones are for dark surfaces). */
324
+ --e-1: 0 1px 2px rgba(8, 21, 36, 0.1), 0 6px 20px rgba(8, 21, 36, 0.08);
325
+ --e-2: 0 10px 30px rgba(8, 21, 36, 0.18);
265
326
  --c-input-bg: #F7EEDD;
266
327
  --c-dot-grid: rgba(46, 36, 22, 0.08);
267
328
  --c-panel-overlay: rgba(242, 231, 213, 0.88);
268
329
  --c-panel-glass: rgba(235, 220, 194, 0.88);
269
330
  --c-shadow: rgba(46, 36, 22, 0.08);
270
331
  --c-shadow-heavy: rgba(46, 36, 22, 0.16);
271
- --c-glow-accent: rgba(180, 99, 44, 0.12);
272
332
  --c-surface-hover: rgba(46, 36, 22, 0.06);
273
333
  --c-surface-subtle: rgba(46, 36, 22, 0.03);
274
334
  --c-surface-th: rgba(46, 36, 22, 0.04);
275
- --c-accent-8: rgba(180, 99, 44, 0.08);
276
- --c-accent-10: rgba(180, 99, 44, 0.1);
277
- --c-accent-12: rgba(180, 99, 44, 0.12);
278
- --c-accent-15: rgba(180, 99, 44, 0.15);
279
- --c-accent-25: rgba(180, 99, 44, 0.25);
280
- --c-accent-30: rgba(180, 99, 44, 0.3);
281
- --c-accent-40: rgba(180, 99, 44, 0.4);
282
- --c-ok-10: rgba(62, 125, 79, 0.1);
283
- --c-ok-12: rgba(62, 125, 79, 0.12);
284
- --c-ok-20: rgba(62, 125, 79, 0.2);
285
- --c-ok-25: rgba(62, 125, 79, 0.25);
286
- --c-warn-10: rgba(169, 123, 30, 0.1);
287
- --c-warn-12: rgba(169, 123, 30, 0.12);
288
- --c-warn-15: rgba(169, 123, 30, 0.15);
289
- --c-warn-20: rgba(169, 123, 30, 0.2);
290
- --c-warn-22: rgba(169, 123, 30, 0.22);
291
- --c-warn-30: rgba(169, 123, 30, 0.3);
292
- --c-warn-60: rgba(169, 123, 30, 0.6);
293
- --c-danger-12: rgba(179, 64, 46, 0.12);
294
335
  --c-line-30: rgba(211, 193, 160, 0.5);
295
336
  --c-contrast-fg: #F2E7D5;
296
337
  --c-accent-hover: #C4763F;
@@ -312,40 +353,27 @@
312
353
  --c-accent: #7FC8DE;
313
354
  --c-ok: #74C596;
314
355
  --c-warn: #E8C476;
315
- --c-warn-alt: #E0A93F;
316
356
  --c-danger: #D9707C;
317
- --c-purple: #B48EAD;
318
- --c-thinking: #B48EAD;
319
- --c-subagent: #6FD6C4;
357
+ /* ── Meaning (one hue per meaning in every theme; see docs/design.md) ── */
358
+ --c-pin: #6EC1F5;
359
+ --c-on-pin: #081524;
360
+ --c-agent: #B388FF;
361
+ --c-subagent: #E879F9;
362
+ --c-rel-supports: #5FCFC0;
363
+ --c-rel-contradicts: #E59B6B;
364
+ --c-rel-cites: #7C9CFF;
365
+ --c-rel-derived: #D5DEEA;
366
+ --c-rel-informs: #E58FB0;
367
+ --c-rel-related: #939DB1;
320
368
  --c-input-bg: #242936;
321
369
  --c-dot-grid: rgba(127, 200, 222, 0.08);
322
370
  --c-panel-overlay: rgba(32, 36, 46, 0.6);
323
371
  --c-panel-glass: rgba(42, 47, 60, 0.92);
324
372
  --c-shadow: rgba(0, 0, 0, 0.3);
325
373
  --c-shadow-heavy: rgba(0, 0, 0, 0.5);
326
- --c-glow-accent: rgba(127, 200, 222, 0.15);
327
374
  --c-surface-hover: rgba(255, 255, 255, 0.06);
328
375
  --c-surface-subtle: rgba(255, 255, 255, 0.03);
329
376
  --c-surface-th: rgba(255, 255, 255, 0.04);
330
- --c-accent-8: rgba(127, 200, 222, 0.08);
331
- --c-accent-10: rgba(127, 200, 222, 0.1);
332
- --c-accent-12: rgba(127, 200, 222, 0.12);
333
- --c-accent-15: rgba(127, 200, 222, 0.15);
334
- --c-accent-25: rgba(127, 200, 222, 0.25);
335
- --c-accent-30: rgba(127, 200, 222, 0.3);
336
- --c-accent-40: rgba(127, 200, 222, 0.4);
337
- --c-ok-10: rgba(116, 197, 150, 0.1);
338
- --c-ok-12: rgba(116, 197, 150, 0.12);
339
- --c-ok-20: rgba(116, 197, 150, 0.2);
340
- --c-ok-25: rgba(116, 197, 150, 0.25);
341
- --c-warn-10: rgba(232, 196, 118, 0.1);
342
- --c-warn-12: rgba(232, 196, 118, 0.12);
343
- --c-warn-15: rgba(232, 196, 118, 0.15);
344
- --c-warn-20: rgba(232, 196, 118, 0.2);
345
- --c-warn-22: rgba(232, 196, 118, 0.22);
346
- --c-warn-30: rgba(232, 196, 118, 0.3);
347
- --c-warn-60: rgba(232, 196, 118, 0.6);
348
- --c-danger-12: rgba(217, 112, 124, 0.12);
349
377
  --c-line-30: rgba(58, 65, 82, 0.3);
350
378
  --c-contrast-fg: #20242E;
351
379
  --c-accent-hover: #9AD5E7;
@@ -367,40 +395,27 @@
367
395
  --c-accent: #F34E1C;
368
396
  --c-ok: #4CC38A;
369
397
  --c-warn: #F5B944;
370
- --c-warn-alt: #FFB300;
371
398
  --c-danger: #F0566A;
372
- --c-purple: #A78BFA;
373
- --c-thinking: #A78BFA;
374
- --c-subagent: #38BDF8;
399
+ /* ── Meaning (one hue per meaning in every theme; see docs/design.md) ── */
400
+ --c-pin: #4BBCFF;
401
+ --c-on-pin: #081524;
402
+ --c-agent: #B388FF;
403
+ --c-subagent: #E879F9;
404
+ --c-rel-supports: #5FCFC0;
405
+ --c-rel-contradicts: #E59B6B;
406
+ --c-rel-cites: #7C9CFF;
407
+ --c-rel-derived: #D5DEEA;
408
+ --c-rel-informs: #E58FB0;
409
+ --c-rel-related: #96948D;
375
410
  --c-input-bg: #101012;
376
411
  --c-dot-grid: rgba(243, 78, 28, 0.08);
377
412
  --c-panel-overlay: rgba(11, 11, 12, 0.6);
378
413
  --c-panel-glass: rgba(22, 22, 24, 0.92);
379
414
  --c-shadow: rgba(0, 0, 0, 0.3);
380
415
  --c-shadow-heavy: rgba(0, 0, 0, 0.5);
381
- --c-glow-accent: rgba(243, 78, 28, 0.15);
382
416
  --c-surface-hover: rgba(255, 255, 255, 0.06);
383
417
  --c-surface-subtle: rgba(255, 255, 255, 0.03);
384
418
  --c-surface-th: rgba(255, 255, 255, 0.04);
385
- --c-accent-8: rgba(243, 78, 28, 0.08);
386
- --c-accent-10: rgba(243, 78, 28, 0.1);
387
- --c-accent-12: rgba(243, 78, 28, 0.12);
388
- --c-accent-15: rgba(243, 78, 28, 0.15);
389
- --c-accent-25: rgba(243, 78, 28, 0.25);
390
- --c-accent-30: rgba(243, 78, 28, 0.3);
391
- --c-accent-40: rgba(243, 78, 28, 0.4);
392
- --c-ok-10: rgba(76, 195, 138, 0.1);
393
- --c-ok-12: rgba(76, 195, 138, 0.12);
394
- --c-ok-20: rgba(76, 195, 138, 0.2);
395
- --c-ok-25: rgba(76, 195, 138, 0.25);
396
- --c-warn-10: rgba(245, 185, 68, 0.1);
397
- --c-warn-12: rgba(245, 185, 68, 0.12);
398
- --c-warn-15: rgba(245, 185, 68, 0.15);
399
- --c-warn-20: rgba(245, 185, 68, 0.2);
400
- --c-warn-22: rgba(245, 185, 68, 0.22);
401
- --c-warn-30: rgba(245, 185, 68, 0.3);
402
- --c-warn-60: rgba(245, 185, 68, 0.6);
403
- --c-danger-12: rgba(240, 86, 106, 0.12);
404
419
  --c-line-30: rgba(41, 41, 44, 0.3);
405
420
  --c-contrast-fg: #0B0B0C;
406
421
  --c-accent-hover: #FF6B3A;
@@ -422,40 +437,27 @@
422
437
  --c-accent: #5CCF8F;
423
438
  --c-ok: #74D99F;
424
439
  --c-warn: #E0B84F;
425
- --c-warn-alt: #D9A421;
426
440
  --c-danger: #E57373;
427
- --c-purple: #A88FE0;
428
- --c-thinking: #A88FE0;
429
- --c-subagent: #4FD8CE;
441
+ /* ── Meaning (one hue per meaning in every theme; see docs/design.md) ── */
442
+ --c-pin: #4BBCFF;
443
+ --c-on-pin: #081524;
444
+ --c-agent: #B388FF;
445
+ --c-subagent: #E879F9;
446
+ --c-rel-supports: #4FC9D9;
447
+ --c-rel-contradicts: #E59B6B;
448
+ --c-rel-cites: #7C9CFF;
449
+ --c-rel-derived: #D5DEEA;
450
+ --c-rel-informs: #E58FB0;
451
+ --c-rel-related: #8BA695;
430
452
  --c-input-bg: #101D16;
431
453
  --c-dot-grid: rgba(92, 207, 143, 0.08);
432
454
  --c-panel-overlay: rgba(12, 23, 18, 0.6);
433
455
  --c-panel-glass: rgba(20, 35, 27, 0.92);
434
456
  --c-shadow: rgba(0, 0, 0, 0.3);
435
457
  --c-shadow-heavy: rgba(0, 0, 0, 0.5);
436
- --c-glow-accent: rgba(92, 207, 143, 0.15);
437
458
  --c-surface-hover: rgba(255, 255, 255, 0.06);
438
459
  --c-surface-subtle: rgba(255, 255, 255, 0.03);
439
460
  --c-surface-th: rgba(255, 255, 255, 0.04);
440
- --c-accent-8: rgba(92, 207, 143, 0.08);
441
- --c-accent-10: rgba(92, 207, 143, 0.1);
442
- --c-accent-12: rgba(92, 207, 143, 0.12);
443
- --c-accent-15: rgba(92, 207, 143, 0.15);
444
- --c-accent-25: rgba(92, 207, 143, 0.25);
445
- --c-accent-30: rgba(92, 207, 143, 0.3);
446
- --c-accent-40: rgba(92, 207, 143, 0.4);
447
- --c-ok-10: rgba(116, 217, 159, 0.1);
448
- --c-ok-12: rgba(116, 217, 159, 0.12);
449
- --c-ok-20: rgba(116, 217, 159, 0.2);
450
- --c-ok-25: rgba(116, 217, 159, 0.25);
451
- --c-warn-10: rgba(224, 184, 79, 0.1);
452
- --c-warn-12: rgba(224, 184, 79, 0.12);
453
- --c-warn-15: rgba(224, 184, 79, 0.15);
454
- --c-warn-20: rgba(224, 184, 79, 0.2);
455
- --c-warn-22: rgba(224, 184, 79, 0.22);
456
- --c-warn-30: rgba(224, 184, 79, 0.3);
457
- --c-warn-60: rgba(224, 184, 79, 0.6);
458
- --c-danger-12: rgba(229, 115, 115, 0.12);
459
461
  --c-line-30: rgba(38, 64, 47, 0.3);
460
462
  --c-contrast-fg: #0C1712;
461
463
  --c-accent-hover: #7BDAA4;
@@ -477,40 +479,27 @@
477
479
  --c-accent: #DFDFC1;
478
480
  --c-ok: #52C880;
479
481
  --c-warn: #E4C465;
480
- --c-warn-alt: #FFB300;
481
482
  --c-danger: #D67670;
482
- --c-purple: #BC8FB4;
483
- --c-thinking: #BC8FB4;
484
- --c-subagent: #6CA0E0;
483
+ /* ── Meaning (one hue per meaning in every theme; see docs/design.md) ── */
484
+ --c-pin: #4BBCFF;
485
+ --c-on-pin: #081524;
486
+ --c-agent: #B388FF;
487
+ --c-subagent: #E879F9;
488
+ --c-rel-supports: #5FCFC0;
489
+ --c-rel-contradicts: #E59B6B;
490
+ --c-rel-cites: #7C9CFF;
491
+ --c-rel-derived: #D5DEEA;
492
+ --c-rel-informs: #E58FB0;
493
+ --c-rel-related: #9CA49C;
485
494
  --c-input-bg: #111311;
486
495
  --c-dot-grid: rgba(223, 223, 193, 0.08);
487
496
  --c-panel-overlay: rgba(11, 13, 11, 0.6);
488
497
  --c-panel-glass: rgba(23, 26, 23, 0.92);
489
498
  --c-shadow: rgba(0, 0, 0, 0.3);
490
499
  --c-shadow-heavy: rgba(0, 0, 0, 0.5);
491
- --c-glow-accent: rgba(223, 223, 193, 0.15);
492
500
  --c-surface-hover: rgba(255, 255, 255, 0.06);
493
501
  --c-surface-subtle: rgba(255, 255, 255, 0.03);
494
502
  --c-surface-th: rgba(255, 255, 255, 0.04);
495
- --c-accent-8: rgba(223, 223, 193, 0.08);
496
- --c-accent-10: rgba(223, 223, 193, 0.1);
497
- --c-accent-12: rgba(223, 223, 193, 0.12);
498
- --c-accent-15: rgba(223, 223, 193, 0.15);
499
- --c-accent-25: rgba(223, 223, 193, 0.25);
500
- --c-accent-30: rgba(223, 223, 193, 0.3);
501
- --c-accent-40: rgba(223, 223, 193, 0.4);
502
- --c-ok-10: rgba(82, 200, 128, 0.1);
503
- --c-ok-12: rgba(82, 200, 128, 0.12);
504
- --c-ok-20: rgba(82, 200, 128, 0.2);
505
- --c-ok-25: rgba(82, 200, 128, 0.25);
506
- --c-warn-10: rgba(228, 196, 101, 0.1);
507
- --c-warn-12: rgba(228, 196, 101, 0.12);
508
- --c-warn-15: rgba(228, 196, 101, 0.15);
509
- --c-warn-20: rgba(228, 196, 101, 0.2);
510
- --c-warn-22: rgba(228, 196, 101, 0.22);
511
- --c-warn-30: rgba(228, 196, 101, 0.3);
512
- --c-warn-60: rgba(228, 196, 101, 0.6);
513
- --c-danger-12: rgba(214, 118, 112, 0.12);
514
503
  --c-line-30: rgba(39, 42, 39, 0.3);
515
504
  --c-contrast-fg: #0B0D0B;
516
505
  --c-accent-hover: #EDEDDB;
@@ -525,6 +514,14 @@
525
514
  padding: 0;
526
515
  }
527
516
 
517
+ /* Controls take the page font instead of the browser's (Arial). */
518
+ button,
519
+ input,
520
+ select,
521
+ textarea {
522
+ font: inherit;
523
+ }
524
+
528
525
  html,
529
526
  body,
530
527
  #app {
@@ -533,7 +530,7 @@ body,
533
530
  overflow: hidden;
534
531
  background: var(--c-bg);
535
532
  color: var(--c-text);
536
- font: 14px / 1.55 var(--font);
533
+ font: 14px / 1.55 var(--font-ui);
537
534
  -webkit-font-smoothing: antialiased;
538
535
  }
539
536
 
@@ -564,12 +561,13 @@ body,
564
561
  /* Node card shared styles */
565
562
  .canvas-node {
566
563
  position: absolute;
567
- /* Standard card shell (rail-chrome-v2): node surface, 12px radius, soft
568
- shadow. Every node kind shares it; the kind shows in the icon color. */
564
+ /* Standard card shell (docs/design/Context.dc.html): node surface, node
565
+ radius, first elevation. Every node kind shares it; the kind shows in
566
+ the icon color. */
569
567
  background: var(--c-panel);
570
568
  border: 1px solid var(--c-line);
571
- border-radius: 12px;
572
- box-shadow: 0 4px 24px var(--c-shadow);
569
+ border-radius: var(--r-node);
570
+ box-shadow: var(--e-1);
573
571
  display: flex;
574
572
  flex-direction: column;
575
573
  overflow: visible;
@@ -597,24 +595,24 @@ body,
597
595
 
598
596
  .canvas-node.active {
599
597
  border-color: var(--c-accent);
600
- box-shadow: 0 0 0 1px var(--c-accent), 0 6px 32px var(--c-glow-accent);
598
+ box-shadow: 0 0 0 1px var(--c-accent), 0 6px 32px color-mix(in srgb, var(--c-accent) 15%, transparent);
601
599
  }
602
600
 
603
601
  .canvas-node.neighbor {
604
- border-color: var(--c-accent-40);
605
- box-shadow: 0 0 0 1px var(--c-accent-30), 0 4px 20px var(--c-accent-15);
602
+ border-color: color-mix(in srgb, var(--c-accent) 40%, transparent);
603
+ 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);
606
604
  transition: border-color 0.2s, box-shadow 0.2s;
607
605
  }
608
606
 
609
607
  /* Spatial search highlighting — canvas lights up as you type in Cmd+K */
610
608
  .canvas-node.search-match {
611
609
  border-color: var(--c-accent);
612
- box-shadow: 0 0 0 2px var(--c-accent), 0 0 20px var(--c-accent-30), 0 0 40px var(--c-accent-15);
610
+ box-shadow: 0 0 0 2px var(--c-accent), 0 0 20px color-mix(in srgb, var(--c-accent) 30%, transparent), 0 0 40px color-mix(in srgb, var(--c-accent) 15%, transparent);
613
611
  animation: search-pulse 1.5s ease-in-out infinite;
614
612
  }
615
613
  @keyframes search-pulse {
616
- 0%, 100% { box-shadow: 0 0 0 2px var(--c-accent), 0 0 20px var(--c-accent-30), 0 0 40px var(--c-accent-15); }
617
- 50% { box-shadow: 0 0 0 2px var(--c-accent), 0 0 30px var(--c-accent-40), 0 0 60px var(--c-accent-25); }
614
+ 0%, 100% { box-shadow: 0 0 0 2px var(--c-accent), 0 0 20px color-mix(in srgb, var(--c-accent) 30%, transparent), 0 0 40px color-mix(in srgb, var(--c-accent) 15%, transparent); }
615
+ 50% { box-shadow: 0 0 0 2px var(--c-accent), 0 0 30px color-mix(in srgb, var(--c-accent) 40%, transparent), 0 0 60px color-mix(in srgb, var(--c-accent) 25%, transparent); }
618
616
  }
619
617
  .canvas-node.search-dimmed {
620
618
  opacity: 0.25;
@@ -638,8 +636,8 @@ body,
638
636
  }
639
637
  .node-port::after {
640
638
  content: '';
641
- width: calc(6px * var(--node-port-scale, 1));
642
- height: calc(6px * var(--node-port-scale, 1));
639
+ width: calc(4px * var(--node-port-scale, 1));
640
+ height: calc(4px * var(--node-port-scale, 1));
643
641
  border-radius: 50%;
644
642
  background: var(--c-accent);
645
643
  border: calc(2px * var(--node-port-scale, 1)) solid var(--c-panel);
@@ -698,31 +696,15 @@ body,
698
696
  justify-content: center;
699
697
  width: calc(14px * var(--node-chrome-scale, 1));
700
698
  height: calc(14px * var(--node-chrome-scale, 1));
701
- color: var(--kind-accent, var(--c-accent));
699
+ color: var(--c-muted);
702
700
  flex-shrink: 0;
703
701
  }
704
702
 
705
- /* Node kind accents (rail-chrome-v2): the icon carries the kind. */
706
- .canvas-node[data-node-type='image'],
707
- .canvas-node[data-node-type='mermaid'] {
708
- --kind-accent: var(--c-warn);
709
- }
710
- .canvas-node[data-node-type='webpage'],
711
- .canvas-node[data-node-type='status'],
712
- .canvas-node[data-node-type='trace'] {
713
- --kind-accent: var(--c-ok);
714
- }
715
- .canvas-node[data-node-type='context'],
716
- .canvas-node[data-node-type='prompt'],
717
- .canvas-node[data-node-type='response'] {
718
- --kind-accent: var(--c-purple);
719
- }
720
-
721
703
  .canvas-node .node-type-badge {
722
704
  font-size: calc(10px * var(--node-chrome-scale, 1));
723
705
  padding: calc(1px * var(--node-chrome-scale, 1)) calc(6px * var(--node-chrome-scale, 1));
724
706
  border-radius: calc(4px * var(--node-chrome-scale, 1));
725
- background: var(--c-accent-12);
707
+ background: color-mix(in srgb, var(--c-accent) 12%, transparent);
726
708
  color: var(--c-accent);
727
709
  text-transform: uppercase;
728
710
  letter-spacing: 0.04em;
@@ -792,6 +774,18 @@ body,
792
774
  color: var(--c-text);
793
775
  }
794
776
 
777
+ /* ⋯ and × appear on hover or keyboard focus; expand and the context pin
778
+ always show (docs/design/Chrome.dc.html). Reserve their slots so revealing
779
+ them cannot move the pin out from under the pointer onto Close. */
780
+ .canvas-node .node-controls .node-hover-control {
781
+ visibility: hidden;
782
+ }
783
+
784
+ .canvas-node:hover .node-controls .node-hover-control,
785
+ .canvas-node:focus-within .node-controls .node-hover-control {
786
+ visibility: visible;
787
+ }
788
+
795
789
  .canvas-node .node-body {
796
790
  flex: 1;
797
791
  overflow: auto;
@@ -892,7 +886,7 @@ body,
892
886
  }
893
887
 
894
888
  .canvas-node .node-body code {
895
- font-family: var(--mono);
889
+ font-family: var(--font-code);
896
890
  font-size: 0.9em;
897
891
  background: var(--c-surface-hover);
898
892
  padding: 2px 5px;
@@ -992,12 +986,12 @@ body,
992
986
  color: var(--c-text);
993
987
  }
994
988
  .rail-btn.active {
995
- background: var(--c-accent-10);
996
- border-color: var(--c-accent-25);
989
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
990
+ border-color: color-mix(in srgb, var(--c-accent) 25%, transparent);
997
991
  color: var(--c-accent);
998
992
  }
999
993
  .rail-btn.active:hover {
1000
- background: var(--c-accent-15, var(--c-accent-10));
994
+ background: color-mix(in srgb, var(--c-accent) 15%, transparent);
1001
995
  }
1002
996
 
1003
997
  .rail-divider {
@@ -1061,7 +1055,7 @@ body,
1061
1055
  }
1062
1056
 
1063
1057
  .top-bar-meta {
1064
- font: 11px var(--mono);
1058
+ font: 11px var(--font-code);
1065
1059
  color: var(--c-dim);
1066
1060
  white-space: nowrap;
1067
1061
  flex-shrink: 0;
@@ -1103,7 +1097,7 @@ body,
1103
1097
  .top-bar-zoom-label {
1104
1098
  min-width: 38px;
1105
1099
  text-align: center;
1106
- font: 11px var(--mono);
1100
+ font: 11px var(--font-code);
1107
1101
  color: var(--c-muted);
1108
1102
  background: none;
1109
1103
  border: 1px solid transparent;
@@ -1136,7 +1130,7 @@ body,
1136
1130
  .agent-chip.phase-thinking,
1137
1131
  .agent-cursor.phase-thinking,
1138
1132
  .minimap-presence.phase-thinking {
1139
- --presence-color: var(--c-purple);
1133
+ --presence-color: var(--c-agent);
1140
1134
  }
1141
1135
  .agent-chip.phase-tooling,
1142
1136
  .agent-cursor.phase-tooling,
@@ -1220,7 +1214,7 @@ body,
1220
1214
  min-width: 0;
1221
1215
  }
1222
1216
  .agent-chip-who {
1223
- font: 10px var(--mono);
1217
+ font: 10px var(--font-code);
1224
1218
  font-weight: 400;
1225
1219
  color: var(--c-muted);
1226
1220
  white-space: nowrap;
@@ -1358,22 +1352,15 @@ body,
1358
1352
  animation: presence-pulse 1.4s ease-in-out infinite;
1359
1353
  }
1360
1354
  .agent-cursor-who {
1361
- font: 9.5px var(--mono);
1355
+ font: 9.5px var(--font-code);
1362
1356
  font-weight: 400;
1363
1357
  color: var(--c-muted);
1364
1358
  }
1365
1359
 
1366
- /* Node shimmer: the node an attached agent is mutating right now */
1367
- .canvas-node.agent-mutating {
1368
- border-color: color-mix(in srgb, var(--c-accent) 45%, transparent) !important;
1369
- background-image: linear-gradient(
1370
- 100deg,
1371
- transparent 20%,
1372
- color-mix(in srgb, var(--c-accent) 13%, transparent) 50%,
1373
- transparent 80%
1374
- );
1375
- background-size: 200% 100%;
1376
- animation: presence-shimmer 1.6s linear infinite;
1360
+ /* The node an attached agent is editing right now: the violet agent bar
1361
+ across the top of the header (docs/design/Context.dc.html). */
1362
+ .canvas-node.agent-mutating .node-titlebar {
1363
+ box-shadow: inset 0 2.5px 0 var(--c-agent);
1377
1364
  }
1378
1365
 
1379
1366
  @keyframes presence-pulse {
@@ -1385,14 +1372,6 @@ body,
1385
1372
  opacity: 0.45;
1386
1373
  }
1387
1374
  }
1388
- @keyframes presence-shimmer {
1389
- from {
1390
- background-position: 200% 0;
1391
- }
1392
- to {
1393
- background-position: -200% 0;
1394
- }
1395
- }
1396
1375
 
1397
1376
  /* Reduced motion: keep every static color state, drop the motion. */
1398
1377
  @media (prefers-reduced-motion: reduce) {
@@ -1400,13 +1379,9 @@ body,
1400
1379
  transition: none;
1401
1380
  }
1402
1381
  .agent-chip-dot,
1403
- .agent-cursor-dot,
1404
- .canvas-node.agent-mutating {
1382
+ .agent-cursor-dot {
1405
1383
  animation: none;
1406
1384
  }
1407
- .canvas-node.agent-mutating {
1408
- background-image: none;
1409
- }
1410
1385
  }
1411
1386
 
1412
1387
  /* ── Session panel (rail-chrome-v2 phase 4) ─────────────────────
@@ -1442,7 +1417,7 @@ body,
1442
1417
  flex-direction: column;
1443
1418
  align-items: center;
1444
1419
  gap: 4px;
1445
- font: 9px var(--mono);
1420
+ font: 9px var(--font-code);
1446
1421
  color: var(--c-dim);
1447
1422
  }
1448
1423
  .session-collapsed-live .session-live-dot {
@@ -1470,11 +1445,11 @@ body,
1470
1445
  display: inline-flex;
1471
1446
  align-items: center;
1472
1447
  gap: 5px;
1473
- font: 10px var(--mono);
1448
+ font: 10px var(--font-code);
1474
1449
  color: var(--c-muted);
1475
1450
  }
1476
1451
  .session-live.phase-thinking {
1477
- --presence-color: var(--c-purple);
1452
+ --presence-color: var(--c-agent);
1478
1453
  }
1479
1454
  .session-live.phase-tooling {
1480
1455
  --presence-color: var(--c-accent);
@@ -1618,7 +1593,7 @@ body,
1618
1593
  margin-top: 3px;
1619
1594
  }
1620
1595
  .session-item-time {
1621
- font: 9px var(--mono);
1596
+ font: 9px var(--font-code);
1622
1597
  color: var(--c-dim);
1623
1598
  flex-shrink: 0;
1624
1599
  margin-top: 4px;
@@ -1629,7 +1604,7 @@ body,
1629
1604
  }
1630
1605
  .session-gate-ttl {
1631
1606
  margin-top: 4px;
1632
- font: 10px var(--mono);
1607
+ font: 10px var(--font-code);
1633
1608
  color: var(--c-warn);
1634
1609
  }
1635
1610
  .session-gate-held {
@@ -1691,7 +1666,7 @@ body,
1691
1666
  display: inline-flex;
1692
1667
  align-items: center;
1693
1668
  gap: 6px;
1694
- font: 10px/1 var(--mono);
1669
+ font: 10px/1 var(--font-code);
1695
1670
  color: var(--c-muted);
1696
1671
  }
1697
1672
  .session-work-dot {
@@ -1728,7 +1703,7 @@ body,
1728
1703
  gap: 8px;
1729
1704
  padding: 7px 12px;
1730
1705
  border-bottom: 1px solid var(--c-line);
1731
- background: var(--c-accent-8);
1706
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
1732
1707
  }
1733
1708
  .session-undo-text {
1734
1709
  flex: 1;
@@ -1742,7 +1717,7 @@ body,
1742
1717
  .session-undo-btn {
1743
1718
  flex-shrink: 0;
1744
1719
  padding: 3px 10px;
1745
- border: 1px solid var(--c-accent-25);
1720
+ border: 1px solid color-mix(in srgb, var(--c-accent) 25%, transparent);
1746
1721
  border-radius: 999px;
1747
1722
  background: none;
1748
1723
  color: var(--c-accent);
@@ -1751,7 +1726,7 @@ body,
1751
1726
  cursor: pointer;
1752
1727
  }
1753
1728
  .session-undo-btn:hover {
1754
- background: var(--c-accent-10);
1729
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
1755
1730
  }
1756
1731
 
1757
1732
  .session-timeline-filters {
@@ -1802,7 +1777,7 @@ body,
1802
1777
  --tone: var(--c-danger);
1803
1778
  }
1804
1779
  .session-timeline-row.tone-purple {
1805
- --tone: var(--c-purple);
1780
+ --tone: var(--c-agent);
1806
1781
  }
1807
1782
  .session-timeline-dot {
1808
1783
  width: 6px;
@@ -1845,7 +1820,7 @@ body,
1845
1820
  padding: 4px 12px;
1846
1821
  border: 1px solid var(--c-accent);
1847
1822
  border-radius: 999px;
1848
- background: var(--c-accent-10);
1823
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
1849
1824
  color: var(--c-accent);
1850
1825
  font-size: 11.5px;
1851
1826
  font-weight: 700;
@@ -1858,7 +1833,7 @@ body,
1858
1833
  }
1859
1834
  .session-timeline-undone {
1860
1835
  margin-top: 2px;
1861
- font: 9px var(--mono);
1836
+ font: 9px var(--font-code);
1862
1837
  color: var(--c-dim);
1863
1838
  }
1864
1839
  .session-timeline-body {
@@ -1879,7 +1854,7 @@ body,
1879
1854
  color: var(--c-muted);
1880
1855
  }
1881
1856
  .session-scope.is-fenced {
1882
- background: color-mix(in srgb, var(--c-purple) 8%, transparent);
1857
+ background: color-mix(in srgb, var(--c-agent) 8%, transparent);
1883
1858
  color: var(--c-text-soft);
1884
1859
  }
1885
1860
  .session-scope-dot {
@@ -1890,14 +1865,14 @@ body,
1890
1865
  flex-shrink: 0;
1891
1866
  }
1892
1867
  .session-scope.is-fenced .session-scope-dot {
1893
- background: var(--c-purple);
1868
+ background: var(--c-agent);
1894
1869
  }
1895
1870
  .session-scope-text {
1896
1871
  flex: 1;
1897
1872
  min-width: 0;
1898
1873
  }
1899
1874
  .session-scope-text strong {
1900
- color: var(--c-purple);
1875
+ color: var(--c-agent);
1901
1876
  }
1902
1877
  .session-scope-action {
1903
1878
  padding: 3px 9px;
@@ -1911,8 +1886,8 @@ body,
1911
1886
  white-space: nowrap;
1912
1887
  }
1913
1888
  .session-scope-action:hover:not(:disabled) {
1914
- border-color: color-mix(in srgb, var(--c-purple) 45%, transparent);
1915
- color: var(--c-purple);
1889
+ border-color: color-mix(in srgb, var(--c-agent) 45%, transparent);
1890
+ color: var(--c-agent);
1916
1891
  }
1917
1892
  .session-scope-action:disabled {
1918
1893
  opacity: 0.5;
@@ -1926,9 +1901,9 @@ body,
1926
1901
  top: 0;
1927
1902
  z-index: 1;
1928
1903
  pointer-events: none;
1929
- border: 1.5px dashed color-mix(in srgb, var(--c-purple) 40%, transparent);
1904
+ border: 1.5px dashed color-mix(in srgb, var(--c-agent) 40%, transparent);
1930
1905
  border-radius: 16px;
1931
- background: color-mix(in srgb, var(--c-purple) 3%, transparent);
1906
+ background: color-mix(in srgb, var(--c-agent) 3%, transparent);
1932
1907
  }
1933
1908
  .scope-fence-pill {
1934
1909
  position: absolute;
@@ -1936,9 +1911,9 @@ body,
1936
1911
  transform-origin: 0 50%;
1937
1912
  padding: 3px 10px;
1938
1913
  border-radius: 999px;
1939
- border: 1px solid color-mix(in srgb, var(--c-purple) 35%, transparent);
1940
- background: color-mix(in srgb, var(--c-panel) 92%, var(--c-purple) 8%);
1941
- color: var(--c-purple);
1914
+ border: 1px solid color-mix(in srgb, var(--c-agent) 35%, transparent);
1915
+ background: color-mix(in srgb, var(--c-panel) 92%, var(--c-agent) 8%);
1916
+ color: var(--c-agent);
1942
1917
  font-size: 10px;
1943
1918
  font-weight: 600;
1944
1919
  letter-spacing: 0.04em;
@@ -1982,9 +1957,9 @@ body,
1982
1957
  max-width: 240px;
1983
1958
  padding: 2px 5px 2px 9px;
1984
1959
  border-radius: 999px;
1985
- border: 1px solid color-mix(in srgb, var(--c-warn) 35%, transparent);
1986
- background: color-mix(in srgb, var(--c-warn) 12%, transparent);
1987
- color: var(--c-warn);
1960
+ border: 1px solid color-mix(in srgb, var(--c-pin) 35%, transparent);
1961
+ background: color-mix(in srgb, var(--c-pin) 12%, transparent);
1962
+ color: var(--c-pin);
1988
1963
  font-size: 10px;
1989
1964
  font-weight: 600;
1990
1965
  }
@@ -2008,7 +1983,7 @@ body,
2008
1983
  border: none;
2009
1984
  border-radius: 50%;
2010
1985
  background: none;
2011
- color: var(--c-warn);
1986
+ color: var(--c-pin);
2012
1987
  font-size: 12px;
2013
1988
  line-height: 1;
2014
1989
  cursor: pointer;
@@ -2016,7 +1991,7 @@ body,
2016
1991
  }
2017
1992
  .command-bar-chip-unpin:hover {
2018
1993
  opacity: 1;
2019
- background: color-mix(in srgb, var(--c-warn) 25%, transparent);
1994
+ background: color-mix(in srgb, var(--c-pin) 25%, transparent);
2020
1995
  }
2021
1996
  .command-bar-chips-note {
2022
1997
  font-size: 10px;
@@ -2054,7 +2029,7 @@ body,
2054
2029
  border-radius: 8px;
2055
2030
  background: var(--c-panel-overlay);
2056
2031
  color: var(--c-text);
2057
- font: 12px/1.35 var(--font);
2032
+ font: 12px/1.35 var(--font-ui);
2058
2033
  cursor: pointer;
2059
2034
  }
2060
2035
  .choice-menu-trigger > span {
@@ -2105,7 +2080,7 @@ body,
2105
2080
 
2106
2081
  .command-bar-icon {
2107
2082
  flex-shrink: 0;
2108
- color: var(--c-purple);
2083
+ color: var(--c-agent);
2109
2084
  }
2110
2085
  .command-bar-input {
2111
2086
  flex: 1;
@@ -2115,7 +2090,7 @@ body,
2115
2090
  outline: none;
2116
2091
  background: none;
2117
2092
  color: var(--c-text);
2118
- font: 13px var(--font);
2093
+ font: 13px var(--font-ui);
2119
2094
  }
2120
2095
  .command-bar-input::placeholder {
2121
2096
  color: var(--c-dim);
@@ -2175,7 +2150,7 @@ body,
2175
2150
  display: block;
2176
2151
  height: 100%;
2177
2152
  border-radius: 3px;
2178
- background: linear-gradient(90deg, var(--c-accent), var(--c-warn));
2153
+ background: var(--c-accent);
2179
2154
  transition: width 180ms ease;
2180
2155
  }
2181
2156
  .context-budget.tone-warn .context-budget-fill,
@@ -2183,7 +2158,7 @@ body,
2183
2158
  background: var(--tone);
2184
2159
  }
2185
2160
  .context-budget-label {
2186
- font: 11px var(--mono);
2161
+ font: 11px var(--font-code);
2187
2162
  color: var(--c-text-soft);
2188
2163
  min-width: 30px;
2189
2164
  text-align: right;
@@ -2209,9 +2184,9 @@ body,
2209
2184
  gap: 8px;
2210
2185
  padding: 4px 12px 4px 6px;
2211
2186
  border-radius: 999px;
2212
- border: 1px solid color-mix(in srgb, var(--c-purple) 35%, transparent);
2213
- background: color-mix(in srgb, var(--c-purple) 8%, transparent);
2214
- color: var(--c-purple);
2187
+ border: 1px solid color-mix(in srgb, var(--c-agent) 35%, transparent);
2188
+ background: color-mix(in srgb, var(--c-agent) 8%, transparent);
2189
+ color: var(--c-agent);
2215
2190
  cursor: pointer;
2216
2191
  white-space: nowrap;
2217
2192
  flex-shrink: 0;
@@ -2219,7 +2194,7 @@ body,
2219
2194
  }
2220
2195
  .external-indicator:hover,
2221
2196
  .external-indicator[aria-expanded='true'] {
2222
- background: color-mix(in srgb, var(--c-purple) 15%, transparent);
2197
+ background: color-mix(in srgb, var(--c-agent) 15%, transparent);
2223
2198
  }
2224
2199
  .external-indicator-avatars {
2225
2200
  display: inline-flex;
@@ -2233,14 +2208,14 @@ body,
2233
2208
  font-weight: 600;
2234
2209
  }
2235
2210
  .external-indicator-ops {
2236
- font: 10px var(--mono);
2211
+ font: 10px var(--font-code);
2237
2212
  color: var(--c-muted);
2238
2213
  }
2239
2214
  .external-indicator-dot {
2240
2215
  width: 7px;
2241
2216
  height: 7px;
2242
2217
  border-radius: 50%;
2243
- background: var(--c-purple);
2218
+ background: var(--c-agent);
2244
2219
  flex-shrink: 0;
2245
2220
  animation: presence-pulse 1.4s ease-in-out infinite;
2246
2221
  }
@@ -2254,7 +2229,7 @@ body,
2254
2229
  display: flex;
2255
2230
  flex-direction: column;
2256
2231
  background: var(--c-panel);
2257
- border: 1px solid color-mix(in srgb, var(--c-purple) 30%, transparent);
2232
+ border: 1px solid color-mix(in srgb, var(--c-agent) 30%, transparent);
2258
2233
  border-radius: 10px;
2259
2234
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
2260
2235
  /* Popover-level like the rail menus: above the minimap, below the rail. */
@@ -2279,7 +2254,7 @@ body,
2279
2254
  color: var(--c-text);
2280
2255
  }
2281
2256
  .activity-feed-sub {
2282
- font: 9px var(--mono);
2257
+ font: 9px var(--font-code);
2283
2258
  color: var(--c-dim);
2284
2259
  }
2285
2260
  .activity-feed-close {
@@ -2301,7 +2276,7 @@ body,
2301
2276
  border-bottom: 1px solid var(--c-line);
2302
2277
  }
2303
2278
  .activity-filter {
2304
- --writer: var(--c-purple);
2279
+ --writer: var(--c-agent);
2305
2280
  padding: 2px 9px;
2306
2281
  border-radius: 999px;
2307
2282
  border: 1px solid var(--c-line);
@@ -2332,7 +2307,7 @@ body,
2332
2307
  border-bottom: none;
2333
2308
  }
2334
2309
  .activity-row.is-pending {
2335
- background: color-mix(in srgb, var(--c-purple) 5%, transparent);
2310
+ background: color-mix(in srgb, var(--c-agent) 5%, transparent);
2336
2311
  }
2337
2312
  .activity-glyph {
2338
2313
  flex-shrink: 0;
@@ -2353,7 +2328,7 @@ body,
2353
2328
  color: var(--c-accent);
2354
2329
  }
2355
2330
  .activity-glyph.tone-purple {
2356
- color: var(--c-purple);
2331
+ color: var(--c-agent);
2357
2332
  }
2358
2333
  .activity-main {
2359
2334
  flex: 1;
@@ -2370,7 +2345,7 @@ body,
2370
2345
  color: var(--c-muted);
2371
2346
  }
2372
2347
  .activity-writer {
2373
- font: 8.5px var(--mono);
2348
+ font: 8.5px var(--font-code);
2374
2349
  }
2375
2350
  .activity-actions {
2376
2351
  display: flex;
@@ -2393,7 +2368,7 @@ body,
2393
2368
  }
2394
2369
  .activity-hint,
2395
2370
  .activity-age {
2396
- font: 9px var(--mono);
2371
+ font: 9px var(--font-code);
2397
2372
  color: var(--c-dim);
2398
2373
  flex-shrink: 0;
2399
2374
  }
@@ -2428,7 +2403,7 @@ body,
2428
2403
  color: var(--c-text);
2429
2404
  }
2430
2405
  .activity-feed-link.is-accent {
2431
- color: var(--c-purple);
2406
+ color: var(--c-agent);
2432
2407
  }
2433
2408
  .activity-feed-link.is-accent:hover {
2434
2409
  text-decoration: underline;
@@ -2469,7 +2444,7 @@ body,
2469
2444
  color: var(--c-text);
2470
2445
  }
2471
2446
  .writers-board {
2472
- font: 9px var(--mono);
2447
+ font: 9px var(--font-code);
2473
2448
  color: var(--c-dim);
2474
2449
  }
2475
2450
  .writers-body {
@@ -2502,18 +2477,18 @@ body,
2502
2477
  white-space: nowrap;
2503
2478
  }
2504
2479
  .writers-name.is-mono {
2505
- font: 11px var(--mono);
2480
+ font: 11px var(--font-code);
2506
2481
  }
2507
2482
  .writers-config {
2508
2483
  font-size: 9.5px;
2509
2484
  font-weight: 600;
2510
2485
  padding: 2px 8px;
2511
2486
  border-radius: 999px;
2512
- background: color-mix(in srgb, var(--c-purple) 12%, transparent);
2513
- color: var(--c-purple);
2487
+ background: color-mix(in srgb, var(--c-agent) 12%, transparent);
2488
+ color: var(--c-agent);
2514
2489
  }
2515
2490
  .writers-meta {
2516
- font: 9.5px var(--mono);
2491
+ font: 9.5px var(--font-code);
2517
2492
  color: var(--c-dim);
2518
2493
  }
2519
2494
  .writers-empty {
@@ -2576,24 +2551,32 @@ body,
2576
2551
  .minimap-node {
2577
2552
  position: absolute;
2578
2553
  border-radius: 1.5px;
2579
- background: var(--kind);
2554
+ background: var(--c-muted);
2580
2555
  opacity: 0.55;
2581
2556
  }
2582
2557
  .minimap-node.is-group {
2583
- background: color-mix(in srgb, var(--kind) 4%, transparent);
2584
- border: 1px dashed color-mix(in srgb, var(--kind) 55%, transparent);
2558
+ background: color-mix(in srgb, var(--c-muted) 4%, transparent);
2559
+ border: 1px dashed color-mix(in srgb, var(--c-muted) 55%, transparent);
2585
2560
  opacity: 1;
2586
2561
  border-radius: 2px;
2587
2562
  }
2563
+ .minimap-node.is-pinned {
2564
+ background: var(--c-pin);
2565
+ opacity: 0.9;
2566
+ }
2567
+ .minimap-node.is-agent {
2568
+ background: var(--c-agent);
2569
+ opacity: 0.9;
2570
+ }
2588
2571
  .minimap-node.is-selected {
2589
2572
  outline: 1px solid var(--c-accent);
2590
2573
  opacity: 0.8;
2591
2574
  }
2592
2575
  .minimap-fence {
2593
2576
  position: absolute;
2594
- border: 1px dashed color-mix(in srgb, var(--c-purple) 45%, transparent);
2577
+ border: 1px dashed color-mix(in srgb, var(--c-agent) 45%, transparent);
2595
2578
  border-radius: 2px;
2596
- background: color-mix(in srgb, var(--c-purple) 3%, transparent);
2579
+ background: color-mix(in srgb, var(--c-agent) 3%, transparent);
2597
2580
  }
2598
2581
  .minimap-presence {
2599
2582
  position: absolute;
@@ -2628,7 +2611,7 @@ body,
2628
2611
  position: absolute;
2629
2612
  right: 5px;
2630
2613
  bottom: 3px;
2631
- font: 8px var(--mono);
2614
+ font: 8px var(--font-code);
2632
2615
  color: var(--c-dim);
2633
2616
  }
2634
2617
 
@@ -2730,7 +2713,7 @@ body,
2730
2713
  color: var(--c-accent);
2731
2714
  }
2732
2715
  .edge-hint-keys {
2733
- font: 9px var(--mono);
2716
+ font: 9px var(--font-code);
2734
2717
  color: var(--c-dim);
2735
2718
  }
2736
2719
 
@@ -2783,8 +2766,8 @@ body,
2783
2766
  padding: 2px 9px;
2784
2767
  border-radius: 999px;
2785
2768
  background: var(--c-panel-soft);
2786
- border: 1px solid color-mix(in srgb, var(--c-warn) 40%, transparent);
2787
- color: var(--c-warn);
2769
+ border: 1px solid color-mix(in srgb, var(--c-agent) 40%, transparent);
2770
+ color: var(--c-agent);
2788
2771
  font-size: 9.5px;
2789
2772
  font-weight: 600;
2790
2773
  white-space: nowrap;
@@ -2793,7 +2776,7 @@ body,
2793
2776
  width: 6px;
2794
2777
  height: 6px;
2795
2778
  border-radius: 50%;
2796
- background: var(--c-warn);
2779
+ background: var(--c-agent);
2797
2780
  }
2798
2781
 
2799
2782
  /* Quiet-board affordance in the top bar */
@@ -2813,8 +2796,8 @@ body,
2813
2796
  flex-shrink: 0;
2814
2797
  }
2815
2798
  .start-session-btn:hover {
2816
- border-color: color-mix(in srgb, var(--c-purple) 40%, transparent);
2817
- color: var(--c-purple);
2799
+ border-color: color-mix(in srgb, var(--c-agent) 40%, transparent);
2800
+ color: var(--c-agent);
2818
2801
  }
2819
2802
  .start-session-dot {
2820
2803
  width: 7px;
@@ -2823,7 +2806,7 @@ body,
2823
2806
  background: var(--c-dim);
2824
2807
  }
2825
2808
  .start-session-btn:hover .start-session-dot {
2826
- background: var(--c-purple);
2809
+ background: var(--c-agent);
2827
2810
  }
2828
2811
  .session-end {
2829
2812
  padding: 3px 10px;
@@ -2885,6 +2868,11 @@ body,
2885
2868
  background: var(--c-surface-hover);
2886
2869
  color: var(--c-text);
2887
2870
  }
2871
+ .session-receipt-who {
2872
+ margin: 2px 0 0 15px;
2873
+ font-size: 11px;
2874
+ color: var(--c-muted);
2875
+ }
2888
2876
  .session-receipt-tiles {
2889
2877
  display: grid;
2890
2878
  grid-template-columns: repeat(3, 1fr);
@@ -2915,6 +2903,111 @@ body,
2915
2903
  .session-receipt-tile-value.tone-danger {
2916
2904
  color: var(--c-danger);
2917
2905
  }
2906
+ /* What the session did with context (docs/design/AgentContext.dc.html receipt). */
2907
+ .session-receipt-context {
2908
+ display: flex;
2909
+ flex-direction: column;
2910
+ gap: var(--space-2);
2911
+ margin-top: var(--space-3);
2912
+ }
2913
+ .session-receipt-warn {
2914
+ display: flex;
2915
+ align-items: center;
2916
+ gap: var(--space-2);
2917
+ padding: var(--space-2) 10px;
2918
+ border-radius: 8px;
2919
+ background: color-mix(in srgb, var(--c-warn) 10%, transparent);
2920
+ color: var(--c-warn);
2921
+ font-size: var(--fs-meta);
2922
+ }
2923
+ .session-receipt-warn svg,
2924
+ .session-receipt-context-head svg {
2925
+ width: 13px;
2926
+ height: 13px;
2927
+ flex-shrink: 0;
2928
+ fill: none;
2929
+ stroke: currentColor;
2930
+ stroke-width: 2;
2931
+ stroke-linecap: round;
2932
+ stroke-linejoin: round;
2933
+ }
2934
+ .session-receipt-context-row {
2935
+ display: flex;
2936
+ flex-direction: column;
2937
+ gap: 3px;
2938
+ padding-bottom: var(--space-2);
2939
+ border-bottom: 1px solid var(--c-line);
2940
+ }
2941
+ .session-receipt-context-head {
2942
+ display: flex;
2943
+ align-items: center;
2944
+ gap: 6px;
2945
+ color: var(--c-agent);
2946
+ }
2947
+ .session-receipt-context-name {
2948
+ flex: 1;
2949
+ font-size: var(--fs-ui);
2950
+ font-weight: 600;
2951
+ color: var(--c-text);
2952
+ }
2953
+ .session-receipt-context-count {
2954
+ font-size: var(--fs-meta);
2955
+ color: var(--c-dim);
2956
+ }
2957
+ .session-receipt-context-items {
2958
+ padding-left: 19px;
2959
+ font-size: var(--fs-meta);
2960
+ color: var(--c-muted);
2961
+ }
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);
2968
+ font-size: var(--fs-meta);
2969
+ cursor: pointer;
2970
+ }
2971
+ .session-receipt-lens {
2972
+ display: flex;
2973
+ align-items: center;
2974
+ gap: var(--space-2);
2975
+ padding: 0;
2976
+ border: none;
2977
+ background: none;
2978
+ color: var(--c-muted);
2979
+ font-size: var(--fs-meta);
2980
+ cursor: pointer;
2981
+ }
2982
+ .session-receipt-lens-track {
2983
+ position: relative;
2984
+ width: 32px;
2985
+ height: 18px;
2986
+ border-radius: var(--r-pill);
2987
+ background: var(--c-line);
2988
+ }
2989
+ .session-receipt-lens-knob {
2990
+ position: absolute;
2991
+ left: 2px;
2992
+ top: 2px;
2993
+ width: 14px;
2994
+ height: 14px;
2995
+ border-radius: var(--r-pill);
2996
+ background: var(--c-muted);
2997
+ }
2998
+ .session-receipt-lens.is-on .session-receipt-lens-track {
2999
+ background: var(--c-agent);
3000
+ }
3001
+ .session-receipt-lens.is-on .session-receipt-lens-knob {
3002
+ left: auto;
3003
+ right: 2px;
3004
+ background: var(--c-bg);
3005
+ }
3006
+ /* The lens: nodes the session did not touch step back. */
3007
+ .canvas-node.lens-dimmed {
3008
+ opacity: 0.35;
3009
+ }
3010
+
2918
3011
  .session-receipt-note,
2919
3012
  .session-receipt-diff {
2920
3013
  margin-top: 10px;
@@ -2940,8 +3033,8 @@ body,
2940
3033
  cursor: pointer;
2941
3034
  }
2942
3035
  .session-receipt-primary {
2943
- border: 1px solid var(--c-accent-25);
2944
- background: var(--c-accent-12);
3036
+ border: 1px solid color-mix(in srgb, var(--c-accent) 25%, transparent);
3037
+ background: color-mix(in srgb, var(--c-accent) 12%, transparent);
2945
3038
  color: var(--c-accent);
2946
3039
  }
2947
3040
  .session-receipt-primary:disabled {
@@ -2966,7 +3059,7 @@ body,
2966
3059
  border: 1px solid color-mix(in srgb, var(--c-warn) 35%, transparent);
2967
3060
  background: color-mix(in srgb, var(--c-warn) 12%, transparent);
2968
3061
  color: var(--c-warn);
2969
- font: 11px var(--mono);
3062
+ font: 11px var(--font-code);
2970
3063
  font-weight: 600;
2971
3064
  white-space: nowrap;
2972
3065
  flex-shrink: 0;
@@ -3061,7 +3154,7 @@ body,
3061
3154
  background: color-mix(in srgb, var(--c-panel) 92%, black 8%);
3062
3155
  border: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
3063
3156
  border-radius: 10px;
3064
- box-shadow: 0 14px 36px var(--c-shadow-heavy), 0 0 0 1px var(--c-accent-8);
3157
+ box-shadow: 0 14px 36px var(--c-shadow-heavy), 0 0 0 1px color-mix(in srgb, var(--c-accent) 8%, transparent);
3065
3158
  backdrop-filter: blur(14px);
3066
3159
  color: var(--c-text);
3067
3160
  font-size: 12px;
@@ -3197,10 +3290,10 @@ body,
3197
3290
  min-height: 20px;
3198
3291
  padding: 2px 7px;
3199
3292
  border-radius: 999px;
3200
- border: 1px solid var(--c-accent-25);
3201
- background: var(--c-accent-10);
3293
+ border: 1px solid color-mix(in srgb, var(--c-accent) 25%, transparent);
3294
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
3202
3295
  color: var(--c-accent);
3203
- font: 11px/1 var(--mono);
3296
+ font: 11px/1 var(--font-code);
3204
3297
  white-space: nowrap;
3205
3298
  }
3206
3299
 
@@ -3259,7 +3352,7 @@ body,
3259
3352
  min-width: 0;
3260
3353
  }
3261
3354
  .connection-banner-meta {
3262
- font: 9.5px var(--mono);
3355
+ font: 9.5px var(--font-code);
3263
3356
  color: var(--c-muted);
3264
3357
  }
3265
3358
  .connection-banner-progress {
@@ -3436,7 +3529,7 @@ body,
3436
3529
  border: none;
3437
3530
  background: var(--c-panel-soft);
3438
3531
  color: var(--c-text);
3439
- font: 13px / 1.6 var(--mono);
3532
+ font: 13px / 1.6 var(--font-code);
3440
3533
  padding: 12px;
3441
3534
  outline: none;
3442
3535
  }
@@ -3474,7 +3567,7 @@ body,
3474
3567
  border-radius: var(--radius-sm);
3475
3568
  color: var(--c-muted);
3476
3569
  cursor: pointer;
3477
- font-family: var(--font);
3570
+ font-family: var(--font-ui);
3478
3571
  transition: all 0.12s ease;
3479
3572
  }
3480
3573
 
@@ -3485,13 +3578,13 @@ body,
3485
3578
  }
3486
3579
 
3487
3580
  .md-toolbar-btn-primary {
3488
- background: var(--c-accent-15);
3489
- border-color: var(--c-accent-40);
3581
+ background: color-mix(in srgb, var(--c-accent) 15%, transparent);
3582
+ border-color: color-mix(in srgb, var(--c-accent) 40%, transparent);
3490
3583
  color: var(--c-accent);
3491
3584
  }
3492
3585
 
3493
3586
  .md-toolbar-btn-primary:hover {
3494
- background: var(--c-accent-25);
3587
+ background: color-mix(in srgb, var(--c-accent) 25%, transparent);
3495
3588
  border-color: var(--c-accent);
3496
3589
  }
3497
3590
 
@@ -3574,7 +3667,7 @@ body,
3574
3667
  border-left: 3px solid var(--c-accent);
3575
3668
  padding: 0.5em 1em;
3576
3669
  margin: 0.8em 0;
3577
- background: var(--c-accent-8);
3670
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
3578
3671
  border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
3579
3672
  }
3580
3673
 
@@ -3597,7 +3690,7 @@ body,
3597
3690
  }
3598
3691
 
3599
3692
  .md-reader-content code {
3600
- font-family: var(--mono);
3693
+ font-family: var(--font-code);
3601
3694
  font-size: 0.88em;
3602
3695
  background: var(--c-surface-hover);
3603
3696
  padding: 2px 6px;
@@ -3636,7 +3729,7 @@ body,
3636
3729
  }
3637
3730
 
3638
3731
  .md-reader-content th {
3639
- background: var(--c-accent-8);
3732
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
3640
3733
  font-weight: 600;
3641
3734
  color: var(--c-text);
3642
3735
  padding: 10px 14px;
@@ -3680,17 +3773,17 @@ body,
3680
3773
  border-radius: var(--radius);
3681
3774
  color: var(--c-muted);
3682
3775
  cursor: pointer;
3683
- font-family: var(--font);
3776
+ font-family: var(--font-ui);
3684
3777
  transition: all 0.15s ease;
3685
3778
  z-index: 1;
3686
3779
  box-shadow: 0 4px 16px var(--c-shadow);
3687
3780
  }
3688
3781
 
3689
3782
  .md-edit-fab:hover {
3690
- background: var(--c-accent-12);
3783
+ background: color-mix(in srgb, var(--c-accent) 12%, transparent);
3691
3784
  border-color: var(--c-accent);
3692
3785
  color: var(--c-accent);
3693
- box-shadow: 0 4px 20px var(--c-glow-accent);
3786
+ box-shadow: 0 4px 20px color-mix(in srgb, var(--c-accent) 15%, transparent);
3694
3787
  }
3695
3788
 
3696
3789
  /* ── Inline WYSIWYG editor (contentEditable on the rendered HTML) ─
@@ -3709,7 +3802,7 @@ body,
3709
3802
 
3710
3803
  .md-reader-editable::selection,
3711
3804
  .md-reader-editable *::selection {
3712
- background: var(--c-accent-25);
3805
+ background: color-mix(in srgb, var(--c-accent) 25%, transparent);
3713
3806
  }
3714
3807
 
3715
3808
  /* ── Inline selection toolbar (contentEditable WYSIWYG) ────────── */
@@ -3725,7 +3818,7 @@ body,
3725
3818
  border: 1px solid var(--c-line);
3726
3819
  border-radius: 8px;
3727
3820
  box-shadow: 0 4px 16px var(--c-shadow), 0 0 0 1px var(--c-line-30);
3728
- font-family: var(--font);
3821
+ font-family: var(--font-ui);
3729
3822
  animation: md-inline-format-bar-in 0.1s ease-out;
3730
3823
  }
3731
3824
 
@@ -3744,7 +3837,7 @@ body,
3744
3837
  background: none;
3745
3838
  border: 1px solid transparent;
3746
3839
  border-radius: var(--radius-sm);
3747
- font: 600 12px var(--font);
3840
+ font: 600 12px var(--font-ui);
3748
3841
  color: var(--c-text-soft);
3749
3842
  cursor: pointer;
3750
3843
  white-space: nowrap;
@@ -3758,7 +3851,7 @@ body,
3758
3851
  }
3759
3852
 
3760
3853
  .md-inline-format-btn:active {
3761
- background: var(--c-accent-12);
3854
+ background: color-mix(in srgb, var(--c-accent) 12%, transparent);
3762
3855
  color: var(--c-accent);
3763
3856
  }
3764
3857
 
@@ -3801,7 +3894,7 @@ body,
3801
3894
  background: none;
3802
3895
  border: 1px solid transparent;
3803
3896
  border-radius: var(--radius-sm);
3804
- font-family: var(--mono);
3897
+ font-family: var(--font-code);
3805
3898
  font-size: 12px;
3806
3899
  font-weight: 600;
3807
3900
  color: var(--c-muted);
@@ -3817,7 +3910,7 @@ body,
3817
3910
  }
3818
3911
 
3819
3912
  .md-format-btn:active {
3820
- background: var(--c-accent-12);
3913
+ background: color-mix(in srgb, var(--c-accent) 12%, transparent);
3821
3914
  color: var(--c-accent);
3822
3915
  }
3823
3916
 
@@ -3884,10 +3977,6 @@ html.is-node-resizing .canvas-node {
3884
3977
  transition: box-shadow 0.15s ease !important;
3885
3978
  }
3886
3979
 
3887
- html.is-node-dragging .attention-field-layer {
3888
- visibility: hidden;
3889
- }
3890
-
3891
3980
  html.is-node-dragging,
3892
3981
  html.is-node-dragging *,
3893
3982
  html.is-canvas-panning,
@@ -3960,12 +4049,12 @@ html.is-node-resizing .ext-app-preview-catcher {
3960
4049
  }
3961
4050
 
3962
4051
  .context-menu-item:hover {
3963
- background: var(--c-accent-10);
4052
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
3964
4053
  color: var(--c-accent);
3965
4054
  }
3966
4055
 
3967
4056
  .context-menu-item.is-danger .context-menu-label {
3968
- color: var(--c-danger, #e5484d);
4057
+ color: var(--c-danger);
3969
4058
  }
3970
4059
 
3971
4060
  .context-menu-shortcut {
@@ -4043,8 +4132,8 @@ html.is-node-resizing .ext-app-preview-catcher {
4043
4132
  }
4044
4133
 
4045
4134
  .context-menu-color-swatch:hover {
4046
- background: var(--c-accent-8);
4047
- border-color: var(--c-accent-30);
4135
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
4136
+ border-color: color-mix(in srgb, var(--c-accent) 30%, transparent);
4048
4137
  }
4049
4138
 
4050
4139
  .context-menu-color-swatch.active {
@@ -4055,7 +4144,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4055
4144
  .context-menu-color-dot {
4056
4145
  background: var(--swatch-color);
4057
4146
  border-radius: 999px;
4058
- box-shadow: 0 0 0 1px color-mix(in srgb, var(--swatch-color) 60%, #000 40%);
4147
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--swatch-color) 60%, var(--c-bg) 40%);
4059
4148
  flex: 0 0 auto;
4060
4149
  height: 10px;
4061
4150
  width: 10px;
@@ -4092,7 +4181,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4092
4181
  /* Edge labels — --edge-chrome-scale is set on the edge <svg> so labels keep a
4093
4182
  constant screen size while zoomed out (see edgeChromeScale in EdgeLayer). */
4094
4183
  .edge-label {
4095
- font-family: var(--font);
4184
+ font-family: var(--font-ui);
4096
4185
  font-size: calc(11px * var(--edge-label-scale, 1));
4097
4186
  pointer-events: none;
4098
4187
  user-select: none;
@@ -4132,10 +4221,10 @@ html.is-node-resizing .ext-app-preview-catcher {
4132
4221
  @keyframes trace-pulse {
4133
4222
  0%,
4134
4223
  100% {
4135
- box-shadow: 0 0 0 0 var(--c-accent-30);
4224
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--c-accent) 30%, transparent);
4136
4225
  }
4137
4226
  50% {
4138
- box-shadow: 0 0 0 4px var(--c-accent-15);
4227
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--c-accent) 15%, transparent);
4139
4228
  }
4140
4229
  }
4141
4230
 
@@ -4146,7 +4235,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4146
4235
  gap: 10px;
4147
4236
  height: 100%;
4148
4237
  overflow: auto;
4149
- font-family: var(--mono);
4238
+ font-family: var(--font-code);
4150
4239
  font-size: 12px;
4151
4240
  color: var(--c-text);
4152
4241
  }
@@ -4195,12 +4284,12 @@ html.is-node-resizing .ext-app-preview-catcher {
4195
4284
 
4196
4285
  .diff-node .diff-line-add {
4197
4286
  color: var(--c-ok);
4198
- background: var(--c-ok-10);
4287
+ background: color-mix(in srgb, var(--c-ok) 10%, transparent);
4199
4288
  }
4200
4289
 
4201
4290
  .diff-node .diff-line-remove {
4202
4291
  color: var(--c-danger);
4203
- background: var(--c-danger-12);
4292
+ background: color-mix(in srgb, var(--c-danger) 12%, transparent);
4204
4293
  }
4205
4294
 
4206
4295
  .diff-node .diff-line-context {
@@ -4241,7 +4330,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4241
4330
  border-spacing: 0;
4242
4331
  width: max-content;
4243
4332
  min-width: 100%;
4244
- font-family: var(--mono);
4333
+ font-family: var(--font-code);
4245
4334
  color: var(--c-text);
4246
4335
  }
4247
4336
 
@@ -4344,21 +4433,21 @@ html.is-node-resizing .ext-app-preview-catcher {
4344
4433
 
4345
4434
  /* ── Prompt nodes ──────────────────────────────────────────── */
4346
4435
  .canvas-node:has(.prompt-node-inner) {
4347
- border-color: var(--c-accent-30);
4436
+ border-color: color-mix(in srgb, var(--c-accent) 30%, transparent);
4348
4437
  }
4349
4438
 
4350
4439
  .canvas-node:has(.prompt-node-inner) .node-type-badge {
4351
- background: var(--c-accent-15);
4440
+ background: color-mix(in srgb, var(--c-accent) 15%, transparent);
4352
4441
  color: var(--c-accent);
4353
4442
  }
4354
4443
 
4355
4444
  /* ── Response nodes ────────────────────────────────────────── */
4356
4445
  .canvas-node:has(.response-node-inner) {
4357
- border-color: var(--c-ok-25);
4446
+ border-color: color-mix(in srgb, var(--c-ok) 25%, transparent);
4358
4447
  }
4359
4448
 
4360
4449
  .canvas-node:has(.response-node-inner) .node-type-badge {
4361
- background: var(--c-ok-12);
4450
+ background: color-mix(in srgb, var(--c-ok) 12%, transparent);
4362
4451
  color: var(--c-ok);
4363
4452
  }
4364
4453
 
@@ -4377,39 +4466,38 @@ html.is-node-resizing .ext-app-preview-catcher {
4377
4466
 
4378
4467
  /* ── Multi-node selection (item 13: outline, corner handles, soft glow) ── */
4379
4468
  .canvas-node.selected {
4380
- border-color: var(--c-accent);
4381
- box-shadow: 0 0 0 1px var(--c-accent), 0 0 0 4px color-mix(in srgb, var(--c-accent) 10%, transparent);
4469
+ box-shadow: 0 0 0 3px var(--c-bg), 0 0 0 5px var(--c-accent), var(--e-1);
4382
4470
  }
4383
4471
  .node-selection-handle {
4384
4472
  position: absolute;
4385
- width: 7px;
4386
- height: 7px;
4387
- background: var(--c-bg);
4473
+ width: 8px;
4474
+ height: 8px;
4475
+ background: var(--c-panel);
4388
4476
  border: 1.5px solid var(--c-accent);
4389
4477
  border-radius: 2px;
4390
4478
  pointer-events: none;
4391
4479
  z-index: 3;
4392
4480
  }
4393
4481
  .node-selection-handle.is-tl {
4394
- left: -4px;
4395
- top: -4px;
4482
+ left: -9px;
4483
+ top: -9px;
4396
4484
  }
4397
4485
  .node-selection-handle.is-tr {
4398
- right: -4px;
4399
- top: -4px;
4486
+ right: -9px;
4487
+ top: -9px;
4400
4488
  }
4401
4489
  .node-selection-handle.is-bl {
4402
- left: -4px;
4403
- bottom: -4px;
4490
+ left: -9px;
4491
+ bottom: -9px;
4404
4492
  }
4405
4493
  .node-selection-handle.is-br {
4406
- right: -4px;
4407
- bottom: -4px;
4494
+ right: -9px;
4495
+ bottom: -9px;
4408
4496
  }
4409
4497
 
4410
4498
  /* Lasso rectangle overlay */
4411
4499
  .lasso-rect {
4412
- background: var(--c-accent-8);
4500
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
4413
4501
  border: 1px solid var(--c-accent);
4414
4502
  border-radius: 2px;
4415
4503
  z-index: 9998;
@@ -4451,7 +4539,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4451
4539
  border-radius: 4px;
4452
4540
  background: color-mix(in srgb, var(--c-bg) 72%, transparent);
4453
4541
  color: var(--c-annotation);
4454
- font-family: var(--font);
4542
+ font-family: var(--font-ui);
4455
4543
  font-weight: 700;
4456
4544
  line-height: 1.15;
4457
4545
  outline: none;
@@ -4465,13 +4553,13 @@ html.is-node-resizing .ext-app-preview-catcher {
4465
4553
  pointer-events: none;
4466
4554
  border: 2px dashed var(--c-accent);
4467
4555
  border-radius: 8px;
4468
- background: var(--c-accent-8);
4556
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
4469
4557
  animation: drop-zone-pulse 1.5s ease-in-out infinite;
4470
4558
  }
4471
4559
 
4472
4560
  @keyframes drop-zone-pulse {
4473
- 0%, 100% { background: var(--c-accent-8); }
4474
- 50% { background: var(--c-accent-12); }
4561
+ 0%, 100% { background: color-mix(in srgb, var(--c-accent) 8%, transparent); }
4562
+ 50% { background: color-mix(in srgb, var(--c-accent) 12%, transparent); }
4475
4563
  }
4476
4564
 
4477
4565
  .drop-zone-indicator {
@@ -4486,9 +4574,9 @@ html.is-node-resizing .ext-app-preview-catcher {
4486
4574
  padding: 20px 32px;
4487
4575
  background: var(--c-panel-glass);
4488
4576
  backdrop-filter: blur(16px);
4489
- border: 1px solid var(--c-accent-30);
4577
+ border: 1px solid color-mix(in srgb, var(--c-accent) 30%, transparent);
4490
4578
  border-radius: 12px;
4491
- box-shadow: 0 4px 24px var(--c-shadow), 0 0 24px var(--c-glow-accent);
4579
+ box-shadow: 0 4px 24px var(--c-shadow), 0 0 24px color-mix(in srgb, var(--c-accent) 15%, transparent);
4492
4580
  }
4493
4581
 
4494
4582
  .drop-zone-icon {
@@ -4500,7 +4588,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4500
4588
  display: flex;
4501
4589
  align-items: center;
4502
4590
  justify-content: center;
4503
- border: 2px dashed var(--c-accent-40);
4591
+ border: 2px dashed color-mix(in srgb, var(--c-accent) 40%, transparent);
4504
4592
  border-radius: 50%;
4505
4593
  }
4506
4594
 
@@ -4556,7 +4644,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4556
4644
  border-radius: 8px;
4557
4645
  background: var(--c-bg);
4558
4646
  color: var(--c-text);
4559
- font: 13px/1.4 var(--mono);
4647
+ font: 13px/1.4 var(--font-code);
4560
4648
  }
4561
4649
  .text-prompt-input:focus {
4562
4650
  outline: none;
@@ -4580,7 +4668,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4580
4668
  font-weight: 600;
4581
4669
  }
4582
4670
  .text-prompt-cancel:hover {
4583
- background: var(--c-accent-10);
4671
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
4584
4672
  border-color: var(--c-muted);
4585
4673
  }
4586
4674
  .text-prompt-cancel:focus-visible,
@@ -4701,181 +4789,51 @@ html.is-node-resizing .ext-app-preview-catcher {
4701
4789
  cursor: default;
4702
4790
  }
4703
4791
  .selection-bar-action.is-pin:hover {
4704
- background: color-mix(in srgb, var(--c-warn) 10%, transparent);
4705
- color: var(--c-warn);
4792
+ background: color-mix(in srgb, var(--c-pin) 10%, transparent);
4793
+ color: var(--c-pin);
4706
4794
  }
4707
4795
  .selection-bar-icon.is-danger:hover {
4708
4796
  background: color-mix(in srgb, var(--c-danger) 12%, transparent);
4709
4797
  color: var(--c-danger);
4710
4798
  }
4711
4799
 
4712
- /* ── Context-pinned nodes — amber glow ───────────────────────── */
4800
+ /* ── Node states (docs/design/Context.dc.html) ─────────────────
4801
+ In context: pin-blue border, tinted header, blue kind icon and the filled
4802
+ pin badge. Selection is a ring with a gap outside the border, so the pin
4803
+ styling survives it. */
4713
4804
  .canvas-node.context-pinned {
4714
- border-color: var(--c-warn-60);
4715
- box-shadow: 0 0 0 2px var(--c-warn), 0 0 8px var(--c-warn-30);
4805
+ border: 1.5px solid var(--c-pin);
4716
4806
  }
4717
4807
 
4718
- .canvas-node.context-pinned .node-type-badge {
4719
- background: var(--c-warn-15);
4720
- color: var(--c-warn);
4808
+ .canvas-node.context-pinned .node-titlebar {
4809
+ background: color-mix(in srgb, var(--c-pin) 12%, var(--c-panel));
4721
4810
  }
4722
4811
 
4723
- :root[data-theme="light"] .canvas-node.context-pinned {
4724
- border-color: #4BBCFF;
4725
- box-shadow: 0 0 0 2px #4BBCFF, 0 0 12px rgba(75, 188, 255, 0.28);
4726
- }
4727
-
4728
- :root[data-theme="light"] .canvas-node.context-pinned .node-type-badge {
4729
- background: rgba(75, 188, 255, 0.14);
4730
- color: #1588CE;
4731
- }
4732
-
4733
- /* ── Attention layer — human-facing semantic feedback ───────── */
4734
- .canvas-node.attention-focus-primary {
4735
- box-shadow:
4736
- 0 0 0 1px color-mix(in srgb, var(--c-warn) 72%, transparent),
4737
- 0 12px 34px color-mix(in srgb, var(--c-warn) 18%, transparent),
4738
- inset 0 0 0 1px color-mix(in srgb, var(--c-warn) 28%, transparent);
4739
- }
4740
-
4741
- .canvas-node.attention-focus-primary .node-titlebar {
4742
- background:
4743
- linear-gradient(90deg, color-mix(in srgb, var(--c-warn) 12%, transparent), transparent 68%),
4744
- var(--c-panel-soft);
4745
- }
4746
-
4747
- :root[data-theme="light"] .canvas-node.attention-focus-primary {
4748
- box-shadow:
4749
- 0 0 0 1px rgba(75, 188, 255, 0.72),
4750
- 0 12px 34px rgba(75, 188, 255, 0.2),
4751
- inset 0 0 0 1px rgba(75, 188, 255, 0.18);
4752
- }
4753
-
4754
- :root[data-theme="light"] .canvas-node.attention-focus-primary .node-titlebar {
4755
- background:
4756
- linear-gradient(90deg, rgba(75, 188, 255, 0.14), transparent 68%),
4757
- var(--c-panel-soft);
4758
- }
4759
-
4760
- .canvas-node.attention-focus-secondary {
4761
- box-shadow:
4762
- 0 0 0 1px color-mix(in srgb, var(--c-warn) 30%, transparent),
4763
- 0 8px 24px color-mix(in srgb, var(--c-warn) 10%, transparent);
4764
- }
4765
-
4766
- .canvas-node.attention-focus-secondary .node-type-badge {
4767
- background: color-mix(in srgb, var(--c-warn) 10%, transparent);
4768
- color: color-mix(in srgb, var(--c-warn) 88%, var(--c-text) 12%);
4769
- }
4770
-
4771
- :root[data-theme="light"] .canvas-node.attention-focus-secondary {
4772
- box-shadow:
4773
- 0 0 0 1px rgba(75, 188, 255, 0.32),
4774
- 0 8px 24px rgba(75, 188, 255, 0.12);
4775
- }
4776
-
4777
- :root[data-theme="light"] .canvas-node.attention-focus-secondary .node-type-badge {
4778
- background: rgba(75, 188, 255, 0.12);
4779
- color: #1588CE;
4812
+ .canvas-node.context-pinned .node-type-icon {
4813
+ color: var(--c-pin);
4780
4814
  }
4781
4815
 
4816
+ /* A short pulse on the nodes a canvas change touched (pin, connect, group).
4817
+ Accent, not a meaning colour: it says "this changed", nothing more. */
4782
4818
  .canvas-node.attention-pulse {
4783
4819
  animation: attention-node-pulse 0.9s ease;
4784
4820
  }
4785
4821
 
4786
- :root[data-theme="light"] .canvas-node.attention-pulse {
4787
- animation-name: attention-node-pulse-light;
4788
- }
4789
-
4790
4822
  @keyframes attention-node-pulse {
4791
4823
  0% {
4792
4824
  transform: translateZ(0) scale(1);
4793
- box-shadow:
4794
- 0 0 0 0 color-mix(in srgb, var(--c-warn) 0%, transparent),
4795
- 0 4px 24px var(--c-shadow);
4796
4825
  }
4797
4826
  38% {
4798
4827
  transform: translateZ(0) scale(1.012);
4799
4828
  box-shadow:
4800
- 0 0 0 3px color-mix(in srgb, var(--c-warn) 35%, transparent),
4801
- 0 16px 34px color-mix(in srgb, var(--c-warn) 16%, transparent);
4829
+ 0 0 0 3px color-mix(in srgb, var(--c-accent) 35%, transparent),
4830
+ var(--e-1);
4802
4831
  }
4803
4832
  100% {
4804
4833
  transform: translateZ(0) scale(1);
4805
4834
  }
4806
4835
  }
4807
4836
 
4808
- @keyframes attention-node-pulse-light {
4809
- 0% {
4810
- transform: translateZ(0) scale(1);
4811
- box-shadow:
4812
- 0 0 0 0 rgba(75, 188, 255, 0),
4813
- 0 4px 24px var(--c-shadow);
4814
- }
4815
- 38% {
4816
- transform: translateZ(0) scale(1.012);
4817
- box-shadow:
4818
- 0 0 0 3px rgba(75, 188, 255, 0.32),
4819
- 0 16px 34px rgba(75, 188, 255, 0.18);
4820
- }
4821
- 100% {
4822
- transform: translateZ(0) scale(1);
4823
- }
4824
- }
4825
-
4826
- .attention-field-layer {
4827
- position: absolute;
4828
- inset: 0;
4829
- pointer-events: none;
4830
- z-index: 0;
4831
- }
4832
-
4833
- .attention-field-region,
4834
- .attention-field-node {
4835
- position: absolute;
4836
- pointer-events: none;
4837
- }
4838
-
4839
- .attention-field-region {
4840
- background:
4841
- radial-gradient(circle at 25% 30%, color-mix(in srgb, var(--c-warn) 16%, transparent), transparent 62%),
4842
- linear-gradient(135deg, color-mix(in srgb, var(--c-warn) 10%, transparent), color-mix(in srgb, var(--c-accent) 5%, transparent));
4843
- border: 1px solid color-mix(in srgb, var(--c-warn) 22%, transparent);
4844
- opacity: 0.8;
4845
- filter: blur(18px);
4846
- }
4847
-
4848
- .attention-field-node.attention-field-primary {
4849
- border: 1px solid color-mix(in srgb, var(--c-warn) 38%, transparent);
4850
- background: radial-gradient(circle at 50% 50%, color-mix(in srgb, var(--c-warn) 16%, transparent), transparent 72%);
4851
- box-shadow: 0 0 38px color-mix(in srgb, var(--c-warn) 18%, transparent);
4852
- }
4853
-
4854
- .attention-field-node.attention-field-secondary {
4855
- border: 1px solid color-mix(in srgb, var(--c-warn) 18%, transparent);
4856
- background: radial-gradient(circle at 50% 50%, color-mix(in srgb, var(--c-warn) 9%, transparent), transparent 74%);
4857
- box-shadow: 0 0 24px color-mix(in srgb, var(--c-warn) 10%, transparent);
4858
- }
4859
-
4860
- :root[data-theme="light"] .attention-field-region {
4861
- background:
4862
- radial-gradient(circle at 25% 30%, rgba(75, 188, 255, 0.16), transparent 62%),
4863
- linear-gradient(135deg, rgba(75, 188, 255, 0.1), rgba(75, 188, 255, 0.05));
4864
- border: 1px solid rgba(75, 188, 255, 0.22);
4865
- }
4866
-
4867
- :root[data-theme="light"] .attention-field-node.attention-field-primary {
4868
- border: 1px solid rgba(75, 188, 255, 0.4);
4869
- background: radial-gradient(circle at 50% 50%, rgba(75, 188, 255, 0.18), transparent 72%);
4870
- box-shadow: 0 0 38px rgba(75, 188, 255, 0.2);
4871
- }
4872
-
4873
- :root[data-theme="light"] .attention-field-node.attention-field-secondary {
4874
- border: 1px solid rgba(75, 188, 255, 0.18);
4875
- background: radial-gradient(circle at 50% 50%, rgba(75, 188, 255, 0.1), transparent 74%);
4876
- box-shadow: 0 0 24px rgba(75, 188, 255, 0.12);
4877
- }
4878
-
4879
4837
  /* Anchored to the canvas region (not the window): since the rail-chrome
4880
4838
  restructure the session panel owns the window's right edge. */
4881
4839
  .attention-toast {
@@ -4889,7 +4847,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4889
4847
  padding: 6px 12px 6px 10px;
4890
4848
  background: color-mix(in srgb, var(--c-panel-glass) 96%, transparent);
4891
4849
  backdrop-filter: blur(14px);
4892
- border: 1px solid color-mix(in srgb, var(--c-line) 76%, var(--c-warn) 24%);
4850
+ border: 1px solid color-mix(in srgb, var(--c-line) 76%, var(--c-accent) 24%);
4893
4851
  border-radius: 12px;
4894
4852
  box-shadow: 0 8px 22px var(--c-shadow);
4895
4853
  color: var(--c-text);
@@ -4963,9 +4921,9 @@ html.is-node-resizing .ext-app-preview-catcher {
4963
4921
  padding: 14px;
4964
4922
  background: color-mix(in srgb, var(--c-panel-glass) 96%, transparent);
4965
4923
  backdrop-filter: blur(16px);
4966
- border: 1px solid color-mix(in srgb, var(--c-line) 82%, var(--c-warn) 18%);
4924
+ border: 1px solid color-mix(in srgb, var(--c-line) 82%, var(--c-accent) 18%);
4967
4925
  border-radius: 18px;
4968
- box-shadow: 0 14px 36px var(--c-shadow), 0 0 0 1px color-mix(in srgb, var(--c-warn) 8%, transparent);
4926
+ box-shadow: 0 14px 36px var(--c-shadow), 0 0 0 1px color-mix(in srgb, var(--c-accent) 8%, transparent);
4969
4927
  z-index: 9990;
4970
4928
  }
4971
4929
 
@@ -4979,7 +4937,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4979
4937
  padding: 8px 12px 8px 14px;
4980
4938
  background: color-mix(in srgb, var(--c-panel-glass) 96%, transparent);
4981
4939
  backdrop-filter: blur(16px);
4982
- border: 1px solid color-mix(in srgb, var(--c-line) 82%, var(--c-warn) 18%);
4940
+ border: 1px solid color-mix(in srgb, var(--c-line) 82%, var(--c-accent) 18%);
4983
4941
  border-right: 0;
4984
4942
  border-radius: 14px 0 0 14px;
4985
4943
  box-shadow: 0 12px 36px var(--c-shadow);
@@ -5016,7 +4974,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5016
4974
  align-items: center;
5017
4975
  justify-content: center;
5018
4976
  border-radius: 9px;
5019
- background: var(--c-warn);
4977
+ background: var(--c-accent);
5020
4978
  color: var(--c-contrast-fg);
5021
4979
  font-size: 10px;
5022
4980
  font-weight: 700;
@@ -5115,16 +5073,16 @@ html.is-node-resizing .ext-app-preview-catcher {
5115
5073
  }
5116
5074
 
5117
5075
  .attention-tone-context {
5118
- border-color: color-mix(in srgb, var(--c-warn) 26%, transparent);
5076
+ border-color: color-mix(in srgb, var(--c-pin) 26%, transparent);
5119
5077
  }
5120
5078
 
5121
5079
  .attention-toast.attention-tone-context {
5122
- color: color-mix(in srgb, var(--c-warn) 82%, var(--c-text) 18%);
5080
+ color: color-mix(in srgb, var(--c-pin) 82%, var(--c-text) 18%);
5123
5081
  }
5124
5082
 
5125
5083
  .attention-tone-context .attention-history-kind,
5126
5084
  .attention-tone-context .attention-toast-title {
5127
- color: color-mix(in srgb, var(--c-warn) 82%, var(--c-text) 18%);
5085
+ color: color-mix(in srgb, var(--c-pin) 82%, var(--c-text) 18%);
5128
5086
  }
5129
5087
 
5130
5088
  .attention-tone-relationship {
@@ -5141,33 +5099,33 @@ html.is-node-resizing .ext-app-preview-catcher {
5141
5099
  }
5142
5100
 
5143
5101
  .attention-tone-group {
5144
- border-color: color-mix(in srgb, var(--c-purple) 24%, transparent);
5102
+ border-color: color-mix(in srgb, var(--c-accent) 24%, transparent);
5145
5103
  }
5146
5104
 
5147
5105
  .attention-toast.attention-tone-group {
5148
- color: color-mix(in srgb, var(--c-purple) 78%, var(--c-text) 22%);
5106
+ color: color-mix(in srgb, var(--c-accent) 78%, var(--c-text) 22%);
5149
5107
  }
5150
5108
 
5151
5109
  .attention-tone-group .attention-history-kind,
5152
5110
  .attention-tone-group .attention-toast-title {
5153
- color: color-mix(in srgb, var(--c-purple) 78%, var(--c-text) 22%);
5111
+ color: color-mix(in srgb, var(--c-accent) 78%, var(--c-text) 22%);
5154
5112
  }
5155
5113
 
5156
5114
  .attention-tone-cluster,
5157
5115
  .attention-tone-neighborhood {
5158
- border-color: color-mix(in srgb, var(--c-warn-alt) 22%, transparent);
5116
+ border-color: color-mix(in srgb, var(--c-accent) 22%, transparent);
5159
5117
  }
5160
5118
 
5161
5119
  .attention-toast.attention-tone-cluster,
5162
5120
  .attention-toast.attention-tone-neighborhood {
5163
- color: color-mix(in srgb, var(--c-warn-alt) 78%, var(--c-text) 22%);
5121
+ color: color-mix(in srgb, var(--c-accent) 78%, var(--c-text) 22%);
5164
5122
  }
5165
5123
 
5166
5124
  .attention-tone-cluster .attention-history-kind,
5167
5125
  .attention-tone-cluster .attention-toast-title,
5168
5126
  .attention-tone-neighborhood .attention-history-kind,
5169
5127
  .attention-tone-neighborhood .attention-toast-title {
5170
- color: color-mix(in srgb, var(--c-warn-alt) 78%, var(--c-text) 22%);
5128
+ color: color-mix(in srgb, var(--c-accent) 78%, var(--c-text) 22%);
5171
5129
  }
5172
5130
 
5173
5131
  .attention-tone-remove {
@@ -5214,7 +5172,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5214
5172
  background: color-mix(in srgb, var(--group-color, var(--c-accent)) 9%, transparent);
5215
5173
  }
5216
5174
  .canvas-node.group-node.is-drop-source {
5217
- border-color: color-mix(in srgb, var(--c-warn) 60%, transparent);
5175
+ border-color: color-mix(in srgb, var(--c-accent) 60%, transparent);
5218
5176
  }
5219
5177
  .canvas-node.group-node .node-body {
5220
5178
  background: none;
@@ -5271,7 +5229,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5271
5229
  text-overflow: ellipsis;
5272
5230
  }
5273
5231
  .group-count {
5274
- font: 9px var(--mono);
5232
+ font: 9px var(--font-code);
5275
5233
  color: var(--c-dim);
5276
5234
  }
5277
5235
  .group-title-input {
@@ -5407,10 +5365,11 @@ html.is-node-resizing .ext-app-preview-catcher {
5407
5365
  width: 6px;
5408
5366
  height: 6px;
5409
5367
  border-radius: 2px;
5368
+ background: var(--c-muted);
5410
5369
  opacity: 0.8;
5411
5370
  }
5412
5371
  .group-chip-count {
5413
- font: 9px var(--mono);
5372
+ font: 9px var(--font-code);
5414
5373
  color: var(--c-dim);
5415
5374
  }
5416
5375
 
@@ -5434,7 +5393,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5434
5393
  color: var(--c-accent);
5435
5394
  }
5436
5395
  .drop-pill-hint {
5437
- font: 9px var(--mono);
5396
+ font: 9px var(--font-code);
5438
5397
  color: var(--c-dim);
5439
5398
  }
5440
5399
 
@@ -5450,9 +5409,9 @@ html.is-node-resizing .ext-app-preview-catcher {
5450
5409
  padding: 8px 14px;
5451
5410
  background: var(--c-panel-glass);
5452
5411
  backdrop-filter: blur(12px);
5453
- border: 1px solid var(--c-warn);
5412
+ border: 1px solid var(--c-pin);
5454
5413
  border-radius: var(--radius);
5455
- box-shadow: 0 8px 32px var(--c-shadow), 0 0 0 1px var(--c-warn-15);
5414
+ box-shadow: 0 8px 32px var(--c-shadow), 0 0 0 1px color-mix(in srgb, var(--c-pin) 15%, transparent);
5456
5415
  z-index: 64;
5457
5416
  white-space: nowrap;
5458
5417
  }
@@ -5460,35 +5419,35 @@ html.is-node-resizing .ext-app-preview-catcher {
5460
5419
  .context-pin-bar-count {
5461
5420
  font-size: 12px;
5462
5421
  font-weight: 600;
5463
- color: var(--c-warn);
5422
+ color: var(--c-pin);
5464
5423
  }
5465
5424
 
5466
5425
  .context-pin-bar-btn {
5467
5426
  padding: 5px 12px;
5468
5427
  font-size: 12px;
5469
5428
  font-weight: 600;
5470
- background: var(--c-warn-10);
5471
- border: 1px solid var(--c-warn-30);
5429
+ background: color-mix(in srgb, var(--c-pin) 10%, transparent);
5430
+ border: 1px solid color-mix(in srgb, var(--c-pin) 30%, transparent);
5472
5431
  border-radius: var(--radius-sm);
5473
- color: var(--c-warn);
5432
+ color: var(--c-pin);
5474
5433
  cursor: pointer;
5475
- font-family: var(--font);
5434
+ font-family: var(--font-ui);
5476
5435
  }
5477
5436
 
5478
5437
  .context-pin-bar-btn:hover {
5479
- background: var(--c-warn-20);
5480
- border-color: var(--c-warn);
5438
+ background: color-mix(in srgb, var(--c-pin) 20%, transparent);
5439
+ border-color: var(--c-pin);
5481
5440
  }
5482
5441
 
5483
5442
  .context-pin-bar-ask {
5484
- background: var(--c-warn);
5485
- color: var(--c-contrast-fg);
5486
- border-color: var(--c-warn);
5443
+ background: var(--c-pin);
5444
+ color: var(--c-on-pin);
5445
+ border-color: var(--c-pin);
5487
5446
  }
5488
5447
 
5489
5448
  .context-pin-bar-ask:hover {
5490
- background: var(--c-warn-hover);
5491
- border-color: var(--c-warn-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));
5492
5451
  }
5493
5452
 
5494
5453
  .context-pin-bar-clear {
@@ -5530,7 +5489,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5530
5489
  overflow: hidden;
5531
5490
  }
5532
5491
  .expanded-overlay-panel.is-pinned {
5533
- border-color: color-mix(in srgb, var(--c-warn) 45%, var(--c-line));
5492
+ border-color: color-mix(in srgb, var(--c-pin) 45%, var(--c-line));
5534
5493
  }
5535
5494
  .expanded-header {
5536
5495
  display: flex;
@@ -5573,7 +5532,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5573
5532
  cursor: pointer;
5574
5533
  }
5575
5534
  .expanded-pin.is-on {
5576
- color: var(--c-warn);
5535
+ color: var(--c-pin);
5577
5536
  }
5578
5537
  .expanded-spacer {
5579
5538
  flex: 1;
@@ -5607,12 +5566,12 @@ html.is-node-resizing .ext-app-preview-catcher {
5607
5566
  padding: 8px 16px;
5608
5567
  border-top: 1px solid var(--c-line);
5609
5568
  background: color-mix(in srgb, var(--c-bg) 50%, transparent);
5610
- font: 9.5px var(--mono);
5569
+ font: 9.5px var(--font-code);
5611
5570
  color: var(--c-dim);
5612
5571
  flex-shrink: 0;
5613
5572
  }
5614
5573
  .expanded-footer-hint.is-saving {
5615
- color: var(--c-warn);
5574
+ color: var(--c-muted);
5616
5575
  }
5617
5576
  .expanded-actions {
5618
5577
  display: flex;
@@ -5629,7 +5588,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5629
5588
  border-radius: var(--radius-sm);
5630
5589
  color: var(--c-text-soft);
5631
5590
  cursor: pointer;
5632
- font-family: var(--font);
5591
+ font-family: var(--font-ui);
5633
5592
  }
5634
5593
 
5635
5594
  .expanded-action-btn:hover {
@@ -5639,25 +5598,25 @@ html.is-node-resizing .ext-app-preview-catcher {
5639
5598
  }
5640
5599
 
5641
5600
  .expanded-action-btn.expanded-action-primary {
5642
- background: var(--c-accent-12);
5643
- border-color: var(--c-accent-30);
5601
+ background: color-mix(in srgb, var(--c-accent) 12%, transparent);
5602
+ border-color: color-mix(in srgb, var(--c-accent) 30%, transparent);
5644
5603
  color: var(--c-accent);
5645
5604
  }
5646
5605
 
5647
5606
  .expanded-action-btn.expanded-action-primary:hover {
5648
- background: var(--c-accent-25);
5607
+ background: color-mix(in srgb, var(--c-accent) 25%, transparent);
5649
5608
  border-color: var(--c-accent);
5650
5609
  color: var(--c-text);
5651
5610
  }
5652
5611
 
5653
5612
  .expanded-action-btn.expanded-action-active {
5654
- background: var(--c-warn-12);
5655
- border-color: var(--c-warn-30);
5613
+ background: color-mix(in srgb, var(--c-warn) 12%, transparent);
5614
+ border-color: color-mix(in srgb, var(--c-warn) 30%, transparent);
5656
5615
  color: var(--c-warn);
5657
5616
  }
5658
5617
 
5659
5618
  .expanded-action-btn.expanded-action-active:hover {
5660
- background: var(--c-warn-20);
5619
+ background: color-mix(in srgb, var(--c-warn) 20%, transparent);
5661
5620
  border-color: var(--c-warn);
5662
5621
  }
5663
5622
 
@@ -5674,7 +5633,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5674
5633
  display: flex;
5675
5634
  padding: 0;
5676
5635
  background:
5677
- radial-gradient(circle at top left, var(--c-accent-25), transparent 36rem),
5636
+ radial-gradient(circle at top left, color-mix(in srgb, var(--c-accent) 25%, transparent), transparent 36rem),
5678
5637
  rgba(3, 7, 18, 0.96);
5679
5638
  color: var(--c-text);
5680
5639
  }
@@ -5691,7 +5650,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5691
5650
  box-shadow: 0 18px 50px var(--c-shadow-heavy);
5692
5651
  color: var(--c-text-soft);
5693
5652
  cursor: pointer;
5694
- font: 600 12px/1 var(--font);
5653
+ font: 600 12px/1 var(--font-ui);
5695
5654
  opacity: 0;
5696
5655
  pointer-events: none;
5697
5656
  transform: translateY(-6px);
@@ -5726,24 +5685,119 @@ html.is-node-resizing .ext-app-preview-catcher {
5726
5685
  border-radius: 0 !important;
5727
5686
  }
5728
5687
 
5729
- /* ── Context pin button on node title bar ────────────────────── */
5730
- .node-controls .ctx-pin-btn {
5688
+ /* ── Context pin on the node header (docs/design/Chrome.dc.html) ──
5689
+ Always visible: an outline pin in a circle when the node is not in
5690
+ context, the filled pin-blue badge when it is. */
5691
+ .canvas-node .node-controls .ctx-pin-btn:hover {
5692
+ background: none;
5693
+ }
5694
+
5695
+ /* ── What agents did with this node (docs/design/AgentContext.dc.html) ──
5696
+ One chip after the title: glyph + word, hover explains. Violet = the agent
5697
+ did it, muted = not yet, amber = needs a look. */
5698
+ .node-context-mark {
5699
+ display: inline-flex;
5700
+ align-items: center;
5701
+ gap: calc(4px * var(--node-chrome-scale, 1));
5702
+ height: calc(20px * var(--node-chrome-scale, 1));
5703
+ padding: 0 calc(7px * var(--node-chrome-scale, 1));
5704
+ border-radius: var(--r-pill);
5705
+ font-size: calc(var(--fs-meta) * var(--node-chrome-scale, 1));
5706
+ font-weight: 500;
5707
+ white-space: nowrap;
5708
+ flex-shrink: 0;
5709
+ }
5710
+ .node-context-mark svg {
5711
+ width: calc(12px * var(--node-chrome-scale, 1));
5712
+ height: calc(12px * var(--node-chrome-scale, 1));
5713
+ fill: none;
5714
+ stroke: currentColor;
5715
+ stroke-width: 2;
5716
+ stroke-linecap: round;
5717
+ stroke-linejoin: round;
5718
+ }
5719
+ .node-context-mark.is-agent {
5720
+ color: var(--c-agent);
5721
+ background: color-mix(in srgb, var(--c-agent) 16%, transparent);
5722
+ }
5723
+ .node-context-mark.is-muted {
5731
5724
  color: var(--c-muted);
5732
- opacity: 0;
5733
- transition: opacity 0.15s;
5725
+ background: var(--c-panel-soft);
5726
+ }
5727
+ .node-context-mark.is-warn {
5728
+ color: var(--c-warn);
5729
+ background: color-mix(in srgb, var(--c-warn) 14%, transparent);
5734
5730
  }
5735
5731
 
5736
- .canvas-node:hover .ctx-pin-btn {
5737
- opacity: 0.7;
5732
+ /* Near a pin (docs/design/NearPin.dc.html): dotted, weaker than in context. */
5733
+ .node-near-mark {
5734
+ display: inline-flex;
5735
+ align-items: center;
5736
+ gap: calc(4px * var(--node-chrome-scale, 1));
5737
+ height: calc(18px * var(--node-chrome-scale, 1));
5738
+ padding: 0 calc(7px * var(--node-chrome-scale, 1));
5739
+ border: 1px dotted var(--c-pin);
5740
+ border-radius: var(--r-pill);
5741
+ color: color-mix(in srgb, var(--c-pin) 75%, var(--c-text));
5742
+ font-size: calc(var(--fs-meta) * var(--node-chrome-scale, 1));
5743
+ font-weight: 500;
5744
+ white-space: nowrap;
5745
+ flex-shrink: 0;
5746
+ }
5747
+ .node-near-mark svg {
5748
+ width: calc(12px * var(--node-chrome-scale, 1));
5749
+ height: calc(12px * var(--node-chrome-scale, 1));
5750
+ }
5751
+ .node-near-ring {
5752
+ fill: none;
5753
+ stroke: currentColor;
5754
+ stroke-width: 2;
5755
+ stroke-dasharray: 2.2 2.6;
5756
+ }
5757
+ .node-near-dot {
5758
+ fill: currentColor;
5738
5759
  }
5739
5760
 
5740
- .ctx-pin-btn.ctx-pin-active {
5741
- color: var(--c-warn);
5742
- opacity: 1 !important;
5761
+ /* Pinned by an agent: a violet dot on the pin badge. */
5762
+ .ctx-pin-mark {
5763
+ position: relative;
5764
+ }
5765
+ .ctx-pin-agent-dot {
5766
+ position: absolute;
5767
+ right: -3px;
5768
+ bottom: -3px;
5769
+ width: 9px;
5770
+ height: 9px;
5771
+ box-sizing: border-box;
5772
+ border-radius: var(--r-pill);
5773
+ background: var(--c-agent);
5774
+ border: 2px solid var(--c-panel);
5775
+ }
5776
+
5777
+ /* The drawn 18 px circle sits inside the standard control hit target. */
5778
+ .ctx-pin-mark {
5779
+ width: calc(18px * var(--node-chrome-scale, 1));
5780
+ height: calc(18px * var(--node-chrome-scale, 1));
5781
+ box-sizing: border-box;
5782
+ border: 1.5px solid var(--c-muted);
5783
+ border-radius: var(--r-pill);
5784
+ display: flex;
5785
+ align-items: center;
5786
+ justify-content: center;
5787
+ font-size: calc(13px * var(--node-chrome-scale, 1));
5788
+ color: var(--c-text-soft);
5789
+ }
5790
+
5791
+ .ctx-pin-btn:hover .ctx-pin-mark {
5792
+ border-color: var(--c-pin);
5793
+ background: color-mix(in srgb, var(--c-pin) 12%, transparent);
5794
+ color: var(--c-pin);
5743
5795
  }
5744
5796
 
5745
- :root[data-theme="light"] .ctx-pin-btn.ctx-pin-active {
5746
- color: #4BBCFF;
5797
+ .ctx-pin-btn.ctx-pin-active .ctx-pin-mark {
5798
+ border-color: var(--c-pin);
5799
+ background: var(--c-pin);
5800
+ color: var(--c-on-pin);
5747
5801
  }
5748
5802
 
5749
5803
  /* ── Context pin HUD — top-right pill ────────────────────────── */
@@ -5754,7 +5808,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5754
5808
  padding: 5px 10px;
5755
5809
  background: var(--c-panel-glass);
5756
5810
  backdrop-filter: blur(12px);
5757
- border: 1px solid var(--c-warn-30);
5811
+ border: 1px solid color-mix(in srgb, var(--c-pin) 30%, transparent);
5758
5812
  border-radius: var(--radius);
5759
5813
  white-space: nowrap;
5760
5814
  }
@@ -5762,7 +5816,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5762
5816
  .context-pin-hud-label {
5763
5817
  font-size: 11px;
5764
5818
  font-weight: 600;
5765
- color: var(--c-warn);
5819
+ color: var(--c-pin);
5766
5820
  }
5767
5821
 
5768
5822
  .context-pin-hud-clear {
@@ -5786,7 +5840,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5786
5840
 
5787
5841
  .thread-turn-assistant {
5788
5842
  padding: 6px 0;
5789
- border-left: 2px solid var(--c-ok-20);
5843
+ border-left: 2px solid color-mix(in srgb, var(--c-ok) 20%, transparent);
5790
5844
  padding-left: 10px;
5791
5845
  margin-left: 2px;
5792
5846
  overflow: hidden;
@@ -5948,7 +6002,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5948
6002
  border-radius: 7px;
5949
6003
  background: var(--c-panel);
5950
6004
  color: var(--c-text);
5951
- font: 11.5px var(--font);
6005
+ font: 11.5px var(--font-ui);
5952
6006
  }
5953
6007
  .snapshot-name-input:focus {
5954
6008
  outline: 2px solid var(--c-accent);
@@ -6006,8 +6060,8 @@ html.is-node-resizing .ext-app-preview-catcher {
6006
6060
  border-radius: 10px;
6007
6061
  }
6008
6062
  .snapshot-item.is-session {
6009
- border-color: color-mix(in srgb, var(--c-purple) 30%, transparent);
6010
- background: color-mix(in srgb, var(--c-purple) 5%, transparent);
6063
+ border-color: color-mix(in srgb, var(--c-agent) 30%, transparent);
6064
+ background: color-mix(in srgb, var(--c-agent) 5%, transparent);
6011
6065
  }
6012
6066
  .snapshot-item-head {
6013
6067
  display: flex;
@@ -6018,7 +6072,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6018
6072
  width: 7px;
6019
6073
  height: 7px;
6020
6074
  border-radius: 50%;
6021
- background: var(--c-purple);
6075
+ background: var(--c-agent);
6022
6076
  flex-shrink: 0;
6023
6077
  }
6024
6078
  .snapshot-item-glyph {
@@ -6040,7 +6094,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6040
6094
  color: var(--c-text);
6041
6095
  }
6042
6096
  .snapshot-item-time {
6043
- font: 9px var(--mono);
6097
+ font: 9px var(--font-code);
6044
6098
  color: var(--c-dim);
6045
6099
  }
6046
6100
  .snapshot-item-meta {
@@ -6155,7 +6209,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6155
6209
  outline: none;
6156
6210
  background: none;
6157
6211
  color: var(--c-text);
6158
- font: 13px var(--font);
6212
+ font: 13px var(--font-ui);
6159
6213
  }
6160
6214
  .command-palette-input::placeholder {
6161
6215
  color: var(--c-dim);
@@ -6165,7 +6219,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6165
6219
  padding: 1px 6px;
6166
6220
  border: 1px solid var(--c-line);
6167
6221
  border-radius: 4px;
6168
- font: 9.5px var(--mono);
6222
+ font: 9.5px var(--font-code);
6169
6223
  color: var(--c-muted);
6170
6224
  }
6171
6225
  .command-palette-esc {
@@ -6223,7 +6277,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6223
6277
  color: var(--c-accent);
6224
6278
  }
6225
6279
  .command-palette-icon.tone-purple {
6226
- color: var(--c-purple);
6280
+ color: var(--c-agent);
6227
6281
  }
6228
6282
  .command-palette-icon.tone-muted {
6229
6283
  color: var(--c-muted);
@@ -6251,7 +6305,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6251
6305
  padding: 8px 14px;
6252
6306
  border-top: 1px solid var(--c-line);
6253
6307
  background: color-mix(in srgb, var(--c-bg) 50%, transparent);
6254
- font: 9.5px var(--mono);
6308
+ font: 9.5px var(--font-code);
6255
6309
  color: var(--c-dim);
6256
6310
  }
6257
6311
  .command-palette-hint-spacer {
@@ -6308,7 +6362,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6308
6362
  border: 1px solid var(--c-line);
6309
6363
  border-radius: 3px;
6310
6364
  padding: 0 4px;
6311
- font-family: var(--font);
6365
+ font-family: var(--font-ui);
6312
6366
  font-size: 9px;
6313
6367
  line-height: 1.6;
6314
6368
  margin: 0 2px;
@@ -6349,7 +6403,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6349
6403
  border: 1px solid var(--c-line);
6350
6404
  border-radius: 4px;
6351
6405
  padding: 2px 7px;
6352
- font-family: var(--mono);
6406
+ font-family: var(--font-code);
6353
6407
  font-size: 11px;
6354
6408
  color: var(--c-text);
6355
6409
  white-space: nowrap;
@@ -6431,7 +6485,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6431
6485
  border-color: color-mix(in srgb, var(--c-accent) 40%, transparent);
6432
6486
  }
6433
6487
  .empty-state-action.is-agent:hover {
6434
- border-color: color-mix(in srgb, var(--c-purple) 45%, transparent);
6488
+ border-color: color-mix(in srgb, var(--c-agent) 45%, transparent);
6435
6489
  }
6436
6490
  .empty-state-action .tone-accent {
6437
6491
  color: var(--c-accent);
@@ -6443,7 +6497,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6443
6497
  color: var(--c-ok);
6444
6498
  }
6445
6499
  .empty-state-action .tone-purple {
6446
- color: var(--c-purple);
6500
+ color: var(--c-agent);
6447
6501
  }
6448
6502
  .empty-state-action-label {
6449
6503
  flex: 1;
@@ -6454,7 +6508,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6454
6508
  padding: 1px 6px;
6455
6509
  border: 1px solid var(--c-line);
6456
6510
  border-radius: 4px;
6457
- font: 9.5px var(--mono);
6511
+ font: 9.5px var(--font-code);
6458
6512
  color: var(--c-dim);
6459
6513
  }
6460
6514
  .empty-state-action-hint {
@@ -6465,7 +6519,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6465
6519
  background: none;
6466
6520
  border: none;
6467
6521
  padding: 0;
6468
- font: 10.5px var(--mono);
6522
+ font: 10.5px var(--font-code);
6469
6523
  color: var(--c-dim);
6470
6524
  cursor: pointer;
6471
6525
  }
@@ -6497,8 +6551,6 @@ html.is-node-resizing .ext-app-preview-catcher {
6497
6551
  animation: none !important;
6498
6552
  }
6499
6553
 
6500
- .attention-field-region,
6501
- .attention-field-node,
6502
6554
  .canvas-node {
6503
6555
  transition: none !important;
6504
6556
  }
@@ -6599,7 +6651,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6599
6651
  }
6600
6652
 
6601
6653
  .image-node-error-path {
6602
- font-family: var(--mono);
6654
+ font-family: var(--font-code);
6603
6655
  font-size: 10px;
6604
6656
  color: var(--c-muted);
6605
6657
  word-break: break-all;
@@ -6708,8 +6760,8 @@ html.is-node-resizing .ext-app-preview-catcher {
6708
6760
  .intent-ghost-box {
6709
6761
  border: 1.5px dashed var(--c-accent);
6710
6762
  border-radius: 10px;
6711
- background: var(--c-accent-10);
6712
- box-shadow: 0 0 0 1px var(--c-accent-10), 0 6px 22px var(--c-accent-10);
6763
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
6764
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--c-accent) 10%, transparent), 0 6px 22px color-mix(in srgb, var(--c-accent) 10%, transparent);
6713
6765
  animation: intent-breathe 2.1s ease-in-out infinite;
6714
6766
  overflow: visible;
6715
6767
  }
@@ -6738,8 +6790,8 @@ html.is-node-resizing .ext-app-preview-catcher {
6738
6790
  }
6739
6791
 
6740
6792
  @keyframes intent-breathe {
6741
- 0%, 100% { box-shadow: 0 0 0 1px var(--c-accent-10), 0 6px 22px var(--c-accent-10); }
6742
- 50% { box-shadow: 0 0 0 1px var(--c-accent-25), 0 8px 30px var(--c-accent-25); }
6793
+ 0%, 100% { box-shadow: 0 0 0 1px color-mix(in srgb, var(--c-accent) 10%, transparent), 0 6px 22px color-mix(in srgb, var(--c-accent) 10%, transparent); }
6794
+ 50% { box-shadow: 0 0 0 1px color-mix(in srgb, var(--c-accent) 25%, transparent), 0 8px 30px color-mix(in srgb, var(--c-accent) 25%, transparent); }
6743
6795
  }
6744
6796
 
6745
6797
  /* remove — a red crosshatch tombstone over the target */
@@ -6760,7 +6812,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6760
6812
  .intent-ghost-edit {
6761
6813
  border: 1.5px dashed var(--c-accent);
6762
6814
  border-radius: 10px;
6763
- background: var(--c-accent-10);
6815
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
6764
6816
  overflow: visible;
6765
6817
  }
6766
6818
 
@@ -6808,7 +6860,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6808
6860
  border-radius: 999px;
6809
6861
  background: color-mix(in srgb, var(--c-panel-glass) 96%, transparent);
6810
6862
  backdrop-filter: blur(10px);
6811
- border: 1px solid var(--c-accent-25);
6863
+ border: 1px solid color-mix(in srgb, var(--c-accent) 25%, transparent);
6812
6864
  box-shadow: 0 4px 14px var(--c-shadow);
6813
6865
  color: var(--c-text);
6814
6866
  font-size: 12px;
@@ -6898,7 +6950,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6898
6950
  }
6899
6951
 
6900
6952
  .intent-edge.type-flow { stroke: var(--c-accent); }
6901
- .intent-edge.type-depends-on { stroke: var(--c-warn); }
6953
+ .intent-edge.type-depends-on { stroke: var(--c-rel-informs); }
6902
6954
  .intent-edge.type-relation { stroke: var(--c-muted); }
6903
6955
  .intent-edge.type-references { stroke: var(--c-dim); }
6904
6956
 
@@ -7037,8 +7089,8 @@ html.is-node-dragging .intent-line-layer {
7037
7089
  .board-switcher-menu .toolbar-menu-item { padding: 10px; gap: 12px; }
7038
7090
  .board-switcher-menu .toolbar-menu-item:hover,
7039
7091
  .board-switcher-menu .toolbar-menu-item:focus-visible {
7040
- background: var(--c-accent-8);
7041
- border-color: var(--c-accent-25);
7092
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
7093
+ border-color: color-mix(in srgb, var(--c-accent) 25%, transparent);
7042
7094
  outline: none;
7043
7095
  }
7044
7096
  .board-switcher-icon { display: flex; align-items: center; justify-content: center; width: 20px; flex-shrink: 0; color: var(--c-accent); font-size: 22px; }
@@ -7150,7 +7202,7 @@ html.is-node-dragging .intent-line-layer {
7150
7202
  white-space: nowrap;
7151
7203
  }
7152
7204
  .home-board-meta {
7153
- font: 11px var(--mono);
7205
+ font: 11px var(--font-code);
7154
7206
  color: var(--c-text-soft);
7155
7207
  }
7156
7208
  .home-board-confirm-text {
@@ -7283,7 +7335,7 @@ html.is-node-dragging .intent-line-layer {
7283
7335
  }
7284
7336
  .home-section-folder { color: var(--c-dim); }
7285
7337
  .home-section-count {
7286
- font: 11px var(--mono);
7338
+ font: 11px var(--font-code);
7287
7339
  text-transform: none;
7288
7340
  color: var(--c-dim);
7289
7341
  margin-left: auto;
@@ -7348,7 +7400,7 @@ html.is-node-dragging .intent-line-layer {
7348
7400
  .board-copy-card span { display: flex; flex-direction: column; min-width: 0; }
7349
7401
  .board-copy-card strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
7350
7402
  .board-copy-card small,
7351
- .board-link-results small { color: var(--c-text-soft); font: 11px var(--mono); }
7403
+ .board-link-results small { color: var(--c-text-soft); font: 11px var(--font-code); }
7352
7404
  .board-copy-options { font-size: 13px; }
7353
7405
  .board-copy-options label { display: flex; gap: 8px; align-items: center; }
7354
7406
  .board-copy-note,
@@ -7432,7 +7484,7 @@ html.is-node-dragging .intent-line-layer {
7432
7484
  background: var(--c-panel);
7433
7485
  z-index: 1;
7434
7486
  }
7435
- .attachment-review pre { white-space: pre-wrap; overflow-wrap: anywhere; font: 12px/1.6 var(--mono); padding: 12px; background: var(--c-bg); border-radius: 8px; }
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; }
7436
7488
  .attachment-review h4 { margin-bottom: 6px; }
7437
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); }
7438
7490
  @media (max-width: 640px) {