flowcloudai-ui 0.0.0 → 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,3365 @@
1
+ /* src/components/Button/Button.css */
2
+ .fc-btn {
3
+ --btn-bg: transparent;
4
+ --btn-bg-hover: var(--fc-color-bg-secondary, #f3f4f6);
5
+ --btn-bg-active: var(--fc-color-bg-tertiary, #e5e7eb);
6
+ --btn-color: var(--fc-color-text, #111827);
7
+ --btn-color-hover: var(--btn-color);
8
+ --btn-color-active: var(--fc-color-text-secondary, #6b7280);
9
+ --btn-border: transparent;
10
+ --btn-border-hover: transparent;
11
+ display: inline-flex;
12
+ align-items: center;
13
+ justify-content: center;
14
+ gap: var(--fc-space-sm, 8px);
15
+ padding: var(--fc-space-md, 12px) var(--fc-space-lg, 16px);
16
+ font-family: var(--fc-font-family, system-ui), serif;
17
+ font-size: var(--fc-font-size-md, 16px);
18
+ font-weight: var(--fc-font-weight-medium, 500);
19
+ line-height: var(--fc-line-height-tight, 1.25);
20
+ border-radius: var(--fc-radius-md, 8px);
21
+ border: 1px solid var(--btn-border);
22
+ cursor: pointer;
23
+ text-decoration: none;
24
+ white-space: nowrap;
25
+ user-select: none;
26
+ background-color: var(--btn-bg);
27
+ color: var(--btn-color);
28
+ transition: all 0.2s ease;
29
+ }
30
+ .fc-btn:hover:not(:disabled):not(.is-disabled) {
31
+ background-color: var(--btn-bg-hover);
32
+ color: var(--btn-color-hover);
33
+ border-color: var(--btn-border-hover);
34
+ }
35
+ .fc-btn:active:not(:disabled):not(.is-disabled) {
36
+ background-color: var(--btn-bg-active);
37
+ color: var(--btn-color-active);
38
+ transform: scale(0.98);
39
+ }
40
+ .fc-btn:disabled,
41
+ .fc-btn.is-disabled {
42
+ opacity: 0.5;
43
+ cursor: not-allowed;
44
+ pointer-events: none;
45
+ }
46
+ .fc-btn--primary {
47
+ --btn-bg: var(--fc-color-primary, #6366f1);
48
+ --btn-bg-hover: var(--fc-color-primary-hover, #4f46e5);
49
+ --btn-bg-active: var(--fc-color-primary-active, #4338ca);
50
+ --btn-color: var(--fc-color-text-on-primary, #ffffff);
51
+ --btn-color-hover: var(--fc-color-text-on-primary, #ffffff);
52
+ --btn-color-active: var(--fc-color-text-on-primary, #ffffff);
53
+ --btn-border: var(--fc-color-primary, #6366f1);
54
+ --btn-border-hover: var(--fc-color-primary-hover, #4f46e5);
55
+ }
56
+ .fc-btn--secondary {
57
+ --btn-bg: var(--fc-color-bg-secondary, #f3f4f6);
58
+ --btn-bg-hover: var(--fc-color-bg-tertiary, #e5e7eb);
59
+ --btn-bg-active: var(--fc-color-bg-tertiary, #e5e7eb);
60
+ --btn-color: var(--fc-color-text, #111827);
61
+ --btn-color-hover: var(--fc-color-text, #111827);
62
+ --btn-color-active: var(--fc-color-text-secondary, #6b7280);
63
+ --btn-border: var(--fc-color-border, #e5e7eb);
64
+ --btn-border-hover: var(--fc-color-border-hover, #d1d5db);
65
+ }
66
+ .fc-btn--outline {
67
+ --btn-bg: transparent;
68
+ --btn-bg-hover: var(--fc-color-primary-subtle, #eff6ff);
69
+ --btn-bg-active: var(--fc-color-primary-subtle, #eff6ff);
70
+ --btn-color: var(--fc-color-primary, #6366f1);
71
+ --btn-color-hover: var(--fc-color-primary, #6366f1);
72
+ --btn-color-active: var(--fc-color-primary-hover, #4f46e5);
73
+ --btn-border: var(--fc-color-primary, #6366f1);
74
+ --btn-border-hover: var(--fc-color-primary-hover, #4f46e5);
75
+ }
76
+ .fc-btn--ghost {
77
+ --btn-bg: transparent;
78
+ --btn-bg-hover: var(--fc-color-bg-secondary, #f3f4f6);
79
+ --btn-bg-active: var(--fc-color-bg-tertiary, #e5e7eb);
80
+ --btn-color: var(--fc-color-text, #111827);
81
+ --btn-color-hover: var(--fc-color-text, #111827);
82
+ --btn-color-active: var(--fc-color-text-secondary, #6b7280);
83
+ --btn-border: transparent;
84
+ --btn-border-hover: transparent;
85
+ }
86
+ .fc-btn--danger {
87
+ --btn-bg: var(--fc-color-danger, #ef4444);
88
+ --btn-bg-hover: var(--fc-color-danger-hover, #dc2626);
89
+ --btn-bg-active: var(--fc-color-danger-hover, #dc2626);
90
+ --btn-color: var(--fc-color-text-on-primary, #ffffff);
91
+ --btn-color-hover: var(--fc-color-text-on-primary, #ffffff);
92
+ --btn-color-active: var(--fc-color-text-on-primary, #ffffff);
93
+ --btn-border: var(--fc-color-danger, #ef4444);
94
+ --btn-border-hover: var(--fc-color-danger-hover, #dc2626);
95
+ }
96
+ .fc-btn--danger.fc-btn--outline,
97
+ .fc-btn--danger.fc-btn--ghost {
98
+ --btn-bg: transparent;
99
+ --btn-bg-hover: var(--fc-color-danger-bg, #fee2e2);
100
+ --btn-bg-active: var(--fc-color-danger-bg, #fee2e2);
101
+ --btn-color: var(--fc-color-danger, #ef4444);
102
+ --btn-color-hover: var(--fc-color-danger, #ef4444);
103
+ --btn-color-active: var(--fc-color-danger, #ef4444);
104
+ --btn-border: var(--fc-color-danger, #ef4444);
105
+ --btn-border-hover: var(--fc-color-danger, #ef4444);
106
+ }
107
+ .fc-btn--danger.fc-btn--ghost {
108
+ --btn-border: transparent;
109
+ }
110
+ .fc-btn--success {
111
+ --btn-bg: var(--fc-color-success, #10b981);
112
+ --btn-bg-hover: var(--fc-color-success-hover, #059669);
113
+ --btn-bg-active: var(--fc-color-success-hover, #059669);
114
+ --btn-color: var(--fc-color-text-on-primary, #ffffff);
115
+ --btn-color-hover: var(--fc-color-text-on-primary, #ffffff);
116
+ --btn-color-active: var(--fc-color-text-on-primary, #ffffff);
117
+ --btn-border: var(--fc-color-success, #10b981);
118
+ --btn-border-hover: var(--fc-color-success-hover, #059669);
119
+ }
120
+ .fc-btn--success.fc-btn--outline {
121
+ --btn-bg: transparent;
122
+ --btn-bg-hover: var(--fc-color-success-bg, #d1fae5);
123
+ --btn-bg-active: var(--fc-color-success-bg, #d1fae5);
124
+ --btn-color: var(--fc-color-success, #10b981);
125
+ --btn-color-hover: var(--fc-color-success, #10b981);
126
+ --btn-color-active: var(--fc-color-success, #10b981);
127
+ --btn-border: var(--fc-color-success, #10b981);
128
+ --btn-border-hover: var(--fc-color-success, #10b981);
129
+ }
130
+ .fc-btn--warning {
131
+ --btn-bg: var(--fc-color-warning, #f59e0b);
132
+ --btn-bg-hover: var(--fc-color-warning-hover, #d97706);
133
+ --btn-bg-active: var(--fc-color-warning-hover, #d97706);
134
+ --btn-color: var(--fc-color-text-on-primary, #ffffff);
135
+ --btn-color-hover: var(--fc-color-text-on-primary, #ffffff);
136
+ --btn-color-active: var(--fc-color-text-on-primary, #ffffff);
137
+ --btn-border: var(--fc-color-warning, #f59e0b);
138
+ --btn-border-hover: var(--fc-color-warning-hover, #d97706);
139
+ }
140
+ .fc-btn--warning.fc-btn--outline {
141
+ --btn-bg: transparent;
142
+ --btn-bg-hover: var(--fc-color-warning-bg, #fef3c7);
143
+ --btn-bg-active: var(--fc-color-warning-bg, #fef3c7);
144
+ --btn-color: var(--fc-color-warning, #f59e0b);
145
+ --btn-color-hover: var(--fc-color-warning, #f59e0b);
146
+ --btn-color-active: var(--fc-color-warning, #f59e0b);
147
+ --btn-border: var(--fc-color-warning, #f59e0b);
148
+ --btn-border-hover: var(--fc-color-warning, #f59e0b);
149
+ }
150
+ .fc-btn--xs {
151
+ padding: var(--fc-space-xs, 4px) var(--fc-space-sm, 8px);
152
+ font-size: var(--fc-font-size-xs, 12px);
153
+ border-radius: var(--fc-radius-sm, 4px);
154
+ }
155
+ .fc-btn--sm {
156
+ padding: var(--fc-space-sm, 8px) var(--fc-space-md, 12px);
157
+ font-size: var(--fc-font-size-sm, 14px);
158
+ border-radius: var(--fc-radius-sm, 4px);
159
+ }
160
+ .fc-btn--md {
161
+ padding: var(--fc-space-md, 12px) var(--fc-space-lg, 16px);
162
+ font-size: var(--fc-font-size-md, 16px);
163
+ border-radius: var(--fc-radius-md, 8px);
164
+ }
165
+ .fc-btn--lg {
166
+ padding: var(--fc-space-lg, 16px) var(--fc-space-xl, 20px);
167
+ font-size: var(--fc-font-size-lg, 18px);
168
+ border-radius: var(--fc-radius-lg, 12px);
169
+ }
170
+ .fc-btn--xl {
171
+ padding: var(--fc-space-xl, 20px) var(--fc-space-2xl, 24px);
172
+ font-size: var(--fc-font-size-xl, 20px);
173
+ border-radius: var(--fc-radius-lg, 12px);
174
+ }
175
+ .fc-btn--square,
176
+ .fc-btn--circle,
177
+ .fc-btn--icon-only {
178
+ aspect-ratio: 1;
179
+ padding: var(--fc-space-md, 12px);
180
+ }
181
+ .fc-btn--circle {
182
+ border-radius: var(--fc-radius-full, 9999px);
183
+ }
184
+ .fc-btn--block {
185
+ display: flex;
186
+ width: 100%;
187
+ }
188
+ .fc-btn--icon-only.fc-btn--xs {
189
+ padding: var(--fc-space-xs, 4px);
190
+ }
191
+ .fc-btn--icon-only.fc-btn--sm {
192
+ padding: var(--fc-space-sm, 8px);
193
+ }
194
+ .fc-btn--icon-only.fc-btn--md {
195
+ padding: var(--fc-space-md, 12px);
196
+ }
197
+ .fc-btn--icon-only.fc-btn--lg {
198
+ padding: var(--fc-space-lg, 16px);
199
+ }
200
+ .fc-btn--icon-only.fc-btn--xl {
201
+ padding: var(--fc-space-xl, 20px);
202
+ }
203
+ .fc-btn__icon {
204
+ display: inline-flex;
205
+ align-items: center;
206
+ justify-content: center;
207
+ width: 1em;
208
+ height: 1em;
209
+ flex-shrink: 0;
210
+ }
211
+ .fc-btn-group {
212
+ display: inline-flex;
213
+ }
214
+ .fc-btn-group .fc-btn {
215
+ border-radius: 0;
216
+ }
217
+ .fc-btn-group .fc-btn:first-child {
218
+ border-radius: var(--fc-radius-md, 8px) 0 0 var(--fc-radius-md, 8px);
219
+ }
220
+ .fc-btn-group .fc-btn:last-child {
221
+ border-radius: 0 var(--fc-radius-md, 8px) var(--fc-radius-md, 8px) 0;
222
+ }
223
+ .fc-btn-group .fc-btn:not(:last-child) {
224
+ border-right-width: 0;
225
+ }
226
+ .fc-btn-group .fc-btn:hover {
227
+ z-index: 1;
228
+ }
229
+ .fc-btn-toolbar {
230
+ display: flex;
231
+ flex-wrap: wrap;
232
+ gap: var(--fc-space-sm, 8px);
233
+ align-items: center;
234
+ }
235
+ .fc-btn-toolbar--right {
236
+ justify-content: flex-end;
237
+ }
238
+ .fc-btn-toolbar--center {
239
+ justify-content: center;
240
+ }
241
+ .fc-btn-toolbar--between {
242
+ justify-content: space-between;
243
+ }
244
+
245
+ /* src/components/Button/CheckButton.css */
246
+ .fc-check {
247
+ --track-w: 2.75rem;
248
+ --track-h: 1.5rem;
249
+ --label-size: var(--fc-font-size-md);
250
+ display: inline-flex;
251
+ align-items: center;
252
+ gap: var(--fc-space-sm);
253
+ cursor: pointer;
254
+ user-select: none;
255
+ outline: none;
256
+ }
257
+ .fc-check--sm {
258
+ --track-w: 2.25rem;
259
+ --track-h: 1.25rem;
260
+ --label-size: var(--fc-font-size-sm);
261
+ }
262
+ .fc-check--lg {
263
+ --track-w: 3.5rem;
264
+ --track-h: 1.875rem;
265
+ --label-size: var(--fc-font-size-lg);
266
+ }
267
+ .fc-check__track {
268
+ position: relative;
269
+ flex-shrink: 0;
270
+ width: var(--track-w);
271
+ height: var(--track-h);
272
+ background-color: var(--check-track-bg, var(--fc-color-bg-tertiary));
273
+ border-radius: var(--fc-radius-full);
274
+ transition: background-color var(--fc-transition);
275
+ }
276
+ .fc-check--checked .fc-check__track {
277
+ background-color: var(--check-track-bg-checked, var(--fc-color-primary));
278
+ }
279
+ .fc-check:focus-visible .fc-check__track {
280
+ box-shadow: 0 0 0 2px var(--fc-color-bg), 0 0 0 4px var(--fc-color-border-focus);
281
+ }
282
+ .fc-check__thumb {
283
+ position: absolute;
284
+ top: 2px;
285
+ left: 2px;
286
+ width: calc(var(--track-h) - 4px);
287
+ height: calc(var(--track-h) - 4px);
288
+ display: flex;
289
+ align-items: center;
290
+ justify-content: center;
291
+ background-color: var(--check-thumb-bg, var(--fc-color-bg-elevated));
292
+ border-radius: var(--fc-radius-full);
293
+ box-shadow: var(--fc-shadow-sm);
294
+ transition: transform var(--fc-transition-slow) cubic-bezier(0.34, 1.56, 0.64, 1);
295
+ }
296
+ .fc-check--checked .fc-check__thumb {
297
+ transform: translateX(calc(var(--track-w) - var(--track-h)));
298
+ }
299
+ .fc-check__track:active .fc-check__thumb {
300
+ transform: scale(0.95);
301
+ }
302
+ .fc-check--checked .fc-check__track:active .fc-check__thumb {
303
+ transform: translateX(calc(var(--track-w) - var(--track-h))) scale(0.95);
304
+ }
305
+ .fc-check__thumb-inner {
306
+ width: 40%;
307
+ height: 40%;
308
+ background-color: var(--fc-color-text-tertiary);
309
+ border-radius: var(--fc-radius-full);
310
+ opacity: 0;
311
+ transform: scale(0);
312
+ transition:
313
+ opacity var(--fc-transition),
314
+ transform var(--fc-transition),
315
+ background-color var(--fc-transition);
316
+ }
317
+ .fc-check--checked .fc-check__thumb-inner {
318
+ opacity: 1;
319
+ transform: scale(1);
320
+ background-color: var(--check-thumb-dot-color, var(--fc-color-primary));
321
+ }
322
+ .fc-check__label {
323
+ font-size: var(--label-size);
324
+ font-weight: var(--fc-font-weight-medium);
325
+ line-height: var(--fc-line-height-tight);
326
+ color: var(--check-label-color, var(--fc-color-text));
327
+ }
328
+ .fc-check--disabled {
329
+ cursor: not-allowed;
330
+ opacity: 0.6;
331
+ }
332
+ .fc-check--disabled .fc-check__track {
333
+ cursor: not-allowed;
334
+ background-color: var(--fc-color-bg-secondary);
335
+ }
336
+ .fc-check--disabled.fc-check--checked .fc-check__track {
337
+ background-color: var(--check-track-bg-checked, var(--fc-color-primary));
338
+ opacity: 0.5;
339
+ }
340
+ .fc-check--disabled .fc-check__label {
341
+ color: var(--fc-color-text-disabled);
342
+ }
343
+
344
+ /* src/components/Box/RollingBox.css */
345
+ .fc-roll {
346
+ --roll-thumb: transparent;
347
+ --roll-thumb-hover: var(--fc-color-text-tertiary);
348
+ --roll-thumb-active: var(--fc-color-text-secondary);
349
+ --roll-track: transparent;
350
+ --roll-size: 10px;
351
+ position: relative;
352
+ width: 100%;
353
+ height: 100%;
354
+ scrollbar-width: thin;
355
+ scrollbar-color: var(--roll-thumb) var(--roll-track);
356
+ -webkit-overflow-scrolling: touch;
357
+ }
358
+ .fc-roll__content {
359
+ min-width: 100%;
360
+ min-height: 100%;
361
+ }
362
+ .fc-roll--vertical {
363
+ overflow-y: auto;
364
+ overflow-x: hidden;
365
+ }
366
+ .fc-roll--horizontal {
367
+ overflow-x: auto;
368
+ overflow-y: hidden;
369
+ }
370
+ .fc-roll--horizontal .fc-roll__content {
371
+ display: inline-block;
372
+ min-width: max-content;
373
+ }
374
+ .fc-roll--size-thin {
375
+ --roll-size: 0.5rem;
376
+ }
377
+ .fc-roll--size-thick {
378
+ --roll-size: 0.6rem;
379
+ }
380
+ .fc-roll::-webkit-scrollbar {
381
+ width: var(--roll-size);
382
+ height: var(--roll-size);
383
+ background: transparent;
384
+ }
385
+ .fc-roll::-webkit-scrollbar-track {
386
+ background: var(--roll-track);
387
+ border-radius: var(--fc-radius-full);
388
+ }
389
+ .fc-roll::-webkit-scrollbar-thumb {
390
+ background: var(--roll-thumb);
391
+ border-radius: var(--fc-radius-full);
392
+ border: 2px solid transparent;
393
+ background-clip: padding-box;
394
+ }
395
+ .fc-roll--thumb-show {
396
+ --roll-thumb: var(--fc-color-text-tertiary);
397
+ }
398
+ .fc-roll--thumb-show:hover {
399
+ --roll-thumb: var(--fc-color-text-secondary);
400
+ }
401
+ .fc-roll--thumb-hide {
402
+ scrollbar-width: none;
403
+ -ms-overflow-style: none;
404
+ }
405
+ .fc-roll--thumb-hide::-webkit-scrollbar {
406
+ display: none;
407
+ }
408
+ .fc-roll--thumb-auto:hover {
409
+ --roll-thumb: var(--roll-thumb-hover);
410
+ }
411
+ .fc-roll--thumb-auto.fc-roll--scrolling {
412
+ --roll-thumb: var(--roll-thumb-active);
413
+ }
414
+ .fc-roll--track {
415
+ --roll-track: var(--fc-color-bg-tertiary);
416
+ }
417
+ .fc-roll--track.fc-roll--thumb-auto {
418
+ --roll-track: transparent;
419
+ }
420
+ .fc-roll--track.fc-roll--thumb-auto:hover,
421
+ .fc-roll--track.fc-roll--thumb-auto.fc-roll--scrolling {
422
+ --roll-track: var(--fc-color-bg-tertiary);
423
+ }
424
+
425
+ /* src/components/Bar/SideBar.css */
426
+ .fc-sidebar {
427
+ --sidebar-width: 240px;
428
+ --sidebar-collapsed-width: 64px;
429
+ display: flex;
430
+ flex-direction: column;
431
+ width: var(--sidebar-width);
432
+ height: 100vh;
433
+ background: var(--fc-color-bg-secondary);
434
+ border-right: 1px solid var(--fc-color-border);
435
+ overflow: hidden;
436
+ transition: width var(--fc-transition-slow, 250ms ease);
437
+ }
438
+ .fc-sidebar__header {
439
+ display: flex;
440
+ justify-content: flex-end;
441
+ padding: var(--fc-space-md, 12px);
442
+ border-bottom: 1px solid var(--fc-color-border);
443
+ }
444
+ .fc-sidebar__collapse-btn {
445
+ width: 32px;
446
+ height: 32px;
447
+ display: flex;
448
+ align-items: center;
449
+ justify-content: center;
450
+ border: none;
451
+ background: transparent;
452
+ color: var(--fc-color-text-secondary);
453
+ cursor: pointer;
454
+ border-radius: var(--fc-radius-md, 8px);
455
+ transition: background var(--fc-transition, 150ms ease), color var(--fc-transition, 150ms ease);
456
+ }
457
+ .fc-sidebar__collapse-btn:hover {
458
+ background: var(--fc-color-bg-tertiary);
459
+ color: var(--fc-color-text);
460
+ }
461
+ .fc-sidebar__collapse-icon {
462
+ flex-shrink: 0;
463
+ transition: transform var(--fc-transition, 150ms ease);
464
+ }
465
+ .fc-sidebar__menu {
466
+ flex: 1;
467
+ overflow-y: auto;
468
+ padding: var(--fc-space-sm, 8px) 0;
469
+ }
470
+ .fc-sidebar__item {
471
+ display: flex;
472
+ align-items: center;
473
+ gap: 0;
474
+ padding: var(--fc-space-md, 12px) 0;
475
+ margin: 2px var(--fc-space-sm, 8px);
476
+ border-radius: var(--fc-radius-md, 8px);
477
+ cursor: pointer;
478
+ background: var(--sidebar-item-bg, transparent);
479
+ color: var(--sidebar-item-color, var(--fc-color-text-secondary));
480
+ text-decoration: none;
481
+ white-space: nowrap;
482
+ overflow: hidden;
483
+ text-overflow: ellipsis;
484
+ transition: background var(--fc-transition, 150ms ease), color var(--fc-transition, 150ms ease);
485
+ }
486
+ .fc-sidebar__item:hover:not(.fc-sidebar__item--disabled):not(.fc-sidebar__item--selected) {
487
+ background: var(--sidebar-item-hover-bg, var(--fc-color-bg-tertiary));
488
+ color: var(--sidebar-item-hover-color, var(--fc-color-text));
489
+ }
490
+ .fc-sidebar__item--selected {
491
+ background: var(--sidebar-item-selected-bg, var(--fc-color-primary-subtle));
492
+ color: var(--sidebar-item-selected-color, var(--fc-color-primary));
493
+ }
494
+ .fc-sidebar__item--selected:hover {
495
+ background: var(--sidebar-item-selected-bg, var(--fc-color-primary-subtle));
496
+ color: var(--sidebar-item-selected-color, var(--fc-color-primary));
497
+ }
498
+ .fc-sidebar__item--disabled {
499
+ opacity: 0.5;
500
+ cursor: not-allowed;
501
+ pointer-events: none;
502
+ }
503
+ .fc-sidebar__icon {
504
+ display: flex;
505
+ align-items: center;
506
+ justify-content: center;
507
+ width: calc(var(--sidebar-collapsed-width) - var(--fc-space-sm, 8px) * 2);
508
+ height: 20px;
509
+ flex-shrink: 0;
510
+ }
511
+ .fc-sidebar__icon svg {
512
+ width: 20px;
513
+ height: 20px;
514
+ color: inherit;
515
+ fill: none;
516
+ stroke: currentColor;
517
+ }
518
+ .fc-sidebar__label {
519
+ flex: 1;
520
+ min-width: 0;
521
+ font-size: var(--fc-font-size-md, 14px);
522
+ padding-right: var(--fc-space-lg, 16px);
523
+ overflow: hidden;
524
+ text-overflow: ellipsis;
525
+ opacity: 1;
526
+ transition: opacity var(--fc-transition-slow, 250ms ease);
527
+ }
528
+ .fc-sidebar--collapsed .fc-sidebar__label {
529
+ opacity: 0;
530
+ padding-right: 0;
531
+ }
532
+ [data-theme=dark] .fc-sidebar {
533
+ background: var(--fc-color-bg-secondary);
534
+ border-right-color: var(--fc-color-border);
535
+ }
536
+ [data-theme=dark] .fc-sidebar__item--selected {
537
+ background: var(--sidebar-item-selected-bg, var(--fc-color-primary-subtle));
538
+ color: var(--sidebar-item-selected-color, var(--fc-color-primary));
539
+ }
540
+
541
+ /* src/components/Input/Input.css */
542
+ .fc-input {
543
+ position: relative;
544
+ display: inline-flex;
545
+ align-items: center;
546
+ width: 100%;
547
+ font-family: var(--fc-font-family), serif;
548
+ }
549
+ .fc-input__wrapper {
550
+ position: relative;
551
+ display: flex;
552
+ align-items: center;
553
+ flex: 1;
554
+ background: var(--fc-color-bg);
555
+ border: 1px solid var(--fc-color-border);
556
+ border-radius: var(--fc-radius-md);
557
+ transition: border-color var(--fc-transition), box-shadow var(--fc-transition);
558
+ }
559
+ .fc-input__field {
560
+ width: 100%;
561
+ padding: 0 var(--fc-space-md);
562
+ border: none;
563
+ background: transparent;
564
+ color: var(--fc-color-text);
565
+ font-size: var(--fc-font-size-md);
566
+ line-height: var(--fc-line-height-tight);
567
+ outline: none !important;
568
+ }
569
+ .fc-input__field::placeholder {
570
+ color: var(--fc-color-text-tertiary);
571
+ }
572
+ .fc-input--xs .fc-input__wrapper {
573
+ height: 1.75rem;
574
+ }
575
+ .fc-input--xs .fc-input__field {
576
+ font-size: var(--fc-font-size-xs);
577
+ padding: 0 var(--fc-space-sm);
578
+ padding-top: 0.25rem;
579
+ padding-bottom: 0.25rem;
580
+ }
581
+ .fc-input--sm .fc-input__wrapper {
582
+ height: 2rem;
583
+ }
584
+ .fc-input--sm .fc-input__field {
585
+ font-size: var(--fc-font-size-sm);
586
+ padding-top: 0.375rem;
587
+ padding-bottom: 0.375rem;
588
+ }
589
+ .fc-input--md .fc-input__wrapper {
590
+ height: 2.5rem;
591
+ }
592
+ .fc-input--md .fc-input__field {
593
+ font-size: var(--fc-font-size-md);
594
+ padding-top: 0.5rem;
595
+ padding-bottom: 0.5rem;
596
+ }
597
+ .fc-input--lg .fc-input__wrapper {
598
+ height: 3rem;
599
+ }
600
+ .fc-input--lg .fc-input__field {
601
+ font-size: var(--fc-font-size-lg);
602
+ padding-top: 0.625rem;
603
+ padding-bottom: 0.625rem;
604
+ }
605
+ .fc-input--xl .fc-input__wrapper {
606
+ height: 3.5rem;
607
+ }
608
+ .fc-input--xl .fc-input__field {
609
+ font-size: var(--fc-font-size-xl);
610
+ padding-top: 0.75rem;
611
+ padding-bottom: 0.75rem;
612
+ }
613
+ .fc-input--error .fc-input__wrapper {
614
+ border-color: var(--fc-color-danger);
615
+ background: var(--fc-color-danger-bg);
616
+ }
617
+ .fc-input--warning .fc-input__wrapper {
618
+ border-color: var(--fc-color-warning);
619
+ background: var(--fc-color-warning-bg);
620
+ }
621
+ .fc-input--success .fc-input__wrapper {
622
+ border-color: var(--fc-color-success);
623
+ background: var(--fc-color-success-bg);
624
+ }
625
+ .fc-input:not(.fc-input--disabled):hover .fc-input__wrapper {
626
+ border-color: var(--fc-color-border-hover);
627
+ }
628
+ .fc-input:not(.fc-input--disabled) .fc-input__wrapper:focus-within {
629
+ border-color: var(--fc-color-primary);
630
+ box-shadow: 0 0 0 2px var(--fc-color-primary-subtle);
631
+ }
632
+ .fc-input--error .fc-input__wrapper:focus-within {
633
+ border-color: var(--fc-color-danger);
634
+ box-shadow: 0 0 0 2px var(--fc-color-danger);
635
+ }
636
+ .fc-input--warning .fc-input__wrapper:focus-within {
637
+ border-color: var(--fc-color-warning);
638
+ box-shadow: 0 0 0 2px var(--fc-color-warning);
639
+ }
640
+ .fc-input--success .fc-input__wrapper:focus-within {
641
+ border-color: var(--fc-color-success);
642
+ box-shadow: 0 0 0 2px var(--fc-color-success);
643
+ }
644
+ .fc-input__prefix,
645
+ .fc-input__suffix,
646
+ .fc-input__addon {
647
+ display: flex;
648
+ align-items: center;
649
+ color: var(--fc-color-text-secondary);
650
+ font-size: inherit;
651
+ white-space: nowrap;
652
+ }
653
+ .fc-input__prefix {
654
+ padding-left: var(--fc-space-md);
655
+ margin-right: var(--fc-space-xs);
656
+ }
657
+ .fc-input__suffix {
658
+ margin-right: var(--fc-space-md);
659
+ margin-left: var(--fc-space-sm);
660
+ }
661
+ .fc-input__actions {
662
+ display: flex;
663
+ align-items: center;
664
+ gap: var(--fc-space-xs);
665
+ margin-right: var(--fc-space-sm);
666
+ }
667
+ .fc-input__action {
668
+ display: flex;
669
+ align-items: center;
670
+ justify-content: center;
671
+ width: 1.25rem;
672
+ height: 1.25rem;
673
+ padding: 0;
674
+ border: none;
675
+ background: transparent;
676
+ color: var(--fc-color-text-tertiary);
677
+ cursor: pointer;
678
+ border-radius: var(--fc-radius-sm);
679
+ transition: color var(--fc-transition), background var(--fc-transition);
680
+ }
681
+ .fc-input__action:hover {
682
+ color: var(--fc-color-text);
683
+ background: var(--fc-color-bg-tertiary);
684
+ }
685
+ .fc-input__addon {
686
+ padding: 0 var(--fc-space-md);
687
+ background: var(--fc-color-bg-secondary);
688
+ border: 1px solid var(--fc-color-border);
689
+ height: 100%;
690
+ display: flex;
691
+ align-items: center;
692
+ }
693
+ .fc-input__addon--before {
694
+ border-radius: var(--fc-radius-md) 0 0 var(--fc-radius-md);
695
+ border-right: none;
696
+ }
697
+ .fc-input__addon--after {
698
+ border-radius: 0 var(--fc-radius-md) var(--fc-radius-md) 0;
699
+ border-left: none;
700
+ }
701
+ .fc-input--addon-before .fc-input__wrapper {
702
+ border-top-left-radius: 0;
703
+ border-bottom-left-radius: 0;
704
+ }
705
+ .fc-input--addon-after .fc-input__wrapper {
706
+ border-top-right-radius: 0;
707
+ border-bottom-right-radius: 0;
708
+ }
709
+ .fc-input__helper {
710
+ position: absolute;
711
+ top: 100%;
712
+ left: 0;
713
+ margin-top: var(--fc-space-xs);
714
+ font-size: var(--fc-font-size-xs);
715
+ color: var(--fc-color-text-secondary);
716
+ }
717
+ .fc-input--error .fc-input__helper {
718
+ color: var(--fc-color-danger);
719
+ }
720
+ .fc-input--warning .fc-input__helper {
721
+ color: var(--fc-color-warning);
722
+ }
723
+ .fc-input--success .fc-input__helper {
724
+ color: var(--fc-color-success);
725
+ }
726
+ .fc-input--disabled {
727
+ opacity: 0.6;
728
+ cursor: not-allowed;
729
+ }
730
+ .fc-input--disabled .fc-input__field {
731
+ cursor: not-allowed;
732
+ }
733
+
734
+ /* src/components/Slider/Slider.css */
735
+ .fc-slider {
736
+ position: relative;
737
+ user-select: none;
738
+ touch-action: none;
739
+ }
740
+ .fc-slider--horizontal {
741
+ width: 100%;
742
+ height: 2rem;
743
+ padding: 0.5rem 0;
744
+ }
745
+ .fc-slider--vertical {
746
+ height: 200px;
747
+ width: 2rem;
748
+ padding: 0 0.5rem;
749
+ display: inline-flex;
750
+ }
751
+ .fc-slider__track {
752
+ position: relative;
753
+ background: var(--slider-track-bg, var(--fc-color-bg-tertiary));
754
+ border-radius: var(--fc-radius-full);
755
+ cursor: pointer;
756
+ }
757
+ .fc-slider--horizontal .fc-slider__track {
758
+ width: 100%;
759
+ height: 4px;
760
+ }
761
+ .fc-slider--vertical .fc-slider__track {
762
+ height: 100%;
763
+ width: 4px;
764
+ }
765
+ .fc-slider__fill {
766
+ position: absolute;
767
+ background: var(--slider-fill-bg, var(--fc-color-primary));
768
+ border-radius: var(--fc-radius-full);
769
+ transition: all 0.1s;
770
+ }
771
+ .fc-slider--dragging .fc-slider__fill {
772
+ transition: none;
773
+ }
774
+ .fc-slider__thumb {
775
+ position: absolute;
776
+ width: 16px;
777
+ height: 16px;
778
+ background: var(--slider-thumb-bg, var(--fc-color-bg-elevated));
779
+ border: 2px solid var(--slider-thumb-border, var(--fc-color-primary));
780
+ border-radius: var(--fc-radius-full);
781
+ transform: translate(-50%, -50%);
782
+ cursor: grab;
783
+ box-shadow: var(--fc-shadow-sm);
784
+ transition: transform var(--fc-transition), box-shadow var(--fc-transition);
785
+ }
786
+ .fc-slider--horizontal .fc-slider__thumb {
787
+ top: 50%;
788
+ }
789
+ .fc-slider--vertical .fc-slider__thumb {
790
+ left: 50%;
791
+ transform: translate(-50%, 50%);
792
+ }
793
+ .fc-slider__thumb:hover {
794
+ transform: translate(-50%, -50%) scale(1.2);
795
+ box-shadow: var(--fc-shadow-md);
796
+ }
797
+ .fc-slider--vertical .fc-slider__thumb:hover {
798
+ transform: translate(-50%, 50%) scale(1.2);
799
+ }
800
+ .fc-slider__thumb--active {
801
+ cursor: grabbing;
802
+ transform: translate(-50%, -50%) scale(1.2);
803
+ box-shadow: var(--fc-shadow-md);
804
+ }
805
+ .fc-slider--vertical .fc-slider__thumb--active {
806
+ transform: translate(-50%, 50%) scale(1.2);
807
+ }
808
+ .fc-slider__tooltip {
809
+ position: absolute;
810
+ bottom: 100%;
811
+ left: 50%;
812
+ transform: translateX(-50%) translateY(-8px);
813
+ padding: var(--fc-space-xs) var(--fc-space-sm);
814
+ background: var(--slider-tooltip-bg, var(--fc-color-bg-elevated));
815
+ color: var(--slider-tooltip-color, var(--fc-color-text));
816
+ font-size: var(--fc-font-size-xs);
817
+ border-radius: var(--fc-radius-sm);
818
+ box-shadow: var(--fc-shadow-md);
819
+ white-space: nowrap;
820
+ opacity: 0;
821
+ visibility: hidden;
822
+ transition: opacity var(--fc-transition), visibility var(--fc-transition);
823
+ }
824
+ .fc-slider__thumb:hover .fc-slider__tooltip,
825
+ .fc-slider__thumb--active .fc-slider__tooltip {
826
+ opacity: 1;
827
+ visibility: visible;
828
+ }
829
+ .fc-slider--vertical .fc-slider__tooltip {
830
+ bottom: auto;
831
+ left: 100%;
832
+ top: 50%;
833
+ transform: translateY(-50%) translateX(8px);
834
+ }
835
+ .fc-slider__mark {
836
+ position: absolute;
837
+ transform: translate(-50%, -50%);
838
+ }
839
+ .fc-slider--vertical .fc-slider__mark {
840
+ transform: translate(50%, 50%);
841
+ }
842
+ .fc-slider__mark-dot {
843
+ width: 4px;
844
+ height: 4px;
845
+ background: var(--slider-mark-dot-bg, var(--fc-color-text-tertiary));
846
+ border-radius: var(--fc-radius-full);
847
+ }
848
+ .fc-slider__mark-label {
849
+ position: absolute;
850
+ top: 12px;
851
+ left: 50%;
852
+ transform: translateX(-50%);
853
+ font-size: var(--fc-font-size-xs);
854
+ color: var(--slider-mark-label-color, var(--fc-color-text-secondary));
855
+ white-space: nowrap;
856
+ }
857
+ .fc-slider--vertical .fc-slider__mark-label {
858
+ top: 50%;
859
+ left: 12px;
860
+ transform: translateY(-50%);
861
+ }
862
+ .fc-slider--disabled {
863
+ opacity: 0.5;
864
+ cursor: not-allowed;
865
+ }
866
+ .fc-slider--disabled .fc-slider__thumb {
867
+ cursor: not-allowed;
868
+ border-color: var(--fc-color-text-tertiary);
869
+ }
870
+ .fc-slider--disabled .fc-slider__fill {
871
+ background: var(--fc-color-text-tertiary);
872
+ }
873
+
874
+ /* src/components/Select/Select.css */
875
+ .fc-select {
876
+ --select-trigger-bg: var(--fc-color-bg);
877
+ --select-trigger-border: var(--fc-color-border);
878
+ --select-option-selected-color: var(--fc-color-primary);
879
+ --select-option-selected-bg: var(--fc-color-primary-subtle);
880
+ --select-option-hover-bg: var(--fc-color-bg-secondary);
881
+ position: relative;
882
+ display: inline-block;
883
+ width: 100%;
884
+ font-family: var(--fc-font-family), serif;
885
+ }
886
+ .fc-select__trigger {
887
+ display: flex;
888
+ align-items: center;
889
+ justify-content: space-between;
890
+ padding: var(--fc-space-md) var(--fc-space-lg);
891
+ background: var(--select-trigger-bg);
892
+ border: 1px solid var(--select-trigger-border);
893
+ border-radius: var(--fc-radius-md);
894
+ cursor: pointer;
895
+ transition: border-color var(--fc-transition), box-shadow var(--fc-transition);
896
+ }
897
+ .fc-select__trigger:hover {
898
+ border-color: var(--fc-color-border-hover);
899
+ }
900
+ .fc-select--open .fc-select__trigger {
901
+ border-color: var(--fc-color-border-focus);
902
+ box-shadow: 0 0 0 3px var(--fc-color-primary-subtle);
903
+ }
904
+ .fc-select__value {
905
+ color: var(--fc-color-text);
906
+ font-size: var(--fc-font-size-md);
907
+ }
908
+ .fc-select__value--placeholder {
909
+ color: var(--fc-color-text-tertiary);
910
+ }
911
+ .fc-select__arrow {
912
+ color: var(--fc-color-text-tertiary);
913
+ font-size: 0.75rem;
914
+ transition: transform var(--fc-transition);
915
+ }
916
+ .fc-select--open .fc-select__arrow {
917
+ transform: rotate(180deg);
918
+ }
919
+ .fc-select__dropdown {
920
+ position: absolute;
921
+ top: 100%;
922
+ left: 0;
923
+ right: 0;
924
+ margin-top: var(--fc-space-xs);
925
+ background: var(--fc-color-bg-elevated);
926
+ border: 1px solid var(--fc-color-border);
927
+ border-radius: var(--fc-radius-md);
928
+ box-shadow: var(--fc-shadow-lg);
929
+ z-index: var(--fc-z-dropdown);
930
+ overflow: hidden;
931
+ }
932
+ .fc-select__search {
933
+ padding: var(--fc-space-sm);
934
+ border-bottom: 1px solid var(--fc-color-border-light);
935
+ }
936
+ .fc-select__search-input {
937
+ width: 100%;
938
+ padding: var(--fc-space-sm) var(--fc-space-md);
939
+ border: 1px solid var(--fc-color-border);
940
+ border-radius: var(--fc-radius-sm);
941
+ font-size: var(--fc-font-size-sm);
942
+ outline: none;
943
+ }
944
+ .fc-select__search-input:focus {
945
+ border-color: var(--fc-color-border-focus);
946
+ }
947
+ .fc-select__list {
948
+ overflow-y: auto;
949
+ padding: var(--fc-space-xs) 0;
950
+ }
951
+ .fc-select__group-label {
952
+ padding: var(--fc-space-xs) var(--fc-space-lg);
953
+ font-size: var(--fc-font-size-xs);
954
+ font-weight: var(--fc-font-weight-bold);
955
+ color: var(--fc-color-text-tertiary);
956
+ text-transform: uppercase;
957
+ letter-spacing: 0.05em;
958
+ }
959
+ .fc-select__option {
960
+ display: flex;
961
+ align-items: center;
962
+ gap: var(--fc-space-sm);
963
+ padding: var(--fc-space-sm) var(--fc-space-lg);
964
+ cursor: pointer;
965
+ transition: background var(--fc-transition);
966
+ }
967
+ .fc-select__option:hover,
968
+ .fc-select__option--highlighted {
969
+ background: var(--select-option-hover-bg);
970
+ }
971
+ .fc-select__option--selected {
972
+ color: var(--select-option-selected-color);
973
+ background: var(--select-option-selected-bg);
974
+ }
975
+ .fc-select__option--disabled {
976
+ opacity: 0.5;
977
+ cursor: not-allowed;
978
+ }
979
+ .fc-select__option-label {
980
+ flex: 1;
981
+ font-size: var(--fc-font-size-md);
982
+ }
983
+ .fc-select__checkbox {
984
+ width: 16px;
985
+ height: 16px;
986
+ border: 1px solid var(--fc-color-border);
987
+ border-radius: var(--fc-radius-sm);
988
+ display: flex;
989
+ align-items: center;
990
+ justify-content: center;
991
+ font-size: 10px;
992
+ color: var(--fc-color-text-on-primary);
993
+ transition: all var(--fc-transition);
994
+ }
995
+ .fc-select__checkbox--checked {
996
+ background: var(--fc-color-primary);
997
+ border-color: var(--fc-color-primary);
998
+ }
999
+ .fc-select__highlight {
1000
+ background: var(--fc-color-warning-bg);
1001
+ color: var(--fc-color-warning);
1002
+ padding: 0 2px;
1003
+ border-radius: var(--fc-radius-xs);
1004
+ }
1005
+ .fc-select__check {
1006
+ font-size: var(--fc-font-size-sm);
1007
+ }
1008
+ .fc-select--disabled .fc-select__trigger {
1009
+ opacity: 0.6;
1010
+ cursor: not-allowed;
1011
+ background: var(--fc-color-bg-secondary);
1012
+ }
1013
+
1014
+ /* src/components/Tree/Tree.css */
1015
+ .fc-tree {
1016
+ font-family: var(--fc-font-family), sans-serif;
1017
+ color: var(--fc-color-text);
1018
+ display: flex;
1019
+ flex-direction: column;
1020
+ }
1021
+ .fc-tree__search {
1022
+ position: relative;
1023
+ padding: var(--fc-space-sm) var(--fc-space-md);
1024
+ border-bottom: 1px solid var(--fc-color-border);
1025
+ }
1026
+ .fc-tree__search-input {
1027
+ width: 100%;
1028
+ padding: var(--fc-space-sm) 2rem var(--fc-space-sm) var(--fc-space-md);
1029
+ border: 1px solid var(--fc-color-border);
1030
+ border-radius: var(--fc-radius-md);
1031
+ font-size: var(--fc-font-size-sm);
1032
+ background: var(--fc-color-bg);
1033
+ color: var(--fc-color-text);
1034
+ outline: none;
1035
+ transition: border-color var(--fc-transition);
1036
+ box-sizing: border-box;
1037
+ }
1038
+ .fc-tree__search-input:focus {
1039
+ border-color: var(--fc-color-border-focus);
1040
+ }
1041
+ .fc-tree__search-clear {
1042
+ position: absolute;
1043
+ right: calc(var(--fc-space-md) + 8px);
1044
+ top: 50%;
1045
+ transform: translateY(-50%);
1046
+ background: none;
1047
+ border: none;
1048
+ cursor: pointer;
1049
+ color: var(--fc-color-text-tertiary);
1050
+ font-size: var(--fc-font-size-sm);
1051
+ padding: 2px 4px;
1052
+ border-radius: var(--fc-radius-sm);
1053
+ transition: color var(--fc-transition);
1054
+ line-height: 1;
1055
+ }
1056
+ .fc-tree__search-clear:hover {
1057
+ color: var(--fc-color-text);
1058
+ }
1059
+ .fc-tree__list {
1060
+ padding: var(--fc-space-sm) 0;
1061
+ }
1062
+ .fc-tree__empty {
1063
+ padding: var(--fc-space-md);
1064
+ text-align: center;
1065
+ color: var(--fc-color-text-tertiary);
1066
+ font-size: var(--fc-font-size-sm);
1067
+ }
1068
+ .fc-tree__node {
1069
+ position: relative;
1070
+ }
1071
+ .fc-tree__node.is-dragging > .fc-tree__item {
1072
+ opacity: 0.35;
1073
+ pointer-events: none;
1074
+ }
1075
+ .fc-tree__item {
1076
+ --fc-indent: 12px;
1077
+ display: flex;
1078
+ align-items: center;
1079
+ gap: var(--fc-space-sm);
1080
+ padding-top: 4px;
1081
+ padding-bottom: 4px;
1082
+ padding-right: var(--fc-space-md);
1083
+ border-radius: var(--fc-radius-sm);
1084
+ margin: 1px var(--fc-space-sm);
1085
+ min-height: 32px;
1086
+ cursor: default;
1087
+ transition: background var(--fc-transition), padding-left 0.1s ease-out;
1088
+ position: relative;
1089
+ user-select: none;
1090
+ }
1091
+ .fc-tree__item:hover {
1092
+ background: var(--fc-color-bg-secondary);
1093
+ }
1094
+ .fc-tree__item--drag-source {
1095
+ opacity: 0.4;
1096
+ background: var(--fc-color-bg-secondary);
1097
+ }
1098
+ .fc-tree__item--drop-into {
1099
+ background: var(--fc-color-primary-subtle) !important;
1100
+ outline: 1.5px solid var(--fc-color-primary);
1101
+ outline-offset: -1px;
1102
+ }
1103
+ .fc-tree__item--drop-before {
1104
+ background: transparent !important;
1105
+ z-index: 1;
1106
+ }
1107
+ .fc-tree__item--drop-before::before {
1108
+ content: "";
1109
+ position: absolute;
1110
+ top: -1px;
1111
+ left: var(--fc-indent, 12px);
1112
+ right: var(--fc-space-md, 12px);
1113
+ height: 2px;
1114
+ background: var(--fc-color-primary);
1115
+ border-radius: 1px;
1116
+ pointer-events: none;
1117
+ }
1118
+ .fc-tree__item--drop-before::after {
1119
+ content: "";
1120
+ position: absolute;
1121
+ top: -4px;
1122
+ left: calc(var(--fc-indent, 12px) - 3px);
1123
+ width: 6px;
1124
+ height: 6px;
1125
+ border-radius: 50%;
1126
+ background: var(--fc-color-primary);
1127
+ pointer-events: none;
1128
+ }
1129
+ .fc-tree__item--drop-after {
1130
+ background: transparent !important;
1131
+ z-index: 1;
1132
+ }
1133
+ .fc-tree__item--drop-after::before {
1134
+ content: "";
1135
+ position: absolute;
1136
+ bottom: -1px;
1137
+ left: var(--fc-indent, 12px);
1138
+ right: var(--fc-space-md, 12px);
1139
+ height: 2px;
1140
+ background: var(--fc-color-primary);
1141
+ border-radius: 1px;
1142
+ pointer-events: none;
1143
+ }
1144
+ .fc-tree__item--drop-after::after {
1145
+ content: "";
1146
+ position: absolute;
1147
+ bottom: -4px;
1148
+ left: calc(var(--fc-indent, 12px) - 3px);
1149
+ width: 6px;
1150
+ height: 6px;
1151
+ border-radius: 50%;
1152
+ background: var(--fc-color-primary);
1153
+ pointer-events: none;
1154
+ }
1155
+ .fc-tree__drag-handle {
1156
+ display: flex;
1157
+ align-items: center;
1158
+ justify-content: center;
1159
+ width: 16px;
1160
+ flex-shrink: 0;
1161
+ cursor: grab;
1162
+ color: var(--fc-color-text-tertiary);
1163
+ opacity: 0;
1164
+ font-size: 14px;
1165
+ line-height: 1;
1166
+ transition: opacity var(--fc-transition), color var(--fc-transition);
1167
+ }
1168
+ .fc-tree__drag-handle:active {
1169
+ cursor: grabbing;
1170
+ }
1171
+ .fc-tree__item:hover .fc-tree__drag-handle {
1172
+ opacity: 1;
1173
+ }
1174
+ .fc-tree__drag-handle:hover {
1175
+ color: var(--fc-color-text);
1176
+ }
1177
+ .fc-tree__switcher {
1178
+ display: flex;
1179
+ align-items: center;
1180
+ justify-content: center;
1181
+ width: 16px;
1182
+ height: 16px;
1183
+ flex-shrink: 0;
1184
+ font-size: 9px;
1185
+ color: var(--fc-color-text-tertiary);
1186
+ cursor: pointer;
1187
+ transition: transform var(--fc-transition), color var(--fc-transition);
1188
+ }
1189
+ .fc-tree__switcher:hover {
1190
+ color: var(--fc-color-text);
1191
+ }
1192
+ .fc-tree__switcher--open {
1193
+ transform: rotate(90deg);
1194
+ }
1195
+ .fc-tree__switcher--hidden {
1196
+ visibility: hidden;
1197
+ pointer-events: none;
1198
+ }
1199
+ .fc-tree__title {
1200
+ flex: 1;
1201
+ font-size: var(--fc-font-size-md);
1202
+ overflow: hidden;
1203
+ text-overflow: ellipsis;
1204
+ white-space: nowrap;
1205
+ cursor: pointer;
1206
+ }
1207
+ .fc-tree__edit-input {
1208
+ flex: 1;
1209
+ font-size: var(--fc-font-size-md);
1210
+ font-family: var(--fc-font-family), sans-serif;
1211
+ color: var(--fc-color-text);
1212
+ background: var(--fc-color-bg);
1213
+ border: 1px solid var(--fc-color-border-focus);
1214
+ border-radius: var(--fc-radius-sm);
1215
+ padding: 2px 6px;
1216
+ outline: none;
1217
+ min-width: 0;
1218
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--fc-color-primary) 15%, transparent);
1219
+ }
1220
+ .fc-tree__actions {
1221
+ display: flex;
1222
+ align-items: center;
1223
+ gap: 2px;
1224
+ flex-shrink: 0;
1225
+ opacity: 0;
1226
+ transition: opacity var(--fc-transition);
1227
+ }
1228
+ .fc-tree__item:hover .fc-tree__actions {
1229
+ opacity: 1;
1230
+ }
1231
+ .fc-tree__action {
1232
+ display: flex;
1233
+ align-items: center;
1234
+ justify-content: center;
1235
+ width: 22px;
1236
+ height: 22px;
1237
+ background: none;
1238
+ border: none;
1239
+ border-radius: var(--fc-radius-sm);
1240
+ cursor: pointer;
1241
+ font-size: 13px;
1242
+ color: var(--fc-color-text-tertiary);
1243
+ padding: 0;
1244
+ line-height: 1;
1245
+ transition: background var(--fc-transition), color var(--fc-transition);
1246
+ }
1247
+ .fc-tree__action:hover {
1248
+ background: var(--fc-color-border);
1249
+ color: var(--fc-color-text);
1250
+ }
1251
+ .fc-tree__action--danger:hover {
1252
+ background: color-mix(in srgb, #ef4444 15%, transparent);
1253
+ color: #ef4444;
1254
+ }
1255
+ .fc-tree__add-root {
1256
+ padding: var(--fc-space-sm) var(--fc-space-md);
1257
+ border-top: 1px solid var(--fc-color-border);
1258
+ margin-top: 2px;
1259
+ }
1260
+ .fc-tree__add-root-btn {
1261
+ width: 100%;
1262
+ padding: 6px var(--fc-space-md);
1263
+ background: none;
1264
+ border: 1px dashed var(--fc-color-border);
1265
+ border-radius: var(--fc-radius-md);
1266
+ color: var(--fc-color-text-tertiary);
1267
+ font-size: var(--fc-font-size-sm);
1268
+ font-family: var(--fc-font-family), sans-serif;
1269
+ cursor: pointer;
1270
+ transition:
1271
+ border-color var(--fc-transition),
1272
+ color var(--fc-transition),
1273
+ background var(--fc-transition);
1274
+ text-align: center;
1275
+ }
1276
+ .fc-tree__add-root-btn:hover {
1277
+ border-color: var(--fc-color-primary);
1278
+ color: var(--fc-color-primary);
1279
+ background: var(--fc-color-primary-subtle);
1280
+ }
1281
+ [data-theme=dark] .fc-tree__search-input,
1282
+ [data-theme=dark] .fc-tree__edit-input {
1283
+ background: var(--fc-color-bg-secondary);
1284
+ }
1285
+
1286
+ /* src/components/Avatar/Avatar.css */
1287
+ .ui-avatar {
1288
+ --avatar-bg: var(--fc-color-primary, #6366f1);
1289
+ --avatar-color: var(--fc-color-text-on-primary, #ffffff);
1290
+ --avatar-empty-bg: var(--fc-color-bg-secondary, #f3f4f6);
1291
+ --avatar-empty-color: var(--fc-color-text-tertiary, #9ca3af);
1292
+ --avatar-border: var(--fc-color-bg, #ffffff);
1293
+ --avatar-shadow: var(--fc-shadow-sm, 0 1px 2px 0 rgba(0, 0, 0, 0.05));
1294
+ --avatar-hover-filter: brightness(0.95);
1295
+ --avatar-active-filter: brightness(0.9);
1296
+ --avatar-focus-ring: 0 0 0 2px var(--fc-color-bg, #fff), 0 0 0 4px var(--fc-color-primary, #6366f1);
1297
+ display: inline-flex;
1298
+ align-items: center;
1299
+ justify-content: center;
1300
+ flex-shrink: 0;
1301
+ background-color: var(--avatar-bg);
1302
+ color: var(--avatar-color);
1303
+ font-weight: 600;
1304
+ line-height: 1;
1305
+ user-select: none;
1306
+ overflow: hidden;
1307
+ position: relative;
1308
+ transition:
1309
+ transform 0.2s cubic-bezier(0.4, 0, 0.2, 1),
1310
+ filter 0.2s cubic-bezier(0.4, 0, 0.2, 1),
1311
+ box-shadow 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1312
+ }
1313
+ .ui-avatar-img {
1314
+ width: 100%;
1315
+ height: 100%;
1316
+ object-fit: cover;
1317
+ }
1318
+ .ui-avatar-text,
1319
+ .ui-avatar-placeholder {
1320
+ display: flex;
1321
+ align-items: center;
1322
+ justify-content: center;
1323
+ width: 100%;
1324
+ height: 100%;
1325
+ text-transform: uppercase;
1326
+ }
1327
+ .ui-avatar-placeholder svg {
1328
+ color: var(--avatar-empty-color);
1329
+ }
1330
+ .ui-avatar-xs,
1331
+ .ui-avatar-sm,
1332
+ .ui-avatar-md,
1333
+ .ui-avatar-lg,
1334
+ .ui-avatar-xl {
1335
+ width: var(--avatar-size);
1336
+ height: var(--avatar-size);
1337
+ font-size: var(--avatar-font-size);
1338
+ }
1339
+ .ui-avatar-xs {
1340
+ --avatar-size: 20px;
1341
+ --avatar-font-size: 10px;
1342
+ }
1343
+ .ui-avatar-sm {
1344
+ --avatar-size: 28px;
1345
+ --avatar-font-size: 12px;
1346
+ }
1347
+ .ui-avatar-md {
1348
+ --avatar-size: 40px;
1349
+ --avatar-font-size: 16px;
1350
+ }
1351
+ .ui-avatar-lg {
1352
+ --avatar-size: 56px;
1353
+ --avatar-font-size: 20px;
1354
+ }
1355
+ .ui-avatar-xl {
1356
+ --avatar-size: 72px;
1357
+ --avatar-font-size: 28px;
1358
+ }
1359
+ .ui-avatar-circle {
1360
+ border-radius: 50%;
1361
+ }
1362
+ .ui-avatar-square {
1363
+ border-radius: var(--fc-radius-md, 8px);
1364
+ }
1365
+ .ui-avatar-square.ui-avatar-xs {
1366
+ border-radius: var(--fc-radius-sm, 4px);
1367
+ }
1368
+ .ui-avatar-square.ui-avatar-sm,
1369
+ .ui-avatar-square.ui-avatar-md {
1370
+ border-radius: var(--fc-radius-md, 6px);
1371
+ }
1372
+ .ui-avatar-square.ui-avatar-lg,
1373
+ .ui-avatar-square.ui-avatar-xl {
1374
+ border-radius: var(--fc-radius-lg, 10px);
1375
+ }
1376
+ .ui-avatar-bordered {
1377
+ border: 2px solid var(--avatar-border);
1378
+ box-shadow: var(--avatar-shadow);
1379
+ }
1380
+ .ui-avatar-clickable {
1381
+ cursor: pointer;
1382
+ }
1383
+ .ui-avatar-clickable:hover:not(:disabled),
1384
+ .ui-avatar-clickable:active:not(:disabled) {
1385
+ filter: var(--avatar-hover-filter);
1386
+ }
1387
+ .ui-avatar-clickable:hover:not(:disabled) {
1388
+ transform: translateY(-1px);
1389
+ box-shadow: var(--fc-shadow-md, 0 4px 6px -1px rgba(0, 0, 0, 0.1));
1390
+ }
1391
+ .ui-avatar-clickable:active:not(:disabled) {
1392
+ transform: scale(0.95);
1393
+ filter: var(--avatar-active-filter);
1394
+ }
1395
+ .ui-avatar-clickable:focus-visible {
1396
+ outline: none;
1397
+ box-shadow: var(--avatar-focus-ring);
1398
+ }
1399
+ .ui-avatar-empty {
1400
+ background-color: var(--avatar-empty-bg);
1401
+ color: var(--avatar-empty-color);
1402
+ }
1403
+ .ui-avatar-loading {
1404
+ overflow: hidden;
1405
+ }
1406
+ .ui-avatar-loading::after {
1407
+ content: "";
1408
+ position: absolute;
1409
+ top: 0;
1410
+ left: 0;
1411
+ width: 100%;
1412
+ height: 100%;
1413
+ background:
1414
+ linear-gradient(
1415
+ 90deg,
1416
+ transparent,
1417
+ rgba(255, 255, 255, 0.3),
1418
+ transparent);
1419
+ animation: avatar-shimmer 1.5s ease-in-out infinite;
1420
+ will-change: transform;
1421
+ }
1422
+ @keyframes avatar-shimmer {
1423
+ 0% {
1424
+ transform: translateX(-100%);
1425
+ }
1426
+ 100% {
1427
+ transform: translateX(100%);
1428
+ }
1429
+ }
1430
+ .ui-avatar--primary,
1431
+ .ui-avatar--success,
1432
+ .ui-avatar--warning,
1433
+ .ui-avatar--danger {
1434
+ --avatar-color: var(--fc-color-text-on-primary, #ffffff);
1435
+ }
1436
+ .ui-avatar--primary {
1437
+ --avatar-bg: var(--fc-color-primary);
1438
+ }
1439
+ .ui-avatar--secondary {
1440
+ --avatar-bg: var(--fc-color-bg-secondary);
1441
+ --avatar-color: var(--fc-color-text-secondary);
1442
+ }
1443
+ .ui-avatar--success {
1444
+ --avatar-bg: var(--fc-color-success);
1445
+ }
1446
+ .ui-avatar--warning {
1447
+ --avatar-bg: var(--fc-color-warning);
1448
+ }
1449
+ .ui-avatar--danger {
1450
+ --avatar-bg: var(--fc-color-danger);
1451
+ }
1452
+ @media (prefers-reduced-motion: reduce) {
1453
+ .ui-avatar {
1454
+ transition: none;
1455
+ }
1456
+ .ui-avatar-loading::after {
1457
+ animation: none;
1458
+ opacity: 0.5;
1459
+ }
1460
+ .ui-avatar-clickable:hover:not(:disabled) {
1461
+ transform: none;
1462
+ }
1463
+ .ui-avatar-clickable:active:not(:disabled) {
1464
+ transform: none;
1465
+ }
1466
+ }
1467
+ @media (prefers-contrast: more) {
1468
+ .ui-avatar-bordered {
1469
+ border-width: 3px;
1470
+ }
1471
+ .ui-avatar-empty {
1472
+ outline: 1px solid currentColor;
1473
+ }
1474
+ .ui-avatar-clickable:focus-visible {
1475
+ outline: 2px solid currentColor;
1476
+ }
1477
+ }
1478
+ @media (prefers-contrast: less) {
1479
+ .ui-avatar-bordered {
1480
+ border-color: color-mix(in srgb, var(--avatar-border), transparent 30%);
1481
+ }
1482
+ }
1483
+ .avatar-group .ui-avatar {
1484
+ transition: none;
1485
+ }
1486
+ @media (hover: hover) {
1487
+ .ui-avatar-clickable:hover:not(:disabled) {
1488
+ transform: translateY(-1px);
1489
+ }
1490
+ }
1491
+
1492
+ /* src/components/ListGroup/ListGroup.css */
1493
+ .fc-list-group {
1494
+ display: flex;
1495
+ flex-direction: column;
1496
+ margin: 0;
1497
+ padding: 0;
1498
+ list-style: none;
1499
+ background-color: var(--fc-color-bg, #ffffff);
1500
+ border-radius: var(--fc-radius-md, 8px);
1501
+ }
1502
+ [data-theme=dark] .fc-list-group {
1503
+ background-color: var(--fc-color-bg, #0F0F0F);
1504
+ }
1505
+ .fc-list-group--bordered {
1506
+ border: 1px solid var(--fc-color-border, #e5e7eb);
1507
+ }
1508
+ [data-theme=dark] .fc-list-group--bordered {
1509
+ border-color: var(--fc-color-border, #333330);
1510
+ }
1511
+ .fc-list-group--no-radius {
1512
+ border-radius: 0;
1513
+ }
1514
+ .fc-list-group--no-radius .fc-list-group-item:first-child,
1515
+ .fc-list-group--no-radius .fc-list-group-item:last-child {
1516
+ border-radius: 0;
1517
+ }
1518
+ .fc-list-group-item {
1519
+ position: relative;
1520
+ display: block;
1521
+ padding: var(--fc-space-md, 12px) var(--fc-space-lg, 16px);
1522
+ color: var(--fc-color-text, #111827);
1523
+ background-color: var(--fc-color-bg, #ffffff);
1524
+ border-bottom: 1px solid var(--fc-color-border-light, #f0f0f0);
1525
+ transition:
1526
+ background-color var(--fc-transition, 150ms ease),
1527
+ border-color var(--fc-transition, 150ms ease),
1528
+ color var(--fc-transition, 150ms ease);
1529
+ cursor: pointer;
1530
+ }
1531
+ [data-theme=dark] .fc-list-group-item {
1532
+ background-color: var(--fc-color-bg, #0F0F0F);
1533
+ color: var(--fc-color-text, #E8E8E6);
1534
+ border-bottom-color: var(--fc-color-border-light, #2A2A28);
1535
+ }
1536
+ .fc-list-group-item:first-child {
1537
+ border-top-left-radius: var(--fc-radius-md, 8px);
1538
+ border-top-right-radius: var(--fc-radius-md, 8px);
1539
+ }
1540
+ .fc-list-group-item:last-child {
1541
+ border-bottom-left-radius: var(--fc-radius-md, 8px);
1542
+ border-bottom-right-radius: var(--fc-radius-md, 8px);
1543
+ border-bottom: none;
1544
+ }
1545
+ .fc-list-group--bordered .fc-list-group-item {
1546
+ border-bottom-color: var(--fc-color-border, #e5e7eb);
1547
+ }
1548
+ [data-theme=dark] .fc-list-group--bordered .fc-list-group-item {
1549
+ border-bottom-color: var(--fc-color-border, #333330);
1550
+ }
1551
+ .fc-list-group--bordered .fc-list-group-item:last-child {
1552
+ border-bottom: none;
1553
+ }
1554
+ .fc-list-group-item:hover:not(.fc-list-group-item--disabled) {
1555
+ background-color: var(--fc-color-bg-secondary, #f9fafb);
1556
+ }
1557
+ [data-theme=dark] .fc-list-group-item:hover:not(.fc-list-group-item--disabled) {
1558
+ background-color: var(--fc-color-bg-secondary, #1A1A1A);
1559
+ }
1560
+ .fc-list-group-item:focus-visible:not(.fc-list-group-item--disabled) {
1561
+ outline: none;
1562
+ background-color: var(--fc-color-bg-secondary, #f9fafb);
1563
+ box-shadow: inset 0 0 0 2px var(--fc-color-primary, #6366f1);
1564
+ z-index: 1;
1565
+ }
1566
+ [data-theme=dark] .fc-list-group-item:focus-visible:not(.fc-list-group-item--disabled) {
1567
+ background-color: var(--fc-color-bg-secondary, #1A1A1A);
1568
+ box-shadow: inset 0 0 0 2px var(--fc-color-primary, #5DA4E8);
1569
+ }
1570
+ .fc-list-group-item--active {
1571
+ background-color: var(--fc-color-primary-subtle, #eff6ff);
1572
+ color: var(--fc-color-primary, #6366f1);
1573
+ border-left: 3px solid var(--fc-color-primary, #6366f1);
1574
+ padding-left: calc(var(--fc-space-lg, 16px) - 3px);
1575
+ }
1576
+ [data-theme=dark] .fc-list-group-item--active {
1577
+ background-color: var(--fc-color-primary-subtle, rgba(55, 138, 221, 0.12));
1578
+ color: var(--fc-color-primary, #5DA4E8);
1579
+ border-left-color: var(--fc-color-primary, #5DA4E8);
1580
+ }
1581
+ .fc-list-group-item--active:hover {
1582
+ background-color: var(--fc-color-primary-subtle, #eff6ff);
1583
+ }
1584
+ [data-theme=dark] .fc-list-group-item--active:hover {
1585
+ background-color: var(--fc-color-primary-subtle, rgba(55, 138, 221, 0.12));
1586
+ }
1587
+ .fc-list-group-item--disabled {
1588
+ color: var(--fc-color-text-disabled, #9ca3af);
1589
+ cursor: not-allowed;
1590
+ pointer-events: none;
1591
+ opacity: 0.6;
1592
+ }
1593
+ [data-theme=dark] .fc-list-group-item--disabled {
1594
+ color: var(--fc-color-text-disabled, #4A4845);
1595
+ }
1596
+ @media (max-width: 640px) {
1597
+ .fc-list-group-item {
1598
+ padding: var(--fc-space-sm, 8px) var(--fc-space-md, 12px);
1599
+ }
1600
+ .fc-list-group-item--active {
1601
+ padding-left: calc(var(--fc-space-md, 12px) - 3px);
1602
+ }
1603
+ }
1604
+ .fc-list-group--compact .fc-list-group-item {
1605
+ padding: var(--fc-space-sm, 8px) var(--fc-space-md, 12px);
1606
+ }
1607
+ .fc-list-group--compact .fc-list-group-item--active {
1608
+ padding-left: calc(var(--fc-space-md, 12px) - 3px);
1609
+ }
1610
+ .fc-list-group--relaxed .fc-list-group-item {
1611
+ padding: var(--fc-space-lg, 16px) var(--fc-space-xl, 20px);
1612
+ }
1613
+ .fc-list-group--relaxed .fc-list-group-item--active {
1614
+ padding-left: calc(var(--fc-space-xl, 20px) - 3px);
1615
+ }
1616
+ .fc-list-group--no-divided .fc-list-group-item {
1617
+ border-bottom: none;
1618
+ }
1619
+ @media (prefers-reduced-motion: reduce) {
1620
+ .fc-list-group-item {
1621
+ transition: none;
1622
+ }
1623
+ }
1624
+ @media (prefers-contrast: more) {
1625
+ .fc-list-group--bordered {
1626
+ border-width: 2px;
1627
+ }
1628
+ .fc-list-group-item {
1629
+ border-bottom-width: 2px;
1630
+ }
1631
+ .fc-list-group-item--active {
1632
+ border-left-width: 4px;
1633
+ font-weight: 700;
1634
+ }
1635
+ .fc-list-group-item:focus-visible:not(.fc-list-group-item--disabled) {
1636
+ outline: 2px solid currentColor;
1637
+ box-shadow: none;
1638
+ }
1639
+ }
1640
+ .fc-list-group-nested {
1641
+ margin-left: var(--fc-space-lg, 16px);
1642
+ margin-top: var(--fc-space-sm, 8px);
1643
+ margin-bottom: var(--fc-space-sm, 8px);
1644
+ }
1645
+ .fc-list-group-item-icon {
1646
+ margin-right: var(--fc-space-sm, 8px);
1647
+ flex-shrink: 0;
1648
+ }
1649
+ .fc-list-group-item-content {
1650
+ flex: 1;
1651
+ }
1652
+ .fc-list-group-item-actions {
1653
+ margin-left: auto;
1654
+ flex-shrink: 0;
1655
+ }
1656
+ .fc-list-group-item-with-icon,
1657
+ .fc-list-group-item-with-actions {
1658
+ display: flex;
1659
+ align-items: center;
1660
+ }
1661
+
1662
+ /* src/components/VirtualList/VirtualList.css */
1663
+ .fc-virtual-list {
1664
+ --vl-bg: var(--fc-color-bg);
1665
+ --vl-track-bg: var(--fc-color-bg-tertiary);
1666
+ --vl-thumb-bg: var(--fc-color-border);
1667
+ --vl-thumb-hover: var(--fc-color-border-hover);
1668
+ position: relative;
1669
+ overflow-y: auto;
1670
+ overflow-x: hidden;
1671
+ background-color: var(--vl-bg);
1672
+ border-radius: var(--fc-radius-md, 8px);
1673
+ }
1674
+ .fc-virtual-list--hide-scrollbar {
1675
+ scrollbar-width: none;
1676
+ -ms-overflow-style: none;
1677
+ }
1678
+ .fc-virtual-list--hide-scrollbar::-webkit-scrollbar {
1679
+ display: none;
1680
+ }
1681
+ .fc-virtual-list__container {
1682
+ position: relative;
1683
+ width: 100%;
1684
+ overflow: hidden;
1685
+ }
1686
+ .fc-virtual-list__content {
1687
+ position: absolute;
1688
+ top: 0;
1689
+ left: 0;
1690
+ width: 100%;
1691
+ will-change: transform;
1692
+ }
1693
+ .fc-virtual-list__item {
1694
+ width: 100%;
1695
+ overflow: hidden;
1696
+ box-sizing: border-box;
1697
+ }
1698
+ .fc-virtual-list::-webkit-scrollbar {
1699
+ width: 6px;
1700
+ height: 6px;
1701
+ }
1702
+ .fc-virtual-list::-webkit-scrollbar-track {
1703
+ background: var(--vl-track-bg);
1704
+ border-radius: var(--fc-radius-full, 9999px);
1705
+ }
1706
+ .fc-virtual-list::-webkit-scrollbar-thumb {
1707
+ background: var(--vl-thumb-bg);
1708
+ border-radius: var(--fc-radius-full, 9999px);
1709
+ }
1710
+ .fc-virtual-list::-webkit-scrollbar-thumb:hover {
1711
+ background: var(--vl-thumb-hover);
1712
+ }
1713
+ [data-theme=dark] .fc-virtual-list {
1714
+ --vl-track-bg: #222222;
1715
+ --vl-thumb-bg: #333330;
1716
+ --vl-thumb-hover: #555550;
1717
+ }
1718
+
1719
+ /* src/components/Alert/AlertContext.css */
1720
+ .fc-alert-overlay {
1721
+ position: fixed;
1722
+ inset: 0;
1723
+ display: flex;
1724
+ align-items: center;
1725
+ justify-content: center;
1726
+ background: var(--fc-color-bg-overlay);
1727
+ z-index: var(--fc-z-modal);
1728
+ }
1729
+ .fc-alert {
1730
+ --alert-bg: var(--fc-color-bg-elevated);
1731
+ --alert-border: var(--fc-color-border);
1732
+ --alert-shadow: var(--fc-shadow-lg);
1733
+ --alert-min-width: 20rem;
1734
+ --alert-max-width: 80%;
1735
+ --alert-max-height: 80vh;
1736
+ background: var(--alert-bg);
1737
+ border: 1px solid var(--alert-border);
1738
+ border-radius: var(--fc-radius-lg);
1739
+ box-shadow: var(--alert-shadow);
1740
+ padding: var(--fc-space-lg);
1741
+ min-width: var(--alert-min-width);
1742
+ max-width: var(--alert-max-width);
1743
+ max-height: var(--alert-max-height);
1744
+ display: flex;
1745
+ flex-direction: column;
1746
+ overflow: hidden;
1747
+ font-family: var(--fc-font-family), serif;
1748
+ color: var(--fc-color-text);
1749
+ }
1750
+ .fc-alert__header {
1751
+ display: flex;
1752
+ align-items: center;
1753
+ gap: var(--fc-space-sm);
1754
+ margin-bottom: var(--fc-space-md);
1755
+ }
1756
+ .fc-alert__icon {
1757
+ flex-shrink: 0;
1758
+ width: 1.25rem;
1759
+ height: 1.25rem;
1760
+ }
1761
+ .fc-alert__title {
1762
+ font-size: var(--fc-font-size-md);
1763
+ font-weight: var(--fc-font-weight-bold);
1764
+ line-height: var(--fc-line-height-tight);
1765
+ }
1766
+ .fc-alert__msg {
1767
+ flex: 1;
1768
+ min-height: 0;
1769
+ max-height: 10rem;
1770
+ overflow-y: auto;
1771
+ white-space: pre-wrap;
1772
+ word-break: break-all;
1773
+ font-size: var(--fc-font-size-sm);
1774
+ line-height: var(--fc-line-height-normal);
1775
+ color: var(--fc-color-text-secondary);
1776
+ padding: 0 var(--fc-space-xs);
1777
+ margin-bottom: var(--fc-space-lg);
1778
+ }
1779
+ .fc-alert--toast .fc-alert__msg {
1780
+ margin-bottom: 0;
1781
+ }
1782
+ .fc-alert__footer {
1783
+ display: flex;
1784
+ align-items: center;
1785
+ justify-content: flex-end;
1786
+ gap: var(--fc-space-sm);
1787
+ }
1788
+ .fc-alert--success .fc-alert__icon {
1789
+ color: var(--fc-color-success);
1790
+ }
1791
+ .fc-alert--error .fc-alert__icon {
1792
+ color: var(--fc-color-danger);
1793
+ }
1794
+ .fc-alert--warning .fc-alert__icon {
1795
+ color: var(--fc-color-warning);
1796
+ }
1797
+ .fc-alert--info .fc-alert__icon {
1798
+ color: var(--fc-color-info);
1799
+ }
1800
+
1801
+ /* src/components/Card/Card.css */
1802
+ .fc-card {
1803
+ display: flex;
1804
+ flex-direction: column;
1805
+ background-color: var(--fc-color-bg);
1806
+ border-radius: var(--fc-radius-md);
1807
+ overflow: hidden;
1808
+ transition: all var(--fc-transition);
1809
+ cursor: default;
1810
+ }
1811
+ .fc-card--default {
1812
+ background-color: var(--fc-color-bg);
1813
+ }
1814
+ .fc-card--bordered {
1815
+ border: 1px solid var(--fc-color-border);
1816
+ }
1817
+ .fc-card--shadow {
1818
+ box-shadow: var(--fc-shadow-sm);
1819
+ }
1820
+ .fc-card--outline {
1821
+ border: 1px solid var(--fc-color-primary);
1822
+ }
1823
+ .fc-card--hoverable:hover {
1824
+ transform: translateY(-4px);
1825
+ box-shadow: var(--fc-shadow-md);
1826
+ cursor: pointer;
1827
+ }
1828
+ .fc-card--clickable {
1829
+ cursor: pointer;
1830
+ }
1831
+ .fc-card--disabled {
1832
+ opacity: 0.6;
1833
+ cursor: not-allowed;
1834
+ }
1835
+ .fc-card--disabled:hover {
1836
+ transform: none;
1837
+ box-shadow: none;
1838
+ }
1839
+ .fc-card__image-wrapper {
1840
+ flex-shrink: 0;
1841
+ overflow: hidden;
1842
+ background-color: var(--fc-color-bg-tertiary);
1843
+ position: relative;
1844
+ }
1845
+ .fc-card__image {
1846
+ width: 100%;
1847
+ height: 100%;
1848
+ object-fit: cover;
1849
+ transition: transform var(--fc-transition);
1850
+ display: block;
1851
+ }
1852
+ .fc-card--hoverable:hover .fc-card__image {
1853
+ transform: scale(1.05);
1854
+ }
1855
+ .fc-card__content {
1856
+ flex: 1;
1857
+ display: flex;
1858
+ flex-direction: column;
1859
+ padding: var(--fc-space-lg);
1860
+ gap: var(--fc-space-sm);
1861
+ background-color: var(--fc-color-bg);
1862
+ }
1863
+ .fc-card__title {
1864
+ font-size: var(--fc-font-size-lg);
1865
+ font-weight: var(--fc-font-weight-bold);
1866
+ color: var(--fc-color-text);
1867
+ line-height: var(--fc-line-height-tight);
1868
+ overflow: hidden;
1869
+ text-overflow: ellipsis;
1870
+ display: -webkit-box;
1871
+ -webkit-line-clamp: 2;
1872
+ -webkit-box-orient: vertical;
1873
+ }
1874
+ .fc-card__description {
1875
+ font-size: var(--fc-font-size-sm);
1876
+ color: var(--fc-color-text-secondary);
1877
+ line-height: var(--fc-line-height-normal);
1878
+ overflow: hidden;
1879
+ text-overflow: ellipsis;
1880
+ display: -webkit-box;
1881
+ -webkit-line-clamp: 3;
1882
+ -webkit-box-orient: vertical;
1883
+ }
1884
+ .fc-card__extra-info {
1885
+ font-size: var(--fc-font-size-md);
1886
+ color: var(--fc-color-primary);
1887
+ font-weight: var(--fc-font-weight-medium);
1888
+ margin-top: var(--fc-space-xs);
1889
+ }
1890
+ .fc-card__actions {
1891
+ margin-top: var(--fc-space-sm);
1892
+ padding-top: var(--fc-space-sm);
1893
+ border-top: 1px solid var(--fc-color-border-light);
1894
+ display: flex;
1895
+ gap: var(--fc-space-sm);
1896
+ align-items: center;
1897
+ }
1898
+ .fc-card__actions .fc-button {
1899
+ flex: 1;
1900
+ }
1901
+ @media (max-width: 640px) {
1902
+ .fc-card__content {
1903
+ padding: var(--fc-space-md);
1904
+ }
1905
+ .fc-card__title {
1906
+ font-size: var(--fc-font-size-md);
1907
+ }
1908
+ .fc-card__description {
1909
+ font-size: var(--fc-font-size-xs);
1910
+ }
1911
+ .fc-card__extra-info {
1912
+ font-size: var(--fc-font-size-sm);
1913
+ }
1914
+ }
1915
+ .fc-card__image {
1916
+ background-color: var(--fc-color-bg-tertiary);
1917
+ position: relative;
1918
+ }
1919
+ .fc-card__image::after {
1920
+ content: "\1f4f7";
1921
+ position: absolute;
1922
+ top: 50%;
1923
+ left: 50%;
1924
+ transform: translate(-50%, -50%);
1925
+ font-size: 32px;
1926
+ color: var(--fc-color-text-tertiary);
1927
+ display: none;
1928
+ }
1929
+ .fc-card__image[src=""],
1930
+ .fc-card__image:not([src]) {
1931
+ opacity: 0;
1932
+ }
1933
+ .fc-card__image[src=""] + .fc-card__image::after,
1934
+ .fc-card__image:not([src]) + .fc-card__image::after {
1935
+ display: block;
1936
+ }
1937
+
1938
+ /* src/components/Bar/TabBar.css */
1939
+ .fc-tab-bar {
1940
+ --tab-bar-bg: var(--fc-color-bg-secondary);
1941
+ --tab-color: var(--fc-color-text-secondary);
1942
+ --tab-hover-color: var(--fc-color-primary);
1943
+ --tab-hover-bg: var(--fc-color-bg-tertiary);
1944
+ --tab-active-color: var(--fc-color-primary);
1945
+ --tab-active-bg: var(--fc-color-bg);
1946
+ --tab-active-indicator: var(--fc-color-primary);
1947
+ --tab-bar-radius-tl: var(--fc-radius-md);
1948
+ --tab-bar-radius-tr: var(--fc-radius-md);
1949
+ --tab-bar-radius-br: 0px;
1950
+ --tab-bar-radius-bl: 0px;
1951
+ --tab-item-radius-tl: 0px;
1952
+ --tab-item-radius-tr: 0px;
1953
+ --tab-item-radius-br: 0px;
1954
+ --tab-item-radius-bl: 0px;
1955
+ display: flex;
1956
+ flex-direction: column;
1957
+ width: 100%;
1958
+ background-color: var(--tab-bar-bg);
1959
+ color: var(--fc-color-text);
1960
+ overflow: hidden;
1961
+ border-radius: var(--tab-bar-radius-tl) var(--tab-bar-radius-tr) var(--tab-bar-radius-br) var(--tab-bar-radius-bl);
1962
+ }
1963
+ .fc-tab-bar--radius-none {
1964
+ --tab-bar-radius-tl: 0px;
1965
+ --tab-bar-radius-tr: 0px;
1966
+ --tab-bar-radius-br: 0px;
1967
+ --tab-bar-radius-bl: 0px;
1968
+ }
1969
+ .fc-tab-bar--radius-sm {
1970
+ --tab-bar-radius-tl: var(--fc-radius-sm, 4px);
1971
+ --tab-bar-radius-tr: var(--fc-radius-sm, 4px);
1972
+ }
1973
+ .fc-tab-bar--radius-md {
1974
+ --tab-bar-radius-tl: var(--fc-radius-md, 8px);
1975
+ --tab-bar-radius-tr: var(--fc-radius-md, 8px);
1976
+ }
1977
+ .fc-tab-bar--radius-lg {
1978
+ --tab-bar-radius-tl: var(--fc-radius-lg, 12px);
1979
+ --tab-bar-radius-tr: var(--fc-radius-lg, 12px);
1980
+ }
1981
+ .fc-tab-bar--radius-xl {
1982
+ --tab-bar-radius-tl: var(--fc-radius-xl, 16px);
1983
+ --tab-bar-radius-tr: var(--fc-radius-xl, 16px);
1984
+ }
1985
+ .fc-tab-bar--radius-full {
1986
+ --tab-bar-radius-tl: var(--fc-radius-full, 9999px);
1987
+ --tab-bar-radius-tr: var(--fc-radius-full, 9999px);
1988
+ }
1989
+ .fc-tab-bar__nav {
1990
+ flex-shrink: 0;
1991
+ overflow-x: auto;
1992
+ overflow-y: hidden;
1993
+ }
1994
+ .fc-tab-bar__nav-wrap {
1995
+ display: flex;
1996
+ gap: 0;
1997
+ align-items: stretch;
1998
+ }
1999
+ .fc-tab-bar__tab {
2000
+ position: relative;
2001
+ display: inline-flex;
2002
+ align-items: center;
2003
+ gap: var(--fc-space-sm, 8px);
2004
+ padding: var(--fc-space-sm, 8px) var(--fc-space-lg, 16px);
2005
+ font-size: var(--fc-font-size-md, 14px);
2006
+ color: var(--tab-color);
2007
+ background-color: transparent;
2008
+ cursor: pointer;
2009
+ transition: all var(--fc-transition, 150ms ease);
2010
+ white-space: nowrap;
2011
+ border: none;
2012
+ user-select: none;
2013
+ border-radius: var(--tab-item-radius-tl) var(--tab-item-radius-tr) var(--tab-item-radius-br) var(--tab-item-radius-bl);
2014
+ }
2015
+ .fc-tab-bar__tab:hover:not(.fc-tab-bar__tab--disabled):not(.fc-tab-bar__tab--dragging) {
2016
+ color: var(--tab-hover-color);
2017
+ background-color: var(--tab-hover-bg);
2018
+ }
2019
+ .fc-tab-bar__tab--active {
2020
+ color: var(--tab-active-color);
2021
+ background-color: var(--tab-active-bg);
2022
+ }
2023
+ .fc-tab-bar__tab--disabled {
2024
+ color: var(--fc-color-text-disabled);
2025
+ cursor: not-allowed;
2026
+ opacity: 0.6;
2027
+ }
2028
+ .fc-tab-bar--attached {
2029
+ border-bottom: 2px solid var(--fc-color-border);
2030
+ }
2031
+ .fc-tab-bar--attached .fc-tab-bar__tab {
2032
+ border-bottom: 2px solid transparent;
2033
+ margin-bottom: -2px;
2034
+ }
2035
+ .fc-tab-bar--attached .fc-tab-bar__tab--active {
2036
+ border-bottom-color: var(--tab-active-indicator);
2037
+ }
2038
+ .fc-tab-bar--floating {
2039
+ border-bottom: none;
2040
+ }
2041
+ .fc-tab-bar--floating .fc-tab-bar__nav {
2042
+ padding: var(--fc-space-xs, 6px) var(--fc-space-sm, 8px);
2043
+ }
2044
+ .fc-tab-bar--floating .fc-tab-bar__nav-wrap {
2045
+ gap: var(--fc-space-xs, 4px);
2046
+ align-items: center;
2047
+ }
2048
+ .fc-tab-bar--floating .fc-tab-bar__tab {
2049
+ padding: var(--fc-space-xs, 6px) var(--fc-space-lg, 16px);
2050
+ border-bottom: none;
2051
+ margin-bottom: 0;
2052
+ }
2053
+ .fc-tab-bar--floating {
2054
+ --tab-item-radius-tl: var(--fc-radius-full, 9999px);
2055
+ --tab-item-radius-tr: var(--fc-radius-full, 9999px);
2056
+ --tab-item-radius-br: var(--fc-radius-full, 9999px);
2057
+ --tab-item-radius-bl: var(--fc-radius-full, 9999px);
2058
+ }
2059
+ .fc-tab-bar--floating .fc-tab-bar__tab--active {
2060
+ background-color: var(--tab-active-bg);
2061
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.06);
2062
+ }
2063
+ .fc-tab-bar--tab-radius-none {
2064
+ --tab-item-radius-tl: 0px;
2065
+ --tab-item-radius-tr: 0px;
2066
+ --tab-item-radius-br: 0px;
2067
+ --tab-item-radius-bl: 0px;
2068
+ }
2069
+ .fc-tab-bar--tab-radius-sm {
2070
+ --tab-item-radius-tl: var(--fc-radius-sm, 4px);
2071
+ --tab-item-radius-tr: var(--fc-radius-sm, 4px);
2072
+ --tab-item-radius-br: var(--fc-radius-sm, 4px);
2073
+ --tab-item-radius-bl: var(--fc-radius-sm, 4px);
2074
+ }
2075
+ .fc-tab-bar--tab-radius-md {
2076
+ --tab-item-radius-tl: var(--fc-radius-md, 8px);
2077
+ --tab-item-radius-tr: var(--fc-radius-md, 8px);
2078
+ --tab-item-radius-br: var(--fc-radius-md, 8px);
2079
+ --tab-item-radius-bl: var(--fc-radius-md, 8px);
2080
+ }
2081
+ .fc-tab-bar--tab-radius-lg {
2082
+ --tab-item-radius-tl: var(--fc-radius-lg, 12px);
2083
+ --tab-item-radius-tr: var(--fc-radius-lg, 12px);
2084
+ --tab-item-radius-br: var(--fc-radius-lg, 12px);
2085
+ --tab-item-radius-bl: var(--fc-radius-lg, 12px);
2086
+ }
2087
+ .fc-tab-bar--tab-radius-xl {
2088
+ --tab-item-radius-tl: var(--fc-radius-xl, 16px);
2089
+ --tab-item-radius-tr: var(--fc-radius-xl, 16px);
2090
+ --tab-item-radius-br: var(--fc-radius-xl, 16px);
2091
+ --tab-item-radius-bl: var(--fc-radius-xl, 16px);
2092
+ }
2093
+ .fc-tab-bar--tab-radius-full {
2094
+ --tab-item-radius-tl: var(--fc-radius-full, 9999px);
2095
+ --tab-item-radius-tr: var(--fc-radius-full, 9999px);
2096
+ --tab-item-radius-br: var(--fc-radius-full, 9999px);
2097
+ --tab-item-radius-bl: var(--fc-radius-full, 9999px);
2098
+ }
2099
+ .fc-tab-bar__tab--draggable {
2100
+ cursor: grab;
2101
+ }
2102
+ .fc-tab-bar__tab--draggable:active {
2103
+ cursor: grabbing;
2104
+ }
2105
+ .fc-tab-bar__tab--dragging {
2106
+ opacity: 0.4;
2107
+ }
2108
+ .fc-tab-bar__tab-close {
2109
+ display: inline-flex;
2110
+ align-items: center;
2111
+ justify-content: center;
2112
+ width: 18px;
2113
+ height: 18px;
2114
+ font-size: 16px;
2115
+ line-height: 1;
2116
+ color: var(--fc-color-text-tertiary);
2117
+ border-radius: var(--fc-radius-sm, 4px);
2118
+ transition: all var(--fc-transition, 150ms ease);
2119
+ }
2120
+ .fc-tab-bar__tab-close:hover {
2121
+ color: var(--fc-color-text);
2122
+ background-color: var(--fc-color-border-light);
2123
+ }
2124
+ .fc-tab-bar__add-btn {
2125
+ display: inline-flex;
2126
+ align-items: center;
2127
+ justify-content: center;
2128
+ width: 32px;
2129
+ margin: 0 var(--fc-space-sm, 8px);
2130
+ font-size: 20px;
2131
+ font-weight: bold;
2132
+ color: var(--fc-color-text-secondary);
2133
+ cursor: pointer;
2134
+ transition: all var(--fc-transition, 150ms ease);
2135
+ border-radius: var(--fc-radius-sm, 4px);
2136
+ }
2137
+ .fc-tab-bar__add-btn:hover {
2138
+ color: var(--fc-color-primary);
2139
+ background-color: var(--fc-color-bg-tertiary);
2140
+ }
2141
+ .fc-tab-bar--floating .fc-tab-bar__add-btn {
2142
+ border-radius: var(--fc-radius-full, 9999px);
2143
+ }
2144
+ [data-theme=dark] .fc-tab-bar--attached {
2145
+ border-bottom-color: var(--fc-color-border);
2146
+ }
2147
+ [data-theme=dark] .fc-tab-bar__tab--active {
2148
+ background-color: var(--tab-active-bg);
2149
+ }
2150
+ [data-theme=dark] .fc-tab-bar__tab:hover:not(.fc-tab-bar__tab--disabled) {
2151
+ background-color: var(--tab-hover-bg);
2152
+ }
2153
+ [data-theme=dark] .fc-tab-bar--floating .fc-tab-bar__tab--active {
2154
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2);
2155
+ }
2156
+ [data-theme=dark] .fc-tab-bar__add-btn:hover {
2157
+ background-color: var(--fc-color-bg-tertiary);
2158
+ }
2159
+ [data-theme=dark] .fc-tab-bar__tab-close:hover {
2160
+ background-color: var(--fc-color-border-light);
2161
+ }
2162
+ @media (max-width: 768px) {
2163
+ .fc-tab-bar__tab {
2164
+ padding: var(--fc-space-xs, 6px) var(--fc-space-md, 12px);
2165
+ font-size: var(--fc-font-size-sm, 13px);
2166
+ }
2167
+ }
2168
+
2169
+ /* src/components/Tag/TagItem.css */
2170
+ .fc-tag-item {
2171
+ --tag-bg: var(--fc-color-bg-secondary);
2172
+ --tag-color: var(--fc-color-text-secondary);
2173
+ --tag-border: var(--fc-color-border);
2174
+ display: inline-flex;
2175
+ align-items: center;
2176
+ gap: var(--fc-space-xs);
2177
+ padding: 2px var(--fc-space-sm);
2178
+ border-radius: var(--fc-radius-sm);
2179
+ border: 1px solid var(--tag-border);
2180
+ background: var(--tag-bg);
2181
+ color: var(--tag-color);
2182
+ font-size: var(--fc-font-size-xs);
2183
+ font-family: var(--fc-font-family), serif;
2184
+ user-select: none;
2185
+ white-space: nowrap;
2186
+ transition: background 0.15s, border-color 0.15s;
2187
+ }
2188
+ .fc-tag-item--show {
2189
+ cursor: default;
2190
+ }
2191
+ .fc-tag-item--show:hover {
2192
+ border-color: var(--fc-color-border-hover, var(--tag-border));
2193
+ }
2194
+ .fc-tag-item--editing {
2195
+ padding: 1px var(--fc-space-xs);
2196
+ border-color: var(--fc-color-primary, var(--tag-border));
2197
+ }
2198
+ .fc-tag-item__name {
2199
+ color: var(--fc-color-text-tertiary);
2200
+ flex-shrink: 0;
2201
+ }
2202
+ .fc-tag-item__sep {
2203
+ color: var(--fc-color-text-tertiary);
2204
+ opacity: 0.5;
2205
+ flex-shrink: 0;
2206
+ }
2207
+ .fc-tag-item__value {
2208
+ max-width: 100px;
2209
+ overflow: hidden;
2210
+ text-overflow: ellipsis;
2211
+ white-space: nowrap;
2212
+ }
2213
+ .fc-tag-item__input {
2214
+ background: transparent;
2215
+ border: none;
2216
+ outline: none;
2217
+ color: var(--tag-color);
2218
+ font-size: inherit;
2219
+ font-family: inherit;
2220
+ min-width: 40px;
2221
+ width: 60px;
2222
+ max-width: 120px;
2223
+ padding: 0;
2224
+ }
2225
+ .fc-tag-item__input[type=number] {
2226
+ width: 50px;
2227
+ -moz-appearance: textfield;
2228
+ }
2229
+ .fc-tag-item__input[type=number]::-webkit-outer-spin-button,
2230
+ .fc-tag-item__input[type=number]::-webkit-inner-spin-button {
2231
+ -webkit-appearance: none;
2232
+ }
2233
+ .fc-tag-item--boolean {
2234
+ cursor: pointer;
2235
+ }
2236
+ .fc-tag-item--boolean:hover {
2237
+ background: var(--fc-color-bg-tertiary, var(--tag-bg));
2238
+ }
2239
+ .fc-tag-item__bool-true {
2240
+ color: var(--fc-color-success);
2241
+ }
2242
+ .fc-tag-item__bool-false {
2243
+ color: var(--fc-color-text-tertiary);
2244
+ }
2245
+
2246
+ /* src/components/MarkdownEditor/MarkdownEditor.css */
2247
+ .fc-md-wrap {
2248
+ --md-bg: var(--fc-color-bg-elevated);
2249
+ --md-toolbar-bg: var(--fc-color-bg-secondary);
2250
+ --md-border: var(--fc-color-border);
2251
+ border-radius: var(--fc-radius-md);
2252
+ border: 1px solid var(--md-border);
2253
+ overflow: hidden;
2254
+ font-family: var(--fc-font-family), serif;
2255
+ }
2256
+ .fc-md-wrap .w-md-editor {
2257
+ background: var(--md-bg) !important;
2258
+ border: none !important;
2259
+ box-shadow: none !important;
2260
+ border-radius: 0 !important;
2261
+ font-family: var(--fc-font-family), serif;
2262
+ --color-canvas-default: var(--md-bg);
2263
+ --color-canvas-subtle: var(--md-toolbar-bg);
2264
+ --color-border-default: var(--md-border);
2265
+ --color-fg-default: var(--fc-color-text);
2266
+ --color-fg-muted: var(--fc-color-text-secondary);
2267
+ }
2268
+ .fc-md-wrap .w-md-editor-toolbar {
2269
+ background: var(--md-toolbar-bg) !important;
2270
+ border-bottom: 1px solid var(--md-border) !important;
2271
+ padding: 4px 8px !important;
2272
+ }
2273
+ .fc-md-wrap .w-md-editor-toolbar ul > li > button {
2274
+ color: var(--fc-color-text-tertiary) !important;
2275
+ border-radius: var(--fc-radius-sm) !important;
2276
+ transition: background 0.12s, color 0.12s;
2277
+ }
2278
+ .fc-md-wrap .w-md-editor-toolbar ul > li > button:hover {
2279
+ background: var(--fc-color-bg-tertiary, rgba(255,255,255,0.06)) !important;
2280
+ color: var(--fc-color-text) !important;
2281
+ }
2282
+ .fc-md-wrap .w-md-editor-toolbar ul > li > button svg {
2283
+ fill: currentColor;
2284
+ stroke: currentColor;
2285
+ }
2286
+ .fc-md-ai-btn {
2287
+ font-size: 11px;
2288
+ font-weight: 600;
2289
+ color: var(--fc-color-primary, #6366f1) !important;
2290
+ padding: 2px 6px !important;
2291
+ letter-spacing: 0.2px;
2292
+ }
2293
+ .fc-md-ai-btn:hover {
2294
+ background: var(--fc-color-primary-bg, rgba(99,102,241,0.1)) !important;
2295
+ }
2296
+ .fc-md-wrap .w-md-editor-text {
2297
+ font-size: var(--fc-font-size-sm) !important;
2298
+ line-height: var(--fc-line-height-relaxed, 1.75) !important;
2299
+ color: var(--fc-color-text) !important;
2300
+ padding: 12px 14px !important;
2301
+ }
2302
+ .fc-md-wrap .w-md-editor-text-pre > code,
2303
+ .fc-md-wrap .w-md-editor-text-input {
2304
+ font-family: var(--fc-font-family-mono, ui-monospace, monospace) !important;
2305
+ font-size: var(--fc-font-size-sm) !important;
2306
+ }
2307
+ .fc-md-wrap .w-md-editor-bar {
2308
+ display: none !important;
2309
+ }
2310
+ .fc-md-wrap .wmde-markdown {
2311
+ background: transparent !important;
2312
+ font-family: var(--fc-font-family), serif;
2313
+ font-size: var(--fc-font-size-sm);
2314
+ color: var(--fc-color-text);
2315
+ padding: 12px 14px;
2316
+ }
2317
+ .fc-md-wrap .wmde-markdown h1,
2318
+ .fc-md-wrap .wmde-markdown h2,
2319
+ .fc-md-wrap .wmde-markdown h3 {
2320
+ color: var(--fc-color-text);
2321
+ border-color: var(--md-border);
2322
+ }
2323
+ .fc-md-wrap .wmde-markdown code {
2324
+ background: var(--fc-color-bg-tertiary, rgba(255,255,255,0.06));
2325
+ border-radius: 3px;
2326
+ font-family: var(--fc-font-family-mono, ui-monospace, monospace);
2327
+ }
2328
+ .fc-md-wrap .wmde-markdown pre {
2329
+ background: var(--fc-color-bg-secondary);
2330
+ border: 1px solid var(--md-border);
2331
+ }
2332
+ .fc-md-wrap .wmde-markdown blockquote {
2333
+ border-left-color: var(--fc-color-primary, #6366f1);
2334
+ color: var(--fc-color-text-secondary);
2335
+ }
2336
+
2337
+ /* src/components/ContextMenu/ContextMenuContext.css */
2338
+ .fc-context-menu {
2339
+ --ctx-bg: var(--fc-color-bg-elevated);
2340
+ --ctx-border: var(--fc-color-border);
2341
+ --ctx-item-hover-bg: var(--fc-color-bg-secondary);
2342
+ --ctx-danger-color: var(--fc-color-danger);
2343
+ position: fixed;
2344
+ z-index: var(--fc-z-dropdown, 9000);
2345
+ background: var(--ctx-bg);
2346
+ border: 1px solid var(--ctx-border);
2347
+ border-radius: var(--fc-radius-md);
2348
+ box-shadow: var(--fc-shadow-lg);
2349
+ padding: var(--fc-space-xs) 0;
2350
+ min-width: 160px;
2351
+ list-style: none;
2352
+ font-family: var(--fc-font-family), serif;
2353
+ user-select: none;
2354
+ animation: fc-ctx-in 0.1s ease;
2355
+ }
2356
+ @keyframes fc-ctx-in {
2357
+ from {
2358
+ opacity: 0;
2359
+ transform: scale(0.96);
2360
+ }
2361
+ to {
2362
+ opacity: 1;
2363
+ transform: scale(1);
2364
+ }
2365
+ }
2366
+ .fc-context-menu__item {
2367
+ display: flex;
2368
+ align-items: center;
2369
+ gap: var(--fc-space-sm);
2370
+ padding: var(--fc-space-xs) var(--fc-space-md);
2371
+ font-size: var(--fc-font-size-sm);
2372
+ color: var(--fc-color-text);
2373
+ cursor: pointer;
2374
+ transition: background 0.1s;
2375
+ line-height: var(--fc-line-height-tight);
2376
+ }
2377
+ .fc-context-menu__item:hover {
2378
+ background: var(--ctx-item-hover-bg);
2379
+ }
2380
+ .fc-context-menu__item--danger {
2381
+ color: var(--ctx-danger-color);
2382
+ }
2383
+ .fc-context-menu__item--danger:hover {
2384
+ background: color-mix(in srgb, var(--ctx-danger-color) 8%, transparent);
2385
+ }
2386
+ .fc-context-menu__item--disabled {
2387
+ opacity: 0.38;
2388
+ cursor: not-allowed;
2389
+ }
2390
+ .fc-context-menu__item--disabled:hover {
2391
+ background: transparent;
2392
+ }
2393
+ .fc-context-menu__icon {
2394
+ display: flex;
2395
+ align-items: center;
2396
+ font-size: var(--fc-font-size-md);
2397
+ flex-shrink: 0;
2398
+ width: 1.1em;
2399
+ color: var(--fc-color-text-tertiary);
2400
+ }
2401
+ .fc-context-menu__item--danger .fc-context-menu__icon {
2402
+ color: var(--ctx-danger-color);
2403
+ }
2404
+ .fc-context-menu__divider {
2405
+ height: 1px;
2406
+ background: var(--ctx-border);
2407
+ margin: var(--fc-space-xs) 0;
2408
+ list-style: none;
2409
+ }
2410
+
2411
+ /* src/components/SmartMessage/SmartMessage.css */
2412
+ .smart-message {
2413
+ display: flex;
2414
+ margin-bottom: 16px;
2415
+ animation: fadeIn 0.3s ease;
2416
+ }
2417
+ .smart-message-user {
2418
+ justify-content: flex-end;
2419
+ }
2420
+ .smart-message-user .message-header {
2421
+ justify-content: flex-end;
2422
+ }
2423
+ .smart-message-user .smart-message-content {
2424
+ background:
2425
+ linear-gradient(
2426
+ 135deg,
2427
+ #667eea 0%,
2428
+ #764ba2 100%);
2429
+ color: #ffffff;
2430
+ border-bottom-right-radius: 4px;
2431
+ }
2432
+ .smart-message-assistant {
2433
+ justify-content: flex-start;
2434
+ }
2435
+ .smart-message-assistant .smart-message-content {
2436
+ background: var(--fc-color-bg-tertiary, #f0f0f0);
2437
+ color: var(--fc-color-text, #333);
2438
+ border-bottom-left-radius: 4px;
2439
+ }
2440
+ .smart-message-content {
2441
+ max-width: 70%;
2442
+ padding: 10px 14px;
2443
+ border-radius: 12px;
2444
+ position: relative;
2445
+ transition: transform 0.2s ease;
2446
+ }
2447
+ .smart-message-content:hover {
2448
+ transform: translateX(2px);
2449
+ }
2450
+ .message-header {
2451
+ display: flex;
2452
+ gap: 8px;
2453
+ margin-bottom: 6px;
2454
+ font-size: 12px;
2455
+ }
2456
+ .message-sender {
2457
+ font-weight: 600;
2458
+ font-size: 13px;
2459
+ }
2460
+ .message-time {
2461
+ color: var(--fc-color-text-secondary, #999);
2462
+ font-size: 11px;
2463
+ }
2464
+ .message-text {
2465
+ line-height: 1.5;
2466
+ font-size: 14px;
2467
+ word-break: break-word;
2468
+ padding-right: 60px;
2469
+ }
2470
+ .copy-btn {
2471
+ position: absolute;
2472
+ right: 8px;
2473
+ bottom: 8px;
2474
+ display: inline-flex;
2475
+ align-items: center;
2476
+ gap: 4px;
2477
+ padding: 4px 8px;
2478
+ border: none;
2479
+ border-radius: 6px;
2480
+ font-size: 12px;
2481
+ cursor: pointer;
2482
+ background: rgba(0, 0, 0, 0.05);
2483
+ backdrop-filter: blur(4px);
2484
+ opacity: 0;
2485
+ transition: all 0.2s ease;
2486
+ }
2487
+ .smart-message-content:hover .copy-btn {
2488
+ opacity: 0.7;
2489
+ }
2490
+ .smart-message-user .copy-btn {
2491
+ color: rgba(255, 255, 255, 0.9);
2492
+ background: rgba(255, 255, 255, 0.15);
2493
+ }
2494
+ .smart-message-assistant .copy-btn {
2495
+ color: var(--fc-color-text-secondary, #666);
2496
+ }
2497
+ .copy-btn:hover {
2498
+ opacity: 1 !important;
2499
+ transform: translateY(-2px);
2500
+ background: rgba(102, 126, 234, 0.2);
2501
+ }
2502
+ .copy-btn.copied {
2503
+ opacity: 1 !important;
2504
+ background: #52c41a !important;
2505
+ color: #ffffff !important;
2506
+ }
2507
+ .message-status {
2508
+ font-size: 11px;
2509
+ margin-left: 8px;
2510
+ display: inline-block;
2511
+ }
2512
+ .message-status.sending {
2513
+ color: #faad14;
2514
+ }
2515
+ .message-status.error {
2516
+ color: #f5222d;
2517
+ }
2518
+ .smart-message-system {
2519
+ justify-content: center;
2520
+ }
2521
+ .system-message-wrapper {
2522
+ display: flex;
2523
+ align-items: center;
2524
+ justify-content: center;
2525
+ gap: 8px;
2526
+ padding: 6px 12px;
2527
+ background: rgba(0, 0, 0, 0.05);
2528
+ border-radius: 20px;
2529
+ color: #999;
2530
+ font-size: 12px;
2531
+ }
2532
+ .system-message-icon {
2533
+ display: flex;
2534
+ align-items: center;
2535
+ color: #999;
2536
+ }
2537
+ .system-message-text {
2538
+ line-height: 1.4;
2539
+ }
2540
+ .system-message-time {
2541
+ font-size: 10px;
2542
+ color: #bbb;
2543
+ }
2544
+ .smart-message-tool {
2545
+ justify-content: center;
2546
+ }
2547
+ .tool-message-wrapper {
2548
+ max-width: 80%;
2549
+ background: #f5f5f5;
2550
+ border-left: 3px solid #667eea;
2551
+ border-radius: 8px;
2552
+ overflow: hidden;
2553
+ font-size: 13px;
2554
+ }
2555
+ .tool-message-header {
2556
+ display: flex;
2557
+ align-items: center;
2558
+ gap: 8px;
2559
+ padding: 8px 12px;
2560
+ background: #e8e8e8;
2561
+ border-bottom: 1px solid #ddd;
2562
+ }
2563
+ .tool-message-icon {
2564
+ display: flex;
2565
+ align-items: center;
2566
+ color: #667eea;
2567
+ }
2568
+ .tool-message-name {
2569
+ font-weight: 600;
2570
+ font-size: 12px;
2571
+ color: #333;
2572
+ }
2573
+ .tool-message-content {
2574
+ padding: 12px;
2575
+ }
2576
+ .tool-message-params,
2577
+ .tool-message-result {
2578
+ margin-bottom: 8px;
2579
+ }
2580
+ .tool-message-params strong,
2581
+ .tool-message-result strong {
2582
+ display: block;
2583
+ font-size: 11px;
2584
+ color: #666;
2585
+ margin-bottom: 4px;
2586
+ }
2587
+ .tool-message-params pre,
2588
+ .tool-message-result pre {
2589
+ margin: 0;
2590
+ padding: 8px;
2591
+ background: #fff;
2592
+ border-radius: 4px;
2593
+ font-size: 12px;
2594
+ overflow-x: auto;
2595
+ font-family: "Courier New", monospace;
2596
+ }
2597
+ .tool-message-time {
2598
+ padding: 4px 12px 8px;
2599
+ font-size: 10px;
2600
+ color: #999;
2601
+ text-align: right;
2602
+ }
2603
+ @keyframes fadeIn {
2604
+ from {
2605
+ opacity: 0;
2606
+ transform: translateY(10px);
2607
+ }
2608
+ to {
2609
+ opacity: 1;
2610
+ transform: translateY(0);
2611
+ }
2612
+ }
2613
+ @media (max-width: 768px) {
2614
+ .smart-message-content {
2615
+ max-width: 85%;
2616
+ }
2617
+ .tool-message-wrapper {
2618
+ max-width: 90%;
2619
+ }
2620
+ .message-text {
2621
+ padding-right: 50px;
2622
+ }
2623
+ }
2624
+
2625
+ /* src/components/Chat/Chat.css */
2626
+ .chat-container {
2627
+ --chat-primary: #667eea;
2628
+ --chat-primary-gradient:
2629
+ linear-gradient(
2630
+ 135deg,
2631
+ #667eea 0%,
2632
+ #764ba2 100%);
2633
+ --chat-border-radius: 12px;
2634
+ --chat-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
2635
+ --chat-border-width: 1px;
2636
+ }
2637
+ .chat-container {
2638
+ display: flex;
2639
+ flex-direction: column;
2640
+ border-radius: var(--chat-border-radius);
2641
+ overflow: hidden;
2642
+ background: var(--fc-color-bg);
2643
+ box-shadow: var(--chat-shadow);
2644
+ position: relative;
2645
+ height: 100%;
2646
+ }
2647
+ .chat-header {
2648
+ padding: 16px 20px;
2649
+ border-bottom: var(--chat-border-width) solid var(--fc-color-border);
2650
+ background:
2651
+ linear-gradient(
2652
+ 135deg,
2653
+ var(--fc-color-bg-secondary) 0%,
2654
+ var(--fc-color-bg) 100%);
2655
+ display: flex;
2656
+ justify-content: space-between;
2657
+ align-items: center;
2658
+ flex-shrink: 0;
2659
+ }
2660
+ .chat-title {
2661
+ font-size: 16px;
2662
+ font-weight: 600;
2663
+ background:
2664
+ linear-gradient(
2665
+ 135deg,
2666
+ var(--fc-color-text) 0%,
2667
+ var(--fc-color-text-secondary) 100%);
2668
+ background-clip: text;
2669
+ -webkit-background-clip: text;
2670
+ color: transparent;
2671
+ }
2672
+ .chat-header-actions {
2673
+ display: flex;
2674
+ align-items: center;
2675
+ gap: 10px;
2676
+ }
2677
+ .minimize-btn,
2678
+ .history-btn,
2679
+ .restore-btn-only {
2680
+ display: inline-flex;
2681
+ align-items: center;
2682
+ justify-content: center;
2683
+ width: 34px;
2684
+ height: 34px;
2685
+ padding: 0;
2686
+ background: transparent;
2687
+ border: none;
2688
+ border-radius: 10px;
2689
+ color: var(--fc-color-text-secondary);
2690
+ cursor: pointer;
2691
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
2692
+ position: relative;
2693
+ overflow: hidden;
2694
+ flex-shrink: 0;
2695
+ }
2696
+ .minimize-btn::before,
2697
+ .history-btn::before,
2698
+ .restore-btn-only::before {
2699
+ content: "";
2700
+ position: absolute;
2701
+ top: 50%;
2702
+ left: 50%;
2703
+ width: 0;
2704
+ height: 0;
2705
+ border-radius: 50%;
2706
+ background: rgba(102, 126, 234, 0.1);
2707
+ transform: translate(-50%, -50%);
2708
+ transition: width 0.4s, height 0.4s;
2709
+ }
2710
+ .minimize-btn:hover::before,
2711
+ .history-btn:hover::before,
2712
+ .restore-btn-only:hover::before {
2713
+ width: 40px;
2714
+ height: 40px;
2715
+ }
2716
+ .minimize-btn:hover,
2717
+ .history-btn:hover,
2718
+ .restore-btn-only:hover {
2719
+ background: rgba(102, 126, 234, 0.1);
2720
+ color: var(--chat-primary);
2721
+ transform: translateY(-1px);
2722
+ }
2723
+ .minimize-btn:active,
2724
+ .history-btn:active,
2725
+ .restore-btn-only:active {
2726
+ transform: translateY(0);
2727
+ }
2728
+ .minimize-btn svg,
2729
+ .history-btn svg,
2730
+ .restore-btn-only svg {
2731
+ width: 18px;
2732
+ height: 18px;
2733
+ display: block;
2734
+ position: relative;
2735
+ z-index: 1;
2736
+ }
2737
+ .chat-messages {
2738
+ flex: 1;
2739
+ overflow-y: auto;
2740
+ padding: 20px;
2741
+ display: flex;
2742
+ flex-direction: column;
2743
+ gap: 16px;
2744
+ background: var(--fc-color-bg);
2745
+ position: relative;
2746
+ }
2747
+ .chat-messages::-webkit-scrollbar {
2748
+ width: 6px;
2749
+ }
2750
+ .chat-messages::-webkit-scrollbar-track {
2751
+ background: var(--fc-color-border-light);
2752
+ border-radius: 3px;
2753
+ }
2754
+ .chat-messages::-webkit-scrollbar-thumb {
2755
+ background: var(--fc-color-border);
2756
+ border-radius: 3px;
2757
+ }
2758
+ .chat-messages::-webkit-scrollbar-thumb:hover {
2759
+ background: var(--fc-color-text-secondary);
2760
+ }
2761
+ .typing-wrapper {
2762
+ display: flex;
2763
+ justify-content: flex-start;
2764
+ padding: 8px 0;
2765
+ }
2766
+ .typing-indicator {
2767
+ display: flex;
2768
+ gap: 4px;
2769
+ padding: 10px 14px;
2770
+ background: var(--fc-color-bg-tertiary, #f0f0f0);
2771
+ border-radius: 12px 12px 12px 4px;
2772
+ width: fit-content;
2773
+ }
2774
+ .typing-indicator span {
2775
+ width: 8px;
2776
+ height: 8px;
2777
+ background: var(--fc-color-text-secondary);
2778
+ border-radius: 50%;
2779
+ animation: typing 1.4s infinite;
2780
+ }
2781
+ .typing-indicator span:nth-child(2) {
2782
+ animation-delay: 0.2s;
2783
+ }
2784
+ .typing-indicator span:nth-child(3) {
2785
+ animation-delay: 0.4s;
2786
+ }
2787
+ @keyframes typing {
2788
+ 0%, 60%, 100% {
2789
+ transform: translateY(0);
2790
+ opacity: 0.5;
2791
+ }
2792
+ 30% {
2793
+ transform: translateY(-10px);
2794
+ opacity: 1;
2795
+ }
2796
+ }
2797
+ .history-panel {
2798
+ position: absolute;
2799
+ top: 0;
2800
+ right: 0;
2801
+ width: 380px;
2802
+ height: 100%;
2803
+ background: var(--fc-color-bg-elevated);
2804
+ border-left: 1px solid var(--fc-color-border);
2805
+ box-shadow: -4px 0 20px rgba(0, 0, 0, 0.1);
2806
+ display: flex;
2807
+ flex-direction: column;
2808
+ z-index: 1000;
2809
+ animation: slideIn 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2810
+ }
2811
+ @keyframes slideIn {
2812
+ from {
2813
+ transform: translateX(100%);
2814
+ }
2815
+ to {
2816
+ transform: translateX(0);
2817
+ }
2818
+ }
2819
+ .history-header {
2820
+ display: flex;
2821
+ justify-content: space-between;
2822
+ align-items: center;
2823
+ padding: 16px 20px;
2824
+ border-bottom: 1px solid var(--fc-color-border);
2825
+ background:
2826
+ linear-gradient(
2827
+ 135deg,
2828
+ var(--fc-color-bg-secondary) 0%,
2829
+ var(--fc-color-bg) 100%);
2830
+ }
2831
+ .history-header h3 {
2832
+ margin: 0;
2833
+ font-size: 16px;
2834
+ font-weight: 600;
2835
+ background:
2836
+ linear-gradient(
2837
+ 135deg,
2838
+ var(--fc-color-text) 0%,
2839
+ var(--fc-color-text-secondary) 100%);
2840
+ background-clip: text;
2841
+ -webkit-background-clip: text;
2842
+ color: transparent;
2843
+ }
2844
+ .close-history-btn {
2845
+ background: none;
2846
+ border: none;
2847
+ font-size: 20px;
2848
+ cursor: pointer;
2849
+ color: var(--fc-color-text-secondary);
2850
+ padding: 4px;
2851
+ border-radius: 8px;
2852
+ transition: all 0.2s;
2853
+ width: 32px;
2854
+ height: 32px;
2855
+ display: flex;
2856
+ align-items: center;
2857
+ justify-content: center;
2858
+ }
2859
+ .close-history-btn:hover {
2860
+ background: rgba(245, 34, 45, 0.1);
2861
+ color: #f5222d;
2862
+ transform: rotate(90deg);
2863
+ }
2864
+ .history-list {
2865
+ flex: 1;
2866
+ overflow-y: auto;
2867
+ padding: 12px;
2868
+ }
2869
+ .new-conversation-btn-large {
2870
+ width: 100%;
2871
+ display: flex;
2872
+ align-items: center;
2873
+ justify-content: center;
2874
+ gap: 8px;
2875
+ padding: 12px 16px;
2876
+ margin-bottom: 16px;
2877
+ background: var(--chat-primary-gradient);
2878
+ border: none;
2879
+ border-radius: 12px;
2880
+ font-size: 14px;
2881
+ font-weight: 600;
2882
+ color: #ffffff;
2883
+ cursor: pointer;
2884
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2885
+ box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
2886
+ }
2887
+ .new-conversation-btn-large:hover {
2888
+ transform: translateY(-2px);
2889
+ box-shadow: 0 4px 16px rgba(102, 126, 234, 0.4);
2890
+ }
2891
+ .history-item {
2892
+ display: flex;
2893
+ align-items: flex-start;
2894
+ justify-content: space-between;
2895
+ padding: 12px;
2896
+ margin-bottom: 8px;
2897
+ border-radius: 12px;
2898
+ cursor: pointer;
2899
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
2900
+ background: var(--fc-color-bg-tertiary);
2901
+ border: 1px solid transparent;
2902
+ }
2903
+ .history-item:hover {
2904
+ background: var(--fc-color-bg-elevated);
2905
+ border-color: var(--fc-color-border);
2906
+ transform: translateX(4px);
2907
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
2908
+ }
2909
+ .history-item.active {
2910
+ background:
2911
+ linear-gradient(
2912
+ 135deg,
2913
+ rgba(102, 126, 234, 0.1) 0%,
2914
+ rgba(118, 75, 162, 0.1) 100%);
2915
+ border-color: var(--chat-primary);
2916
+ }
2917
+ .history-item-content {
2918
+ flex: 1;
2919
+ min-width: 0;
2920
+ }
2921
+ .history-item-title {
2922
+ display: flex;
2923
+ align-items: center;
2924
+ gap: 8px;
2925
+ margin-bottom: 6px;
2926
+ font-size: 14px;
2927
+ font-weight: 500;
2928
+ color: var(--fc-color-text);
2929
+ }
2930
+ .history-item.active .history-item-title {
2931
+ color: var(--chat-primary);
2932
+ }
2933
+ .history-item-preview {
2934
+ font-size: 12px;
2935
+ color: var(--fc-color-text-secondary);
2936
+ margin-bottom: 6px;
2937
+ overflow: hidden;
2938
+ text-overflow: ellipsis;
2939
+ white-space: nowrap;
2940
+ }
2941
+ .history-item-meta {
2942
+ display: flex;
2943
+ gap: 12px;
2944
+ font-size: 11px;
2945
+ color: var(--fc-color-text-tertiary);
2946
+ }
2947
+ .history-item-actions {
2948
+ margin-left: 8px;
2949
+ flex-shrink: 0;
2950
+ }
2951
+ .delete-conversation-btn {
2952
+ background: none;
2953
+ border: none;
2954
+ padding: 6px;
2955
+ border-radius: 8px;
2956
+ cursor: pointer;
2957
+ color: var(--fc-color-text-secondary);
2958
+ transition: all 0.2s;
2959
+ display: flex;
2960
+ align-items: center;
2961
+ justify-content: center;
2962
+ }
2963
+ .delete-conversation-btn:hover {
2964
+ background: rgba(245, 34, 45, 0.1);
2965
+ color: #f5222d;
2966
+ transform: scale(1.1);
2967
+ }
2968
+ .delete-confirm {
2969
+ display: flex;
2970
+ gap: 8px;
2971
+ animation: fadeIn 0.2s ease;
2972
+ }
2973
+ .confirm-delete,
2974
+ .cancel-delete {
2975
+ padding: 4px;
2976
+ width: 28px;
2977
+ height: 28px;
2978
+ border: none;
2979
+ border-radius: 8px;
2980
+ cursor: pointer;
2981
+ transition: all 0.2s;
2982
+ display: flex;
2983
+ align-items: center;
2984
+ justify-content: center;
2985
+ }
2986
+ .confirm-delete {
2987
+ background:
2988
+ linear-gradient(
2989
+ 135deg,
2990
+ #52c41a 0%,
2991
+ #73d13d 100%);
2992
+ }
2993
+ .confirm-delete:hover {
2994
+ transform: scale(1.1);
2995
+ box-shadow: 0 2px 8px rgba(82, 196, 26, 0.4);
2996
+ }
2997
+ .cancel-delete {
2998
+ background:
2999
+ linear-gradient(
3000
+ 135deg,
3001
+ #f5222d 0%,
3002
+ #ff4d4f 100%);
3003
+ }
3004
+ .cancel-delete:hover {
3005
+ transform: scale(1.1);
3006
+ box-shadow: 0 2px 8px rgba(245, 34, 45, 0.4);
3007
+ }
3008
+ .confirm-delete svg,
3009
+ .cancel-delete svg {
3010
+ stroke: white;
3011
+ width: 14px;
3012
+ height: 14px;
3013
+ }
3014
+ .empty-history {
3015
+ text-align: center;
3016
+ padding: 40px 20px;
3017
+ color: var(--fc-color-text-secondary);
3018
+ }
3019
+ .empty-hint {
3020
+ font-size: 12px;
3021
+ margin-top: 8px;
3022
+ opacity: 0.7;
3023
+ }
3024
+ .chat-container-minimized {
3025
+ display: inline-flex;
3026
+ background: transparent;
3027
+ }
3028
+ @media (max-width: 768px) {
3029
+ .chat-header {
3030
+ padding: 12px 16px;
3031
+ }
3032
+ .chat-messages {
3033
+ padding: 16px;
3034
+ }
3035
+ .history-panel {
3036
+ width: 100%;
3037
+ }
3038
+ .minimize-btn,
3039
+ .history-btn,
3040
+ .restore-btn-only {
3041
+ width: 30px;
3042
+ height: 30px;
3043
+ }
3044
+ .minimize-btn svg,
3045
+ .history-btn svg,
3046
+ .restore-btn-only svg {
3047
+ width: 16px;
3048
+ height: 16px;
3049
+ }
3050
+ }
3051
+ @media (prefers-reduced-motion: reduce) {
3052
+ * {
3053
+ animation: none !important;
3054
+ transition: none !important;
3055
+ }
3056
+ }
3057
+
3058
+ /* src/style/index.css */
3059
+ :root {
3060
+ --fc-blue-50: #EBF4FD;
3061
+ --fc-blue-100: #C8E0F8;
3062
+ --fc-blue-200: #93C2F0;
3063
+ --fc-blue-300: #5DA4E8;
3064
+ --fc-blue-400: #2E8AE5;
3065
+ --fc-blue-500: #378ADD;
3066
+ --fc-blue-600: #185FA5;
3067
+ --fc-blue-700: #0C447C;
3068
+ --fc-blue-800: #072D54;
3069
+ --fc-blue-900: #031A33;
3070
+ --fc-gray-50: #FAFAF9;
3071
+ --fc-gray-100: #F1EFE8;
3072
+ --fc-gray-150: #E0DDD4;
3073
+ --fc-gray-200: #D3D1C7;
3074
+ --fc-gray-400: #B5B2A6;
3075
+ --fc-gray-600: #5F5E5A;
3076
+ --fc-gray-700: #3D3D3A;
3077
+ --fc-gray-800: #2C2C2A;
3078
+ --fc-gray-900: #1A1A19;
3079
+ --fc-red-50: #FDEDED;
3080
+ --fc-red-100: #FAD0D0;
3081
+ --fc-red-500: #E24B4A;
3082
+ --fc-red-700: #A83232;
3083
+ --fc-green-50: #EFF6E6;
3084
+ --fc-green-100: #D2EBBA;
3085
+ --fc-green-500: #639922;
3086
+ --fc-green-700: #426815;
3087
+ --fc-yellow-50: #FFF4E0;
3088
+ --fc-yellow-100: #FFE4A8;
3089
+ --fc-yellow-500: #D68000;
3090
+ --fc-yellow-700: #9A5C00;
3091
+ --fc-purple-50: #EEE9FD;
3092
+ --fc-purple-500: #7C5CE8;
3093
+ --fc-purple-700: #5038B0;
3094
+ --fc-orange-50: #FEF0E6;
3095
+ --fc-orange-500: #E8711A;
3096
+ --fc-orange-700: #AA4E0C;
3097
+ --fc-teal-50: #E0F5F5;
3098
+ --fc-teal-500: #00A3A3;
3099
+ --fc-teal-700: #007070;
3100
+ --fc-pink-50: #FDECF3;
3101
+ --fc-pink-500: #D4306A;
3102
+ --fc-pink-700: #9C1E4C;
3103
+ --fc-color-primary: var(--fc-blue-500);
3104
+ --fc-color-primary-hover: var(--fc-blue-600);
3105
+ --fc-color-primary-active: var(--fc-blue-700);
3106
+ --fc-color-primary-subtle: var(--fc-blue-50);
3107
+ --fc-color-bg: #FFFFFF;
3108
+ --fc-color-bg-secondary: var(--fc-gray-50);
3109
+ --fc-color-bg-tertiary: var(--fc-gray-100);
3110
+ --fc-color-bg-elevated: #FFFFFF;
3111
+ --fc-color-bg-overlay: rgba(0, 0, 0, 0.4);
3112
+ --fc-color-text: var(--fc-gray-900);
3113
+ --fc-color-text-secondary: var(--fc-gray-600);
3114
+ --fc-color-text-tertiary: var(--fc-gray-400);
3115
+ --fc-color-text-disabled: var(--fc-gray-400);
3116
+ --fc-color-text-on-primary: #FFFFFF;
3117
+ --fc-color-text-link: var(--fc-blue-600);
3118
+ --fc-color-text-link-hover: var(--fc-blue-700);
3119
+ --fc-color-border: var(--fc-gray-200);
3120
+ --fc-color-border-light: var(--fc-gray-150);
3121
+ --fc-color-border-hover: var(--fc-gray-600);
3122
+ --fc-color-border-focus: var(--fc-blue-500);
3123
+ --fc-color-danger: var(--fc-red-500);
3124
+ --fc-color-danger-hover: var(--fc-red-700);
3125
+ --fc-color-danger-bg: var(--fc-red-50);
3126
+ --fc-color-danger-border: var(--fc-red-100);
3127
+ --fc-color-success: var(--fc-green-500);
3128
+ --fc-color-success-hover: var(--fc-green-700);
3129
+ --fc-color-success-bg: var(--fc-green-50);
3130
+ --fc-color-success-border: var(--fc-green-100);
3131
+ --fc-color-warning: var(--fc-yellow-500);
3132
+ --fc-color-warning-hover: var(--fc-yellow-700);
3133
+ --fc-color-warning-bg: var(--fc-yellow-50);
3134
+ --fc-color-warning-border: var(--fc-yellow-100);
3135
+ --fc-color-info: var(--fc-blue-500);
3136
+ --fc-color-info-bg: var(--fc-blue-50);
3137
+ --fc-color-info-border: var(--fc-blue-100);
3138
+ --fc-color-purple: var(--fc-purple-500);
3139
+ --fc-color-purple-bg: var(--fc-purple-50);
3140
+ --fc-color-orange: var(--fc-orange-500);
3141
+ --fc-color-orange-bg: var(--fc-orange-50);
3142
+ --fc-color-teal: var(--fc-teal-500);
3143
+ --fc-color-teal-bg: var(--fc-teal-50);
3144
+ --fc-color-pink: var(--fc-pink-500);
3145
+ --fc-color-pink-bg: var(--fc-pink-50);
3146
+ --fc-space-xs: 0.25rem;
3147
+ --fc-space-sm: 0.5rem;
3148
+ --fc-space-md: 0.75rem;
3149
+ --fc-space-lg: 1rem;
3150
+ --fc-space-xl: 1.5rem;
3151
+ --fc-space-2xl: 2rem;
3152
+ --fc-space-3xl: 3rem;
3153
+ --fc-radius-xs: 0.125rem;
3154
+ --fc-radius-sm: 0.25rem;
3155
+ --fc-radius-md: 0.5rem;
3156
+ --fc-radius-lg: 0.75rem;
3157
+ --fc-radius-xl: 1rem;
3158
+ --fc-radius-full: 9999px;
3159
+ --fc-font-family:
3160
+ -apple-system,
3161
+ BlinkMacSystemFont,
3162
+ "Segoe UI",
3163
+ Roboto,
3164
+ sans-serif;
3165
+ --fc-font-size-xs: 0.6875rem;
3166
+ --fc-font-size-sm: 0.8125rem;
3167
+ --fc-font-size-md: 0.9375rem;
3168
+ --fc-font-size-lg: 1.125rem;
3169
+ --fc-font-size-xl: 1.375rem;
3170
+ --fc-font-weight-normal: 400;
3171
+ --fc-font-weight-medium: 500;
3172
+ --fc-font-weight-bold: 600;
3173
+ --fc-line-height-tight: 1.3;
3174
+ --fc-line-height-normal: 1.6;
3175
+ --fc-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.04);
3176
+ --fc-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04);
3177
+ --fc-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.04);
3178
+ --fc-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.10), 0 4px 8px rgba(0, 0, 0, 0.06);
3179
+ --fc-transition: 150ms ease;
3180
+ --fc-transition-slow: 250ms ease;
3181
+ --fc-transition-fast: 100ms ease;
3182
+ --fc-z-dropdown: 100;
3183
+ --fc-z-sticky: 200;
3184
+ --fc-z-modal: 300;
3185
+ --fc-z-toast: 400;
3186
+ --fc-z-tooltip: 500;
3187
+ }
3188
+ body {
3189
+ font-family:
3190
+ "Microsoft YaHei UI",
3191
+ -apple-system,
3192
+ BlinkMacSystemFont,
3193
+ "Segoe UI",
3194
+ Roboto,
3195
+ sans-serif;
3196
+ background-color: var(--fc-color-bg);
3197
+ color: var(--fc-color-text);
3198
+ }
3199
+ [data-theme=dark] {
3200
+ --fc-color-primary: var(--fc-blue-300);
3201
+ --fc-color-primary-hover: var(--fc-blue-200);
3202
+ --fc-color-primary-active: var(--fc-blue-100);
3203
+ --fc-color-primary-subtle: rgba(55, 138, 221, 0.12);
3204
+ --fc-color-bg: #0F0F0F;
3205
+ --fc-color-bg-secondary: #1A1A1A;
3206
+ --fc-color-bg-tertiary: #222222;
3207
+ --fc-color-bg-elevated: #282828;
3208
+ --fc-color-bg-overlay: rgba(0, 0, 0, 0.6);
3209
+ --fc-color-text: #E8E8E6;
3210
+ --fc-color-text-secondary: #9C9A92;
3211
+ --fc-color-text-tertiary: #636158;
3212
+ --fc-color-text-disabled: #4A4845;
3213
+ --fc-color-text-on-primary: #FFFFFF;
3214
+ --fc-color-text-link: var(--fc-blue-300);
3215
+ --fc-color-text-link-hover: var(--fc-blue-200);
3216
+ --fc-color-border: #333330;
3217
+ --fc-color-border-light: #2A2A28;
3218
+ --fc-color-border-hover: #555550;
3219
+ --fc-color-border-focus: var(--fc-blue-400);
3220
+ --fc-color-danger: #F06060;
3221
+ --fc-color-danger-hover: #F58080;
3222
+ --fc-color-danger-bg: rgba(226, 75, 74, 0.12);
3223
+ --fc-color-danger-border: rgba(226, 75, 74, 0.25);
3224
+ --fc-color-success: #7EBB38;
3225
+ --fc-color-success-hover: #9FD058;
3226
+ --fc-color-success-bg: rgba(99, 153, 34, 0.12);
3227
+ --fc-color-success-border: rgba(99, 153, 34, 0.25);
3228
+ --fc-color-warning: #F0A030;
3229
+ --fc-color-warning-hover: #F5BC60;
3230
+ --fc-color-warning-bg: rgba(214, 128, 0, 0.12);
3231
+ --fc-color-warning-border: rgba(214, 128, 0, 0.25);
3232
+ --fc-color-info: var(--fc-blue-300);
3233
+ --fc-color-info-bg: rgba(55, 138, 221, 0.12);
3234
+ --fc-color-info-border: rgba(55, 138, 221, 0.25);
3235
+ --fc-color-purple: #A080F0;
3236
+ --fc-color-purple-bg: rgba(124, 92, 232, 0.12);
3237
+ --fc-color-orange: #F08840;
3238
+ --fc-color-orange-bg: rgba(232, 113, 26, 0.12);
3239
+ --fc-color-teal: #20C8C8;
3240
+ --fc-color-teal-bg: rgba(0, 163, 163, 0.12);
3241
+ --fc-color-pink: #E860A0;
3242
+ --fc-color-pink-bg: rgba(212, 48, 106, 0.12);
3243
+ --fc-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.3);
3244
+ --fc-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3);
3245
+ --fc-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.5), 0 2px 4px rgba(0, 0, 0, 0.3);
3246
+ --fc-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.6), 0 4px 8px rgba(0, 0, 0, 0.4);
3247
+ }
3248
+ body {
3249
+ font-family: var(--fc-font-family, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);
3250
+ background-color: var(--fc-color-bg, #FFFFFF);
3251
+ color: var(--fc-color-text, #1A1A19);
3252
+ margin: 0;
3253
+ padding: 0;
3254
+ line-height: var(--fc-line-height-normal, 1.6);
3255
+ -webkit-font-smoothing: antialiased;
3256
+ -moz-osx-font-smoothing: grayscale;
3257
+ }
3258
+ [data-theme=dark] body {
3259
+ background-color: var(--fc-color-bg, #0F0F0F);
3260
+ color: var(--fc-color-text, #E8E8E6);
3261
+ }
3262
+ * {
3263
+ box-sizing: border-box;
3264
+ }
3265
+ ::-webkit-scrollbar {
3266
+ width: 8px;
3267
+ height: 8px;
3268
+ }
3269
+ ::-webkit-scrollbar-track {
3270
+ background: var(--fc-color-bg-tertiary, #F1EFE8);
3271
+ border-radius: var(--fc-radius-full, 9999px);
3272
+ }
3273
+ ::-webkit-scrollbar-thumb {
3274
+ background: var(--fc-color-border, #D3D1C7);
3275
+ border-radius: var(--fc-radius-full, 9999px);
3276
+ }
3277
+ ::-webkit-scrollbar-thumb:hover {
3278
+ background: var(--fc-color-border-hover, #5F5E5A);
3279
+ }
3280
+ [data-theme=dark] ::-webkit-scrollbar-track {
3281
+ background: var(--fc-color-bg-tertiary, #222222);
3282
+ }
3283
+ [data-theme=dark] ::-webkit-scrollbar-thumb {
3284
+ background: var(--fc-color-border, #333330);
3285
+ }
3286
+ [data-theme=dark] ::-webkit-scrollbar-thumb:hover {
3287
+ background: var(--fc-color-border-hover, #555550);
3288
+ }
3289
+ ::selection {
3290
+ background-color: var(--fc-color-primary-subtle, #EBF4FD);
3291
+ color: var(--fc-color-primary, #378ADD);
3292
+ }
3293
+ [data-theme=dark] ::selection {
3294
+ background-color: rgba(55, 138, 221, 0.3);
3295
+ color: var(--fc-color-primary, #5DA4E8);
3296
+ }
3297
+ :focus-visible {
3298
+ outline: 2px solid var(--fc-color-border-focus, #378ADD);
3299
+ outline-offset: 2px;
3300
+ border-radius: var(--fc-radius-sm, 4px);
3301
+ }
3302
+ .theme-light {
3303
+ --fc-color-bg: #FFFFFF !important;
3304
+ --fc-color-bg-secondary: var(--fc-gray-50) !important;
3305
+ --fc-color-bg-tertiary: var(--fc-gray-100) !important;
3306
+ --fc-color-text: var(--fc-gray-900) !important;
3307
+ --fc-color-text-secondary: var(--fc-gray-600) !important;
3308
+ --fc-color-border: var(--fc-gray-200) !important;
3309
+ --fc-color-border-light: var(--fc-gray-150) !important;
3310
+ }
3311
+ .theme-dark {
3312
+ --fc-color-primary: var(--fc-blue-300) !important;
3313
+ --fc-color-primary-hover: var(--fc-blue-200) !important;
3314
+ --fc-color-primary-active: var(--fc-blue-100) !important;
3315
+ --fc-color-primary-subtle: rgba(55, 138, 221, 0.12) !important;
3316
+ --fc-color-bg: #0F0F0F !important;
3317
+ --fc-color-bg-secondary: #1A1A1A !important;
3318
+ --fc-color-bg-tertiary: #222222 !important;
3319
+ --fc-color-bg-elevated: #282828 !important;
3320
+ --fc-color-bg-overlay: rgba(0, 0, 0, 0.6) !important;
3321
+ --fc-color-text: #E8E8E6 !important;
3322
+ --fc-color-text-secondary: #9C9A92 !important;
3323
+ --fc-color-text-tertiary: #636158 !important;
3324
+ --fc-color-text-disabled: #4A4845 !important;
3325
+ --fc-color-text-on-primary: #FFFFFF !important;
3326
+ --fc-color-border: #333330 !important;
3327
+ --fc-color-border-light: #2A2A28 !important;
3328
+ --fc-color-border-hover: #555550 !important;
3329
+ --fc-color-border-focus: var(--fc-blue-400) !important;
3330
+ --fc-color-danger: #F06060 !important;
3331
+ --fc-color-danger-hover: #F58080 !important;
3332
+ --fc-color-danger-bg: rgba(226, 75, 74, 0.12) !important;
3333
+ --fc-color-danger-border: rgba(226, 75, 74, 0.25) !important;
3334
+ --fc-color-success: #7EBB38 !important;
3335
+ --fc-color-success-hover: #9FD058 !important;
3336
+ --fc-color-success-bg: rgba(99, 153, 34, 0.12) !important;
3337
+ --fc-color-success-border: rgba(99, 153, 34, 0.25) !important;
3338
+ --fc-color-warning: #F0A030 !important;
3339
+ --fc-color-warning-hover: #F5BC60 !important;
3340
+ --fc-color-warning-bg: rgba(214, 128, 0, 0.12) !important;
3341
+ --fc-color-warning-border: rgba(214, 128, 0, 0.25) !important;
3342
+ --fc-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.3) !important;
3343
+ --fc-shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3) !important;
3344
+ --fc-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.5), 0 2px 4px rgba(0, 0, 0, 0.3) !important;
3345
+ --fc-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.6), 0 4px 8px rgba(0, 0, 0, 0.4) !important;
3346
+ }
3347
+ .theme-dark .fc-list-group {
3348
+ background-color: var(--fc-color-bg, #0F0F0F) !important;
3349
+ }
3350
+ .theme-dark .fc-list-group-item {
3351
+ background-color: var(--fc-color-bg, #0F0F0F) !important;
3352
+ color: var(--fc-color-text, #E8E8E6) !important;
3353
+ border-bottom-color: var(--fc-color-border-light, #2A2A28) !important;
3354
+ }
3355
+ .theme-dark .fc-list-group--bordered {
3356
+ border-color: var(--fc-color-border, #333330) !important;
3357
+ }
3358
+ .theme-dark .fc-list-group-item:hover:not(.fc-list-group-item--disabled) {
3359
+ background-color: var(--fc-color-bg-secondary, #1A1A1A) !important;
3360
+ }
3361
+ .theme-dark .fc-list-group-item--active {
3362
+ background-color: var(--fc-color-primary-subtle, rgba(55, 138, 221, 0.12)) !important;
3363
+ color: var(--fc-color-primary, #5DA4E8) !important;
3364
+ border-left-color: var(--fc-color-primary, #5DA4E8) !important;
3365
+ }