clay-server 3.8.1 → 4.0.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 (189) hide show
  1. package/lib/ask-user-mcp-server.js +5 -119
  2. package/lib/builtin-mates.js +6 -6
  3. package/lib/claude-hook-installer.js +15 -0
  4. package/lib/clay-history-mcp-server.js +62 -297
  5. package/lib/daemon.js +1 -1
  6. package/lib/debate-model-selection.js +119 -0
  7. package/lib/home-debate-tool-policy.js +164 -0
  8. package/lib/home-response-notifications.js +26 -0
  9. package/lib/mate-creation-mcp-server.js +55 -0
  10. package/lib/mate-ready-creation.js +95 -0
  11. package/lib/mates.js +2 -0
  12. package/lib/notes.js +2 -1
  13. package/lib/project-ask-user.js +64 -0
  14. package/lib/project-capsule-catalog.js +101 -0
  15. package/lib/project-connection.js +4 -0
  16. package/lib/project-debate-proposal.js +133 -17
  17. package/lib/project-debate.js +214 -110
  18. package/lib/project-delegated-follow-up.js +84 -0
  19. package/lib/project-delegated-session.js +53 -0
  20. package/lib/project-filesystem.js +7 -9
  21. package/lib/project-knowledge.js +1 -0
  22. package/lib/project-mate-creation-proposal.js +120 -0
  23. package/lib/project-memory.js +14 -7
  24. package/lib/project-models.js +157 -32
  25. package/lib/project-session-notes.js +2 -2
  26. package/lib/project-session-pair.js +8 -8
  27. package/lib/project-sessions.js +66 -51
  28. package/lib/project-vendor-login.js +397 -0
  29. package/lib/project-worker-proposal.js +25 -25
  30. package/lib/project-workspace-query.js +144 -0
  31. package/lib/project.js +349 -102
  32. package/lib/public/app.js +85 -42
  33. package/lib/public/css/avatar-imprints.css +0 -1
  34. package/lib/public/css/base.css +4 -0
  35. package/lib/public/css/capsule-ui.css +389 -0
  36. package/lib/public/css/command-palette.css +306 -6
  37. package/lib/public/css/home-capsule-library.css +243 -0
  38. package/lib/public/css/home-capsule-source.css +192 -0
  39. package/lib/public/css/home-debate-live.css +146 -0
  40. package/lib/public/css/home-debate-planning.css +125 -0
  41. package/lib/public/css/home-debates-archive.css +281 -0
  42. package/lib/public/css/home-hub.css +896 -405
  43. package/lib/public/css/home-mate-creation.css +34 -0
  44. package/lib/public/css/home-mate-model-picker.css +131 -0
  45. package/lib/public/css/home-mate-settings.css +344 -0
  46. package/lib/public/css/home-session-actions.css +265 -0
  47. package/lib/public/css/home-sidebar.css +667 -0
  48. package/lib/public/css/icon-strip.css +1 -2
  49. package/lib/public/css/mates.css +7 -34
  50. package/lib/public/css/pane.css +1 -1
  51. package/lib/public/css/playbook.css +0 -80
  52. package/lib/public/css/sticky-notes.css +53 -117
  53. package/lib/public/css/tui-attention.css +0 -44
  54. package/lib/public/css/workspace-assignment.css +45 -0
  55. package/lib/public/fonts/source-serif-4/LICENSE.md +93 -0
  56. package/lib/public/fonts/source-serif-4/SourceSerif4Caption-Semibold.ttf.woff2 +0 -0
  57. package/lib/public/index.html +93 -74
  58. package/lib/public/modules/app-connection.js +10 -1
  59. package/lib/public/modules/app-dm.js +43 -160
  60. package/lib/public/modules/app-home-hub.js +328 -585
  61. package/lib/public/modules/app-message-cards.js +242 -0
  62. package/lib/public/modules/app-message-router.js +84 -0
  63. package/lib/public/modules/app-messages.js +102 -37
  64. package/lib/public/modules/app-notifications.js +8 -119
  65. package/lib/public/modules/app-projects.js +9 -1
  66. package/lib/public/modules/app-rendering.js +21 -602
  67. package/lib/public/modules/avatar-imprint.js +11 -8
  68. package/lib/public/modules/chat-bubble-renderer.js +152 -0
  69. package/lib/public/modules/chat-render-runtime.js +198 -0
  70. package/lib/public/modules/command-palette.js +225 -436
  71. package/lib/public/modules/dm-render.js +82 -0
  72. package/lib/public/modules/home-capsule-creation-intent.js +31 -0
  73. package/lib/public/modules/home-capsule-library.js +146 -0
  74. package/lib/public/modules/home-capsule-source.js +383 -0
  75. package/lib/public/modules/home-chat-identity.js +35 -0
  76. package/lib/public/modules/home-chat-scroll.js +77 -0
  77. package/lib/public/modules/home-chat-stream-state.js +34 -0
  78. package/lib/public/modules/home-composer-focus.js +25 -0
  79. package/lib/public/modules/home-conversations-sheet.js +179 -0
  80. package/lib/public/modules/home-debate-activity.js +48 -0
  81. package/lib/public/modules/home-debate-controls.js +295 -0
  82. package/lib/public/modules/home-debate-launch.js +41 -0
  83. package/lib/public/modules/home-debate-live.js +284 -0
  84. package/lib/public/modules/home-debate-models.js +73 -0
  85. package/lib/public/modules/home-debate-planning.js +335 -0
  86. package/lib/public/modules/home-debates-archive.js +279 -0
  87. package/lib/public/modules/home-dock-resize.js +74 -0
  88. package/lib/public/modules/home-dock.js +446 -0
  89. package/lib/public/modules/home-mate-chat.js +496 -0
  90. package/lib/public/modules/home-mate-creation.js +109 -0
  91. package/lib/public/modules/home-mate-model-picker.js +281 -0
  92. package/lib/public/modules/home-mate-selection.js +38 -0
  93. package/lib/public/modules/home-mate-settings-menu.js +131 -0
  94. package/lib/public/modules/home-mate-settings.js +383 -0
  95. package/lib/public/modules/home-session-actions.js +373 -0
  96. package/lib/public/modules/home-session-model-confirmation.js +13 -0
  97. package/lib/public/modules/home-shell.js +9 -0
  98. package/lib/public/modules/home-sidebar-chat-list.js +63 -0
  99. package/lib/public/modules/home-sidebar.js +158 -0
  100. package/lib/public/modules/home-sub-surface.js +19 -0
  101. package/lib/public/modules/home-surface-boot.js +68 -0
  102. package/lib/public/modules/home-surface.js +141 -0
  103. package/lib/public/modules/home-tools.js +271 -0
  104. package/lib/public/modules/markdown.js +50 -2
  105. package/lib/public/modules/mate-management.js +86 -0
  106. package/lib/public/modules/mate-wizard.js +0 -7
  107. package/lib/public/modules/mention.js +17 -19
  108. package/lib/public/modules/pane-bridge.js +9 -0
  109. package/lib/public/modules/profile.js +4 -5
  110. package/lib/public/modules/project-settings.js +34 -28
  111. package/lib/public/modules/project-switcher.js +11 -5
  112. package/lib/public/modules/project-workspace-assignment.js +23 -0
  113. package/lib/public/modules/search-clay-chat.js +402 -0
  114. package/lib/public/modules/server-settings.js +14 -12
  115. package/lib/public/modules/session-actions.js +1 -1
  116. package/lib/public/modules/sidebar-mates.js +56 -552
  117. package/lib/public/modules/sidebar-mobile.js +7 -64
  118. package/lib/public/modules/sidebar-presence.js +37 -0
  119. package/lib/public/modules/split-pair-ui.js +13 -13
  120. package/lib/public/modules/split-view.js +7 -0
  121. package/lib/public/modules/sticky-notes.js +7 -6
  122. package/lib/public/modules/tool-input-composition.js +48 -0
  123. package/lib/public/modules/tool-llm-status.js +167 -0
  124. package/lib/public/modules/tool-renderer-advanced.js +285 -0
  125. package/lib/public/modules/tool-renderer-chart.js +158 -0
  126. package/lib/public/modules/tool-renderer-semantics.js +35 -0
  127. package/lib/public/modules/tool-renderer.js +464 -0
  128. package/lib/public/modules/tool-runtime.js +309 -0
  129. package/lib/public/modules/tool-ui-evaluator.js +97 -0
  130. package/lib/public/modules/tool-ui-tree.js +21 -0
  131. package/lib/public/modules/tui-attention.js +10 -0
  132. package/lib/public/modules/user-settings.js +16 -23
  133. package/lib/public/modules/vendor-login.js +287 -0
  134. package/lib/public/modules/worker-proposal.js +2 -2
  135. package/lib/public/modules/workspace-assignment-card.js +149 -0
  136. package/lib/public/modules/workspace-assignment-routing.js +4 -0
  137. package/lib/public/style.css +13 -2
  138. package/lib/runtime-env.js +65 -0
  139. package/lib/sdk-bridge.js +120 -32
  140. package/lib/sdk-message-processor.js +10 -6
  141. package/lib/server-home-capsule-creation.js +36 -0
  142. package/lib/server-home-chat-events.js +287 -0
  143. package/lib/server-home-chat.js +518 -0
  144. package/lib/server-home-clay-entry.js +65 -0
  145. package/lib/server-home-clay-session-links.js +26 -0
  146. package/lib/server-home-debate-planning.js +214 -0
  147. package/lib/server-home-debates.js +137 -0
  148. package/lib/server-home-mate-creation.js +261 -0
  149. package/lib/server-home-models.js +241 -0
  150. package/lib/server-home-preferences.js +61 -0
  151. package/lib/server-mates.js +37 -0
  152. package/lib/server-tools.js +377 -0
  153. package/lib/server.js +111 -59
  154. package/lib/session-pair-mcp-server.js +6 -6
  155. package/lib/sessions.js +18 -3
  156. package/lib/tool-capsule-source.js +142 -0
  157. package/lib/tool-control-mcp-server.js +126 -0
  158. package/lib/tool-llm.js +48 -0
  159. package/lib/tool-storage.js +77 -0
  160. package/lib/tool-ui-spec-advanced.js +82 -0
  161. package/lib/tool-ui-spec.js +261 -0
  162. package/lib/tools-registry.js +286 -0
  163. package/lib/users-home-dock-preferences.js +77 -0
  164. package/lib/users-home-surface-preferences.js +99 -0
  165. package/lib/users-preferences.js +4 -7
  166. package/lib/users.js +12 -0
  167. package/lib/whats-new-content.js +3 -3
  168. package/lib/workspace-assignment-service.js +420 -0
  169. package/lib/workspace-query-mcp-server.js +154 -0
  170. package/lib/workspace-query-service.js +492 -0
  171. package/lib/ws-schema.js +93 -12
  172. package/lib/yoke/adapters/acp.js +2 -1
  173. package/lib/yoke/adapters/antigravity.js +2 -1
  174. package/lib/yoke/adapters/claude-worker.js +11 -4
  175. package/lib/yoke/adapters/claude.js +73 -43
  176. package/lib/yoke/adapters/codex.js +40 -10
  177. package/lib/yoke/adapters/kiro.js +2 -1
  178. package/lib/yoke/claude-user-input.js +38 -0
  179. package/lib/yoke/codex-app-server.js +20 -2
  180. package/lib/yoke/codex-user-input.js +64 -0
  181. package/lib/yoke/complete-once.js +164 -0
  182. package/lib/yoke/index.js +5 -1
  183. package/lib/yoke/interface.js +19 -0
  184. package/lib/yoke/mcp-bridge-server.js +2 -6
  185. package/lib/yoke/user-input.js +254 -0
  186. package/package.json +3 -2
  187. package/lib/public/css/home-chat.css +0 -380
  188. package/lib/public/modules/home-chat.js +0 -438
  189. package/lib/server-clay-home.js +0 -245
