@mirror-physics/fractal-ui 0.1.1

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 ADDED
@@ -0,0 +1,1273 @@
1
+ /* src/components/Button/Button.css */
2
+ .fractal-button {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ white-space: nowrap;
7
+ font-weight: 400;
8
+ font-family: var(--font-sans);
9
+ line-height: 1;
10
+ text-decoration: none;
11
+ box-sizing: border-box;
12
+ transform: scale(1);
13
+ transition: transform 120ms cubic-bezier(0.16, 1, 0.3, 1);
14
+ }
15
+ .fractal-button--primary:active:not(:disabled),
16
+ .fractal-button--secondary:active:not(:disabled),
17
+ .fractal-button--ghost:active:not(:disabled),
18
+ .fractal-button--danger:active:not(:disabled) {
19
+ transform: scale(0.97);
20
+ }
21
+ .fractal-button:focus-visible {
22
+ outline: none;
23
+ box-shadow: 0 0 0 2px var(--bg-canvas, #fff), 0 0 0 4px var(--border-focus, var(--blue-500));
24
+ }
25
+ .fractal-button:disabled {
26
+ opacity: 0.5;
27
+ pointer-events: none;
28
+ }
29
+ @media (prefers-reduced-motion: reduce) {
30
+ .fractal-button {
31
+ transition-duration: 0.01ms;
32
+ }
33
+ }
34
+
35
+ /* src/components/Card/Card.css */
36
+ .fractal-card {
37
+ border-radius: var(--radius-lg, 8px);
38
+ border: 1px solid var(--border-subtle);
39
+ background-color: var(--bg-surface-1);
40
+ color: var(--fg-primary);
41
+ box-shadow: var(--shadow-xs);
42
+ font-family: var(--font-sans);
43
+ }
44
+ .fractal-card-header {
45
+ display: flex;
46
+ flex-direction: column;
47
+ gap: 6px;
48
+ padding: var(--space-6, 24px);
49
+ }
50
+ .fractal-card-title {
51
+ margin: 0;
52
+ font-size: 1.5rem;
53
+ font-weight: 600;
54
+ line-height: 1;
55
+ letter-spacing: -0.02em;
56
+ color: var(--fg-primary);
57
+ }
58
+ .fractal-card-description {
59
+ margin: 0;
60
+ font-size: 0.875rem;
61
+ color: var(--fg-secondary);
62
+ }
63
+ .fractal-card-content {
64
+ padding: 0 var(--space-6, 24px) var(--space-6, 24px);
65
+ }
66
+ .fractal-card-footer {
67
+ display: flex;
68
+ align-items: center;
69
+ padding: 0 var(--space-6, 24px) var(--space-6, 24px);
70
+ }
71
+ .fractal-feature-card {
72
+ border: 1px solid var(--border-subtle);
73
+ border-radius: var(--radius-xl, 12px);
74
+ background: var(--bg-canvas);
75
+ padding: 40px;
76
+ display: flex;
77
+ flex-direction: column;
78
+ font-family: var(--font-sans);
79
+ transition: background 200ms ease;
80
+ }
81
+ .fractal-feature-card:hover {
82
+ background: var(--bg-surface-1);
83
+ }
84
+ .fractal-feature-card__icon {
85
+ width: 40px;
86
+ height: 40px;
87
+ display: flex;
88
+ align-items: center;
89
+ justify-content: flex-start;
90
+ color: var(--fg-primary);
91
+ margin-bottom: 24px;
92
+ }
93
+ .fractal-feature-card__title {
94
+ margin: 0 0 8px;
95
+ font-size: 1rem;
96
+ font-weight: 600;
97
+ line-height: 1.5;
98
+ color: var(--fg-primary);
99
+ }
100
+ .fractal-feature-card__description {
101
+ margin: 0;
102
+ font-size: 0.875rem;
103
+ line-height: 1.4;
104
+ color: var(--fg-secondary);
105
+ }
106
+ .fractal-folder-card {
107
+ display: flex;
108
+ flex-direction: column;
109
+ border: 1px solid var(--border-subtle);
110
+ border-radius: var(--radius-lg, 8px);
111
+ background: var(--bg-canvas);
112
+ cursor: pointer;
113
+ text-align: left;
114
+ overflow: hidden;
115
+ font-family: var(--font-sans);
116
+ transition:
117
+ background 150ms ease,
118
+ border-color 150ms ease,
119
+ transform 120ms cubic-bezier(0.16, 1, 0.3, 1);
120
+ }
121
+ .fractal-folder-card:hover {
122
+ background: var(--bg-surface-1);
123
+ }
124
+ .fractal-folder-card:active:not(:disabled) {
125
+ transform: scale(0.97);
126
+ }
127
+ .fractal-folder-card--selected {
128
+ border-color: var(--accent-default);
129
+ }
130
+ .fractal-folder-card--selected:hover {
131
+ background: var(--accent-surface);
132
+ }
133
+ .fractal-folder-card:focus-visible {
134
+ outline: none;
135
+ box-shadow: 0 0 0 2px var(--bg-canvas, #fff), 0 0 0 4px var(--accent-default, var(--blue-500));
136
+ }
137
+ .fractal-folder-card__header {
138
+ display: flex;
139
+ align-items: center;
140
+ gap: 8px;
141
+ padding: 8px 16px;
142
+ }
143
+ .fractal-folder-card__icon {
144
+ flex-shrink: 0;
145
+ color: var(--fg-secondary);
146
+ }
147
+ .fractal-folder-card__name {
148
+ font-size: 0.875rem;
149
+ font-weight: 500;
150
+ color: var(--fg-primary);
151
+ white-space: nowrap;
152
+ overflow: hidden;
153
+ text-overflow: ellipsis;
154
+ }
155
+ .fractal-folder-card__footer {
156
+ padding: 8px 16px;
157
+ }
158
+ .fractal-folder-card__sessions {
159
+ font-size: 0.75rem;
160
+ color: var(--fg-secondary);
161
+ }
162
+
163
+ /* src/components/PromptCard/PromptCard.css */
164
+ .fractal-prompt-card {
165
+ --prompt-card-bg: var(--accent-surface);
166
+ --prompt-card-bg-hover: var(--accent-subtle);
167
+ --prompt-card-stroke: var(--accent-surface-stroke);
168
+ --prompt-card-icon-bg: var(--accent-subtle);
169
+ --prompt-card-icon-color: var(--accent-default);
170
+ --prompt-card-text: var(--accent-text);
171
+ width: 100%;
172
+ min-height: 58px;
173
+ display: flex;
174
+ align-items: center;
175
+ gap: 8px;
176
+ padding: 8px;
177
+ border: 1px solid var(--prompt-card-stroke);
178
+ border-radius: var(--radius-lg, 8px);
179
+ background-color: var(--prompt-card-bg);
180
+ color: var(--prompt-card-text);
181
+ cursor: pointer;
182
+ font-family: var(--font-sans);
183
+ text-align: left;
184
+ box-sizing: border-box;
185
+ transform: scale(1);
186
+ transition:
187
+ background-color 200ms ease-out,
188
+ border-color 200ms ease-out,
189
+ transform 120ms cubic-bezier(0.16, 1, 0.3, 1),
190
+ opacity 150ms ease;
191
+ }
192
+ .fractal-prompt-card:hover,
193
+ .fractal-prompt-card--highlighted {
194
+ background-color: var(--prompt-card-bg-hover);
195
+ }
196
+ .fractal-prompt-card:active:not(:disabled) {
197
+ transform: scale(0.97);
198
+ }
199
+ .fractal-prompt-card:disabled {
200
+ --prompt-card-bg: var(--bg-surface-1);
201
+ --prompt-card-bg-hover: var(--bg-surface-1);
202
+ --prompt-card-stroke: var(--border-subtle);
203
+ --prompt-card-icon-bg: var(--bg-surface-2);
204
+ --prompt-card-icon-color: var(--fg-tertiary);
205
+ --prompt-card-text: var(--fg-tertiary);
206
+ cursor: not-allowed;
207
+ opacity: 0.72;
208
+ }
209
+ .fractal-prompt-card:focus-visible {
210
+ outline: none;
211
+ box-shadow: 0 0 0 2px var(--bg-canvas, #fff), 0 0 0 4px var(--border-focus, var(--blue-500));
212
+ }
213
+ .fractal-prompt-card__icon {
214
+ width: 40px;
215
+ height: 40px;
216
+ min-width: 40px;
217
+ display: flex;
218
+ align-items: center;
219
+ justify-content: center;
220
+ border-radius: var(--radius-sm, 4px);
221
+ background-color: var(--prompt-card-icon-bg);
222
+ color: var(--prompt-card-icon-color);
223
+ transition: background-color 200ms ease-out, color 200ms ease-out;
224
+ }
225
+ .fractal-prompt-card:hover:not(:disabled) .fractal-prompt-card__icon,
226
+ .fractal-prompt-card--highlighted:not(:disabled) .fractal-prompt-card__icon {
227
+ background-color: var(--prompt-card-icon-color);
228
+ color: var(--fg-inverse);
229
+ }
230
+ .fractal-prompt-card__title {
231
+ min-width: 0;
232
+ color: var(--prompt-card-text);
233
+ font-size: 0.875rem;
234
+ font-weight: 400;
235
+ line-height: 1.35;
236
+ display: -webkit-box;
237
+ -webkit-line-clamp: 2;
238
+ -webkit-box-orient: vertical;
239
+ overflow: hidden;
240
+ }
241
+ .fractal-prompt-card--blue {
242
+ --prompt-card-bg: var(--accent-surface);
243
+ --prompt-card-bg-hover: var(--accent-subtle);
244
+ --prompt-card-stroke: var(--accent-surface-stroke);
245
+ --prompt-card-icon-bg: var(--accent-subtle);
246
+ --prompt-card-icon-color: var(--accent-default);
247
+ --prompt-card-text: var(--accent-text);
248
+ }
249
+ .fractal-prompt-card--pink {
250
+ --prompt-card-bg: var(--pink-surface);
251
+ --prompt-card-bg-hover: var(--pink-subtle);
252
+ --prompt-card-stroke: var(--pink-surface-stroke);
253
+ --prompt-card-icon-bg: var(--pink-subtle);
254
+ --prompt-card-icon-color: var(--pink-default);
255
+ --prompt-card-text: var(--pink-text);
256
+ }
257
+ .fractal-prompt-card--orange {
258
+ --prompt-card-bg: var(--orange-surface);
259
+ --prompt-card-bg-hover: var(--orange-subtle);
260
+ --prompt-card-stroke: var(--orange-surface-stroke);
261
+ --prompt-card-icon-bg: var(--orange-subtle);
262
+ --prompt-card-icon-color: var(--orange-default);
263
+ --prompt-card-text: var(--orange-text);
264
+ }
265
+ .fractal-prompt-card--green {
266
+ --prompt-card-bg: var(--success-surface);
267
+ --prompt-card-bg-hover: var(--success-subtle);
268
+ --prompt-card-stroke: var(--success-surface-stroke);
269
+ --prompt-card-icon-bg: var(--success-subtle);
270
+ --prompt-card-icon-color: var(--success-default);
271
+ --prompt-card-text: var(--success-text);
272
+ }
273
+ .fractal-prompt-card--purple {
274
+ --prompt-card-bg: var(--purple-surface);
275
+ --prompt-card-bg-hover: var(--purple-subtle);
276
+ --prompt-card-stroke: var(--purple-surface-stroke);
277
+ --prompt-card-icon-bg: var(--purple-subtle);
278
+ --prompt-card-icon-color: var(--purple-default);
279
+ --prompt-card-text: var(--purple-text);
280
+ }
281
+ .fractal-prompt-card--red {
282
+ --prompt-card-bg: var(--error-surface);
283
+ --prompt-card-bg-hover: var(--error-subtle);
284
+ --prompt-card-stroke: var(--error-surface-stroke);
285
+ --prompt-card-icon-bg: var(--error-subtle);
286
+ --prompt-card-icon-color: var(--error-default);
287
+ --prompt-card-text: var(--error-text);
288
+ }
289
+ .fractal-prompt-card--yellow {
290
+ --prompt-card-bg: var(--warning-surface);
291
+ --prompt-card-bg-hover: var(--warning-subtle);
292
+ --prompt-card-stroke: var(--warning-surface-stroke);
293
+ --prompt-card-icon-bg: var(--warning-subtle);
294
+ --prompt-card-icon-color: var(--warning-default);
295
+ --prompt-card-text: var(--warning-text);
296
+ }
297
+ .fractal-prompt-card--neutral {
298
+ --prompt-card-bg: var(--bg-canvas);
299
+ --prompt-card-bg-hover: var(--bg-surface-1);
300
+ --prompt-card-stroke: var(--border-subtle);
301
+ --prompt-card-icon-bg: var(--bg-surface-2);
302
+ --prompt-card-icon-color: var(--fg-tertiary);
303
+ --prompt-card-text: var(--fg-primary);
304
+ }
305
+ .fractal-prompt-grid {
306
+ display: grid;
307
+ grid-template-columns: repeat(3, minmax(0, 1fr));
308
+ gap: 8px;
309
+ }
310
+ .fractal-prompt-grid--padded {
311
+ padding: 0.5rem calc(1rem + 1px) 2rem;
312
+ }
313
+ .fractal-prompt-grid--compact {
314
+ grid-template-columns: repeat(2, minmax(0, 1fr));
315
+ }
316
+ .fractal-prompt-grid--compact > :nth-child(n+5) {
317
+ display: none;
318
+ }
319
+ @media (max-width: 639px) {
320
+ .fractal-prompt-grid {
321
+ grid-template-columns: repeat(2, minmax(0, 1fr));
322
+ }
323
+ }
324
+ @media (max-width: 419px) {
325
+ .fractal-prompt-grid {
326
+ grid-template-columns: 1fr;
327
+ }
328
+ }
329
+ @media (prefers-reduced-motion: reduce) {
330
+ .fractal-prompt-card {
331
+ transition-duration: 0.01ms;
332
+ }
333
+ }
334
+
335
+ /* src/components/Input/Input.css */
336
+ .fractal-input {
337
+ display: flex;
338
+ height: 40px;
339
+ width: 100%;
340
+ border-radius: var(--radius-sm, 4px);
341
+ border: 1px solid var(--border-default);
342
+ background-color: var(--bg-canvas);
343
+ padding: 8px 12px;
344
+ font-size: 0.875rem;
345
+ font-family: var(--font-sans);
346
+ line-height: 1.5;
347
+ color: var(--fg-primary);
348
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
349
+ box-sizing: border-box;
350
+ }
351
+ .fractal-input::placeholder {
352
+ color: var(--fg-placeholder);
353
+ }
354
+ .fractal-input:focus-visible {
355
+ outline: none;
356
+ border-color: var(--border-focus);
357
+ box-shadow: 0 0 0 2px var(--accent-surface);
358
+ }
359
+ .fractal-input:disabled {
360
+ cursor: not-allowed;
361
+ opacity: 0.5;
362
+ background-color: var(--bg-surface-1);
363
+ }
364
+ .fractal-input[type=file] {
365
+ border: 0;
366
+ background: transparent;
367
+ font-size: 0.875rem;
368
+ height: auto;
369
+ padding: 0;
370
+ }
371
+
372
+ /* src/components/Label/Label.css */
373
+ .fractal-label {
374
+ font-size: 0.875rem;
375
+ font-weight: 500;
376
+ line-height: 1;
377
+ color: var(--fg-primary);
378
+ }
379
+ .fractal-label[data-disabled] {
380
+ cursor: not-allowed;
381
+ opacity: 0.7;
382
+ }
383
+
384
+ /* src/components/Alert/Alert.css */
385
+ .fractal-alert {
386
+ display: flex;
387
+ align-items: flex-start;
388
+ gap: 12px;
389
+ width: 100%;
390
+ border-radius: var(--radius-sm, 4px);
391
+ border: 1px solid;
392
+ padding: var(--space-3, 12px) var(--space-4, 16px);
393
+ font-family: var(--font-sans);
394
+ }
395
+ .fractal-alert-icon {
396
+ flex-shrink: 0;
397
+ display: flex;
398
+ align-items: center;
399
+ justify-content: center;
400
+ width: 18px;
401
+ height: 18px;
402
+ font-size: 0.75rem;
403
+ font-weight: 600;
404
+ border-radius: 50%;
405
+ margin-top: 1px;
406
+ }
407
+ .fractal-alert-content {
408
+ flex: 1;
409
+ min-width: 0;
410
+ }
411
+ .fractal-alert-title {
412
+ margin: 0 0 4px 0;
413
+ font-size: 0.875rem;
414
+ font-weight: 500;
415
+ line-height: 1.4;
416
+ }
417
+ .fractal-alert-description {
418
+ font-size: 0.875rem;
419
+ line-height: 1.5;
420
+ }
421
+ .fractal-alert--default {
422
+ background-color: var(--bg-canvas);
423
+ border-color: var(--border-default);
424
+ color: var(--fg-primary);
425
+ }
426
+ .fractal-alert--default .fractal-alert-icon {
427
+ background: var(--bg-surface-2);
428
+ color: var(--fg-secondary);
429
+ }
430
+ .fractal-alert--info {
431
+ background-color: var(--accent-surface);
432
+ border-color: var(--accent-default);
433
+ color: var(--fg-primary);
434
+ }
435
+ .fractal-alert--info .fractal-alert-icon {
436
+ background: var(--accent-default);
437
+ color: var(--fg-inverse);
438
+ }
439
+ .fractal-alert--success {
440
+ background-color: var(--success-surface);
441
+ border-color: var(--success-default);
442
+ color: var(--fg-primary);
443
+ }
444
+ .fractal-alert--success .fractal-alert-icon {
445
+ background: var(--success-default);
446
+ color: var(--fg-inverse);
447
+ }
448
+ .fractal-alert--warning {
449
+ background-color: var(--warning-surface);
450
+ border-color: var(--warning-default);
451
+ color: var(--fg-primary);
452
+ }
453
+ .fractal-alert--warning .fractal-alert-icon {
454
+ background: var(--warning-default);
455
+ color: var(--fg-inverse);
456
+ }
457
+ .fractal-alert--error {
458
+ background-color: var(--error-surface);
459
+ border-color: var(--error-default);
460
+ color: var(--fg-primary);
461
+ }
462
+ .fractal-alert--error .fractal-alert-icon {
463
+ background: var(--error-default);
464
+ color: var(--fg-inverse);
465
+ }
466
+
467
+ /* src/components/Toggle/Toggle.css */
468
+ .fractal-toggle {
469
+ display: inline-flex;
470
+ align-items: center;
471
+ gap: var(--space-2, 8px);
472
+ background: none;
473
+ border: none;
474
+ cursor: pointer;
475
+ padding: 0;
476
+ font-family: var(--font-sans);
477
+ }
478
+ .fractal-toggle-track {
479
+ position: relative;
480
+ width: 32px;
481
+ height: 18px;
482
+ border-radius: var(--radius-full, 9999px);
483
+ background-color: var(--bg-surface-2);
484
+ transition: background-color 0.2s;
485
+ flex-shrink: 0;
486
+ }
487
+ .fractal-toggle-track--checked {
488
+ background-color: var(--accent-default);
489
+ }
490
+ .fractal-toggle-thumb {
491
+ position: absolute;
492
+ top: 2px;
493
+ left: 2px;
494
+ width: 14px;
495
+ height: 14px;
496
+ border-radius: 50%;
497
+ background-color: #fff;
498
+ transition: left 0.2s;
499
+ }
500
+ .fractal-toggle-thumb--checked {
501
+ left: 16px;
502
+ }
503
+ .fractal-toggle-label {
504
+ font-size: 0.8125rem;
505
+ color: var(--fg-primary);
506
+ user-select: none;
507
+ }
508
+
509
+ /* src/components/Modal/Modal.css */
510
+ .fractal-modal-overlay {
511
+ position: fixed;
512
+ inset: 0;
513
+ background-color: var(--overlay, rgba(0, 0, 0, 0.5));
514
+ display: flex;
515
+ align-items: center;
516
+ justify-content: center;
517
+ z-index: 9998;
518
+ }
519
+ .fractal-modal-panel {
520
+ background: var(--bg-canvas);
521
+ border: 1px solid var(--border-subtle);
522
+ border-radius: var(--radius-lg, 8px);
523
+ box-shadow: var(--shadow-lg);
524
+ padding: var(--space-6, 24px);
525
+ max-width: 90vw;
526
+ font-family: var(--font-sans);
527
+ }
528
+ .fractal-modal-panel--sm {
529
+ width: 420px;
530
+ }
531
+ .fractal-modal-panel--md {
532
+ width: 756px;
533
+ }
534
+ .fractal-modal-panel--lg {
535
+ width: calc(100vw - 4rem);
536
+ height: calc(100vh - 4rem);
537
+ max-height: 100vh;
538
+ display: flex;
539
+ flex-direction: column;
540
+ }
541
+ .fractal-modal-panel--danger {
542
+ border-color: var(--error-subtle);
543
+ }
544
+ .fractal-modal-panel--warn {
545
+ border-color: var(--warning-subtle);
546
+ }
547
+ .fractal-modal-title-row {
548
+ display: flex;
549
+ justify-content: space-between;
550
+ align-items: center;
551
+ margin-bottom: var(--space-4, 16px);
552
+ }
553
+ .fractal-modal-title {
554
+ margin: 0;
555
+ font-size: 1rem;
556
+ font-weight: 600;
557
+ color: var(--fg-primary);
558
+ }
559
+ .fractal-modal-title--danger {
560
+ color: var(--error-default);
561
+ }
562
+ .fractal-modal-title--warn {
563
+ color: var(--warning-default);
564
+ }
565
+ .fractal-modal-close {
566
+ background: none;
567
+ border: none;
568
+ cursor: pointer;
569
+ color: var(--fg-secondary);
570
+ padding: 4px;
571
+ border-radius: var(--radius-sm, 4px);
572
+ display: flex;
573
+ align-items: center;
574
+ }
575
+ .fractal-modal-close:hover {
576
+ color: var(--fg-primary);
577
+ background: var(--bg-surface-1);
578
+ }
579
+ .fractal-modal-body {
580
+ font-size: 0.875rem;
581
+ color: var(--fg-secondary);
582
+ }
583
+ .fractal-modal-body--lg {
584
+ flex: 1;
585
+ min-height: 0;
586
+ overflow: hidden;
587
+ }
588
+ .fractal-modal-footer {
589
+ display: flex;
590
+ justify-content: flex-end;
591
+ gap: var(--space-2, 8px);
592
+ margin-top: var(--space-4, 16px);
593
+ }
594
+
595
+ /* src/components/DataTable/DataTable.css */
596
+ .fractal-datatable {
597
+ font-family: var(--font-sans);
598
+ font-size: 0.875rem;
599
+ }
600
+ .fractal-datatable-surface {
601
+ overflow: hidden;
602
+ border: 1px solid var(--border-subtle);
603
+ border-radius: var(--radius-xl, 12px);
604
+ background: var(--bg-canvas);
605
+ }
606
+ .fractal-datatable-header {
607
+ display: flex;
608
+ align-items: center;
609
+ justify-content: space-between;
610
+ padding: 12px 16px;
611
+ border-bottom: 1px solid var(--border-subtle);
612
+ background: var(--bg-canvas);
613
+ }
614
+ .fractal-datatable-empty {
615
+ display: flex;
616
+ align-items: center;
617
+ justify-content: center;
618
+ padding: var(--space-7, 32px) var(--space-4, 16px);
619
+ font-size: 0.875rem;
620
+ color: var(--fg-secondary);
621
+ background: var(--bg-canvas);
622
+ }
623
+ .fractal-datatable-table {
624
+ width: 100%;
625
+ border-collapse: separate;
626
+ border-spacing: 0;
627
+ font-family: var(--font-sans);
628
+ font-size: 0.875rem;
629
+ }
630
+ .fractal-datatable-thead-row {
631
+ background: var(--bg-surface-1);
632
+ }
633
+ .fractal-datatable-th {
634
+ text-align: left;
635
+ padding: 12px 16px;
636
+ font-size: 0.75rem;
637
+ font-weight: 500;
638
+ color: var(--fg-secondary);
639
+ border-bottom: 1px solid var(--border-subtle);
640
+ vertical-align: middle;
641
+ }
642
+ .fractal-datatable-th + .fractal-datatable-th {
643
+ border-left: 1px solid var(--border-subtle);
644
+ }
645
+ .fractal-datatable-row {
646
+ background: var(--bg-canvas);
647
+ transition: background 120ms ease;
648
+ }
649
+ .fractal-datatable-row:hover {
650
+ background: var(--bg-surface-1);
651
+ }
652
+ .fractal-datatable-td {
653
+ padding: 14px 16px;
654
+ color: var(--fg-primary);
655
+ line-height: 1.55;
656
+ vertical-align: top;
657
+ overflow-wrap: anywhere;
658
+ }
659
+ .fractal-datatable-td + .fractal-datatable-td {
660
+ border-left: 1px solid var(--border-subtle);
661
+ }
662
+ .fractal-datatable-row + .fractal-datatable-row .fractal-datatable-td {
663
+ border-top: 1px solid var(--border-subtle);
664
+ }
665
+ .fractal-datatable--sm .fractal-datatable-th {
666
+ padding: 8px 12px;
667
+ }
668
+ .fractal-datatable--sm .fractal-datatable-td {
669
+ padding: 10px 12px;
670
+ }
671
+ .fractal-datatable--lg .fractal-datatable-th {
672
+ padding: 18px 24px;
673
+ }
674
+ .fractal-datatable--lg .fractal-datatable-td {
675
+ padding: 22px 24px;
676
+ }
677
+
678
+ /* src/components/Dropdown/Dropdown.css */
679
+ .fractal-dropdown {
680
+ position: relative;
681
+ display: inline-block;
682
+ }
683
+ .fractal-dropdown-trigger {
684
+ display: inline-flex;
685
+ align-items: center;
686
+ gap: 8px;
687
+ border-radius: var(--radius-md, 6px);
688
+ border: 1px solid var(--border-subtle);
689
+ background: var(--bg-canvas);
690
+ padding: 8px 12px;
691
+ text-align: left;
692
+ font-size: 0.875rem;
693
+ font-family: var(--font-sans);
694
+ color: var(--fg-primary);
695
+ cursor: pointer;
696
+ transition: background-color 0.15s;
697
+ }
698
+ .fractal-dropdown-trigger--sm {
699
+ gap: 6px;
700
+ padding: 4px 8px;
701
+ font-size: 0.75rem;
702
+ }
703
+ .fractal-dropdown-trigger--tertiary {
704
+ border-color: transparent;
705
+ background: transparent;
706
+ }
707
+ .fractal-dropdown-trigger:hover,
708
+ .fractal-dropdown-trigger--tertiary:hover {
709
+ background: var(--bg-surface-1);
710
+ }
711
+ .fractal-dropdown-trigger:focus-visible {
712
+ outline: none;
713
+ box-shadow: 0 0 0 2px var(--bg-canvas), 0 0 0 4px var(--border-focus);
714
+ }
715
+ .fractal-dropdown-icon {
716
+ display: flex;
717
+ flex-shrink: 0;
718
+ color: var(--fg-primary);
719
+ }
720
+ .fractal-dropdown-icon svg {
721
+ width: 16px;
722
+ height: 16px;
723
+ }
724
+ .fractal-dropdown-icon--trigger svg {
725
+ width: 16px;
726
+ height: 16px;
727
+ }
728
+ .fractal-dropdown-selected-text {
729
+ color: var(--fg-primary);
730
+ }
731
+ .fractal-dropdown-chevron {
732
+ display: flex;
733
+ flex-shrink: 0;
734
+ color: var(--fg-secondary);
735
+ }
736
+ .fractal-dropdown-panel {
737
+ position: absolute;
738
+ z-index: 999999;
739
+ overflow: hidden;
740
+ border-radius: var(--radius-md, 6px);
741
+ border: 1px solid var(--border-subtle);
742
+ background: var(--bg-canvas);
743
+ white-space: nowrap;
744
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
745
+ padding: 4px;
746
+ }
747
+ .fractal-dropdown-label {
748
+ width: 100%;
749
+ padding: 6px 8px;
750
+ font-size: 0.75rem;
751
+ font-weight: 500;
752
+ color: var(--fg-secondary);
753
+ box-sizing: border-box;
754
+ }
755
+ .fractal-dropdown-option {
756
+ display: flex;
757
+ width: 100%;
758
+ align-items: center;
759
+ gap: 8px;
760
+ padding: 6px 8px;
761
+ text-align: left;
762
+ font-size: 0.875rem;
763
+ font-family: var(--font-sans);
764
+ background: none;
765
+ border: none;
766
+ border-radius: var(--radius-sm, 4px);
767
+ cursor: pointer;
768
+ color: var(--fg-primary);
769
+ transition: background-color 0.1s;
770
+ }
771
+ .fractal-dropdown-panel--sm .fractal-dropdown-label,
772
+ .fractal-dropdown-panel--sm .fractal-dropdown-option {
773
+ padding: 4px 8px;
774
+ font-size: 0.75rem;
775
+ }
776
+ .fractal-dropdown-panel--sm .fractal-dropdown-option {
777
+ gap: 6px;
778
+ }
779
+ .fractal-dropdown-option:hover,
780
+ .fractal-dropdown-option:focus-visible {
781
+ background: var(--hover-canvas, var(--bg-surface-2));
782
+ outline: none;
783
+ }
784
+ .fractal-dropdown-separator {
785
+ height: 1px;
786
+ margin: 4px -4px;
787
+ background: var(--border-subtle);
788
+ }
789
+ .fractal-dropdown-option-text {
790
+ color: var(--fg-primary);
791
+ }
792
+ .fractal-dropdown-trailing {
793
+ margin-left: auto;
794
+ display: flex;
795
+ align-items: center;
796
+ padding-left: 8px;
797
+ color: var(--accent-default);
798
+ }
799
+
800
+ /* src/components/Link/Link.css */
801
+ .fractal-link {
802
+ display: inline;
803
+ font-family: var(--font-sans);
804
+ font-weight: 500;
805
+ text-decoration: underline;
806
+ text-underline-offset: 2px;
807
+ cursor: pointer;
808
+ transition: opacity 0.15s ease;
809
+ }
810
+ .fractal-link:hover {
811
+ opacity: 0.7;
812
+ }
813
+ .fractal-link:active {
814
+ opacity: 0.5;
815
+ }
816
+ .fractal-link--default {
817
+ color: var(--fg-primary);
818
+ }
819
+ .fractal-link--muted {
820
+ color: var(--fg-secondary);
821
+ }
822
+ .fractal-link--accent {
823
+ color: var(--accent-default);
824
+ }
825
+ .fractal-link--sm {
826
+ font-size: 0.75rem;
827
+ }
828
+ .fractal-link--md {
829
+ font-size: 0.875rem;
830
+ }
831
+ .fractal-link--lg {
832
+ font-size: 1rem;
833
+ }
834
+
835
+ /* src/components/Chip/Chip.css */
836
+ .fractal-chip {
837
+ display: inline-flex;
838
+ align-items: center;
839
+ border-radius: var(--radius-full);
840
+ padding: 1px 8px;
841
+ font-family: var(--font-mono);
842
+ font-size: 0.6875rem;
843
+ font-weight: 400;
844
+ letter-spacing: -0.01em;
845
+ line-height: 1.5;
846
+ white-space: nowrap;
847
+ background: var(--bg-surface-2);
848
+ border: 1px solid var(--border-subtle);
849
+ color: var(--fg-secondary);
850
+ }
851
+ .fractal-chip--neutral {
852
+ background: var(--bg-surface-2);
853
+ border-color: var(--border-subtle);
854
+ color: var(--fg-secondary);
855
+ }
856
+ .fractal-chip--success {
857
+ background: var(--success-surface);
858
+ border-color: var(--success-subtle);
859
+ color: var(--success-default);
860
+ }
861
+ .fractal-chip--warning {
862
+ background: var(--warning-surface);
863
+ border-color: var(--warning-subtle);
864
+ color: var(--warning-default);
865
+ }
866
+ .fractal-chip--error {
867
+ background: var(--error-surface);
868
+ border-color: var(--error-subtle);
869
+ color: var(--error-default);
870
+ }
871
+ .fractal-chip--info {
872
+ background: var(--accent-surface);
873
+ border-color: var(--accent-subtle);
874
+ color: var(--accent-default);
875
+ }
876
+
877
+ /* src/components/SortableTable/SortableTable.css */
878
+ .fractal-sortable-table {
879
+ font-family: var(--font-sans);
880
+ font-size: 0.875rem;
881
+ }
882
+ .fractal-sortable-table-surface {
883
+ overflow: hidden;
884
+ border: 1px solid var(--border-subtle);
885
+ border-radius: var(--radius-xl, 12px);
886
+ background: var(--bg-canvas);
887
+ }
888
+ .fractal-sortable-table-header {
889
+ display: flex;
890
+ align-items: center;
891
+ justify-content: space-between;
892
+ padding: 12px 16px;
893
+ border-bottom: 1px solid var(--border-subtle);
894
+ background: var(--bg-canvas);
895
+ }
896
+ .fractal-sortable-table-empty {
897
+ display: flex;
898
+ align-items: center;
899
+ justify-content: center;
900
+ padding: var(--space-7, 32px) var(--space-4, 16px);
901
+ font-size: 0.875rem;
902
+ color: var(--fg-secondary);
903
+ background: var(--bg-canvas);
904
+ }
905
+ .fractal-sortable-table-table {
906
+ width: 100%;
907
+ border-collapse: separate;
908
+ border-spacing: 0;
909
+ font-family: var(--font-sans);
910
+ font-size: 0.875rem;
911
+ }
912
+ .fractal-sortable-table-thead-row {
913
+ background: var(--bg-surface-1);
914
+ }
915
+ .fractal-sortable-table-th {
916
+ text-align: left;
917
+ padding: 12px 16px;
918
+ font-size: 0.75rem;
919
+ font-weight: 500;
920
+ color: var(--fg-secondary);
921
+ border-bottom: 1px solid var(--border-subtle);
922
+ vertical-align: middle;
923
+ white-space: nowrap;
924
+ }
925
+ .fractal-sortable-table-th + .fractal-sortable-table-th {
926
+ border-left: 1px solid var(--border-subtle);
927
+ }
928
+ .fractal-sortable-table-th--sortable {
929
+ padding: 0;
930
+ }
931
+ .fractal-sortable-table-sort-button {
932
+ display: flex;
933
+ align-items: center;
934
+ gap: 6px;
935
+ width: 100%;
936
+ background: none;
937
+ border: 0;
938
+ padding: 12px 16px;
939
+ margin: 0;
940
+ font: inherit;
941
+ color: inherit;
942
+ text-align: left;
943
+ cursor: pointer;
944
+ transition: color 0.15s ease, background 0.15s ease;
945
+ }
946
+ .fractal-sortable-table-sort-button:hover {
947
+ color: var(--fg-primary);
948
+ background: var(--hover-surface);
949
+ }
950
+ .fractal-sortable-table-sort-button--active {
951
+ color: var(--accent-default);
952
+ }
953
+ .fractal-sortable-table-sort-button:focus-visible {
954
+ outline: 2px solid var(--border-focus);
955
+ outline-offset: 2px;
956
+ border-radius: 2px;
957
+ }
958
+ .fractal-sortable-table-sort-icon {
959
+ display: inline-flex;
960
+ align-items: center;
961
+ color: var(--fg-tertiary, var(--fg-secondary));
962
+ opacity: 0;
963
+ transition: opacity 0.15s ease, color 0.15s ease;
964
+ }
965
+ .fractal-sortable-table-sort-button:hover .fractal-sortable-table-sort-icon,
966
+ .fractal-sortable-table-sort-button:focus-visible .fractal-sortable-table-sort-icon {
967
+ opacity: 1;
968
+ }
969
+ .fractal-sortable-table-sort-button--active .fractal-sortable-table-sort-icon {
970
+ opacity: 1;
971
+ color: var(--accent-default);
972
+ }
973
+ .fractal-sortable-table-row {
974
+ background: var(--bg-canvas);
975
+ transition: background 120ms ease;
976
+ }
977
+ .fractal-sortable-table-row:hover {
978
+ background: var(--bg-surface-1);
979
+ }
980
+ .fractal-sortable-table-row + .fractal-sortable-table-row .fractal-sortable-table-td {
981
+ border-top: 1px solid var(--border-subtle);
982
+ }
983
+ .fractal-sortable-table-row--highlighted {
984
+ background: var(--bg-surface-1);
985
+ }
986
+ .fractal-sortable-table-row--highlighted:hover {
987
+ background: var(--bg-surface-2);
988
+ }
989
+ .fractal-sortable-table-td {
990
+ padding: 14px 16px;
991
+ color: var(--fg-primary);
992
+ line-height: 1.55;
993
+ vertical-align: top;
994
+ overflow-wrap: anywhere;
995
+ }
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,
1000
+ .fractal-sortable-table--sm .fractal-sortable-table-sort-button {
1001
+ padding: 8px 12px;
1002
+ }
1003
+ .fractal-sortable-table--sm .fractal-sortable-table-td {
1004
+ padding: 10px 12px;
1005
+ }
1006
+ .fractal-sortable-table--lg .fractal-sortable-table-th,
1007
+ .fractal-sortable-table--lg .fractal-sortable-table-sort-button {
1008
+ padding: 18px 24px;
1009
+ }
1010
+ .fractal-sortable-table--lg .fractal-sortable-table-td {
1011
+ padding: 22px 24px;
1012
+ }
1013
+
1014
+ /* src/components/Tabs/Tabs.css */
1015
+ .fractal-tabs {
1016
+ font-family: var(--font-sans);
1017
+ font-size: 0.875rem;
1018
+ }
1019
+ .fractal-tabs-list {
1020
+ display: flex;
1021
+ gap: 24px;
1022
+ border-bottom: 1px solid var(--border-subtle);
1023
+ margin-bottom: 16px;
1024
+ }
1025
+ .fractal-tabs-trigger {
1026
+ position: relative;
1027
+ display: inline-flex;
1028
+ align-items: center;
1029
+ gap: 6px;
1030
+ padding: 10px 0;
1031
+ background: none;
1032
+ border: 0;
1033
+ font: inherit;
1034
+ font-size: 0.875rem;
1035
+ font-weight: 400;
1036
+ color: var(--fg-secondary);
1037
+ cursor: pointer;
1038
+ transition: color 0.15s ease, box-shadow 0.15s ease;
1039
+ box-shadow: inset 0 -1px 0 transparent;
1040
+ margin-bottom: -1px;
1041
+ }
1042
+ .fractal-tabs-trigger:hover:not(.fractal-tabs-trigger--active):not(.fractal-tabs-trigger--disabled) {
1043
+ color: var(--fg-primary);
1044
+ }
1045
+ .fractal-tabs-trigger:focus-visible {
1046
+ outline: 2px solid var(--border-focus);
1047
+ outline-offset: 2px;
1048
+ border-radius: 2px;
1049
+ }
1050
+ .fractal-tabs-trigger--active {
1051
+ color: var(--accent-default);
1052
+ font-weight: 500;
1053
+ box-shadow: inset 0 -1px 0 var(--accent-default);
1054
+ }
1055
+ .fractal-tabs-trigger--disabled {
1056
+ color: var(--fg-disabled, var(--fg-secondary));
1057
+ opacity: 0.5;
1058
+ cursor: not-allowed;
1059
+ }
1060
+ .fractal-tabs-panel {
1061
+ font-size: 0.875rem;
1062
+ color: var(--fg-primary);
1063
+ }
1064
+ .fractal-tabs-panel[hidden] {
1065
+ display: none;
1066
+ }
1067
+
1068
+ /* src/components/Disclosure/Disclosure.css */
1069
+ .fractal-disclosure {
1070
+ font-family: var(--font-sans);
1071
+ font-size: 0.875rem;
1072
+ }
1073
+ .fractal-disclosure--card {
1074
+ border: 1px solid var(--border-subtle);
1075
+ border-radius: 8px;
1076
+ background: var(--bg-canvas);
1077
+ overflow: hidden;
1078
+ }
1079
+ .fractal-disclosure-trigger {
1080
+ display: flex;
1081
+ align-items: center;
1082
+ gap: 8px;
1083
+ width: 100%;
1084
+ padding: 12px 16px;
1085
+ background: transparent;
1086
+ border: 0;
1087
+ font: inherit;
1088
+ font-size: 0.875rem;
1089
+ font-weight: 500;
1090
+ color: var(--fg-primary);
1091
+ text-align: left;
1092
+ cursor: pointer;
1093
+ transition: background 0.15s ease;
1094
+ }
1095
+ .fractal-disclosure-trigger:hover {
1096
+ background: var(--bg-surface-1);
1097
+ }
1098
+ .fractal-disclosure-trigger:focus-visible {
1099
+ outline: 2px solid var(--border-focus);
1100
+ outline-offset: -2px;
1101
+ }
1102
+ .fractal-disclosure--open .fractal-disclosure-trigger {
1103
+ border-bottom: 1px solid var(--border-subtle);
1104
+ }
1105
+ .fractal-disclosure-icon {
1106
+ display: inline-flex;
1107
+ align-items: center;
1108
+ color: var(--fg-secondary);
1109
+ flex-shrink: 0;
1110
+ }
1111
+ .fractal-disclosure-title {
1112
+ flex: 1;
1113
+ min-width: 0;
1114
+ }
1115
+ .fractal-disclosure-meta {
1116
+ font-size: 0.75rem;
1117
+ font-weight: 400;
1118
+ color: var(--fg-secondary);
1119
+ flex-shrink: 0;
1120
+ }
1121
+ .fractal-disclosure-panel[hidden] {
1122
+ display: none;
1123
+ }
1124
+ .fractal-disclosure-panel-inner {
1125
+ padding: 16px;
1126
+ color: var(--fg-primary);
1127
+ font-size: 0.875rem;
1128
+ line-height: 1.55;
1129
+ }
1130
+ .fractal-disclosure:not(.fractal-disclosure--card) .fractal-disclosure-trigger {
1131
+ padding: 8px 0;
1132
+ }
1133
+ .fractal-disclosure:not(.fractal-disclosure--card).fractal-disclosure--open .fractal-disclosure-trigger {
1134
+ border-bottom: 0;
1135
+ }
1136
+ .fractal-disclosure:not(.fractal-disclosure--card) .fractal-disclosure-panel-inner {
1137
+ padding: 4px 0 12px 24px;
1138
+ }
1139
+
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 {
1155
+ display: flex;
1156
+ min-height: 56px;
1157
+ align-items: center;
1158
+ padding: 0 var(--space-4);
1159
+ border-bottom: 1px solid var(--border-subtle);
1160
+ }
1161
+ .fractal-sidebar__brand {
1162
+ display: inline-flex;
1163
+ min-width: 0;
1164
+ align-items: center;
1165
+ gap: var(--space-2);
1166
+ padding: var(--space-1);
1167
+ border: 0;
1168
+ border-radius: var(--radius-md);
1169
+ background: transparent;
1170
+ color: var(--fg-primary);
1171
+ cursor: pointer;
1172
+ font: inherit;
1173
+ text-align: left;
1174
+ transition: background-color var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out);
1175
+ }
1176
+ .fractal-sidebar__brand:hover {
1177
+ background: var(--nav-hover);
1178
+ }
1179
+ .fractal-sidebar__brand:active {
1180
+ transform: scale(0.98);
1181
+ }
1182
+ .fractal-sidebar__brand:focus-visible,
1183
+ .fractal-sidebar__nav-item:focus-visible {
1184
+ outline: 2px solid var(--border-focus);
1185
+ outline-offset: 2px;
1186
+ }
1187
+ .fractal-sidebar__nav {
1188
+ display: flex;
1189
+ flex: 1;
1190
+ flex-direction: column;
1191
+ gap: var(--space-4);
1192
+ overflow-y: auto;
1193
+ padding: var(--space-3) var(--space-2);
1194
+ }
1195
+ .fractal-sidebar__section {
1196
+ display: flex;
1197
+ flex-direction: column;
1198
+ gap: var(--space-1);
1199
+ }
1200
+ .fractal-sidebar__section + .fractal-sidebar__section {
1201
+ padding-top: var(--space-4);
1202
+ border-top: 1px solid var(--border-subtle);
1203
+ }
1204
+ .fractal-sidebar__nav-item {
1205
+ display: flex;
1206
+ width: 100%;
1207
+ min-height: 36px;
1208
+ align-items: center;
1209
+ gap: 10px;
1210
+ padding: 8px 10px;
1211
+ border: 0;
1212
+ border-radius: var(--radius-md);
1213
+ background: transparent;
1214
+ color: var(--fg-secondary);
1215
+ cursor: pointer;
1216
+ font-family: var(--font-sans);
1217
+ font-size: 0.875rem;
1218
+ font-weight: 400;
1219
+ line-height: 1.25;
1220
+ text-align: left;
1221
+ transition:
1222
+ background-color var(--duration-fast) var(--ease-out),
1223
+ color var(--duration-fast) var(--ease-out),
1224
+ transform var(--duration-fast) var(--ease-out);
1225
+ }
1226
+ .fractal-sidebar__nav-item:hover {
1227
+ background: var(--nav-hover);
1228
+ color: var(--fg-primary);
1229
+ }
1230
+ .fractal-sidebar__nav-item[data-active] {
1231
+ background: var(--nav-selected);
1232
+ color: var(--fg-primary);
1233
+ font-weight: 500;
1234
+ }
1235
+ .fractal-sidebar__nav-item:active {
1236
+ transform: scale(0.99);
1237
+ }
1238
+ .fractal-sidebar__nav-item-icon {
1239
+ display: inline-flex;
1240
+ width: 18px;
1241
+ height: 18px;
1242
+ flex: 0 0 18px;
1243
+ align-items: center;
1244
+ justify-content: center;
1245
+ }
1246
+ .fractal-sidebar__nav-item-icon > svg {
1247
+ width: 18px;
1248
+ height: 18px;
1249
+ }
1250
+ .fractal-sidebar__nav-item-label {
1251
+ min-width: 0;
1252
+ flex: 1;
1253
+ overflow: hidden;
1254
+ text-overflow: ellipsis;
1255
+ white-space: nowrap;
1256
+ }
1257
+ .fractal-sidebar__nav-item-end {
1258
+ color: var(--fg-tertiary);
1259
+ font-family: var(--font-mono);
1260
+ font-size: 0.6875rem;
1261
+ line-height: 1;
1262
+ }
1263
+ .fractal-sidebar__footer {
1264
+ padding: var(--space-2);
1265
+ border-top: 1px solid var(--border-subtle);
1266
+ }
1267
+ @media (prefers-reduced-motion: reduce) {
1268
+ .fractal-sidebar__brand,
1269
+ .fractal-sidebar__nav-item {
1270
+ transition: none;
1271
+ }
1272
+ }
1273
+ /*# sourceMappingURL=index.css.map */