@conscia-labs/design-system 0.3.5 → 1.0.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.
@@ -9,14 +9,14 @@
9
9
  }
10
10
 
11
11
  to {
12
- height: var(--radix-collapsible-content-height);
12
+ height: var(--collapsible-panel-height);
13
13
  opacity: 1;
14
14
  }
15
15
  }
16
16
 
17
17
  @keyframes ds-sidebar-collapse {
18
18
  from {
19
- height: var(--radix-collapsible-content-height);
19
+ height: var(--collapsible-panel-height);
20
20
  opacity: 1;
21
21
  }
22
22
 
@@ -26,74 +26,93 @@
26
26
  }
27
27
  }
28
28
 
29
- [data-slot="sidebar-collapsible-content"][data-state="open"] {
29
+ [data-slot="sidebar-collapsible-content"][data-open] {
30
30
  animation: ds-sidebar-expand 180ms cubic-bezier(0.2, 0, 0, 1);
31
31
  }
32
32
 
33
- [data-slot="sidebar-collapsible-content"][data-state="closed"] {
33
+ [data-slot="sidebar-collapsible-content"][data-closed] {
34
34
  animation: ds-sidebar-collapse 150ms cubic-bezier(0.4, 0, 1, 1);
35
35
  }
36
36
 
37
+ [data-slot="app-sidebar-content"]::before,
38
+ [data-slot="app-sidebar-content"]::after {
39
+ position: absolute;
40
+ z-index: 1;
41
+ left: 0;
42
+ right: 0;
43
+ height: 1.5rem;
44
+ pointer-events: none;
45
+ content: "";
46
+ opacity: 0;
47
+ transition: opacity 150ms ease-out;
48
+ }
49
+
50
+ [data-slot="app-sidebar-content"]::before {
51
+ top: 0;
52
+ background: linear-gradient(to bottom, var(--sidebar-content), transparent);
53
+ }
54
+
55
+ [data-slot="app-sidebar-content"]::after {
56
+ bottom: 0;
57
+ background: linear-gradient(to top, var(--sidebar-content), transparent);
58
+ }
59
+
60
+ [data-slot="app-sidebar-content"][data-scroll-before="true"]::before,
61
+ [data-slot="app-sidebar-content"][data-scroll-after="true"]::after {
62
+ opacity: 1;
63
+ }
64
+
37
65
  @media (prefers-reduced-motion: reduce) {
38
66
  [data-slot="sidebar-collapsible-content"] {
39
67
  animation: none !important;
40
68
  }
69
+
70
+ [data-slot="app-sidebar-content"]::before,
71
+ [data-slot="app-sidebar-content"]::after {
72
+ transition: none;
73
+ }
41
74
  }
42
75
 
43
76
  :root,
44
77
  [data-appearance-scope="light"] {
45
78
  color-scheme: light;
46
79
  --radius: 0.5rem;
47
- --background: #f9f9fa;
48
- --foreground: #140c15;
49
- --card: #ffffff;
50
- --card-foreground: #140c15;
51
- --popover: #ffffff;
52
- --popover-foreground: #140c15;
53
- --brand: #4962ff;
54
- --brand-foreground: #ffffff;
55
- --brand-secondary: #1c4e51;
56
- --brand-secondary-foreground: #ffffff;
57
- --brand-secondary-background: #eaf3f1;
58
- --brand-secondary-border: #b2d4cf;
59
- --primary: #3f55df;
60
- --primary-foreground: #ffffff;
61
- --secondary: #1e0721;
62
- --secondary-foreground: #ffffff;
63
- --muted: #f3f4f5;
64
- --muted-foreground: #5f6270;
65
- --accent: #3f55df;
66
- --accent-hover: #3344c7;
67
- --accent-active: #293999;
68
- --accent-background: #eef0ff;
69
- --accent-foreground: #ffffff;
70
- --selection-background: #f0f1f6;
71
- --selection-border: #aeb6e3;
72
- --selection-indicator: #6672dc;
73
- --selection-foreground: #242a44;
74
- --destructive: #c44a53;
75
- --border: #e4e5e5;
76
- --input: #e4e5e5;
77
- --ring: #6371d9;
78
- --canvas: var(--background);
79
- --surface: var(--card);
80
+ --canvas: #f9f9fa;
81
+ --surface: #ffffff;
80
82
  --surface-muted: #f3f4f5;
81
83
  --surface-raised: #ffffff;
82
84
  --surface-floating: #ffffff;
83
85
  --surface-overlay: #ffffff;
84
86
  --surface-control: var(--surface-muted);
85
87
  --surface-control-hover: var(--surface-raised);
86
- --text-primary: var(--foreground);
88
+ --surface-inverse: #1e0721;
89
+ --text-primary: #140c15;
87
90
  --text-secondary: #373b4a;
88
91
  --text-supporting: #5f6270;
89
- --text-muted: #838692;
92
+ --text-muted: #707481;
90
93
  --text-disabled: #a7a9b3;
91
94
  --text-inverse: #ffffff;
92
95
  --text-link: #3f4da8;
96
+ --brand: #4962ff;
97
+ --brand-foreground: #ffffff;
98
+ --brand-secondary: #1c4e51;
99
+ --brand-secondary-foreground: #ffffff;
100
+ --brand-secondary-background: #eaf3f1;
101
+ --brand-secondary-border: #b2d4cf;
102
+ --action: #3f55df;
103
+ --action-foreground: #ffffff;
104
+ --action-hover: #3344c7;
105
+ --action-active: #293999;
106
+ --action-background: #eef0ff;
107
+ --selection-background: #f0f1f6;
108
+ --selection-border: #aeb6e3;
109
+ --selection-indicator: #6672dc;
110
+ --selection-foreground: #242a44;
111
+ --control-border: #e4e5e5;
112
+ --focus: #6371d9;
93
113
  --border-subtle: #ececed;
94
114
  --border-default: #d9dadd;
95
115
  --border-strong: #babdc5;
96
- --border-focus: var(--ring);
97
116
  --information: #28758a;
98
117
  --information-background: #eaf5f7;
99
118
  --information-border: #b8dce3;
@@ -114,31 +133,23 @@
114
133
  --neutral-background: #f3f4f5;
115
134
  --neutral-border: #d9dadd;
116
135
  --neutral-foreground: #373b4a;
117
- --sidebar: #19141a;
118
- --sidebar-foreground: #ffffff;
119
- --sidebar-accent: rgb(255 255 255 / 7%);
120
- --sidebar-active: rgb(255 255 255 / 9%);
136
+ --sidebar-canvas: #19141a;
137
+ --sidebar-header: #19141a;
138
+ --sidebar-content: #19141a;
139
+ --sidebar-hover: rgb(255 255 255 / 7%);
140
+ --sidebar-active-background: rgb(255 255 255 / 9%);
121
141
  --sidebar-active-foreground: #ffffff;
122
142
  --sidebar-active-indicator: #7f8ae8;
123
143
  --sidebar-border: rgb(255 255 255 / 8%);
124
- /*
125
- * Sidebar semantics intentionally sit on top of the existing palette. The
126
- * legacy aliases above remain the compatibility surface for consumers that
127
- * still use bg-sidebar and text-sidebar-foreground.
128
- */
129
- --sidebar-canvas: var(--sidebar);
130
- --sidebar-header: var(--sidebar);
131
- --sidebar-content: var(--sidebar);
132
- --sidebar-hover: var(--sidebar-accent);
133
- --sidebar-primary-text: var(--sidebar-foreground);
134
- --sidebar-secondary-text: color-mix(in oklab, var(--sidebar-foreground) 78%, transparent);
135
- --sidebar-metadata-text: color-mix(in oklab, var(--sidebar-foreground) 62%, transparent);
136
- --sidebar-icon: color-mix(in oklab, var(--sidebar-foreground) 72%, transparent);
137
- --sidebar-search: var(--sidebar-accent);
138
- --sidebar-footer: var(--sidebar);
139
- --sidebar-group-label: color-mix(in oklab, var(--sidebar-foreground) 72%, transparent);
140
- --sidebar-group-count: color-mix(in oklab, var(--sidebar-foreground) 62%, transparent);
141
- --sidebar-focus-ring: var(--ring);
144
+ --sidebar-primary-text: #ffffff;
145
+ --sidebar-secondary-text: color-mix(in oklab, #ffffff 78%, transparent);
146
+ --sidebar-metadata-text: color-mix(in oklab, #ffffff 62%, transparent);
147
+ --sidebar-icon: color-mix(in oklab, #ffffff 72%, transparent);
148
+ --sidebar-search: rgb(255 255 255 / 7%);
149
+ --sidebar-footer: #19141a;
150
+ --sidebar-group-label: color-mix(in oklab, #ffffff 72%, transparent);
151
+ --sidebar-group-count: color-mix(in oklab, #ffffff 62%, transparent);
152
+ --sidebar-focus-ring: var(--focus);
142
153
  --font-sans: "Source Sans 3 Variable", "Source Sans 3", "Source Sans", "Aptos", "Segoe UI", Arial, sans-serif;
143
154
  --ds-space-inline: 0.5rem;
144
155
  --ds-space-control: 0.625rem;
@@ -185,16 +196,51 @@
185
196
  --ds-section-title: 1.0625rem;
186
197
  --ds-body: 0.9375rem;
187
198
  --ds-metadata: 0.8125rem;
199
+ --ds-body-line-height: 1.5;
200
+ --ds-title-weight: 600;
201
+ --ds-title-tracking: 0;
202
+ --ds-title-line-height: 1.25;
203
+ --ds-section-title-weight: 600;
204
+ --ds-section-title-line-height: 1.25;
205
+ --ds-ui-text-size: 0.875rem;
206
+ --ds-ui-line-height: 1.25rem;
207
+ --ds-navigation-label-size: 0.875rem;
208
+ --ds-navigation-label-line-height: 1.25rem;
209
+ --ds-control-text-size: 0.875rem;
210
+ --ds-control-text-line-height: 1.25rem;
211
+ --ds-button-text-size: 0.875rem;
212
+ --ds-button-text-line-height: 1.25rem;
213
+ --ds-button-text-weight: 500;
188
214
  --ds-menu-item-size: 0.75rem;
189
215
  --ds-menu-label-size: 0.6875rem;
216
+ --ds-menu-item-line-height: 1.25rem;
217
+ --ds-menu-label-line-height: 1rem;
218
+ --ds-eyebrow-size: 0.6875rem;
219
+ --ds-eyebrow-line-height: 1rem;
220
+ --ds-eyebrow-weight: 600;
221
+ --ds-eyebrow-tracking: 0.04em;
222
+ --ds-card-title-size: 0.875rem;
223
+ --ds-card-title-line-height: 1.25rem;
224
+ --ds-card-title-weight: 600;
225
+ --ds-table-head-size: 0.8125rem;
226
+ --ds-table-head-line-height: 1rem;
227
+ --ds-table-head-weight: 600;
228
+ --ds-table-head-tracking: 0;
190
229
  --ds-radius-control: 0.375rem;
191
230
  --ds-radius-surface: 0.5rem;
192
231
  --ds-shadow-raised: 0 1px 2px rgb(20 12 21 / 6%);
193
232
  --ds-shadow-floating: 0 12px 28px rgb(20 12 21 / 10%);
194
- --ds-focus-ring: 0 0 0 3px color-mix(in oklab, var(--ring) 26%, transparent);
233
+ --ds-focus-ring: 0 0 0 3px color-mix(in oklab, var(--focus) 26%, transparent);
234
+ --ds-workbench-global-rail-width: 4.5rem;
235
+ --ds-workbench-secondary-rail-width: 18.375rem;
236
+ --ds-workbench-inspector-width: 19rem;
237
+ --ds-workbench-inspector-padding-x: 1.625rem;
238
+ --ds-workbench-inspector-padding-top: 2.1875rem;
239
+ --ds-workbench-inspector-padding-bottom: 1.875rem;
240
+ --ds-workbench-min-height: 38.75rem;
195
241
  }
196
242
 
197
- :root[data-density="compact"] {
243
+ [data-density="compact"] {
198
244
  --ds-space-inline: 0.375rem;
199
245
  --ds-space-control: 0.5rem;
200
246
  --ds-space-field: 1rem;
@@ -228,59 +274,104 @@
228
274
  --ds-metadata: 0.75rem;
229
275
  }
230
276
 
277
+ /*
278
+ * Operational density is an explicit opt-in preset for information-dense
279
+ * admin, catalog, connector, chat, and workspace-like interfaces. It keeps
280
+ * comfortable density as the default and leaves the existing compact preset
281
+ * available for consumers that already depend on it.
282
+ */
283
+ [data-density="operational"] {
284
+ --ds-space-control: 0.5rem;
285
+ --ds-space-group: 1rem;
286
+ --ds-space-section: 1.5rem;
287
+ --ds-space-page: 2rem;
288
+ --ds-control-height: 2.25rem;
289
+ --ds-control-height-sm: 1.875rem;
290
+ --ds-control-height-lg: 2.5rem;
291
+ --ds-control-padding-x: 0.875rem;
292
+ --ds-sidebar-item-height: 2rem;
293
+ --ds-sidebar-group-gap: 0.375rem;
294
+ --ds-sidebar-label-gap: 0.25rem;
295
+ --ds-sidebar-group-label-size: 0.6875rem;
296
+ --ds-sidebar-group-label-line-height: 0.9375rem;
297
+ --ds-surface-padding: 1rem;
298
+ --ds-table-header-height: 2rem;
299
+ --ds-row-height: 2.5rem;
300
+ --ds-field-gap: 1rem;
301
+ --ds-field-label-gap: 0.375rem;
302
+ --ds-page-title: clamp(1.5625rem, 3vw, 2.125rem);
303
+ --ds-display-title: clamp(1.875rem, 3.5vw, 2.75rem);
304
+ --ds-section-title: 1rem;
305
+ --ds-body: 0.8125rem;
306
+ --ds-metadata: 0.75rem;
307
+ --ds-body-line-height: 1.45;
308
+ --ds-title-weight: 650;
309
+ --ds-title-tracking: -0.04em;
310
+ --ds-title-line-height: 1.08;
311
+ --ds-section-title-weight: 650;
312
+ --ds-section-title-line-height: 1.12;
313
+ --ds-ui-text-size: 0.8125rem;
314
+ --ds-ui-line-height: 1.125rem;
315
+ --ds-navigation-label-size: 0.8125rem;
316
+ --ds-navigation-label-line-height: 1.125rem;
317
+ --ds-control-text-size: 0.8125rem;
318
+ --ds-control-text-line-height: 1.125rem;
319
+ --ds-button-text-size: 0.8125rem;
320
+ --ds-button-text-line-height: 1.125rem;
321
+ --ds-button-text-weight: 600;
322
+ --ds-menu-item-line-height: 1.0625rem;
323
+ --ds-menu-label-line-height: 0.9375rem;
324
+ --ds-eyebrow-line-height: 0.9375rem;
325
+ --ds-eyebrow-weight: 650;
326
+ --ds-eyebrow-tracking: 0.06em;
327
+ --ds-card-title-size: 0.8125rem;
328
+ --ds-card-title-line-height: 1.125rem;
329
+ --ds-card-title-weight: 650;
330
+ --ds-table-head-size: 0.6875rem;
331
+ --ds-table-head-line-height: 0.9375rem;
332
+ --ds-table-head-weight: 650;
333
+ --ds-table-head-tracking: 0.06em;
334
+ }
335
+
231
336
  :root.dark,
232
337
  :root[data-appearance="dark"] {
233
338
  color-scheme: dark;
234
- --background: #17191c;
235
- --foreground: #eff1f4;
236
- --card: #1d2024;
237
- --card-foreground: #eff1f4;
238
- --popover: #2c2f36;
239
- --popover-foreground: #eff1f4;
240
- --brand: #6b7cff;
241
- --brand-foreground: #ffffff;
242
- --brand-secondary: #a3d6cf;
243
- --brand-secondary-foreground: #102a2c;
244
- --brand-secondary-background: #162c2d;
245
- --brand-secondary-border: #315c59;
246
- --primary: #5965cc;
247
- --primary-foreground: #ffffff;
248
- --secondary: #f3f4f5;
249
- --secondary-foreground: #17181b;
250
- --muted: #282b31;
251
- --muted-foreground: #b3bac5;
252
- --accent: #5965cc;
253
- --accent-hover: #5f6bd2;
254
- --accent-active: #505bb8;
255
- --accent-background: #252a46;
256
- --accent-foreground: #ffffff;
257
- --selection-background: #2a2e3b;
258
- --selection-border: #5c669b;
259
- --selection-indicator: #7c86df;
260
- --selection-foreground: #edf0f7;
261
- --destructive: #ffa1a8;
262
- --border: rgb(255 255 255 / 12%);
263
- --input: rgb(255 255 255 / 12%);
264
- --ring: #7c86df;
265
- --canvas: var(--background);
266
- --surface: var(--card);
339
+ --canvas: #17191c;
340
+ --surface: #1d2024;
267
341
  --surface-muted: #282b31;
268
342
  --surface-raised: #24272c;
269
343
  --surface-floating: #2c2f36;
270
344
  --surface-overlay: #31343a;
271
345
  --surface-control: var(--surface-raised);
272
346
  --surface-control-hover: var(--surface-muted);
273
- --text-primary: var(--foreground);
347
+ --surface-inverse: #f3f4f5;
348
+ --text-primary: #eff1f4;
274
349
  --text-secondary: #d4d8df;
275
350
  --text-supporting: #b3bac5;
276
351
  --text-muted: #929aa7;
277
352
  --text-disabled: #747b87;
278
353
  --text-inverse: #17191c;
279
354
  --text-link: #aeb6ef;
355
+ --brand: #6b7cff;
356
+ --brand-foreground: #17191c;
357
+ --brand-secondary: #a3d6cf;
358
+ --brand-secondary-foreground: #102a2c;
359
+ --brand-secondary-background: #162c2d;
360
+ --brand-secondary-border: #315c59;
361
+ --action: #5965cc;
362
+ --action-foreground: #ffffff;
363
+ --action-hover: #5f6bd2;
364
+ --action-active: #505bb8;
365
+ --action-background: #252a46;
366
+ --selection-background: #2a2e3b;
367
+ --selection-border: #5c669b;
368
+ --selection-indicator: #7c86df;
369
+ --selection-foreground: #edf0f7;
370
+ --control-border: rgb(255 255 255 / 12%);
371
+ --focus: #7c86df;
280
372
  --border-subtle: rgb(255 255 255 / 7%);
281
373
  --border-default: rgb(255 255 255 / 11%);
282
374
  --border-strong: rgb(255 255 255 / 18%);
283
- --border-focus: var(--ring);
284
375
  --information: #8ed4df;
285
376
  --information-background: #163238;
286
377
  --information-border: #346b75;
@@ -301,26 +392,23 @@
301
392
  --neutral-background: #282b31;
302
393
  --neutral-border: rgb(255 255 255 / 12%);
303
394
  --neutral-foreground: #e5e8ed;
304
- --sidebar: #151116;
305
- --sidebar-foreground: #ffffff;
306
- --sidebar-accent: rgb(255 255 255 / 7%);
307
- --sidebar-active: rgb(255 255 255 / 9%);
395
+ --sidebar-canvas: #151116;
396
+ --sidebar-header: #151116;
397
+ --sidebar-content: #151116;
398
+ --sidebar-hover: rgb(255 255 255 / 7%);
399
+ --sidebar-active-background: rgb(255 255 255 / 9%);
308
400
  --sidebar-active-foreground: #ffffff;
309
401
  --sidebar-active-indicator: #7c86df;
310
402
  --sidebar-border: rgb(255 255 255 / 8%);
311
- --sidebar-canvas: var(--sidebar);
312
- --sidebar-header: var(--sidebar);
313
- --sidebar-content: var(--sidebar);
314
- --sidebar-hover: var(--sidebar-accent);
315
- --sidebar-primary-text: var(--sidebar-foreground);
316
- --sidebar-secondary-text: color-mix(in oklab, var(--sidebar-foreground) 78%, transparent);
317
- --sidebar-metadata-text: color-mix(in oklab, var(--sidebar-foreground) 62%, transparent);
318
- --sidebar-icon: color-mix(in oklab, var(--sidebar-foreground) 72%, transparent);
319
- --sidebar-search: var(--sidebar-accent);
320
- --sidebar-footer: var(--sidebar);
321
- --sidebar-group-label: color-mix(in oklab, var(--sidebar-foreground) 72%, transparent);
322
- --sidebar-group-count: color-mix(in oklab, var(--sidebar-foreground) 62%, transparent);
323
- --sidebar-focus-ring: var(--ring);
403
+ --sidebar-primary-text: #ffffff;
404
+ --sidebar-secondary-text: color-mix(in oklab, #ffffff 78%, transparent);
405
+ --sidebar-metadata-text: color-mix(in oklab, #ffffff 62%, transparent);
406
+ --sidebar-icon: color-mix(in oklab, #ffffff 72%, transparent);
407
+ --sidebar-search: rgb(255 255 255 / 7%);
408
+ --sidebar-footer: #151116;
409
+ --sidebar-group-label: color-mix(in oklab, #ffffff 72%, transparent);
410
+ --sidebar-group-count: color-mix(in oklab, #ffffff 62%, transparent);
411
+ --sidebar-focus-ring: var(--focus);
324
412
  --ds-shadow-raised: 0 1px 2px rgb(0 0 0 / 24%);
325
413
  --ds-shadow-floating: 0 16px 32px rgb(0 0 0 / 30%);
326
414
  }
@@ -328,22 +416,19 @@
328
416
  /*
329
417
  * Light sidebars use the same semantic surface family as the rest of the
330
418
  * light theme. The variant is scoped to the sidebar so an application can
331
- * keep a dark sidebar by default and opt into this hierarchy per shell.
419
+ * keep an explicitly dark sidebar or follow the appearance-aware default.
332
420
  */
333
421
  [data-sidebar-variant="light"],
334
422
  :root:not(.dark):not([data-appearance="dark"])
335
423
  [data-sidebar-variant="auto"] {
336
- --sidebar: var(--surface-muted);
337
- --sidebar-foreground: var(--text-primary);
338
- --sidebar-accent: var(--surface-raised);
339
- --sidebar-active: var(--accent-background);
340
- --sidebar-active-foreground: var(--selection-foreground);
341
- --sidebar-active-indicator: var(--selection-indicator);
342
- --sidebar-border: var(--border-subtle);
343
424
  --sidebar-canvas: var(--surface-muted);
344
425
  --sidebar-header: var(--surface);
345
426
  --sidebar-content: var(--surface-muted);
346
427
  --sidebar-hover: var(--surface-raised);
428
+ --sidebar-active-background: var(--action-background);
429
+ --sidebar-active-foreground: var(--selection-foreground);
430
+ --sidebar-active-indicator: var(--selection-indicator);
431
+ --sidebar-border: var(--border-subtle);
347
432
  --sidebar-primary-text: var(--text-primary);
348
433
  --sidebar-secondary-text: var(--text-secondary);
349
434
  --sidebar-metadata-text: var(--text-supporting);
@@ -352,7 +437,7 @@
352
437
  --sidebar-footer: var(--surface);
353
438
  --sidebar-group-label: var(--text-secondary);
354
439
  --sidebar-group-count: var(--text-supporting);
355
- --sidebar-focus-ring: var(--border-focus);
440
+ --sidebar-focus-ring: var(--focus);
356
441
  }
357
442
 
358
443
  @theme inline {
@@ -360,34 +445,37 @@
360
445
  --radius-md: calc(var(--radius) - 2px);
361
446
  --radius-lg: var(--radius);
362
447
  --radius-xl: calc(var(--radius) + 4px);
363
- --color-background: var(--background);
364
- --color-foreground: var(--foreground);
365
- --color-card: var(--card);
366
- --color-card-foreground: var(--card-foreground);
367
- --color-popover: var(--popover);
368
- --color-popover-foreground: var(--popover-foreground);
448
+ --color-canvas: var(--canvas);
449
+ --color-surface: var(--surface);
450
+ --color-surface-muted: var(--surface-muted);
451
+ --color-surface-raised: var(--surface-raised);
452
+ --color-surface-floating: var(--surface-floating);
453
+ --color-surface-overlay: var(--surface-overlay);
454
+ --color-surface-control: var(--surface-control);
455
+ --color-surface-control-hover: var(--surface-control-hover);
456
+ --color-surface-inverse: var(--surface-inverse);
457
+ --color-text-primary: var(--text-primary);
458
+ --color-text-secondary: var(--text-secondary);
459
+ --color-text-supporting: var(--text-supporting);
460
+ --color-text-muted: var(--text-muted);
461
+ --color-text-disabled: var(--text-disabled);
462
+ --color-text-inverse: var(--text-inverse);
463
+ --color-text-link: var(--text-link);
369
464
  --color-brand: var(--brand);
370
465
  --color-brand-foreground: var(--brand-foreground);
371
466
  --color-brand-secondary: var(--brand-secondary);
372
467
  --color-brand-secondary-foreground: var(--brand-secondary-foreground);
373
468
  --color-brand-secondary-background: var(--brand-secondary-background);
374
469
  --color-brand-secondary-border: var(--brand-secondary-border);
375
- --color-primary: var(--primary);
376
- --color-primary-foreground: var(--primary-foreground);
377
- --color-secondary: var(--secondary);
378
- --color-secondary-foreground: var(--secondary-foreground);
379
- --color-muted: var(--muted);
380
- --color-muted-foreground: var(--muted-foreground);
381
- --color-accent: var(--accent);
382
- --color-accent-hover: var(--accent-hover);
383
- --color-accent-active: var(--accent-active);
384
- --color-accent-background: var(--accent-background);
385
- --color-accent-foreground: var(--accent-foreground);
470
+ --color-action: var(--action);
471
+ --color-action-foreground: var(--action-foreground);
472
+ --color-action-hover: var(--action-hover);
473
+ --color-action-active: var(--action-active);
474
+ --color-action-background: var(--action-background);
386
475
  --color-selection-background: var(--selection-background);
387
476
  --color-selection-border: var(--selection-border);
388
477
  --color-selection-indicator: var(--selection-indicator);
389
478
  --color-selection-foreground: var(--selection-foreground);
390
- --color-destructive: var(--destructive);
391
479
  --color-information: var(--information);
392
480
  --color-information-background: var(--information-background);
393
481
  --color-information-border: var(--information-border);
@@ -408,37 +496,17 @@
408
496
  --color-neutral-background: var(--neutral-background);
409
497
  --color-neutral-border: var(--neutral-border);
410
498
  --color-neutral-foreground: var(--neutral-foreground);
411
- --color-border: var(--border);
412
- --color-input: var(--input);
413
- --color-ring: var(--ring);
414
- --color-canvas: var(--canvas);
415
- --color-surface: var(--surface);
416
- --color-surface-muted: var(--surface-muted);
417
- --color-surface-raised: var(--surface-raised);
418
- --color-surface-floating: var(--surface-floating);
419
- --color-surface-overlay: var(--surface-overlay);
420
- --color-surface-control: var(--surface-control);
421
- --color-surface-control-hover: var(--surface-control-hover);
422
- --color-text-primary: var(--text-primary);
423
- --color-text-secondary: var(--text-secondary);
424
- --color-text-supporting: var(--text-supporting);
425
- --color-text-muted: var(--text-muted);
426
- --color-text-disabled: var(--text-disabled);
427
- --color-text-inverse: var(--text-inverse);
428
- --color-text-link: var(--text-link);
499
+ --color-control-border: var(--control-border);
500
+ --color-focus: var(--focus);
429
501
  --color-border-subtle: var(--border-subtle);
430
502
  --color-border-default: var(--border-default);
431
503
  --color-border-strong: var(--border-strong);
432
- --color-border-focus: var(--border-focus);
433
- --color-sidebar: var(--sidebar);
434
- --color-sidebar-foreground: var(--sidebar-foreground);
435
- --color-sidebar-accent: var(--sidebar-accent);
436
- --color-sidebar-active: var(--sidebar-active);
437
- --color-sidebar-active-foreground: var(--sidebar-active-foreground);
438
504
  --color-sidebar-canvas: var(--sidebar-canvas);
439
505
  --color-sidebar-header: var(--sidebar-header);
440
506
  --color-sidebar-content: var(--sidebar-content);
441
507
  --color-sidebar-hover: var(--sidebar-hover);
508
+ --color-sidebar-active-background: var(--sidebar-active-background);
509
+ --color-sidebar-active-foreground: var(--sidebar-active-foreground);
442
510
  --color-sidebar-primary-text: var(--sidebar-primary-text);
443
511
  --color-sidebar-secondary-text: var(--sidebar-secondary-text);
444
512
  --color-sidebar-metadata-text: var(--sidebar-metadata-text);
@@ -452,10 +520,98 @@
452
520
  --font-sans: var(--font-sans);
453
521
  }
454
522
 
523
+ @utility ds-type-body {
524
+ font-size: var(--ds-body);
525
+ line-height: var(--ds-body-line-height);
526
+ }
527
+
528
+ @utility ds-type-ui {
529
+ font-size: var(--ds-ui-text-size);
530
+ line-height: var(--ds-ui-line-height);
531
+ }
532
+
533
+ @utility ds-type-control {
534
+ font-size: var(--ds-control-text-size);
535
+ line-height: var(--ds-control-text-line-height);
536
+ }
537
+
538
+ @utility ds-type-button {
539
+ font-size: var(--ds-button-text-size);
540
+ font-weight: var(--ds-button-text-weight);
541
+ line-height: var(--ds-button-text-line-height);
542
+ }
543
+
544
+ @utility ds-type-navigation {
545
+ font-size: var(--ds-navigation-label-size);
546
+ line-height: var(--ds-navigation-label-line-height);
547
+ }
548
+
549
+ @utility ds-type-display-title {
550
+ font-size: var(--ds-display-title);
551
+ font-weight: var(--ds-title-weight);
552
+ letter-spacing: var(--ds-title-tracking);
553
+ line-height: var(--ds-title-line-height);
554
+ }
555
+
556
+ @utility ds-type-page-title {
557
+ font-size: var(--ds-page-title);
558
+ font-weight: var(--ds-title-weight);
559
+ letter-spacing: var(--ds-title-tracking);
560
+ line-height: var(--ds-title-line-height);
561
+ }
562
+
563
+ @utility ds-type-section-title {
564
+ font-size: var(--ds-section-title);
565
+ font-weight: var(--ds-section-title-weight);
566
+ letter-spacing: var(--ds-title-tracking);
567
+ line-height: var(--ds-section-title-line-height);
568
+ }
569
+
570
+ @utility ds-type-metadata {
571
+ font-size: var(--ds-metadata);
572
+ line-height: var(--ds-menu-label-line-height);
573
+ }
574
+
575
+ @utility ds-type-menu-item {
576
+ font-size: var(--ds-menu-item-size);
577
+ line-height: var(--ds-menu-item-line-height);
578
+ }
579
+
580
+ @utility ds-type-menu-label {
581
+ font-size: var(--ds-menu-label-size);
582
+ line-height: var(--ds-menu-label-line-height);
583
+ }
584
+
585
+ @utility ds-type-eyebrow {
586
+ font-size: var(--ds-eyebrow-size);
587
+ font-weight: var(--ds-eyebrow-weight);
588
+ letter-spacing: var(--ds-eyebrow-tracking);
589
+ line-height: var(--ds-eyebrow-line-height);
590
+ }
591
+
592
+ @utility ds-type-label {
593
+ font-size: var(--ds-field-label-size);
594
+ font-weight: 500;
595
+ line-height: var(--ds-field-label-line-height);
596
+ }
597
+
598
+ @utility ds-type-card-title {
599
+ font-size: var(--ds-card-title-size);
600
+ font-weight: var(--ds-card-title-weight);
601
+ line-height: var(--ds-card-title-line-height);
602
+ }
603
+
604
+ @utility ds-type-table-head {
605
+ font-size: var(--ds-table-head-size);
606
+ font-weight: var(--ds-table-head-weight);
607
+ letter-spacing: var(--ds-table-head-tracking);
608
+ line-height: var(--ds-table-head-line-height);
609
+ }
610
+
455
611
  @layer base {
456
612
  * {
457
- border-color: var(--border);
458
- outline-color: color-mix(in oklab, var(--ring) 50%, transparent);
613
+ border-color: var(--border-default);
614
+ outline-color: color-mix(in oklab, var(--focus) 50%, transparent);
459
615
  }
460
616
 
461
617
  html {
@@ -464,12 +620,12 @@
464
620
 
465
621
  body {
466
622
  min-height: 100vh;
467
- background: var(--background);
468
- color: var(--foreground);
623
+ background: var(--canvas);
624
+ color: var(--text-primary);
469
625
  font-family: var(--font-sans);
470
626
  font-size: var(--ds-body);
471
627
  font-weight: 400;
472
- line-height: 1.5;
628
+ line-height: var(--ds-body-line-height);
473
629
  text-rendering: optimizeLegibility;
474
630
  }
475
631
 
@@ -477,9 +633,9 @@
477
633
  h2,
478
634
  h3,
479
635
  h4 {
480
- color: var(--foreground);
481
- font-weight: 600;
482
- letter-spacing: 0;
636
+ color: var(--text-primary);
637
+ font-weight: var(--ds-title-weight);
638
+ letter-spacing: var(--ds-title-tracking);
483
639
  }
484
640
 
485
641
  button,
@@ -490,7 +646,7 @@
490
646
  }
491
647
 
492
648
  ::selection {
493
- background: color-mix(in oklab, var(--primary) 22%, transparent);
649
+ background: color-mix(in oklab, var(--action) 22%, transparent);
494
650
  }
495
651
 
496
652
  @media (prefers-reduced-motion: reduce) {
@@ -506,6 +662,370 @@
506
662
  }
507
663
 
508
664
  @layer components {
665
+ [data-slot="workbench-shell"] {
666
+ display: grid;
667
+ grid-template-columns: var(--ds-workbench-global-rail-width) var(--ds-workbench-secondary-rail-width) minmax(0, 1fr) var(--ds-workbench-inspector-width);
668
+ height: 100svh;
669
+ min-height: var(--ds-workbench-min-height);
670
+ overflow: hidden;
671
+ background: var(--canvas);
672
+ color: var(--text-primary);
673
+ font-family: var(--font-sans);
674
+ font-size: var(--ds-body);
675
+ line-height: var(--ds-body-line-height);
676
+ }
677
+
678
+ [data-slot="workbench-rail"] {
679
+ min-height: 0;
680
+ background: var(--surface);
681
+ }
682
+
683
+ [data-slot="workbench-rail"][data-variant="global"] {
684
+ display: flex;
685
+ flex-direction: column;
686
+ align-items: center;
687
+ border-right: 1px solid var(--border-subtle);
688
+ padding: 1.0625rem 0.5rem 0.875rem;
689
+ }
690
+
691
+ [data-slot="workbench-rail"][data-variant="secondary"] {
692
+ display: flex;
693
+ min-width: 0;
694
+ flex-direction: column;
695
+ overflow: hidden;
696
+ border-right: 1px solid var(--border-subtle);
697
+ padding: 1.0625rem 0.9375rem 0.875rem;
698
+ }
699
+
700
+ [data-slot="workbench-main"] {
701
+ display: flex;
702
+ min-width: 0;
703
+ min-height: 0;
704
+ flex-direction: column;
705
+ background: var(--canvas);
706
+ }
707
+
708
+ [data-slot="workbench-inspector"] {
709
+ min-height: 0;
710
+ overflow-y: auto;
711
+ border-left: 1px solid var(--border-subtle);
712
+ background: var(--surface-muted);
713
+ padding: var(--ds-workbench-inspector-padding-top) var(--ds-workbench-inspector-padding-x) var(--ds-workbench-inspector-padding-bottom);
714
+ scrollbar-width: thin;
715
+ }
716
+
717
+ [data-slot="workbench-mobile-toolbar"],
718
+ [data-slot="workbench-backdrop"] {
719
+ display: none;
720
+ }
721
+
722
+ [data-slot="workbench-section"] {
723
+ padding: 1.5rem 0;
724
+ border-bottom: 1px solid var(--border-subtle);
725
+ }
726
+
727
+ [data-slot="workbench-section"]:first-child {
728
+ padding-top: 1.375rem;
729
+ }
730
+
731
+ [data-slot="workbench-section"]:last-child {
732
+ border-bottom: 0;
733
+ }
734
+
735
+ [data-slot="workbench-section-header"] {
736
+ display: flex;
737
+ align-items: baseline;
738
+ justify-content: space-between;
739
+ gap: 0.9375rem;
740
+ }
741
+
742
+ [data-slot="workbench-section-heading"] {
743
+ display: flex;
744
+ align-items: baseline;
745
+ gap: 0.5625rem;
746
+ min-width: 0;
747
+ }
748
+
749
+ [data-slot="workbench-section-heading"] h2 {
750
+ margin: 0;
751
+ font-size: var(--ds-section-title);
752
+ font-weight: var(--ds-section-title-weight);
753
+ letter-spacing: -0.025em;
754
+ line-height: var(--ds-section-title-line-height);
755
+ }
756
+
757
+ [data-slot="workbench-section-heading"] span {
758
+ color: var(--text-muted);
759
+ font-size: var(--ds-menu-label-size);
760
+ }
761
+
762
+ [data-slot="workbench-section-action"] {
763
+ color: var(--brand);
764
+ font-size: var(--ds-menu-item-size);
765
+ }
766
+
767
+ [data-slot="resource-row"] {
768
+ display: flex;
769
+ min-width: 0;
770
+ min-height: 3.625rem;
771
+ align-items: center;
772
+ gap: 0.75rem;
773
+ padding: 0.5rem 0;
774
+ border-bottom: 1px solid var(--border-subtle);
775
+ color: var(--text-primary);
776
+ text-decoration: none;
777
+ transition: color 160ms ease, background-color 160ms ease;
778
+ }
779
+
780
+ [data-slot="resource-row"]:last-child {
781
+ border-bottom: 0;
782
+ }
783
+
784
+ [data-slot="resource-row"]:hover,
785
+ [data-slot="resource-row"]:focus-visible {
786
+ color: var(--brand);
787
+ }
788
+
789
+ [data-slot="resource-row"]:focus-visible {
790
+ outline: none;
791
+ box-shadow: var(--ds-focus-ring);
792
+ }
793
+
794
+ [data-slot="resource-row"] > svg:last-child {
795
+ width: 0.9375rem;
796
+ height: 0.9375rem;
797
+ flex: 0 0 auto;
798
+ color: var(--text-muted);
799
+ stroke-width: 1.6;
800
+ transition: color 160ms ease, transform 160ms ease;
801
+ }
802
+
803
+ [data-slot="resource-row"]:hover > svg:last-child,
804
+ [data-slot="resource-row"]:focus-visible > svg:last-child {
805
+ color: var(--brand);
806
+ transform: translateX(2px);
807
+ }
808
+
809
+ [data-slot="resource-row"][data-selected="true"] {
810
+ color: var(--selection-foreground);
811
+ }
812
+
813
+ [data-slot="resource-row-icon"] {
814
+ display: grid;
815
+ width: 1.875rem;
816
+ height: 1.875rem;
817
+ flex: 0 0 auto;
818
+ place-items: center;
819
+ border: 1px solid var(--border-subtle);
820
+ border-radius: var(--ds-radius-control);
821
+ background: var(--surface-muted);
822
+ color: var(--text-supporting);
823
+ }
824
+
825
+ [data-slot="resource-row-icon"] svg {
826
+ width: 0.9375rem;
827
+ height: 0.9375rem;
828
+ stroke-width: 1.5;
829
+ }
830
+
831
+ [data-slot="resource-row-content"] {
832
+ display: flex;
833
+ min-width: 0;
834
+ flex: 1;
835
+ flex-direction: column;
836
+ gap: 0.125rem;
837
+ }
838
+
839
+ [data-slot="resource-row-title"],
840
+ [data-slot="resource-row-description"] {
841
+ overflow: hidden;
842
+ text-overflow: ellipsis;
843
+ white-space: nowrap;
844
+ }
845
+
846
+ [data-slot="resource-row-title"] {
847
+ color: currentColor;
848
+ font-size: var(--ds-ui-text-size);
849
+ font-weight: 600;
850
+ line-height: 1.25;
851
+ }
852
+
853
+ [data-slot="resource-row-description"],
854
+ [data-slot="resource-row-meta"] {
855
+ color: var(--text-supporting);
856
+ font-size: var(--ds-metadata);
857
+ line-height: 1.3;
858
+ }
859
+
860
+ [data-slot="resource-row-meta"] {
861
+ flex: 0 0 auto;
862
+ white-space: nowrap;
863
+ }
864
+
865
+ [data-slot="workbench-inspector-section"] {
866
+ padding: 1.5625rem 0;
867
+ border-bottom: 1px solid var(--border-subtle);
868
+ }
869
+
870
+ [data-slot="workbench-inspector-section"]:first-of-type {
871
+ padding-top: 2.25rem;
872
+ }
873
+
874
+ [data-slot="workbench-inspector-section"]:last-child {
875
+ border-bottom: 0;
876
+ }
877
+
878
+ [data-slot="workbench-inspector-label"] {
879
+ display: flex;
880
+ align-items: center;
881
+ justify-content: space-between;
882
+ gap: 0.625rem;
883
+ margin-bottom: 0.9375rem;
884
+ }
885
+
886
+ [data-slot="workbench-inspector-label"] h3 {
887
+ margin: 0;
888
+ color: var(--text-supporting);
889
+ font-size: var(--ds-menu-label-size);
890
+ font-weight: 700;
891
+ letter-spacing: 0.14em;
892
+ line-height: 1.2;
893
+ text-transform: uppercase;
894
+ }
895
+
896
+ [data-slot="identity-row"] {
897
+ display: flex;
898
+ min-width: 0;
899
+ align-items: center;
900
+ gap: 0.625rem;
901
+ }
902
+
903
+ [data-slot="identity-row"] + [data-slot="identity-row"] {
904
+ margin-top: 0.875rem;
905
+ }
906
+
907
+ [data-slot="identity-avatar"] {
908
+ display: grid;
909
+ width: 1.875rem;
910
+ height: 1.875rem;
911
+ flex: 0 0 auto;
912
+ place-items: center;
913
+ border-radius: 999px;
914
+ background: var(--brand-secondary-background);
915
+ color: var(--brand-secondary);
916
+ font-size: var(--ds-menu-label-size);
917
+ font-weight: 700;
918
+ }
919
+
920
+ [data-slot="identity-copy"] {
921
+ display: flex;
922
+ min-width: 0;
923
+ flex-direction: column;
924
+ gap: 0.125rem;
925
+ }
926
+
927
+ [data-slot="identity-copy"] strong,
928
+ [data-slot="identity-copy"] small {
929
+ overflow: hidden;
930
+ text-overflow: ellipsis;
931
+ white-space: nowrap;
932
+ }
933
+
934
+ [data-slot="identity-copy"] strong {
935
+ font-size: var(--ds-ui-text-size);
936
+ font-weight: 600;
937
+ }
938
+
939
+ [data-slot="identity-copy"] small {
940
+ color: var(--text-supporting);
941
+ font-size: var(--ds-metadata);
942
+ }
943
+
944
+ [data-slot="identity-row"][data-compact="true"] [data-slot="identity-avatar"] {
945
+ width: 1.75rem;
946
+ height: 1.75rem;
947
+ background: var(--surface-muted);
948
+ }
949
+
950
+ @media (max-width: 75rem) {
951
+ [data-slot="workbench-shell"] {
952
+ grid-template-columns: 4rem 16.25rem minmax(0, 1fr) 17.5rem;
953
+ }
954
+
955
+ [data-slot="workbench-inspector"] {
956
+ padding-inline: 1.3125rem;
957
+ }
958
+ }
959
+
960
+ @media (max-width: 63.75rem) {
961
+ [data-slot="workbench-shell"] {
962
+ grid-template-columns: 4rem 16.25rem minmax(0, 1fr);
963
+ }
964
+
965
+ [data-slot="workbench-inspector"] {
966
+ display: none;
967
+ }
968
+ }
969
+
970
+ @media (max-width: 47.5rem) {
971
+ [data-slot="workbench-shell"] {
972
+ display: block;
973
+ min-height: 100svh;
974
+ height: 100svh;
975
+ }
976
+
977
+ [data-slot="workbench-rail"][data-variant="global"] {
978
+ display: none;
979
+ }
980
+
981
+ [data-slot="workbench-rail"][data-variant="secondary"] {
982
+ position: fixed;
983
+ z-index: 30;
984
+ inset-block: 0;
985
+ left: 0;
986
+ display: flex;
987
+ width: min(19.625rem, calc(100vw - 2.8125rem));
988
+ transform: translateX(-105%);
989
+ box-shadow: 0.875rem 0 2.1875rem rgb(20 12 21 / 16%);
990
+ transition: transform 190ms ease;
991
+ }
992
+
993
+ [data-slot="workbench-rail"][data-variant="secondary"][data-open="true"] {
994
+ transform: translateX(0);
995
+ }
996
+
997
+ [data-slot="workbench-main"] {
998
+ height: 100svh;
999
+ }
1000
+
1001
+ [data-slot="workbench-mobile-toolbar"] {
1002
+ display: flex;
1003
+ min-height: 3.25rem;
1004
+ align-items: center;
1005
+ gap: 0.5rem;
1006
+ border-bottom: 1px solid var(--border-subtle);
1007
+ background: var(--surface);
1008
+ padding-inline: 0.9375rem;
1009
+ }
1010
+
1011
+ [data-slot="workbench-backdrop"][data-open="true"] {
1012
+ position: fixed;
1013
+ z-index: 20;
1014
+ inset: 0;
1015
+ display: block;
1016
+ width: 100%;
1017
+ height: 100%;
1018
+ border: 0;
1019
+ background: rgb(20 12 21 / 20%);
1020
+ }
1021
+ }
1022
+
1023
+ @media (prefers-reduced-motion: reduce) {
1024
+ [data-slot="workbench-rail"][data-variant="secondary"] {
1025
+ transition: none;
1026
+ }
1027
+ }
1028
+
509
1029
  [data-slot="tabs-list"][data-scroll-position="start"],
510
1030
  [data-slot="navigation-tabs-list"][data-scroll-position="start"] {
511
1031
  mask-image: linear-gradient(