@@ -1,61 +1,35 @@
1
1
  /* ==========================================================================
2
- Home Hub — Personalized command center & dashboard
2
+ Home work hub
3
3
  ========================================================================== */
4
4
 
5
- /* Hub covers #main-area (sidebar + chat), sits inside it with absolute.
6
- Pure widget surface — Clay chat is reachable via the global FAB
7
- instead of being embedded here. */
5
+ body.home-active #top-bar,
6
+ body.home-active #icon-strip,
7
+ body.home-active #sidebar-column,
8
+ body.home-active #mate-sidebar-column,
9
+ body.home-active #sidebar-resize-handle,
10
+ body.home-active #mate-sidebar-resize-handle,
11
+ body.home-active #sidebar-overlay,
12
+ body.home-active .title-bar-content,
13
+ body.home-active #user-island { display: none !important; }
14
+
15
+ body.home-active #main-area { border: 0; border-radius: 0; }
16
+
17
+ body.home-surface-boot-pending #connect-overlay.hidden {
18
+ opacity: 1;
19
+ pointer-events: auto;
20
+ }
21
+
8
22
  #home-hub {
9
23
  position: absolute;
10
24
  inset: 0;
11
25
  display: flex;
12
26
  flex-direction: column;
13
- align-items: center;
14
- overflow-y: auto;
27
+ overflow: hidden;
15
28
  background: var(--bg);
16
29
  z-index: 200;
17
- padding: 48px 24px 40px;
30
+ padding: calc(6px + var(--safe-top)) 12px 16px;
18
31
  border-top-left-radius: 8px;
19
- animation: hubFadeIn 0.35s ease;
20
- }
21
- /* Close button (X / ESC) */
22
- .home-hub-close-btn {
23
- position: absolute;
24
- top: 16px;
25
- right: 20px;
26
- display: flex;
27
- flex-direction: column;
28
- align-items: center;
29
- width: 40px;
30
- height: 40px;
31
- border-radius: 50%;
32
- border: 2px solid var(--text-dimmer);
33
- background: none;
34
- color: var(--text-dimmer);
35
- cursor: pointer;
36
- padding: 0;
37
- justify-content: center;
38
- transition: border-color 0.15s, color 0.15s;
39
- z-index: 5;
40
- }
41
- .home-hub-close-btn .lucide {
42
- width: 18px;
43
- height: 18px;
44
- }
45
- .home-hub-close-btn span {
46
- font-size: 10px;
47
- font-weight: 600;
48
- letter-spacing: 0.5px;
49
- position: absolute;
50
- top: calc(100% + 6px);
51
- font-family: inherit;
52
- }
53
- .home-hub-close-btn:hover {
54
- border-color: var(--text-secondary);
55
- color: var(--text-secondary);
56
- }
57
- .home-hub-close-btn.hidden {
58
- display: none;
32
+ animation: hubFadeIn 0.25s ease;
59
33
  }
60
34
 
61
35
  #home-hub.hidden {
@@ -63,485 +37,1002 @@
63
37
  }
64
38
 
65
39
  @keyframes hubFadeIn {
66
- from { opacity: 0; transform: translateY(8px); }
67
- to { opacity: 1; transform: translateY(0); }
68
- }
69
-
70
- @keyframes hubCardIn {
71
40
  from { opacity: 0; transform: translateY(6px); }
72
- to { opacity: 1; transform: translateY(0); }
41
+ to { opacity: 1; transform: translateY(0); }
73
42
  }
74
43
 
