pmx-canvas 0.7.3 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) 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 +47 -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 +723 -672
  23. package/dist/canvas/index.js +90 -88
  24. package/dist/canvas/mcp-app.html +7878 -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 +1 -1
  28. package/dist/types/cli/commands/record.d.ts +1 -1
  29. package/dist/types/client/canvas/NodeContextMark.d.ts +24 -0
  30. package/dist/types/client/canvas/SessionReceipt.d.ts +3 -1
  31. package/dist/types/client/icons.d.ts +1 -2
  32. package/dist/types/client/mcp-app/index.d.ts +1 -0
  33. package/dist/types/client/nodes/ax-node-actions.d.ts +2 -2
  34. package/dist/types/client/nodes/markdown-sanitize.d.ts +2 -0
  35. package/dist/types/client/nodes/use-workbench-asset.d.ts +2 -0
  36. package/dist/types/client/state/attention-store.d.ts +0 -5
  37. package/dist/types/client/state/context-status-store.d.ts +53 -0
  38. package/dist/types/client/state/intent-bridge.d.ts +3 -0
  39. package/dist/types/client/state/near-pin-store.d.ts +16 -0
  40. package/dist/types/client/state/presence-store.d.ts +5 -0
  41. package/dist/types/client/state/session-store.d.ts +33 -3
  42. package/dist/types/client/state/workbench-transport.d.ts +16 -0
  43. package/dist/types/client/theme/tokens.d.ts +1 -3
  44. package/dist/types/client/types.d.ts +9 -0
  45. package/dist/types/json-render/server.d.ts +1 -1
  46. package/dist/types/mcp/app-server.d.ts +3 -0
  47. package/dist/types/mcp/canvas-access.d.ts +1 -1
  48. package/dist/types/mcp/canvas-app.d.ts +4 -0
  49. package/dist/types/mcp/workbench-app.d.ts +4 -0
  50. package/dist/types/server/agent-presence.d.ts +1 -1
  51. package/dist/types/server/ax-state.d.ts +1 -1
  52. package/dist/types/server/canvas-db.d.ts +8 -0
  53. package/dist/types/server/canvas-geometry.d.ts +25 -0
  54. package/dist/types/server/canvas-operations.d.ts +1 -11
  55. package/dist/types/server/canvas-state.d.ts +25 -3
  56. package/dist/types/server/context-brief.d.ts +8 -1
  57. package/dist/types/server/context-reads.d.ts +30 -7
  58. package/dist/types/server/index.d.ts +6 -1
  59. package/dist/types/server/mcp-app-runtime.d.ts +1 -0
  60. package/dist/types/server/operations/http.d.ts +2 -0
  61. package/dist/types/server/operations/invoker.d.ts +4 -2
  62. package/dist/types/server/operations/ops/nodes.d.ts +0 -6
  63. package/dist/types/server/server.d.ts +1 -0
  64. package/dist/types/server/spatial-analysis.d.ts +2 -0
  65. package/dist/types/shared/agent-context.d.ts +22 -0
  66. package/dist/types/shared/agent-presence.d.ts +3 -10
  67. package/dist/types/shared/canvas-app.d.ts +54 -0
  68. package/dist/types/shared/themes.d.ts +1 -1
  69. package/docs/RELEASE.md +7 -3
  70. package/docs/agent-plugin.md +123 -0
  71. package/docs/ax-state-contract.md +40 -0
  72. package/docs/cli.md +7 -2
  73. package/docs/design/AgentContext.dc.html +186 -0
  74. package/docs/design/Before.dc.html +208 -0
  75. package/docs/design/BoardPins.dc.html +151 -0
  76. package/docs/design/Chrome.dc.html +208 -0
  77. package/docs/design/Context.dc.html +239 -0
  78. package/docs/design/Flows.dc.html +181 -0
  79. package/docs/design/Home.dc.html +209 -0
  80. package/docs/design/HomeGraph.dc.html +211 -0
  81. package/docs/design/HomeMap.dc.html +117 -0
  82. package/docs/design/HomeTeam.dc.html +176 -0
  83. package/docs/design/Light.dc.html +28 -0
  84. package/docs/design/Main.dc.html +280 -0
  85. package/docs/design/NearPin.dc.html +260 -0
  86. package/docs/design/Pane600.dc.html +120 -0
  87. package/docs/design/Relations.dc.html +297 -0
  88. package/docs/design/Themes.dc.html +121 -0
  89. package/docs/design/TokenSystem.dc.html +136 -0
  90. package/docs/design/Tokens.dc.html +163 -0
  91. package/docs/design/Types1.dc.html +177 -0
  92. package/docs/design/Types2.dc.html +226 -0
  93. package/docs/design/Types3.dc.html +195 -0
  94. package/docs/design/Uses.dc.html +152 -0
  95. package/docs/design/Vision.dc.html +116 -0
  96. package/docs/design/Zoom.dc.html +82 -0
  97. package/docs/design/canvas.json +274 -0
  98. package/docs/design.md +214 -0
  99. package/docs/environment.md +1 -1
  100. package/docs/http-api.md +80 -15
  101. package/docs/mcp.md +198 -3
  102. package/docs/node-types.md +34 -10
  103. package/docs/plans/plan-009-tech-debt-backlog.md +1 -1
  104. package/docs/plans/plan-015-design-foundation-wave-0.md +177 -0
  105. package/docs/plans/plan-016-context-made-visible-wave-1.md +148 -0
  106. package/docs/product-vision-2026-09.md +47 -7
  107. package/docs/screenshot.png +0 -0
  108. package/docs/sdk.md +1 -0
  109. package/package.json +10 -4
  110. package/plugins/pmx-canvas/LICENSE +21 -0
  111. package/plugins/pmx-canvas/THIRD_PARTY_LICENSES.txt +331 -0
  112. package/plugins/pmx-canvas/assets/preview.png +0 -0
  113. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/extension.mjs +930 -0
  114. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.json +3 -0
  115. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/runtime.mjs +194 -0
  116. package/plugins/pmx-canvas/com.github.copilot/extensions/pmx-canvas/steering-delivery.mjs +79 -0
  117. package/plugins/pmx-canvas/mcp.json +12 -0
  118. package/plugins/pmx-canvas/plugin.json +24 -0
  119. package/plugins/pmx-canvas/runtime.json +3 -0
  120. package/plugins/pmx-canvas/runtime.mjs +194 -0
  121. package/plugins/pmx-canvas/start-mcp.mjs +51 -0
  122. package/plugins/pmx-canvas/tools.json +2560 -0
  123. package/skills/pmx-canvas/SKILL.md +10 -7
  124. package/skills/pmx-canvas/references/full-reference.md +11 -7
  125. package/skills/pmx-canvas/references/github-copilot-app-adapter.md +20 -8
  126. package/skills/pmx-canvas/references/installing-pmx-canvas.md +6 -6
  127. package/skills/pmx-canvas-testing/SKILL.md +5 -4
  128. package/src/cli/commands/copilot.ts +5 -0
  129. package/src/cli/commands/view.ts +1 -1
  130. package/src/cli/index.ts +8 -3
  131. package/src/client/App.tsx +6 -1
  132. package/src/client/canvas/AgentPresenceLayer.tsx +3 -3
  133. package/src/client/canvas/AnnotationLayer.tsx +1 -1
  134. package/src/client/canvas/CanvasNode.tsx +32 -49
  135. package/src/client/canvas/CanvasViewport.tsx +0 -2
  136. package/src/client/canvas/CommandPalette.tsx +3 -2
  137. package/src/client/canvas/ContextMenu.tsx +11 -0
  138. package/src/client/canvas/EdgeLayer.tsx +1 -1
  139. package/src/client/canvas/ExportDialog.tsx +33 -6
  140. package/src/client/canvas/IntentLayer.tsx +2 -2
  141. package/src/client/canvas/Minimap.tsx +12 -7
  142. package/src/client/canvas/NodeContextMark.tsx +156 -0
  143. package/src/client/canvas/SessionPanel.tsx +4 -7
  144. package/src/client/canvas/SessionReceipt.tsx +114 -17
  145. package/src/client/canvas/ShortcutOverlay.tsx +6 -1
  146. package/src/client/canvas/SnapshotPanel.tsx +11 -2
  147. package/src/client/canvas/ToolRail.tsx +12 -9
  148. package/src/client/canvas/TopBar.tsx +16 -11
  149. package/src/client/icons.tsx +2 -12
  150. package/src/client/mcp-app/index.tsx +137 -0
  151. package/src/client/mcp-app/style.css +10 -0
  152. package/src/client/nodes/AttachmentNode.tsx +8 -1
  153. package/src/client/nodes/AxStepControls.tsx +1 -1
  154. package/src/client/nodes/ContextNode.tsx +9 -9
  155. package/src/client/nodes/ExtAppFrame.tsx +13 -8
  156. package/src/client/nodes/FileNode.tsx +8 -5
  157. package/src/client/nodes/ImageNode.tsx +4 -2
  158. package/src/client/nodes/InlineMarkdownEditor.tsx +2 -1
  159. package/src/client/nodes/LedgerNode.tsx +2 -2
  160. package/src/client/nodes/MarkdownNode.tsx +44 -9
  161. package/src/client/nodes/McpAppNode.tsx +6 -4
  162. package/src/client/nodes/PromptNode.tsx +5 -17
  163. package/src/client/nodes/ResponseNode.tsx +3 -15
  164. package/src/client/nodes/StatusNode.tsx +2 -2
  165. package/src/client/nodes/StatusSummary.tsx +3 -1
  166. package/src/client/nodes/TraceNode.tsx +6 -4
  167. package/src/client/nodes/WebpageNode.tsx +1 -1
  168. package/src/client/nodes/ax-node-actions.ts +2 -2
  169. package/src/client/nodes/iframe-document-url.ts +3 -2
  170. package/src/client/nodes/markdown-sanitize.ts +10 -0
  171. package/src/client/nodes/surface-url.ts +10 -0
  172. package/src/client/nodes/use-surface-frame.ts +3 -1
  173. package/src/client/nodes/use-workbench-asset.ts +26 -0
  174. package/src/client/state/attention-bridge.ts +0 -8
  175. package/src/client/state/attention-store.ts +0 -17
  176. package/src/client/state/canvas-store.ts +4 -2
  177. package/src/client/state/context-status-store.ts +66 -0
  178. package/src/client/state/human-store.ts +2 -0
  179. package/src/client/state/iframe-mode.ts +5 -0
  180. package/src/client/state/intent-bridge.ts +10 -4
  181. package/src/client/state/near-pin-store.ts +53 -0
  182. package/src/client/state/presence-store.ts +5 -10
  183. package/src/client/state/session-store.ts +106 -9
  184. package/src/client/state/sse-bridge.ts +26 -7
  185. package/src/client/state/theme-override.ts +1 -1
  186. package/src/client/state/workbench-transport.ts +36 -0
  187. package/src/client/theme/global.css +723 -672
  188. package/src/client/theme/surface-theme.css +151 -46
  189. package/src/client/theme/tokens.ts +7 -11
  190. package/src/client/types.ts +10 -0
  191. package/src/json-render/server.ts +71 -14
  192. package/src/mcp/app-server.ts +64 -0
  193. package/src/mcp/canvas-access.ts +14 -11
  194. package/src/mcp/canvas-app.ts +318 -0
  195. package/src/mcp/server.ts +1 -1
  196. package/src/mcp/workbench-app.ts +211 -0
  197. package/src/server/agent-presence.ts +45 -6
  198. package/src/server/ax-context.ts +1 -1
  199. package/src/server/ax-state.ts +1 -1
  200. package/src/server/board-export.ts +5 -2
  201. package/src/server/canvas-db.ts +46 -12
  202. package/src/server/canvas-geometry.ts +64 -0
  203. package/src/server/canvas-operations.ts +6 -24
  204. package/src/server/canvas-state.ts +105 -15
  205. package/src/server/canvas-validation.ts +19 -4
  206. package/src/server/context-brief.ts +39 -2
  207. package/src/server/context-reads.ts +86 -15
  208. package/src/server/demo-state.json +31 -31
  209. package/src/server/html-surface.ts +4 -5
  210. package/src/server/index.ts +19 -3
  211. package/src/server/mcp-app-runtime.ts +11 -0
  212. package/src/server/operations/composites.ts +4 -3
  213. package/src/server/operations/http.ts +4 -4
  214. package/src/server/operations/invoker.ts +13 -4
  215. package/src/server/operations/ops/ax-read.ts +1 -1
  216. package/src/server/operations/ops/ax-timeline.ts +37 -0
  217. package/src/server/operations/ops/boards.ts +1 -1
  218. package/src/server/operations/ops/canvas-wire.ts +3 -6
  219. package/src/server/operations/ops/intent.ts +31 -2
  220. package/src/server/operations/ops/json-render.ts +1 -1
  221. package/src/server/operations/ops/nodes.ts +8 -76
  222. package/src/server/operations/ops/query.ts +8 -2
  223. package/src/server/operations/ops/snapshots.ts +4 -1
  224. package/src/server/operations/ops/viewport.ts +29 -5
  225. package/src/server/operations/registry.ts +38 -4
  226. package/src/server/scope-fence.ts +55 -10
  227. package/src/server/server.ts +83 -5
  228. package/src/server/spatial-analysis.ts +2 -2
  229. package/src/server/workboard.ts +6 -1
  230. package/src/{server → shared}/agent-context.ts +2 -2
  231. package/src/shared/agent-presence.ts +3 -15
  232. package/src/shared/canvas-app.ts +62 -0
  233. package/src/shared/themes.ts +5 -5
  234. package/src/client/canvas/FocusFieldLayer.tsx +0 -116
  235. 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;
