@talgent/workbench-ui 0.0.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/README.md +15 -2
  2. package/assets/brand-icons/LICENSE.md +30 -0
  3. package/assets/brand-icons/README.md +5 -0
  4. package/assets/brand-icons/figma.svg +1 -0
  5. package/assets/brand-icons/github.svg +1 -0
  6. package/assets/brand-icons/linear.svg +1 -0
  7. package/assets/brand-icons/notion.svg +1 -0
  8. package/assets/brand-icons/sentry.svg +1 -0
  9. package/assets/brand-icons/slack.svg +1 -0
  10. package/assets/fonts/Inter-OFL.txt +93 -0
  11. package/assets/fonts/inter-latin.woff2 +0 -0
  12. package/components/agent/agent-icon.css +14 -0
  13. package/components/agent/agent-icon.tsx +14 -0
  14. package/components/analytics/chart-geometry.ts +95 -0
  15. package/components/analytics/dashboard-charts.tsx +136 -0
  16. package/components/analytics/model-usage-chart.tsx +84 -0
  17. package/components/analytics/token-breakdown.css +13 -0
  18. package/components/analytics/token-breakdown.tsx +23 -0
  19. package/components/analytics/token-report.tsx +57 -0
  20. package/components/analytics/work-usage/turn-timeline.tsx +98 -0
  21. package/components/analytics/work-usage/turns.ts +170 -0
  22. package/components/analytics/work-usage/work-status.ts +36 -0
  23. package/components/analytics/work-usage/work-usage-reader.tsx +122 -0
  24. package/components/analytics/work-usage/work-usage.css +48 -0
  25. package/components/auth/auth-gate.tsx +44 -0
  26. package/components/chat/message-input.tsx +105 -0
  27. package/components/composer/permission-mode-list.tsx +15 -0
  28. package/components/composer/prompt-bar-controls.tsx +77 -0
  29. package/components/composer/prompt-bar.tsx +45 -0
  30. package/components/composer/skill-completion.css +27 -0
  31. package/components/composer/skill-completion.tsx +49 -0
  32. package/components/composer/use-slash-completion.tsx +69 -0
  33. package/components/composer/work-start.css +133 -0
  34. package/components/feedback/toast-region.css +2 -0
  35. package/components/feedback/toast-region.tsx +15 -0
  36. package/components/files/file-facts.tsx +16 -0
  37. package/components/files/file-section.tsx +181 -0
  38. package/components/markdown.tsx +144 -0
  39. package/components/marketplace/connector-pages.tsx +166 -0
  40. package/components/marketplace/marketplace-icons.tsx +66 -0
  41. package/components/marketplace/marketplace-shared.tsx +43 -0
  42. package/components/marketplace/marketplace-shell.tsx +32 -0
  43. package/components/marketplace/marketplace.css +97 -0
  44. package/components/marketplace/parameter-fields.tsx +46 -0
  45. package/components/marketplace/plugin-list.tsx +84 -0
  46. package/components/marketplace/plugin-page.tsx +133 -0
  47. package/components/marketplace/provider-pages.tsx +120 -0
  48. package/components/preview/file-format.ts +75 -0
  49. package/components/preview/file-preview.tsx +153 -0
  50. package/components/preview/preview-verdict.ts +44 -0
  51. package/components/preview/preview.css +19 -0
  52. package/components/preview/text-preview.tsx +174 -0
  53. package/components/profile/provider-callback.tsx +43 -0
  54. package/components/profile/work-agent-appearance.tsx +109 -0
  55. package/components/profile/work-agent-soul.tsx +76 -0
  56. package/components/rail/rail-section.tsx +20 -0
  57. package/components/rail/rail.css +19 -0
  58. package/components/rail/use-expand-on-change.ts +18 -0
  59. package/components/session/startup-progress.css +77 -0
  60. package/components/session/startup-progress.tsx +103 -0
  61. package/components/session/work-permission-control.tsx +45 -0
  62. package/components/session/work-thinking-control.tsx +52 -0
  63. package/components/shell/account-menu.tsx +134 -0
  64. package/components/shell/app-shell.tsx +148 -0
  65. package/components/shell/core-reading-views.tsx +26 -0
  66. package/components/shell/core-reading.tsx +17 -0
  67. package/components/shell/document-title.tsx +11 -0
  68. package/components/shell/entry-shell.ts +39 -0
  69. package/components/shell/file-reading.tsx +22 -0
  70. package/components/shell/page-layout.tsx +7 -0
  71. package/components/shell/reading-context.ts +41 -0
  72. package/components/shell/reading-panel.css +67 -0
  73. package/components/shell/reading-panel.tsx +74 -0
  74. package/components/shell/sidebar-parts.tsx +38 -0
  75. package/components/work/context-rail.css +61 -0
  76. package/components/work/conversation-unavailable.css +6 -0
  77. package/components/work/conversation-unavailable.tsx +11 -0
  78. package/components/work/subagent-item.tsx +42 -0
  79. package/components/work/subagents-section.css +31 -0
  80. package/components/work/subagents-section.tsx +40 -0
  81. package/components/work/token-usage.tsx +28 -0
  82. package/components/work/tool-message-detail.tsx +39 -0
  83. package/components/work/tool-output-preview.tsx +52 -0
  84. package/components/work/tool-preview-reading.tsx +27 -0
  85. package/components/work/tool-reading-content.tsx +31 -0
  86. package/components/work/work-context-rail.tsx +23 -0
  87. package/components/work/work-conversation.tsx +207 -0
  88. package/components/work/work-history.tsx +115 -0
  89. package/components/work/work-interaction.css +38 -0
  90. package/components/work/work-interaction.tsx +105 -0
  91. package/components/work/work-message-flow.css +86 -0
  92. package/components/work/work-message-flow.tsx +352 -0
  93. package/components/work/work-progress-section.tsx +20 -0
  94. package/components/work/work-prompt-bar.tsx +82 -0
  95. package/components/work/work-question-record.tsx +72 -0
  96. package/components/work/work-snapshot-state.tsx +24 -0
  97. package/components/work/work-status-control.tsx +54 -0
  98. package/components/work-start/start-work-launch-state.ts +33 -0
  99. package/components/work-start/work-start-catalog.tsx +116 -0
  100. package/components/work-start/work-start-form.tsx +173 -0
  101. package/components/work-start/work-start-tray.css +40 -0
  102. package/components/work-start/work-start-tray.tsx +128 -0
  103. package/hooks/use-debounced.ts +11 -0
  104. package/hooks/use-work-conversation.ts +125 -0
  105. package/hooks/use-work-lifecycle-controls.ts +40 -0
  106. package/hooks/use-work-stream.ts +91 -0
  107. package/lib/account-service.ts +77 -0
  108. package/lib/agent-appearance-service.ts +59 -0
  109. package/lib/agent-icon.ts +26 -0
  110. package/lib/agent-soul-service.ts +48 -0
  111. package/lib/agent-work-service.ts +23 -0
  112. package/lib/client.ts +20 -0
  113. package/lib/computer-release.ts +30 -0
  114. package/lib/computer-service.ts +241 -0
  115. package/lib/dashboard-report.ts +38 -0
  116. package/lib/dashboard.ts +21 -0
  117. package/lib/marketplace-catalog.ts +138 -0
  118. package/lib/marketplace-connections.ts +98 -0
  119. package/lib/marketplace-plugins.ts +53 -0
  120. package/lib/marketplace-routes.ts +12 -0
  121. package/lib/model-vendors.ts +13 -0
  122. package/lib/name-taken-error.ts +7 -0
  123. package/lib/notifications.ts +37 -0
  124. package/lib/permission-modes.ts +25 -0
  125. package/lib/personal-usage-service.ts +19 -0
  126. package/lib/personal-work-service.ts +159 -0
  127. package/lib/plugin-parameters.ts +64 -0
  128. package/lib/preview-verdict.ts +26 -0
  129. package/lib/relative-time.ts +11 -0
  130. package/lib/session.ts +108 -0
  131. package/lib/share-link.ts +4 -0
  132. package/lib/stale-build-reload.ts +41 -0
  133. package/lib/start-work-request.ts +34 -0
  134. package/lib/startup-progress.ts +9 -0
  135. package/lib/subagents.ts +12 -0
  136. package/lib/thinking-levels.ts +2 -0
  137. package/lib/token-analytics.ts +168 -0
  138. package/lib/token-usage.ts +64 -0
  139. package/lib/trace-view-model.ts +292 -0
  140. package/lib/transport.ts +29 -0
  141. package/lib/use-now.ts +11 -0
  142. package/lib/use-work-trace.ts +175 -0
  143. package/lib/user-display.ts +49 -0
  144. package/lib/work-conversation.ts +118 -0
  145. package/lib/work-file-service.ts +118 -0
  146. package/lib/work-model.ts +38 -0
  147. package/lib/work-notices.ts +23 -0
  148. package/lib/work-progress.ts +41 -0
  149. package/lib/work-projection.ts +122 -0
  150. package/lib/work-questions.ts +18 -0
  151. package/lib/work-start-draft.ts +61 -0
  152. package/lib/work-start-loadout.ts +100 -0
  153. package/lib/work-start-source.ts +16 -0
  154. package/lib/work-state-presentation.ts +80 -0
  155. package/lib/work-stream-source.ts +32 -0
  156. package/package.json +81 -5
  157. package/pages/computers/computers-page.tsx +56 -0
  158. package/pages/computers/connect-computer-page.tsx +92 -0
  159. package/pages/computers/install-commands.tsx +42 -0
  160. package/pages/computers/remove-computer-dialog.tsx +33 -0
  161. package/pages/computers/rename-computer-dialog.tsx +37 -0
  162. package/pages/computers/room-rules-dialog.tsx +55 -0
  163. package/pages/login-page.css +33 -0
  164. package/pages/login-page.tsx +88 -0
  165. package/pages/login-threads.tsx +51 -0
  166. package/pages/marketplace-page.tsx +59 -0
  167. package/pages/profile-page.tsx +68 -0
  168. package/pages/workbench/library-page.tsx +88 -0
  169. package/pages/workbench/new-work-page.tsx +24 -0
  170. package/pages/workbench/person.tsx +13 -0
  171. package/pages/workbench/personal-work-context.tsx +93 -0
  172. package/pages/workbench/personal-work-page.tsx +100 -0
  173. package/pages/workbench/personal-works-page.tsx +36 -0
  174. package/pages/workbench/share-dialog.tsx +57 -0
  175. package/pages/workbench/title-dialog.tsx +35 -0
  176. package/pages/workbench/usage-page.tsx +52 -0
  177. package/public/assets/brand/talgent-lettering.png +0 -0
  178. package/public/assets/brand/talgent-logo-page-bg.png +0 -0
  179. package/public/assets/brand/talgent-logo-white-bg.png +0 -0
  180. package/public/assets/brand/talgent-mark-page-bg.png +0 -0
  181. package/public/assets/brand/talgent-mark-white-bg.png +0 -0
  182. package/public/assets/brand/talgent-mark.png +0 -0
  183. package/public/assets/product-icons/LICENSE +21 -0
  184. package/public/assets/product-icons/README.md +13 -0
  185. package/public/assets/product-icons/anthropic.svg +1 -0
  186. package/public/assets/product-icons/deepseek.svg +1 -0
  187. package/public/assets/product-icons/glm.svg +1 -0
  188. package/public/assets/product-icons/kimi.svg +1 -0
  189. package/public/assets/product-icons/linear.svg +1 -0
  190. package/public/assets/product-icons/minimax.svg +1 -0
  191. package/public/assets/product-icons/notion.svg +1 -0
  192. package/public/assets/product-icons/openai.svg +1 -0
  193. package/public/assets/product-icons/qwen.svg +1 -0
  194. package/styles/base.css +95 -0
  195. package/styles/fonts.css +14 -0
  196. package/styles/markdown.css +79 -0
  197. package/styles/uber-theme.css +96 -0
  198. package/styles/work-composer.css +222 -0
  199. package/styles/work-stream.css +343 -0
  200. package/styles/workbench.css +144 -0
  201. package/styles/workspace.css +260 -0
  202. package/test-support/backend.ts +67 -0
  203. package/test-support/plugin-summary.ts +8 -0
  204. package/test-support/setup.ts +59 -0
  205. package/vite-preset.ts +85 -0