75
44
  .home-hub-inner {
76
- width: 100%;
77
- max-width: 720px;
78
45
  display: flex;
79
- flex-direction: column;
80
- gap: 14px;
46
+ width: 100%;
47
+ max-width: none;
48
+ height: 100%;
49
+ min-height: 0;
81
50
  }
82
51
 
83
-
84
- /* --- Greeting --- */
85
- .hub-greeting {
86
- text-align: center;
87
- padding: 8px 0 4px;
88
- }
89
- .hub-greeting h1 {
90
- font-size: 28px;
91
- font-weight: 700;
92
- color: var(--text);
93
- margin: 0;
94
- letter-spacing: -0.5px;
52
+ .home-workspace {
53
+ --home-dock-width: clamp(520px, 46vw, 760px);
54
+ --home-dock-edge-inset: 8px;
55
+ --home-close-dock-gap: 8px;
56
+ position: relative;
57
+ flex: 1 1 auto;
58
+ display: flex;
59
+ width: 100%;
60
+ height: 100%;
61
+ min-height: 0;
62
+ overflow: hidden;
95
63
  }
96
- .hub-greeting p {
97
- font-size: 14px;
98
- color: var(--text-muted);
99
- margin: 6px 0 0;
100
- font-weight: 400;
64
+
65
+ .home-conversation-region {
66
+ flex: 1 1 auto;
67
+ display: flex;
68
+ min-width: 0;
69
+ min-height: 0;
70
+ overflow: hidden;
101
71
  }
102
- /* Twemoji sizing inherited from global img.emoji in base.css */
103
72
 
104
- /* --- Card base --- */
105
- .hub-card {
106
- background: var(--bg-alt);
107
- border: 1px solid var(--border-subtle);
73
+ .home-tool-workbench {
74
+ display: none;
75
+ flex-direction: column;
76
+ min-width: 0;
77
+ min-height: 0;
78
+ overflow: hidden;
79
+ background: var(--bg);
80
+ border: 1px solid var(--border);
108
81
  border-radius: 12px;
109
- padding: 16px;
82
+ box-shadow:
83
+ 4px 8px 18px rgba(var(--shadow-rgb), 0.14),
84
+ 2px 2px 4px rgba(var(--shadow-rgb), 0.08),
85
+ inset 0 1px 0 rgba(255, 255, 255, 0.04);
86
+ animation: home-workbench-in 0.18s cubic-bezier(0.2, 0.8, 0.2, 1);
110
87
  }
111
- .hub-card-header {
112
- display: flex;
113
- align-items: center;
114
- justify-content: space-between;
115
- margin-bottom: 12px;
88
+
89
+ @keyframes home-workbench-in {
90
+ from { opacity: 0; transform: translateX(10px) scale(0.995); }
91
+ to { opacity: 1; transform: translateX(0) scale(1); }
116
92
  }
117
- .hub-card-title {
118
- font-size: 12px;
119
- font-weight: 600;
120
- text-transform: uppercase;
121
- letter-spacing: 0.6px;
122
- color: var(--text-muted);
93
+
94
+ .home-dock-divider,
95
+ .home-dock-backdrop { display: none; }
96
+
97
+ #home-hub.dock-split .home-tool-workbench,
98
+ #home-hub.dock-focus .home-tool-workbench { display: flex; }
99
+
100
+ #home-hub.dock-focus .home-conversation-region,
101
+ #home-hub.dock-focus .home-dock-divider,
102
+ #home-hub.dock-focus .home-dock-backdrop { display: none; }
103
+
104
+ #home-hub.dock-focus .home-tool-workbench {
105
+ flex: 1 1 auto;
106
+ width: calc(100% - 16px);
107
+ margin: 8px;
123
108
  }
124
- .hub-card-count {
125
- font-size: 11px;
126
- font-weight: 600;
127
- color: var(--accent);
128
- background: var(--accent-12);
129
- padding: 2px 8px;
130
- border-radius: 10px;
109
+
110
+ @media (min-width: 1340px) {
111
+ #home-hub.dock-split .home-conversation-region { min-width: 480px; }
112
+
113
+ #home-hub.dock-split .home-dock-divider {
114
+ position: relative;
115
+ display: block;
116
+ z-index: 4;
117
+ flex: 0 0 12px;
118
+ margin-right: -12px;
119
+ cursor: col-resize;
120
+ touch-action: none;
121
+ }
122
+
123
+ #home-hub.dock-split .home-dock-divider::after {
124
+ position: absolute;
125
+ top: 14px;
126
+ bottom: 14px;
127
+ left: 4px;
128
+ width: 2px;
129
+ border-radius: 2px;
130
+ background: transparent;
131
+ content: "";
132
+ transition: background 0.15s ease, opacity 0.15s ease;
133
+ }
134
+
135
+ #home-hub.dock-split .home-dock-divider:hover::after,
136
+ #home-hub.dock-split .home-dock-divider:focus-visible::after,
137
+ body.home-dock-resizing #home-dock-divider::after {
138
+ background: var(--text-dimmer);
139
+ opacity: 0.65;
140
+ }
141
+
142
+ #home-hub.dock-split .home-dock-divider:focus-visible { outline: none; }
143
+
144
+ #home-hub.dock-split .home-tool-workbench {
145
+ flex: 0 0 var(--home-dock-width);
146
+ width: var(--home-dock-width);
147
+ min-width: 420px;
148
+ max-width: 58vw;
149
+ height: calc(100% - 16px);
150
+ align-self: center;
151
+ margin: 8px var(--home-dock-edge-inset) 8px 12px;
152
+ }
153
+
154
+ #home-hub.dock-split .home-close-control {
155
+ right: calc(var(--home-dock-width) + var(--home-dock-edge-inset) + var(--home-close-dock-gap));
156
+ }
157
+
158
+ #home-hub.dock-split .home-mate-chat-transcript,
159
+ #home-hub.dock-split .home-mate-chat-empty,
160
+ #home-hub.dock-split .home-mate-chat-composer-frame,
161
+ #home-hub.dock-split .home-mate-chat-suggestions { max-width: 660px; }
131
162
  }
132
163
 
133
- /* --- Two-column layout --- */
134
- .hub-columns {
135
- display: grid;
136
- grid-template-columns: 1fr 1fr;
137
- gap: 12px;
138
- animation: hubCardIn 0.4s ease 0.08s both;
164
+ /* Hide the user island while the hub owns the main workspace. */
165
+ #main-area:has(#home-hub:not(.hidden)) ~ #user-island,
166
+ #layout-body:has(#home-hub:not(.hidden)) #user-island {
167
+ opacity: 0;
168
+ pointer-events: none;
169
+ transition: opacity 0.2s ease;
139
170
  }
140
171
 
