clay-server 5.5.0-beta.4 → 5.5.0-beta.5

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 (104) hide show
  1. package/lib/github-connection-store.js +39 -0
  2. package/lib/github-runtime.js +43 -0
  3. package/lib/project-github-connection.js +164 -0
  4. package/lib/project.js +8 -0
  5. package/lib/public/appearance-bootstrap.js +6 -0
  6. package/lib/public/css/chrome-material.css +133 -0
  7. package/lib/public/css/menus.css +1 -17
  8. package/lib/public/css/navigation-island.css +261 -0
  9. package/lib/public/css/notifications-center.css +1 -17
  10. package/lib/public/css/settings-ui.css +8 -2
  11. package/lib/public/css/shared-browser.css +1 -18
  12. package/lib/public/css/split-view-layout.css +9 -5
  13. package/lib/public/css/sticky-notes.css +1 -18
  14. package/lib/public/css/title-bar.css +1 -1
  15. package/lib/public/css/workspace-background-gallery.css +43 -0
  16. package/lib/public/css/you.css +13 -10
  17. package/lib/public/index.html +53 -46
  18. package/lib/public/modules/app-messages.js +5 -0
  19. package/lib/public/modules/appearance-preferences.js +81 -0
  20. package/lib/public/modules/context-sources.js +2 -282
  21. package/lib/public/modules/github-mark.js +2 -0
  22. package/lib/public/modules/pane-appearance-bridge.js +9 -1
  23. package/lib/public/modules/pane-header-tooltips.js +36 -9
  24. package/lib/public/modules/personal-email-editor.js +305 -0
  25. package/lib/public/modules/personal-integration-editor.js +70 -0
  26. package/lib/public/modules/personal-settings-dialog.js +15 -1
  27. package/lib/public/modules/session-list-material.js +25 -0
  28. package/lib/public/modules/sidebar-collapse-focus.js +22 -0
  29. package/lib/public/modules/sidebar-sessions.js +2 -0
  30. package/lib/public/modules/sidebar.js +9 -10
  31. package/lib/public/modules/split-pane-renderer.js +5 -5
  32. package/lib/public/modules/split-view-shell-controls.js +9 -5
  33. package/lib/public/modules/split-view.js +2 -2
  34. package/lib/public/modules/theme.js +10 -28
  35. package/lib/public/modules/tool-pane-chrome.js +4 -1
  36. package/lib/public/modules/tool-pane-material.js +23 -0
  37. package/lib/public/modules/tooltip.js +7 -3
  38. package/lib/public/modules/tui-attention.js +9 -4
  39. package/lib/public/modules/user-settings-account.js +10 -1
  40. package/lib/public/modules/user-settings-github.js +176 -0
  41. package/lib/public/modules/user-settings-integrations.js +23 -12
  42. package/lib/public/modules/user-settings-layout.js +5 -3
  43. package/lib/public/modules/user-settings-themes.js +6 -2
  44. package/lib/public/modules/user-settings.js +2 -1
  45. package/lib/public/modules/workspace-background-gallery.js +92 -0
  46. package/lib/public/modules/workspace-custom-colors.js +132 -0
  47. package/lib/public/modules/you-activity.js +4 -2
  48. package/lib/public/pane-assets/app-C27ONMHZ.js +1 -0
  49. package/lib/public/pane-assets/chunk-4REWYEXI.js +1 -0
  50. package/lib/public/pane-assets/chunk-6EDR4PMU.js +1 -0
  51. package/lib/public/pane-assets/{chunk-X45WI2U7.js → chunk-76JE6SO6.js} +1 -1
  52. package/lib/public/pane-assets/chunk-AFATDM32.js +1 -0
  53. package/lib/public/pane-assets/{chunk-UVTS6GUM.js → chunk-DTNAWMGQ.js} +1 -1
  54. package/lib/public/pane-assets/chunk-EGCR2MH4.js +1 -0
  55. package/lib/public/pane-assets/chunk-ET4NUBYW.js +1 -0
  56. package/lib/public/pane-assets/chunk-EYJZ3R7Y.js +1 -0
  57. package/lib/public/pane-assets/{chunk-FB5B2WYF.js → chunk-I5Q4CZDJ.js} +1 -1
  58. package/lib/public/pane-assets/{chunk-53KRXJDL.js → chunk-KJN6KGEN.js} +1 -1
  59. package/lib/public/pane-assets/chunk-KZ3CYS5U.js +1 -0
  60. package/lib/public/pane-assets/chunk-MR4FHQFA.js +1 -0
  61. package/lib/public/pane-assets/chunk-NRC5RDIL.js +1 -0
  62. package/lib/public/pane-assets/chunk-NRP4NXVZ.js +1 -0
  63. package/lib/public/pane-assets/chunk-OERDYIHU.js +1 -0
  64. package/lib/public/pane-assets/{chunk-TK446XFF.js → chunk-OGIHAXLD.js} +1 -1
  65. package/lib/public/pane-assets/chunk-OQBKX36J.js +2 -0
  66. package/lib/public/pane-assets/chunk-Q2HJ5CWT.js +1 -0
  67. package/lib/public/pane-assets/{chunk-4WYURTPH.js → chunk-QOL6PHMZ.js} +1 -1
  68. package/lib/public/pane-assets/{chunk-AMZ7P526.js → chunk-TVKTFEST.js} +1 -1
  69. package/lib/public/pane-assets/{chunk-TU3AHPSN.js → chunk-UMXZTYOY.js} +1 -1
  70. package/lib/public/pane-assets/chunk-W5MFUKXJ.js +1 -0
  71. package/lib/public/pane-assets/chunk-W7XXER5Z.js +174 -0
  72. package/lib/public/pane-assets/chunk-Y77DR2RU.js +1 -0
  73. package/lib/public/pane-assets/{chunk-SGMEO3P7.js → chunk-YBYNU4VI.js} +1 -1
  74. package/lib/public/pane-assets/{chunk-JIV7O5GN.js → chunk-YHBTK56T.js} +1 -1
  75. package/lib/public/pane-assets/manifest.json +451 -437
  76. package/lib/public/pane-assets/style-F4MQRRX2.css +1 -0
  77. package/lib/public/style.css +4 -0
  78. package/lib/public/workspace-art/workshop-dark.webp +0 -0
  79. package/lib/public/workspace-art/workshop-light.webp +0 -0
  80. package/lib/public/workspace-background-catalog.js +40 -0
  81. package/lib/server-appearance-settings.js +16 -5
  82. package/lib/server.js +6 -0
  83. package/lib/session-github.js +1 -7
  84. package/lib/terminal-manager.js +5 -1
  85. package/lib/terminal.js +10 -1
  86. package/package.json +1 -1
  87. package/lib/public/pane-assets/app-PV3SEOTX.js +0 -1
  88. package/lib/public/pane-assets/chunk-2G6DB3ES.js +0 -1
  89. package/lib/public/pane-assets/chunk-6QFLYOVY.js +0 -1
  90. package/lib/public/pane-assets/chunk-BK2NRZFM.js +0 -1
  91. package/lib/public/pane-assets/chunk-D3WR2TYZ.js +0 -2
  92. package/lib/public/pane-assets/chunk-E7D5A27I.js +0 -1
  93. package/lib/public/pane-assets/chunk-FDBSE7BE.js +0 -174
  94. package/lib/public/pane-assets/chunk-FHB76KH2.js +0 -1
  95. package/lib/public/pane-assets/chunk-FNGO6432.js +0 -1
  96. package/lib/public/pane-assets/chunk-HF7AK56Q.js +0 -1
  97. package/lib/public/pane-assets/chunk-ILVRGTDF.js +0 -1
  98. package/lib/public/pane-assets/chunk-L3SFMSLP.js +0 -1
  99. package/lib/public/pane-assets/chunk-PAY3A4JS.js +0 -1
  100. package/lib/public/pane-assets/chunk-QVHC324H.js +0 -1
  101. package/lib/public/pane-assets/chunk-SFANEWZA.js +0 -1
  102. package/lib/public/pane-assets/chunk-US5VELGB.js +0 -1
  103. package/lib/public/pane-assets/chunk-VZ2OKDAO.js +0 -1
  104. package/lib/public/pane-assets/style-563D4UN6.css +0 -1