@@ -0,0 +1,343 @@
1
+ /* A Work's status, page frame and message stream. */
2
+
3
+ .work-status-icon {
4
+ position: relative;
5
+ display: grid;
6
+ width: 20px;
7
+ height: 20px;
8
+ place-items: center;
9
+ }
10
+
11
+ .work-status-dot {
12
+ width: 8px;
13
+ height: 8px;
14
+ }
15
+
16
+ .work-copy {
17
+ display: block;
18
+ min-width: 0;
19
+ }
20
+
21
+ .work-copy strong {
22
+ display: block;
23
+ min-width: 0;
24
+ overflow: hidden;
25
+ text-overflow: ellipsis;
26
+ white-space: nowrap;
27
+ font-size: 12px;
28
+ font-weight: 680;
29
+ }
30
+
31
+ .work-status-paused .work-status-dot {
32
+ width: 8px;
33
+ height: 8px;
34
+ }
35
+
36
+ .work-status-running::before {
37
+ content: "";
38
+ position: absolute;
39
+ inset: 2px;
40
+ }
41
+
42
+ .work-status-running .work-status-dot {
43
+ position: relative;
44
+ z-index: 1;
45
+ transform-origin: center;
46
+ }
47
+
48
+ .user-avatar {
49
+ display: grid;
50
+ width: 30px;
51
+ height: 30px;
52
+ place-items: center;
53
+ font-size: 13px;
54
+ font-weight: 760;
55
+ }
56
+
57
+ .workspace {
58
+ display: flex;
59
+ width: 100%;
60
+ min-width: 0;
61
+ flex-direction: column;
62
+ gap: 16px;
63
+ margin: 0;
64
+ padding: 16px clamp(16px, 2vw, 28px) 28px;
65
+ }
66
+
67
+ .workspace-body {
68
+ min-height: 0;
69
+ }
70
+
71
+ .topbar-actions {
72
+ display: flex;
73
+ align-items: center;
74
+ gap: 8px;
75
+ }
76
+
77
+ @media (max-width: 700px) {
78
+ .app-shell,
79
+ .app-shell[data-sidebar-state="collapsed"] {
80
+ grid-template-columns: minmax(0, 1fr);
81
+ padding-bottom: calc(70px + env(safe-area-inset-bottom));
82
+ }
83
+
84
+ .workspace {
85
+ padding: 10px 10px calc(18px + env(safe-area-inset-bottom));
86
+ }
87
+ }
88
+
89
+ .work-header-controls-wrap {
90
+ position: relative;
91
+ }
92
+
93
+ .work-header-controls {
94
+ display: flex;
95
+ max-width: min(58vw, 760px);
96
+ align-items: center;
97
+ justify-content: flex-end;
98
+ gap: 6px;
99
+ overflow-x: auto;
100
+ padding-bottom: 1px;
101
+ }
102
+
103
+ .work-config-popover {
104
+ position: absolute;
105
+ top: calc(100% + 10px);
106
+ right: 0;
107
+ z-index: 50;
108
+ width: min(34rem, calc(100vw - 32px));
109
+ padding: 14px;
110
+ }
111
+
112
+ .agent-grid {
113
+ display: grid;
114
+ grid-template-columns: minmax(0, 1fr);
115
+ align-items: start;
116
+ gap: 14px;
117
+ min-height: 640px;
118
+ }
119
+
120
+ .stream-panel {
121
+ position: relative;
122
+ display: flex;
123
+ height: calc(100vh - 70px);
124
+ min-height: 640px;
125
+ min-width: 0;
126
+ flex-direction: column;
127
+ overflow: hidden;
128
+ }
129
+
130
+ .stream-scroll,
131
+ .stream-list-surface[data-scroll-target="container"],
132
+ .stream-list-surface[data-scroll-target="page"] {
133
+ min-height: 0;
134
+ flex: 1;
135
+ overflow: auto;
136
+ padding: 10px 12px;
137
+ }
138
+
139
+ .stream-stack,
140
+ .stream-list-surface > div {
141
+ display: flex;
142
+ min-width: 0;
143
+ max-width: 100%;
144
+ flex-direction: column;
145
+ gap: 12px;
146
+ }
147
+
148
+ .stream-card {
149
+ position: relative;
150
+ display: inline-flex;
151
+ width: fit-content;
152
+ max-width: min(100%, 48rem);
153
+ min-width: 0;
154
+ min-height: 42px;
155
+ gap: 0;
156
+ padding: 9px 11px 9px 45px;
157
+ }
158
+
159
+ .stream-card[role="button"],
160
+ .stream-card-clickable {
161
+ cursor: pointer;
162
+ }
163
+
164
+ .stream-card-user {
165
+ align-self: flex-end;
166
+ max-width: min(88%, 42rem);
167
+ }
168
+
169
+ .stream-card-event {
170
+ min-height: 34px;
171
+ padding-top: 7px;
172
+ padding-bottom: 7px;
173
+ }
174
+
175
+ .stream-card-selected {
176
+ outline: 2px solid rgb(0 119 237 / 0.22);
177
+ }
178
+
179
+ .stream-icon {
180
+ position: absolute;
181
+ top: 9px;
182
+ left: 11px;
183
+ display: grid;
184
+ width: 25px;
185
+ height: 25px;
186
+ place-items: center;
187
+ }
188
+
189
+ .stream-card-user .stream-title,
190
+ .stream-card-user .stream-header {
191
+ justify-content: flex-end;
192
+ }
193
+
194
+ .stream-card-user .stream-body {
195
+ margin-left: auto;
196
+ text-align: left;
197
+ }
198
+
199
+ .stream-header {
200
+ display: flex;
201
+ align-items: flex-start;
202
+ justify-content: space-between;
203
+ gap: 10px;
204
+ padding: 0;
205
+ }
206
+
207
+ .stream-title {
208
+ display: flex;
209
+ min-width: 0;
210
+ align-items: center;
211
+ gap: 8px;
212
+ font-size: 14px;
213
+ font-weight: 720;
214
+ }
215
+
216
+ .stream-meta {
217
+ display: inline-flex;
218
+ flex-shrink: 0;
219
+ align-items: center;
220
+ padding: 1px 7px;
221
+ font-size: 12px;
222
+ font-weight: 620;
223
+ white-space: nowrap;
224
+ }
225
+
226
+ .stream-body {
227
+ min-width: 0;
228
+ max-width: 100%;
229
+ font-size: 14px;
230
+ line-height: 1.42;
231
+ padding: 0;
232
+ }
233
+
234
+ .stream-body .stream-markdown,
235
+ .stream-node-content {
236
+ font-size: inherit;
237
+ }
238
+
239
+ .stream-text-node,
240
+ .stream-result-node,
241
+ .stream-reasoning-node,
242
+ .stream-tool-card,
243
+ .stream-question-card,
244
+ .stream-subagent-card {
245
+ min-width: 0;
246
+ max-width: 100%;
247
+ }
248
+
249
+ .stream-text-node {
250
+ white-space: pre-wrap;
251
+ word-break: break-word;
252
+ }
253
+
254
+ .stream-tool-card,
255
+ .stream-tool-group-card {
256
+ display: flex;
257
+ min-width: 0;
258
+ align-items: center;
259
+ gap: 8px;
260
+ padding: 0;
261
+ }
262
+
263
+ .stream-question-card {
264
+ display: grid;
265
+ gap: 8px;
266
+ padding: 8px;
267
+ }
268
+
269
+ .stream-subagent-card {
270
+ overflow: hidden;
271
+ }
272
+
273
+ .stream-subagent-card > button {
274
+ min-height: 42px;
275
+ }
276
+
277
+ .subagent-child-list {
278
+ display: grid;
279
+ gap: 4px;
280
+ margin: 0 10px 10px 24px;
281
+ padding-left: 9px;
282
+ }
283
+
284
+ .subagent-child-list .stream-card {
285
+ min-height: 0;
286
+ padding-top: 5px;
287
+ padding-bottom: 6px;
288
+ }
289
+
290
+ .subagent-child-list .stream-body {
291
+ font-size: 12px;
292
+ }
293
+
294
+ .tool-merge-row {
295
+ display: inline-flex;
296
+ max-width: 100%;
297
+ flex-wrap: wrap;
298
+ align-items: center;
299
+ gap: 5px;
300
+ margin-left: 8px;
301
+ vertical-align: middle;
302
+ }
303
+
304
+ .tool-merge-row .chip {
305
+ height: 20px;
306
+ font-size: 12px;
307
+ }
308
+
309
+ .reasoning-strip {
310
+ display: flex;
311
+ min-height: 30px;
312
+ align-items: center;
313
+ gap: 8px;
314
+ margin: 0 12px 6px;
315
+ overflow: hidden;
316
+ padding: 5px 12px;
317
+ white-space: nowrap;
318
+ }
319
+
320
+ .reasoning-pulse {
321
+ position: relative;
322
+ flex: 0 0 auto;
323
+ width: 8px;
324
+ height: 8px;
325
+ }
326
+
327
+ .reasoning-pulse::after {
328
+ content: "";
329
+ position: absolute;
330
+ inset: -5px;
331
+ }
332
+
333
+ .reasoning-label {
334
+ font-size: 13px;
335
+ font-weight: 760;
336
+ }
337
+
338
+ .reasoning-text {
339
+ min-width: 0;
340
+ overflow: hidden;
341
+ font-size: 13px;
342
+ text-overflow: ellipsis;
343
+ }
@@ -0,0 +1,144 @@
1
+ /* The Workbench's styles; an app imports them right after "tailwindcss". */
2
+ @import "@heroui/styles";
3
+ @import "./uber-theme.css";
4
+ @import "./fonts.css";
5
+ @import "./workspace.css";
6
+ @import "./markdown.css";
7
+ @import "./base.css";
8
+ @import "./work-stream.css";
9
+ @import "./work-composer.css";
10
+
11
+ /* The components' utility classes live in this package, outside the app's own sources. */
12
+ @source "../components";
13
+ @source "../pages";
14
+ @source "../lib";
15
+ @source "../hooks";
16
+
17
+ .property-row {
18
+ display: flex;
19
+ align-items: center;
20
+ justify-content: space-between;
21
+ gap: 12px;
22
+ padding: 11px 0;
23
+ }
24
+
25
+ .property-row dt {
26
+ font-size: 12px;
27
+ font-weight: 680;
28
+ }
29
+
30
+ .property-row dd {
31
+ margin: 0;
32
+ min-width: 0;
33
+ overflow: hidden;
34
+ font-size: 13px;
35
+ font-weight: 720;
36
+ text-align: right;
37
+ text-overflow: ellipsis;
38
+ white-space: nowrap;
39
+ }
40
+
41
+ .route-loading-state {
42
+ display: flex;
43
+ align-items: center;
44
+ gap: 10px;
45
+ padding: 13px 16px;
46
+ font-size: 13px;
47
+ font-weight: 650;
48
+ }
49
+
50
+ .auth-progress {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: 10px;
54
+ padding: 11px 13px;
55
+ font-size: 13px;
56
+ font-weight: 620;
57
+ }
58
+
59
+ .portal-interactive-card:active {
60
+ transform: translateY(1px);
61
+ }
62
+
63
+ .portal-control:focus-within,
64
+ .portal-control:focus-visible,
65
+ .portal-focus-ring:focus-visible {
66
+ outline: 2px solid rgb(0 212 164 / 0.20);
67
+ outline-offset: 2px;
68
+ }
69
+
70
+ .portal-control:active {
71
+ transform: translateY(1px);
72
+ }
73
+
74
+ .portal-secondary-button:focus-visible {
75
+ outline: 2px solid rgb(0 212 164 / 0.34);
76
+ outline-offset: 2px;
77
+ }
78
+
79
+ .portal-secondary-button:disabled {
80
+ transform: none;
81
+ }
82
+
83
+ .portal-secondary-button {
84
+ display: inline-flex;
85
+ align-items: center;
86
+ justify-content: center;
87
+ gap: 0.5rem;
88
+ cursor: pointer;
89
+ font-size: 0.875rem;
90
+ font-weight: 600;
91
+ line-height: 1.3;
92
+ }
93
+
94
+ .portal-secondary-button:active {
95
+ transform: translateY(1px) scale(0.99);
96
+ }
97
+
98
+ .portal-input {
99
+ width: 100%;
100
+ outline: none;
101
+ }
102
+
103
+ .marketplace-category-strip {
104
+ display: flex;
105
+ align-items: center;
106
+ gap: 7px;
107
+ overflow-x: auto;
108
+ padding: 2px 2px 8px;
109
+ overscroll-behavior-x: contain;
110
+ scroll-snap-type: x proximity;
111
+ }
112
+
113
+ .marketplace-intro {
114
+ display: flex;
115
+ min-height: 74px;
116
+ align-items: center;
117
+ padding: 15px 17px;
118
+ }
119
+
120
+ .marketplace-intro > div > p:last-child {
121
+ max-width: 58ch;
122
+ margin: 5px 0 0;
123
+ font-size: 14px;
124
+ line-height: 1.55;
125
+ }
126
+
127
+ .marketplace-plugin-card {
128
+ gap: 14px;
129
+ }
130
+
131
+ .startup-progress-fill::after {
132
+ position: absolute;
133
+ inset: 0;
134
+ content: "";
135
+ transform: translateX(-110%);
136
+ }
137
+
138
+ @media (prefers-reduced-motion: reduce) {
139
+ *,
140
+ *::before,
141
+ *::after {
142
+ scroll-behavior: auto !important;
143
+ }
144
+ }