@@ -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,17 @@ 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). */
779
+ .canvas-node .node-controls .node-hover-control {
780
+ display: none;
781
+ }
782
+
783
+ .canvas-node:hover .node-controls .node-hover-control,
784
+ .canvas-node:focus-within .node-controls .node-hover-control {
785
+ display: inline-flex;
786
+ }
787
+
795
788
  .canvas-node .node-body {
796
789
  flex: 1;
797
790
  overflow: auto;
@@ -892,7 +885,7 @@ body,
892
885
  }
893
886
 
894
887
  .canvas-node .node-body code {
895
- font-family: var(--mono);
888
+ font-family: var(--font-code);
896
889
  font-size: 0.9em;
897
890
  background: var(--c-surface-hover);
898
891
  padding: 2px 5px;
@@ -992,12 +985,12 @@ body,
992
985
  color: var(--c-text);
993
986
  }
994
987
  .rail-btn.active {
995
- background: var(--c-accent-10);
996
- border-color: var(--c-accent-25);
988
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
989
+ border-color: color-mix(in srgb, var(--c-accent) 25%, transparent);
997
990
  color: var(--c-accent);
998
991
  }
999
992
  .rail-btn.active:hover {
1000
- background: var(--c-accent-15, var(--c-accent-10));
993
+ background: color-mix(in srgb, var(--c-accent) 15%, transparent);
1001
994
  }
1002
995
 
1003
996
  .rail-divider {
@@ -1061,7 +1054,7 @@ body,
1061
1054
  }
1062
1055
 
1063
1056
  .top-bar-meta {
1064
- font: 11px var(--mono);
1057
+ font: 11px var(--font-code);
1065
1058
  color: var(--c-dim);
1066
1059
  white-space: nowrap;
1067
1060
  flex-shrink: 0;
@@ -1103,7 +1096,7 @@ body,
1103
1096
  .top-bar-zoom-label {
1104
1097
  min-width: 38px;
1105
1098
  text-align: center;
1106
- font: 11px var(--mono);
1099
+ font: 11px var(--font-code);
1107
1100
  color: var(--c-muted);
1108
1101
  background: none;
1109
1102
  border: 1px solid transparent;
@@ -1136,7 +1129,7 @@ body,
1136
1129
  .agent-chip.phase-thinking,
1137
1130
  .agent-cursor.phase-thinking,
1138
1131
  .minimap-presence.phase-thinking {
1139
- --presence-color: var(--c-purple);
1132
+ --presence-color: var(--c-agent);
1140
1133
  }
1141
1134
  .agent-chip.phase-tooling,
1142
1135
  .agent-cursor.phase-tooling,
@@ -1220,7 +1213,7 @@ body,
1220
1213
  min-width: 0;
1221
1214
  }
1222
1215
  .agent-chip-who {
1223
- font: 10px var(--mono);
1216
+ font: 10px var(--font-code);
1224
1217
  font-weight: 400;
1225
1218
  color: var(--c-muted);
1226
1219
  white-space: nowrap;
@@ -1358,22 +1351,15 @@ body,
1358
1351
  animation: presence-pulse 1.4s ease-in-out infinite;
1359
1352
  }
1360
1353
  .agent-cursor-who {
1361
- font: 9.5px var(--mono);
1354
+ font: 9.5px var(--font-code);
1362
1355
  font-weight: 400;
1363
1356
  color: var(--c-muted);
1364
1357
  }
1365
1358
 
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;
1359
+ /* The node an attached agent is editing right now: the violet agent bar
1360
+ across the top of the header (docs/design/Context.dc.html). */
1361
+ .canvas-node.agent-mutating .node-titlebar {
1362
+ box-shadow: inset 0 2.5px 0 var(--c-agent);
1377
1363
  }
1378
1364
 
1379
1365
  @keyframes presence-pulse {
@@ -1385,14 +1371,6 @@ body,
1385
1371
  opacity: 0.45;
1386
1372
  }
1387
1373
  }
1388
- @keyframes presence-shimmer {
1389
- from {
1390
- background-position: 200% 0;
1391
- }
1392
- to {
1393
- background-position: -200% 0;
1394
- }
1395
- }
1396
1374
 
1397
1375
  /* Reduced motion: keep every static color state, drop the motion. */
1398
1376
  @media (prefers-reduced-motion: reduce) {
@@ -1400,13 +1378,9 @@ body,
1400
1378
  transition: none;
1401
1379
  }
1402
1380
  .agent-chip-dot,
1403
- .agent-cursor-dot,
1404
- .canvas-node.agent-mutating {
1381
+ .agent-cursor-dot {
1405
1382
  animation: none;
1406
1383
  }
1407
- .canvas-node.agent-mutating {
1408
- background-image: none;
1409
- }
1410
1384
  }
1411
1385
 
1412
1386
  /* ── Session panel (rail-chrome-v2 phase 4) ─────────────────────
@@ -1442,7 +1416,7 @@ body,
1442
1416
  flex-direction: column;
1443
1417
  align-items: center;
1444
1418
  gap: 4px;
1445
- font: 9px var(--mono);
1419
+ font: 9px var(--font-code);
1446
1420
  color: var(--c-dim);
1447
1421
  }
1448
1422
  .session-collapsed-live .session-live-dot {
@@ -1470,11 +1444,11 @@ body,
1470
1444
  display: inline-flex;
1471
1445
  align-items: center;
1472
1446
  gap: 5px;
1473
- font: 10px var(--mono);
1447
+ font: 10px var(--font-code);
1474
1448
  color: var(--c-muted);
1475
1449
  }
1476
1450
  .session-live.phase-thinking {
1477
- --presence-color: var(--c-purple);
1451
+ --presence-color: var(--c-agent);
1478
1452
  }
1479
1453
  .session-live.phase-tooling {
1480
1454
  --presence-color: var(--c-accent);
@@ -1618,7 +1592,7 @@ body,
1618
1592
  margin-top: 3px;
1619
1593
  }
1620
1594
  .session-item-time {
1621
- font: 9px var(--mono);
1595
+ font: 9px var(--font-code);
1622
1596
  color: var(--c-dim);
1623
1597
  flex-shrink: 0;
1624
1598
  margin-top: 4px;
@@ -1629,7 +1603,7 @@ body,
1629
1603
  }
1630
1604
  .session-gate-ttl {
1631
1605
  margin-top: 4px;
1632
- font: 10px var(--mono);
1606
+ font: 10px var(--font-code);
1633
1607
  color: var(--c-warn);
1634
1608
  }
1635
1609
  .session-gate-held {
@@ -1691,7 +1665,7 @@ body,
1691
1665
  display: inline-flex;
1692
1666
  align-items: center;
1693
1667
  gap: 6px;
1694
- font: 10px/1 var(--mono);
1668
+ font: 10px/1 var(--font-code);
1695
1669
  color: var(--c-muted);
1696
1670
  }
1697
1671
  .session-work-dot {
@@ -1728,7 +1702,7 @@ body,
1728
1702
  gap: 8px;
1729
1703
  padding: 7px 12px;
1730
1704
  border-bottom: 1px solid var(--c-line);
1731
- background: var(--c-accent-8);
1705
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
1732
1706
  }
1733
1707
  .session-undo-text {
1734
1708
  flex: 1;
@@ -1742,7 +1716,7 @@ body,
1742
1716
  .session-undo-btn {
1743
1717
  flex-shrink: 0;
1744
1718
  padding: 3px 10px;
1745
- border: 1px solid var(--c-accent-25);
1719
+ border: 1px solid color-mix(in srgb, var(--c-accent) 25%, transparent);
1746
1720
  border-radius: 999px;
1747
1721
  background: none;
1748
1722
  color: var(--c-accent);
@@ -1751,7 +1725,7 @@ body,
1751
1725
  cursor: pointer;
1752
1726
  }
1753
1727
  .session-undo-btn:hover {
1754
- background: var(--c-accent-10);
1728
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
1755
1729
  }
1756
1730
 
1757
1731
  .session-timeline-filters {
@@ -1802,7 +1776,7 @@ body,
1802
1776
  --tone: var(--c-danger);
1803
1777
  }
1804
1778
  .session-timeline-row.tone-purple {
1805
- --tone: var(--c-purple);
1779
+ --tone: var(--c-agent);
1806
1780
  }
1807
1781
  .session-timeline-dot {
1808
1782
  width: 6px;
@@ -1845,7 +1819,7 @@ body,
1845
1819
  padding: 4px 12px;
1846
1820
  border: 1px solid var(--c-accent);
1847
1821
  border-radius: 999px;
1848
- background: var(--c-accent-10);
1822
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
1849
1823
  color: var(--c-accent);
1850
1824
  font-size: 11.5px;
1851
1825
  font-weight: 700;
@@ -1858,7 +1832,7 @@ body,
1858
1832
  }
1859
1833
  .session-timeline-undone {
1860
1834
  margin-top: 2px;
1861
- font: 9px var(--mono);
1835
+ font: 9px var(--font-code);
1862
1836
  color: var(--c-dim);
1863
1837
  }
1864
1838
  .session-timeline-body {
@@ -1879,7 +1853,7 @@ body,
1879
1853
  color: var(--c-muted);
1880
1854
  }
1881
1855
  .session-scope.is-fenced {
1882
- background: color-mix(in srgb, var(--c-purple) 8%, transparent);
1856
+ background: color-mix(in srgb, var(--c-agent) 8%, transparent);
1883
1857
  color: var(--c-text-soft);
1884
1858
  }
1885
1859
  .session-scope-dot {
@@ -1890,14 +1864,14 @@ body,
1890
1864
  flex-shrink: 0;
1891
1865
  }
1892
1866
  .session-scope.is-fenced .session-scope-dot {
1893
- background: var(--c-purple);
1867
+ background: var(--c-agent);
1894
1868
  }
1895
1869
  .session-scope-text {
1896
1870
  flex: 1;
1897
1871
  min-width: 0;
1898
1872
  }
1899
1873
  .session-scope-text strong {
1900
- color: var(--c-purple);
1874
+ color: var(--c-agent);
1901
1875
  }
1902
1876
  .session-scope-action {
1903
1877
  padding: 3px 9px;
@@ -1911,8 +1885,8 @@ body,
1911
1885
  white-space: nowrap;
1912
1886
  }
1913
1887
  .session-scope-action:hover:not(:disabled) {
1914
- border-color: color-mix(in srgb, var(--c-purple) 45%, transparent);
1915
- color: var(--c-purple);
1888
+ border-color: color-mix(in srgb, var(--c-agent) 45%, transparent);
1889
+ color: var(--c-agent);
1916
1890
  }
1917
1891
  .session-scope-action:disabled {
1918
1892
  opacity: 0.5;
@@ -1926,9 +1900,9 @@ body,
1926
1900
  top: 0;
1927
1901
  z-index: 1;
1928
1902
  pointer-events: none;
1929
- border: 1.5px dashed color-mix(in srgb, var(--c-purple) 40%, transparent);
1903
+ border: 1.5px dashed color-mix(in srgb, var(--c-agent) 40%, transparent);
1930
1904
  border-radius: 16px;
1931
- background: color-mix(in srgb, var(--c-purple) 3%, transparent);
1905
+ background: color-mix(in srgb, var(--c-agent) 3%, transparent);
1932
1906
  }
1933
1907
  .scope-fence-pill {
1934
1908
  position: absolute;
@@ -1936,9 +1910,9 @@ body,
1936
1910
  transform-origin: 0 50%;
1937
1911
  padding: 3px 10px;
1938
1912
  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);
1913
+ border: 1px solid color-mix(in srgb, var(--c-agent) 35%, transparent);
1914
+ background: color-mix(in srgb, var(--c-panel) 92%, var(--c-agent) 8%);
1915
+ color: var(--c-agent);
1942
1916
  font-size: 10px;
1943
1917
  font-weight: 600;
1944
1918
  letter-spacing: 0.04em;
@@ -1982,9 +1956,9 @@ body,
1982
1956
  max-width: 240px;
1983
1957
  padding: 2px 5px 2px 9px;
1984
1958
  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);
1959
+ border: 1px solid color-mix(in srgb, var(--c-pin) 35%, transparent);
1960
+ background: color-mix(in srgb, var(--c-pin) 12%, transparent);
1961
+ color: var(--c-pin);
1988
1962
  font-size: 10px;
1989
1963
  font-weight: 600;
1990
1964
  }
@@ -2008,7 +1982,7 @@ body,
2008
1982
  border: none;
2009
1983
  border-radius: 50%;
2010
1984
  background: none;
2011
- color: var(--c-warn);
1985
+ color: var(--c-pin);
2012
1986
  font-size: 12px;
2013
1987
  line-height: 1;
2014
1988
  cursor: pointer;
@@ -2016,7 +1990,7 @@ body,
2016
1990
  }
2017
1991
  .command-bar-chip-unpin:hover {
2018
1992
  opacity: 1;
2019
- background: color-mix(in srgb, var(--c-warn) 25%, transparent);
1993
+ background: color-mix(in srgb, var(--c-pin) 25%, transparent);
2020
1994
  }
2021
1995
  .command-bar-chips-note {
2022
1996
  font-size: 10px;
@@ -2054,7 +2028,7 @@ body,
2054
2028
  border-radius: 8px;
2055
2029
  background: var(--c-panel-overlay);
2056
2030
  color: var(--c-text);
2057
- font: 12px/1.35 var(--font);
2031
+ font: 12px/1.35 var(--font-ui);
2058
2032
  cursor: pointer;
2059
2033
  }
2060
2034
  .choice-menu-trigger > span {
@@ -2105,7 +2079,7 @@ body,
2105
2079
 
2106
2080
  .command-bar-icon {
2107
2081
  flex-shrink: 0;
2108
- color: var(--c-purple);
2082
+ color: var(--c-agent);
2109
2083
  }
2110
2084
  .command-bar-input {
2111
2085
  flex: 1;
@@ -2115,7 +2089,7 @@ body,
2115
2089
  outline: none;
2116
2090
  background: none;
2117
2091
  color: var(--c-text);
2118
- font: 13px var(--font);
2092
+ font: 13px var(--font-ui);
2119
2093
  }
2120
2094
  .command-bar-input::placeholder {
2121
2095
  color: var(--c-dim);
@@ -2175,7 +2149,7 @@ body,
2175
2149
  display: block;
2176
2150
  height: 100%;
2177
2151
  border-radius: 3px;
2178
- background: linear-gradient(90deg, var(--c-accent), var(--c-warn));
2152
+ background: var(--c-accent);
2179
2153
  transition: width 180ms ease;
2180
2154
  }
2181
2155
  .context-budget.tone-warn .context-budget-fill,
@@ -2183,7 +2157,7 @@ body,
2183
2157
  background: var(--tone);
2184
2158
  }
2185
2159
  .context-budget-label {
2186
- font: 11px var(--mono);
2160
+ font: 11px var(--font-code);
2187
2161
  color: var(--c-text-soft);
2188
2162
  min-width: 30px;
2189
2163
  text-align: right;
@@ -2209,9 +2183,9 @@ body,
2209
2183
  gap: 8px;
2210
2184
  padding: 4px 12px 4px 6px;
2211
2185
  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);
2186
+ border: 1px solid color-mix(in srgb, var(--c-agent) 35%, transparent);
2187
+ background: color-mix(in srgb, var(--c-agent) 8%, transparent);
2188
+ color: var(--c-agent);
2215
2189
  cursor: pointer;
2216
2190
  white-space: nowrap;
2217
2191
  flex-shrink: 0;
@@ -2219,7 +2193,7 @@ body,
2219
2193
  }
2220
2194
  .external-indicator:hover,
2221
2195
  .external-indicator[aria-expanded='true'] {
2222
- background: color-mix(in srgb, var(--c-purple) 15%, transparent);
2196
+ background: color-mix(in srgb, var(--c-agent) 15%, transparent);
2223
2197
  }
2224
2198
  .external-indicator-avatars {
2225
2199
  display: inline-flex;
@@ -2233,14 +2207,14 @@ body,
2233
2207
  font-weight: 600;
2234
2208
  }
2235
2209
  .external-indicator-ops {
2236
- font: 10px var(--mono);
2210
+ font: 10px var(--font-code);
2237
2211
  color: var(--c-muted);
2238
2212
  }
2239
2213
  .external-indicator-dot {
2240
2214
  width: 7px;
2241
2215
  height: 7px;
2242
2216
  border-radius: 50%;
2243
- background: var(--c-purple);
2217
+ background: var(--c-agent);
2244
2218
  flex-shrink: 0;
2245
2219
  animation: presence-pulse 1.4s ease-in-out infinite;
2246
2220
  }
@@ -2254,7 +2228,7 @@ body,
2254
2228
  display: flex;
2255
2229
  flex-direction: column;
2256
2230
  background: var(--c-panel);
2257
- border: 1px solid color-mix(in srgb, var(--c-purple) 30%, transparent);
2231
+ border: 1px solid color-mix(in srgb, var(--c-agent) 30%, transparent);
2258
2232
  border-radius: 10px;
2259
2233
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
2260
2234
  /* Popover-level like the rail menus: above the minimap, below the rail. */