@@ -0,0 +1,261 @@
1
+ /* Layout wrapper only; the rail and sidebar carry their own island surfaces. */
2
+ #navigation-island { display: contents; }
3
+
4
+ /* Theme classes are resolved by theme.js, including automatic appearance. */
5
+ :root { --workspace-art: none; --workspace-solid: var(--workspace-solid-dark, #2e3f4b); }
6
+ :root.light-theme { --workspace-solid: var(--workspace-solid-light, #cbdfe9); }
7
+ :root[data-workspace-background="workshop"] { --workspace-art: url("../workspace-art/workshop-dark.webp"); }
8
+ :root.light-theme[data-workspace-background="workshop"] { --workspace-art: url("../workspace-art/workshop-light.webp"); }
9
+
10
+ @media (min-width: 769px) {
11
+ /* One continuous backing reaches both the global menu and workspace. */
12
+ body:not(.pane-mode) #layout {
13
+ background: var(--workspace-solid) var(--workspace-art) center / cover no-repeat;
14
+ }
15
+
16
+ body:not(.pane-mode) #layout-body {
17
+ gap: 6px;
18
+ padding: 6px;
19
+ background: transparent;
20
+ }
21
+
22
+ body:not(.pane-mode) #top-bar {
23
+ border-bottom: 1px solid var(--border-subtle);
24
+ }
25
+
26
+ #navigation-island {
27
+ position: relative;
28
+ display: flex;
29
+ gap: 6px;
30
+ flex: 0 0 auto;
31
+ min-width: 0;
32
+ min-height: 0;
33
+ background: transparent;
34
+ border: 0;
35
+ border-radius: 0;
36
+ box-shadow: none;
37
+ }
38
+
39
+ #navigation-island > #icon-strip {
40
+ isolation: isolate;
41
+ box-sizing: border-box;
42
+ padding-top: 8px;
43
+ --account-rail-strip-fixed-top: calc(8px + 48px + 58px + 48px);
44
+ background: transparent;
45
+ border: 0;
46
+ border-radius: 0;
47
+ box-shadow: none;
48
+ }
49
+
50
+ #icon-strip-navigation { display: contents; }
51
+
52
+ /* At short heights, keep all navigation reachable above the fixed account. */
53
+ @media (max-height: 500px) {
54
+ #icon-strip-navigation {
55
+ display: flex;
56
+ flex-direction: column;
57
+ align-items: center;
58
+ width: 100%;
59
+ flex: 1 1 0;
60
+ min-height: 0;
61
+ overflow-y: auto;
62
+ overflow-x: hidden;
63
+ scrollbar-width: none;
64
+ }
65
+ #icon-strip-navigation::-webkit-scrollbar { display: none; }
66
+ #icon-strip-navigation > #icon-strip-projects,
67
+ #icon-strip-navigation > .icon-strip-mate-section {
68
+ flex: 0 0 auto;
69
+ max-height: none;
70
+ overflow: visible;
71
+ }
72
+ }
73
+
74
+ /* The Dock face aligns with the sidebar; controls breathe inside the rail. */
75
+ #navigation-island > #icon-strip::before {
76
+ content: "";
77
+ position: absolute;
78
+ z-index: -1;
79
+ inset: 0;
80
+ border: 1px solid var(--border-subtle);
81
+ border-radius: 12px;
82
+ background: var(--chrome-material-fill);
83
+ -webkit-backdrop-filter: var(--chrome-material-filter);
84
+ backdrop-filter: var(--chrome-material-filter);
85
+ box-shadow: none;
86
+ pointer-events: none;
87
+ }
88
+
89
+ #navigation-island > #icon-strip .icon-strip-item,
90
+ #navigation-island > #icon-strip .icon-strip-home {
91
+ isolation: isolate;
92
+ }
93
+
94
+ #navigation-island > #icon-strip .icon-strip-item::before {
95
+ transition: background 0.16s ease, box-shadow 0.16s ease, transform 0.14s ease;
96
+ }
97
+
98
+ #navigation-island > #icon-strip .icon-strip-item:hover::before,
99
+ #navigation-island > #icon-strip .icon-strip-home:hover::before {
100
+ transform: translateY(-1px);
101
+ }
102
+
103
+ #navigation-island > #icon-strip .icon-strip-item:active::before,
104
+ #navigation-island > #icon-strip .icon-strip-home:active::before {
105
+ transform: translateY(1px);
106
+ }
107
+
108
+ /* Keep the active destination cue inside the clipped rail face. */
109
+ #navigation-island > #icon-strip .icon-strip-item.active .icon-strip-pill,
110
+ #navigation-island > #icon-strip .icon-strip-home.active .icon-strip-pill {
111
+ left: 50%;
112
+ top: auto;
113
+ bottom: 4px;
114
+ width: 12px;
115
+ height: 2px;
116
+ opacity: 1;
117
+ border-radius: 2px;
118
+ transform: translateX(-50%);
119
+ background: var(--accent);
120
+ }
121
+
122
+ #navigation-island > #icon-strip .icon-strip-item:hover:not(.active) .icon-strip-pill,
123
+ #navigation-island > #icon-strip .icon-strip-home:hover:not(.active) .icon-strip-pill {
124
+ left: 50%;
125
+ top: auto;
126
+ bottom: 4px;
127
+ width: 8px;
128
+ height: 2px;
129
+ opacity: 0.65;
130
+ border-radius: 2px;
131
+ transform: translateX(-50%);
132
+ }
133
+
134
+ #navigation-island > #icon-strip :is(.icon-strip-item, .icon-strip-home):focus-visible {
135
+ outline-offset: -3px;
136
+ }
137
+
138
+ @media (prefers-reduced-motion: reduce) {
139
+ #navigation-island > #icon-strip .icon-strip-item::before,
140
+ #navigation-island > #icon-strip .icon-strip-home::before {
141
+ transition: none;
142
+ }
143
+ }
144
+
145
+ #icon-strip #sidebar-shell-expand-btn {
146
+ width: 28px;
147
+ height: 28px;
148
+ flex-shrink: 0;
149
+ margin: 0 0 4px;
150
+ }
151
+ body:not(.pane-mode) #sidebar-expand-btn,
152
+ body:not(.pane-mode) .split-pane-sidebar { display: none !important; }
153
+
154
+ #navigation-island:has(> #sidebar-resize-handle.dragging, > #mate-sidebar-resize-handle.dragging) > :is(#sidebar-column, #mate-sidebar-column) {
155
+ transition: none;
156
+ }
157
+
158
+ #navigation-island > :is(#sidebar-column, #mate-sidebar-column) {
159
+ box-sizing: border-box;
160
+ border: 1px solid var(--border-subtle);
161
+ border-radius: 12px;
162
+ box-shadow: 0 1px 2px rgba(var(--shadow-rgb), 0.06);
163
+ }
164
+
165
+ #layout.sidebar-collapsed #navigation-island {
166
+ gap: 0;
167
+ }
168
+
169
+ #layout.sidebar-collapsed #navigation-island > :is(#sidebar-column, #mate-sidebar-column) {
170
+ border: 0;
171
+ box-shadow: none;
172
+ }
173
+
174
+ body:not(.pane-mode) #main-area {
175
+ border: 0;
176
+ border-radius: 0;
177
+ background: transparent;
178
+ box-shadow: none;
179
+ }
180
+
181
+ /* Let the one shell image reach the glass headers and inter-pane gaps.
182
+ Reading surfaces and embedded clients retain their own opaque fill. */
183
+ body:not(.pane-mode) #main-column,
184
+ body:not(.pane-mode) #main-panels,
185
+ body:not(.pane-mode) #main-panels:has(> #split-host.split-view-canvas.visible),
186
+ body:not(.pane-mode) #split-host.split-view-canvas > .split-pane {
187
+ background: transparent;
188
+ }
189
+ body:not(.pane-mode) #app { background: var(--bg); }
190
+
191
+ /* The shell gutter already seats the working surface. Native conversations
192
+ use one boundary around their header and canvas; split panes own theirs. */
193
+ body:not(.pane-mode) #main-column {
194
+ border: 1px solid var(--border-subtle);
195
+ border-radius: 12px;
196
+ }
197
+ body:not(.pane-mode) #main-column:has(#split-host.split-view-canvas.visible) {
198
+ border: 0;
199
+ border-radius: 0;
200
+ }
201
+ body:not(.pane-mode) #split-host.split-view-canvas.visible { padding: 0; }
202
+ body.mate-workspace-active:not(.pane-mode) #main-panels {
203
+ margin: 0;
204
+ border-radius: 0;
205
+ box-shadow: none;
206
+ }
207
+ }
208
+
209
+ body.pane-mode #navigation-island,
210
+ body.projects-active:not(.projects-shell) #navigation-island { display: none; }
211
+
212
+ /* Standalone welcome and retained Home keep their own existing shell rules. */
213
+ body.projects-active:not(.projects-shell) #layout { background: var(--bg); }
214
+ body.projects-active:not(.projects-shell) #layout-body {
215
+ padding: 0;
216
+ gap: 0;
217
+ background-image: none;
218
+ }
219
+
220
+ @media (prefers-reduced-motion: reduce) {
221
+ #navigation-island > :is(#sidebar-column, #mate-sidebar-column) {
222
+ transition: none;
223
+ }
224
+ }
225
+
226
+ /* Passive counts on the four workspace controls share one compact finish. */
227
+ #shared-browser-toggle-btn .shared-browser-count,
228
+ #terminal-toggle-btn #terminal-count,
229
+ #sticky-notes-toggle-btn .sticky-notes-count,
230
+ #notif-center-btn .notif-badge {
231
+ position: absolute;
232
+ top: -4px;
233
+ right: -4px;
234
+ box-sizing: border-box;
235
+ display: inline-flex;
236
+ align-items: center;
237
+ justify-content: center;
238
+ min-width: 15px;
239
+ height: 15px;
240
+ padding: 0 3px;
241
+ border: 1px solid rgba(0, 0, 0, .16);
242
+ border-radius: 999px;
243
+ background: var(--toolbar-count-fill);
244
+ color: var(--toolbar-count-ink, #fff);
245
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .18), 0 1px 2px rgba(0, 0, 0, .2);
246
+ font-family: inherit;
247
+ font-size: 9px;
248
+ font-weight: 700;
249
+ font-variant-numeric: tabular-nums;
250
+ line-height: 1;
251
+ white-space: nowrap;
252
+ pointer-events: none;
253
+ }
254
+ #shared-browser-toggle-btn { --toolbar-count-fill: #2563eb; }
255
+ #terminal-toggle-btn { --toolbar-count-fill: #15803d; }
256
+ #sticky-notes-toggle-btn { --toolbar-count-fill: #facc15; --toolbar-count-ink: #422006; }
257
+ #notif-center-btn { --toolbar-count-fill: #dc2626; }
258
+ #shared-browser-toggle-btn .shared-browser-count.hidden,
259
+ #terminal-toggle-btn #terminal-count.hidden,
260
+ #sticky-notes-toggle-btn .sticky-notes-count.hidden,
261
+ #notif-center-btn .notif-badge.hidden { display: none; }
@@ -7,23 +7,7 @@
7
7
  position: relative;
