clay-server 5.0.2-beta.1 → 5.1.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/LICENSES/README.md +4 -0
  2. package/LICENSES/dicebear-avatars.md +16 -0
  3. package/lib/daemon-project-access.js +7 -1
  4. package/lib/daemon.js +2 -0
  5. package/lib/dicebear-avatar.js +62 -0
  6. package/lib/knowledge-db-service.js +175 -0
  7. package/lib/knowledge-db-validation.js +0 -0
  8. package/lib/knowledge-document-index.js +49 -0
  9. package/lib/knowledge-draft-store.js +56 -0
  10. package/lib/knowledge-file-store.js +199 -0
  11. package/lib/knowledge-markdown.js +128 -0
  12. package/lib/mate-knowledge-mcp-server.js +29 -6
  13. package/lib/mate-knowledge-service.js +23 -2
  14. package/lib/mate-knowledge-sync.js +36 -21
  15. package/lib/mate-workspace-color.js +4 -0
  16. package/lib/mates.js +18 -0
  17. package/lib/project-connection.js +36 -2
  18. package/lib/project-debate-proposal.js +6 -0
  19. package/lib/project-debate-workspace.js +43 -0
  20. package/lib/project-debate.js +1 -0
  21. package/lib/project-file-path.js +2 -3
  22. package/lib/project-knowledge.js +315 -136
  23. package/lib/project-mate-creation-proposal.js +1 -0
  24. package/lib/project-request-access.js +13 -1
  25. package/lib/project-sessions.js +39 -2
  26. package/lib/project-user-knowledge.js +60 -0
  27. package/lib/project.js +59 -18
  28. package/lib/public/app.js +73 -34
  29. package/lib/public/clay-studio-wordmark-bold.svg +20 -0
  30. package/lib/public/css/clay-workspace.css +105 -0
  31. package/lib/public/css/debates-workbench.css +47 -0
  32. package/lib/public/css/filebrowser.css +10 -0
  33. package/lib/public/css/home-debate-live.css +26 -0
  34. package/lib/public/css/home-hub.css +3 -1
  35. package/lib/public/css/home-mate-model-picker.css +15 -131
  36. package/lib/public/css/home-mate-settings.css +168 -16
  37. package/lib/public/css/icon-strip.css +249 -32
  38. package/lib/public/css/mate-conversation.css +176 -0
  39. package/lib/public/css/mate-knowledge-workbench.css +118 -0
  40. package/lib/public/css/mate-workspace-color.css +16 -0
  41. package/lib/public/css/mates.css +28 -28
  42. package/lib/public/css/messages.css +1 -114
  43. package/lib/public/css/mobile-nav.css +16 -16
  44. package/lib/public/css/overlays.css +8 -0
  45. package/lib/public/css/project-logs.css +7 -0
  46. package/lib/public/css/project-mate-creation.css +105 -0
  47. package/lib/public/css/right-workbench.css +3 -3
  48. package/lib/public/css/session-folders.css +80 -21
  49. package/lib/public/css/sidebar.css +183 -107
  50. package/lib/public/css/title-bar.css +151 -0
  51. package/lib/public/css/worker-delegation.css +47 -0
  52. package/lib/public/css/worker-proposal.css +72 -150
  53. package/lib/public/css/you.css +74 -0
  54. package/lib/public/index.html +33 -101
  55. package/lib/public/modules/account-island.js +230 -0
  56. package/lib/public/modules/app-cursors.js +19 -43
  57. package/lib/public/modules/app-debate-ui.js +4 -3
  58. package/lib/public/modules/app-header.js +106 -0
  59. package/lib/public/modules/app-message-router.js +12 -3
  60. package/lib/public/modules/app-messages.js +34 -9
  61. package/lib/public/modules/app-notifications.js +4 -7
  62. package/lib/public/modules/app-projects.js +5 -38
  63. package/lib/public/modules/app-rendering.js +12 -13
  64. package/lib/public/modules/avatar.js +25 -9
  65. package/lib/public/modules/chat-render-runtime.js +16 -4
  66. package/lib/public/modules/command-palette.js +2 -15
  67. package/lib/public/modules/cursor-sharing-preference.js +3 -3
  68. package/lib/public/modules/debate-controls.js +299 -0
  69. package/lib/public/modules/debate.js +2 -0
  70. package/lib/public/modules/debates-workbench.js +339 -0
  71. package/lib/public/modules/default-ai.js +81 -65
  72. package/lib/public/modules/filebrowser.js +28 -8
  73. package/lib/public/modules/home-debate-controls.js +18 -289
  74. package/lib/public/modules/home-mate-avatar-editor.js +228 -0
  75. package/lib/public/modules/home-mate-color-picker.js +66 -0
  76. package/lib/public/modules/home-mate-creation.js +1 -1
  77. package/lib/public/modules/home-mate-instructions.js +90 -0
  78. package/lib/public/modules/home-mate-model-picker.js +80 -271
  79. package/lib/public/modules/home-mate-profile-editor.js +72 -0
  80. package/lib/public/modules/home-mate-settings.js +118 -125
  81. package/lib/public/modules/home-shell.js +3 -0
  82. package/lib/public/modules/home-surface-boot.js +1 -9
  83. package/lib/public/modules/html-preview.js +19 -0
  84. package/lib/public/modules/icon-strip-tooltip.js +95 -0
  85. package/lib/public/modules/knowledge-db-edit-state.js +35 -0
  86. package/lib/public/modules/knowledge-db-workbench.js +234 -0
  87. package/lib/public/modules/knowledge-history-state.js +55 -0
  88. package/lib/public/modules/knowledge-markdown-editor.js +57 -0
  89. package/lib/public/modules/knowledge-preview-links.js +70 -0
  90. package/lib/public/modules/knowledge-workbench-shell.js +21 -0
  91. package/lib/public/modules/mate-knowledge-workbench-state.js +174 -0
  92. package/lib/public/modules/mate-knowledge-workbench.js +500 -0
  93. package/lib/public/modules/mate-knowledge.js +11 -3
  94. package/lib/public/modules/mate-management.js +54 -10
  95. package/lib/public/modules/mate-sidebar.js +11 -1
  96. package/lib/public/modules/mate-workspace-color.js +33 -0
  97. package/lib/public/modules/mention.js +5 -13
  98. package/lib/public/modules/profile.js +51 -18
  99. package/lib/public/modules/project-chat-identity.js +79 -0
  100. package/lib/public/modules/project-debate-planning-workspace.js +250 -0
  101. package/lib/public/modules/project-debate-workspace.js +185 -0
  102. package/lib/public/modules/project-header-identity.js +127 -0
  103. package/lib/public/modules/project-logs-render.js +9 -4
  104. package/lib/public/modules/project-mate-creation-workspace.js +414 -0
  105. package/lib/public/modules/project-mate-navigation.js +238 -0
  106. package/lib/public/modules/project-session-navigation.js +29 -0
  107. package/lib/public/modules/project-switcher.js +6 -8
  108. package/lib/public/modules/projects-hub-view.js +5 -6
  109. package/lib/public/modules/projects-hub.js +2 -6
  110. package/lib/public/modules/qrcode.js +27 -8
  111. package/lib/public/modules/search-clay-chat.js +8 -11
  112. package/lib/public/modules/session-activity-tooltip.js +12 -0
  113. package/lib/public/modules/session-create-form.js +86 -14
  114. package/lib/public/modules/session-create.js +50 -7
  115. package/lib/public/modules/session-list-visibility.js +41 -0
  116. package/lib/public/modules/session-presence-ui.js +4 -1
  117. package/lib/public/modules/session-title-marquee.js +51 -0
  118. package/lib/public/modules/sidebar-mates.js +3 -50
  119. package/lib/public/modules/sidebar-mobile.js +63 -60
  120. package/lib/public/modules/sidebar-projects.js +84 -97
  121. package/lib/public/modules/sidebar-session-folders-ui.js +2 -2
  122. package/lib/public/modules/sidebar-session-hierarchy.js +149 -70
  123. package/lib/public/modules/sidebar-sessions.js +49 -50
  124. package/lib/public/modules/sidebar.js +11 -13
  125. package/lib/public/modules/thinking-lifecycle.js +7 -6
  126. package/lib/public/modules/tool-palette-order.js +4 -3
  127. package/lib/public/modules/tool-palette.js +13 -3
  128. package/lib/public/modules/tools.js +22 -22
  129. package/lib/public/modules/worker-proposal.js +42 -8
  130. package/lib/public/modules/worker-runtime-picker.js +115 -0
  131. package/lib/public/modules/you-activity.js +121 -0
  132. package/lib/public/modules/you.js +251 -0
  133. package/lib/public/style.css +16 -8
  134. package/lib/public/vendor/codemirror/LICENSE +21 -0
  135. package/lib/public/vendor/codemirror/codemirror.css +344 -0
  136. package/lib/public/vendor/codemirror/codemirror.js +9884 -0
  137. package/lib/public/vendor/codemirror/continuelist.js +101 -0
  138. package/lib/public/vendor/codemirror/markdown.js +886 -0
  139. package/lib/public/vendor/codemirror/show-hint.css +37 -0
  140. package/lib/public/vendor/codemirror/show-hint.js +523 -0
  141. package/lib/sdk-bridge.js +15 -3
  142. package/lib/server-admin.js +11 -0
  143. package/lib/server-home-chat-events.js +1 -1
  144. package/lib/server-home-chat.js +25 -3
  145. package/lib/server-home-debate-planning.js +4 -1
  146. package/lib/server-home-debates.js +2 -0
  147. package/lib/server-home-mate-creation.js +4 -1
  148. package/lib/server-mate-instructions.js +44 -0
  149. package/lib/server-mates.js +12 -3
  150. package/lib/server-palette.js +1 -1
  151. package/lib/server-settings.js +65 -1
  152. package/lib/server-user-knowledge.js +119 -0
  153. package/lib/server.js +21 -1
  154. package/lib/session-visibility.js +7 -2
  155. package/lib/sessions.js +32 -6
  156. package/lib/user-knowledge-service.js +167 -0
  157. package/lib/users-permissions.js +7 -0
  158. package/lib/users-project-mate-filter-preferences.js +39 -0
  159. package/lib/users.js +6 -0
  160. package/lib/workspace-query-access.js +4 -1
  161. package/lib/ws-schema.js +50 -0
  162. package/package.json +10 -1