@@ -2279,7 +2253,7 @@ body,
2279
2253
  color: var(--c-text);
2280
2254
  }
2281
2255
  .activity-feed-sub {
2282
- font: 9px var(--mono);
2256
+ font: 9px var(--font-code);
2283
2257
  color: var(--c-dim);
2284
2258
  }
2285
2259
  .activity-feed-close {
@@ -2301,7 +2275,7 @@ body,
2301
2275
  border-bottom: 1px solid var(--c-line);
2302
2276
  }
2303
2277
  .activity-filter {
2304
- --writer: var(--c-purple);
2278
+ --writer: var(--c-agent);
2305
2279
  padding: 2px 9px;
2306
2280
  border-radius: 999px;
2307
2281
  border: 1px solid var(--c-line);
@@ -2332,7 +2306,7 @@ body,
2332
2306
  border-bottom: none;
2333
2307
  }
2334
2308
  .activity-row.is-pending {
2335
- background: color-mix(in srgb, var(--c-purple) 5%, transparent);
2309
+ background: color-mix(in srgb, var(--c-agent) 5%, transparent);
2336
2310
  }
2337
2311
  .activity-glyph {
2338
2312
  flex-shrink: 0;
@@ -2353,7 +2327,7 @@ body,
2353
2327
  color: var(--c-accent);
2354
2328
  }
2355
2329
  .activity-glyph.tone-purple {
2356
- color: var(--c-purple);
2330
+ color: var(--c-agent);
2357
2331
  }
2358
2332
  .activity-main {
2359
2333
  flex: 1;
@@ -2370,7 +2344,7 @@ body,
2370
2344
  color: var(--c-muted);
2371
2345
  }
2372
2346
  .activity-writer {
2373
- font: 8.5px var(--mono);
2347
+ font: 8.5px var(--font-code);
2374
2348
  }
2375
2349
  .activity-actions {
2376
2350
  display: flex;
@@ -2393,7 +2367,7 @@ body,
2393
2367
  }
2394
2368
  .activity-hint,
2395
2369
  .activity-age {
2396
- font: 9px var(--mono);
2370
+ font: 9px var(--font-code);
2397
2371
  color: var(--c-dim);
2398
2372
  flex-shrink: 0;
2399
2373
  }
@@ -2428,7 +2402,7 @@ body,
2428
2402
  color: var(--c-text);
2429
2403
  }
2430
2404
  .activity-feed-link.is-accent {
2431
- color: var(--c-purple);
2405
+ color: var(--c-agent);
2432
2406
  }
2433
2407
  .activity-feed-link.is-accent:hover {
2434
2408
  text-decoration: underline;
@@ -2469,7 +2443,7 @@ body,
2469
2443
  color: var(--c-text);
2470
2444
  }
2471
2445
  .writers-board {
2472
- font: 9px var(--mono);
2446
+ font: 9px var(--font-code);
2473
2447
  color: var(--c-dim);
2474
2448
  }
2475
2449
  .writers-body {
@@ -2502,18 +2476,18 @@ body,
2502
2476
  white-space: nowrap;
2503
2477
  }
2504
2478
  .writers-name.is-mono {
2505
- font: 11px var(--mono);
2479
+ font: 11px var(--font-code);
2506
2480
  }
2507
2481
  .writers-config {
2508
2482
  font-size: 9.5px;
2509
2483
  font-weight: 600;
2510
2484
  padding: 2px 8px;
2511
2485
  border-radius: 999px;
2512
- background: color-mix(in srgb, var(--c-purple) 12%, transparent);
2513
- color: var(--c-purple);
2486
+ background: color-mix(in srgb, var(--c-agent) 12%, transparent);
2487
+ color: var(--c-agent);
2514
2488
  }
2515
2489
  .writers-meta {
2516
- font: 9.5px var(--mono);
2490
+ font: 9.5px var(--font-code);
2517
2491
  color: var(--c-dim);
2518
2492
  }
2519
2493
  .writers-empty {
@@ -2576,24 +2550,32 @@ body,
2576
2550
  .minimap-node {
2577
2551
  position: absolute;
2578
2552
  border-radius: 1.5px;
2579
- background: var(--kind);
2553
+ background: var(--c-muted);
2580
2554
  opacity: 0.55;
2581
2555
  }
2582
2556
  .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);
2557
+ background: color-mix(in srgb, var(--c-muted) 4%, transparent);
2558
+ border: 1px dashed color-mix(in srgb, var(--c-muted) 55%, transparent);
2585
2559
  opacity: 1;
2586
2560
  border-radius: 2px;
2587
2561
  }
2562
+ .minimap-node.is-pinned {
2563
+ background: var(--c-pin);
2564
+ opacity: 0.9;
2565
+ }
2566
+ .minimap-node.is-agent {
2567
+ background: var(--c-agent);
2568
+ opacity: 0.9;
2569
+ }
2588
2570
  .minimap-node.is-selected {
2589
2571
  outline: 1px solid var(--c-accent);
2590
2572
  opacity: 0.8;
2591
2573
  }
2592
2574
  .minimap-fence {
2593
2575
  position: absolute;
2594
- border: 1px dashed color-mix(in srgb, var(--c-purple) 45%, transparent);
2576
+ border: 1px dashed color-mix(in srgb, var(--c-agent) 45%, transparent);
2595
2577
  border-radius: 2px;
2596
- background: color-mix(in srgb, var(--c-purple) 3%, transparent);
2578
+ background: color-mix(in srgb, var(--c-agent) 3%, transparent);
2597
2579
  }
2598
2580
  .minimap-presence {
2599
2581
  position: absolute;
@@ -2628,7 +2610,7 @@ body,
2628
2610
  position: absolute;
2629
2611
  right: 5px;
2630
2612
  bottom: 3px;
2631
- font: 8px var(--mono);
2613
+ font: 8px var(--font-code);
2632
2614
  color: var(--c-dim);
2633
2615
  }
2634
2616
 
@@ -2730,7 +2712,7 @@ body,
2730
2712
  color: var(--c-accent);
2731
2713
  }
2732
2714
  .edge-hint-keys {
2733
- font: 9px var(--mono);
2715
+ font: 9px var(--font-code);
2734
2716
  color: var(--c-dim);
2735
2717
  }
2736
2718
 
@@ -2783,8 +2765,8 @@ body,
2783
2765
  padding: 2px 9px;
2784
2766
  border-radius: 999px;