8
8
  }
9
9
 
10
- .notif-badge {
11
- position: absolute;
12
- top: -3px;
13
- right: -3px;
14
- background: var(--brand-coral);
15
- color: var(--brand-ink);
16
- font-size: 9px;
17
- font-weight: 700;
18
- min-width: 15px;
19
- height: 15px;
20
- line-height: 15px;
21
- border-radius: 8px;
22
- text-align: center;
23
- padding: 0 3px;
24
- pointer-events: none;
25
- font-family: inherit;
26
- }
10
+
27
11
  .notif-badge.hidden { display: none; }
28
12
 
29
13
  /* ========================================================
@@ -510,7 +510,7 @@
510
510
  #user-settings [data-section="us-integrations"] .us-voice-row-controls > button { grid-column:3; grid-row:1 / span 2; }
511
511
  }
512
512
  #user-settings #us-connections-empty { display:none; padding:12px 0; }
513
- #user-settings [data-connections-loaded="true"]:not(:has(.us-integration-email-row, [data-connection-id])) #us-connections-empty { display:block; }
513
+ #user-settings [data-connections-loaded="true"][data-github-loaded="true"]:not(:has(.us-integration-email-row, [data-connection-id])) #us-connections-empty { display:block; }
514
514
  #user-settings .us-integration-catalog h3 { margin-top:0; }
515
515
  #user-settings .email-setup-inline { margin:8px 0 16px; }
516
516
  #user-settings .email-setup-inline .email-setup-dialog { width:100%; max-width:none; max-height:none; overflow:visible; padding:12px; border:1px solid var(--border-subtle); border-radius:6px; background:var(--bg-alt); box-sizing:border-box; }
@@ -519,7 +519,9 @@
519
519
  #user-settings .email-setup-inline .email-setup-actions { flex-wrap:wrap; }
520
520
  #user-settings .email-setup-inline .email-setup-btn { min-height:32px; font-size:13px; }
521
521
 
522
- :is(#user-settings, #project-settings, #server-settings) .settings-link { font-size:13px; color:var(--link); overflow-wrap:anywhere; }
522
+ :is(.us-section, .ps-section, .server-settings-section) a.settings-link,
523
+ :is(.us-section, .ps-section, .server-settings-section) a.settings-link:visited { font-size:13px; color:var(--link); overflow-wrap:anywhere; }
524
+ :is(.us-section, .ps-section, .server-settings-section) a.settings-link:is(:hover, :focus-visible) { color:var(--link-hover); }
523
525
 
524
526
  :is(.us-section, .ps-section, .server-settings-section) .settings-section-heading { display:flex; align-items:center; justify-content:space-between; gap:12px; margin:26px 0 8px; min-height:32px; }
525
527
  :is(#user-settings, #project-settings, #server-settings) .settings-section-heading h3 { margin:0; }
@@ -527,3 +529,7 @@
527
529
 
528
530
  /* Continuous settings groups share quiet boundaries in every scope. */
