@f0rbit/ui 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1054 @@
1
+ @layer components {
2
+ .btn {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ gap: var(--space-sm);
7
+ padding: var(--space-sm) var(--space-md);
8
+ font-size: var(--text-sm);
9
+ font-weight: 500;
10
+ line-height: var(--text-sm-lh);
11
+ border-radius: var(--radius);
12
+ border: 1px solid var(--border);
13
+ cursor: pointer;
14
+ transition: background var(--transition), border-color var(--transition), color var(--transition), filter var(--transition);
15
+ white-space: nowrap;
16
+ padding-bottom: calc(var(--space-sm) - 2px);
17
+ background: transparent;
18
+ color: var(--accent);
19
+ }
20
+
21
+ .btn:hover:not(:disabled) {
22
+ border-color: var(--fg-faint);
23
+ }
24
+
25
+ .btn:disabled {
26
+ opacity: 0.5;
27
+ cursor: not-allowed;
28
+ }
29
+
30
+ .btn-secondary {
31
+ background: var(--bg-alt);
32
+ color: var(--fg-muted);
33
+ border-color: var(--border);
34
+ }
35
+
36
+ .btn-secondary:hover:not(:disabled) {
37
+ border-color: var(--fg-faint);
38
+ }
39
+
40
+ .btn-ghost {
41
+ background: transparent;
42
+ color: var(--fg-muted);
43
+ border-color: transparent;
44
+ }
45
+
46
+ .btn-ghost:hover:not(:disabled) {
47
+ border-color: var(--border);
48
+ }
49
+
50
+ .btn-danger {
51
+ background: var(--error);
52
+ color: var(--error-fg);
53
+ }
54
+
55
+ .btn-icon {
56
+ padding: var(--space-sm);
57
+ aspect-ratio: 1;
58
+ }
59
+
60
+ .btn-sm {
61
+ padding: var(--space-xs) var(--space-sm);
62
+ font-size: var(--text-xs);
63
+ }
64
+
65
+ .btn-lg {
66
+ padding: var(--space-sm) var(--space-lg);
67
+ font-size: var(--text-base);
68
+ line-height: var(--text-base-lh);
69
+ }
70
+
71
+ .badge {
72
+ display: inline-flex;
73
+ align-items: center;
74
+ gap: var(--space-xs);
75
+ padding: 2px var(--space-sm);
76
+ font-size: var(--text-xs);
77
+ font-weight: 500;
78
+ border-radius: 9999px;
79
+ background: var(--bg-alt);
80
+ color: var(--fg-muted);
81
+ border: 1px solid var(--border);
82
+ }
83
+
84
+ .badge-success {
85
+ background: var(--success);
86
+ color: var(--success-fg);
87
+ border-color: transparent;
88
+ }
89
+
90
+ .badge-error {
91
+ background: var(--error);
92
+ color: var(--error-fg);
93
+ border-color: transparent;
94
+ }
95
+
96
+ .badge-warning {
97
+ background: var(--warning);
98
+ color: var(--warning-fg);
99
+ border-color: transparent;
100
+ }
101
+
102
+ .badge-info {
103
+ background: var(--info);
104
+ color: var(--info-fg);
105
+ border-color: transparent;
106
+ }
107
+
108
+ .badge-accent {
109
+ background: var(--accent);
110
+ color: var(--accent-fg);
111
+ border-color: transparent;
112
+ }
113
+
114
+ .card {
115
+ background: var(--bg);
116
+ border: 1px solid var(--border);
117
+ border-radius: var(--radius-lg);
118
+ padding: var(--space-md);
119
+ box-shadow: var(--shadow);
120
+ }
121
+
122
+ .card-flat {
123
+ box-shadow: none;
124
+ }
125
+
126
+ .card-icon {
127
+ color: var(--fg-muted);
128
+ line-height: 0;
129
+ }
130
+
131
+ .card-interactive {
132
+ cursor: pointer;
133
+ transition: border-color var(--transition), box-shadow var(--transition);
134
+ }
135
+
136
+ .card-interactive:hover {
137
+ border-color: var(--fg-faint);
138
+ box-shadow: var(--shadow-lg);
139
+ }
140
+
141
+ .card-header {
142
+ display: flex;
143
+ align-items: center;
144
+ justify-content: space-between;
145
+ margin-bottom: var(--space-sm);
146
+ }
147
+
148
+ .card-title {
149
+ font-size: var(--text-base);
150
+ line-height: var(--text-base-lh);
151
+ font-weight: 600;
152
+ color: var(--fg);
153
+ margin: 0;
154
+ }
155
+
156
+ .card-description {
157
+ font-size: var(--text-sm);
158
+ line-height: var(--text-sm-lh);
159
+ color: var(--fg-subtle);
160
+ margin: 0;
161
+ }
162
+
163
+ .card-content {
164
+ /* Content wrapper - card already provides padding */
165
+ }
166
+
167
+ .card-footer {
168
+ display: flex;
169
+ justify-content: flex-end;
170
+ gap: var(--space-sm);
171
+ margin-top: var(--space-md);
172
+ padding-top: var(--space-md);
173
+ border-top: 1px solid var(--border);
174
+ }
175
+
176
+ .input,
177
+ .textarea,
178
+ .select {
179
+ display: block;
180
+ width: 100%;
181
+ padding: var(--space-sm);
182
+ font-size: var(--text-sm);
183
+ color: var(--fg);
184
+ background: var(--bg-alt);
185
+ border: 1px solid var(--border);
186
+ border-radius: var(--radius);
187
+ transition: border-color var(--transition);
188
+ }
189
+
190
+ .input::placeholder,
191
+ .textarea::placeholder {
192
+ color: var(--fg-faint);
193
+ }
194
+
195
+ .input:focus,
196
+ .textarea:focus,
197
+ .select:focus {
198
+ outline: none;
199
+ border-color: var(--accent);
200
+ }
201
+
202
+ .input:disabled,
203
+ .textarea:disabled,
204
+ .select:disabled {
205
+ opacity: 0.5;
206
+ cursor: not-allowed;
207
+ }
208
+
209
+ .input-error {
210
+ border-color: var(--error-fg);
211
+ }
212
+
213
+ .textarea {
214
+ min-height: 80px;
215
+ resize: vertical;
216
+ }
217
+
218
+ .select {
219
+ appearance: none;
220
+ padding-right: var(--space-lg);
221
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
222
+ background-repeat: no-repeat;
223
+ background-position: right var(--space-sm) center;
224
+ }
225
+
226
+ .label {
227
+ display: block;
228
+ font-size: var(--text-sm);
229
+ font-weight: 500;
230
+ color: var(--fg-muted);
231
+ margin-bottom: var(--space-xs);
232
+ }
233
+
234
+ .form-error {
235
+ font-size: var(--text-sm);
236
+ color: var(--error-fg);
237
+ }
238
+
239
+ .overlay {
240
+ position: fixed;
241
+ inset: 0;
242
+ background: rgb(0 0 0 / 0.5);
243
+ display: flex;
244
+ align-items: center;
245
+ justify-content: center;
246
+ padding: var(--space-md);
247
+ z-index: 100;
248
+ }
249
+
250
+ .modal {
251
+ position: relative;
252
+ margin: 0;
253
+ background: var(--bg);
254
+ border: 1px solid var(--border);
255
+ border-radius: var(--radius-lg);
256
+ box-shadow: var(--shadow-lg);
257
+ width: 100%;
258
+ max-width: 480px;
259
+ max-height: calc(100vh - var(--space-xl));
260
+ overflow: hidden;
261
+ display: flex;
262
+ flex-direction: column;
263
+ }
264
+
265
+ .modal-header {
266
+ display: flex;
267
+ align-items: center;
268
+ justify-content: space-between;
269
+ padding: var(--space-md);
270
+ border-bottom: 1px solid var(--border);
271
+ }
272
+
273
+ .modal-title {
274
+ font-size: var(--text-lg);
275
+ line-height: var(--text-lg-lh);
276
+ font-weight: 600;
277
+ color: var(--fg);
278
+ margin: 0;
279
+ }
280
+
281
+ .modal-close {
282
+ padding: var(--space-xs);
283
+ color: var(--fg-faint);
284
+ background: transparent;
285
+ border: 1px solid transparent;
286
+ border-radius: var(--radius);
287
+ cursor: pointer;
288
+ transition: border-color var(--transition), color var(--transition);
289
+ }
290
+
291
+ .modal-close:hover {
292
+ color: var(--fg);
293
+ border-color: var(--border);
294
+ }
295
+
296
+ .modal-body {
297
+ padding: var(--space-md);
298
+ overflow-y: auto;
299
+ }
300
+
301
+ .modal-footer {
302
+ display: flex;
303
+ justify-content: flex-end;
304
+ gap: var(--space-sm);
305
+ padding: var(--space-md);
306
+ border-top: 1px solid var(--border);
307
+ }
308
+
309
+ .stat {
310
+ display: flex;
311
+ flex-direction: column;
312
+ align-items: center;
313
+ text-align: center;
314
+ padding: var(--space-md);
315
+ border: 1px solid var(--border);
316
+ border-radius: var(--radius);
317
+ }
318
+
319
+ .stat-value {
320
+ font-size: var(--text-xl);
321
+ line-height: var(--text-xl-lh);
322
+ font-weight: 600;
323
+ color: var(--fg);
324
+ }
325
+
326
+ .stat-label {
327
+ font-size: var(--text-xs);
328
+ color: var(--fg-faint);
329
+ }
330
+
331
+ .status {
332
+ display: inline-flex;
333
+ align-items: center;
334
+ gap: var(--space-xs);
335
+ font-size: var(--text-xs);
336
+ padding: 2px var(--space-sm);
337
+ border-radius: 9999px;
338
+ background: var(--bg-alt);
339
+ border: 1px solid var(--border);
340
+ }
341
+
342
+ .status-dot {
343
+ width: 6px;
344
+ height: 6px;
345
+ border-radius: 50%;
346
+ background: currentColor;
347
+ }
348
+
349
+ .status-active {
350
+ color: var(--success-fg);
351
+ }
352
+
353
+ .status-inactive {
354
+ color: var(--fg-faint);
355
+ }
356
+
357
+ .status-error {
358
+ color: var(--error-fg);
359
+ }
360
+
361
+ .status-pending {
362
+ color: var(--warning-fg);
363
+ }
364
+
365
+ .empty {
366
+ display: flex;
367
+ flex-direction: column;
368
+ align-items: center;
369
+ text-align: center;
370
+ padding: var(--space-xl) var(--space-md);
371
+ color: var(--fg-faint);
372
+ }
373
+
374
+ .empty-icon {
375
+ margin-bottom: var(--space-md);
376
+ opacity: 0.5;
377
+ }
378
+
379
+ .empty-title {
380
+ font-size: var(--text-lg);
381
+ line-height: var(--text-lg-lh);
382
+ font-weight: 500;
383
+ color: var(--fg-muted);
384
+ margin-bottom: var(--space-sm);
385
+ }
386
+
387
+ .empty-description {
388
+ font-size: var(--text-sm);
389
+ line-height: var(--text-sm-lh);
390
+ max-width: 400px;
391
+ margin-bottom: var(--space-md);
392
+ }
393
+
394
+ .spinner {
395
+ width: 16px;
396
+ height: 16px;
397
+ border: 2px solid var(--border);
398
+ border-top-color: var(--accent);
399
+ border-radius: 50%;
400
+ animation: spin 0.8s linear infinite;
401
+ }
402
+
403
+ .spinner-sm {
404
+ width: 12px;
405
+ height: 12px;
406
+ border-width: 1.5px;
407
+ }
408
+
409
+ .spinner-lg {
410
+ width: 24px;
411
+ height: 24px;
412
+ border-width: 3px;
413
+ }
414
+
415
+ .chevron {
416
+ transition: transform var(--transition);
417
+ color: var(--fg-faint);
418
+ }
419
+
420
+ .chevron.active {
421
+ transform: rotate(90deg);
422
+ }
423
+
424
+ .chevron-down {
425
+ transform: rotate(90deg);
426
+ }
427
+
428
+ .chevron-down.active {
429
+ transform: rotate(180deg);
430
+ }
431
+
432
+ .dropdown-menu {
433
+ position: absolute;
434
+ top: calc(100% + var(--space-xs));
435
+ right: 0;
436
+ min-width: 100%;
437
+ background: var(--bg);
438
+ border: 1px solid var(--border);
439
+ border-radius: var(--radius-lg);
440
+ box-shadow: var(--shadow-lg);
441
+ padding: var(--space-xs) 0;
442
+ z-index: 100;
443
+ }
444
+
445
+ .dropdown-item {
446
+ display: flex;
447
+ align-items: center;
448
+ gap: var(--space-sm);
449
+ width: 100%;
450
+ padding: var(--space-sm);
451
+ padding-left: calc(var(--space-sm) + 2px);
452
+ font-size: var(--text-sm);
453
+ color: var(--fg-muted);
454
+ background: transparent;
455
+ border: none;
456
+ border-left: 2px solid transparent;
457
+ cursor: pointer;
458
+ text-align: left;
459
+ transition: border-color var(--transition), color var(--transition);
460
+ }
461
+
462
+ .dropdown-item:hover {
463
+ border-left-color: var(--accent);
464
+ color: var(--fg);
465
+ }
466
+
467
+ .dropdown {
468
+ position: relative;
469
+ display: inline-block;
470
+ }
471
+
472
+ .dropdown-trigger {
473
+ display: inline-flex;
474
+ }
475
+
476
+ .dropdown-item.active {
477
+ color: var(--fg);
478
+ font-weight: 500;
479
+ }
480
+
481
+ .dropdown-divider {
482
+ height: 1px;
483
+ background: var(--border);
484
+ margin: var(--space-xs) 0;
485
+ }
486
+
487
+ .clamp {
488
+ display: flex;
489
+ flex-direction: column;
490
+ gap: var(--space-xs);
491
+ }
492
+
493
+ .clamp-content {
494
+ line-height: 1.5;
495
+ }
496
+
497
+ .clamp-clamped {
498
+ display: -webkit-box;
499
+ -webkit-line-clamp: var(--clamp-lines, 3);
500
+ -webkit-box-orient: vertical;
501
+ overflow: hidden;
502
+ }
503
+
504
+ .clamp-toggle {
505
+ background: none;
506
+ border: none;
507
+ padding: 0;
508
+ font-size: var(--text-sm);
509
+ color: var(--accent);
510
+ cursor: pointer;
511
+ width: fit-content;
512
+ transition: filter var(--transition);
513
+ }
514
+
515
+ .clamp-toggle:hover {
516
+ filter: var(--hover-filter);
517
+ }
518
+
519
+ .collapsible {
520
+ display: flex;
521
+ flex-direction: column;
522
+ }
523
+
524
+ .collapsible-trigger {
525
+ display: flex;
526
+ align-items: center;
527
+ justify-content: space-between;
528
+ gap: var(--space-sm);
529
+ width: 100%;
530
+ padding: var(--space-sm) 0;
531
+ background: none;
532
+ border: none;
533
+ cursor: pointer;
534
+ font-size: var(--text-sm);
535
+ font-weight: 500;
536
+ color: var(--fg-muted);
537
+ text-align: left;
538
+ transition: color var(--transition);
539
+ }
540
+
541
+ .collapsible-trigger:hover {
542
+ color: var(--fg);
543
+ }
544
+
545
+ .collapsible-chevron {
546
+ flex-shrink: 0;
547
+ color: var(--fg-faint);
548
+ transition: transform var(--transition);
549
+ }
550
+
551
+ .collapsible-chevron.active {
552
+ transform: rotate(90deg);
553
+ }
554
+
555
+ .collapsible-content {
556
+ padding: var(--space-sm) 0;
557
+ }
558
+
559
+ /* Shared vertical connector pattern - used by Stepper and Timeline */
560
+ .vertical-connector {
561
+ position: absolute;
562
+ left: 16px;
563
+ top: 32px;
564
+ bottom: 0;
565
+ width: 1px;
566
+ background: var(--border);
567
+ }
568
+
569
+ .vertical-connector-item:last-child .vertical-connector {
570
+ display: none;
571
+ }
572
+
573
+ .vertical-indicator {
574
+ display: flex;
575
+ align-items: center;
576
+ justify-content: center;
577
+ width: 32px;
578
+ height: 32px;
579
+ flex-shrink: 0;
580
+ position: relative;
581
+ z-index: 1;
582
+ }
583
+
584
+ .vertical-content {
585
+ display: flex;
586
+ flex-direction: column;
587
+ gap: 2px;
588
+ padding-bottom: var(--space-md);
589
+ min-width: 0;
590
+ flex: 1;
591
+ }
592
+
593
+ .vertical-connector-item:last-child .vertical-content {
594
+ padding-bottom: 0;
595
+ }
596
+
597
+ .stepper {
598
+ display: flex;
599
+ }
600
+
601
+ .stepper-horizontal {
602
+ flex-direction: row;
603
+ align-items: flex-start;
604
+ }
605
+
606
+ .stepper-vertical {
607
+ flex-direction: column;
608
+ }
609
+
610
+ .step {
611
+ display: flex;
612
+ align-items: flex-start;
613
+ gap: var(--space-sm);
614
+ flex: 1;
615
+ position: relative;
616
+ }
617
+
618
+ .stepper-vertical .step {
619
+ flex-direction: row;
620
+ }
621
+
622
+ .stepper-horizontal .step {
623
+ flex-direction: column;
624
+ align-items: center;
625
+ text-align: center;
626
+ }
627
+
628
+ .step-indicator {
629
+ display: flex;
630
+ align-items: center;
631
+ justify-content: center;
632
+ width: 32px;
633
+ height: 32px;
634
+ flex-shrink: 0;
635
+ border-radius: 50%;
636
+ font-size: var(--text-sm);
637
+ line-height: var(--text-sm-lh);
638
+ background: transparent;
639
+ color: var(--fg-faint);
640
+ border: 1px solid var(--border);
641
+ }
642
+
643
+ .step-current .step-indicator {
644
+ color: var(--accent);
645
+ border-color: var(--accent);
646
+ }
647
+
648
+ .step-completed .step-indicator {
649
+ color: var(--success-fg);
650
+ border-color: var(--success);
651
+ }
652
+
653
+ .step-connector {
654
+ position: absolute;
655
+ background: var(--border);
656
+ }
657
+
658
+ .stepper-horizontal .step-connector {
659
+ top: 16px;
660
+ left: calc(50% + 16px);
661
+ right: calc(-50% + 16px);
662
+ height: 1px;
663
+ }
664
+
665
+ .stepper-horizontal .step:last-child .step-connector {
666
+ display: none;
667
+ }
668
+
669
+ .step-completed .step-connector {
670
+ background: var(--success);
671
+ }
672
+
673
+ .step-content {
674
+ width: 100%;
675
+ padding-top: var(--space-sm);
676
+ }
677
+
678
+ .step-title {
679
+ font-size: var(--text-sm);
680
+ line-height: var(--text-sm-lh);
681
+ font-weight: 500;
682
+ color: var(--fg);
683
+ }
684
+
685
+ .step-current .step-title {
686
+ color: var(--fg);
687
+ }
688
+
689
+ .step-completed .step-title {
690
+ color: var(--fg-muted);
691
+ }
692
+
693
+ .step-upcoming .step-title {
694
+ color: var(--fg-faint);
695
+ }
696
+
697
+ .step-description {
698
+ font-size: var(--text-sm);
699
+ line-height: var(--text-sm-lh);
700
+ color: var(--fg-muted);
701
+ }
702
+
703
+ /* Tabs */
704
+ .tabs {
705
+ display: flex;
706
+ flex-direction: column;
707
+ }
708
+
709
+ .tab-list {
710
+ display: flex;
711
+ gap: 0;
712
+ border-bottom: 1px solid var(--border);
713
+ position: relative;
714
+ }
715
+
716
+ .tab {
717
+ padding: var(--space-sm) var(--space-md);
718
+ background: transparent;
719
+ border: 1px solid transparent;
720
+ border-bottom: none;
721
+ cursor: pointer;
722
+ font-size: var(--text-sm);
723
+ color: var(--fg-muted);
724
+ border-radius: var(--radius) var(--radius) 0 0;
725
+ margin-bottom: -1px !important;
726
+ transition: color var(--transition), border-color var(--transition);
727
+ }
728
+
729
+ .tab:hover {
730
+ color: var(--fg-subtle);
731
+ }
732
+
733
+ .tab.active {
734
+ background: var(--bg);
735
+ border-color: var(--border);
736
+ border-bottom-color: var(--bg);
737
+ color: var(--fg);
738
+ }
739
+
740
+ .tab-panel {
741
+ padding: var(--space-md) 0;
742
+ }
743
+
744
+ /* Checkbox */
745
+ .checkbox {
746
+ display: inline-flex;
747
+ align-items: flex-start;
748
+ gap: var(--space-sm);
749
+ cursor: pointer;
750
+ user-select: none;
751
+ }
752
+
753
+ .checkbox-disabled {
754
+ opacity: 0.5;
755
+ cursor: not-allowed;
756
+ }
757
+
758
+ .checkbox-input {
759
+ position: absolute;
760
+ opacity: 0;
761
+ width: 0;
762
+ height: 0;
763
+ pointer-events: none;
764
+ }
765
+
766
+ .checkbox-box {
767
+ display: flex;
768
+ align-items: center;
769
+ justify-content: center;
770
+ width: 1.125em;
771
+ height: 1.125em;
772
+ flex-shrink: 0;
773
+ border: 1px solid var(--border);
774
+ border-radius: var(--radius);
775
+ background: var(--bg-alt);
776
+ transition: border-color var(--transition), background var(--transition);
777
+ }
778
+
779
+ .checkbox:hover:not(.checkbox-disabled) .checkbox-box {
780
+ border-color: var(--fg-faint);
781
+ }
782
+
783
+ .checkbox-input:focus-visible + .checkbox-box {
784
+ outline: 2px solid var(--accent);
785
+ outline-offset: 2px;
786
+ }
787
+
788
+ .checkbox-input:checked + .checkbox-box {
789
+ background: var(--accent);
790
+ border-color: var(--accent);
791
+ }
792
+
793
+ .checkbox-check {
794
+ width: 0.75em;
795
+ height: 0.75em;
796
+ color: var(--accent-fg);
797
+ opacity: 0;
798
+ transform: scale(0.8);
799
+ transition: opacity var(--transition), transform var(--transition);
800
+ }
801
+
802
+ .checkbox-input:checked + .checkbox-box .checkbox-check {
803
+ opacity: 1;
804
+ transform: scale(1);
805
+ }
806
+
807
+ .checkbox-indeterminate {
808
+ width: 0.5em;
809
+ height: 0.125em;
810
+ background: var(--accent-fg);
811
+ border-radius: 1px;
812
+ opacity: 0;
813
+ position: absolute;
814
+ transition: opacity var(--transition);
815
+ }
816
+
817
+ .checkbox-input:indeterminate + .checkbox-box {
818
+ background: var(--accent);
819
+ border-color: var(--accent);
820
+ }
821
+
822
+ .checkbox-input:indeterminate + .checkbox-box .checkbox-check {
823
+ opacity: 0;
824
+ }
825
+
826
+ .checkbox-input:indeterminate + .checkbox-box .checkbox-indeterminate {
827
+ opacity: 1;
828
+ }
829
+
830
+ .checkbox-content {
831
+ display: flex;
832
+ flex-direction: column;
833
+ gap: 2px;
834
+ padding-top: 1px;
835
+ }
836
+
837
+ .checkbox-label {
838
+ font-size: var(--text-sm);
839
+ line-height: var(--text-sm-lh);
840
+ color: var(--fg);
841
+ }
842
+
843
+ .checkbox-description {
844
+ font-size: var(--text-xs);
845
+ line-height: var(--text-xs-lh);
846
+ color: var(--fg-muted);
847
+ }
848
+
849
+ /* Toggle */
850
+ .toggle {
851
+ display: inline-flex;
852
+ align-items: flex-start;
853
+ gap: var(--space-sm);
854
+ cursor: pointer;
855
+ }
856
+
857
+ .toggle-disabled {
858
+ opacity: 0.5;
859
+ cursor: not-allowed;
860
+ }
861
+
862
+ .toggle-input {
863
+ position: absolute;
864
+ opacity: 0;
865
+ width: 0;
866
+ height: 0;
867
+ pointer-events: none;
868
+ }
869
+
870
+ .toggle-track {
871
+ position: relative;
872
+ width: 2.5em;
873
+ height: 1.375em;
874
+ background: var(--border);
875
+ border-radius: 9999px;
876
+ flex-shrink: 0;
877
+ transition: background var(--transition);
878
+ }
879
+
880
+ .toggle-knob {
881
+ position: absolute;
882
+ top: 0.125em;
883
+ left: 0.125em;
884
+ width: 1.125em;
885
+ height: 1.125em;
886
+ background: var(--bg);
887
+ border-radius: 50%;
888
+ box-shadow: 0 1px 3px rgb(0 0 0 / 0.2);
889
+ transition: transform var(--transition);
890
+ }
891
+
892
+ .toggle-input:checked + .toggle-track {
893
+ background: var(--accent);
894
+ }
895
+
896
+ .toggle-input:checked + .toggle-track .toggle-knob {
897
+ transform: translateX(1.125em);
898
+ }
899
+
900
+ .toggle-input:focus-visible + .toggle-track {
901
+ outline: 2px solid var(--accent);
902
+ outline-offset: 2px;
903
+ }
904
+
905
+ .toggle-content {
906
+ display: flex;
907
+ flex-direction: column;
908
+ gap: 2px;
909
+ padding-top: 2px;
910
+ }
911
+
912
+ .toggle-label {
913
+ font-size: var(--text-sm);
914
+ line-height: var(--text-sm-lh);
915
+ font-weight: 500;
916
+ color: var(--fg);
917
+ }
918
+
919
+ .toggle-description {
920
+ font-size: var(--text-sm);
921
+ line-height: var(--text-sm-lh);
922
+ color: var(--fg-muted);
923
+ }
924
+
925
+ /* Toggle small variant */
926
+ .toggle-sm .toggle-track {
927
+ width: 2em;
928
+ height: 1.125em;
929
+ }
930
+
931
+ .toggle-sm .toggle-knob {
932
+ width: 0.875em;
933
+ height: 0.875em;
934
+ }
935
+
936
+ .toggle-sm .toggle-input:checked + .toggle-track .toggle-knob {
937
+ transform: translateX(0.875em);
938
+ }
939
+
940
+ /* FormField */
941
+ .form-field {
942
+ display: flex;
943
+ flex-direction: column;
944
+ gap: var(--space-xs);
945
+ }
946
+
947
+ .form-field-label {
948
+ display: block;
949
+ font-size: var(--text-sm);
950
+ font-weight: 500;
951
+ color: var(--fg-muted);
952
+ }
953
+
954
+ .form-field-required {
955
+ color: var(--error-fg);
956
+ margin-left: var(--space-xs);
957
+ }
958
+
959
+ .form-field-description {
960
+ font-size: var(--text-xs);
961
+ line-height: var(--text-xs-lh);
962
+ color: var(--fg-faint);
963
+ }
964
+
965
+ .form-field-error {
966
+ font-size: var(--text-sm);
967
+ color: var(--error-fg);
968
+ }
969
+
970
+ /* Timeline */
971
+ .timeline {
972
+ display: flex;
973
+ flex-direction: column;
974
+ }
975
+
976
+ .timeline-item {
977
+ display: flex;
978
+ gap: var(--space-sm);
979
+ position: relative;
980
+ }
981
+
982
+ .timeline-indicator {
983
+ color: var(--fg-muted);
984
+ }
985
+
986
+ .timeline-dot {
987
+ width: 10px;
988
+ height: 10px;
989
+ border-radius: 50%;
990
+ background: var(--border);
991
+ border: 2px solid var(--bg);
992
+ box-shadow: 0 0 0 2px var(--border);
993
+ }
994
+
995
+ .timeline-content {
996
+ padding-top: var(--space-xs);
997
+ }
998
+
999
+ .timeline-title {
1000
+ font-size: var(--text-sm);
1001
+ line-height: var(--text-sm-lh);
1002
+ font-weight: 500;
1003
+ color: var(--fg);
1004
+ }
1005
+
1006
+ .timeline-description {
1007
+ font-size: var(--text-sm);
1008
+ line-height: var(--text-sm-lh);
1009
+ color: var(--fg-muted);
1010
+ }
1011
+
1012
+ .timeline-timestamp {
1013
+ font-size: var(--text-xs);
1014
+ line-height: var(--text-xs-lh);
1015
+ color: var(--fg-faint);
1016
+ }
1017
+
1018
+ /* Timeline variants */
1019
+ .timeline-item-success .timeline-indicator {
1020
+ color: var(--success-fg);
1021
+ }
1022
+
1023
+ .timeline-item-success .timeline-dot {
1024
+ background: var(--success);
1025
+ box-shadow: 0 0 0 2px var(--success);
1026
+ }
1027
+
1028
+ .timeline-item-error .timeline-indicator {
1029
+ color: var(--error-fg);
1030
+ }
1031
+
1032
+ .timeline-item-error .timeline-dot {
1033
+ background: var(--error);
1034
+ box-shadow: 0 0 0 2px var(--error);
1035
+ }
1036
+
1037
+ .timeline-item-warning .timeline-indicator {
1038
+ color: var(--warning-fg);
1039
+ }
1040
+
1041
+ .timeline-item-warning .timeline-dot {
1042
+ background: var(--warning);
1043
+ box-shadow: 0 0 0 2px var(--warning);
1044
+ }
1045
+
1046
+ .timeline-item-info .timeline-indicator {
1047
+ color: var(--info-fg);
1048
+ }
1049
+
1050
+ .timeline-item-info .timeline-dot {
1051
+ background: var(--info);
1052
+ box-shadow: 0 0 0 2px var(--info);
1053
+ }
1054
+ }