2785
2767
  background: var(--c-panel-soft);
2786
- border: 1px solid color-mix(in srgb, var(--c-warn) 40%, transparent);
2787
- color: var(--c-warn);
2768
+ border: 1px solid color-mix(in srgb, var(--c-agent) 40%, transparent);
2769
+ color: var(--c-agent);
2788
2770
  font-size: 9.5px;
2789
2771
  font-weight: 600;
2790
2772
  white-space: nowrap;
@@ -2793,7 +2775,7 @@ body,
2793
2775
  width: 6px;
2794
2776
  height: 6px;
2795
2777
  border-radius: 50%;
2796
- background: var(--c-warn);
2778
+ background: var(--c-agent);
2797
2779
  }
2798
2780
 
2799
2781
  /* Quiet-board affordance in the top bar */
@@ -2813,8 +2795,8 @@ body,
2813
2795
  flex-shrink: 0;
2814
2796
  }
2815
2797
  .start-session-btn:hover {
2816
- border-color: color-mix(in srgb, var(--c-purple) 40%, transparent);
2817
- color: var(--c-purple);
2798
+ border-color: color-mix(in srgb, var(--c-agent) 40%, transparent);
2799
+ color: var(--c-agent);
2818
2800
  }
2819
2801
  .start-session-dot {
2820
2802
  width: 7px;
@@ -2823,7 +2805,7 @@ body,
2823
2805
  background: var(--c-dim);
2824
2806
  }
2825
2807
  .start-session-btn:hover .start-session-dot {
2826
- background: var(--c-purple);
2808
+ background: var(--c-agent);
2827
2809
  }
2828
2810
  .session-end {
2829
2811
  padding: 3px 10px;
@@ -2885,6 +2867,11 @@ body,
2885
2867
  background: var(--c-surface-hover);
2886
2868
  color: var(--c-text);
2887
2869
  }
2870
+ .session-receipt-who {
2871
+ margin: 2px 0 0 15px;
2872
+ font-size: 11px;
2873
+ color: var(--c-muted);
2874
+ }
2888
2875
  .session-receipt-tiles {
2889
2876
  display: grid;
2890
2877
  grid-template-columns: repeat(3, 1fr);
@@ -2915,6 +2902,111 @@ body,
2915
2902
  .session-receipt-tile-value.tone-danger {
2916
2903
  color: var(--c-danger);
2917
2904
  }
2905
+ /* What the session did with context (docs/design/AgentContext.dc.html receipt). */
2906
+ .session-receipt-context {
2907
+ display: flex;
2908
+ flex-direction: column;
2909
+ gap: var(--space-2);
2910
+ margin-top: var(--space-3);
2911
+ }
2912
+ .session-receipt-warn {
2913
+ display: flex;
2914
+ align-items: center;
2915
+ gap: var(--space-2);
2916
+ padding: var(--space-2) 10px;
2917
+ border-radius: 8px;
2918
+ background: color-mix(in srgb, var(--c-warn) 10%, transparent);
2919
+ color: var(--c-warn);
2920
+ font-size: var(--fs-meta);
2921
+ }
2922
+ .session-receipt-warn svg,
2923
+ .session-receipt-context-head svg {
2924
+ width: 13px;
2925
+ height: 13px;
2926
+ flex-shrink: 0;
2927
+ fill: none;
2928
+ stroke: currentColor;
2929
+ stroke-width: 2;
2930
+ stroke-linecap: round;
2931
+ stroke-linejoin: round;
2932
+ }
2933
+ .session-receipt-context-row {
2934
+ display: flex;
2935
+ flex-direction: column;
2936
+ gap: 3px;
2937
+ padding-bottom: var(--space-2);
2938
+ border-bottom: 1px solid var(--c-line);
2939
+ }
2940
+ .session-receipt-context-head {
2941
+ display: flex;
2942
+ align-items: center;
2943
+ gap: 6px;
2944
+ color: var(--c-agent);
2945
+ }
2946
+ .session-receipt-context-name {
2947
+ flex: 1;
2948
+ font-size: var(--fs-ui);
2949
+ font-weight: 600;
2950
+ color: var(--c-text);
2951
+ }
2952
+ .session-receipt-context-count {
2953
+ font-size: var(--fs-meta);
2954
+ color: var(--c-dim);
2955
+ }
2956
+ .session-receipt-context-items {
2957
+ padding-left: 19px;
2958
+ font-size: var(--fs-meta);
2959
+ color: var(--c-muted);
2960
+ }
2961
+ .session-receipt-mini {
2962
+ padding: 2px var(--space-2);
2963
+ border: 1px solid var(--c-line);
2964
+ border-radius: var(--r-control);
2965
+ background: none;
2966
+ color: var(--c-text);
2967
+ font-size: var(--fs-meta);
2968
+ cursor: pointer;
2969
+ }
2970
+ .session-receipt-lens {
2971
+ display: flex;
2972
+ align-items: center;
2973
+ gap: var(--space-2);
2974
+ padding: 0;
2975
+ border: none;
2976
+ background: none;
2977
+ color: var(--c-muted);
2978
+ font-size: var(--fs-meta);
2979
+ cursor: pointer;
2980
+ }
2981
+ .session-receipt-lens-track {
2982
+ position: relative;
2983
+ width: 32px;
2984
+ height: 18px;
2985
+ border-radius: var(--r-pill);
2986
+ background: var(--c-line);
2987
+ }
2988
+ .session-receipt-lens-knob {
2989
+ position: absolute;
2990
+ left: 2px;
2991
+ top: 2px;
2992
+ width: 14px;
2993
+ height: 14px;
2994
+ border-radius: var(--r-pill);
2995
+ background: var(--c-muted);
2996
+ }
2997
+ .session-receipt-lens.is-on .session-receipt-lens-track {
2998
+ background: var(--c-agent);
2999
+ }
3000
+ .session-receipt-lens.is-on .session-receipt-lens-knob {
3001
+ left: auto;
3002
+ right: 2px;
3003
+ background: var(--c-bg);
3004
+ }
3005
+ /* The lens: nodes the session did not touch step back. */
3006
+ .canvas-node.lens-dimmed {
3007
+ opacity: 0.35;
3008
+ }
3009
+
2918
3010
  .session-receipt-note,
2919
3011
  .session-receipt-diff {
2920
3012
  margin-top: 10px;
@@ -2940,8 +3032,8 @@ body,
2940
3032
  cursor: pointer;
2941
3033
  }
2942
3034
  .session-receipt-primary {
2943
- border: 1px solid var(--c-accent-25);
2944
- background: var(--c-accent-12);
3035
+ border: 1px solid color-mix(in srgb, var(--c-accent) 25%, transparent);
3036
+ background: color-mix(in srgb, var(--c-accent) 12%, transparent);
2945
3037
  color: var(--c-accent);
2946
3038
  }
2947
3039
  .session-receipt-primary:disabled {
@@ -2966,7 +3058,7 @@ body,
2966
3058
  border: 1px solid color-mix(in srgb, var(--c-warn) 35%, transparent);
2967
3059
  background: color-mix(in srgb, var(--c-warn) 12%, transparent);
2968
3060
  color: var(--c-warn);
2969
- font: 11px var(--mono);
3061
+ font: 11px var(--font-code);
2970
3062
  font-weight: 600;
2971
3063
  white-space: nowrap;
2972
3064
  flex-shrink: 0;
@@ -3061,7 +3153,7 @@ body,
3061
3153
  background: color-mix(in srgb, var(--c-panel) 92%, black 8%);
3062
3154
  border: 1px solid color-mix(in srgb, var(--c-line) 78%, var(--c-accent) 22%);
3063
3155
  border-radius: 10px;
3064
- box-shadow: 0 14px 36px var(--c-shadow-heavy), 0 0 0 1px var(--c-accent-8);
3156
+ box-shadow: 0 14px 36px var(--c-shadow-heavy), 0 0 0 1px color-mix(in srgb, var(--c-accent) 8%, transparent);
3065
3157
  backdrop-filter: blur(14px);
3066
3158
  color: var(--c-text);
3067
3159
  font-size: 12px;
@@ -3197,10 +3289,10 @@ body,
3197
3289
  min-height: 20px;
3198
3290
  padding: 2px 7px;
3199
3291
  border-radius: 999px;
3200
- border: 1px solid var(--c-accent-25);
3201
- background: var(--c-accent-10);
3292
+ border: 1px solid color-mix(in srgb, var(--c-accent) 25%, transparent);
3293
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
3202
3294
  color: var(--c-accent);
3203
- font: 11px/1 var(--mono);
3295
+ font: 11px/1 var(--font-code);
3204
3296
  white-space: nowrap;
3205
3297
  }
3206
3298
 
@@ -3259,7 +3351,7 @@ body,
3259
3351
  min-width: 0;
3260
3352
  }
3261
3353
  .connection-banner-meta {
3262
- font: 9.5px var(--mono);
3354
+ font: 9.5px var(--font-code);
3263
3355
  color: var(--c-muted);
3264
3356
  }
3265
3357
  .connection-banner-progress {
@@ -3436,7 +3528,7 @@ body,
3436
3528
  border: none;
3437
3529
  background: var(--c-panel-soft);
3438
3530
  color: var(--c-text);
3439
- font: 13px / 1.6 var(--mono);
3531
+ font: 13px / 1.6 var(--font-code);
3440
3532
  padding: 12px;
3441
3533
  outline: none;
3442
3534
  }
@@ -3474,7 +3566,7 @@ body,
3474
3566
  border-radius: var(--radius-sm);
3475
3567
  color: var(--c-muted);
3476
3568
  cursor: pointer;
3477
- font-family: var(--font);
3569
+ font-family: var(--font-ui);
3478
3570
  transition: all 0.12s ease;
3479
3571
  }
3480
3572
 
@@ -3485,13 +3577,13 @@ body,
3485
3577
  }
3486
3578
 
3487
3579
  .md-toolbar-btn-primary {
3488
- background: var(--c-accent-15);
3489
- border-color: var(--c-accent-40);
3580
+ background: color-mix(in srgb, var(--c-accent) 15%, transparent);
3581
+ border-color: color-mix(in srgb, var(--c-accent) 40%, transparent);
3490
3582
  color: var(--c-accent);
3491
3583
  }
3492
3584
 
3493
3585
  .md-toolbar-btn-primary:hover {
3494
- background: var(--c-accent-25);
3586
+ background: color-mix(in srgb, var(--c-accent) 25%, transparent);
3495
3587
  border-color: var(--c-accent);
3496
3588
  }
3497
3589
 
@@ -3574,7 +3666,7 @@ body,
3574
3666
  border-left: 3px solid var(--c-accent);
3575
3667
  padding: 0.5em 1em;
3576
3668
  margin: 0.8em 0;
3577
- background: var(--c-accent-8);
3669
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
3578
3670
  border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
3579
3671
  }
3580
3672
 
@@ -3597,7 +3689,7 @@ body,
3597
3689
  }
3598
3690
 
3599
3691
  .md-reader-content code {
3600
- font-family: var(--mono);
3692
+ font-family: var(--font-code);
3601
3693
  font-size: 0.88em;
3602
3694
  background: var(--c-surface-hover);
3603
3695
  padding: 2px 6px;
@@ -3636,7 +3728,7 @@ body,
3636
3728
  }
3637
3729
 
3638
3730
  .md-reader-content th {
3639
- background: var(--c-accent-8);
3731
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
3640
3732
  font-weight: 600;
3641
3733
  color: var(--c-text);
3642
3734
  padding: 10px 14px;
@@ -3680,17 +3772,17 @@ body,
3680
3772
  border-radius: var(--radius);
3681
3773
  color: var(--c-muted);
3682
3774
  cursor: pointer;
3683
- font-family: var(--font);
3775
+ font-family: var(--font-ui);
3684
3776
  transition: all 0.15s ease;
3685
3777
  z-index: 1;
3686
3778
  box-shadow: 0 4px 16px var(--c-shadow);
3687
3779
  }
3688
3780
 
3689
3781
  .md-edit-fab:hover {
3690
- background: var(--c-accent-12);
3782
+ background: color-mix(in srgb, var(--c-accent) 12%, transparent);
3691
3783
  border-color: var(--c-accent);
3692
3784
  color: var(--c-accent);
3693
- box-shadow: 0 4px 20px var(--c-glow-accent);
3785
+ box-shadow: 0 4px 20px color-mix(in srgb, var(--c-accent) 15%, transparent);
3694
3786
  }