529
531
  :is(.us-section, .ps-section, .server-settings-section) .settings-section-group + .settings-section-group { border-top: 1px solid var(--border-subtle); margin-top: 24px; padding-top: 4px; }
532
+
533
+ #user-settings #us-github-editor { margin:8px 0 16px; }
534
+ #user-settings #us-github-editor details { font-size:12px; color:var(--text-muted); margin:8px 0; overflow-wrap:anywhere; }
535
+ #user-settings #us-github-editor .settings-form-actions { flex-wrap:wrap; }
@@ -1,24 +1,7 @@
1
1
  @import url("./shared-browser-skins.css");
2
2
 
3
3
  #shared-browser-toggle-btn { position: relative; }
4
- .shared-browser-count {
5
- position: absolute;
6
- top: -4px;
7
- right: -4px;
8
- background: var(--brand-blue);
9
- color: var(--brand-ink);
10
- font-size: 9px;
11
- font-weight: 700;
12
- min-width: 14px;
13
- height: 14px;
14
- border-radius: 7px;
15
- display: inline-flex;
16
- align-items: center;
17
- justify-content: center;
18
- padding: 0 3px;
19
- font-family: "Roboto Mono", monospace;
20
- pointer-events: none;
21
- }
4
+
22
5
  .shared-browser-count.hidden { display: none; }