141
- /* --- Upcoming tasks --- */
142
- .hub-upcoming-list {
172
+ /* Embedded mate conversation */
173
+ .home-mate-chat {
174
+ flex: 1 1 auto;
143
175
  display: flex;
144
176
  flex-direction: column;
145
- gap: 2px;
177
+ min-height: 0;
178
+ overflow: hidden;
179
+ background: var(--bg);
146
180
  }
147
- .hub-upcoming-item {
148
- display: flex;
181
+
182
+ .home-close-control {
183
+ position: absolute;
184
+ top: 8px;
185
+ right: 10px;
186
+ z-index: 6;
187
+ display: inline-flex;
149
188
  align-items: center;
150
- gap: 10px;
151
- padding: 8px 10px;
189
+ justify-content: center;
190
+ gap: 5px;
191
+ min-height: 30px;
192
+ padding: 4px 9px;
193
+ border: 1px solid var(--border-subtle);
152
194
  border-radius: 8px;
195
+ background: color-mix(in srgb, var(--bg) 92%, transparent);
196
+ color: var(--text-secondary);
197
+ font: inherit;
198
+ font-size: 11px;
199
+ box-shadow: 0 5px 16px rgba(var(--shadow-rgb), 0.1);
153
200
  cursor: pointer;
154
- transition: background 0.15s ease;
155
- }
156
- .hub-upcoming-item:hover {
157
- background: rgba(var(--overlay-rgb), 0.06);
201
+ transition: transform 0.16s ease, background 0.16s ease, box-shadow 0.16s ease;
158
202
  }
159
- .hub-upcoming-dot {
160
- width: 8px;
161
- height: 8px;
162
- border-radius: 50%;
163
- flex-shrink: 0;
164
- background: var(--accent);
203
+
204
+ .home-close-control:hover {
205
+ border-color: var(--border-subtle);
206
+ background: rgba(var(--overlay-rgb), 0.045);
207
+ color: var(--text-secondary);
208
+ box-shadow: 0 7px 20px rgba(var(--shadow-rgb), 0.14);
209
+ transform: translateY(1px);
165
210
  }
166
- .hub-upcoming-time {
167
- font-size: 12px;
168
- font-weight: 500;
169
- color: var(--text-muted);
170
- min-width: 56px;
171
- flex-shrink: 0;
172
- font-variant-numeric: tabular-nums;
211
+
212
+ .home-close-control:focus-visible {
213
+ outline: 2px solid var(--accent);
214
+ outline-offset: 2px;
173
215
  }
174
- .hub-upcoming-name {
175
- font-size: 13px;
176
- color: var(--text);
177
- flex: 1;
178
- min-width: 0;
179
- overflow: hidden;
180
- text-overflow: ellipsis;
181
- white-space: nowrap;
216
+
217
+ .home-close-control .lucide {
218
+ width: 14px;
219
+ height: 14px;
182
220
  }
183
- .hub-upcoming-project {
184
- font-size: 11px;
185
- color: var(--text-dimmer);
186
- flex-shrink: 0;
187
- max-width: 80px;
221
+
222
+ .home-mate-chat-stage {
223
+ position: relative;
224
+ flex: 1 1 auto;
225
+ display: flex;
226
+ flex-direction: column;
227
+ min-height: 0;
188
228
  overflow: hidden;
189
- text-overflow: ellipsis;
190
- white-space: nowrap;
191
229
  }
192
- .hub-upcoming-more {
193
- font-size: 12px;
194
- color: var(--text-dimmer);
195
- text-align: center;
196
- padding: 4px 0;
197
- }
198
- /* Empty state */
199
- .hub-upcoming-empty {
200
- text-align: center;
201
- padding: 16px 8px;
202
- }
203
- .hub-upcoming-empty-icon {
204
- font-size: 24px;
205
- margin-bottom: 8px;
206
- opacity: 0.5;
207
- }
208
- .hub-upcoming-empty-text {
209
- font-size: 13px;
210
- color: var(--text-dimmer);
211
- margin-bottom: 12px;
212
- }
213
- .hub-upcoming-cta {
230
+
231
+ .home-chat-new-activity {
232
+ position: absolute;
233
+ z-index: 4;
234
+ bottom: 86px;
235
+ left: 50%;
214
236
  display: inline-flex;
215
237
  align-items: center;
216
238
  gap: 6px;
217
- padding: 6px 14px;
218
- border-radius: 8px;
219
- border: 1px solid var(--border-subtle);
220
- background: none;
221
- color: var(--accent);
222
- font-size: 12px;
223
- font-weight: 600;
239
+ min-height: 30px;
240
+ padding: 0 10px;
241
+ border: 1px solid var(--border);
242
+ border-radius: 999px;
243
+ background: var(--bg);
244
+ color: var(--text);
245
+ box-shadow: 0 7px 20px rgba(var(--shadow-rgb), .14);
246
+ font: inherit;
247
+ font-size: 10px;
248
+ font-weight: 620;
224
249
  cursor: pointer;
225
- transition: background 0.15s ease, border-color 0.15s ease;
250
+ transform: translateX(-50%);
226
251
  }
227
- .hub-upcoming-cta:hover {
228
- background: var(--accent-12);
229
- border-color: var(--accent);
252
+
253
+ .home-chat-new-activity[hidden], .home-debates-open .home-chat-new-activity { display: none; }
254
+ .home-chat-new-activity .lucide { width: 13px; height: 13px; }
255
+ .home-chat-new-activity:hover { background: var(--bg-alt); }
256
+ .home-chat-new-activity:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
257
+
258
+ .home-mate-chat-messages {
259
+ flex: 1 1 auto;
260
+ min-height: 0;
261
+ padding: 44px 18px 18px;
262
+ overflow-y: auto;
263
+ overscroll-behavior: contain;
230
264
  }
231
- .hub-upcoming-cta svg {
232
- width: 14px;
233
- height: 14px;
265
+
266
+ .home-mate-chat-messages.is-switching {
267
+ animation: homeMateMessagesIn 0.18s ease both;
234
268
  }
235
269
 
236
- /* --- Projects summary --- */
237
- .hub-projects-list {
238
- display: flex;
239
- flex-direction: column;
240
- gap: 2px;
270
+ @keyframes homeMateMessagesIn {
271
+ from { opacity: 0; transform: translateY(3px); }
272
+ to { opacity: 1; transform: translateY(0); }
241
273
  }
242
- .hub-project-item {
274
+
275
+ .home-mate-chat-transcript {
243
276
  display: flex;
244
- align-items: center;
245
- gap: 10px;
246
- padding: 8px 10px;
247
- border-radius: 8px;
248
- cursor: pointer;
249
- transition: background 0.15s ease;
250
- }
251
- .hub-project-item:hover {
252
- background: rgba(var(--overlay-rgb), 0.06);
277
+ flex-direction: column;
278
+ gap: 0;
279
+ width: min(720px, 100%);
280
+ min-height: 100%;
281
+ margin: 0 auto;
253
282
  }
254
- .hub-project-dot {
255
- width: 8px;
256
- height: 8px;
257
- border-radius: 50%;
258
- flex-shrink: 0;
259
- background: var(--text-dimmer);
260
- transition: background 0.3s ease;
283
+
284
+ .home-chat-message {
285
+ width: 100%;
261
286
  }
262
- .hub-project-dot.processing {
263
- background: var(--success);
264
- box-shadow: 0 0 6px rgba(80, 250, 123, 0.4);
287
+
288
+ .home-mate-chat-transcript.home-chat-bubble-layout .msg-assistant {
289
+ display: flex;
290
+ flex-direction: column;
291
+ align-items: flex-start;
292
+ gap: 0;
293
+ max-width: 100%;
294
+ margin: 0 auto 12px;
295
+ padding: 4px 20px;
296
+ border-radius: 12px;
265
297
  }
266
- .hub-project-icon {
267
- font-size: 14px;
268
- width: 20px;
269
- text-align: center;
270
- flex-shrink: 0;
298
+
299
+ .home-mate-chat-transcript.home-chat-bubble-layout .msg-user {
300
+ display: flex;
301
+ flex-direction: column;
302
+ align-items: flex-end;
303
+ justify-content: initial;
304
+ gap: 0;
305
+ max-width: 100%;
306
+ margin: 0 auto 8px;
307
+ padding: 0 20px;
308
+ border-radius: initial;
271
309
  }
272
- .hub-project-name {
273
- font-size: 13px;
274
- color: var(--text);
275
- flex: 1;
310
+
311
+ .home-mate-chat-transcript.home-chat-bubble-layout .dm-bubble-content {
312
+ flex: initial;
313
+ width: 100%;
276
314
  min-width: 0;
277
- overflow: hidden;
278
- text-overflow: ellipsis;
279
- white-space: nowrap;
280
315
  }
281
- .hub-project-sessions {
282
- font-size: 11px;
283
- color: var(--text-dimmer);
284
- background: rgba(var(--overlay-rgb), 0.06);
285
- padding: 2px 7px;
286
- border-radius: 8px;
287
- flex-shrink: 0;
316
+
317
+ .home-mate-chat-transcript.home-chat-bubble-layout .msg-user .dm-bubble-content {
318
+ align-items: flex-end;
319
+ }
320
+
321
+ .home-mate-chat-transcript.home-chat-bubble-layout .msg-user .bubble {
322
+ width: fit-content;
323
+ max-width: 85%;
324
+ padding: 12px 18px;
325
+ border-radius: 20px 20px 4px 20px;
326
+ background: var(--user-bubble);
327
+ font-size: 15px;
328
+ line-height: 1.55;
329
+ word-break: break-word;
330
+ white-space: pre-wrap;
288
331
  }
289
332
 
290
- /* --- Week strip --- */
291
- .hub-week {
292
- animation: hubCardIn 0.4s ease 0.16s both;
333
+ .home-mate-chat-transcript.home-chat-bubble-layout .msg-assistant .md-content {
334
+ width: 100%;
335
+ padding: 0;
336
+ border-radius: 0;
337
+ background: none;
293
338
  }
294
- .hub-week-strip {
339
+
340
+ .home-mate-chat-transcript.home-chat-bubble-layout .home-chat-ordinary-message {
295
341
  display: grid;
296
- grid-template-columns: repeat(7, 1fr);
297
- gap: 4px;
298
- text-align: center;
342
+ grid-template-columns: 34px minmax(0, 1fr);
343
+ align-items: start;
344
+ gap: 9px;
345
+ margin: 0 auto 12px;
346
+ padding: 4px 20px;
347
+ border-radius: 0;
348
+ }
349
+
350
+ .home-mate-chat-transcript.home-chat-bubble-layout .home-chat-ordinary-message > .dm-bubble-avatar {
351
+ display: block;
352
+ width: 34px;
353
+ height: 34px;
354
+ margin: 1px 0 0;
355
+ border-radius: 8px;
299
356
  }
300
- .hub-week-day {
357
+
358
+ .home-mate-chat-transcript.home-chat-bubble-layout .home-chat-ordinary-message > .dm-bubble-content {
301
359
  display: flex;
302
360
  flex-direction: column;
303
- align-items: center;
304
- gap: 4px;
305
- padding: 8px 4px;
306
- border-radius: 10px;
307
- cursor: default;
308
- transition: background 0.15s ease;
361
+ align-items: flex-start;
362
+ width: 100%;
363
+ min-width: 0;
309
364
  }
310
- .hub-week-day:hover {
311
- background: rgba(var(--overlay-rgb), 0.04);
365
+
366
+ .home-mate-chat-transcript.home-chat-bubble-layout .home-chat-ordinary-message .dm-bubble-header {
367
+ display: flex;
368
+ align-items: baseline;
369
+ min-height: 19px;
370
+ gap: 7px;
371
+ margin-bottom: 2px;
312
372
  }
313
- .hub-week-day.today {
314
- background: var(--accent-12);
373
+
374
+ .home-mate-chat-transcript.home-chat-bubble-layout .home-chat-ordinary-message .dm-bubble-name {
375
+ color: var(--text);
376
+ font-size: 13px;
377
+ font-weight: 650;
378
+ line-height: 1.35;
315
379
  }
316
- .hub-week-day.today .hub-week-num {
317
- background: var(--accent);
318
- color: var(--bg);
319
- border-radius: 50%;
320
- width: 28px;
321
- height: 28px;
380
+
381
+ .home-mate-chat-transcript.home-chat-bubble-layout .home-chat-ordinary-message .dm-bubble-time {
382
+ color: var(--text-dimmer);
383
+ font-size: 10px;
384
+ font-weight: 400;
385
+ }
386
+
387
+ .home-mate-chat-transcript.home-chat-bubble-layout .home-chat-ordinary-message .md-content {
388
+ max-width: 100%;
389
+ line-height: 1.58;
390
+ }
391
+
392
+ .home-mate-chat-transcript.home-chat-bubble-layout .home-chat-ordinary-user {
322
393
  display: flex;
323
- align-items: center;
324
- justify-content: center;
394
+ justify-content: flex-end;
395
+ padding-block: 3px;
325
396
  }
326
- .hub-week-label {
327
- font-size: 11px;
328
- font-weight: 500;
329
- color: var(--text-dimmer);
330
- text-transform: uppercase;
331
- letter-spacing: 0.3px;
397
+
398
+ .home-mate-chat-transcript.home-chat-bubble-layout .home-chat-ordinary-user > .dm-bubble-content {
399
+ align-items: flex-end;
332
400
  }
333
- .hub-week-num {
334
- font-size: 14px;
335
- font-weight: 600;
401
+
402
+ .home-mate-chat-transcript.home-chat-bubble-layout .home-chat-ordinary-user .bubble {
403
+ width: fit-content;
404
+ max-width: min(560px, 100%);
405
+ padding: 8px 11px;
406
+ border: 1px solid var(--border-subtle);
407
+ border-radius: 10px;
408
+ background: var(--bg-alt);
336
409
  color: var(--text);
337
- width: 28px;
338
- height: 28px;
339
- display: flex;
340
- align-items: center;
341
- justify-content: center;
410
+ font-size: 14px;
411
+ line-height: 1.5;
412
+ white-space: pre-wrap;
413
+ word-break: break-word;
414
+ }
415
+
416
+ .home-chat-ordinary-typing .dm-bubble-header {
417
+ margin-bottom: 0;
342
418
  }
343
- .hub-week-dots {
419
+
420
+ .home-chat-typing {
344
421
  display: flex;
345
- gap: 3px;
346
- justify-content: center;
347
- min-height: 6px;
422
+ align-items: center;
423
+ gap: 4px;
424
+ min-height: 24px;
348
425
  }
349
- .hub-week-dot {
426
+
427
+ .home-chat-typing span {
350
428
  width: 5px;
351
429
  height: 5px;
352
430
  border-radius: 50%;
353
- background: var(--accent);
431
+ background: var(--text-dimmer);
432
+ animation: homeChatTyping 1.15s ease-in-out infinite;
354
433
  }
355
434
 
356
- /* --- Tip Card --- */
357
- .hub-tip {
358
- background: var(--bg-alt);
359
- border: 1px solid var(--border-subtle);
360
- border-radius: 12px;
361
- padding: 16px 18px;
362
- display: flex;
363
- align-items: flex-start;
364
- gap: 12px;
365
- animation: hubCardIn 0.4s ease 0.24s both;
435
+ .home-chat-typing span:nth-child(2) { animation-delay: 0.12s; }
436
+ .home-chat-typing span:nth-child(3) { animation-delay: 0.24s; }
437
+
438
+ @keyframes homeChatTyping {
439
+ 0%, 60%, 100% { opacity: 0.35; transform: translateY(0); }
440
+ 30% { opacity: 0.9; transform: translateY(-2px); }
366
441
  }
367
- .hub-tip-icon {
368
- flex-shrink: 0;
369
- width: 32px;
370
- height: 32px;
371
- border-radius: 8px;
372
- background: var(--accent-12);
373
- display: flex;
442
+
443
+ .home-mate-chat-empty {
444
+ width: min(720px, 100%);
445
+ margin: 0 auto;
446
+ padding: 0 10px 14px;
447
+ text-align: center;
448
+ }
449
+
450
+ .home-mate-chat-empty h2 {
451
+ margin: 0;
452
+ color: var(--text);
453
+ font-size: clamp(20px, 2vw, 26px);
454
+ font-weight: 600;
455
+ letter-spacing: -0.02em;
456
+ }
457
+
458
+ .home-mate-chat-brand {
459
+ display: inline-flex;
374
460
  align-items: center;
375
- justify-content: center;
376
- font-size: 16px;
461
+ gap: 8px;
462
+ margin-bottom: 16px;
463
+ color: var(--text-secondary);
377
464
  }
378
- .hub-tip-body {
379
- flex: 1;
380
- min-width: 0;
465
+
466
+ .home-mate-chat-brand img {
467
+ width: 23px;
468
+ height: 23px;
469
+ object-fit: contain;
381
470
  }
382
- .hub-tip-label {
383
- font-size: 11px;
384
- font-weight: 600;
385
- text-transform: uppercase;
386
- letter-spacing: 0.5px;
387
- color: var(--accent);
388
- margin-bottom: 4px;
471
+
472
+ .home-mate-chat-brand .home-mate-chat-brand-wordmark {
473
+ font-size: 18px;
474
+ letter-spacing: -0.012em;
389
475
  }
390
- .hub-tip-text {
391
- font-size: 13.5px;
476
+
477
+ .home-mate-chat-empty p {
478
+ max-width: 520px;
479
+ margin: 8px auto 0;
480
+ overflow: hidden;
481
+ color: var(--text-muted);
482
+ font-size: 12px;
392
483
  line-height: 1.5;
393
- color: var(--text-secondary);
484
+ text-overflow: ellipsis;
485
+ white-space: nowrap;
486
+ }
487
+
488
+ .home-mate-chat.is-empty .home-mate-chat-stage {
489
+ justify-content: center;
490
+ padding-bottom: 18%;
394
491
  }
395
- .hub-tip-nav {
396
- flex-shrink: 0;
492
+
493
+ .home-mate-chat.is-empty .home-mate-chat-messages {
494
+ flex: 0 0 auto;
495
+ width: 100%;
496
+ padding: 0 18px;
497
+ overflow: visible;
498
+ }
499
+
500
+ .home-mate-chat-composer-frame {
501
+ flex: 0 0 auto;
502
+ width: min(720px, calc(100% - 36px));
503
+ margin: 0 auto 20px;
504
+ }
505
+
506
+ .home-mate-chat-composer {
507
+ flex: 0 0 auto;
397
508
  display: flex;
398
- gap: 2px;
399
- align-items: center;
509
+ align-items: flex-end;
510
+ gap: 8px;
511
+ width: 100%;
512
+ padding: 7px 8px 7px 14px;
513
+ border: 1px solid var(--border-subtle);
514
+ border-radius: 22px;
515
+ background: var(--bg);
516
+ box-shadow: 0 8px 24px rgba(var(--shadow-rgb), 0.09);
517
+ transition: border-color 0.16s ease, box-shadow 0.16s ease, transform 0.18s ease;
400
518
  }
401
- .hub-tip-prev,
402
- .hub-tip-next {
403
- background: none;
404
- border: none;
519
+
520
+ .home-mate-chat-composer:focus-within {
521
+ border-color: var(--accent);
522
+ box-shadow: 0 10px 28px rgba(var(--shadow-rgb), 0.12);
523
+ }
524
+
525
+ .home-mate-chat.is-empty .home-mate-chat-composer-frame {
526
+ margin-bottom: 0;
527
+ }
528
+
529
+ .home-mate-chat.has-conversation .home-mate-chat-composer-frame {
530
+ animation: homeComposerDock 0.18s ease-out;
531
+ }
532
+
533
+ .home-mate-chat-session-model {
534
+ display: flex;
535
+ align-items: center;
536
+ gap: 4px;
537
+ min-height: 20px;
538
+ padding: 4px 12px 0;
539
+ overflow: hidden;
405
540
  color: var(--text-dimmer);
541
+ font-size: 9px;
542
+ line-height: 1.3;
543
+ white-space: nowrap;
544
+ }
545
+
546
+ .home-mate-chat-session-model .lucide {
547
+ flex: 0 0 auto;
548
+ width: 11px;
549
+ height: 11px;
550
+ }
551
+
552
+ #home-mate-chat-session-model-value {
553
+ overflow: hidden;
554
+ color: var(--text-muted);
555
+ font-weight: 600;
556
+ text-overflow: ellipsis;
557
+ }
558
+
559
+ #home-mate-chat-session-model-choose {
560
+ padding: 0;
561
+ border: 0;
562
+ border-bottom: 1px solid currentColor;
563
+ background: transparent;
564
+ color: var(--text-muted);
565
+ font: inherit;
566
+ font-weight: 650;
406
567
  cursor: pointer;
407
- padding: 4px;
408
- border-radius: 6px;
409
- transition: color 0.15s, background 0.15s;
568
+ }
569
+
570
+ #home-mate-chat-session-model-choose:hover {
571
+ color: var(--text);
572
+ }
573
+
574
+ #home-mate-chat-session-model-choose:focus-visible {
575
+ border-radius: 2px;
576
+ outline: 2px solid var(--accent);
577
+ outline-offset: 2px;
578
+ }
579
+
580
+ @keyframes homeComposerDock {
581
+ from { opacity: 0.86; transform: translateY(4px); }
582
+ to { opacity: 1; transform: translateY(0); }
583
+ }
584
+
585
+ #home-mate-chat-input {
586
+ flex: 1 1 auto;
587
+ min-width: 0;
588
+ max-height: 108px;
589
+ padding: 6px 0;
590
+ border: 0;
591
+ outline: none;
592
+ background: transparent;
593
+ color: var(--text);
594
+ font-family: inherit;
595
+ font-size: 14px;
596
+ line-height: 1.45;
597
+ resize: none;
598
+ }
599
+
600
+ #home-mate-chat-input:disabled {
601
+ opacity: 0.55;
602
+ }
603
+
604
+ #home-mate-chat-send {
605
+ flex: 0 0 auto;
410
606
  display: flex;
411
607
  align-items: center;
412
608
  justify-content: center;
609
+ width: 34px;
610
+ height: 34px;
611
+ padding: 0;
612
+ border: 0;
613
+ border-radius: 50%;
614
+ background: var(--text);
615
+ color: var(--bg);
616
+ font-family: inherit;
617
+ cursor: pointer;
618
+ transition: opacity 0.15s ease, transform 0.15s ease;
413
619
  }
414
- .hub-tip-prev:hover,
415
- .hub-tip-next:hover {
416
- color: var(--text-muted);
417
- background: rgba(var(--overlay-rgb), 0.06);
620
+
621
+ #home-mate-chat-send .lucide {
622
+ width: 17px;
623
+ height: 17px;
418
624
  }
419
- .hub-tip-prev svg,
420
- .hub-tip-next svg {
421
- width: 14px;
422
- height: 14px;
625
+
626
+ #home-mate-chat-send:hover:not(:disabled) {
627
+ transform: translateY(-1px);
423
628
  }
424
629
 
425
- /* Hide user island when hub is visible */
426
- #main-area:has(#home-hub:not(.hidden)) ~ #user-island,
427
- #layout-body:has(#home-hub:not(.hidden)) #user-island {
428
- opacity: 0;
429
- pointer-events: none;
430
- transition: opacity 0.2s ease;
630
+ #home-mate-chat-send:disabled {
631
+ opacity: 0.18;
632
+ cursor: default;
431
633
  }
432
634
 
433
- /* --- Mobile --- */
434
- @media (max-width: 768px) {
435
- #home-hub {
436
- padding: 32px 16px calc(80px + var(--safe-bottom, 0px));
437
- }
438
- .hub-greeting h1 {
439
- font-size: 22px;
440
- }
441
- .home-hub-inner {
442
- max-width: 100%;
443
- }
444
- .hub-columns {
445
- grid-template-columns: 1fr;
446
- }
447
- .hub-week-label {
448
- font-size: 10px;
449
- }
450
- .hub-week-num {
451
- font-size: 13px;
452
- }
635
+ .home-mate-chat-suggestions {
636
+ display: flex;
637
+ flex: 0 0 auto;
638
+ flex-wrap: wrap;
639
+ justify-content: center;
640
+ gap: 7px;
641
+ width: min(720px, calc(100% - 36px));
642
+ margin: 10px auto 0;
453
643
  }
454
644
 
455
- /* ==========================================================================
456
- Home Hub — Mate Avatars (horizontal scroll)
457
- ========================================================================== */
645
+ .home-mate-chat.has-conversation .home-mate-chat-suggestions,
646
+ .home-mate-chat-suggestions:empty {
647
+ display: none;
648
+ }
649
+
650
+ .home-mate-chat-suggestion {
651
+ padding: 7px 11px;
652
+ border: 1px solid var(--border-subtle);
653
+ border-radius: 999px;
654
+ background: transparent;
655
+ color: var(--text-muted);
656
+ font: inherit;
657
+ font-size: 10px;
658
+ cursor: pointer;
659
+ }
660
+
661
+ .home-mate-chat-suggestion:hover {
662
+ border-color: var(--border);
663
+ background: rgba(var(--overlay-rgb), 0.04);
664
+ color: var(--text);
665
+ }
458
666
 
459
- .home-hub-mates {
667
+ .home-dock-header {
668
+ flex: 0 0 52px;
460
669
  display: flex;
461
- gap: 16px;
462
- padding: 0 4px 16px;
463
- overflow-x: auto;
464
- overflow-y: hidden;
465
- -webkit-overflow-scrolling: touch;
466
- scrollbar-width: none;
670
+ align-items: center;
671
+ height: 52px;
672
+ gap: 10px;
673
+ padding: 0 10px 0 14px;
674
+ border-bottom: 1px solid var(--border-subtle);
675
+ background: var(--bg);
467
676
  }
468
677
 
469
- .home-hub-mates::-webkit-scrollbar {
470
- display: none;
678
+ .home-dock-switcher {
679
+ flex: 1 1 auto;
680
+ display: flex;
681
+ align-items: center;
682
+ align-self: stretch;
683
+ gap: 12px;
684
+ min-width: 0;
685
+ overflow-x: auto;
471
686
  }
472
687
 
473
- .home-hub-mates.hidden {
474
- display: none;
688
+ .home-dock-context {
689
+ display: flex;
690
+ flex: 0 0 auto;
691
+ align-items: center;
692
+ min-width: 0;
475
693
  }
476
694
 
477
- .home-hub-mate-item {
695
+ .home-dock-context[hidden] { display: none; }
696
+
697
+ .home-dock-tool {
698
+ position: relative;
699
+ align-self: stretch;
478
700
  display: flex;
479
- flex-direction: column;
480
701
  align-items: center;
481
702
  gap: 6px;
482
- min-width: 64px;
703
+ padding: 0 3px;
704
+ border: 0;
705
+ background: transparent;
706
+ color: var(--text-muted);
707
+ font: inherit;
483
708
  cursor: pointer;
484
- -webkit-tap-highlight-color: transparent;
485
- touch-action: manipulation;
486
709
  }
487
710
 
488
- .home-hub-mate-item:active .home-hub-mate-avatar {
489
- transform: scale(0.92);
490
- }
711
+ .home-dock-tool:hover { color: var(--text); }
491
712
 
492
- .home-hub-mate-avatar-wrap {
493
- position: relative;
494
- width: 48px;
495
- height: 48px;
713
+ .home-dock-tool.is-capsule-home {
714
+ flex: 0 0 auto;
715
+ margin-right: 2px;
496
716
  }
497
717
 
498
- .home-hub-mate-avatar {
499
- width: 48px;
500
- height: 48px;
501
- border-radius: 50%;
502
- object-fit: cover;
503
- border: 2px solid rgba(var(--overlay-rgb), 0.12);
504
- transition: transform 0.1s;
718
+ .home-dock-tool.active {
719
+ color: var(--text);
505
720
  }
506
721
 
507
- .home-hub-mate-dot {
722
+ .home-dock-tool.active::after {
508
723
  position: absolute;
509
- bottom: 1px;
510
- right: 1px;
511
- width: 10px;
512
- height: 10px;
513
- border-radius: 50%;
514
- background: var(--success);
515
- border: 2px solid var(--bg);
724
+ right: 2px;
725
+ bottom: 0;
726
+ left: 2px;
727
+ height: 2px;
728
+ border-radius: 2px 2px 0 0;
729
+ background: var(--text-secondary);
730
+ content: "";
516
731
  }
517
732
 
518
- .home-hub-mate-dot.responding {
519
- background: var(--accent);
733
+ .home-dock-tool.mate-acted .home-dock-tab-icon {
734
+ animation: home-tool-mate-pulse 1.4s ease-out;
520
735
  }
521
736
 
522
- .home-hub-mate-name {
523
- font-size: 11px;
524
- color: var(--text-muted);
525
- max-width: 64px;
737
+ @keyframes home-tool-mate-pulse {
738
+ 0%, 100% { opacity: 1; transform: scale(1); }
739
+ 40% { opacity: 0.35; transform: scale(0.86); }
740
+ }
741
+
742
+ .home-dock-tab-icon {
743
+ display: flex;
744
+ align-items: center;
745
+ }
746
+
747
+ .home-dock-tab-icon .lucide {
748
+ width: 14px;
749
+ height: 14px;
750
+ }
751
+
752
+ .home-dock-tab-label {
753
+ font-size: 12px;
754
+ font-weight: 600;
526
755
  white-space: nowrap;
756
+ }
757
+
758
+ .home-dock-actions {
759
+ flex: 0 0 auto;
760
+ display: flex;
761
+ align-items: center;
762
+ gap: 2px;
763
+ }
764
+
765
+ .home-dock-actions button,
766
+ .home-dock-return {
767
+ display: inline-flex;
768
+ align-items: center;
769
+ justify-content: center;
770
+ height: 30px;
771
+ padding: 0 7px;
772
+ border: 0;
773
+ border-radius: 7px;
774
+ background: transparent;
775
+ color: var(--text-muted);
776
+ font: inherit;
777
+ cursor: pointer;
778
+ }
779
+
780
+ .home-dock-actions button:hover,
781
+ .home-dock-return:hover {
782
+ background: rgba(var(--overlay-rgb), 0.05);
783
+ color: var(--text);
784
+ }
785
+
786
+ .home-dock-actions .lucide,
787
+ .home-dock-return .lucide { width: 15px; height: 15px; }
788
+
789
+ .home-dock-return {
790
+ display: none;
791
+ flex: 0 0 auto;
792
+ gap: 6px;
793
+ padding: 0 9px;
794
+ color: var(--text-secondary);
795
+ font-size: 12px;
796
+ }
797
+
798
+ #home-hub.dock-focus .home-dock-return { display: inline-flex; }
799
+ #home-hub.dock-focus .home-dock-switcher { flex: 0 1 auto; }
800
+ #home-hub.dock-focus #home-dock-focus { display: none; }
801
+
802
+ .home-dock-content {
803
+ flex: 1 1 auto;
804
+ min-height: 0;
805
+ padding: 14px 10px 10px 14px;
806
+ overflow: hidden;
807
+ background: var(--bg);
808
+ }
809
+
810
+ /* Declarative home tools */
811
+ .home-tool-root,
812
+ .home-tool-display {
813
+ width: 100%;
814
+ height: 100%;
815
+ min-height: 0;
816
+ }
817
+
818
+ .home-tool-root {
819
+ display: flex;
820
+ flex-direction: column;
821
+ }
822
+
823
+ .home-tool-display {
824
+ flex: 1 1 auto;
825
+ height: auto;
826
+ overflow: auto;
827
+ }
828
+
829
+ .tool-llm-status {
830
+ display: flex;
831
+ flex-wrap: wrap;
832
+ gap: 4px 10px;
833
+ align-items: baseline;
834
+ margin: 0 2px 10px;
835
+ }
836
+
837
+ .tool-llm-identity {
838
+ display: flex;
839
+ min-width: 0;
840
+ gap: 8px;
841
+ align-items: baseline;
842
+ }
843
+
844
+ .tool-llm-label {
845
+ color: var(--text-muted);
846
+ font-size: 10px;
847
+ font-weight: 700;
848
+ letter-spacing: .06em;
849
+ text-transform: uppercase;
850
+ }
851
+
852
+ .tool-llm-value {
853
+ min-width: 0;
527
854
  overflow: hidden;
855
+ color: var(--text-secondary);
856
+ font-size: 12px;
528
857
  text-overflow: ellipsis;
529
- text-align: center;
858
+ white-space: nowrap;
859
+ }
860
+
861
+ .tool-llm-actions {
862
+ display: flex;
863
+ gap: 5px;
530
864
  }
531
- .home-hub-mate-primary .home-hub-mate-name {
865
+
866
+ .tool-llm-action {
867
+ padding: 5px 7px;
868
+ border: 0;
869
+ border-radius: 6px;
870
+ background: transparent;
871
+ color: var(--text-secondary);
872
+ font: inherit;
873
+ font-size: 11px;
874
+ font-weight: 600;
875
+ cursor: pointer;
876
+ }
877
+
878
+ .tool-llm-action:hover,
879
+ .tool-llm-action:focus-visible {
880
+ background: var(--bg-hover);
532
881
  color: var(--text);
882
+ }
883
+
884
+ .tool-llm-action:disabled {
885
+ cursor: default;
886
+ opacity: .65;
887
+ }
888
+
889
+ .tool-llm-error {
890
+ flex-basis: 100%;
891
+ margin: 1px 0 0;
892
+ color: var(--danger);
893
+ font-size: 11px;
894
+ line-height: 1.35;
895
+ }
896
+
897
+ .home-tool-error {
898
+ margin-bottom: 10px;
899
+ padding: 9px 11px;
900
+ border: 1px solid color-mix(in srgb, var(--danger) 35%, var(--border-subtle));
901
+ border-radius: 8px;
902
+ background: color-mix(in srgb, var(--danger) 8%, var(--bg));
903
+ color: var(--danger);
904
+ font-size: 12px;
905
+ }
906
+
907
+ /* C button badge */
908
+ .icon-strip-home {
909
+ position: relative;
910
+ }
911
+
912
+ .icon-strip-home-badge {
913
+ display: none;
914
+ }
915
+
916
+ .icon-strip-home-badge.has-unread {
917
+ position: absolute;
918
+ top: 0;
919
+ right: 2px;
920
+ display: block;
921
+ min-width: 16px;
922
+ padding: 0 4px;
923
+ border: 2px solid var(--bg);
924
+ border-radius: 8px;
925
+ background: var(--accent);
926
+ color: var(--bg);
927
+ font-size: 10px;
533
928
  font-weight: 600;
929
+ line-height: 16px;
930
+ text-align: center;
534
931
  }
535
- .home-hub-mate-primary .home-hub-mate-avatar {
536
- box-shadow: 0 0 0 2px #00b894;
932
+
933
+ @media (max-width: 900px) {
934
+ #home-hub { padding: calc(6px + var(--safe-top)) 8px calc(68px + var(--safe-bottom, 0px)); }
935
+
936
+ .home-hub-inner {
937
+ height: 100%;
938
+ min-height: 0;
939
+ }
940
+
941
+ .home-dock-header {
942
+ flex-basis: 44px;
943
+ height: 44px;
944
+ }
945
+
537
946
  }
538
- .home-hub-mate-primary-star {
539
- color: #00b894;
540
- font-size: 8px;
541
- margin-left: 2px;
542
- vertical-align: super;
947
+
948
+ @media (min-width: 769px) and (max-width: 1339px) {
949
+ #home-hub.dock-split .home-dock-backdrop {
950
+ position: absolute;
951
+ inset: 0;
952
+ z-index: 2;
953
+ display: block;
954
+ border-radius: 12px;
955
+ background: rgba(var(--shadow-rgb), 0.14);
956
+ }
957
+
958
+ #home-hub.dock-split .home-tool-workbench {
959
+ position: absolute;
960
+ top: 8px;
961
+ right: var(--home-dock-edge-inset);
962
+ bottom: 8px;
963
+ z-index: 3;
964
+ width: min(var(--home-dock-width), 65vw);
965
+ min-width: 420px;
966
+ max-width: 65vw;
967
+ box-shadow:
968
+ -18px 16px 42px rgba(var(--shadow-rgb), 0.16),
969
+ 2px 2px 4px rgba(var(--shadow-rgb), 0.08),
970
+ inset 0 1px 0 rgba(255, 255, 255, 0.04);
971
+ }
972
+
973
+ #home-hub.dock-split .home-close-control {
974
+ right: calc(min(var(--home-dock-width), 65vw) + var(--home-dock-edge-inset) + var(--home-close-dock-gap));
975
+ }
543
976
  }
544
977
 
545
- /* ==========================================================================
546
- (Certificate section removed — now handled by Trust Certificate playbook)
547
- ========================================================================== */
978
+ @media (max-width: 768px) {
979
+ #home-hub.dock-split,
980
+ #home-hub.dock-focus {
981
+ padding: var(--safe-top) 0 calc(56px + var(--safe-bottom, 0px));
982
+ }
983
+
984
+ .home-workspace { flex-direction: column; }
985
+
986
+ #home-hub.dock-split .home-conversation-region,
987
+ #home-hub.dock-split .home-dock-divider,
988
+ #home-hub.dock-split .home-dock-backdrop { display: none; }
989
+
990
+ #home-hub.dock-split .home-tool-workbench {
991
+ flex: 1 1 auto;
992
+ width: 100%;
993
+ min-height: 0;
994
+ border: 0;
995
+ border-radius: 0;
996
+ box-shadow: none;
997
+ animation: none;
998
+ }
999
+
1000
+ #home-hub.dock-focus .home-tool-workbench {
1001
+ flex: 1 1 auto;
1002
+ width: 100%;
1003
+ min-height: 0;
1004
+ margin: 0;
1005
+ border: 0;
1006
+ border-radius: 0;
1007
+ box-shadow: none;
1008
+ animation: none;
1009
+ }
1010
+
1011
+ #home-hub.dock-split .home-close-control,
1012
+ #home-hub.dock-focus .home-close-control { display: none; }
1013
+
1014
+ #home-hub.dock-split .home-dock-return { display: inline-flex; }
1015
+ #home-hub.dock-split #home-dock-focus { display: none; }
1016
+ .home-dock-header { gap: 4px; padding-inline: 6px; }
1017
+ .home-dock-return { width: 30px; padding: 0; }
1018
+ .home-dock-return span { display: none; }
1019
+ .home-dock-switcher { gap: 8px; }
1020
+
1021
+ .home-mate-chat-transcript.home-chat-bubble-layout .home-chat-ordinary-message {
1022
+ grid-template-columns: 32px minmax(0, 1fr);
1023
+ gap: 8px;
1024
+ padding-inline: 12px;
1025
+ }
1026
+
1027
+ .home-mate-chat-transcript.home-chat-bubble-layout .home-chat-ordinary-message > .dm-bubble-avatar {
1028
+ width: 32px;
1029
+ height: 32px;
1030
+ }
1031
+ }
1032
+
1033
+ #home-hub.dock-focus .home-close-control { display: none; }
1034
+
1035
+ @media (prefers-reduced-motion: reduce) {
1036
+ .home-tool-workbench { animation: none; }
1037
+ .home-close-control { transition: none; }
1038
+ }