3695
3787
 
3696
3788
  /* ── Inline WYSIWYG editor (contentEditable on the rendered HTML) ─
@@ -3709,7 +3801,7 @@ body,
3709
3801
 
3710
3802
  .md-reader-editable::selection,
3711
3803
  .md-reader-editable *::selection {
3712
- background: var(--c-accent-25);
3804
+ background: color-mix(in srgb, var(--c-accent) 25%, transparent);
3713
3805
  }
3714
3806
 
3715
3807
  /* ── Inline selection toolbar (contentEditable WYSIWYG) ────────── */
@@ -3725,7 +3817,7 @@ body,
3725
3817
  border: 1px solid var(--c-line);
3726
3818
  border-radius: 8px;
3727
3819
  box-shadow: 0 4px 16px var(--c-shadow), 0 0 0 1px var(--c-line-30);
3728
- font-family: var(--font);
3820
+ font-family: var(--font-ui);
3729
3821
  animation: md-inline-format-bar-in 0.1s ease-out;
3730
3822
  }
3731
3823
 
@@ -3744,7 +3836,7 @@ body,
3744
3836
  background: none;
3745
3837
  border: 1px solid transparent;
3746
3838
  border-radius: var(--radius-sm);
3747
- font: 600 12px var(--font);
3839
+ font: 600 12px var(--font-ui);
3748
3840
  color: var(--c-text-soft);
3749
3841
  cursor: pointer;
3750
3842
  white-space: nowrap;
@@ -3758,7 +3850,7 @@ body,
3758
3850
  }
3759
3851
 
3760
3852
  .md-inline-format-btn:active {
3761
- background: var(--c-accent-12);
3853
+ background: color-mix(in srgb, var(--c-accent) 12%, transparent);
3762
3854
  color: var(--c-accent);
3763
3855
  }
3764
3856
 
@@ -3801,7 +3893,7 @@ body,
3801
3893
  background: none;
3802
3894
  border: 1px solid transparent;
3803
3895
  border-radius: var(--radius-sm);
3804
- font-family: var(--mono);
3896
+ font-family: var(--font-code);
3805
3897
  font-size: 12px;
3806
3898
  font-weight: 600;
3807
3899
  color: var(--c-muted);
@@ -3817,7 +3909,7 @@ body,
3817
3909
  }
3818
3910
 
3819
3911
  .md-format-btn:active {
3820
- background: var(--c-accent-12);
3912
+ background: color-mix(in srgb, var(--c-accent) 12%, transparent);
3821
3913
  color: var(--c-accent);
3822
3914
  }
3823
3915
 
@@ -3884,10 +3976,6 @@ html.is-node-resizing .canvas-node {
3884
3976
  transition: box-shadow 0.15s ease !important;
3885
3977
  }
3886
3978
 
3887
- html.is-node-dragging .attention-field-layer {
3888
- visibility: hidden;
3889
- }
3890
-
3891
3979
  html.is-node-dragging,
3892
3980
  html.is-node-dragging *,
3893
3981
  html.is-canvas-panning,
@@ -3960,12 +4048,12 @@ html.is-node-resizing .ext-app-preview-catcher {
3960
4048
  }
3961
4049
 
3962
4050
  .context-menu-item:hover {
3963
- background: var(--c-accent-10);
4051
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
3964
4052
  color: var(--c-accent);
3965
4053
  }
3966
4054
 
3967
4055
  .context-menu-item.is-danger .context-menu-label {
3968
- color: var(--c-danger, #e5484d);
4056
+ color: var(--c-danger);
3969
4057
  }
3970
4058
 
3971
4059
  .context-menu-shortcut {
@@ -4043,8 +4131,8 @@ html.is-node-resizing .ext-app-preview-catcher {
4043
4131
  }
4044
4132
 
4045
4133
  .context-menu-color-swatch:hover {
4046
- background: var(--c-accent-8);
4047
- border-color: var(--c-accent-30);
4134
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
4135
+ border-color: color-mix(in srgb, var(--c-accent) 30%, transparent);
4048
4136
  }
4049
4137
 
4050
4138
  .context-menu-color-swatch.active {
@@ -4055,7 +4143,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4055
4143
  .context-menu-color-dot {
4056
4144
  background: var(--swatch-color);
4057
4145
  border-radius: 999px;
4058
- box-shadow: 0 0 0 1px color-mix(in srgb, var(--swatch-color) 60%, #000 40%);
4146
+ box-shadow: 0 0 0 1px color-mix(in srgb, var(--swatch-color) 60%, var(--c-bg) 40%);
4059
4147
  flex: 0 0 auto;
4060
4148
  height: 10px;
4061
4149
  width: 10px;
@@ -4092,7 +4180,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4092
4180
  /* Edge labels — --edge-chrome-scale is set on the edge <svg> so labels keep a
4093
4181
  constant screen size while zoomed out (see edgeChromeScale in EdgeLayer). */
4094
4182
  .edge-label {
4095
- font-family: var(--font);
4183
+ font-family: var(--font-ui);
4096
4184
  font-size: calc(11px * var(--edge-label-scale, 1));
4097
4185
  pointer-events: none;
4098
4186
  user-select: none;
@@ -4132,10 +4220,10 @@ html.is-node-resizing .ext-app-preview-catcher {
4132
4220
  @keyframes trace-pulse {
4133
4221
  0%,
4134
4222
  100% {
4135
- box-shadow: 0 0 0 0 var(--c-accent-30);
4223
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--c-accent) 30%, transparent);
4136
4224
  }
4137
4225
  50% {
4138
- box-shadow: 0 0 0 4px var(--c-accent-15);
4226
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--c-accent) 15%, transparent);
4139
4227
  }
4140
4228
  }
4141
4229
 
@@ -4146,7 +4234,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4146
4234
  gap: 10px;
4147
4235
  height: 100%;
4148
4236
  overflow: auto;
4149
- font-family: var(--mono);
4237
+ font-family: var(--font-code);
4150
4238
  font-size: 12px;
4151
4239
  color: var(--c-text);
4152
4240
  }
@@ -4195,12 +4283,12 @@ html.is-node-resizing .ext-app-preview-catcher {
4195
4283
 
4196
4284
  .diff-node .diff-line-add {
4197
4285
  color: var(--c-ok);
4198
- background: var(--c-ok-10);
4286
+ background: color-mix(in srgb, var(--c-ok) 10%, transparent);
4199
4287
  }
4200
4288
 
4201
4289
  .diff-node .diff-line-remove {
4202
4290
  color: var(--c-danger);
4203
- background: var(--c-danger-12);
4291
+ background: color-mix(in srgb, var(--c-danger) 12%, transparent);
4204
4292
  }
4205
4293
 
4206
4294
  .diff-node .diff-line-context {
@@ -4241,7 +4329,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4241
4329
  border-spacing: 0;
4242
4330
  width: max-content;
4243
4331
  min-width: 100%;
4244
- font-family: var(--mono);
4332
+ font-family: var(--font-code);
4245
4333
  color: var(--c-text);
4246
4334
  }
4247
4335
 
@@ -4344,21 +4432,21 @@ html.is-node-resizing .ext-app-preview-catcher {
4344
4432
 
4345
4433
  /* ── Prompt nodes ──────────────────────────────────────────── */
4346
4434
  .canvas-node:has(.prompt-node-inner) {
4347
- border-color: var(--c-accent-30);
4435
+ border-color: color-mix(in srgb, var(--c-accent) 30%, transparent);
4348
4436
  }
4349
4437
 
4350
4438
  .canvas-node:has(.prompt-node-inner) .node-type-badge {
4351
- background: var(--c-accent-15);
4439
+ background: color-mix(in srgb, var(--c-accent) 15%, transparent);
4352
4440
  color: var(--c-accent);
4353
4441
  }
4354
4442
 
4355
4443
  /* ── Response nodes ────────────────────────────────────────── */
4356
4444
  .canvas-node:has(.response-node-inner) {
4357
- border-color: var(--c-ok-25);
4445
+ border-color: color-mix(in srgb, var(--c-ok) 25%, transparent);
4358
4446
  }
4359
4447
 
4360
4448
  .canvas-node:has(.response-node-inner) .node-type-badge {
4361
- background: var(--c-ok-12);
4449
+ background: color-mix(in srgb, var(--c-ok) 12%, transparent);
4362
4450
  color: var(--c-ok);
4363
4451
  }
4364
4452
 
@@ -4377,39 +4465,38 @@ html.is-node-resizing .ext-app-preview-catcher {
4377
4465
 
4378
4466
  /* ── Multi-node selection (item 13: outline, corner handles, soft glow) ── */
4379
4467
  .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);
4468
+ box-shadow: 0 0 0 3px var(--c-bg), 0 0 0 5px var(--c-accent), var(--e-1);
4382
4469
  }
4383
4470
  .node-selection-handle {
4384
4471
  position: absolute;
4385
- width: 7px;
4386
- height: 7px;
4387
- background: var(--c-bg);
4472
+ width: 8px;
4473
+ height: 8px;
4474
+ background: var(--c-panel);
4388
4475
  border: 1.5px solid var(--c-accent);
4389
4476
  border-radius: 2px;
4390
4477
  pointer-events: none;
4391
4478
  z-index: 3;
4392
4479
  }
4393
4480
  .node-selection-handle.is-tl {
4394
- left: -4px;
4395
- top: -4px;
4481
+ left: -9px;
4482
+ top: -9px;
4396
4483
  }
4397
4484
  .node-selection-handle.is-tr {
4398
- right: -4px;
4399
- top: -4px;
4485
+ right: -9px;
4486
+ top: -9px;
4400
4487
  }
4401
4488
  .node-selection-handle.is-bl {
4402
- left: -4px;
4403
- bottom: -4px;
4489
+ left: -9px;
4490
+ bottom: -9px;
4404
4491
  }
4405
4492
  .node-selection-handle.is-br {
4406
- right: -4px;
4407
- bottom: -4px;
4493
+ right: -9px;
4494
+ bottom: -9px;
4408
4495
  }
4409
4496
 
4410
4497
  /* Lasso rectangle overlay */
4411
4498
  .lasso-rect {
4412
- background: var(--c-accent-8);
4499
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
4413
4500
  border: 1px solid var(--c-accent);
4414
4501
  border-radius: 2px;
4415
4502
  z-index: 9998;
@@ -4451,7 +4538,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4451
4538
  border-radius: 4px;
4452
4539
  background: color-mix(in srgb, var(--c-bg) 72%, transparent);
4453
4540
  color: var(--c-annotation);
4454
- font-family: var(--font);
4541
+ font-family: var(--font-ui);
4455
4542
  font-weight: 700;
4456
4543
  line-height: 1.15;
4457
4544
  outline: none;
@@ -4465,13 +4552,13 @@ html.is-node-resizing .ext-app-preview-catcher {
4465
4552
  pointer-events: none;
4466
4553
  border: 2px dashed var(--c-accent);
4467
4554
  border-radius: 8px;
4468
- background: var(--c-accent-8);
4555
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
4469
4556
  animation: drop-zone-pulse 1.5s ease-in-out infinite;
4470
4557
  }
4471
4558
 
4472
4559
  @keyframes drop-zone-pulse {
4473
- 0%, 100% { background: var(--c-accent-8); }
4474
- 50% { background: var(--c-accent-12); }
4560
+ 0%, 100% { background: color-mix(in srgb, var(--c-accent) 8%, transparent); }
4561
+ 50% { background: color-mix(in srgb, var(--c-accent) 12%, transparent); }
4475
4562
  }
4476
4563
 
4477
4564
  .drop-zone-indicator {
@@ -4486,9 +4573,9 @@ html.is-node-resizing .ext-app-preview-catcher {
4486
4573
  padding: 20px 32px;
4487
4574
  background: var(--c-panel-glass);
4488
4575
  backdrop-filter: blur(16px);
4489
- border: 1px solid var(--c-accent-30);
4576
+ border: 1px solid color-mix(in srgb, var(--c-accent) 30%, transparent);
4490
4577
  border-radius: 12px;
4491
- box-shadow: 0 4px 24px var(--c-shadow), 0 0 24px var(--c-glow-accent);
4578
+ box-shadow: 0 4px 24px var(--c-shadow), 0 0 24px color-mix(in srgb, var(--c-accent) 15%, transparent);
4492
4579
  }
4493
4580
 
4494
4581
  .drop-zone-icon {
@@ -4500,7 +4587,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4500
4587
  display: flex;
4501
4588
  align-items: center;
4502
4589
  justify-content: center;
4503
- border: 2px dashed var(--c-accent-40);
4590
+ border: 2px dashed color-mix(in srgb, var(--c-accent) 40%, transparent);
4504
4591
  border-radius: 50%;
4505
4592
  }
4506
4593
 
@@ -4556,7 +4643,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4556
4643
  border-radius: 8px;
4557
4644
  background: var(--c-bg);
4558
4645
  color: var(--c-text);
4559
- font: 13px/1.4 var(--mono);
4646
+ font: 13px/1.4 var(--font-code);
4560
4647
  }
4561
4648
  .text-prompt-input:focus {
4562
4649
  outline: none;
@@ -4580,7 +4667,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4580
4667
  font-weight: 600;
4581
4668
  }
4582
4669
  .text-prompt-cancel:hover {
4583
- background: var(--c-accent-10);
4670
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
4584
4671
  border-color: var(--c-muted);
4585
4672
  }
4586
4673
  .text-prompt-cancel:focus-visible,
@@ -4701,181 +4788,51 @@ html.is-node-resizing .ext-app-preview-catcher {
4701
4788
  cursor: default;
4702
4789
  }
4703
4790
  .selection-bar-action.is-pin:hover {
4704
- background: color-mix(in srgb, var(--c-warn) 10%, transparent);
4705
- color: var(--c-warn);
4791
+ background: color-mix(in srgb, var(--c-pin) 10%, transparent);
4792
+ color: var(--c-pin);
4706
4793
  }
4707
4794
  .selection-bar-icon.is-danger:hover {
4708
4795
  background: color-mix(in srgb, var(--c-danger) 12%, transparent);
4709
4796
  color: var(--c-danger);
4710
4797
  }
4711
4798
 
4712
- /* ── Context-pinned nodes — amber glow ───────────────────────── */
4799
+ /* ── Node states (docs/design/Context.dc.html) ─────────────────
4800
+ In context: pin-blue border, tinted header, blue kind icon and the filled
4801
+ pin badge. Selection is a ring with a gap outside the border, so the pin
4802
+ styling survives it. */
4713
4803
  .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);
4804
+ border: 1.5px solid var(--c-pin);
4716
4805
  }
4717
4806
 
4718
- .canvas-node.context-pinned .node-type-badge {
4719
- background: var(--c-warn-15);
4720
- color: var(--c-warn);
4721
- }
4722
-
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);
4807
+ .canvas-node.context-pinned .node-titlebar {
4808
+ background: color-mix(in srgb, var(--c-pin) 12%, var(--c-panel));
4745
4809
  }
4746
4810
 
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;
4811
+ .canvas-node.context-pinned .node-type-icon {
4812
+ color: var(--c-pin);
4780
4813
  }
4781
4814
 
4815
+ /* A short pulse on the nodes a canvas change touched (pin, connect, group).
4816
+ Accent, not a meaning colour: it says "this changed", nothing more. */
4782
4817
  .canvas-node.attention-pulse {
4783
4818
  animation: attention-node-pulse 0.9s ease;
4784
4819
  }
4785
4820
 
4786
- :root[data-theme="light"] .canvas-node.attention-pulse {
4787
- animation-name: attention-node-pulse-light;
4788
- }
4789
-
4790
4821
  @keyframes attention-node-pulse {
4791
4822
  0% {
4792
4823
  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
4824
  }
4797
4825
  38% {
4798
4826
  transform: translateZ(0) scale(1.012);
4799
4827
  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);
4828
+ 0 0 0 3px color-mix(in srgb, var(--c-accent) 35%, transparent),
4829
+ var(--e-1);
4802
4830
  }
4803
4831
  100% {
4804
4832
  transform: translateZ(0) scale(1);
4805
4833
  }
4806
4834
  }