23
6
 
24
7
  /* Shared browser uses the existing mutually exclusive right workbench. */
@@ -59,7 +59,10 @@
59
59
  }
60
60
  .split-pane-force-stop svg, .split-pane-search svg, .split-pane-info svg, .split-pane-sidebar svg,
61
61
  .split-view-worker-popover-header button svg { width: 14px; height: 14px; }
62
- .split-pane-info { width: 20px; flex-basis: 20px; padding: 3px; }
62
+ .split-pane-info { width: 20px; flex-basis: 20px; flex-shrink: 0; padding: 3px; }
63
+ .split-pane-identity { display: inline-flex; align-items: center; gap: inherit; flex: 0 1 auto; min-width: 0; max-width: 46%; }
64
+ .split-pane-identity > .split-pane-title { max-width: none; }
65
+ .split-view-canvas .split-pane-identity { max-width: 100%; }
63
66
  .split-view-canvas .split-pane-header button[hidden] { display: none; }
64
67
  .split-pane-sidebar { display: none; }
65
68
  #layout.sidebar-collapsed .split-pane-sidebar:not([hidden]) { display: inline-flex; }
@@ -120,7 +123,6 @@
120
123
  .split-view-canvas .split-pane-header button { flex-shrink: 0; }
121
124
  .split-view-canvas .split-pane-header button svg { width: 13px; height: 13px; }
122
125
  .split-view-canvas .split-pane-header .split-pane-sidebar { order: -1; }
123
- .split-view-canvas .split-pane-header .split-pane-info { order: 10; }
124
126
  .split-view-canvas .split-pane-header .split-pane-close { order: 11; }
