@mirror-physics/fractal-ui 0.2.0-next.4 → 0.2.0-next.40

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.
package/dist/index.css CHANGED
@@ -32,6 +32,60 @@
32
32
  }
33
33
  }
34
34
 
35
+ /* src/components/Breadcrumbs/Breadcrumbs.css */
36
+ .fractal-breadcrumbs {
37
+ min-width: 0;
38
+ color: var(--fg-primary);
39
+ font-family: var(--font-sans);
40
+ font-size: 0.875rem;
41
+ line-height: 1.4;
42
+ }
43
+ .fractal-breadcrumbs__list {
44
+ display: flex;
45
+ min-width: 0;
46
+ align-items: center;
47
+ margin: 0;
48
+ padding: 0;
49
+ list-style: none;
50
+ }
51
+ .fractal-breadcrumbs__item {
52
+ display: flex;
53
+ min-width: 0;
54
+ align-items: center;
55
+ gap: var(--space-1);
56
+ }
57
+ .fractal-breadcrumbs__separator {
58
+ display: inline-grid;
59
+ flex: 0 0 auto;
60
+ place-items: center;
61
+ color: var(--fg-tertiary);
62
+ }
63
+ .fractal-breadcrumbs__link,
64
+ .fractal-breadcrumbs__current {
65
+ min-width: 0;
66
+ overflow: hidden;
67
+ text-overflow: ellipsis;
68
+ white-space: nowrap;
69
+ }
70
+ .fractal-breadcrumbs__link {
71
+ color: var(--fg-tertiary);
72
+ font: inherit;
73
+ text-decoration: none;
74
+ transition: color 120ms ease;
75
+ }
76
+ .fractal-breadcrumbs__link:hover {
77
+ color: var(--fg-primary);
78
+ }
79
+ .fractal-breadcrumbs__link:focus-visible {
80
+ border-radius: var(--radius-sm);
81
+ outline: 2px solid var(--border-focus);
82
+ outline-offset: 2px;
83
+ }
84
+ .fractal-breadcrumbs__current {
85
+ color: var(--fg-primary);
86
+ font-weight: 500;
87
+ }
88
+
35
89
  /* src/components/Card/Card.css */
36
90
  .fractal-card {
37
91
  border-radius: var(--radius-lg, 8px);
@@ -401,9 +455,11 @@
401
455
  height: 18px;
402
456
  font-size: 0.75rem;
403
457
  font-weight: 600;
404
- border-radius: 50%;
405
458
  margin-top: 1px;
406
459
  }
460
+ .fractal-alert-icon svg {
461
+ display: block;
462
+ }
407
463
  .fractal-alert-content {
408
464
  flex: 1;
409
465
  min-width: 0;
@@ -415,53 +471,49 @@
415
471
  line-height: 1.4;
416
472
  }
417
473
  .fractal-alert-description {
474
+ color: var(--fg-secondary);
418
475
  font-size: 0.875rem;
419
476
  line-height: 1.5;
420
477
  }
421
478
  .fractal-alert--default {
422
479
  background-color: var(--bg-canvas);
423
- border-color: var(--border-default);
480
+ border-color: var(--border-subtle);
424
481
  color: var(--fg-primary);
425
482
  }
426
483
  .fractal-alert--default .fractal-alert-icon {
427
- background: var(--bg-surface-2);
428
484
  color: var(--fg-secondary);
429
485
  }
430
486
  .fractal-alert--info {
431
487
  background-color: var(--accent-surface);
432
- border-color: var(--accent-default);
488
+ border-color: var(--accent-surface-stroke);
433
489
  color: var(--fg-primary);
434
490
  }
435
491
  .fractal-alert--info .fractal-alert-icon {
436
- background: var(--accent-default);
437
- color: var(--fg-inverse);
492
+ color: var(--accent-default);
438
493
  }
439
494
  .fractal-alert--success {
440
495
  background-color: var(--success-surface);
441
- border-color: var(--success-default);
496
+ border-color: var(--success-surface-stroke);
442
497
  color: var(--fg-primary);
443
498
  }
444
499
  .fractal-alert--success .fractal-alert-icon {
445
- background: var(--success-default);
446
- color: var(--fg-inverse);
500
+ color: var(--success-default);
447
501
  }
448
502
  .fractal-alert--warning {
449
503
  background-color: var(--warning-surface);
450
- border-color: var(--warning-default);
504
+ border-color: var(--warning-surface-stroke);
451
505
  color: var(--fg-primary);
452
506
  }
453
507
  .fractal-alert--warning .fractal-alert-icon {
454
- background: var(--warning-default);
455
- color: var(--fg-inverse);
508
+ color: var(--warning-default);
456
509
  }
457
510
  .fractal-alert--error {
458
511
  background-color: var(--error-surface);
459
- border-color: var(--error-default);
512
+ border-color: var(--error-surface-stroke);
460
513
  color: var(--fg-primary);
461
514
  }
462
515
  .fractal-alert--error .fractal-alert-icon {
463
- background: var(--error-default);
464
- color: var(--fg-inverse);
516
+ color: var(--error-default);
465
517
  }
466
518
 
467
519
  /* src/components/Toggle/Toggle.css */
@@ -506,6 +558,60 @@
506
558
  user-select: none;
507
559
  }
508
560
 
561
+ /* src/components/UILoader/UILoader.css */
562
+ .fractal-ui-loader {
563
+ display: inline-flex;
564
+ line-height: 0;
565
+ }
566
+ .fractal-ui-loader svg {
567
+ display: block;
568
+ overflow: visible;
569
+ }
570
+ .fractal-ui-loader__stop-start {
571
+ stop-color: var(--grey-200);
572
+ }
573
+ .fractal-ui-loader__stop-end {
574
+ stop-color: var(--grey-100);
575
+ }
576
+ .fractal-ui-loader--blue .fractal-ui-loader__stop-start {
577
+ stop-color: var(--blue-500);
578
+ }
579
+ .fractal-ui-loader--blue .fractal-ui-loader__stop-end {
580
+ stop-color: var(--blue-300);
581
+ }
582
+ .fractal-ui-loader--green .fractal-ui-loader__stop-start {
583
+ stop-color: var(--green-500);
584
+ }
585
+ .fractal-ui-loader--green .fractal-ui-loader__stop-end {
586
+ stop-color: var(--green-300);
587
+ }
588
+ .fractal-ui-loader__shine-axis {
589
+ transform-box: view-box;
590
+ transform-origin: 0 0;
591
+ }
592
+ .fractal-ui-loader__shine {
593
+ animation: fractal-ui-loader-shine 2500ms var(--ease-in-out) infinite;
594
+ transform-box: view-box;
595
+ transform-origin: 0 0;
596
+ }
597
+ @keyframes fractal-ui-loader-shine {
598
+ 0%, 12% {
599
+ transform: translateX(-120px);
600
+ }
601
+ 48% {
602
+ transform: translateX(120px);
603
+ }
604
+ 49%, 100% {
605
+ transform: translateX(-120px);
606
+ }
607
+ }
608
+ @media (prefers-reduced-motion: reduce) {
609
+ .fractal-ui-loader__shine {
610
+ animation: none;
611
+ transform: translateX(0);
612
+ }
613
+ }
614
+
509
615
  /* src/components/Modal/Modal.css */
510
616
  .fractal-modal-overlay {
511
617
  position: fixed;
@@ -576,10 +682,23 @@
576
682
  color: var(--fg-primary);
577
683
  background: var(--bg-surface-1);
578
684
  }