4807
4835
 
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
4836
  /* Anchored to the canvas region (not the window): since the rail-chrome
4880
4837
  restructure the session panel owns the window's right edge. */
4881
4838
  .attention-toast {
@@ -4889,7 +4846,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4889
4846
  padding: 6px 12px 6px 10px;
4890
4847
  background: color-mix(in srgb, var(--c-panel-glass) 96%, transparent);
4891
4848
  backdrop-filter: blur(14px);
4892
- border: 1px solid color-mix(in srgb, var(--c-line) 76%, var(--c-warn) 24%);
4849
+ border: 1px solid color-mix(in srgb, var(--c-line) 76%, var(--c-accent) 24%);
4893
4850
  border-radius: 12px;
4894
4851
  box-shadow: 0 8px 22px var(--c-shadow);
4895
4852
  color: var(--c-text);
@@ -4963,9 +4920,9 @@ html.is-node-resizing .ext-app-preview-catcher {
4963
4920
  padding: 14px;
4964
4921
  background: color-mix(in srgb, var(--c-panel-glass) 96%, transparent);
4965
4922
  backdrop-filter: blur(16px);
4966
- border: 1px solid color-mix(in srgb, var(--c-line) 82%, var(--c-warn) 18%);
4923
+ border: 1px solid color-mix(in srgb, var(--c-line) 82%, var(--c-accent) 18%);
4967
4924
  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);
4925
+ box-shadow: 0 14px 36px var(--c-shadow), 0 0 0 1px color-mix(in srgb, var(--c-accent) 8%, transparent);
4969
4926
  z-index: 9990;
4970
4927
  }
4971
4928
 
