ui-lab-theme-onyx 0.3.43 → 0.3.45

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 (2) hide show
  1. package/package.json +1 -1
  2. package/styles.css +444 -294
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ui-lab-theme-onyx",
3
- "version": "0.3.43",
3
+ "version": "0.3.45",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "main": "./styles.css",
package/styles.css CHANGED
@@ -1,6 +1,32 @@
1
1
  /* Onyx Theme - Button Styles */
2
2
 
3
+ :root {
4
+ --spacing: 0.25rem;
5
+ --spacing-xs: calc(var(--spacing) * 1);
6
+ --spacing-sm: calc(var(--spacing) * 2);
7
+ --spacing-md: calc(var(--spacing) * 4);
8
+ --spacing-lg: calc(var(--spacing) * 6);
9
+ --spacing-xl: calc(var(--spacing) * 8);
10
+
11
+ --hover-transition-enter-duration: 0ms;
12
+ --hover-transition-leave-duration: 300ms;
13
+
14
+ --hover-transition-duration: var(--hover-transition-leave-duration);
15
+ --hover-transition-timing-function: var(--ease-snappy-pop, ease-out);
16
+ }
17
+
18
+
3
19
  @layer components {
20
+ /* Universal variants (token presets) */
21
+ [data-ring="true"] {
22
+ --ring: #0f74c5;
23
+ --ring-width: 2px;
24
+ --ring-border: var(--ring);
25
+ --ring-border-visible: var(--ring-border);
26
+ --ring-shadow: 0 0 0 var(--ring-width) var(--ring);
27
+ --ring-z: 10;
28
+ }
29
+
4
30
  .button {
5
31
  --background: var(--background-800);
6
32
  --foreground: var(--foreground-200);
@@ -13,65 +39,13 @@
13
39
  font-size: var(--text-xs);
14
40
  }
15
41
 
16
- .button.icon { @apply aspect-square }
17
- .button.sm { @apply px-2 py-1.5 text-xs font-semibold }
42
+ .button.sq { @apply aspect-square inline-flex items-center justify-center }
43
+ .button.sm { @apply px-2.5 py-1.5 text-xs font-semibold }
18
44
  .button.md { @apply px-3 py-1.5 }
19
45
  .button.lg { @apply px-10 py-2 }
20
46
 
21
- .button.primary {
22
- --background: var(--foreground-100);
23
- --foreground: var(--background-900);
24
- --background-border: var(--foreground-200);
25
- --background-hover: color-mix(in srgb, var(--foreground-100) 90%, var(--background-600));
26
- --background-hover-border: color-mix(in srgb, var(--foreground-100) 90%, var(--background-600));
27
- --background-pressed: color-mix(in srgb, var(--foreground-100) 85%, var(--background-600));
28
- --background-pressed-border: color-mix(in srgb, var(--foreground-100) 85%, var(--background-600));
29
- }
30
-
31
- .button.secondary {
32
- --background: var(--background-900);
33
- --foreground: var(--foreground-200);
34
- --background-border: var(--background-700);
35
- --background-hover: color-mix(in srgb, var(--background-700) 50%, var(--background-950));
36
- --background-hover-border: var(--background-700);
37
- --background-pressed: color-mix(in srgb, var(--background-700) 60%, var(--background-950));
38
- --background-pressed-border: var(--background-700);
39
- }
40
-
41
- .button.outline {
42
- --background: transparent;
43
- --foreground: var(--foreground-300);
44
- --background-border: var(--background-700);
45
- --background-hover: color-mix(in srgb, var(--background-950) 90%, var(--background-500));
46
- --background-hover-border: var(--background-600);
47
- --background-pressed: color-mix(in srgb, var(--background-900) 90%, var(--background-500));
48
- --background-pressed-border: var(--background-600);
49
- /* Override tailwind *outline* class */
50
- outline-style: unset !important;
51
- }
52
-
53
- .button.danger {
54
- --background: color-mix(in srgb, var(--danger-500) 15%, transparent);
55
- --foreground: var(--danger-600);
56
- --background-border: transparent;
57
- --focus-visible: var(--danger-400);
58
- --background-hover: color-mix(in srgb, var(--danger-500) 25%, transparent);
59
- --background-hover-border: transparent;
60
- --background-pressed: color-mix(in srgb, var(--danger-500) 30%, transparent);
61
- --background-pressed-border: transparent;
62
- }
63
-
64
- .button.ghost {
65
- --background: transparent;
66
- --foreground: var(--foreground-300);
67
- --background-border: transparent;
68
- --background-hover: var(--background-800);
69
- --background-hover-border: transparent;
70
- }
71
-
72
- /* Gallery Styles */
73
-
74
- .gallery.item {
47
+ .gallery.item,
48
+ [data-focus-surface="true"] {
75
49
  --background: var(--background-950);
76
50
  --background-border: var(--background-700);
77
51
  --background-hover-border: var(--background-600);
@@ -101,18 +75,19 @@
101
75
  /* Card Styles */
102
76
 
103
77
  .card {
104
- --background: var(--background-800);
105
- --border: var(--background-700);
106
- --focus-ring: var(--accent-400);
78
+ --background: var(--background-900);
79
+ --foreground: var(--foreground-200);
80
+ --background-border: var(--background-700);
81
+ --focus-visible: var(--accent-400);
107
82
  }
108
83
 
109
84
  .card.header {
110
- --border: var(--background-700);
85
+ --background-border: var(--background-700);
111
86
  }
112
87
 
113
88
  .card.footer {
114
89
  --background: color-mix(in srgb, var(--background-900) 50%, transparent);
115
- --border: var(--background-700);
90
+ --background-border: var(--background-700);
116
91
  }
117
92
 
118
93
  /* List Styles */
@@ -137,18 +112,30 @@
137
112
  .group {
138
113
  --background: var(--background-950);
139
114
  --background-border: var(--background-700);
140
- --focus-visible: var(--accent-500);
141
- }
142
-
143
- .group.button {
115
+ --group-background: var(--background);
116
+ --group-foreground: var(--foreground);
117
+ --group-border: var(--background-border);
118
+ --group-hover: var(--background-hover, var(--group-background));
119
+ --group-pressed: var(--background-pressed, var(--group-hover));
120
+ --group-divider-background: var(--group-border);
121
+ --group-input-background: var(--group-background);
122
+ --group-input-foreground: var(--group-foreground);
123
+ --group-input-border-width: 0px;
124
+ --group-input-border: transparent;
125
+ --group-input-hover-border: var(--group-input-border);
126
+ --group-input-focused-border: var(--group-input-border);
127
+ }
128
+
129
+ .group.outline {
130
+ --group-divider-background: var(--background-border);
131
+ --group-input-background: transparent;
132
+ }
133
+
134
+ .group .button {
144
135
  --button-selected-background: var(--background-800);
145
136
  --button-selected-foreground: var(--foreground-100);
146
137
  }
147
138
 
148
- .group.ghost {
149
- --background: transparent;
150
- }
151
-
152
139
  /* Command Styles */
153
140
  .command {
154
141
  --background: var(--background-900);
@@ -156,7 +143,7 @@
156
143
  --background-pressed: var(--background-800);
157
144
  --background-list: var(--background-950);
158
145
  --background-footer: var(--background-800);
159
- --border-color: var(--background-700);
146
+ --border: var(--background-700);
160
147
  --foreground: var(--foreground-300);
161
148
  --foreground-muted: var(--foreground-400);
162
149
  --overlay: rgb(0 0 0 / 0.2);
@@ -173,82 +160,120 @@
173
160
  --focus-ring: var(--foreground-300);
174
161
  }
175
162
 
176
- .date.date-header {
163
+ .date .date-header {
177
164
  --header-color: var(--foreground-300);
178
165
  }
179
166
 
180
- .date.date-day-headers {
167
+ .date .date-day-headers {
181
168
  --day-headers-background: var(--background-900);
182
169
  }
183
170
 
184
- .date.date-day-header {
171
+ .date .date-day-header {
185
172
  --day-header-color: var(--foreground-400);
186
173
  }
187
174
 
188
- .date.date-nav-button {
175
+ .date .date-nav-button {
189
176
  --nav-button-color: var(--foreground-400);
190
177
  --nav-button-background-hover: var(--background-800);
191
178
  }
192
179
 
193
- .date.date-grid {
180
+ .date .date-grid {
194
181
  --grid-background: var(--background-900);
195
182
  }
196
183
 
197
- .date.date-day {
184
+ .date .date-day {
198
185
  --cell-text: var(--foreground-300);
199
186
  }
200
187
 
201
- .date.date-day[data-selected="true"] {
188
+ .date .date-day[data-selected="true"] {
202
189
  --cell-background: var(--background-800);
203
190
  --cell-text: var(--foreground-50);
204
191
  }
205
192
 
206
- .date.date-day[data-today="true"] {
193
+ .date .date-day[data-today="true"] {
207
194
  --cell-background: var(--background-800);
208
195
  --cell-text: var(--foreground-50);
209
196
  }
210
197
 
211
- .date.date-day[data-disabled="true"],
212
- .date.date-day[data-out-of-range="true"] {
198
+ .date .date-day[data-disabled="true"],
199
+ .date .date-day[data-out-of-range="true"] {
213
200
  --cell-text: var(--foreground-400);
214
201
  }
215
202
 
216
- .date.date-day:hover:not([data-disabled="true"]):not([data-out-of-range="true"]) {
203
+ .date .date-day:hover:not([data-disabled="true"]):not([data-out-of-range="true"]) {
204
+ --hover-transition-duration: var(--hover-transition-enter-duration, 0ms);
217
205
  --cell-background: var(--background-800);
218
206
  }
219
207
 
208
+ /* Table Styles */
209
+
210
+ .table {
211
+ --background: var(--background-950);
212
+ --foreground: var(--foreground-300);
213
+ --border: var(--background-700);
214
+ --background-hover: var(--background-800);
215
+ --background-selected: var(--background-800);
216
+ --body-background-hover: var(--background-hover);
217
+ --row-selected-background: var(--background-selected);
218
+ --cell-background: transparent;
219
+ --cell-foreground: var(--foreground-300);
220
+ --filter-background: var(--background-900);
221
+ --filter-border: var(--border);
222
+ --empty-foreground: var(--foreground-400);
223
+ --focus-ring: var(--foreground-300);
224
+ }
225
+
226
+ .table .header,
227
+ .table .header-cell {
228
+ --header-background: var(--background-900);
229
+ --header-foreground: var(--foreground-400);
230
+ }
231
+
232
+ .table .body,
233
+ .table .element {
234
+ --body-background: var(--background-900);
235
+ }
236
+
237
+ .table .filter-grid {
238
+ --filter-grid-background: var(--background-900);
239
+ }
240
+
241
+ .table .filter-label {
242
+ --filter-label-foreground: var(--foreground-400);
243
+ }
244
+
220
245
  /* Checkbox Styles */
221
246
 
222
247
  .checkbox {
223
248
  --background: var(--background-900);
224
249
  --background-border: var(--background-700);
225
- --background-hover: color-mix(in srgb, var(--background-500) 10%, transparent);
250
+ --background-hover: color-mix(in srgb, var(--background-500) 10%, var(--background-900));
226
251
  --background-hover-border: var(--background-600);
227
- --focus-visible: var(--accent-500);
252
+ --ring: var(--accent-500);
228
253
  }
229
254
 
230
255
  .checkbox[data-selected="true"] {
231
- --background-selected: var(--accent-500);
232
- --background-selected-border: var(--accent-500);
233
- --background-hover: var(--accent-600);
234
- --background-hover-border: var(--accent-400);
256
+ --background-selected: var(--foreground-200);
257
+ --background-selected-border: var(--foreground-200);
258
+ --background-hover: var(--foreground-300);
259
+ --background-hover-border: var(--foreground-300);
235
260
  }
236
261
 
237
262
  .checkbox[data-indeterminate="true"] {
238
- --background-indeterminate: var(--accent-600);
239
- --background-indeterminate-border: var(--accent-600);
240
- --background-hover: var(--accent-500);
241
- --background-hover-border: var(--accent-400);
263
+ --background-indeterminate: var(--foreground-200);
264
+ --background-indeterminate-border: var(--foreground-200);
265
+ --background-hover: var(--foreground-300);
266
+ --background-hover-border: var(--foreground-300);
242
267
  }
243
268
 
244
- .checkbox.checkmark,
245
- .checkbox.indeterminate {
246
- --icon-foreground: white;
269
+ .checkbox .checkmark,
270
+ .checkbox .indeterminate {
271
+ --icon-foreground: color-mix(in srgb, var(--accent-500) 20%, var(--background-950));
247
272
  }
248
273
 
249
- .checkbox-root.helper-text {
250
- --helper-text-foreground: currentColor;
251
- --helper-text-error-foreground: white;
274
+ .checkbox-root {
275
+ --helper-foreground: var(--foreground-400);
276
+ --helper-error-foreground: var(--danger-600);
252
277
  }
253
278
 
254
279
  /* Color Styles */
@@ -259,23 +284,23 @@
259
284
  --focus-visible: var(--accent-500);
260
285
  }
261
286
 
262
- .color.canvas-pointer {
287
+ .color .canvas-pointer {
263
288
  --pointer-border: color-mix(in srgb, var(--foreground-200) 50%, transparent);
264
289
  }
265
290
 
266
- .color.hue-thumb,
267
- .color.opacity-thumb {
291
+ .color .hue-thumb,
292
+ .color .opacity-thumb {
268
293
  --thumb-border: white;
269
294
  --thumb-background: white;
270
295
  }
271
296
 
272
- .color.opacity-track {
297
+ .color .opacity-track {
273
298
  --checkerboard-dark: var(--background-800);
274
299
  --checkerboard-light: var(--background-700);
275
300
  }
276
301
 
277
- .color.preview-swatch,
278
- .color.preview {
302
+ .color .preview-swatch,
303
+ .color .preview {
279
304
  --checkerboard-dark: var(--background-700);
280
305
  --checkerboard-light: var(--background-800);
281
306
  }
@@ -288,15 +313,15 @@
288
313
  --error-foreground: var(--danger-600);
289
314
  }
290
315
 
291
- .label.required-indicator {
316
+ .label .required-indicator {
292
317
  --required-color: var(--danger-600);
293
318
  }
294
319
 
295
- .label.helper-text {
320
+ .label .helper-text {
296
321
  --helper-color: var(--foreground-400);
297
322
  }
298
323
 
299
- .label.helper-text[data-error] {
324
+ .label .helper-text[data-error] {
300
325
  --helper-error-color: var(--danger-600);
301
326
  }
302
327
 
@@ -307,17 +332,55 @@
307
332
  --foreground: var(--foreground-50);
308
333
  --placeholder: var(--foreground-400);
309
334
  --background-border: var(--background-700);
310
- --background-focused-border: var(--accent-500);
311
- --focus-visible: var(--accent-500);
335
+ --ring: var(--accent-500);
336
+ --ring-border: var(--ring);
337
+ --ring-border-visible: var(--ring-border);
312
338
  --disabled-background: var(--background-900);
313
339
  --disabled-foreground: var(--foreground-400);
314
340
  font-size: var(--text-xs);
315
341
  font-weight: var(--font-weight-medium)
316
342
  }
317
343
 
344
+ .input input {
345
+ height: fit-content;
346
+ flex: 1;
347
+ min-width: 0;
348
+ @apply py-1.5 px-3;
349
+ font-family: inherit;
350
+ font-size: var(--text-sm);
351
+ font-weight: var(--font-weight-medium);
352
+ line-height: var(--leading-snug);
353
+ color: var(--foreground);
354
+ background-color: transparent;
355
+ border: none;
356
+ outline: none;
357
+ box-sizing: border-box;
358
+ }
359
+
360
+ .input input::placeholder {
361
+ color: var(--placeholder);
362
+ }
363
+
364
+ .input input[data-disabled] {
365
+ color: var(--disabled-foreground);
366
+ cursor: not-allowed;
367
+ }
368
+
369
+ .input input[type="number"]::-webkit-outer-spin-button,
370
+ .input input[type="number"]::-webkit-inner-spin-button {
371
+ -webkit-appearance: none;
372
+ margin: 0;
373
+ display: none;
374
+ }
375
+
376
+ .input input[type="number"] {
377
+ -moz-appearance: textfield;
378
+ }
379
+
318
380
  .input[data-error] {
319
- --background-focused-border: var(--danger-600);
320
- --focus-visible: var(--danger-600);
381
+ --ring: var(--danger-600);
382
+ --ring-border: var(--ring);
383
+ --ring-border-visible: var(--ring-border);
321
384
  }
322
385
 
323
386
  .input[data-variant="ghost"] {
@@ -329,16 +392,16 @@
329
392
  box-shadow: none;
330
393
  }
331
394
 
332
- .input.icon-wrapper {
333
- color: var(--foreground-400);
395
+ .input .icon {
396
+ --foreground: var(--foreground-400);
334
397
  }
335
398
 
336
- .input.spin-button {
337
- --controls-color: var(--foreground-400);
338
- --controls-hover-background: var(--background-800);
339
- --controls-hover-color: var(--foreground-200);
340
- --controls-active-background: var(--background-700);
341
- --controls-active-color: var(--accent-500);
399
+ .input .stepper {
400
+ --foreground: var(--foreground-400);
401
+ --hover-background: var(--background-800);
402
+ --hover-color: var(--foreground-200);
403
+ --active-background: var(--background-700);
404
+ --active-color: var(--accent-500);
342
405
  }
343
406
 
344
407
  /* Radio Styles */
@@ -348,25 +411,27 @@
348
411
  --background-border: var(--background-700);
349
412
  --background-selected: var(--accent-500);
350
413
  --background-selected-border: var(--accent-500);
351
- --background-hover: var(--accent-500);
414
+ --background-hover: var(--background-900);
352
415
  --background-hover-border: var(--background-500);
353
416
  --background-error-border: var(--danger-500);
354
417
  --dot-color: transparent;
355
- --dot-selected-color: var(--accent-50);
418
+ --dot-selected-color: var(--foreground-400);
356
419
  --focus-visible: rgb(59, 130, 246);
357
420
  }
358
421
 
359
- .radio.radio-label {
422
+ .radio-group .radio-label,
423
+ .radio-item .radio-label {
360
424
  --foreground: var(--foreground-300);
361
425
  --foreground-disabled: var(--foreground-400);
362
426
  }
363
427
 
364
- .radio.radio-description {
428
+ .radio-group .radio-description,
429
+ .radio-item .radio-description {
365
430
  --foreground: var(--foreground-400);
366
431
  --foreground-error: var(--danger-500);
367
432
  }
368
433
 
369
- .radio.helper-text {
434
+ .radio-item .helper-text {
370
435
  --foreground: var(--foreground-400);
371
436
  --foreground-error: var(--danger-500);
372
437
  }
@@ -405,21 +470,21 @@
405
470
  --foreground-size: var(--text-xs)
406
471
  }
407
472
 
408
- .select.ghost {
473
+ .select .ghost {
409
474
  --background: transparent;
410
475
  --background-border: transparent;
411
476
  --background-hover: color-mix(in srgb, var(--background-700) 50%, transparent);
412
477
  --background-pressed: color-mix(in srgb, var(--background-700) 50%, transparent);
413
478
  }
414
479
 
415
- .select.content,
416
- .select.sub-content {
480
+ .select .content,
481
+ .select .sub-content {
417
482
  --background: var(--background-900);
418
483
  --background-border: var(--background-700);
419
484
  }
420
485
 
421
- .select.item,
422
- .select.sub-trigger {
486
+ .select .item,
487
+ .select .sub-trigger {
423
488
  --foreground: var(--foreground-300);
424
489
  --foreground-muted: var(--foreground-400);
425
490
  --icon-foreground: var(--foreground-300);
@@ -430,29 +495,34 @@
430
495
  --item-background-highlighted: var(--background-highlighted);
431
496
  }
432
497
 
433
- .select.placeholder {
498
+ .select .placeholder {
434
499
  --foreground-muted: var(--foreground-400);
435
500
  }
436
501
 
437
- .select.search-trigger {
502
+ .select .empty-state {
503
+ font-size: var(--text-xs);
504
+ }
505
+
506
+ .select .search-trigger {
438
507
  --focus-visible: var(--accent-500);
439
508
  }
440
509
 
441
510
  /* Slider Styles */
442
511
 
443
- .slider.track {
444
- --track-background: var(--background-800);
512
+ .slider .track {
513
+ --background: var(--background-800);
445
514
  }
446
515
 
447
- .slider.range {
448
- --range-background: color-mix(in srgb, var(--accent-500) 60%, transparent);
449
- --range-disabled-background: var(--background-600);
516
+ .slider .range {
517
+ --background: color-mix(in srgb, var(--accent-500) 60%, transparent);
518
+ --background-disabled: var(--background-600);
450
519
  }
451
520
 
452
- .slider.thumb {
453
- --thumb-background: var(--accent-500);
454
- --thumb-focused-background: var(--accent-400);
455
- --thumb-disabled-background: var(--background-500);
521
+ .slider .thumb {
522
+ --background: white;
523
+ --background-border: color-mix(in srgb, var(--background-500) 40%, transparent);;
524
+ --background-focused: var(--accent-400);
525
+ --background-disabled: var(--background-500);
456
526
  --focus-visible: color-mix(in srgb, var(--accent-500) 40%, transparent);
457
527
  }
458
528
 
@@ -464,10 +534,10 @@
464
534
  --foreground: var(--background-500);
465
535
  --foreground-active: white;
466
536
 
467
- --border-color: var(--background-600);
468
- --border-color-hover: transparent;
469
- --border-color-pressed: transparent;
470
- --border-color-active: transparent;
537
+ --border: var(--background-600);
538
+ --border-hover: transparent;
539
+ --border-pressed: transparent;
540
+ --border-active: transparent;
471
541
 
472
542
  --focus-visible: 0 0 0 3px color-mix(in srgb, var(--accent-500) 40%, transparent);
473
543
  }
@@ -479,38 +549,34 @@
479
549
  --foreground: var(--foreground-50);
480
550
  --placeholder: var(--foreground-400);
481
551
  --background-border: var(--background-700);
482
- --background-focused-border: var(--accent-500);
483
- --focus-visible: var(--accent-500);
552
+ --background-hover: var(--background-900);
484
553
  --background-disabled: var(--background-900);
485
554
  --foreground-disabled: var(--foreground-400);
555
+ --disabled-opacity: 0.6;
486
556
  }
487
557
 
488
558
  .textarea[data-error] {
489
559
  --background-error-border: var(--danger-600);
490
- --background-error-focused-border: var(--danger-600);
491
- --focus-visible: var(--danger-600);
492
560
  }
493
561
 
494
- .textarea.scroll-wrapper {
562
+ .textarea-scope .scroll-wrapper {
495
563
  --background: var(--background-950);
496
564
  --background-border: var(--background-700);
497
- --background-focused-border: var(--accent-500);
498
- --focus-visible: var(--accent-500);
565
+ --background-hover: var(--background-900);
499
566
  --background-disabled: var(--background-900);
567
+ --disabled-opacity: 0.6;
500
568
  }
501
569
 
502
- .textarea.scroll-wrapper[data-error] {
570
+ .textarea-scope .scroll-wrapper[data-error] {
503
571
  --background-error-border: var(--danger-600);
504
- --background-error-focused-border: var(--danger-600);
505
- --focus-visible: var(--danger-600);
506
572
  }
507
573
 
508
- .textarea.resize-handle {
574
+ .textarea-scope .resize-handle {
509
575
  --handle-background: color-mix(in srgb, var(--foreground-400) 72%, transparent);
510
576
  --handle-hover-background: color-mix(in srgb, var(--foreground-200) 90%, transparent);
511
577
  }
512
578
 
513
- .textarea.character-count {
579
+ .textarea-scope .character-count {
514
580
  --count-foreground: var(--foreground-400);
515
581
  --count-over-limit-foreground: var(--danger-600);
516
582
  }
@@ -523,41 +589,6 @@
523
589
  --border: var(--info-600);
524
590
  }
525
591
 
526
- .banner.note {
527
- --background: var(--background-900);
528
- --foreground: var(--foreground-200);
529
- --border: var(--background-700);
530
- --icon-color: var(--background-500);
531
- }
532
-
533
- .banner.info {
534
- --background: color-mix(in srgb, var(--info-600) 10%, var(--background-900));
535
- --foreground: var(--foreground-200);
536
- --border: color-mix(in srgb, var(--info-600) 30%, var(--background-900));
537
- --icon-color: var(--info-600);
538
- }
539
-
540
- .banner.success {
541
- --background: color-mix(in srgb, var(--success-600) 10%, var(--background-900));
542
- --foreground: var(--foreground-200);
543
- --border: color-mix(in srgb, var(--success-600) 30%, var(--background-900));
544
- --icon-color: var(--success-600);
545
- }
546
-
547
- .banner.warning {
548
- --background: color-mix(in srgb, var(--warning-600) 10%, var(--background-900));
549
- --foreground: var(--foreground-200);
550
- --border: color-mix(in srgb, var(--warning-600) 30%, var(--background-900));
551
- --icon-color: var(--warning-600);
552
- }
553
-
554
- .banner.danger {
555
- --background: color-mix(in srgb, var(--danger-600) 10%, var(--background-900));
556
- --foreground: var(--foreground-200);
557
- --border: color-mix(in srgb, var(--danger-600) 30%, var(--background-900));
558
- --icon-color: var(--danger-600);
559
- }
560
-
561
592
  /* Badge Styles */
562
593
 
563
594
  .badge.sm {
@@ -580,63 +611,28 @@
580
611
  font-size: var(--text-xs)
581
612
  }
582
613
 
583
- .badge.dismiss {
614
+ .badge .dismiss {
584
615
  --dismiss-foreground: var(--foreground-400);
585
616
  --dismiss-hover-background: color-mix(in srgb, var(--background-700) 80%, var(--background-900));
586
617
  --dismiss-pressed-background: var(--background-700);
587
618
  --dismiss-focus-visible: var(--accent-400);
588
619
  }
589
620
 
590
- .badge.default {
591
- --background: color-mix(in srgb, var(--background-600) 10%, var(--background-900));
592
- --foreground: var(--foreground-200);
593
- --background-border: var(--background-700);
594
- }
595
-
596
- .badge.secondary {
597
- --background: color-mix(in srgb, var(--background-900) 90%, var(--background-600));
598
- --foreground: var(--foreground-300);
599
- --background-border: color-mix(in srgb, var(--background-600) 40%, transparent);
600
- }
601
-
602
- .badge.success {
603
- --background: color-mix(in srgb, var(--success-600) 10%, var(--background-900));
604
- --foreground: var(--success-600);
605
- --background-border: color-mix(in srgb, var(--success-600) 20%, var(--background-900));
606
- }
607
-
608
- .badge.warning {
609
- --background: color-mix(in srgb, var(--warning-600) 10%, var(--background-900));
610
- --foreground: var(--warning-600);
611
- --background-border: color-mix(in srgb, var(--warning-600) 20%, var(--background-900));
612
- }
613
-
614
- .badge.danger {
615
- --background: color-mix(in srgb, var(--danger-600) 10%, var(--background-900));
616
- --foreground: var(--danger-600);
617
- --background-border: color-mix(in srgb, var(--danger-600) 20%, var(--background-900));
618
- }
619
-
620
- .badge.info {
621
- --background: color-mix(in srgb, var(--info-600) 10%, var(--background-900));
622
- --foreground: var(--info-600);
623
- --background-border: color-mix(in srgb, var(--info-600) 20%, var(--background-900));
624
- }
625
-
626
621
  /* Popover Styles */
627
622
 
628
- .popover.content {
629
- --popover-fill: var(--background-900);
630
- --popover-border-color: var(--background-700);
623
+ .popover .content {
624
+ --background: var(--background-900);
625
+ --background-hover: var(--background-900);
626
+ --background-border: var(--background-700);
631
627
  }
632
628
 
633
- .popover.frame {
629
+ .popover .frame {
634
630
  --foreground: var(--foreground-200);
635
631
  }
636
632
 
637
633
  /* Tooltip Styles */
638
634
 
639
- .tooltip.content {
635
+ .tooltip .content {
640
636
  --background: var(--background-900);
641
637
  --background-hover: var(--background-900);
642
638
  --background-border: var(--background-700);
@@ -644,7 +640,7 @@
644
640
  font-weight: var(--font-weight-medium);
645
641
  }
646
642
 
647
- .tooltip.frame {
643
+ .tooltip .frame {
648
644
  --foreground: var(--foreground-200);
649
645
  }
650
646
 
@@ -655,23 +651,23 @@
655
651
  --fill-background: color-mix(in srgb, var(--accent-600) 60%, var(--background-500));
656
652
  }
657
653
 
658
- .progress.label-row {
654
+ .progress .label-row {
659
655
  --foreground: var(--foreground-400);
660
656
  }
661
657
 
662
- .progress[data-variant="default"] .fill {
658
+ .progress .bar[data-variant="default"] .fill {
663
659
  --fill-background: var(--accent-500);
664
660
  }
665
661
 
666
- .progress[data-variant="success"] .fill {
662
+ .progress .bar[data-variant="success"] .fill {
667
663
  --fill-background: var(--success-500);
668
664
  }
669
665
 
670
- .progress[data-variant="warning"] .fill {
666
+ .progress .bar[data-variant="warning"] .fill {
671
667
  --fill-background: var(--warning-500);
672
668
  }
673
669
 
674
- .progress[data-variant="error"] .fill {
670
+ .progress .bar[data-variant="error"] .fill {
675
671
  --fill-background: var(--danger-500);
676
672
  }
677
673
 
@@ -690,83 +686,61 @@
690
686
  --background-border: var(--background-600);
691
687
  }
692
688
 
693
- .toast.danger {
694
- --background: color-mix(in srgb, var(--danger-600) 10%, var(--background-900));
695
- --foreground: var(--foreground-200);
696
- --background-border: color-mix(in srgb, var(--danger-600) 20%, var(--background-900));
697
- }
698
-
699
- .toast.success {
700
- --background: color-mix(in srgb, var(--success-600) 10%, var(--background-900));
701
- --foreground: var(--foreground-200);
702
- --background-border: color-mix(in srgb, var(--success-600) 20%, var(--background-900));
703
- }
704
-
705
- .toast.info {
706
- --background: color-mix(in srgb, var(--info-600) 10%, var(--background-900));
707
- --foreground: var(--foreground-200);
708
- --background-border: color-mix(in srgb, var(--info-600) 20%, var(--background-900));
689
+ .toast .icon {
690
+ --foreground: currentColor;
709
691
  }
710
692
 
711
- .toast.warning {
712
- --background: color-mix(in srgb, var(--warning-600) 10%, var(--background-900));
713
- --foreground: var(--foreground-200);
714
- --background-border: color-mix(in srgb, var(--warning-600) 20%, var(--background-900));
693
+ .toast .title {
694
+ --foreground: var(--foreground-100);
715
695
  }
716
696
 
717
- .toast.icon {
718
- --foreground: currentColor;
697
+ .toast .description {
698
+ --foreground: var(--foreground-300);
719
699
  }
720
700
 
721
- .toast.danger.icon {
701
+ .toast.danger .icon {
722
702
  --foreground: var(--danger-600);
723
703
  }
724
704
 
725
- .toast.success.icon {
705
+ .toast.success .icon {
726
706
  --foreground: var(--success-600);
727
707
  }
728
708
 
729
- .toast.info.icon {
709
+ .toast.info .icon {
730
710
  --foreground: var(--info-600);
731
711
  }
732
712
 
733
- .toast.warning.icon {
713
+ .toast.warning .icon {
734
714
  --foreground: var(--warning-600);
735
715
  }
736
716
 
737
- .toast.title {
738
- --foreground: var(--foreground-100);
739
- }
740
-
741
- .toast.description {
742
- --foreground: var(--foreground-300);
743
- }
744
-
745
- .toast.close {
717
+ .toast .close {
746
718
  --foreground: currentColor;
747
719
  --background-hover: transparent;
748
720
  --focus-visible: var(--accent-400);
749
721
  }
750
722
 
751
- .toast.danger.close {
723
+
724
+
725
+ .toast.danger .close {
752
726
  --foreground: color-mix(in srgb, var(--danger-600) 60%, var(--foreground-50));
753
727
  --background-hover: color-mix(in srgb, var(--danger-500) 20%, var(--background-900));
754
728
  --focus-visible: var(--danger-400);
755
729
  }
756
730
 
757
- .toast.success.close {
731
+ .toast.success .close {
758
732
  --foreground: color-mix(in srgb, var(--success-600) 60%, var(--foreground-50));
759
733
  --background-hover: color-mix(in srgb, var(--success-500) 20%, var(--background-900));
760
734
  --focus-visible: var(--success-400);
761
735
  }
762
736
 
763
- .toast.info.close {
737
+ .toast.info .close {
764
738
  --foreground: color-mix(in srgb, var(--info-600) 60%, var(--foreground-50));
765
739
  --background-hover: color-mix(in srgb, var(--info-500) 20%, var(--background-900));
766
740
  --focus-visible: var(--info-400);
767
741
  }
768
742
 
769
- .toast.warning.close {
743
+ .toast.warning .close {
770
744
  --foreground: color-mix(in srgb, var(--warning-600) 60%, var(--foreground-50));
771
745
  --background-hover: color-mix(in srgb, var(--warning-500) 20%, var(--background-900));
772
746
  --focus-visible: var(--warning-400);
@@ -774,8 +748,8 @@
774
748
 
775
749
  /* Menu Styles */
776
750
 
777
- .menu.content,
778
- .menu.sub-content {
751
+ .menu .content,
752
+ .menu .sub-content {
779
753
  --background: var(--background-900);
780
754
  --background-border: var(--background-700);
781
755
  --content-open-animation: slide-in-from-top 0.15s var(--ease-snappy-pop);
@@ -783,27 +757,48 @@
783
757
  font-size: var(--text-xs)
784
758
  }
785
759
 
786
- .menu.trigger {
760
+ .menu .trigger {
787
761
  --background-pressed: var(--background-700);
788
762
  }
789
763
 
790
- .menu.item,
791
- .menu.checkbox-item,
792
- .menu.radio-item,
793
- .menu.sub-trigger {
764
+ .menu .item,
765
+ .menu .checkbox-item,
766
+ .menu .radio-item,
767
+ .menu .sub-trigger {
794
768
  --foreground: var(--foreground-300);
795
769
  --background-focused: color-mix(in srgb, var(--background-700) 50%, transparent);
796
770
  }
797
771
 
798
- .menu.item-indicator {
772
+ .menu .item-indicator {
799
773
  --indicator-foreground: var(--accent-300);
800
774
  }
801
775
 
802
- .menu.label,
803
- .menu.shortcut {
776
+ .menu .label,
777
+ .menu .shortcut {
804
778
  --foreground-muted: var(--foreground-400);
805
779
  }
806
780
 
781
+ /* Path Styles */
782
+
783
+ .path.link {
784
+ --foreground: var(--foreground-300);
785
+ --foreground-hover: var(--accent-300);
786
+ --foreground-selected: var(--foreground-400);
787
+ --foreground-disabled: var(--foreground-400);
788
+ --background-hover: color-mix(in srgb, var(--background-700) 50%, transparent);
789
+ --background-pressed: color-mix(in srgb, var(--background-700) 70%, transparent);
790
+ --focus-visible: var(--accent-500);
791
+ --disabled-opacity: 0.6;
792
+ }
793
+
794
+ .path.separator {
795
+ --separator-foreground: var(--background-700);
796
+ }
797
+
798
+ .path.item {
799
+ --separator-foreground: var(--background-700);
800
+ }
801
+
807
802
  /* Tabs Styles */
808
803
 
809
804
  .tabs.indicator {
@@ -815,7 +810,7 @@
815
810
  }
816
811
 
817
812
  .tabs.list[data-variant="underline"][data-orientation="vertical"] {
818
- --border-color: var(--background-700);
813
+ --border: var(--background-700);
819
814
  }
820
815
 
821
816
  .tabs.trigger {
@@ -856,21 +851,21 @@
856
851
  --scrollbar-thumb-hover-background: var(--foreground-400);
857
852
  }
858
853
 
859
- .modal.title {
854
+ .modal .title {
860
855
  --title-foreground: var(--foreground-100);
861
856
  }
862
857
 
863
- .modal.close {
858
+ .modal .close {
864
859
  --close-foreground: var(--foreground-400);
865
860
  --close-hover-foreground: var(--foreground-200);
866
861
  --focus-visible: var(--accent-500);
867
862
  }
868
863
 
869
- .modal.footer {
864
+ .modal .footer {
870
865
  --footer-background: var(--background-900);
871
866
  }
872
867
 
873
- .modal.backdrop {
868
+ .modal .backdrop {
874
869
  --backdrop-background: rgb(0 0 0 / 50%);
875
870
  }
876
871
 
@@ -879,13 +874,168 @@
879
874
  }
880
875
 
881
876
  /* Scroll Component */
882
- .scroll.track {
877
+ .scroll .track {
883
878
  --track-background: transparent;
884
879
  }
885
880
 
886
- .scroll.thumb {
881
+ .scroll .thumb {
887
882
  --thumb-background: var(--background-700);
888
883
  --thumb-background-hover: var(--background-600);
889
884
  --thumb-background-pressed: color-mix(in srgb, var(--background-500) 40%, var(--background-900));
890
885
  }
891
886
  }
887
+
888
+ @layer utilities {
889
+ .primary {
890
+ --background: var(--foreground-100);
891
+ --foreground: var(--background-900);
892
+ --background-border: var(--foreground-200);
893
+ --background-hover: color-mix(in srgb, var(--foreground-100) 90%, var(--background-600));
894
+ --background-hover-border: color-mix(in srgb, var(--foreground-100) 90%, var(--background-600));
895
+ --background-pressed: color-mix(in srgb, var(--foreground-100) 85%, var(--background-600));
896
+ --background-pressed-border: color-mix(in srgb, var(--foreground-100) 85%, var(--background-600));
897
+ }
898
+
899
+ .secondary {
900
+ --background: var(--background-900);
901
+ --foreground: var(--foreground-200);
902
+ --background-border: var(--background-700);
903
+ --background-hover: color-mix(in srgb, var(--background-700) 50%, var(--background-950));
904
+ --background-hover-border: var(--background-700);
905
+ --background-pressed: color-mix(in srgb, var(--background-700) 60%, var(--background-950));
906
+ --background-pressed-border: var(--background-700);
907
+ }
908
+
909
+ .outline {
910
+ --background: transparent;
911
+ --foreground: var(--foreground-300);
912
+ --background-border: var(--background-700);
913
+ --background-hover: color-mix(in srgb, var(--background-950) 90%, var(--background-500));
914
+ --background-hover-border: var(--background-600);
915
+ --background-pressed: color-mix(in srgb, var(--background-900) 90%, var(--background-500));
916
+ --background-pressed-border: var(--background-600);
917
+ outline: unset !important /* override tailwindcss */
918
+ }
919
+
920
+ .danger {
921
+ --background: color-mix(in srgb, var(--danger-500) 15%, transparent);
922
+ --foreground: var(--danger-600);
923
+ --background-border: transparent;
924
+ --focus-visible: var(--danger-400);
925
+ --background-hover: color-mix(in srgb, var(--danger-500) 25%, transparent);
926
+ --background-hover-border: transparent;
927
+ --background-pressed: color-mix(in srgb, var(--danger-500) 30%, transparent);
928
+ --background-pressed-border: transparent;
929
+ }
930
+
931
+ .ghost {
932
+ --background: transparent;
933
+ --foreground: var(--foreground-300);
934
+ --background-border: transparent;
935
+ --background-hover: var(--background-800);
936
+ --background-hover-border: transparent;
937
+ }
938
+
939
+ .default {
940
+ --background: color-mix(in srgb, var(--background-600) 10%, var(--background-900));
941
+ --foreground: var(--foreground-200);
942
+ --background-border: var(--background-700);
943
+ --background-hover: color-mix(in srgb, var(--background-500) 20%, var(--background-900));
944
+ --background-hover-border: var(--background-600);
945
+ --background-pressed: color-mix(in srgb, var(--background-500) 30%, var(--background-900));
946
+ --background-pressed-border: var(--background-600);
947
+ --focus-visible: var(--accent-400);
948
+ }
949
+
950
+ .success {
951
+ --background: color-mix(in srgb, var(--success-600) 10%, var(--background-900));
952
+ --foreground: var(--success-600);
953
+ --background-border: color-mix(in srgb, var(--success-600) 20%, var(--background-900));
954
+ --background-hover: color-mix(in srgb, var(--success-600) 15%, var(--background-900));
955
+ --background-hover-border: color-mix(in srgb, var(--success-600) 30%, var(--background-900));
956
+ --background-pressed: color-mix(in srgb, var(--success-600) 20%, var(--background-900));
957
+ --background-pressed-border: color-mix(in srgb, var(--success-600) 30%, var(--background-900));
958
+ --focus-visible: var(--success-400);
959
+ }
960
+
961
+ .warning {
962
+ --background: color-mix(in srgb, var(--warning-600) 10%, var(--background-900));
963
+ --foreground: var(--warning-600);
964
+ --background-border: color-mix(in srgb, var(--warning-600) 20%, var(--background-900));
965
+ --background-hover: color-mix(in srgb, var(--warning-600) 15%, var(--background-900));
966
+ --background-hover-border: color-mix(in srgb, var(--warning-600) 30%, var(--background-900));
967
+ --background-pressed: color-mix(in srgb, var(--warning-600) 20%, var(--background-900));
968
+ --background-pressed-border: color-mix(in srgb, var(--warning-600) 30%, var(--background-900));
969
+ --focus-visible: var(--warning-400);
970
+ }
971
+
972
+ .info {
973
+ --background: color-mix(in srgb, var(--info-600) 10%, var(--background-900));
974
+ --foreground: var(--info-600);
975
+ --background-border: color-mix(in srgb, var(--info-600) 20%, var(--background-900));
976
+ --background-hover: color-mix(in srgb, var(--info-600) 15%, var(--background-900));
977
+ --background-hover-border: color-mix(in srgb, var(--info-600) 30%, var(--background-900));
978
+ --background-pressed: color-mix(in srgb, var(--info-600) 20%, var(--background-900));
979
+ --background-pressed-border: color-mix(in srgb, var(--info-600) 30%, var(--background-900));
980
+ --focus-visible: var(--info-400);
981
+ }
982
+
983
+ .banner.note {
984
+ --background: var(--background-900);
985
+ --foreground: var(--foreground-200);
986
+ --border: var(--background-600);
987
+ --icon-color: currentColor;
988
+ }
989
+
990
+ .banner.info {
991
+ --background: color-mix(in srgb, var(--info-600) 10%, var(--background-900));
992
+ --foreground: var(--foreground-200);
993
+ --border: color-mix(in srgb, var(--info-600) 20%, var(--background-900));
994
+ --icon-color: var(--info-600);
995
+ }
996
+
997
+ .banner.success {
998
+ --background: color-mix(in srgb, var(--success-600) 10%, var(--background-900));
999
+ --foreground: var(--foreground-200);
1000
+ --border: color-mix(in srgb, var(--success-600) 20%, var(--background-900));
1001
+ --icon-color: var(--success-600);
1002
+ }
1003
+
1004
+ .banner.warning {
1005
+ --background: color-mix(in srgb, var(--warning-600) 10%, var(--background-900));
1006
+ --foreground: var(--foreground-200);
1007
+ --border: color-mix(in srgb, var(--warning-600) 20%, var(--background-900));
1008
+ --icon-color: var(--warning-600);
1009
+ }
1010
+
1011
+ .banner.danger {
1012
+ --background: color-mix(in srgb, var(--danger-600) 10%, var(--background-900));
1013
+ --foreground: var(--foreground-200);
1014
+ --border: color-mix(in srgb, var(--danger-600) 20%, var(--background-900));
1015
+ --icon-color: var(--danger-600);
1016
+ }
1017
+
1018
+ .toast.danger {
1019
+ --background: color-mix(in srgb, var(--danger-600) 10%, var(--background-900));
1020
+ --foreground: var(--foreground-200);
1021
+ --background-border: color-mix(in srgb, var(--danger-600) 20%, var(--background-900));
1022
+ }
1023
+
1024
+ .toast.success {
1025
+ --background: color-mix(in srgb, var(--success-600) 10%, var(--background-900));
1026
+ --foreground: var(--foreground-200);
1027
+ --background-border: color-mix(in srgb, var(--success-600) 20%, var(--background-900));
1028
+ }
1029
+
1030
+ .toast.info {
1031
+ --background: color-mix(in srgb, var(--info-600) 10%, var(--background-900));
1032
+ --foreground: var(--foreground-200);
1033
+ --background-border: color-mix(in srgb, var(--info-600) 20%, var(--background-900));
1034
+ }
1035
+
1036
+ .toast.warning {
1037
+ --background: color-mix(in srgb, var(--warning-600) 10%, var(--background-900));
1038
+ --foreground: var(--foreground-200);
1039
+ --background-border: color-mix(in srgb, var(--warning-600) 20%, var(--background-900));
1040
+ }
1041
+ }