@@ -0,0 +1,176 @@
1
+ /* Restore the Home conversation's reading measure inside Mate projects.
2
+ The existing project renderer, queue and composer still own behavior. */
3
+ body.mate-workspace-active { --content-width: 720px; }
4
+ body.mate-workspace-active #messages { padding-inline: max(0px, calc((100% - 720px) / 2)); }
5
+ body.mate-workspace-active #messages > .msg-assistant,
6
+ body.mate-workspace-active #messages > .msg-user {
7
+ width: 100%;
8
+ max-width: 720px;
9
+ box-sizing: border-box;
10
+ margin: 0 auto 12px;
11
+ padding: 4px 20px;
12
+ border-radius: 0;
13
+ }
14
+ body.mate-workspace-active #messages > .msg-assistant {
15
+ display: grid;
16
+ grid-template-columns: 34px minmax(0, 1fr);
17
+ gap: 9px;
18
+ align-items: start;
19
+ }
20
+ body.mate-workspace-active .msg-assistant > .dm-bubble-avatar {
21
+ display: block;
22
+ width: 34px;
23
+ height: 34px;
24
+ margin-top: 1px;
25
+ border-radius: 8px;
26
+ }
27
+ body.mate-workspace-active .msg-assistant > .dm-bubble-content { min-width: 0; }
28
+ body.mate-workspace-active .msg-assistant .dm-bubble-header {
29
+ display: flex;
30
+ align-items: baseline;
31
+ min-height: 19px;
32
+ gap: 7px;
33
+ margin-bottom: 2px;
34
+ }
35
+ body.mate-workspace-active .msg-assistant .dm-bubble-name { font-size: 13px; font-weight: 650; }
36
+ body.mate-workspace-active .msg-assistant .dm-bubble-time { font-size: 10px; color: var(--text-dimmer); }
37
+ body.mate-workspace-active .msg-assistant .md-content { line-height: 1.58; }
38
+ body.mate-workspace-active #messages > .msg-user:not(.msg-user-other):not(.msg-user-delegated) {
39
+ display: flex;
40
+ flex-direction: column;
41
+ align-items: flex-end;
42
+ justify-content: flex-start;
43
+ }
44
+ body.mate-workspace-active .msg-user:not(.msg-user-other):not(.msg-user-delegated) > .msg-actions {
45
+ align-self: flex-end;
46
+ margin-left: 0;
47
+ padding-top: 2px;
48
+ }
49
+ body.mate-workspace-active .msg-user:not(.msg-user-other):not(.msg-user-delegated) > .dm-bubble-avatar,
50
+ body.mate-workspace-active .msg-user:not(.msg-user-other):not(.msg-user-delegated) .dm-bubble-header { display: none; }
51
+ body.mate-workspace-active .msg-user:not(.msg-user-other):not(.msg-user-delegated) > .dm-bubble-content {
52
+ flex: 0 1 auto;
53
+ min-width: 0;
54
+ max-width: min(560px, 100%);
55
+ align-items: flex-end;
56
+ }
57
+ body.mate-workspace-active .msg-user:not(.msg-user-other):not(.msg-user-delegated) .bubble {
58
+ background: var(--bg-alt);
59
+ border: 1px solid var(--border-subtle);
60
+ border-radius: 10px;
61
+ padding: 8px 11px;
62
+ max-width: 100%;
63
+ font-size: 14px;
64
+ line-height: 1.5;
65
+ }
66
+
67
+ /* One writing row, with secondary tools and model selection underneath.
68
+ Display contents preserves the live controls and their event handlers. */
69
+ body.mate-workspace-active #input-wrapper { max-width: 720px; }
70
+ body.mate-workspace-active #input-row,
71
+ body.mate-workspace-active #input-row:focus-within {
72
+ display: grid;
73
+ grid-template-columns: minmax(0, 1fr) auto auto auto;
74
+ gap: 6px 4px;
75
+ padding: 0;
76
+ background: transparent;
77
+ box-shadow: none;
78
+ transform: none;
79
+ border-radius: 0;
80
+ }
81
+ body.mate-workspace-active #input-row::before {
82
+ content: "";
83
+ grid-area: 4 / 1 / 5 / -1;
84
+ align-self: stretch;
85
+ background: var(--bg);
86
+ border: 1px solid var(--border-subtle);
87
+ border-radius: 22px;
88
+ box-shadow: 0 2px 8px rgba(var(--shadow-rgb), .09);
89
+ pointer-events: none;
90
+ transition: border-color 150ms ease, box-shadow 150ms ease;
91
+ }
92
+ body.mate-workspace-active #input-row:focus-within::before {
93
+ border-color: color-mix(in srgb, var(--brand-indigo) 65%, var(--border-subtle));
94
+ box-shadow: 0 2px 6px rgba(var(--shadow-rgb), .12);
95
+ }
96
+ @media (prefers-reduced-motion: reduce) {
97
+ body.mate-workspace-active #input-row::before { transition: none; }
98
+ }
99
+ body.mate-workspace-active #input-bottom,
100
+ body.mate-workspace-active #input-bottom-right { display: contents; }
101
+ body.mate-workspace-active #image-preview-bar { grid-area: 2 / 1 / 3 / -1; }
102
+ body.mate-workspace-active #suggestion-chips { grid-area: 3 / 1 / 4 / -1; }
103
+ body.mate-workspace-active #input-textarea-wrap { grid-area: 4 / 1 / 5 / 2; align-self: center; }
104
+ body.mate-workspace-active #input,
105
+ body.mate-workspace-active #ghost-suggestion {
106
+ display: block;
107
+ font-size: 16px;
108
+ line-height: 1.45;
109
+ padding: 12px 0 12px 15px;
110
+ }
111
+ body.mate-workspace-active #ghost-suggestion.hidden { display: none; }
112
+ body.mate-workspace-active #send-btn,
113
+ body.mate-workspace-active #stt-btn,
114
+ body.mate-workspace-active #input-bottom-right > #generation-stop {
115
+ position: relative;
116
+ align-self: end;
117
+ margin: 7px 0;
118
+ width: 34px;
119
+ height: 34px;
120
+ border-radius: 50%;
121
+ }
122
+ body.mate-workspace-active #send-btn { grid-area: 4 / 4 / 5 / 5; margin-right: 8px; }
123
+ body.mate-workspace-active #input-bottom-right > .stt-controls { grid-area: 4 / 3 / 5 / 4; position: relative; align-self: end; }
124
+ body.mate-workspace-active #input-row .stt-progress { grid-area: 6 / 1 / 7 / -1; }
125
+ body.mate-workspace-active #input-bottom-right > #generation-stop { grid-area: 4 / 2 / 5 / 3; }
126
+ body.mate-workspace-active #attach-wrap { grid-area: 5 / 1 / 6 / 3; min-width: 0; flex-wrap: wrap; }
127
+ body.mate-workspace-active #config-chip-wrap { grid-area: 5 / 3 / 6 / 5; align-self: start; justify-self: end; }
128
+ body.mate-workspace-active #active-vendor-indicator,
129
+ body.mate-workspace-active #attach-wrap .composer-tool-group-collaboration,
130
+ body.mate-workspace-active #attach-wrap .composer-tool-group-execution { display: none; }
131
+ @media (max-width: 768px) {
132
+ /* The rail is absent here; its floating footer must not cover writing tools. */
133
+ body.mate-workspace-active #user-island { display: none; }
134
+ body.mate-workspace-active #messages > .msg-assistant,
135
+ body.mate-workspace-active #messages > .msg-user { padding-inline: 12px; }
136
+ body.mate-workspace-active #input-area { padding-inline: 12px; }
137
+ }
138
+
139
+ body.mate-workspace-active #context-mini { grid-area: 1 / 1 / 2 / -1; }
140
+
141
+ /* Keep the restored conversational action rows aligned with Mate replies. */
142
+ body.mate-workspace-active #messages > .mate-tool-group,
143
+ body.mate-workspace-active #messages > .mate-thinking,
144
+ body.mate-workspace-active #messages > .mate-permission,
145
+ body.mate-workspace-active #messages > .mate-ask-user {
146
+ box-sizing: border-box;
147
+ max-width: 720px;
148
+ margin: 0 auto 12px;
149
+ padding: 4px 20px;
150
+ gap: 9px;
151
+ }
152
+ body.mate-workspace-active .mate-tool-group > .dm-bubble-avatar,
153
+ body.mate-workspace-active .mate-thinking > .dm-bubble-avatar,
154
+ body.mate-workspace-active .mate-permission > .dm-bubble-avatar,
155
+ body.mate-workspace-active .mate-ask-user > .dm-bubble-avatar {
156
+ width: 34px;
157
+ height: 34px;
158
+ border-radius: 8px;
159
+ }
160
+ @media (max-width: 768px) {
161
+ body.mate-workspace-active #messages > .mate-tool-group,
162
+ body.mate-workspace-active #messages > .mate-thinking,
163
+ body.mate-workspace-active #messages > .mate-permission,
164
+ body.mate-workspace-active #messages > .mate-ask-user { padding-inline: 12px; }
165
+ }
166
+
167
+ /* Action summaries belong to the reply's text lane, without repeated identity. */
168
+ body.mate-workspace-active .mate-tool-group > .dm-bubble-avatar { display: none; }
169
+ body.mate-workspace-active #messages > .mate-tool-group {
170
+ padding: 2px 20px 2px 63px;
171
+ margin-bottom: 8px;
172
+ }
173
+ body.mate-workspace-active .mate-tool-group > .dm-bubble-content { padding-top: 0; }
174
+ @media (max-width: 768px) {
175
+ body.mate-workspace-active #messages > .mate-tool-group { padding-inline: 55px 12px; }
176
+ }
@@ -0,0 +1,118 @@
1
+ #mate-knowledge-workbench { position: relative; width: 68%; max-width: 1120px; min-width: 620px; height: calc(100% - 16px); margin: 8px; display: flex; flex-direction: column; flex: 0 0 auto; overflow: hidden; color: var(--text); background: var(--bg); border: 1px solid var(--border); border-radius: 12px; font-family: var(--font-sans); }
2
+ #mate-knowledge-workbench.hidden { display: none; }
3
+ #mate-knowledge-workbench [hidden] { display: none !important; }
4
+ #mate-knowledge-workbench.knowledge-wide { width: 82%; max-width: 1440px; }
5
+ #mate-knowledge-workbench.panel-fullscreen { width: 100%; max-width: none; min-width: 0; height: 100%; margin: 0; border: 0; border-radius: 0; }
6
+ .knowledge-topbar { height: 48px; display: flex; align-items: center; gap: 7px; padding: 0 10px 0 14px; border-bottom: 1px solid var(--border-subtle); flex: 0 0 auto; }
7
+ .knowledge-title { display: inline-flex; align-items: center; gap: 7px; font-size: 13px; font-weight: 700; }
8
+ .knowledge-title .lucide { width: 15px; color: var(--accent); }
9
+ .knowledge-subtitle { flex: 1; color: var(--text-dimmer); font-size: 11px; }
10
+ .knowledge-topbar > button, .knowledge-document-toolbar > button { height: 30px; display: inline-flex; align-items: center; justify-content: center; gap: 5px; padding: 0 8px; color: var(--text-secondary); background: var(--bg-alt); border: 1px solid var(--border); border-radius: 7px; font: inherit; font-size: 11px; cursor: pointer; }
11
+ .knowledge-topbar > button { width: 30px; padding: 0; }
12
+ .knowledge-topbar .lucide, .knowledge-document-toolbar .lucide { width: 14px; }
13
+ .knowledge-topbar > button[aria-pressed="true"] { color: var(--accent); border-color: var(--accent); }
14
+ .knowledge-status { min-height: 0; padding: 0 14px; color: var(--danger); font-size: 11px; line-height: 0; transition: min-height .16s ease, padding .16s ease, line-height .16s ease; }
15
+ .knowledge-status:not(:empty) { min-height: 30px; padding-block: 7px; line-height: 16px; border-bottom: 1px solid color-mix(in srgb, var(--danger) 25%, var(--border)); }
16
+ .knowledge-status button { margin-left: 5px; padding: 0; color: inherit; background: none; border: 0; font: inherit; text-decoration: underline; cursor: pointer; }
17
+ .knowledge-layout { flex: 1; min-height: 0; display: grid; grid-template-columns: 178px minmax(0, 1fr) 170px; }
18
+ .knowledge-explorer, .knowledge-details { min-width: 0; background: color-mix(in srgb, var(--bg-alt) 74%, var(--bg)); }
19
+ .knowledge-explorer { display: flex; flex-direction: column; border-right: 1px solid var(--border-subtle); }
20
+ .knowledge-search { height: 32px; margin: 8px; display: flex; align-items: center; gap: 6px; padding: 0 8px; border: 1px solid var(--border); border-radius: 7px; background: var(--bg); color: var(--text-dimmer); }
21
+ .knowledge-search .lucide { width: 13px; }
22
+ .knowledge-search input { min-width: 0; width: 100%; padding: 0; border: 0; outline: 0; background: transparent; color: var(--text); font: inherit; font-size: 11px; }
23
+ .knowledge-explorer-heading { height: 24px; display: flex; align-items: center; justify-content: space-between; padding: 0 11px; color: var(--text-dimmer); font-size: 9px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
24
+ .knowledge-explorer-list { flex: 1; min-height: 0; overflow: auto; padding: 2px 6px 12px; }
25
+ .knowledge-file-row { width: 100%; height: 30px; display: flex; align-items: center; gap: 7px; padding: 0 7px; color: var(--text-secondary); background: transparent; border: 0; border-radius: 6px; text-align: left; cursor: pointer; }
26
+ .knowledge-folder-row { height: 24px; display: flex; align-items: center; gap: 6px; padding: 4px 7px 0; color: var(--text-dimmer); font-size: 9px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; }
27
+ .knowledge-folder-row .lucide { width: 11px; }
28
+ .knowledge-file-row { padding-left: calc(7px + var(--knowledge-depth, 0) * 9px); }
29
+ .knowledge-file-row:hover { color: var(--text); background: var(--bg-hover); }
30
+ .knowledge-file-row[aria-current="true"] { color: var(--text); background: color-mix(in srgb, var(--accent) 10%, transparent); }
31
+ .knowledge-file-row .lucide { width: 14px; flex: 0 0 auto; }
32
+ .knowledge-file-row span { min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; }
33
+ .knowledge-file-row span em { display: block; overflow: hidden; color: var(--text-dimmer); font-size: 9px; font-style: normal; text-overflow: ellipsis; }
34
+ .knowledge-file-row:has(em) { height: 42px; }
35
+ .knowledge-file-row small { color: var(--text-dimmer); font-size: 9px; }
36
+ .knowledge-search-more { width: calc(100% - 14px); margin: 5px 7px; padding: 6px; color: var(--text-secondary); background: var(--bg-hover); border: 0; border-radius: 6px; font-size: 10px; cursor: pointer; }
37
+ .knowledge-search-more:disabled { cursor: default; opacity: .65; }
38
+ .knowledge-empty { margin: 18px 8px; color: var(--text-dimmer); font-size: 11px; line-height: 1.55; }
39
+ .knowledge-document { min-width: 0; min-height: 0; display: flex; flex-direction: column; background: var(--bg); }
40
+ .knowledge-tabs { height: 34px; display: flex; align-items: end; overflow-x: auto; overflow-y: hidden; border-bottom: 1px solid var(--border-subtle); background: var(--bg-alt); }
41
+ .knowledge-tab-shell { height: 30px; max-width: 190px; display: flex; align-items: center; border-right: 1px solid var(--border-subtle); background: transparent; }
42
+ .knowledge-tab-shell:has(.knowledge-tab[aria-selected="true"]) { background: var(--bg); box-shadow: inset 0 2px 0 var(--accent); }
43
+ .knowledge-tab { min-width: 0; height: 30px; flex: 1; display: flex; align-items: center; padding: 0 4px 0 10px; color: var(--text-dimmer); background: transparent; border: 0; font: inherit; font-size: 11px; cursor: pointer; }
44
+ .knowledge-tab[aria-selected="true"] { color: var(--text); }
45
+ .knowledge-tab span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
46
+ .knowledge-tab-close { width: 22px; height: 22px; flex: 0 0 auto; display: grid; place-items: center; margin-right: 4px; padding: 0; color: var(--text-dimmer); background: transparent; border: 0; border-radius: 4px; font: inherit; font-size: 15px; cursor: pointer; }
47
+ .knowledge-tab-close:hover { color: var(--text); background: var(--bg-hover); }
48
+ .knowledge-document-toolbar { min-height: 42px; display: flex; align-items: center; flex-wrap: wrap; gap: 6px; padding: 5px 8px; border-bottom: 1px solid var(--border-subtle); }
49
+ .knowledge-preview-name { min-width: 0; flex: 1; overflow: hidden; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
50
+ .knowledge-save-state { margin-right: auto; color: var(--text-dimmer); font-size: 10px; }
51
+ .knowledge-name { min-width: 110px; max-width: 260px; flex: 1; display: flex; align-items: center; border: 1px solid transparent; border-radius: 6px; }
52
+ .knowledge-name:focus-within { border-color: var(--accent); }
53
+ .knowledge-name input { min-width: 0; width: 100%; height: 28px; padding: 0 2px 0 7px; border: 0; outline: 0; background: transparent; color: var(--text); font: inherit; font-size: 12px; }
54
+ .knowledge-name span { padding-right: 7px; color: var(--text-dimmer); font-size: 11px; }
55
+ .knowledge-view-toggle { display: flex; padding: 2px; background: var(--bg-alt); border-radius: 7px; }
56
+ .knowledge-view-toggle button { height: 24px; padding: 0 7px; color: var(--text-dimmer); background: transparent; border: 0; border-radius: 5px; font: inherit; font-size: 10px; cursor: pointer; }
57
+ .knowledge-view-toggle button[aria-pressed="true"] { color: var(--text); background: var(--bg); box-shadow: 0 1px 2px rgba(var(--shadow-rgb), .12); }
58
+ .knowledge-document-toolbar > button.primary { color: #fff; background: var(--accent); border-color: var(--accent); }
59
+ .knowledge-document-toolbar > button.danger { color: var(--danger); background: transparent; }
60
+ .knowledge-document-toolbar button:disabled { opacity: .45; cursor: default; }
61
+ .knowledge-readonly { color: var(--text-dimmer); font-size: 10px; }
62
+ .knowledge-inline-error { flex-basis: 100%; color: var(--danger); font-size: 10px; }
63
+ .knowledge-inline-error button { padding: 0; color: inherit; background: none; border: 0; text-decoration: underline; cursor: pointer; }
64
+ .knowledge-document-body { flex: 1; min-height: 0; position: relative; }
65
+ .knowledge-editor-split { width: 100%; height: 100%; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
66
+ .knowledge-editor-host, .knowledge-live-preview { min-width: 0; min-height: 0; }
67
+ .knowledge-editor-host { border-right: 1px solid var(--border-subtle); overflow: hidden; }
68
+ .knowledge-editor-host .CodeMirror { height: 100%; color: var(--text); background: var(--bg); font-family: var(--font-mono); font-size: 13px; line-height: 1.7; }
69
+ .knowledge-editor-host .CodeMirror-scroll { padding: 24px clamp(18px, 4vw, 64px) 70px; box-sizing: border-box; }
70
+ .knowledge-editor-host .CodeMirror-cursor { border-left-color: var(--text); }
71
+ .knowledge-editor-host .CodeMirror-selected { background: color-mix(in srgb, var(--accent) 22%, transparent); }
72
+ .knowledge-editor-host .cm-header { color: var(--text); font-weight: 700; }.knowledge-editor-host .cm-link { color: var(--accent); }.knowledge-editor-host .cm-comment { color: var(--text-dimmer); }
73
+ .knowledge-live-preview { overflow: auto; padding: 24px clamp(18px, 4vw, 64px) 70px; font-size: 14px; line-height: 1.75; }
74
+ .knowledge-editor-fallback { box-sizing: border-box; width: 100%; height: 100%; resize: none; padding: 24px; border: 0; background: var(--bg); color: var(--text); font: 13px/1.7 var(--font-mono); }
75
+ .knowledge-editor { box-sizing: border-box; width: 100%; height: 100%; resize: none; padding: 30px clamp(24px, 6vw, 76px); color: var(--text); background: var(--bg); border: 0; outline: 0; font-family: var(--font-mono); font-size: 13px; line-height: 1.7; tab-size: 2; }
76
+ .knowledge-preview { box-sizing: border-box; height: 100%; overflow: auto; padding: 30px clamp(24px, 6vw, 76px) 80px; font-size: 14px; line-height: 1.75; }
77
+ .knowledge-inline-link { display: inline; padding: 0; color: var(--accent); background: none; border: 0; font: inherit; text-decoration: underline; cursor: pointer; }
78
+ .knowledge-welcome { max-width: 340px; margin: 18vh auto 0; padding: 0 24px; color: var(--text-dimmer); text-align: center; }
79
+ .knowledge-welcome .lucide { width: 28px; }
80
+ .knowledge-welcome h2 { margin: 12px 0 6px; color: var(--text); font-family: var(--font-display); font-size: 22px; }
81
+ .knowledge-welcome p { font-size: 12px; line-height: 1.6; }
82
+ .knowledge-details { overflow: auto; border-left: 1px solid var(--border-subtle); }
83
+ .knowledge-detail-section { border-bottom: 1px solid var(--border-subtle); }
84
+ .knowledge-detail-heading { width: 100%; height: 32px; display: flex; align-items: center; justify-content: space-between; padding: 0 10px; color: var(--text-secondary); background: transparent; border: 0; font: inherit; font-size: 10px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; cursor: pointer; }
85
+ .knowledge-detail-heading .lucide { width: 12px; transition: transform .16s ease; }
86
+ .knowledge-detail-heading[aria-expanded="false"] .lucide { transform: rotate(-90deg); }
87
+ [data-detail-content] { padding: 3px 7px 10px; }
88
+ [data-detail-content] > p { margin: 8px 4px; color: var(--text-dimmer); font-size: 10px; line-height: 1.5; }
89
+ [data-detail-content] > small { display: block; margin: 8px 4px 4px; color: var(--text-dimmer); font-size: 8px; letter-spacing: .06em; }
90
+ .knowledge-outline-item, .knowledge-link-item { width: 100%; min-height: 25px; display: flex; align-items: center; gap: 5px; padding: 3px 5px; overflow: hidden; color: var(--text-secondary); background: transparent; border: 0; border-radius: 5px; font: inherit; font-size: 10px; text-align: left; }
91
+ .knowledge-outline-item.depth-2 { padding-left: 13px; }.knowledge-outline-item.depth-3 { padding-left: 21px; }.knowledge-outline-item.depth-4 { padding-left: 29px; }
92
+ .knowledge-link-item .lucide { width: 11px; flex: 0 0 auto; }.knowledge-link-item span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
93
+ .knowledge-link-item.unresolved { color: var(--text-dimmer); }.knowledge-backlink { align-items: flex-start; height: auto; }.knowledge-backlink span { white-space: normal; }.knowledge-backlink b, .knowledge-backlink em { display: block; }.knowledge-backlink em { margin-top: 2px; color: var(--text-dimmer); font-size: 9px; font-style: normal; line-height: 1.35; }
94
+ .knowledge-tags { display: flex; flex-wrap: wrap; gap: 4px; padding: 3px 4px 9px; }.knowledge-tags span { padding: 2px 5px; border: 1px solid var(--border-subtle); border-radius: 5px; color: var(--text-secondary); font-size: 9px; }
95
+ .knowledge-properties { display: grid; grid-template-columns: minmax(44px, auto) minmax(0, 1fr); gap: 4px 7px; margin: 3px 4px 9px; font-size: 9px; }.knowledge-properties dt { color: var(--text-dimmer); }.knowledge-properties dd { min-width: 0; margin: 0; overflow-wrap: anywhere; }.knowledge-property-error { color: var(--danger) !important; }
96
+ #mate-knowledge-workbench.panel-fullscreen .knowledge-layout { grid-template-columns: minmax(0, 1fr); }
97
+ #mate-knowledge-workbench.panel-fullscreen .knowledge-explorer, #mate-knowledge-workbench.panel-fullscreen .knowledge-details, #mate-knowledge-workbench.panel-fullscreen .knowledge-tabs { display: none; }
98
+ button.knowledge-link-item { cursor: pointer; }.knowledge-outline-item:hover, button.knowledge-link-item:hover { color: var(--text); background: var(--bg-hover); }
99
+ .knowledge-delete-dialog { position: absolute; inset: 0; z-index: 4; display: grid; place-items: center; padding: 24px; background: rgba(0,0,0,.38); }
100
+ .knowledge-delete-dialog.hidden { display: none; }.knowledge-delete-dialog > div { width: min(360px, 100%); padding: 22px; box-sizing: border-box; background: var(--bg); border: 1px solid var(--border); border-radius: 10px; box-shadow: 0 14px 40px rgba(0,0,0,.24); }
101
+ .knowledge-delete-dialog h2 { margin: 0 0 8px; font-family: var(--font-display); font-size: 18px; }.knowledge-delete-dialog p { color: var(--text-secondary); font-size: 12px; line-height: 1.55; }.knowledge-delete-dialog > div > div { display: flex; justify-content: flex-end; gap: 8px; margin-top: 18px; }.knowledge-delete-dialog button { height: 32px; padding: 0 10px; border: 1px solid var(--border); border-radius: 7px; background: var(--bg-alt); color: var(--text); }.knowledge-delete-dialog button.danger { color: #fff; background: var(--danger); border-color: var(--danger); }
102
+ #mate-knowledge-workbench :focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
103
+ @media (max-width: 1023px) { #mate-knowledge-workbench, #mate-knowledge-workbench.knowledge-wide { position: fixed; inset: 0; z-index: 300; width: 100%; max-width: none; min-width: 0; height: 100%; margin: 0; border: 0; border-radius: 0; padding-block: var(--safe-top, 0) var(--safe-bottom, 0); box-sizing: border-box; }.knowledge-topbar [data-knowledge-wide], .knowledge-topbar [data-knowledge-full] { display: none; }.knowledge-layout { grid-template-columns: 148px minmax(0, 1fr); }.knowledge-details { display: none; }.knowledge-subtitle { display: none; } }
104
+ @media (max-width: 600px) { .knowledge-layout { grid-template-columns: 112px minmax(0, 1fr); }.knowledge-search { margin: 6px; }.knowledge-search .lucide { display: none; }.knowledge-file-row { padding-inline: 5px; }.knowledge-file-row .lucide, .knowledge-file-row small { display: none; }.knowledge-document-toolbar { flex-wrap: wrap; }.knowledge-name { flex-basis: calc(100% - 110px); }.knowledge-editor, .knowledge-preview { padding: 22px 16px 70px; }.knowledge-topbar { padding-left: 10px; }.knowledge-editor-split { grid-template-columns: minmax(0, 1fr); }.knowledge-live-preview { display: none; } }
105
+ @media (prefers-reduced-motion: reduce) { #mate-knowledge-workbench * { transition: none !important; animation: none !important; } }
106
+
107
+ .knowledge-create-menu { position: absolute; z-index: 5; top: 42px; right: 104px; width: 190px; padding: 5px; background: var(--bg); border: 1px solid var(--border); border-radius: 9px; box-shadow: 0 10px 28px rgba(0,0,0,.2); }
108
+ .knowledge-create-menu button { width: 100%; min-height: 38px; display: flex; align-items: center; gap: 8px; padding: 6px 8px; color: var(--text); background: transparent; border: 0; border-radius: 6px; text-align: left; cursor: pointer; }
109
+ .knowledge-create-menu button:hover { background: var(--bg-hover); }.knowledge-create-menu .lucide { width: 15px; }.knowledge-create-menu span { display: grid; gap: 1px; font-size: 11px; }.knowledge-create-menu small { color: var(--text-dimmer); font-size: 9px; }
110
+ .knowledge-db-table-wrap { height: 100%; overflow: auto; }.knowledge-db-table { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 11px; }.knowledge-db-table th { position: sticky; top: 0; z-index: 1; height: 30px; padding: 0 9px; color: var(--text-dimmer); background: var(--bg-alt); border-bottom: 1px solid var(--border); border-right: 1px solid var(--border-subtle); font-size: 9px; text-align: left; text-transform: uppercase; letter-spacing: .04em; }.knowledge-db-table td { min-width: 110px; max-width: 260px; height: 31px; padding: 0 9px; overflow: hidden; border-bottom: 1px solid var(--border-subtle); border-right: 1px solid var(--border-subtle); text-overflow: ellipsis; white-space: nowrap; }.knowledge-db-table tbody tr { cursor: pointer; }.knowledge-db-table tbody tr:hover td, .knowledge-db-table tbody tr:focus td { background: var(--bg-hover); }.knowledge-db-empty { color: var(--text-dimmer); }.knowledge-db-pill { display: inline-block; margin-right: 3px; padding: 1px 5px; border: 1px solid var(--border-subtle); border-radius: 8px; font-size: 9px; }
111
+ .knowledge-db-reference { display: inline-flex; align-items: center; gap: 4px; max-width: 100%; padding: 0; overflow: hidden; color: var(--accent); background: none; border: 0; font: inherit; text-overflow: ellipsis; cursor: pointer; }.knowledge-db-reference .lucide { width: 11px; flex: 0 0 auto; }
112
+ .knowledge-db-view-select { height: 28px; max-width: 150px; padding: 0 24px 0 8px; color: var(--text); background: var(--bg-alt); border: 1px solid var(--border); border-radius: 7px; font: 10px var(--font-sans); }
113
+ .knowledge-db-record { max-width: 720px; margin: 0 auto; padding: 28px clamp(20px,5vw,64px) 70px; }.knowledge-db-record > button { display: inline-flex; align-items: center; gap: 5px; padding: 0; color: var(--text-secondary); background: none; border: 0; font: inherit; font-size: 11px; cursor: pointer; }.knowledge-db-record > button .lucide { width: 13px; }.knowledge-db-record h2 { margin: 24px 0; font: 600 24px var(--font-display); }.knowledge-db-record dl { display: grid; grid-template-columns: minmax(100px,160px) minmax(0,1fr); gap: 0; border-top: 1px solid var(--border-subtle); }.knowledge-db-record dt,.knowledge-db-record dd { min-height: 34px; box-sizing: border-box; margin: 0; padding: 8px; border-bottom: 1px solid var(--border-subtle); font-size: 11px; }.knowledge-db-record dt { color: var(--text-dimmer); }.knowledge-db-attribution { margin-top: 18px; color: var(--text-dimmer); font-size: 9px; }
114
+ .knowledge-db-form { width: min(680px,calc(100% - 40px)); margin: 0 auto; padding: 30px 0 80px; }.knowledge-db-form h2 { margin: 0 0 22px; font: 600 23px var(--font-display); }.knowledge-db-form > p { color: var(--text-dimmer); font-size: 11px; line-height: 1.55; }.knowledge-db-form > label { display: grid; gap: 6px; margin: 0 0 15px; color: var(--text-secondary); font-size: 10px; font-weight: 600; }.knowledge-db-form input:not([type=checkbox]),.knowledge-db-form select { width: 100%; min-height: 36px; box-sizing: border-box; padding: 7px 9px; color: var(--text); background: var(--bg-alt); border: 1px solid var(--border); border-radius: 8px; font: 12px var(--font-sans); }.knowledge-db-form select[multiple] { min-height: 90px; }.knowledge-db-schema fieldset { display: grid; grid-template-columns:minmax(0,1fr) auto auto; align-items:end; gap: 10px; margin: 0 0 10px; padding: 10px; border: 1px solid var(--border-subtle); border-radius: 8px; }.knowledge-db-schema legend { padding: 0 5px; color: var(--text-dimmer); font-size: 9px; text-transform: uppercase; }.knowledge-db-schema fieldset > label:first-of-type { display:grid; gap:4px; font-size:9px; }.knowledge-db-check { display:flex; align-items:center; gap:4px; min-height:36px; font-size:10px; }
115
+ .knowledge-db-dialog { position:absolute; inset:0; z-index:7; display:grid; place-items:center; background:rgba(0,0,0,.38); }.knowledge-db-dialog > div { width:min(360px,calc(100% - 36px)); padding:22px; box-sizing:border-box; background:var(--bg); border:1px solid var(--border); border-radius:10px; box-shadow:0 14px 40px rgba(0,0,0,.24); }.knowledge-db-dialog h2 { margin:0 0 8px; font:600 18px var(--font-display); }.knowledge-db-dialog p { color:var(--text-secondary); font-size:12px; }.knowledge-db-dialog > div > div { display:flex; justify-content:flex-end; gap:8px; margin-top:18px; }.knowledge-db-dialog button { height:32px; padding:0 10px; color:var(--text); background:var(--bg-alt); border:1px solid var(--border); border-radius:7px; }.knowledge-db-dialog button.danger { color:#fff; background:var(--danger); border-color:var(--danger); }
116
+ .knowledge-db-form fieldset { margin:0 0 15px; padding:10px; border:1px solid var(--border-subtle); border-radius:8px; }.knowledge-db-form fieldset legend { padding:0 5px; color:var(--text-dimmer); font-size:9px; text-transform:uppercase; }.knowledge-db-schema fieldset { grid-template-columns:minmax(0,1fr) minmax(100px,150px) auto auto; }.knowledge-db-schema fieldset > label:not(.knowledge-db-check) { display:grid; gap:4px; color:var(--text-secondary); font-size:9px; }
117
+ .knowledge-db-schema .knowledge-db-options { display:grid; grid-template-columns:minmax(0,1fr); gap:6px; grid-column:1 / -1; align-items:stretch; }.knowledge-db-option { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:8px; align-items:center; }.knowledge-db-option .knowledge-db-check { margin:0; }
118
+ @media (max-width:600px) { .knowledge-db-table td { min-width:92px; }.knowledge-db-form { width:calc(100% - 28px); }.knowledge-db-schema fieldset { grid-template-columns:minmax(0,1fr); }.knowledge-db-record dl { grid-template-columns:90px minmax(0,1fr); } }
@@ -0,0 +1,16 @@
1
+ /* Curated pigments, with both theme treatments visible before choosing. */
2
+ .mate-color-picker { margin: 24px 0; }
3
+ .mate-color-picker h4 { margin: 0 0 6px; font-size: 14px; }
4
+ .mate-color-previews { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 12px 0; }
5
+ .mate-color-preview { border-radius: 10px; border: 1px solid rgba(127,127,127,.22); padding: 10px; color: #252522; }
6
+ .mate-color-preview.dark { color: #e8e8e2; }
7
+ .mate-color-preview-label { display: block; font-size: 11px; margin-bottom: 8px; }
8
+ .mate-color-preview-canvas { display: flex; flex-direction: column; gap: 5px; background: #fafaf8; border-radius: 6px; padding: 12px; box-shadow: 0 1px 2px rgba(0,0,0,.08); }
9
+ .dark .mate-color-preview-canvas { background: #2b2b29; }
10
+ .mate-color-preview-canvas strong { font-size: 12px; font-weight: 500; }
11
+ .mate-color-preview-canvas span { font-size: 11px; line-height: 1.4; }
12
+ .mate-color-swatches { display: flex; flex-wrap: wrap; gap: 8px; padding: 4px 2px; }
13
+ .mate-color-swatch { width: 28px; height: 28px; border-radius: 50%; background: var(--swatch); color: #171717; border: 1px solid rgba(0,0,0,.16); font-size: 15px; cursor: pointer; box-shadow: inset 0 1px 0 rgba(255,255,255,.3); }
14
+ .mate-color-swatch[aria-pressed="true"] { outline: 2px solid var(--text); outline-offset: 2px; }
15
+ .mate-color-swatch:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
16
+ .mate-color-swatch[aria-disabled="true"] { cursor: wait; opacity: .6; }
@@ -2396,7 +2396,7 @@ body.mate-dm-active .turn-meta {
2396
2396
 
2397
2397
  /* --- Mate Thinking: flex layout matching msg-assistant --- */
2398
2398
  /* Applies in both Mate DM and channel project chat */
2399
- body.mate-dm-active .mate-thinking,
2399
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-thinking,
2400
2400
  body.wide-view .mate-thinking {
2401
2401
  display: flex;
2402
2402
  flex-direction: row;
@@ -2406,11 +2406,11 @@ body.wide-view .mate-thinking {
2406
2406
  margin: 0;
2407
2407
  max-width: 100%;
2408
2408
  }
2409
- body.mate-dm-active .mate-thinking:hover,
2409
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-thinking:hover,
2410
2410
  body.wide-view .mate-thinking:hover {
2411
2411
  background: var(--bg-alt);
2412
2412
  }
2413
- body.mate-dm-active .mate-thinking > .dm-bubble-avatar,
2413
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-thinking > .dm-bubble-avatar,
2414
2414
  body.wide-view .mate-thinking > .dm-bubble-avatar {
2415
2415
  display: block;
2416
2416
  width: 36px;
@@ -2419,7 +2419,7 @@ body.wide-view .mate-thinking > .dm-bubble-avatar {
2419
2419
  flex-shrink: 0;
2420
2420
  margin-top: 2px;
2421
2421
  }
2422
- body.mate-dm-active .mate-thinking > .dm-bubble-content,
2422
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-thinking > .dm-bubble-content,
2423
2423
  body.wide-view .mate-thinking > .dm-bubble-content {
2424
2424
  flex: 1;
2425
2425
  min-width: 0;
@@ -2431,7 +2431,7 @@ body.wide-view .mate-thinking > .dm-bubble-content {
2431
2431
  gap: 4px;
2432
2432
  padding: 4px 0;
2433
2433
  }
2434
- body.mate-dm-active .mate-thinking:not(.done) .mate-thinking-row,
2434
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-thinking:not(.done) .mate-thinking-row,
2435
2435
  body.wide-view .mate-thinking:not(.done) .mate-thinking-row {
2436
2436
  display: flex;
2437
2437
  }
@@ -2459,15 +2459,15 @@ body.wide-view .mate-thinking:not(.done) .mate-thinking-row {
2459
2459
  }
2460
2460
 
2461
2461
  /* When done, hide mate row (JS does this too), show compact expandable header */
2462
- body.mate-dm-active .mate-thinking.done .mate-thinking-row,
2462
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-thinking.done .mate-thinking-row,
2463
2463
  body.wide-view .mate-thinking.done .mate-thinking-row {
2464
2464
  display: none;
2465
2465
  }
2466
- body.mate-dm-active .mate-thinking.done .mate-thinking-activity,
2466
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-thinking.done .mate-thinking-activity,
2467
2467
  body.wide-view .mate-thinking.done .mate-thinking-activity {
2468
2468
  display: none;
2469
2469
  }
2470
- body.mate-dm-active .mate-thinking.done .thinking-header,
2470
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-thinking.done .thinking-header,
2471
2471
  body.wide-view .mate-thinking.done .thinking-header {
2472
2472
  display: inline-flex !important;
2473
2473
  font-size: 12px;
@@ -2477,24 +2477,24 @@ body.wide-view .mate-thinking.done .thinking-header {
2477
2477
  opacity: 0.7;
2478
2478
  transition: opacity 0.15s;
2479
2479
  }
2480
- body.mate-dm-active .mate-thinking.done .thinking-header:hover,
2480
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-thinking.done .thinking-header:hover,
2481
2481
  body.wide-view .mate-thinking.done .thinking-header:hover {
2482
2482
  opacity: 1;
2483
2483
  background: rgba(var(--overlay-rgb), 0.08);
2484
2484
  }
2485
- body.mate-dm-active .mate-thinking .thinking-content,
2485
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-thinking .thinking-content,
2486
2486
  body.wide-view .mate-thinking .thinking-content {
2487
2487
  max-height: 0;
2488
2488
  overflow: hidden;
2489
2489
  transition: max-height 0.25s ease;
2490
2490
  }
2491
- body.mate-dm-active .mate-thinking.expanded .thinking-content,
2491
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-thinking.expanded .thinking-content,
2492
2492
  body.wide-view .mate-thinking.expanded .thinking-content {
2493
2493
  max-height: 2000px;
2494
2494
  }
2495
2495
 
2496
2496
  /* --- Mate Tool Group: flex layout matching msg-assistant --- */
2497
- body.mate-dm-active .mate-tool-group {
2497
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-tool-group {
2498
2498
  display: flex;
2499
2499
  flex-direction: row;
2500
2500
  align-items: flex-start;
@@ -2503,10 +2503,10 @@ body.mate-dm-active .mate-tool-group {
2503
2503
  margin: 0;
2504
2504
  max-width: 100%;
2505
2505
  }
2506
- body.mate-dm-active .mate-tool-group:hover {
2506
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-tool-group:hover {
2507
2507
  background: var(--bg-alt);
2508
2508
  }
2509
- body.mate-dm-active .mate-tool-group > .dm-bubble-avatar {
2509
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-tool-group > .dm-bubble-avatar {
2510
2510
  display: block;
2511
2511
  width: 36px;
2512
2512
  height: 36px;
@@ -2514,12 +2514,12 @@ body.mate-dm-active .mate-tool-group > .dm-bubble-avatar {
2514
2514
  flex-shrink: 0;
2515
2515
  margin-top: 2px;
2516
2516
  }
2517
- body.mate-dm-active .mate-tool-group > .dm-bubble-content {
2517
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-tool-group > .dm-bubble-content {
2518
2518
  flex: 1;
2519
2519
  min-width: 0;
2520
2520
  padding-top: 6px;
2521
2521
  }
2522
- body.mate-dm-active .mate-tool-group .tool-group-header {
2522
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-tool-group .tool-group-header {
2523
2523
  font-size: 12px;
2524
2524
  padding: 4px 10px;
2525
2525
  background: rgba(var(--overlay-rgb), 0.04);
@@ -2527,26 +2527,26 @@ body.mate-dm-active .mate-tool-group .tool-group-header {
2527
2527
  opacity: 0.7;
2528
2528
  transition: opacity 0.15s;
2529
2529
  }
2530
- body.mate-dm-active .mate-tool-group .tool-group-header:hover {
2530
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-tool-group .tool-group-header:hover {
2531
2531
  opacity: 1;
2532
2532
  background: rgba(var(--overlay-rgb), 0.08);
2533
2533
  }
2534
- body.mate-dm-active .mate-tool-group .tool-group-label {
2534
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-tool-group .tool-group-label {
2535
2535
  font-size: 12px;
2536
2536
  }
2537
- body.mate-dm-active .mate-tool-group .tool-item {
2537
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-tool-group .tool-item {
2538
2538
  border: none;
2539
2539
  background: none;
2540
2540
  padding: 2px 0;
2541
2541
  }
2542
- body.mate-dm-active .mate-tool-group .tool-name {
2542
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-tool-group .tool-name {
2543
2543
  font-size: 13px;
2544
2544
  color: var(--text-muted);
2545
2545
  }
2546
2546
 
2547
2547
  /* --- Conversational Permission: flex layout matching msg-assistant --- */
2548
2548
  /* Applies in both Mate DM and channel project chat */
2549
- body.mate-dm-active .mate-permission,
2549
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-permission,
2550
2550
  body.wide-view .mate-permission {
2551
2551
  display: flex;
2552
2552
  flex-direction: row;
@@ -2560,11 +2560,11 @@ body.wide-view .mate-permission {
2560
2560
  margin: 0;
2561
2561
  max-width: 100%;
2562
2562
  }
2563
- body.mate-dm-active .mate-permission:hover,
2563
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-permission:hover,
2564
2564
  body.wide-view .mate-permission:hover {
2565
2565
  background: var(--bg-alt);
2566
2566
  }
2567
- body.mate-dm-active .mate-permission > .dm-bubble-avatar,
2567
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-permission > .dm-bubble-avatar,
2568
2568
  body.wide-view .mate-permission > .dm-bubble-avatar {
2569
2569
  display: block;
2570
2570
  width: 36px;
@@ -2573,7 +2573,7 @@ body.wide-view .mate-permission > .dm-bubble-avatar {
2573
2573
  flex-shrink: 0;
2574
2574
  margin-top: 2px;
2575
2575
  }
2576
- body.mate-dm-active .mate-permission > .dm-bubble-content,
2576
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-permission > .dm-bubble-content,
2577
2577
  body.wide-view .mate-permission > .dm-bubble-content {
2578
2578
  flex: 1;
2579
2579
  min-width: 0;
@@ -2657,7 +2657,7 @@ body.wide-view .mate-permission > .dm-bubble-content {
2657
2657
  /* --- Mate Activity: avatar + text --- */
2658
2658
 
2659
2659
  /* --- Mate AskUserQuestion: avatar + content layout (matches msg-assistant) --- */
2660
- body.mate-dm-active .mate-ask-user {
2660
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-ask-user {
2661
2661
  display: flex;
2662
2662
  flex-direction: row;
2663
2663
  align-items: flex-start;
@@ -2666,10 +2666,10 @@ body.mate-dm-active .mate-ask-user {
2666
2666
  margin: 0;
2667
2667
  max-width: 100%;
2668
2668
  }
2669
- body.mate-dm-active .mate-ask-user:hover {
2669
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-ask-user:hover {
2670
2670
  background: var(--bg-alt);
2671
2671
  }
2672
- body.mate-dm-active .mate-ask-user > .dm-bubble-avatar {
2672
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-ask-user > .dm-bubble-avatar {
2673
2673
  display: block;
2674
2674
  width: 36px;
2675
2675
  height: 36px;
@@ -2677,7 +2677,7 @@ body.mate-dm-active .mate-ask-user > .dm-bubble-avatar {
2677
2677
  flex-shrink: 0;
2678
2678
  margin-top: 2px;
2679
2679
  }
2680
- body.mate-dm-active .mate-ask-user > .dm-bubble-content {
2680
+ body:is(.mate-dm-active, .mate-workspace-active) .mate-ask-user > .dm-bubble-content {
2681
2681
  flex: 1;
2682
2682
  min-width: 0;
2683
2683
  }
@@ -174,120 +174,7 @@
174
174
  display: flex;
175
175
  }
176
176
 
177
- /* --- Delegated work-order card ------------------------------------- */
178
- /* Self-contained: the generic bubble avatar/name/time are hidden and the
179
- identity lives in the card's own header strip. The body stays on a
180
- neutral background, with a restrained routing color for metadata. */
181
- .msg-user-delegated .dm-bubble-avatar,
182
- .msg-user-delegated .dm-bubble-header {
183
- display: none;
184
- }
185
-
186
- .msg-user-delegated .bubble {
187
- padding: 0;
188
- overflow: hidden;
189
- background: var(--bg);
190
- border: 1px solid var(--border);
191
- border-top: 1px solid color-mix(in srgb, var(--link) 55%, var(--border));
192
- border-radius: 12px;
193
- max-width: min(720px, 100%);
194
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.14), 0 4px 14px rgba(0, 0, 0, 0.08);
195
- }
196
-
197
- .delegated-card-head {
198
- display: flex;
199
- align-items: center;
200
- gap: 10px;
201
- padding: 10px 14px;
202
- background: linear-gradient(to bottom,
203
- color-mix(in srgb, var(--link) 3%, var(--bg-alt)),
204
- var(--bg-alt));
205
- border-bottom: 1px solid var(--border-subtle);
206
- }
207
-
208
- .delegated-card-avatar {
209
- width: 24px;
210
- height: 24px;
211
- border-radius: 7px;
212
- flex-shrink: 0;
213
- }
214
-
215
- .delegated-card-headtext {
216
- display: grid;
217
- gap: 1px;
218
- min-width: 0;
219
- flex: 1;
220
- }
221
-
222
- .delegated-card-eyebrow {
223
- font-size: 9px;
224
- font-weight: 700;
225
- letter-spacing: 0.09em;
226
- text-transform: uppercase;
227
- color: color-mix(in srgb, var(--link) 68%, var(--text-secondary));
228
- line-height: 1;
229
- }
230
-
231
- .delegated-card-from {
232
- font-size: 12.5px;
233
- font-weight: 650;
234
- color: var(--text);
235
- overflow: hidden;
236
- text-overflow: ellipsis;
237
- white-space: nowrap;
238
- }
239
-
240
- .delegated-card-time {
241
- font-size: 10px;
242
- color: var(--text-dimmer);
243
- flex-shrink: 0;
244
- align-self: flex-start;
245
- margin-top: 2px;
246
- }
247
-
248
- .msg-user-delegated .delegated-brief {
249
- padding: 13px 16px 15px;
250
- font-size: 13px;
251
- line-height: 1.7;
252
- }
253
- .msg-user-delegated .delegated-brief > :first-child { margin-top: 0; }
254
- .msg-user-delegated .delegated-brief > :last-child { margin-bottom: 0; }
255
- .msg-user-delegated .delegated-brief p { margin: 8px 0; }
256
- .msg-user-delegated .delegated-brief pre {
257
- max-width: 100%;
258
- overflow-x: auto;
259
- border: 1px solid var(--border-subtle);
260
- border-radius: 8px;
261
- }
262
- .msg-user-delegated .delegated-brief code {
263
- font-size: 12px;
264
- }
265
- .msg-user-delegated .delegated-brief h1,
266
- .msg-user-delegated .delegated-brief h2,
267
- .msg-user-delegated .delegated-brief h3 {
268
- font-size: 13px;
269
- font-weight: 700;
270
- margin: 14px 0 4px;
271
- }
272
- .msg-user-delegated .delegated-brief ol,
273
- .msg-user-delegated .delegated-brief ul {
274
- padding-left: 20px;
275
- margin: 6px 0;
276
- }
277
- .msg-user-delegated .delegated-brief li { margin: 3px 0; }
278
- .msg-user-delegated .delegated-brief li::marker {
279
- color: color-mix(in srgb, var(--link) 52%, var(--text-muted));
280
- font-weight: 600;
281
- }
282
-
283
- .msg-user-delegated .dm-bubble-avatar-other {
284
- border-radius: 7px;
285
- }
286
-
287
- .msg-user-delegated .dm-bubble-name {
288
- color: color-mix(in srgb, var(--link) 62%, var(--text-secondary));
289
- font-weight: 600;
290
- }
177
+ /* Delegated instruction briefs are styled in worker-delegation.css. */
291
178
 
292
179
  /* --- User message action bar --- */
293
180
  .msg-actions {