@@ -4979,7 +4936,7 @@ html.is-node-resizing .ext-app-preview-catcher {
4979
4936
  padding: 8px 12px 8px 14px;
4980
4937
  background: color-mix(in srgb, var(--c-panel-glass) 96%, transparent);
4981
4938
  backdrop-filter: blur(16px);
4982
- border: 1px solid color-mix(in srgb, var(--c-line) 82%, var(--c-warn) 18%);
4939
+ border: 1px solid color-mix(in srgb, var(--c-line) 82%, var(--c-accent) 18%);
4983
4940
  border-right: 0;
4984
4941
  border-radius: 14px 0 0 14px;
4985
4942
  box-shadow: 0 12px 36px var(--c-shadow);
@@ -5016,7 +4973,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5016
4973
  align-items: center;
5017
4974
  justify-content: center;
5018
4975
  border-radius: 9px;
5019
- background: var(--c-warn);
4976
+ background: var(--c-accent);
5020
4977
  color: var(--c-contrast-fg);
5021
4978
  font-size: 10px;
5022
4979
  font-weight: 700;
@@ -5115,16 +5072,16 @@ html.is-node-resizing .ext-app-preview-catcher {
5115
5072
  }
5116
5073
 
5117
5074
  .attention-tone-context {
5118
- border-color: color-mix(in srgb, var(--c-warn) 26%, transparent);
5075
+ border-color: color-mix(in srgb, var(--c-pin) 26%, transparent);
5119
5076
  }
5120
5077
 
5121
5078
  .attention-toast.attention-tone-context {
5122
- color: color-mix(in srgb, var(--c-warn) 82%, var(--c-text) 18%);
5079
+ color: color-mix(in srgb, var(--c-pin) 82%, var(--c-text) 18%);
5123
5080
  }
5124
5081
 
5125
5082
  .attention-tone-context .attention-history-kind,
5126
5083
  .attention-tone-context .attention-toast-title {
5127
- color: color-mix(in srgb, var(--c-warn) 82%, var(--c-text) 18%);
5084
+ color: color-mix(in srgb, var(--c-pin) 82%, var(--c-text) 18%);
5128
5085
  }
5129
5086
 
5130
5087
  .attention-tone-relationship {
@@ -5141,33 +5098,33 @@ html.is-node-resizing .ext-app-preview-catcher {
5141
5098
  }
5142
5099
 
5143
5100
  .attention-tone-group {
5144
- border-color: color-mix(in srgb, var(--c-purple) 24%, transparent);
5101
+ border-color: color-mix(in srgb, var(--c-accent) 24%, transparent);
5145
5102
  }
5146
5103
 
5147
5104
  .attention-toast.attention-tone-group {
5148
- color: color-mix(in srgb, var(--c-purple) 78%, var(--c-text) 22%);
5105
+ color: color-mix(in srgb, var(--c-accent) 78%, var(--c-text) 22%);
5149
5106
  }
5150
5107
 
5151
5108
  .attention-tone-group .attention-history-kind,
5152
5109
  .attention-tone-group .attention-toast-title {
5153
- color: color-mix(in srgb, var(--c-purple) 78%, var(--c-text) 22%);
5110
+ color: color-mix(in srgb, var(--c-accent) 78%, var(--c-text) 22%);
5154
5111
  }
5155
5112
 
5156
5113
  .attention-tone-cluster,
5157
5114
  .attention-tone-neighborhood {
5158
- border-color: color-mix(in srgb, var(--c-warn-alt) 22%, transparent);
5115
+ border-color: color-mix(in srgb, var(--c-accent) 22%, transparent);
5159
5116
  }
5160
5117
 
5161
5118
  .attention-toast.attention-tone-cluster,
5162
5119
  .attention-toast.attention-tone-neighborhood {
5163
- color: color-mix(in srgb, var(--c-warn-alt) 78%, var(--c-text) 22%);
5120
+ color: color-mix(in srgb, var(--c-accent) 78%, var(--c-text) 22%);
5164
5121
  }
5165
5122
 
5166
5123
  .attention-tone-cluster .attention-history-kind,
5167
5124
  .attention-tone-cluster .attention-toast-title,
5168
5125
  .attention-tone-neighborhood .attention-history-kind,
5169
5126
  .attention-tone-neighborhood .attention-toast-title {
5170
- color: color-mix(in srgb, var(--c-warn-alt) 78%, var(--c-text) 22%);
5127
+ color: color-mix(in srgb, var(--c-accent) 78%, var(--c-text) 22%);
5171
5128
  }
5172
5129
 
5173
5130
  .attention-tone-remove {
@@ -5214,7 +5171,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5214
5171
  background: color-mix(in srgb, var(--group-color, var(--c-accent)) 9%, transparent);
5215
5172
  }
5216
5173
  .canvas-node.group-node.is-drop-source {
5217
- border-color: color-mix(in srgb, var(--c-warn) 60%, transparent);
5174
+ border-color: color-mix(in srgb, var(--c-accent) 60%, transparent);
5218
5175
  }
5219
5176
  .canvas-node.group-node .node-body {
5220
5177
  background: none;
@@ -5271,7 +5228,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5271
5228
  text-overflow: ellipsis;
5272
5229
  }
5273
5230
  .group-count {
5274
- font: 9px var(--mono);
5231
+ font: 9px var(--font-code);
5275
5232
  color: var(--c-dim);
5276
5233
  }
5277
5234
  .group-title-input {
@@ -5407,10 +5364,11 @@ html.is-node-resizing .ext-app-preview-catcher {
5407
5364
  width: 6px;
5408
5365
  height: 6px;
5409
5366
  border-radius: 2px;
5367
+ background: var(--c-muted);
5410
5368
  opacity: 0.8;
5411
5369
  }
5412
5370
  .group-chip-count {
5413
- font: 9px var(--mono);
5371
+ font: 9px var(--font-code);
5414
5372
  color: var(--c-dim);
5415
5373
  }
5416
5374
 
@@ -5434,7 +5392,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5434
5392
  color: var(--c-accent);
5435
5393
  }
5436
5394
  .drop-pill-hint {
5437
- font: 9px var(--mono);
5395
+ font: 9px var(--font-code);
5438
5396
  color: var(--c-dim);
5439
5397
  }
5440
5398
 
@@ -5450,9 +5408,9 @@ html.is-node-resizing .ext-app-preview-catcher {
5450
5408
  padding: 8px 14px;
5451
5409
  background: var(--c-panel-glass);
5452
5410
  backdrop-filter: blur(12px);
5453
- border: 1px solid var(--c-warn);
5411
+ border: 1px solid var(--c-pin);
5454
5412
  border-radius: var(--radius);
5455
- box-shadow: 0 8px 32px var(--c-shadow), 0 0 0 1px var(--c-warn-15);
5413
+ box-shadow: 0 8px 32px var(--c-shadow), 0 0 0 1px color-mix(in srgb, var(--c-pin) 15%, transparent);
5456
5414
  z-index: 64;
5457
5415
  white-space: nowrap;
5458
5416
  }
@@ -5460,35 +5418,35 @@ html.is-node-resizing .ext-app-preview-catcher {
5460
5418
  .context-pin-bar-count {
5461
5419
  font-size: 12px;
5462
5420
  font-weight: 600;
5463
- color: var(--c-warn);
5421
+ color: var(--c-pin);
5464
5422
  }
5465
5423
 
5466
5424
  .context-pin-bar-btn {
5467
5425
  padding: 5px 12px;
5468
5426
  font-size: 12px;
5469
5427
  font-weight: 600;
5470
- background: var(--c-warn-10);
5471
- border: 1px solid var(--c-warn-30);
5428
+ background: color-mix(in srgb, var(--c-pin) 10%, transparent);
5429
+ border: 1px solid color-mix(in srgb, var(--c-pin) 30%, transparent);
5472
5430
  border-radius: var(--radius-sm);
5473
- color: var(--c-warn);
5431
+ color: var(--c-pin);
5474
5432
  cursor: pointer;
5475
- font-family: var(--font);
5433
+ font-family: var(--font-ui);
5476
5434
  }
5477
5435
 
5478
5436
  .context-pin-bar-btn:hover {
5479
- background: var(--c-warn-20);
5480
- border-color: var(--c-warn);
5437
+ background: color-mix(in srgb, var(--c-pin) 20%, transparent);
5438
+ border-color: var(--c-pin);
5481
5439
  }
5482
5440
 
5483
5441
  .context-pin-bar-ask {
5484
- background: var(--c-warn);
5485
- color: var(--c-contrast-fg);
5486
- border-color: var(--c-warn);
5442
+ background: var(--c-pin);
5443
+ color: var(--c-on-pin);
5444
+ border-color: var(--c-pin);
5487
5445
  }
5488
5446
 
5489
5447
  .context-pin-bar-ask:hover {
5490
- background: var(--c-warn-hover);
5491
- border-color: var(--c-warn-hover);
5448
+ background: color-mix(in srgb, var(--c-pin) 85%, var(--c-text));
5449
+ border-color: color-mix(in srgb, var(--c-pin) 85%, var(--c-text));
5492
5450
  }
5493
5451
 
5494
5452
  .context-pin-bar-clear {
@@ -5530,7 +5488,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5530
5488
  overflow: hidden;
5531
5489
  }
5532
5490
  .expanded-overlay-panel.is-pinned {
5533
- border-color: color-mix(in srgb, var(--c-warn) 45%, var(--c-line));
5491
+ border-color: color-mix(in srgb, var(--c-pin) 45%, var(--c-line));
5534
5492
  }
5535
5493
  .expanded-header {
5536
5494
  display: flex;
@@ -5573,7 +5531,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5573
5531
  cursor: pointer;
5574
5532
  }
5575
5533
  .expanded-pin.is-on {
5576
- color: var(--c-warn);
5534
+ color: var(--c-pin);
5577
5535
  }
5578
5536
  .expanded-spacer {
5579
5537
  flex: 1;
@@ -5607,12 +5565,12 @@ html.is-node-resizing .ext-app-preview-catcher {
5607
5565
  padding: 8px 16px;
5608
5566
  border-top: 1px solid var(--c-line);
5609
5567
  background: color-mix(in srgb, var(--c-bg) 50%, transparent);
5610
- font: 9.5px var(--mono);
5568
+ font: 9.5px var(--font-code);
5611
5569
  color: var(--c-dim);
5612
5570
  flex-shrink: 0;
5613
5571
  }
5614
5572
  .expanded-footer-hint.is-saving {
5615
- color: var(--c-warn);
5573
+ color: var(--c-muted);
5616
5574
  }
5617
5575
  .expanded-actions {
5618
5576
  display: flex;
@@ -5629,7 +5587,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5629
5587
  border-radius: var(--radius-sm);
5630
5588
  color: var(--c-text-soft);
5631
5589
  cursor: pointer;
5632
- font-family: var(--font);
5590
+ font-family: var(--font-ui);
5633
5591
  }
5634
5592
 
5635
5593
  .expanded-action-btn:hover {
@@ -5639,25 +5597,25 @@ html.is-node-resizing .ext-app-preview-catcher {
5639
5597
  }
5640
5598
 
5641
5599
  .expanded-action-btn.expanded-action-primary {
5642
- background: var(--c-accent-12);
5643
- border-color: var(--c-accent-30);
5600
+ background: color-mix(in srgb, var(--c-accent) 12%, transparent);
5601
+ border-color: color-mix(in srgb, var(--c-accent) 30%, transparent);
5644
5602
  color: var(--c-accent);
5645
5603
  }
5646
5604
 
5647
5605
  .expanded-action-btn.expanded-action-primary:hover {
5648
- background: var(--c-accent-25);
5606
+ background: color-mix(in srgb, var(--c-accent) 25%, transparent);
5649
5607
  border-color: var(--c-accent);
5650
5608
  color: var(--c-text);
5651
5609
  }
5652
5610
 
5653
5611
  .expanded-action-btn.expanded-action-active {
5654
- background: var(--c-warn-12);
5655
- border-color: var(--c-warn-30);
5612
+ background: color-mix(in srgb, var(--c-warn) 12%, transparent);
5613
+ border-color: color-mix(in srgb, var(--c-warn) 30%, transparent);
5656
5614
  color: var(--c-warn);
5657
5615
  }
5658
5616
 
5659
5617
  .expanded-action-btn.expanded-action-active:hover {
5660
- background: var(--c-warn-20);
5618
+ background: color-mix(in srgb, var(--c-warn) 20%, transparent);
5661
5619
  border-color: var(--c-warn);
5662
5620
  }
5663
5621
 
@@ -5674,7 +5632,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5674
5632
  display: flex;
5675
5633
  padding: 0;
5676
5634
  background:
5677
- radial-gradient(circle at top left, var(--c-accent-25), transparent 36rem),
5635
+ radial-gradient(circle at top left, color-mix(in srgb, var(--c-accent) 25%, transparent), transparent 36rem),
5678
5636
  rgba(3, 7, 18, 0.96);
5679
5637
  color: var(--c-text);
5680
5638
  }
@@ -5691,7 +5649,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5691
5649
  box-shadow: 0 18px 50px var(--c-shadow-heavy);
5692
5650
  color: var(--c-text-soft);
5693
5651
  cursor: pointer;
5694
- font: 600 12px/1 var(--font);
5652
+ font: 600 12px/1 var(--font-ui);
5695
5653
  opacity: 0;
5696
5654
  pointer-events: none;
5697
5655
  transform: translateY(-6px);
@@ -5726,24 +5684,119 @@ html.is-node-resizing .ext-app-preview-catcher {
5726
5684
  border-radius: 0 !important;
5727
5685
  }
5728
5686
 
5729
- /* ── Context pin button on node title bar ────────────────────── */
5730
- .node-controls .ctx-pin-btn {
5687
+ /* ── Context pin on the node header (docs/design/Chrome.dc.html) ──
5688
+ Always visible: an outline pin in a circle when the node is not in
5689
+ context, the filled pin-blue badge when it is. */
5690
+ .canvas-node .node-controls .ctx-pin-btn:hover {
5691
+ background: none;
5692
+ }
5693
+
5694
+ /* ── What agents did with this node (docs/design/AgentContext.dc.html) ──
5695
+ One chip after the title: glyph + word, hover explains. Violet = the agent
5696
+ did it, muted = not yet, amber = needs a look. */
5697
+ .node-context-mark {
5698
+ display: inline-flex;
5699
+ align-items: center;
5700
+ gap: calc(4px * var(--node-chrome-scale, 1));
5701
+ height: calc(20px * var(--node-chrome-scale, 1));
5702
+ padding: 0 calc(7px * var(--node-chrome-scale, 1));
5703
+ border-radius: var(--r-pill);
5704
+ font-size: calc(var(--fs-meta) * var(--node-chrome-scale, 1));
5705
+ font-weight: 500;
5706
+ white-space: nowrap;
5707
+ flex-shrink: 0;
5708
+ }
5709
+ .node-context-mark svg {
5710
+ width: calc(12px * var(--node-chrome-scale, 1));
5711
+ height: calc(12px * var(--node-chrome-scale, 1));
5712
+ fill: none;
5713
+ stroke: currentColor;
5714
+ stroke-width: 2;
5715
+ stroke-linecap: round;
5716
+ stroke-linejoin: round;
5717
+ }
5718
+ .node-context-mark.is-agent {
5719
+ color: var(--c-agent);
5720
+ background: color-mix(in srgb, var(--c-agent) 16%, transparent);
5721
+ }
5722
+ .node-context-mark.is-muted {
5731
5723
  color: var(--c-muted);
5732
- opacity: 0;
5733
- transition: opacity 0.15s;
5724
+ background: var(--c-panel-soft);
5725
+ }
5726
+ .node-context-mark.is-warn {
5727
+ color: var(--c-warn);
5728
+ background: color-mix(in srgb, var(--c-warn) 14%, transparent);
5734
5729
  }
5735
5730
 
5736
- .canvas-node:hover .ctx-pin-btn {
5737
- opacity: 0.7;
5731
+ /* Near a pin (docs/design/NearPin.dc.html): dotted, weaker than in context. */
5732
+ .node-near-mark {
5733
+ display: inline-flex;
5734
+ align-items: center;
5735
+ gap: calc(4px * var(--node-chrome-scale, 1));
5736
+ height: calc(18px * var(--node-chrome-scale, 1));
5737
+ padding: 0 calc(7px * var(--node-chrome-scale, 1));
5738
+ border: 1px dotted var(--c-pin);
5739
+ border-radius: var(--r-pill);
5740
+ color: color-mix(in srgb, var(--c-pin) 75%, var(--c-text));
5741
+ font-size: calc(var(--fs-meta) * var(--node-chrome-scale, 1));
5742
+ font-weight: 500;
5743
+ white-space: nowrap;
5744
+ flex-shrink: 0;
5745
+ }
5746
+ .node-near-mark svg {
5747
+ width: calc(12px * var(--node-chrome-scale, 1));
5748
+ height: calc(12px * var(--node-chrome-scale, 1));
5749
+ }
5750
+ .node-near-ring {
5751
+ fill: none;
5752
+ stroke: currentColor;
5753
+ stroke-width: 2;
5754
+ stroke-dasharray: 2.2 2.6;
5755
+ }
5756
+ .node-near-dot {
5757
+ fill: currentColor;
5738
5758
  }
5739
5759
 
5740
- .ctx-pin-btn.ctx-pin-active {
5741
- color: var(--c-warn);
5742
- opacity: 1 !important;
5760
+ /* Pinned by an agent: a violet dot on the pin badge. */
5761
+ .ctx-pin-mark {
5762
+ position: relative;
5763
+ }
5764
+ .ctx-pin-agent-dot {
5765
+ position: absolute;
5766
+ right: -3px;
5767
+ bottom: -3px;
5768
+ width: 9px;
5769
+ height: 9px;
5770
+ box-sizing: border-box;
5771
+ border-radius: var(--r-pill);
5772
+ background: var(--c-agent);
5773
+ border: 2px solid var(--c-panel);
5774
+ }
5775
+
5776
+ /* The drawn 18 px circle sits inside the standard control hit target. */
5777
+ .ctx-pin-mark {
5778
+ width: calc(18px * var(--node-chrome-scale, 1));
5779
+ height: calc(18px * var(--node-chrome-scale, 1));
5780
+ box-sizing: border-box;
5781
+ border: 1.5px solid var(--c-muted);
5782
+ border-radius: var(--r-pill);
5783
+ display: flex;
5784
+ align-items: center;
5785
+ justify-content: center;
5786
+ font-size: calc(13px * var(--node-chrome-scale, 1));
5787
+ color: var(--c-text-soft);
5788
+ }
5789
+
5790
+ .ctx-pin-btn:hover .ctx-pin-mark {
5791
+ border-color: var(--c-pin);
5792
+ background: color-mix(in srgb, var(--c-pin) 12%, transparent);
5793
+ color: var(--c-pin);
5743
5794
  }
5744
5795
 
5745
- :root[data-theme="light"] .ctx-pin-btn.ctx-pin-active {
5746
- color: #4BBCFF;
5796
+ .ctx-pin-btn.ctx-pin-active .ctx-pin-mark {
5797
+ border-color: var(--c-pin);
5798
+ background: var(--c-pin);
5799
+ color: var(--c-on-pin);
5747
5800
  }
5748
5801
 
5749
5802
  /* ── Context pin HUD — top-right pill ────────────────────────── */
@@ -5754,7 +5807,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5754
5807
  padding: 5px 10px;
5755
5808
  background: var(--c-panel-glass);
5756
5809
  backdrop-filter: blur(12px);
5757
- border: 1px solid var(--c-warn-30);
5810
+ border: 1px solid color-mix(in srgb, var(--c-pin) 30%, transparent);
5758
5811
  border-radius: var(--radius);
5759
5812
  white-space: nowrap;
5760
5813
  }
@@ -5762,7 +5815,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5762
5815
  .context-pin-hud-label {
5763
5816
  font-size: 11px;
5764
5817
  font-weight: 600;
5765
- color: var(--c-warn);
5818
+ color: var(--c-pin);
5766
5819
  }
5767
5820
 
5768
5821
  .context-pin-hud-clear {
@@ -5786,7 +5839,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5786
5839
 
5787
5840
  .thread-turn-assistant {
5788
5841
  padding: 6px 0;
5789
- border-left: 2px solid var(--c-ok-20);
5842
+ border-left: 2px solid color-mix(in srgb, var(--c-ok) 20%, transparent);
5790
5843
  padding-left: 10px;
5791
5844
  margin-left: 2px;
5792
5845
  overflow: hidden;
@@ -5948,7 +6001,7 @@ html.is-node-resizing .ext-app-preview-catcher {
5948
6001
  border-radius: 7px;
5949
6002
  background: var(--c-panel);
5950
6003
  color: var(--c-text);
5951
- font: 11.5px var(--font);
6004
+ font: 11.5px var(--font-ui);
5952
6005
  }
5953
6006
  .snapshot-name-input:focus {
5954
6007
  outline: 2px solid var(--c-accent);
@@ -6006,8 +6059,8 @@ html.is-node-resizing .ext-app-preview-catcher {
6006
6059
  border-radius: 10px;
6007
6060
  }
6008
6061
  .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);
6062
+ border-color: color-mix(in srgb, var(--c-agent) 30%, transparent);
6063
+ background: color-mix(in srgb, var(--c-agent) 5%, transparent);
6011
6064
  }
6012
6065
  .snapshot-item-head {
6013
6066
  display: flex;
@@ -6018,7 +6071,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6018
6071
  width: 7px;
6019
6072
  height: 7px;
6020
6073
  border-radius: 50%;
6021
- background: var(--c-purple);
6074
+ background: var(--c-agent);
6022
6075
  flex-shrink: 0;
6023
6076
  }
6024
6077
  .snapshot-item-glyph {
@@ -6040,7 +6093,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6040
6093
  color: var(--c-text);
6041
6094
  }
6042
6095
  .snapshot-item-time {
6043
- font: 9px var(--mono);
6096
+ font: 9px var(--font-code);
6044
6097
  color: var(--c-dim);
6045
6098
  }
6046
6099
  .snapshot-item-meta {
@@ -6155,7 +6208,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6155
6208
  outline: none;
6156
6209
  background: none;
6157
6210
  color: var(--c-text);
6158
- font: 13px var(--font);
6211
+ font: 13px var(--font-ui);
6159
6212
  }
6160
6213
  .command-palette-input::placeholder {
6161
6214
  color: var(--c-dim);
@@ -6165,7 +6218,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6165
6218
  padding: 1px 6px;
6166
6219
  border: 1px solid var(--c-line);
6167
6220
  border-radius: 4px;
6168
- font: 9.5px var(--mono);
6221
+ font: 9.5px var(--font-code);
6169
6222
  color: var(--c-muted);
6170
6223
  }
6171
6224
  .command-palette-esc {
@@ -6223,7 +6276,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6223
6276
  color: var(--c-accent);
6224
6277
  }
6225
6278
  .command-palette-icon.tone-purple {
6226
- color: var(--c-purple);
6279
+ color: var(--c-agent);
6227
6280
  }
6228
6281
  .command-palette-icon.tone-muted {
6229
6282
  color: var(--c-muted);
@@ -6251,7 +6304,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6251
6304
  padding: 8px 14px;
6252
6305
  border-top: 1px solid var(--c-line);
6253
6306
  background: color-mix(in srgb, var(--c-bg) 50%, transparent);
6254
- font: 9.5px var(--mono);
6307
+ font: 9.5px var(--font-code);
6255
6308
  color: var(--c-dim);
6256
6309
  }
6257
6310
  .command-palette-hint-spacer {
@@ -6308,7 +6361,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6308
6361
  border: 1px solid var(--c-line);
6309
6362
  border-radius: 3px;
6310
6363
  padding: 0 4px;
6311
- font-family: var(--font);
6364
+ font-family: var(--font-ui);
6312
6365
  font-size: 9px;
6313
6366
  line-height: 1.6;
6314
6367
  margin: 0 2px;
@@ -6349,7 +6402,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6349
6402
  border: 1px solid var(--c-line);
6350
6403
  border-radius: 4px;
6351
6404
  padding: 2px 7px;
6352
- font-family: var(--mono);
6405
+ font-family: var(--font-code);
6353
6406
  font-size: 11px;
6354
6407
  color: var(--c-text);
6355
6408
  white-space: nowrap;
@@ -6431,7 +6484,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6431
6484
  border-color: color-mix(in srgb, var(--c-accent) 40%, transparent);
6432
6485
  }
6433
6486
  .empty-state-action.is-agent:hover {
6434
- border-color: color-mix(in srgb, var(--c-purple) 45%, transparent);
6487
+ border-color: color-mix(in srgb, var(--c-agent) 45%, transparent);
6435
6488
  }
6436
6489
  .empty-state-action .tone-accent {
6437
6490
  color: var(--c-accent);
@@ -6443,7 +6496,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6443
6496
  color: var(--c-ok);
6444
6497
  }
6445
6498
  .empty-state-action .tone-purple {
6446
- color: var(--c-purple);
6499
+ color: var(--c-agent);
6447
6500
  }
6448
6501
  .empty-state-action-label {
6449
6502
  flex: 1;
@@ -6454,7 +6507,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6454
6507
  padding: 1px 6px;
6455
6508
  border: 1px solid var(--c-line);
6456
6509
  border-radius: 4px;
6457
- font: 9.5px var(--mono);
6510
+ font: 9.5px var(--font-code);
6458
6511
  color: var(--c-dim);
6459
6512
  }
6460
6513
  .empty-state-action-hint {
@@ -6465,7 +6518,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6465
6518
  background: none;
6466
6519
  border: none;
6467
6520
  padding: 0;
6468
- font: 10.5px var(--mono);
6521
+ font: 10.5px var(--font-code);
6469
6522
  color: var(--c-dim);
6470
6523
  cursor: pointer;
6471
6524
  }
@@ -6497,8 +6550,6 @@ html.is-node-resizing .ext-app-preview-catcher {
6497
6550
  animation: none !important;
6498
6551
  }
6499
6552
 
6500
- .attention-field-region,
6501
- .attention-field-node,
6502
6553
  .canvas-node {
6503
6554
  transition: none !important;
6504
6555
  }
@@ -6599,7 +6650,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6599
6650
  }
6600
6651
 
6601
6652
  .image-node-error-path {
6602
- font-family: var(--mono);
6653
+ font-family: var(--font-code);
6603
6654
  font-size: 10px;
6604
6655
  color: var(--c-muted);
6605
6656
  word-break: break-all;
@@ -6708,8 +6759,8 @@ html.is-node-resizing .ext-app-preview-catcher {
6708
6759
  .intent-ghost-box {
6709
6760
  border: 1.5px dashed var(--c-accent);
6710
6761
  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);
6762
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
6763
+ 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
6764
  animation: intent-breathe 2.1s ease-in-out infinite;
6714
6765
  overflow: visible;
6715
6766
  }
@@ -6738,8 +6789,8 @@ html.is-node-resizing .ext-app-preview-catcher {
6738
6789
  }
6739
6790
 
6740
6791
  @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); }
6792
+ 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); }
6793
+ 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
6794
  }
6744
6795
 
6745
6796
  /* remove — a red crosshatch tombstone over the target */
@@ -6760,7 +6811,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6760
6811
  .intent-ghost-edit {
6761
6812
  border: 1.5px dashed var(--c-accent);
6762
6813
  border-radius: 10px;
6763
- background: var(--c-accent-10);
6814
+ background: color-mix(in srgb, var(--c-accent) 10%, transparent);
6764
6815
  overflow: visible;
6765
6816
  }
6766
6817
 
@@ -6808,7 +6859,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6808
6859
  border-radius: 999px;
6809
6860
  background: color-mix(in srgb, var(--c-panel-glass) 96%, transparent);
6810
6861
  backdrop-filter: blur(10px);
6811
- border: 1px solid var(--c-accent-25);
6862
+ border: 1px solid color-mix(in srgb, var(--c-accent) 25%, transparent);
6812
6863
  box-shadow: 0 4px 14px var(--c-shadow);
6813
6864
  color: var(--c-text);
6814
6865
  font-size: 12px;
@@ -6898,7 +6949,7 @@ html.is-node-resizing .ext-app-preview-catcher {
6898
6949
  }
6899
6950
 
6900
6951
  .intent-edge.type-flow { stroke: var(--c-accent); }
6901
- .intent-edge.type-depends-on { stroke: var(--c-warn); }
6952
+ .intent-edge.type-depends-on { stroke: var(--c-rel-informs); }
6902
6953
  .intent-edge.type-relation { stroke: var(--c-muted); }
6903
6954
  .intent-edge.type-references { stroke: var(--c-dim); }
6904
6955
 
@@ -7037,8 +7088,8 @@ html.is-node-dragging .intent-line-layer {
7037
7088
  .board-switcher-menu .toolbar-menu-item { padding: 10px; gap: 12px; }
7038
7089
  .board-switcher-menu .toolbar-menu-item:hover,
7039
7090
  .board-switcher-menu .toolbar-menu-item:focus-visible {
7040
- background: var(--c-accent-8);
7041
- border-color: var(--c-accent-25);
7091
+ background: color-mix(in srgb, var(--c-accent) 8%, transparent);
7092
+ border-color: color-mix(in srgb, var(--c-accent) 25%, transparent);
7042
7093
  outline: none;
7043
7094
  }
7044
7095
  .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 +7201,7 @@ html.is-node-dragging .intent-line-layer {
7150
7201
  white-space: nowrap;
7151
7202
  }
7152
7203
  .home-board-meta {
7153
- font: 11px var(--mono);
7204
+ font: 11px var(--font-code);
7154
7205
  color: var(--c-text-soft);
7155
7206
  }
7156
7207
  .home-board-confirm-text {
@@ -7283,7 +7334,7 @@ html.is-node-dragging .intent-line-layer {
7283
7334
  }
7284
7335
  .home-section-folder { color: var(--c-dim); }
7285
7336
  .home-section-count {
7286
- font: 11px var(--mono);
7337
+ font: 11px var(--font-code);
7287
7338
  text-transform: none;
7288
7339
  color: var(--c-dim);
7289
7340
  margin-left: auto;
@@ -7348,7 +7399,7 @@ html.is-node-dragging .intent-line-layer {
7348
7399
  .board-copy-card span { display: flex; flex-direction: column; min-width: 0; }
7349
7400
  .board-copy-card strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
7350
7401
  .board-copy-card small,
7351
- .board-link-results small { color: var(--c-text-soft); font: 11px var(--mono); }
7402
+ .board-link-results small { color: var(--c-text-soft); font: 11px var(--font-code); }
7352
7403
  .board-copy-options { font-size: 13px; }
7353
7404
  .board-copy-options label { display: flex; gap: 8px; align-items: center; }
7354
7405
  .board-copy-note,
@@ -7432,7 +7483,7 @@ html.is-node-dragging .intent-line-layer {
7432
7483
  background: var(--c-panel);
7433
7484
  z-index: 1;
7434
7485
  }
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; }
7486
+ .attachment-review pre { white-space: pre-wrap; overflow-wrap: anywhere; font: 12px/1.6 var(--font-code); padding: 12px; background: var(--c-bg); border-radius: 8px; }
7436
7487
  .attachment-review h4 { margin-bottom: 6px; }
7437
7488
  .md-import-source { padding: 6px 12px; font-size: 11px; overflow-wrap: anywhere; color: var(--c-text-soft); border-top: 1px solid var(--c-line); }
7438
7489
  @media (max-width: 640px) {