125
127
  .split-view-canvas .split-pane-frame { flex: 1; min-height: 0; width: 100%; border: 0; }
126
128
  .split-view-divider {
@@ -180,6 +182,7 @@ body.split-view-resizing .split-pane-frame { pointer-events: none; }
180
182
  .split-view-canvas .split-view-runtime { flex: 0 1 auto; max-width: 55%; min-width: 48px; }
181
183
  }
182
184
  .split-view-workers {
185
+ background: var(--bg);
183
186
  display: flex;
184
187
  align-items: center;
185
188
  gap: 5px;
@@ -259,9 +262,10 @@ body.split-view-resizing .split-pane-frame { pointer-events: none; }
259
262
  .split-view-worker-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
260
263
  .split-view-worker-identity { flex-shrink: 0; white-space: nowrap; }
261
264
  .split-view-worker-generation { flex-shrink: 0; color: var(--text-dimmer); white-space: nowrap; }
262
- .split-view-worker-loop { display: inline-flex; align-items: center; justify-content: center; width: 5px; height: 5px; flex: 0 0 5px; color: var(--text-dimmer); transition: transform 350ms ease-in-out; }
263
- .split-view-worker-loop svg { width: 9px; height: 9px; flex-shrink: 0; }
264
- .split-view-worker-loop[data-state="working"] { color: var(--brand-green); }
265
+ .split-view-worker-loop { display: inline-flex; align-items: center; justify-content: center; width: 10px; height: 10px; flex: 0 0 10px; color: var(--text-muted); transition: transform 350ms ease-in-out; }
266
+ .split-view-worker-loop svg { width: 10px; height: 10px; flex-shrink: 0; stroke-width: 3; }
267
+ .split-view-worker-loop[data-state="working"] { color: color-mix(in srgb, var(--success) 80%, var(--bg-alt) 20%); }
268
+ .split-view-worker-loop[data-state="disconnected"] { color: var(--text-dimmer); opacity: .65; }
265
269
  @media (prefers-reduced-motion: reduce) { .split-view-worker-loop { transition: none; } }
266
270
  .agent-message-bubble-activity { color: var(--text-muted); font-size: 10px; margin-bottom: 5px; line-height: 1.4; white-space: normal; }
267
271
  .agent-message-bubble-text[hidden] { display: none; }
@@ -55,24 +55,7 @@
55
55
  #sticky-notes-toggle-btn:hover { color: var(--text-secondary); background: rgba(var(--overlay-rgb),0.04); border-color: var(--border); }
56
56
  #sticky-notes-toggle-btn.active { color: var(--text); background: rgba(var(--overlay-rgb),0.06); border-color: var(--border); }
57
57
 
58
- .sticky-notes-count {
59
- position: absolute;
60
- top: -4px;
61
- right: -4px;
62
- background: var(--brand-gold);
63
- color: var(--brand-ink);
64
- font-size: 9px;
65
- font-weight: 700;
66
- min-width: 14px;
67
- height: 14px;
68
- border-radius: 7px;
69
- display: inline-flex;
70
- align-items: center;
71
- justify-content: center;
72
- padding: 0 3px;
73
- font-family: "Roboto Mono", monospace;
74
- pointer-events: none;
75
- }
58
+
76
59
 
77
60
  .sticky-notes-count.hidden { display: none; }
78
61
 
@@ -1,5 +1,5 @@
1
1
  /* ==========================================================================
2
- Top Bar — full-width bar above everything (forms reverse-ㄱ with icon strip)
2
+ Top Bar — independent full-width bar above navigation and workspace
3
3
  ========================================================================== */
4
4
 
5
5
  #top-bar {
@@ -0,0 +1,43 @@
1
+ .us-background-gallery { margin-top: 24px; }
2
+ .us-background-gallery h4 { margin: 12px 0 8px; font-size: 13px; font-weight: 500; color: var(--text-secondary); }
3
+ .us-background-palette { display: flex; align-items: center; gap: 4px; margin-top: 10px; min-width: 0; }
4
+ .us-background-colors { display: flex; flex: 1; min-width: 0; gap: 4px; overflow-x: auto; padding: 5px; scrollbar-width: none; touch-action: pan-x; }
5
+ .us-background-colors::-webkit-scrollbar { display: none; }
6
+ .us-background-choice { border: 0; padding: 0; background: none; color: var(--text-secondary); font: inherit; font-size: 12px; cursor: pointer; display: flex; flex-direction: column; align-items: center; gap: 6px; border-radius: 8px; }
7
+ .us-background-colors .us-background-choice { width: 40px; height: 40px; flex: 0 0 40px; justify-content: center; border-radius: 50%; }
8
+ .us-background-sample { display: block; width: 32px; height: 32px; border-radius: 50%; background: var(--swatch-dark); box-shadow: inset 0 0 0 1px rgba(var(--overlay-rgb), 0.15); }
9
+ .light-theme .us-background-sample { background: var(--swatch-light); }
10
+ .us-background-choice:hover .us-background-sample { outline: 1px solid var(--text-muted); outline-offset: 2px; }
11
+ .us-background-choice[aria-checked="true"] .us-background-sample { outline: 2px solid var(--accent); outline-offset: 3px; }
12
+ .us-background-choice:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
13
+ .us-palette-arrow, .us-palette-add { flex: 0 0 auto; display: grid; place-items: center; width: 24px; height: 32px; padding: 0; border: 0; background: none; color: var(--text-secondary); cursor: pointer; border-radius: 50%; }
14
+ .us-palette-arrow[hidden] { display: none; }
15
+ .us-palette-arrow:disabled { opacity: 0.3; cursor: default; }
16
+ .us-palette-add { width: 32px; height: 32px; margin-left: 4px; border: 1px solid var(--border); }
17
+ .us-palette-arrow svg, .us-palette-add svg { width: 18px; height: 18px; }
18
+ .us-palette-add:hover, .us-palette-arrow:hover:not(:disabled) { color: var(--text); background: var(--accent-8); }
19
+ .us-palette-add:focus-visible, .us-palette-arrow:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
20
+ .us-background-pictures { display: flex; }
21
+ .us-background-workshop, .light-theme .us-background-workshop { width: 112px; height: 64px; border-radius: 8px; background: url('../workspace-art/workshop-dark.webp') center / cover; }
22
+ .light-theme .us-background-workshop { background-image: url('../workspace-art/workshop-light.webp'); }
23
+ .us-color-popover { position: fixed; z-index: 610; width: 260px; max-width: calc(100vw - 16px); box-sizing: border-box; padding: 12px; background: var(--bg); color: var(--text); border: 1px solid var(--border); border-radius: 10px; box-shadow: 0 4px 16px rgba(0,0,0,0.18); }
24
+ .us-color-popover[hidden], .us-color-popover [hidden] { display: none; }
25
+ .us-color-top { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
26
+ .us-color-modes { display: flex; gap: 4px; }
27
+ .us-color-modes button { display: grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 0; border-radius: 6px; background: transparent; color: var(--text-muted); cursor: pointer; }
28
+ .us-color-modes button[aria-pressed="true"] { background: var(--accent-12); color: var(--text); }
29
+ .us-color-modes svg { width: 16px; height: 16px; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
30
+ .us-color-preview { width: 24px; height: 24px; border-radius: 50%; box-shadow: inset 0 0 0 1px rgba(var(--overlay-rgb),0.15); }
31
+ .us-color-area { position: relative; height: 108px; border-radius: 6px; background: linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, hsl(var(--picker-hue),100%,50%)); touch-action: none; cursor: crosshair; }
32
+ .us-color-area > span { position: absolute; width: 9px; height: 9px; border: 2px solid #fff; border-radius: 50%; box-shadow: 0 0 0 1px #333; transform: translate(-50%,-50%); pointer-events: none; }
33
+ #us-color-hue { display: block; width: 100%; margin: 10px 0; height: 10px; appearance: none; border-radius: 5px; background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00); cursor: pointer; }
34
+ .us-color-popover .settings-form-actions { display: flex; gap: 8px; margin-top: 10px; }
35
+ .us-color-popover .settings-status:empty { display: none; }
36
+ .us-color-popover .settings-status { font-size: 12px; }
37
+ .us-color-popover :is(button, input, [tabindex]):focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
38
+ .us-background-gallery .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
39
+
40
+ #us-color-hue::-webkit-slider-thumb { appearance: none; width: 14px; height: 14px; border: 2px solid #fff; border-radius: 50%; background: var(--bg); box-shadow: 0 0 0 1px #777; }
41
+ #us-color-hue::-moz-range-thumb { width: 10px; height: 10px; border: 2px solid #fff; border-radius: 50%; background: var(--bg); box-shadow: 0 0 0 1px #777; }
42
+
43
+ #user-settings:has(#us-custom-color-editor:not([hidden])) #us-appearance-status { visibility: hidden; }
@@ -33,14 +33,19 @@ body.clay-workspace-active #sidebar-column #you-button.palette-tile.active > .lu
33
33
  .you-category-options { position: absolute; right: 0; top: 42px; z-index: 2; min-width: 160px; max-height: 240px; overflow: auto; padding: 4px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg); box-shadow: 0 3px 9px rgba(0,0,0,.12); }
34
34
  .you-category-options button { display: block; width: 100%; padding: 6px 8px; border: 0; border-radius: 5px; background: transparent; color: var(--text); text-align: left; font: inherit; font-size: 12px; cursor: pointer; }
35
35
  .you-category-options button:hover, .you-category-options button[aria-pressed="true"] { background: var(--bg-alt); }
36
- #you-activity { display: none; position: relative; margin-left: 0; min-width: 0; max-width: 360px; }
36
+ /* This local overlay never participates in the menu's flex layout. */
37
+ #you-activity { display: none; position: absolute; z-index: 50; inset-inline-start: 0; top: 2px; width: max-content; min-width: 180px; max-width: min(360px, calc(100vw - 20px)); pointer-events: none; }
37
38
  #you-activity.announcing { display: block; }
38
- #you-activity.announcing ~ .top-bar-brand-link { display: none; }
39
- #you-activity-toggle { position: relative; display: flex; align-items: center; height: 28px; width: 100%; padding: 0 10px; border: 1.5px solid var(--text-muted); border-radius: 15px 16px 14px 7px; background: var(--bg-alt); color: var(--text-secondary); cursor: pointer; font: inherit; font-size: 11px; box-shadow: 0 1px 2px rgba(0,0,0,.08); }
40
- #you-activity-toggle::before, #you-activity-toggle::after { content: ''; position: absolute; left: 14px; bottom: -13px; width: 17px; height: 14px; background: var(--text-muted); clip-path: polygon(0 0, 100% 0, 35% 100%); pointer-events: none; }
41
- #you-activity-toggle::after { left: 15px; bottom: -10px; width: 14px; height: 11px; background: var(--bg-alt); }
42
- #you-activity-text { overflow: hidden; white-space: nowrap; text-overflow: clip; }
43
- #you-activity-history { position: absolute; left: 0; top: 38px; width: min(390px, calc(100vw - 80px)); max-height: min(520px, calc(100dvh - 70px)); overflow-y: auto; z-index: 500; border: 1px solid var(--border); border-radius: 10px; background: var(--bg); box-shadow: 0 5px 18px rgba(0,0,0,.16); color: var(--text); }
39
+ #you-activity-toggle { --you-balloon-face: var(--bg-alt); --you-balloon-edge: color-mix(in srgb, var(--text-muted) 55%, var(--bg-alt)); position: relative; box-sizing: border-box; display: flex; align-items: center; gap: 7px; height: 34px; width: 100%; padding: 0 20px; border: 1px solid var(--you-balloon-edge); border-radius: 9px; background: var(--you-balloon-face); color: var(--text); cursor: pointer; font: inherit; font-size: 11.5px; line-height: 1.3; filter: drop-shadow(0 2px 2px rgba(var(--shadow-rgb), .28)) drop-shadow(0 5px 5px rgba(var(--shadow-rgb), .18)); pointer-events: auto; }
40
+ /* A matching diamond covers the bottom border; its lower half is the tail. */
41
+ #you-activity-toggle::before { content: ''; position: absolute; inset-inline-start: 24px; bottom: -6px; width: 10px; height: 10px; box-sizing: border-box; transform: rotate(45deg); border-right: 1px solid var(--you-balloon-edge); border-bottom: 1px solid var(--you-balloon-edge); background: var(--you-balloon-face); pointer-events: none; }
42
+ #you-activity-toggle:hover { --you-balloon-face: color-mix(in srgb, var(--bg-alt) 96%, var(--text)); }
43
+ #you-activity #you-activity-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
44
+ .you-activity-chevron, #you-activity-text { position: relative; }
45
+ .you-activity-chevron { flex: 0 0 11px; width: 11px; height: 11px; fill: none; stroke: var(--text-muted); stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
46
+ #you-activity-toggle[aria-expanded="true"] .you-activity-chevron { transform: rotate(180deg); }
47
+ #you-activity-text { min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: clip; }
48
+ #you-activity-history { position: absolute; inset-inline-start: 0; top: 44px; width: min(390px, calc(100vw - 20px)); max-height: min(520px, calc(100dvh - 70px)); overflow-y: auto; z-index: 1; pointer-events: auto; border: 1px solid var(--border); border-radius: 10px; background: var(--bg); box-shadow: 0 5px 18px rgba(0,0,0,.16); color: var(--text); }
44
49
  #you-activity-history header { display: flex; align-items: center; justify-content: space-between; padding: 10px 12px; border-bottom: 1px solid var(--border-subtle); font-size: 12px; }
45
50
  #you-activity-history button { font: inherit; font-size: 12px; color: var(--text-secondary); cursor: pointer; }
46
51
  #you-activity-close { border: 0; background: transparent; }
@@ -51,14 +56,12 @@ body.clay-workspace-active #sidebar-column #you-button.palette-tile.active > .lu
51
56
  #you-activity-open, #you-activity-more { margin: 8px 12px; padding: 5px 9px; border: 1px solid var(--border); border-radius: 7px; background: var(--bg-alt); }
52
57
  @media (max-width: 1023px) { #you-wide, #you-fullscreen { display: none; } }
53
58
  @media (max-width: 768px) {
54
- #you-activity { margin-left: 0; max-width: 190px; }
55
- #you-activity-toggle::before, #you-activity-toggle::after { display: none; }
56
59
  #you-activity-history { width: min(340px, calc(100vw - 20px)); }
57
60
  #you-panel .project-logs-subtitle { display: none; }
58
61
  #you-panel .project-logs-window-actions { margin-left: auto; }
59
62
  }
60
63
  #you-activity .hidden, #you-panel .hidden { display: none; }
61
- @media (min-width: 769px) { #you-activity { max-width: min(360px, calc(50vw - 270px)); } }
64
+ @media (min-width: 769px) { #you-activity { max-width: clamp(180px, calc(var(--top-bar-search-left, 50vw) - var(--top-bar-search-width, 40vw) / 2 - 24px), 360px); } }
62
65
 
63
66
  #you-announcement-status { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
64
67