685
+ .fractal-modal-close:disabled {
686
+ cursor: not-allowed;
687
+ opacity: 0.4;
688
+ }
689
+ .fractal-modal-close:disabled:hover {
690
+ color: var(--fg-secondary);
691
+ background: none;
692
+ }
579
693
  .fractal-modal-body {
580
694
  font-size: 0.875rem;
581
695
  color: var(--fg-secondary);
582
696
  }
697
+ .fractal-modal-body--loading {
698
+ display: grid;
699
+ min-height: 168px;
700
+ place-items: center;
701
+ }
583
702
  .fractal-modal-body--lg {
584
703
  flex: 1;
585
704
  min-height: 0;
@@ -600,7 +719,7 @@
600
719
  .fractal-datatable-surface {
601
720
  overflow: hidden;
602
721
  border: 1px solid var(--border-subtle);
603
- border-radius: var(--radius-xl, 12px);
722
+ border-radius: var(--radius-md, 6px);
604
723
  background: var(--bg-canvas);
605
724
  }
606
725
  .fractal-datatable-header {
@@ -639,9 +758,6 @@
639
758
  border-bottom: 1px solid var(--border-subtle);
640
759
  vertical-align: middle;
641
760
  }
642
- .fractal-datatable-th + .fractal-datatable-th {
643
- border-left: 1px solid var(--border-subtle);
644
- }
645
761
  .fractal-datatable-row {
646
762
  background: var(--bg-canvas);
647
763
  transition: background 120ms ease;
@@ -656,8 +772,8 @@
656
772
  vertical-align: top;
657
773
  overflow-wrap: anywhere;
658
774
  }
659
- .fractal-datatable-td + .fractal-datatable-td {
660
- border-left: 1px solid var(--border-subtle);
775
+ .fractal-datatable-td .fractal-dropdown-trigger--icon-only.fractal-dropdown-trigger--tertiary:hover {
776
+ background: var(--bg-canvas);
661
777
  }
662
778
  .fractal-datatable-row + .fractal-datatable-row .fractal-datatable-td {
663
779
  border-top: 1px solid var(--border-subtle);
@@ -700,6 +816,16 @@
700
816
  padding: 4px 8px;
701
817
  font-size: 0.75rem;
702
818
  }
819
+ .fractal-dropdown-trigger--icon-only {
820
+ width: 32px;
821
+ height: 32px;
822
+ justify-content: center;
823
+ padding: 0;
824
+ }
825
+ .fractal-dropdown-trigger--icon-only.fractal-dropdown-trigger--sm {
826
+ width: 28px;
827
+ height: 28px;
828
+ }
703
829
  .fractal-dropdown-trigger--tertiary {
704
830
  border-color: transparent;
705
831
  background: transparent;
@@ -708,6 +834,17 @@
708
834
  .fractal-dropdown-trigger--tertiary:hover {
709
835
  background: var(--bg-surface-1);
710
836
  }
837
+ .fractal-dropdown-trigger:disabled,
838
+ .fractal-dropdown-trigger:disabled:hover {
839
+ color: var(--fg-disabled);
840
+ cursor: not-allowed;
841
+ background: var(--bg-surface-1);
842
+ }
843
+ .fractal-dropdown-trigger:disabled .fractal-dropdown-selected-text,
844
+ .fractal-dropdown-trigger:disabled .fractal-dropdown-chevron,
845
+ .fractal-dropdown-trigger:disabled .fractal-dropdown-icon {
846
+ color: var(--fg-disabled);
847
+ }
711
848
  .fractal-dropdown-trigger:focus-visible {
712
849
  outline: none;
713
850
  box-shadow: 0 0 0 2px var(--bg-canvas), 0 0 0 4px var(--border-focus);
@@ -731,12 +868,15 @@
731
868
  .fractal-dropdown-chevron {
732
869
  display: flex;
733
870
  flex-shrink: 0;
871
+ margin-left: auto;
734
872
  color: var(--fg-secondary);
735
873
  }
736
874
  .fractal-dropdown-panel {
737
875
  position: absolute;
738
876
  z-index: 999999;
877
+ min-width: 100%;
739
878
  overflow: hidden;
879
+ box-sizing: border-box;
740
880
  border-radius: var(--radius-md, 6px);
741
881
  border: 1px solid var(--border-subtle);
742
882
  background: var(--bg-canvas);
@@ -755,6 +895,7 @@
755
895
  .fractal-dropdown-option {
756
896
  display: flex;
757
897
  width: 100%;
898
+ box-sizing: border-box;
758
899
  align-items: center;
759
900
  gap: 8px;
760
901
  padding: 6px 8px;
@@ -778,7 +919,7 @@
778
919
  }
779
920
  .fractal-dropdown-option:hover,
780
921
  .fractal-dropdown-option:focus-visible {
781
- background: var(--hover-canvas, var(--bg-surface-2));
922
+ background: var(--hover-surface, var(--bg-surface-2));
782
923
  outline: none;
783
924
  }
784
925
  .fractal-dropdown-separator {
@@ -874,6 +1015,35 @@
874
1015
  color: var(--accent-default);
875
1016
  }
876
1017
 
1018
+ /* src/components/Checkbox/Checkbox.css */
1019
+ .fractal-checkbox {
1020
+ display: grid;
1021
+ width: 28px;
1022
+ height: 28px;
1023
+ place-items: center;
1024
+ padding: 0;
1025
+ border: 0;
1026
+ border-radius: var(--radius-sm);
1027
+ background: transparent;
1028
+ color: var(--fg-secondary);
1029
+ cursor: pointer;
1030
+ }
1031
+ .fractal-checkbox:hover:not(:disabled) {
1032
+ background: var(--hover-canvas);
1033
+ color: var(--fg-primary);
1034
+ }
1035
+ .fractal-checkbox--checked {
1036
+ color: var(--fg-primary);
1037
+ }
1038
+ .fractal-checkbox:focus-visible {
1039
+ outline: 2px solid var(--border-focus);
1040
+ outline-offset: 2px;
1041
+ }
1042
+ .fractal-checkbox:disabled {
1043
+ cursor: not-allowed;
1044
+ color: var(--fg-disabled);
1045
+ }
1046
+
877
1047
  /* src/components/SortableTable/SortableTable.css */
878
1048
  .fractal-sortable-table {
879
1049
  font-family: var(--font-sans);
@@ -882,9 +1052,14 @@
882
1052
  .fractal-sortable-table-surface {
883
1053
  overflow: hidden;
884
1054
  border: 1px solid var(--border-subtle);
885
- border-radius: var(--radius-xl, 12px);
1055
+ border-radius: var(--radius-md, 6px);
886
1056
  background: var(--bg-canvas);
887
1057
  }
1058
+ .fractal-sortable-table--embedded .fractal-sortable-table-surface {
1059
+ border: 0;
1060
+ border-top: 1px solid var(--border-subtle);
1061
+ border-radius: 0;
1062
+ }
888
1063
  .fractal-sortable-table-header {
889
1064
  display: flex;
890
1065
  align-items: center;
@@ -922,9 +1097,6 @@
922
1097
  vertical-align: middle;
923
1098
  white-space: nowrap;
924
1099
  }
925
- .fractal-sortable-table-th + .fractal-sortable-table-th {
926
- border-left: 1px solid var(--border-subtle);
927
- }
928
1100
  .fractal-sortable-table-th--sortable {
929
1101
  padding: 0;
930
1102
  }
@@ -977,6 +1149,56 @@
977
1149
  .fractal-sortable-table-row:hover {
978
1150
  background: var(--bg-surface-1);
979
1151
  }
1152
+ .fractal-sortable-table-row--interactive {
1153
+ cursor: pointer;
1154
+ }
1155
+ .fractal-sortable-table-td--row-action {
1156
+ position: relative;
1157
+ }
1158
+ .fractal-sortable-table-td .fractal-dropdown-trigger--icon-only.fractal-dropdown-trigger--tertiary:hover {
1159
+ background: var(--bg-canvas);
1160
+ }
1161
+ .fractal-sortable-table-row-action {
1162
+ position: absolute;
1163
+ z-index: 1;
1164
+ top: 0;
1165
+ right: -1px;
1166
+ bottom: 0;
1167
+ display: flex;
1168
+ width: min(280px, calc(200% + 32px));
1169
+ align-items: center;
1170
+ justify-content: flex-end;
1171
+ padding-right: var(--space-4);
1172
+ background:
1173
+ linear-gradient(
1174
+ 90deg,
1175
+ transparent 0%,
1176
+ color-mix(in srgb, var(--hover-surface) 72%, transparent) 52%,
1177
+ var(--hover-surface) 100%);
1178
+ opacity: 0;
1179
+ pointer-events: none;
1180
+ transition: opacity 150ms ease-out;
1181
+ }
1182
+ .fractal-sortable-table-row--interactive:hover .fractal-sortable-table-row-action,
1183
+ .fractal-sortable-table-row--interactive:focus-visible .fractal-sortable-table-row-action {
1184
+ opacity: 1;
1185
+ }
1186
+ .fractal-sortable-table-row-action__icon {
1187
+ display: grid;
1188
+ width: 32px;
1189
+ height: 32px;
1190
+ place-items: center;
1191
+ border: 1px solid var(--border-default);
1192
+ border-radius: var(--radius-full);
1193
+ background: var(--bg-canvas);
1194
+ color: var(--fg-primary);
1195
+ }
1196
+ .fractal-sortable-table-row--interactive:focus-visible {
1197
+ position: relative;
1198
+ z-index: 1;
1199
+ outline: 2px solid var(--border-focus);
1200
+ outline-offset: -2px;
1201
+ }
980
1202
  .fractal-sortable-table-row + .fractal-sortable-table-row .fractal-sortable-table-td {
981
1203
  border-top: 1px solid var(--border-subtle);
982
1204
  }
@@ -993,17 +1215,14 @@
993
1215
  vertical-align: top;
994
1216
  overflow-wrap: anywhere;
995
1217
  }
996
- .fractal-sortable-table-td + .fractal-sortable-table-td {
997
- border-left: 1px solid var(--border-subtle);
998
- }
999
- .fractal-sortable-table--sm .fractal-sortable-table-th,
1218
+ .fractal-sortable-table--sm .fractal-sortable-table-th:not(.fractal-sortable-table-th--sortable),
1000
1219
  .fractal-sortable-table--sm .fractal-sortable-table-sort-button {
1001
1220
  padding: 8px 12px;
1002
1221
  }
1003
1222
  .fractal-sortable-table--sm .fractal-sortable-table-td {
1004
1223
  padding: 10px 12px;
1005
1224
  }
1006
- .fractal-sortable-table--lg .fractal-sortable-table-th,
1225
+ .fractal-sortable-table--lg .fractal-sortable-table-th:not(.fractal-sortable-table-th--sortable),
1007
1226
  .fractal-sortable-table--lg .fractal-sortable-table-sort-button {
1008
1227
  padding: 18px 24px;
1009
1228
  }
@@ -1017,17 +1236,60 @@
1017
1236
  font-size: 0.875rem;
1018
1237
  }
1019
1238
  .fractal-tabs-list {
1239
+ position: relative;
1020
1240
  display: flex;
1021
1241
  gap: 24px;
1242
+ margin-bottom: var(--space-6);
1243
+ }
1244
+ .fractal-tabs--divider > .fractal-tabs-list {
1022
1245
  border-bottom: 1px solid var(--border-subtle);
1023
- margin-bottom: 16px;
1246
+ }
1247
+ .fractal-tabs--surface > .fractal-tabs-list {
1248
+ width: 100%;
1249
+ gap: 0;
1250
+ margin-bottom: 0;
1251
+ background: var(--bg-surface-1);
1252
+ }
1253
+ .fractal-tabs--surface > .fractal-tabs-list::before {
1254
+ position: absolute;
1255
+ z-index: 3;
1256
+ right: 0;
1257
+ bottom: 0;
1258
+ left: 0;
1259
+ height: 1px;
1260
+ background: var(--border-subtle);
1261
+ content: "";
1262
+ pointer-events: none;
1263
+ }
1264
+ .fractal-tabs-list::after {
1265
+ position: absolute;
1266
+ bottom: -1px;
1267
+ left: 0;
1268
+ width: var(--fractal-tabs-indicator-width, 0px);
1269
+ height: 2px;
1270
+ background: var(--accent-default);
1271
+ content: "";
1272
+ opacity: 0;
1273
+ transform: translateX(var(--fractal-tabs-indicator-offset, 0px));
1274
+ transition:
1275
+ transform 180ms var(--ease-standard, ease),
1276
+ width 180ms var(--ease-standard, ease),
1277
+ opacity 100ms ease;
1278
+ }
1279
+ .fractal-tabs-list[data-indicator-ready=true]::after {
1280
+ opacity: 1;
1281
+ }
1282
+ .fractal-tabs--surface > .fractal-tabs-list::after {
1283
+ display: none;
1024
1284
  }
1025
1285
  .fractal-tabs-trigger {
1026
1286
  position: relative;
1027
1287
  display: inline-flex;
1288
+ min-width: 88px;
1028
1289
  align-items: center;
1290
+ justify-content: center;
1029
1291
  gap: 6px;
1030
- padding: 10px 0;
1292
+ padding: 10px 1rem;
1031
1293
  background: none;
1032
1294
  border: 0;
1033
1295
  font: inherit;
@@ -1035,8 +1297,7 @@
1035
1297
  font-weight: 400;
1036
1298
  color: var(--fg-secondary);
1037
1299
  cursor: pointer;
1038
- transition: color 0.15s ease, box-shadow 0.15s ease;
1039
- box-shadow: inset 0 -1px 0 transparent;
1300
+ transition: color 0.15s ease;
1040
1301
  margin-bottom: -1px;
1041
1302
  }
1042
1303
  .fractal-tabs-trigger:hover:not(.fractal-tabs-trigger--active):not(.fractal-tabs-trigger--disabled) {
@@ -1050,7 +1311,21 @@
1050
1311
  .fractal-tabs-trigger--active {
1051
1312
  color: var(--accent-default);
1052
1313
  font-weight: 500;
1053
- box-shadow: inset 0 -1px 0 var(--accent-default);
1314
+ }
1315
+ .fractal-tabs:not(.fractal-tabs--divider):not(.fractal-tabs--surface) > .fractal-tabs-list > .fractal-tabs-trigger:not(.fractal-tabs-trigger--active) {
1316
+ box-shadow: inset 0 -1px 0 var(--border-subtle);
1317
+ }
1318
+ .fractal-tabs--surface > .fractal-tabs-list > .fractal-tabs-trigger {
1319
+ margin-bottom: 0;
1320
+ border-right: 1px solid var(--border-subtle);
1321
+ background: var(--bg-surface-1);
1322
+ }
1323
+ .fractal-tabs--surface > .fractal-tabs-list > .fractal-tabs-trigger:hover:not(.fractal-tabs-trigger--active):not(.fractal-tabs-trigger--disabled) {
1324
+ background: var(--hover-surface);
1325
+ }
1326
+ .fractal-tabs--surface > .fractal-tabs-list > .fractal-tabs-trigger--active {
1327
+ background: var(--bg-canvas);
1328
+ color: var(--fg-primary);
1054
1329
  }
1055
1330
  .fractal-tabs-trigger--disabled {
1056
1331
  color: var(--fg-disabled, var(--fg-secondary));
@@ -1064,6 +1339,94 @@
1064
1339
  .fractal-tabs-panel[hidden] {
1065
1340
  display: none;
1066
1341
  }
1342
+ @media (prefers-reduced-motion: reduce) {
1343
+ .fractal-tabs-list::after {
1344
+ transition: none;
1345
+ }
1346
+ }
1347
+
1348
+ /* src/components/ContentSwitcher/ContentSwitcher.css */
1349
+ .fractal-content-switcher {
1350
+ position: relative;
1351
+ display: inline-flex;
1352
+ gap: 2px;
1353
+ padding: 2px;
1354
+ border: 1px solid color-mix(in srgb, var(--border-subtle) 55%, transparent);
1355
+ border-radius: var(--radius-md);
1356
+ background: var(--bg-surface-subtle);
1357
+ font-family: var(--font-sans);
1358
+ }
1359
+ .fractal-content-switcher__indicator {
1360
+ position: absolute;
1361
+ top: 0;
1362
+ left: 0;
1363
+ width: var(--fractal-content-switcher-indicator-width, 0);
1364
+ height: var(--fractal-content-switcher-indicator-height, 0);
1365
+ border-radius: var(--radius-sm);
1366
+ background: var(--bg-canvas);
1367
+ box-shadow: var(--shadow-sm);
1368
+ opacity: 0;
1369
+ pointer-events: none;
1370
+ transform: translate3d(var(--fractal-content-switcher-indicator-x, 0), var(--fractal-content-switcher-indicator-y, 0), 0);
1371
+ }
1372
+ .fractal-content-switcher[data-indicator-ready=true] .fractal-content-switcher__indicator {
1373
+ opacity: 1;
1374
+ }
1375
+ .fractal-content-switcher[data-indicator-ready=true][data-indicator-animate=true] .fractal-content-switcher__indicator {
1376
+ transition:
1377
+ transform var(--duration-normal) var(--ease-in-out),
1378
+ width var(--duration-normal) var(--ease-in-out),
1379
+ height var(--duration-normal) var(--ease-in-out),
1380
+ opacity var(--duration-fast) var(--ease-out);
1381
+ }
1382
+ .fractal-content-switcher--full-width {
1383
+ display: flex;
1384
+ width: 100%;
1385
+ }
1386
+ .fractal-content-switcher__item {
1387
+ position: relative;
1388
+ z-index: 1;
1389
+ min-width: 128px;
1390
+ min-height: 40px;
1391
+ padding: 0 var(--space-4);
1392
+ border: 0;
1393
+ border-radius: var(--radius-sm);
1394
+ background: transparent;
1395
+ color: var(--fg-secondary);
1396
+ cursor: pointer;
1397
+ font: inherit;
1398
+ font-size: 0.875rem;
1399
+ line-height: 1.25;
1400
+ text-align: center;
1401
+ transition: background-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);
1402
+ }
1403
+ .fractal-content-switcher--full-width .fractal-content-switcher__item {
1404
+ flex: 1;
1405
+ }
1406
+ .fractal-content-switcher__item:hover:not(:disabled):not(.fractal-content-switcher__item--active) {
1407
+ background: var(--hover-surface);
1408
+ color: var(--fg-primary);
1409
+ }
1410
+ .fractal-content-switcher__item--active {
1411
+ background: transparent;
1412
+ color: var(--fg-primary);
1413
+ }
1414
+ .fractal-content-switcher__item:focus-visible {
1415
+ position: relative;
1416
+ z-index: 1;
1417
+ outline: 2px solid var(--border-focus);
1418
+ outline-offset: -2px;
1419
+ }
1420
+ .fractal-content-switcher__item:disabled {
1421
+ cursor: not-allowed;
1422
+ color: var(--fg-disabled);
1423
+ opacity: 0.5;
1424
+ }
1425
+ @media (prefers-reduced-motion: reduce) {
1426
+ .fractal-content-switcher[data-indicator-ready=true][data-indicator-animate=true] .fractal-content-switcher__indicator {
1427
+ transition: none;
1428
+ }
1429
+ }
1067
1430
 
1068
1431
  /* src/components/Disclosure/Disclosure.css */
1069
1432
  .fractal-disclosure {
@@ -1095,6 +1458,17 @@
1095
1458
  .fractal-disclosure-trigger:hover {
1096
1459
  background: var(--bg-surface-1);
1097
1460
  }
1461
+ .fractal-disclosure--disabled .fractal-disclosure-trigger {
1462
+ color: var(--fg-tertiary);
1463
+ cursor: not-allowed;
1464
+ }
1465
+ .fractal-disclosure--disabled .fractal-disclosure-trigger:hover {
1466
+ background: transparent;
1467
+ }
1468
+ .fractal-disclosure--disabled .fractal-disclosure-icon,
1469
+ .fractal-disclosure--disabled .fractal-disclosure-meta {
1470
+ color: var(--fg-tertiary);
1471
+ }
1098
1472
  .fractal-disclosure-trigger:focus-visible {
1099
1473
  outline: 2px solid var(--border-focus);
1100
1474
  outline-offset: -2px;
@@ -1137,25 +1511,380 @@
1137
1511
  padding: 4px 0 12px 24px;
1138
1512
  }
1139
1513
 
1140
- /* src/components/Sidebar/Sidebar.css */
1141
- .fractal-sidebar {
1142
- --fractal-sidebar-width: 232px;
1143
- box-sizing: border-box;
1144
- display: flex;
1145
- width: var(--fractal-sidebar-width);
1146
- min-width: var(--fractal-sidebar-width);
1147
- min-height: 100%;
1148
- flex-direction: column;
1149
- background: var(--bg-surface-1);
1150
- border-right: 1px solid var(--nav-border);
1151
- color: var(--fg-primary);
1152
- font-family: var(--font-sans);
1153
- }
1154
- .fractal-sidebar__header {
1514
+ /* src/components/LatticeLoader/LatticeLoader.css */
1515
+ .fractal-lattice-loader {
1155
1516
  display: flex;
1156
- min-height: 48px;
1157
1517
  align-items: center;
1158
- padding: 0 var(--space-4);
1518
+ gap: 6px;
1519
+ width: 100%;
1520
+ height: 12px;
1521
+ overflow: hidden;
1522
+ color: var(--fg-secondary);
1523
+ }
1524
+ .fractal-lattice-loader__cell {
1525
+ position: relative;
1526
+ width: 12px;
1527
+ flex: 0 0 12px;
1528
+ aspect-ratio: 1;
1529
+ background: currentColor;
1530
+ -webkit-mask: url("./lattice-FAYE5KWW.svg") center / contain no-repeat;
1531
+ mask: url("./lattice-FAYE5KWW.svg") center / contain no-repeat;
1532
+ opacity: 0.08;
1533
+ animation: fractal-lattice-wave 3.2s ease-in-out infinite;
1534
+ animation-delay: calc((var(--fractal-lattice-index) * 40ms) - 3.2s);
1535
+ }
1536
+ @keyframes fractal-lattice-wave {
1537
+ 0%, 58%, 100% {
1538
+ opacity: 0.08;
1539
+ }
1540
+ 18% {
1541
+ opacity: 0.28;
1542
+ }
1543
+ 30% {
1544
+ opacity: 1;
1545
+ }
1546
+ 42% {
1547
+ opacity: 0.28;
1548
+ }
1549
+ }
1550
+ @media (prefers-reduced-motion: reduce) {
1551
+ .fractal-lattice-loader__cell {
1552
+ opacity: 0.35;
1553
+ animation: none;
1554
+ }
1555
+ }
1556
+
1557
+ /* src/components/Ghost/Ghost.css */
1558
+ .fractal-ghost {
1559
+ --fractal-ghost-base: var(--bg-surface-1);
1560
+ --fractal-ghost-shine: color-mix(in srgb, var(--bg-canvas) 82%, transparent);
1561
+ display: block;
1562
+ min-width: 0;
1563
+ min-height: 1px;
1564
+ background:
1565
+ linear-gradient(
1566
+ 105deg,
1567
+ var(--fractal-ghost-base) 20%,
1568
+ var(--fractal-ghost-shine) 44%,
1569
+ var(--fractal-ghost-base) 68%);
1570
+ background-size: 220% 100%;
1571
+ border-radius: var(--radius-sm);
1572
+ animation: fractal-ghost-shine var(--duration-ambient) var(--ease-in-out) infinite;
1573
+ }
1574
+ .fractal-ghost-line {
1575
+ height: 0.875rem;
1576
+ }
1577
+ .fractal-ghost-line--sm {
1578
+ height: 0.6875rem;
1579
+ }
1580
+ .fractal-ghost-line--lg {
1581
+ height: 1.125rem;
1582
+ }
1583
+ .fractal-ghost-stack {
1584
+ display: grid;
1585
+ gap: var(--space-2);
1586
+ }
1587
+ .fractal-ghost-button {
1588
+ border-radius: var(--radius-full);
1589
+ }
1590
+ .fractal-ghost-button--xs {
1591
+ width: 72px;
1592
+ height: 28px;
1593
+ }
1594
+ .fractal-ghost-button--sm {
1595
+ width: 84px;
1596
+ height: 32px;
1597
+ }
1598
+ .fractal-ghost-button--md {
1599
+ width: 96px;
1600
+ height: 40px;
1601
+ }
1602
+ .fractal-ghost-button--lg {
1603
+ width: 108px;
1604
+ height: 44px;
1605
+ }
1606
+ .fractal-ghost-button--xl {
1607
+ width: 128px;
1608
+ height: 56px;
1609
+ }
1610
+ .fractal-ghost-button--icon-only {
1611
+ width: var(--fractal-ghost-icon-size, 40px);
1612
+ }
1613
+ .fractal-ghost-button--xs.fractal-ghost-button--icon-only {
1614
+ --fractal-ghost-icon-size: 28px;
1615
+ }
1616
+ .fractal-ghost-button--sm.fractal-ghost-button--icon-only {
1617
+ --fractal-ghost-icon-size: 32px;
1618
+ }
1619
+ .fractal-ghost-button--lg.fractal-ghost-button--icon-only {
1620
+ --fractal-ghost-icon-size: 44px;
1621
+ }
1622
+ .fractal-ghost-button--xl.fractal-ghost-button--icon-only {
1623
+ --fractal-ghost-icon-size: 56px;
1624
+ }
1625
+ .fractal-ghost-card {
1626
+ display: grid;
1627
+ gap: var(--space-4);
1628
+ padding: var(--space-5);
1629
+ border: 1px solid var(--border-subtle);
1630
+ border-radius: var(--radius-md);
1631
+ background: var(--bg-canvas);
1632
+ }
1633
+ .fractal-ghost-table {
1634
+ overflow: hidden;
1635
+ border: 1px solid var(--border-subtle);
1636
+ border-radius: var(--radius-md);
1637
+ background: var(--bg-canvas);
1638
+ }
1639
+ .fractal-ghost-table__table {
1640
+ width: 100%;
1641
+ border-collapse: separate;
1642
+ border-spacing: 0;
1643
+ }
1644
+ .fractal-ghost-table__head-row {
1645
+ background: var(--bg-surface-1);
1646
+ }
1647
+ .fractal-ghost-table th {
1648
+ padding: 12px 16px;
1649
+ border-bottom: 1px solid var(--border-subtle);
1650
+ color: var(--fg-secondary);
1651
+ font-size: 0.75rem;
1652
+ font-weight: 500;
1653
+ text-align: left;
1654
+ }
1655
+ .fractal-ghost-table td {
1656
+ padding: 14px 16px;
1657
+ }
1658
+ .fractal-ghost-table__row + .fractal-ghost-table__row td {
1659
+ border-top: 1px solid var(--border-subtle);
1660
+ }
1661
+ .fractal-ghost-table--sm th {
1662
+ padding: 8px 12px;
1663
+ }
1664
+ .fractal-ghost-table--sm td {
1665
+ padding: 10px 12px;
1666
+ }
1667
+ .fractal-ghost-table--lg th {
1668
+ padding: 18px 24px;
1669
+ }
1670
+ .fractal-ghost-table--lg td {
1671
+ padding: 22px 24px;
1672
+ }
1673
+ .fractal-ghost-field {
1674
+ display: grid;
1675
+ gap: var(--space-2);
1676
+ }
1677
+ .fractal-ghost-field__control {
1678
+ width: 100%;
1679
+ height: 40px;
1680
+ border: 1px solid var(--border-subtle);
1681
+ border-radius: var(--radius-md);
1682
+ }
1683
+ .fractal-ghost-field__control--multiline {
1684
+ height: 112px;
1685
+ }
1686
+ .fractal-ghost-label {
1687
+ border-radius: var(--radius-sm);
1688
+ }
1689
+ .fractal-ghost-alert {
1690
+ display: grid;
1691
+ gap: var(--space-2);
1692
+ padding: var(--space-4);
1693
+ border: 1px solid var(--border-subtle);
1694
+ border-radius: var(--radius-md);
1695
+ }
1696
+ .fractal-ghost-choice {
1697
+ display: flex;
1698
+ align-items: center;
1699
+ gap: var(--space-2);
1700
+ }
1701
+ .fractal-ghost-choice__control {
1702
+ width: 16px;
1703
+ height: 16px;
1704
+ border-radius: var(--radius-sm);
1705
+ }
1706
+ .fractal-ghost-chip {
1707
+ border-radius: var(--radius-full);
1708
+ }
1709
+ .fractal-ghost-link {
1710
+ display: inline-block;
1711
+ }
1712
+ .fractal-ghost-dropdown {
1713
+ display: flex;
1714
+ align-items: center;
1715
+ justify-content: space-between;
1716
+ width: 220px;
1717
+ height: 40px;
1718
+ padding: 0 var(--space-3);
1719
+ border: 1px solid var(--border-subtle);
1720
+ border-radius: var(--radius-md);
1721
+ }
1722
+ .fractal-ghost-dropdown__chevron {
1723
+ width: 14px;
1724
+ height: 14px;
1725
+ border-radius: var(--radius-full);
1726
+ }
1727
+ .fractal-ghost-switcher {
1728
+ display: flex;
1729
+ width: fit-content;
1730
+ gap: 2px;
1731
+ padding: 3px;
1732
+ border-radius: var(--radius-md);
1733
+ background: var(--bg-surface-1);
1734
+ }
1735
+ .fractal-ghost-switcher > .fractal-ghost {
1736
+ width: 76px;
1737
+ height: 32px;
1738
+ border-radius: calc(var(--radius-md) - 2px);
1739
+ }
1740
+ .fractal-ghost-disclosure {
1741
+ display: flex;
1742
+ align-items: center;
1743
+ gap: var(--space-3);
1744
+ padding: var(--space-3) 0;
1745
+ border-bottom: 1px solid var(--border-subtle);
1746
+ }
1747
+ .fractal-ghost-disclosure__icon {
1748
+ width: 16px;
1749
+ height: 16px;
1750
+ border-radius: var(--radius-full);
1751
+ }
1752
+ .fractal-ghost-pagination {
1753
+ display: flex;
1754
+ gap: var(--space-2);
1755
+ }
1756
+ .fractal-ghost-pagination > .fractal-ghost {
1757
+ width: 32px;
1758
+ height: 32px;
1759
+ border-radius: var(--radius-md);
1760
+ }
1761
+ .fractal-ghost-dropzone {
1762
+ display: grid;
1763
+ place-items: center;
1764
+ gap: var(--space-3);
1765
+ min-height: 184px;
1766
+ padding: var(--space-6);
1767
+ border: 1px dashed var(--border-default);
1768
+ border-radius: var(--radius-md);
1769
+ }
1770
+ .fractal-ghost-dropzone__icon {
1771
+ width: 32px;
1772
+ height: 32px;
1773
+ border-radius: var(--radius-full);
1774
+ }
1775
+ .fractal-ghost-prompt-card {
1776
+ min-height: 176px;
1777
+ }
1778
+ .fractal-ghost-sidebar {
1779
+ display: grid;
1780
+ align-content: start;
1781
+ gap: var(--space-7);
1782
+ width: 248px;
1783
+ min-height: 100%;
1784
+ padding: var(--space-5);
1785
+ border-right: 1px solid var(--border-subtle);
1786
+ background: var(--bg-canvas);
1787
+ }
1788
+ .fractal-ghost-sidebar__brand {
1789
+ width: 112px;
1790
+ height: 24px;
1791
+ }
1792
+ .fractal-ghost-sidebar__items {
1793
+ display: grid;
1794
+ gap: var(--space-2);
1795
+ }
1796
+ .fractal-ghost-sidebar__item {
1797
+ display: flex;
1798
+ align-items: center;
1799
+ gap: var(--space-3);
1800
+ height: 36px;
1801
+ padding: 0 var(--space-2);
1802
+ }
1803
+ .fractal-ghost-sidebar__item > .fractal-ghost {
1804
+ width: 16px;
1805
+ height: 16px;
1806
+ border-radius: var(--radius-sm);
1807
+ }
1808
+ .fractal-ghost-surface {
1809
+ display: grid;
1810
+ gap: var(--space-5);
1811
+ padding: var(--space-6);
1812
+ border: 1px solid var(--border-subtle);
1813
+ border-radius: var(--radius-lg);
1814
+ background: var(--bg-canvas);
1815
+ }
1816
+ .fractal-ghost-modal {
1817
+ width: min(100%, 420px);
1818
+ }
1819
+ .fractal-ghost-side-panel {
1820
+ width: min(100%, 540px);
1821
+ min-height: 480px;
1822
+ }
1823
+ .fractal-ghost-surface__header {
1824
+ display: flex;
1825
+ align-items: center;
1826
+ justify-content: space-between;
1827
+ }
1828
+ .fractal-ghost-surface__close {
1829
+ width: 28px;
1830
+ height: 28px;
1831
+ border-radius: var(--radius-md);
1832
+ }
1833
+ .fractal-ghost-surface__title {
1834
+ color: var(--fg-secondary);
1835
+ font-size: 0.75rem;
1836
+ }
1837
+ @keyframes fractal-ghost-shine {
1838
+ from {
1839
+ background-position: 110% 0;
1840
+ }
1841
+ to {
1842
+ background-position: -110% 0;
1843
+ }
1844
+ }
1845
+ @media (prefers-reduced-motion: reduce) {
1846
+ .fractal-ghost {
1847
+ animation: none;
1848
+ background: var(--fractal-ghost-base);
1849
+ }
1850
+ }
1851
+
1852
+ /* src/components/Sidebar/Sidebar.css */
1853
+ .fractal-sidebar {
1854
+ --fractal-sidebar-width: 232px;
1855
+ --fractal-sidebar-compact-width: 56px;
1856
+ box-sizing: border-box;
1857
+ display: flex;
1858
+ width: var(--fractal-sidebar-width);
1859
+ min-width: var(--fractal-sidebar-width);
1860
+ min-height: 100%;
1861
+ flex-direction: column;
1862
+ background: var(--bg-surface-1);
1863
+ border-right: 1px solid var(--nav-border);
1864
+ color: var(--fg-primary);
1865
+ font-family: var(--font-sans);
1866
+ }
1867
+ .fractal-sidebar[data-compact] {
1868
+ z-index: 10;
1869
+ width: var(--fractal-sidebar-compact-width);
1870
+ min-width: var(--fractal-sidebar-compact-width);
1871
+ overflow: hidden;
1872
+ transition:
1873
+ width var(--duration-normal) var(--ease-out),
1874
+ min-width var(--duration-normal) var(--ease-out),
1875
+ box-shadow var(--duration-normal) var(--ease-out);
1876
+ }
1877
+ .fractal-sidebar[data-compact]:hover,
1878
+ .fractal-sidebar[data-compact]:focus-within {
1879
+ width: var(--fractal-sidebar-width);
1880
+ min-width: var(--fractal-sidebar-width);
1881
+ box-shadow: var(--shadow-md);
1882
+ }
1883
+ .fractal-sidebar__header {
1884
+ display: flex;
1885
+ min-height: 48px;
1886
+ align-items: center;
1887
+ padding: var(--space-2);
1159
1888
  border-bottom: 1px solid var(--border-subtle);
1160
1889
  }
1161
1890
  .fractal-sidebar__brand {
@@ -1180,10 +1909,55 @@
1180
1909
  transform: scale(0.98);
1181
1910
  }
1182
1911
  .fractal-sidebar__brand:focus-visible,
1183
- .fractal-sidebar__nav-item:focus-visible {
1912
+ .fractal-sidebar__nav-item:focus-visible,
1913
+ .fractal-sidebar__account-trigger:focus-visible {
1184
1914
  outline: 2px solid var(--border-focus);
1185
1915
  outline-offset: 2px;
1186
1916
  }
1917
+ .fractal-sidebar__account {
1918
+ display: block;
1919
+ width: 100%;
1920
+ }
1921
+ .fractal-sidebar__account-trigger {
1922
+ width: 100%;
1923
+ min-height: 36px;
1924
+ box-sizing: border-box;
1925
+ gap: var(--space-2);
1926
+ padding: 8px 10px;
1927
+ border: 0;
1928
+ background: transparent;
1929
+ border-radius: var(--radius-md);
1930
+ color: var(--fg-primary);
1931
+ font-weight: 500;
1932
+ }
1933
+ .fractal-sidebar__account-trigger:hover,
1934
+ .fractal-sidebar__account-trigger.fractal-dropdown-trigger--tertiary:hover {
1935
+ background: var(--nav-hover);
1936
+ }
1937
+ .fractal-sidebar__account-name {
1938
+ min-width: 0;
1939
+ flex: 1;
1940
+ overflow: hidden;
1941
+ text-overflow: ellipsis;
1942
+ white-space: nowrap;
1943
+ }
1944
+ .fractal-sidebar__account-icon {
1945
+ display: inline-flex;
1946
+ width: 18px;
1947
+ height: 18px;
1948
+ flex: 0 0 18px;
1949
+ align-items: center;
1950
+ justify-content: center;
1951
+ }
1952
+ .fractal-sidebar__account-icon > img,
1953
+ .fractal-sidebar__account-icon > svg {
1954
+ display: block;
1955
+ width: 18px;
1956
+ height: 18px;
1957
+ }
1958
+ .fractal-sidebar__account-panel {
1959
+ min-width: 100%;
1960
+ }
1187
1961
  .fractal-sidebar__nav {
1188
1962
  display: flex;
1189
1963
  flex: 1;
@@ -1275,54 +2049,383 @@
1275
2049
  border-top: 1px solid var(--border-subtle);
1276
2050
  }
1277
2051
  @media (prefers-reduced-motion: reduce) {
2052
+ .fractal-sidebar[data-compact],
1278
2053
  .fractal-sidebar__brand,
1279
2054
  .fractal-sidebar__nav-item {
1280
2055
  transition: none;
1281
2056
  }
1282
2057
  }
1283
2058
 
1284
- /* src/components/PageHeader/PageHeader.css */
1285
- .fractal-page-header {
2059
+ /* src/components/SidePanel/SidePanel.css */
2060
+ .fractal-side-panel-overlay {
2061
+ position: fixed;
2062
+ inset: 0;
2063
+ z-index: 9998;
1286
2064
  display: flex;
1287
- min-height: 48px;
1288
- align-items: center;
1289
- justify-content: space-between;
1290
- gap: var(--space-5);
2065
+ justify-content: flex-end;
2066
+ background: color-mix(in srgb, var(--fg-primary) 16%, transparent);
2067
+ animation: fractal-side-panel-overlay-in 180ms ease-out both;
2068
+ }
2069
+ .fractal-side-panel {
2070
+ display: flex;
2071
+ width: min(100vw, 540px);
2072
+ height: 100%;
2073
+ flex-direction: column;
2074
+ border-left: 1px solid var(--border-subtle);
2075
+ background: var(--bg-canvas);
2076
+ box-shadow: var(--shadow-lg);
1291
2077
  color: var(--fg-primary);
1292
2078
  font-family: var(--font-sans);
2079
+ animation: fractal-side-panel-in 180ms cubic-bezier(0.16, 1, 0.3, 1) both;
1293
2080
  }
1294
- .fractal-page-header__content {
2081
+ .fractal-side-panel--sm {
2082
+ width: min(100vw, 420px);
2083
+ }
2084
+ .fractal-side-panel--md {
2085
+ width: min(100vw, 540px);
2086
+ }
2087
+ .fractal-side-panel--lg {
2088
+ width: min(100vw, 680px);
2089
+ }
2090
+ .fractal-side-panel--xl {
2091
+ width: min(100vw, 960px);
2092
+ }
2093
+ .fractal-side-panel__header {
2094
+ display: flex;
2095
+ align-items: flex-start;
2096
+ justify-content: space-between;
2097
+ gap: var(--space-4);
2098
+ padding: var(--space-5) var(--space-6) var(--space-4);
2099
+ }
2100
+ .fractal-side-panel__heading {
1295
2101
  min-width: 0;
1296
2102
  }
1297
- .fractal-page-header__title {
2103
+ .fractal-side-panel__title {
2104
+ display: flex;
2105
+ min-height: 32px;
2106
+ align-items: center;
1298
2107
  margin: 0;
1299
- color: var(--fg-primary);
1300
- font-family: var(--font-sans);
1301
2108
  font-size: 1rem;
1302
2109
  font-weight: 500;
1303
2110
  line-height: 1.4;
1304
2111
  }
1305
- .fractal-page-header__description {
2112
+ .fractal-side-panel__description {
1306
2113
  margin: var(--space-1) 0 0;
1307
2114
  color: var(--fg-secondary);
1308
2115
  font-size: 0.875rem;
1309
- font-weight: 400;
1310
2116
  line-height: 1.4;
1311
2117
  }
1312
- .fractal-page-header__actions {
1313
- display: flex;
2118
+ .fractal-side-panel__close {
2119
+ display: grid;
2120
+ width: 32px;
2121
+ height: 32px;
1314
2122
  flex: 0 0 auto;
1315
- align-items: center;
2123
+ place-items: center;
2124
+ border: 0;
2125
+ border-radius: var(--radius-md);
2126
+ background: transparent;
2127
+ color: var(--fg-secondary);
2128
+ cursor: pointer;
2129
+ }
2130
+ .fractal-side-panel__close:hover {
2131
+ background: var(--hover-surface);
2132
+ color: var(--fg-primary);
2133
+ }
2134
+ .fractal-side-panel__close:focus-visible {
2135
+ outline: 2px solid var(--border-focus);
2136
+ outline-offset: 2px;
2137
+ }
2138
+ .fractal-side-panel__body {
2139
+ min-height: 0;
2140
+ flex: 1;
2141
+ overflow: auto;
2142
+ padding: var(--space-2) var(--space-6) var(--space-6);
2143
+ }
2144
+ .fractal-side-panel__body--loading {
2145
+ display: grid;
2146
+ place-items: center;
2147
+ }
2148
+ .fractal-side-panel__footer {
2149
+ display: flex;
2150
+ justify-content: flex-end;
1316
2151
  gap: var(--space-2);
2152
+ padding: var(--space-4) var(--space-6);
2153
+ border-top: 1px solid var(--border-subtle);
1317
2154
  }
1318
2155
  @media (max-width: 640px) {
1319
- .fractal-page-header {
1320
- align-items: flex-start;
1321
- flex-direction: column;
1322
- gap: var(--space-3);
1323
- }
1324
- .fractal-page-header__actions {
2156
+ .fractal-side-panel {
1325
2157
  width: 100%;
1326
2158
  }
2159
+ .fractal-side-panel__header {
2160
+ padding: var(--space-4) var(--space-5) var(--space-3);
2161
+ }
2162
+ .fractal-side-panel__body {
2163
+ padding: var(--space-2) var(--space-5) var(--space-5);
2164
+ }
2165
+ .fractal-side-panel__footer {
2166
+ padding: var(--space-3) var(--space-5);
2167
+ }
2168
+ }
2169
+ @keyframes fractal-side-panel-overlay-in {
2170
+ from {
2171
+ opacity: 0;
2172
+ }
2173
+ to {
2174
+ opacity: 1;
2175
+ }
2176
+ }
2177
+ @keyframes fractal-side-panel-in {
2178
+ from {
2179
+ transform: translateX(100%);
2180
+ }
2181
+ to {
2182
+ transform: translateX(0);
2183
+ }
2184
+ }
2185
+ @media (prefers-reduced-motion: reduce) {
2186
+ .fractal-side-panel-overlay,
2187
+ .fractal-side-panel {
2188
+ animation-duration: 0.01ms;
2189
+ }
2190
+ }
2191
+
2192
+ /* src/components/Textarea/Textarea.css */
2193
+ .fractal-textarea {
2194
+ display: block;
2195
+ width: 100%;
2196
+ min-height: 120px;
2197
+ resize: vertical;
2198
+ border: 1px solid var(--border-default);
2199
+ border-radius: var(--radius-md);
2200
+ background: var(--bg-canvas);
2201
+ padding: var(--space-3);
2202
+ color: var(--fg-primary);
2203
+ font: 0.8125rem/1.55 var(--font-mono);
2204
+ }
2205
+ .fractal-textarea::placeholder {
2206
+ color: var(--fg-placeholder);
2207
+ }
2208
+ .fractal-textarea:hover {
2209
+ border-color: var(--fg-tertiary);
2210
+ }
2211
+ .fractal-textarea:focus-visible {
2212
+ outline: none;
2213
+ border-color: var(--border-focus);
2214
+ box-shadow: 0 0 0 2px var(--accent-surface);
2215
+ }
2216
+ .fractal-textarea:disabled {
2217
+ cursor: not-allowed;
2218
+ opacity: 0.5;
2219
+ background: var(--bg-surface-1);
2220
+ }
2221
+
2222
+ /* src/components/TextButton/TextButton.css */
2223
+ .fractal-text-button {
2224
+ display: inline-flex;
2225
+ align-items: center;
2226
+ gap: var(--space-1);
2227
+ border: 0;
2228
+ background: transparent;
2229
+ cursor: pointer;
2230
+ font-family: var(--font-sans);
2231
+ font-weight: 500;
2232
+ line-height: 1.4;
2233
+ padding: 0;
2234
+ text-align: left;
2235
+ transition: color 120ms ease;
2236
+ }
2237
+ .fractal-text-button--primary {
2238
+ color: var(--fg-primary);
2239
+ }
2240
+ .fractal-text-button--primary:hover:not(:disabled) {
2241
+ color: var(--fg-secondary);
2242
+ }
2243
+ .fractal-text-button--secondary {
2244
+ color: var(--fg-secondary);
2245
+ }
2246
+ .fractal-text-button--secondary:hover:not(:disabled) {
2247
+ color: var(--fg-primary);
2248
+ }
2249
+ .fractal-text-button:focus-visible {
2250
+ outline: 2px solid var(--border-focus);
2251
+ outline-offset: 3px;
2252
+ border-radius: var(--radius-sm);
2253
+ }
2254
+ .fractal-text-button:disabled {
2255
+ cursor: not-allowed;
2256
+ opacity: 0.5;
2257
+ }
2258
+ .fractal-text-button--sm {
2259
+ font-size: 0.8125rem;
2260
+ }
2261
+ .fractal-text-button--md {
2262
+ font-size: 0.875rem;
2263
+ }
2264
+ .fractal-text-button__icon {
2265
+ display: inline-grid;
2266
+ place-items: center;
2267
+ }
2268
+
2269
+ /* src/components/FileDropzone/FileDropzone.css */
2270
+ .fractal-file-dropzone {
2271
+ display: grid;
2272
+ gap: var(--space-2);
2273
+ color: var(--fg-primary);
2274
+ font-family: var(--font-sans);
2275
+ }
2276
+ .fractal-file-dropzone__input {
2277
+ display: none;
2278
+ }
2279
+ .fractal-file-dropzone__target {
2280
+ display: flex;
2281
+ width: 100%;
2282
+ min-height: 92px;
2283
+ align-items: center;
2284
+ justify-content: center;
2285
+ gap: var(--space-3);
2286
+ border: 1px dashed var(--border-default);
2287
+ border-radius: var(--radius-md);
2288
+ background: var(--bg-canvas);
2289
+ color: var(--fg-secondary);
2290
+ cursor: pointer;
2291
+ padding: var(--space-4);
2292
+ text-align: left;
2293
+ }
2294
+ .fractal-file-dropzone__target:hover,
2295
+ .fractal-file-dropzone__target[data-dragging] {
2296
+ border-color: var(--border-focus);
2297
+ background: var(--hover-surface);
2298
+ color: var(--fg-primary);
2299
+ }
2300
+ .fractal-file-dropzone__target:focus-visible {
2301
+ outline: 2px solid var(--border-focus);
2302
+ outline-offset: 2px;
2303
+ }
2304
+ .fractal-file-dropzone__target:disabled {
2305
+ cursor: not-allowed;
2306
+ opacity: 0.5;
2307
+ }
2308
+ .fractal-file-dropzone__copy {
2309
+ display: grid;
2310
+ gap: var(--space-1);
2311
+ }
2312
+ .fractal-file-dropzone__title {
2313
+ font-size: 0.875rem;
2314
+ font-weight: 500;
2315
+ line-height: 1.4;
2316
+ }
2317
+ .fractal-file-dropzone__description {
2318
+ color: var(--fg-secondary);
2319
+ font-size: 0.8125rem;
2320
+ line-height: 1.4;
2321
+ }
2322
+ .fractal-file-dropzone__files {
2323
+ display: grid;
2324
+ gap: var(--space-1);
2325
+ margin: 0;
2326
+ padding: 0;
2327
+ list-style: none;
2328
+ }
2329
+ .fractal-file-dropzone__file {
2330
+ display: flex;
2331
+ min-width: 0;
2332
+ align-items: center;
2333
+ gap: var(--space-2);
2334
+ padding: var(--space-2) var(--space-3);
2335
+ border: 1px solid var(--border-subtle);
2336
+ border-radius: var(--radius-md);
2337
+ background: var(--bg-canvas);
2338
+ font-size: 0.8125rem;
2339
+ line-height: 1.4;
2340
+ }
2341
+ .fractal-file-dropzone__file-name {
2342
+ min-width: 0;
2343
+ flex: 1;
2344
+ overflow: hidden;
2345
+ text-overflow: ellipsis;
2346
+ white-space: nowrap;
2347
+ }
2348
+ .fractal-file-dropzone__file-meta {
2349
+ color: var(--fg-secondary);
2350
+ white-space: nowrap;
2351
+ }
2352
+ .fractal-file-dropzone__remove {
2353
+ display: grid;
2354
+ width: 24px;
2355
+ height: 24px;
2356
+ flex: 0 0 auto;
2357
+ place-items: center;
2358
+ border: 0;
2359
+ border-radius: var(--radius-sm);
2360
+ background: transparent;
2361
+ color: var(--fg-secondary);
2362
+ cursor: pointer;
2363
+ }
2364
+ .fractal-file-dropzone__remove:hover {
2365
+ background: var(--hover-surface);
2366
+ color: var(--fg-primary);
2367
+ }
2368
+ .fractal-file-dropzone__remove:focus-visible {
2369
+ outline: 2px solid var(--border-focus);
2370
+ outline-offset: 1px;
2371
+ }
2372
+ .fractal-file-dropzone__remove:disabled {
2373
+ cursor: not-allowed;
2374
+ opacity: 0.5;
2375
+ }
2376
+
2377
+ /* src/components/Pagination/Pagination.css */
2378
+ .fractal-pagination {
2379
+ display: flex;
2380
+ align-items: center;
2381
+ justify-content: space-between;
2382
+ gap: var(--space-3);
2383
+ color: var(--fg-secondary);
2384
+ font-family: var(--font-sans);
2385
+ font-size: 0.8125rem;
2386
+ line-height: 1.4;
2387
+ }
2388
+ .fractal-pagination__controls {
2389
+ display: flex;
2390
+ align-items: center;
2391
+ gap: var(--space-2);
2392
+ }
2393
+ .fractal-pagination__page-size .fractal-dropdown-trigger {
2394
+ padding: 4px 0;
2395
+ border: 0;
2396
+ background: transparent;
2397
+ color: var(--fg-secondary);
2398
+ }
2399
+ .fractal-pagination__page-size .fractal-dropdown-trigger:hover {
2400
+ background: transparent;
2401
+ color: var(--fg-primary);
2402
+ }
2403
+ .fractal-pagination__button {
2404
+ display: grid;
2405
+ width: 28px;
2406
+ height: 28px;
2407
+ place-items: center;
2408
+ border: 1px solid var(--border-default);
2409
+ border-radius: var(--radius-sm);
2410
+ background: var(--bg-canvas);
2411
+ color: var(--fg-secondary);
2412
+ cursor: pointer;
2413
+ }
2414
+ .fractal-pagination__button:hover:not(:disabled) {
2415
+ background: var(--hover-surface);
2416
+ color: var(--fg-primary);
2417
+ }
2418
+ .fractal-pagination__button:focus-visible {
2419
+ outline: 2px solid var(--border-focus);
2420
+ outline-offset: 2px;
2421
+ }
2422
+ .fractal-pagination__button:disabled {
2423
+ cursor: not-allowed;
2424
+ opacity: 0.45;
2425
+ }
2426
+ .fractal-pagination__page {
2427
+ min-width: 44px;
2428
+ text-align: center;
2429
+ white-space: nowrap;
1327
2430
  }
1328
2431
  /*# sourceMappingURL=index.css.map */