@farming-labs/svelte-theme 0.0.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.
@@ -0,0 +1,2124 @@
1
+ /*
2
+ * @farming-labs/svelte-theme — Fumadocs-accurate docs stylesheet
3
+ *
4
+ * Pixel-perfect port of fumadocs-ui's neutral preset.
5
+ * Uses the same CSS custom property system:
6
+ * --color-fd-primary, --color-fd-background, --color-fd-foreground, etc.
7
+ */
8
+
9
+ /* ─── CSS Reset ──────────────────────────────────────────────────────── */
10
+
11
+ *, *::before, *::after {
12
+ box-sizing: border-box;
13
+ margin: 0;
14
+ }
15
+
16
+ /* ─── Color Tokens (light by default, matching fumadocs neutral) ──── */
17
+
18
+ :root {
19
+ --color-fd-background: hsl(0, 0%, 96%);
20
+ --color-fd-foreground: hsl(0, 0%, 3.9%);
21
+ --color-fd-muted: hsl(0, 0%, 96.1%);
22
+ --color-fd-muted-foreground: hsl(0, 0%, 45.1%);
23
+ --color-fd-popover: hsl(0, 0%, 98%);
24
+ --color-fd-popover-foreground: hsl(0, 0%, 15.1%);
25
+ --color-fd-card: hsl(0, 0%, 94.7%);
26
+ --color-fd-card-foreground: hsl(0, 0%, 3.9%);
27
+ --color-fd-border: hsla(0, 0%, 80%, 50%);
28
+ --color-fd-primary: hsl(0, 0%, 9%);
29
+ --color-fd-primary-foreground: hsl(0, 0%, 98%);
30
+ --color-fd-secondary: hsl(0, 0%, 93.1%);
31
+ --color-fd-secondary-foreground: hsl(0, 0%, 9%);
32
+ --color-fd-accent: hsla(0, 0%, 82%, 50%);
33
+ --color-fd-accent-foreground: hsl(0, 0%, 9%);
34
+ --color-fd-ring: hsl(0, 0%, 63.9%);
35
+
36
+ --fd-sidebar-width: 268px;
37
+ --fd-toc-width: 268px;
38
+ --fd-content-width: 768px;
39
+ --fd-header-height: 48px;
40
+ --fd-nav-height: 48px;
41
+ }
42
+
43
+ .dark {
44
+ --color-fd-background: hsl(0, 0%, 7.04%);
45
+ --color-fd-foreground: hsl(0, 0%, 92%);
46
+ --color-fd-muted: hsl(0, 0%, 12.9%);
47
+ --color-fd-muted-foreground: hsla(0, 0%, 70%, 0.8);
48
+ --color-fd-popover: hsl(0, 0%, 11.6%);
49
+ --color-fd-popover-foreground: hsl(0, 0%, 86.9%);
50
+ --color-fd-card: hsl(0, 0%, 9.8%);
51
+ --color-fd-card-foreground: hsl(0, 0%, 98%);
52
+ --color-fd-border: hsla(0, 0%, 40%, 20%);
53
+ --color-fd-primary: hsl(0, 0%, 98%);
54
+ --color-fd-primary-foreground: hsl(0, 0%, 9%);
55
+ --color-fd-secondary: hsl(0, 0%, 12.9%);
56
+ --color-fd-secondary-foreground: hsl(0, 0%, 92%);
57
+ --color-fd-accent: hsla(0, 0%, 40.9%, 30%);
58
+ --color-fd-accent-foreground: hsl(0, 0%, 90%);
59
+ --color-fd-ring: hsl(0, 0%, 54.9%);
60
+ }
61
+
62
+ /* ─── Base ───────────────────────────────────────────────────────────── */
63
+
64
+ html {
65
+ scroll-behavior: smooth;
66
+ scroll-padding-top: 80px;
67
+ }
68
+
69
+ body {
70
+ font-family: var(--fd-font-sans, ui-sans-serif, system-ui, -apple-system, sans-serif);
71
+ background: var(--color-fd-background);
72
+ color: var(--color-fd-foreground);
73
+ line-height: 1.5;
74
+ font-size: 14px;
75
+ -webkit-font-smoothing: antialiased;
76
+ -moz-osx-font-smoothing: grayscale;
77
+ }
78
+
79
+ code, kbd, pre, samp {
80
+ font-family: var(--fd-font-mono, ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, monospace);
81
+ }
82
+
83
+ /* ─── Layout (sidebar + content, TOC lives inside content area) ──────── */
84
+
85
+ .fd-layout {
86
+ display: grid;
87
+ grid-template-columns: var(--fd-sidebar-width) 1fr;
88
+ min-height: 100dvh;
89
+ }
90
+
91
+ /* ─── Mobile header ──────────────────────────────────────────────────── */
92
+
93
+ .fd-header {
94
+ display: none;
95
+ position: sticky;
96
+ top: 0;
97
+ z-index: 40;
98
+ height: var(--fd-header-height);
99
+ padding: 0 16px;
100
+ background: var(--color-fd-background);
101
+ border-bottom: 1px solid var(--color-fd-border);
102
+ align-items: center;
103
+ gap: 8px;
104
+ }
105
+
106
+ .fd-header-title {
107
+ font-weight: 600;
108
+ font-size: 14px;
109
+ color: var(--color-fd-foreground);
110
+ text-decoration: none;
111
+ flex: 1;
112
+ }
113
+
114
+ .fd-menu-btn,
115
+ .fd-search-trigger-mobile {
116
+ display: inline-flex;
117
+ align-items: center;
118
+ justify-content: center;
119
+ width: 36px;
120
+ height: 36px;
121
+ background: transparent;
122
+ border: none;
123
+ border-radius: 8px;
124
+ color: var(--color-fd-muted-foreground);
125
+ cursor: pointer;
126
+ transition: background 0.15s, color 0.15s;
127
+ }
128
+
129
+ .fd-menu-btn:hover,
130
+ .fd-search-trigger-mobile:hover {
131
+ background: var(--color-fd-accent);
132
+ color: var(--color-fd-foreground);
133
+ }
134
+
135
+ @media (max-width: 1023px) {
136
+ .fd-header {
137
+ display: flex;
138
+ }
139
+
140
+ .fd-layout {
141
+ display: flex;
142
+ flex-direction: column;
143
+ }
144
+ }
145
+
146
+ /* ─── Sidebar ────────────────────────────────────────────────────────── */
147
+
148
+ .fd-sidebar {
149
+ position: sticky;
150
+ top: 0;
151
+ width: var(--fd-sidebar-width);
152
+ height: 100dvh;
153
+ overflow-y: auto;
154
+ overflow-x: hidden;
155
+ border-right: 1px solid var(--color-fd-border);
156
+ background: var(--color-fd-background);
157
+ display: flex;
158
+ flex-direction: column;
159
+ flex-shrink: 0;
160
+ z-index: 50;
161
+ }
162
+
163
+ .fd-sidebar-header {
164
+ display: flex;
165
+ align-items: center;
166
+ justify-content: space-between;
167
+ padding: 12px 12px 0;
168
+ gap: 4px;
169
+ }
170
+
171
+ .fd-sidebar-title {
172
+ font-weight: 600;
173
+ font-size: 14px;
174
+ letter-spacing: 0.02em;
175
+ color: var(--color-fd-foreground);
176
+ text-decoration: none;
177
+ display: flex;
178
+ align-items: center;
179
+ gap: 8px;
180
+ padding: 8px;
181
+ flex: 1;
182
+ }
183
+
184
+ .fd-sidebar-title:hover {
185
+ text-decoration: none;
186
+ }
187
+
188
+ .fd-sidebar-collapse-btn {
189
+ display: inline-flex;
190
+ align-items: center;
191
+ justify-content: center;
192
+ width: 28px;
193
+ height: 28px;
194
+ background: transparent;
195
+ border: 1px solid var(--color-fd-border);
196
+ border-radius: 6px;
197
+ color: var(--color-fd-muted-foreground);
198
+ cursor: pointer;
199
+ transition: background 0.15s, color 0.15s;
200
+ flex-shrink: 0;
201
+ }
202
+
203
+ .fd-sidebar-collapse-btn:hover {
204
+ background: var(--color-fd-accent);
205
+ color: var(--color-fd-foreground);
206
+ }
207
+
208
+ /* ─── Search button (fumadocs style) ─────────────────────────────────── */
209
+
210
+ .fd-sidebar-search {
211
+ padding: 8px 12px;
212
+ }
213
+
214
+ .fd-sidebar-search-btn {
215
+ display: flex;
216
+ align-items: center;
217
+ gap: 8px;
218
+ width: 100%;
219
+ padding: 6px 10px;
220
+ height: 36px;
221
+ font-size: 14px;
222
+ color: var(--color-fd-muted-foreground);
223
+ background: var(--color-fd-secondary);
224
+ border: 1px solid var(--color-fd-border);
225
+ border-radius: 8px;
226
+ cursor: pointer;
227
+ transition: border-color 0.15s, background 0.15s;
228
+ }
229
+
230
+ .fd-sidebar-search-btn:hover {
231
+ background: var(--color-fd-accent);
232
+ }
233
+
234
+ .fd-sidebar-search-btn svg {
235
+ flex-shrink: 0;
236
+ opacity: 0.7;
237
+ }
238
+
239
+ .fd-sidebar-search-btn span {
240
+ flex: 1;
241
+ text-align: left;
242
+ }
243
+
244
+ .fd-sidebar-search-btn kbd {
245
+ font-size: 11px;
246
+ padding: 1px 6px;
247
+ border: 1px solid var(--color-fd-border);
248
+ border-radius: 4px;
249
+ color: var(--color-fd-muted-foreground);
250
+ font-family: inherit;
251
+ background: var(--color-fd-background);
252
+ }
253
+
254
+ /* ─── Sidebar nav ────────────────────────────────────────────────────── */
255
+
256
+ .fd-sidebar-nav {
257
+ flex: 1;
258
+ padding: 4px 12px;
259
+ overflow-y: auto;
260
+ }
261
+
262
+ .fd-sidebar-link {
263
+ display: flex;
264
+ align-items: center;
265
+ gap: 8px;
266
+ padding: 8px;
267
+ font-size: 14px;
268
+ font-weight: 400;
269
+ color: var(--color-fd-muted-foreground);
270
+ text-decoration: none;
271
+ border-radius: 8px;
272
+ position: relative;
273
+ transition: color 0.15s, background 0.15s;
274
+ }
275
+
276
+ .fd-sidebar-link:hover {
277
+ color: var(--color-fd-accent-foreground);
278
+ background: var(--color-fd-accent);
279
+ text-decoration: none;
280
+ }
281
+
282
+ .fd-sidebar-link-active,
283
+ .fd-sidebar-link[data-active="true"] {
284
+ color: var(--color-fd-foreground) !important;
285
+ background: var(--color-fd-accent) !important;
286
+ font-weight: 600;
287
+ }
288
+
289
+ .fd-sidebar-folder-content .fd-sidebar-link-active::before {
290
+ content: '';
291
+ position: absolute;
292
+ left: -9px;
293
+ top: 25%;
294
+ bottom: 25%;
295
+ width: 2px;
296
+ background: var(--color-fd-foreground);
297
+ border-radius: 1px;
298
+ }
299
+
300
+ /* ─── Sidebar folders ────────────────────────────────────────────────── */
301
+
302
+ .fd-sidebar-folder {
303
+ margin: 2px 0;
304
+ }
305
+
306
+ .fd-sidebar-folder summary {
307
+ list-style: none;
308
+ }
309
+
310
+ .fd-sidebar-folder summary::-webkit-details-marker {
311
+ display: none;
312
+ }
313
+
314
+ .fd-sidebar-folder-trigger {
315
+ display: flex;
316
+ align-items: center;
317
+ justify-content: space-between;
318
+ padding: 8px;
319
+ font-size: 14px;
320
+ font-weight: 500;
321
+ color: var(--color-fd-foreground);
322
+ cursor: pointer;
323
+ border-radius: 8px;
324
+ transition: background 0.15s;
325
+ }
326
+
327
+ .fd-sidebar-folder-trigger:hover {
328
+ background: var(--color-fd-accent);
329
+ }
330
+
331
+ .fd-sidebar-chevron {
332
+ transition: transform 0.2s;
333
+ flex-shrink: 0;
334
+ opacity: 0.5;
335
+ }
336
+
337
+ .fd-sidebar-folder[open] > .fd-sidebar-folder-trigger .fd-sidebar-chevron {
338
+ transform: rotate(180deg);
339
+ }
340
+
341
+ .fd-sidebar-folder-content {
342
+ position: relative;
343
+ padding-left: 12px;
344
+ margin-left: 10px;
345
+ margin-top: 2px;
346
+ }
347
+
348
+ .fd-sidebar-folder-content::before {
349
+ content: '';
350
+ position: absolute;
351
+ left: 4px;
352
+ top: 4px;
353
+ bottom: 4px;
354
+ width: 1px;
355
+ background: var(--color-fd-border);
356
+ }
357
+
358
+ .fd-sidebar-footer {
359
+ padding: 12px 16px;
360
+ border-top: 1px solid var(--color-fd-border);
361
+ margin-top: auto;
362
+ }
363
+
364
+ /* ─── Sidebar overlay + responsive ───────────────────────────────────── */
365
+
366
+ .fd-sidebar-overlay {
367
+ display: none;
368
+ position: fixed;
369
+ inset: 0;
370
+ z-index: 45;
371
+ background: rgba(0, 0, 0, 0.2);
372
+ backdrop-filter: blur(2px);
373
+ }
374
+
375
+ @media (max-width: 1023px) {
376
+ .fd-sidebar {
377
+ position: fixed;
378
+ left: 0;
379
+ top: 0;
380
+ transform: translateX(-100%);
381
+ transition: transform 0.25s ease;
382
+ z-index: 50;
383
+ }
384
+
385
+ .fd-sidebar-open {
386
+ transform: translateX(0);
387
+ }
388
+
389
+ .fd-sidebar-open + .fd-sidebar-overlay {
390
+ display: block;
391
+ }
392
+ }
393
+
394
+ /* ─── Main content ───────────────────────────────────────────────────── */
395
+
396
+ .fd-main {
397
+ min-width: 0;
398
+ padding: 0;
399
+ }
400
+
401
+ /* ─── Page layout (article + TOC) ────────────────────────────────────── */
402
+
403
+ .fd-page {
404
+ display: grid;
405
+ grid-template-columns: 1fr var(--fd-toc-width);
406
+ width: 100%;
407
+ }
408
+
409
+ .fd-page-article {
410
+ min-width: 0;
411
+ padding: 32px 48px 64px;
412
+ }
413
+
414
+ /* ─── Table of Contents (right column, flush to right edge) ──────────── */
415
+
416
+ .fd-toc {
417
+ width: var(--fd-toc-width);
418
+ position: sticky;
419
+ top: 0;
420
+ height: 100dvh;
421
+ overflow-y: auto;
422
+ padding: 40px 24px;
423
+ }
424
+
425
+ .fd-toc-inner {
426
+ }
427
+
428
+ .fd-toc-title {
429
+ display: flex;
430
+ align-items: center;
431
+ gap: 8px;
432
+ font-size: 13px;
433
+ font-weight: 500;
434
+ color: var(--color-fd-foreground);
435
+ margin-bottom: 12px;
436
+ }
437
+
438
+ .fd-toc-title svg {
439
+ opacity: 0.5;
440
+ }
441
+
442
+ .fd-toc-list {
443
+ list-style: none;
444
+ padding: 0;
445
+ margin: 0;
446
+ display: flex;
447
+ flex-direction: column;
448
+ gap: 0;
449
+ border-left: 1px solid var(--color-fd-border);
450
+ }
451
+
452
+ .fd-toc-item {
453
+ margin: 0;
454
+ }
455
+
456
+ .fd-toc-link {
457
+ display: block;
458
+ padding: 4px 12px;
459
+ font-size: 13px;
460
+ color: var(--color-fd-muted-foreground);
461
+ text-decoration: none;
462
+ border-left: 2px solid transparent;
463
+ margin-left: -1px;
464
+ transition: color 0.15s, border-color 0.15s;
465
+ }
466
+
467
+ .fd-toc-link:hover {
468
+ color: var(--color-fd-foreground);
469
+ text-decoration: none;
470
+ }
471
+
472
+ .fd-toc-link-active {
473
+ color: var(--color-fd-primary);
474
+ border-left-color: var(--color-fd-primary);
475
+ }
476
+
477
+ @media (max-width: 1279px) {
478
+ .fd-toc {
479
+ display: none;
480
+ }
481
+
482
+ .fd-page {
483
+ grid-template-columns: 1fr;
484
+ }
485
+ }
486
+
487
+ @media (max-width: 1023px) {
488
+ .fd-toc {
489
+ display: none;
490
+ }
491
+
492
+ .fd-page {
493
+ grid-template-columns: 1fr;
494
+ }
495
+ }
496
+
497
+ /* ─── Breadcrumb ─────────────────────────────────────────────────────── */
498
+
499
+ .fd-breadcrumb {
500
+ display: flex;
501
+ align-items: center;
502
+ gap: 0;
503
+ font-size: 13px;
504
+ color: var(--color-fd-muted-foreground);
505
+ margin-bottom: 8px;
506
+ }
507
+
508
+ .fd-breadcrumb-item {
509
+ display: inline-flex;
510
+ align-items: center;
511
+ }
512
+
513
+ .fd-breadcrumb-sep {
514
+ margin: 0 6px;
515
+ opacity: 0.4;
516
+ font-size: 12px;
517
+ }
518
+
519
+ .fd-breadcrumb-parent {
520
+ opacity: 0.7;
521
+ font-weight: 400;
522
+ }
523
+
524
+ .fd-breadcrumb-link {
525
+ color: inherit;
526
+ text-decoration: none;
527
+ cursor: pointer;
528
+ transition: opacity 0.15s, color 0.15s;
529
+ }
530
+
531
+ .fd-breadcrumb-link:hover {
532
+ opacity: 1;
533
+ color: var(--color-fd-foreground);
534
+ text-decoration: none;
535
+ }
536
+
537
+ .fd-breadcrumb-current {
538
+ font-weight: 500;
539
+ color: var(--color-fd-foreground);
540
+ }
541
+
542
+ /* ─── Theme Toggle ───────────────────────────────────────────────────── */
543
+
544
+ .fd-theme-toggle {
545
+ display: inline-flex;
546
+ align-items: center;
547
+ justify-content: center;
548
+ width: 32px;
549
+ height: 32px;
550
+ background: transparent;
551
+ border: 1px solid var(--color-fd-border);
552
+ border-radius: 8px;
553
+ color: var(--color-fd-muted-foreground);
554
+ cursor: pointer;
555
+ transition: color 0.15s, background 0.15s;
556
+ }
557
+
558
+ .fd-theme-toggle:hover {
559
+ color: var(--color-fd-foreground);
560
+ background: var(--color-fd-accent);
561
+ }
562
+
563
+ /* ─── Search Dialog (matching fumadocs Cmd+K) ────────────────────────── */
564
+
565
+ .fd-search-overlay {
566
+ position: fixed;
567
+ inset: 0;
568
+ z-index: 100;
569
+ display: flex;
570
+ align-items: flex-start;
571
+ justify-content: center;
572
+ padding-top: 20vh;
573
+ background: rgba(0, 0, 0, 0.2);
574
+ backdrop-filter: blur(4px);
575
+ animation: fd-fade-in 0.12s ease-out;
576
+ }
577
+
578
+ .fd-search-dialog {
579
+ width: 90%;
580
+ max-width: 540px;
581
+ background: var(--color-fd-popover);
582
+ border: 1px solid var(--color-fd-border);
583
+ border-radius: 12px;
584
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.12);
585
+ overflow: hidden;
586
+ animation: fd-slide-up 0.15s ease-out;
587
+ }
588
+
589
+ .fd-search-input-wrap {
590
+ display: flex;
591
+ align-items: center;
592
+ gap: 10px;
593
+ padding: 12px 16px;
594
+ border-bottom: 1px solid var(--color-fd-border);
595
+ }
596
+
597
+ .fd-search-input-wrap svg {
598
+ color: var(--color-fd-muted-foreground);
599
+ flex-shrink: 0;
600
+ }
601
+
602
+ .fd-search-input {
603
+ flex: 1;
604
+ background: transparent;
605
+ border: none;
606
+ outline: none;
607
+ font-size: 15px;
608
+ color: var(--color-fd-foreground);
609
+ font-family: inherit;
610
+ }
611
+
612
+ .fd-search-input::placeholder {
613
+ color: var(--color-fd-muted-foreground);
614
+ }
615
+
616
+ .fd-search-kbd {
617
+ font-size: 11px;
618
+ padding: 2px 6px;
619
+ border: 1px solid var(--color-fd-border);
620
+ border-radius: 4px;
621
+ color: var(--color-fd-muted-foreground);
622
+ font-family: inherit;
623
+ background: var(--color-fd-background);
624
+ }
625
+
626
+ .fd-search-results {
627
+ max-height: 360px;
628
+ overflow-y: auto;
629
+ padding: 8px;
630
+ }
631
+
632
+ .fd-search-empty {
633
+ padding: 32px;
634
+ text-align: center;
635
+ color: var(--color-fd-muted-foreground);
636
+ font-size: 14px;
637
+ }
638
+
639
+ .fd-search-result {
640
+ display: block;
641
+ width: 100%;
642
+ text-align: left;
643
+ padding: 10px 12px;
644
+ background: transparent;
645
+ border: none;
646
+ border-radius: 8px;
647
+ cursor: pointer;
648
+ transition: background 0.1s;
649
+ font-family: inherit;
650
+ color: var(--color-fd-foreground);
651
+ }
652
+
653
+ .fd-search-result:hover {
654
+ background: var(--color-fd-accent);
655
+ }
656
+
657
+ .fd-search-result-title {
658
+ display: block;
659
+ font-size: 14px;
660
+ font-weight: 500;
661
+ }
662
+
663
+ .fd-search-result-url {
664
+ display: block;
665
+ font-size: 12px;
666
+ color: var(--color-fd-muted-foreground);
667
+ margin-top: 2px;
668
+ }
669
+
670
+ /* ─── Prose / Markdown content (matching fumadocs) ───────────────────── */
671
+
672
+ .fd-page-body {
673
+ color: var(--color-fd-foreground);
674
+ line-height: 1.75;
675
+ font-size: 15px;
676
+ }
677
+
678
+ .fd-page-body a {
679
+ color: var(--color-fd-foreground);
680
+ font-weight: 500;
681
+ text-decoration: underline;
682
+ text-underline-offset: 3px;
683
+ text-decoration-color: var(--color-fd-primary);
684
+ }
685
+
686
+ .fd-page-body a:hover {
687
+ opacity: 0.8;
688
+ }
689
+
690
+ .fd-page-body h1 {
691
+ font-size: var(--fd-h1-size, 2.25rem);
692
+ font-weight: var(--fd-h1-weight, 700);
693
+ line-height: var(--fd-h1-line-height, 1.2);
694
+ letter-spacing: var(--fd-h1-letter-spacing, -0.025em);
695
+ margin: 0 0 16px;
696
+ scroll-margin-top: 80px;
697
+ }
698
+
699
+ .fd-page-body h2 {
700
+ font-size: var(--fd-h2-size, 1.5rem);
701
+ font-weight: var(--fd-h2-weight, 600);
702
+ line-height: var(--fd-h2-line-height, 1.3);
703
+ letter-spacing: var(--fd-h2-letter-spacing, -0.015em);
704
+ margin: 40px 0 16px;
705
+ padding-bottom: 8px;
706
+ border-bottom: 1px solid var(--color-fd-border);
707
+ scroll-margin-top: 80px;
708
+ }
709
+
710
+ .fd-page-body h3 {
711
+ font-size: var(--fd-h3-size, 1.25rem);
712
+ font-weight: var(--fd-h3-weight, 600);
713
+ line-height: var(--fd-h3-line-height, 1.4);
714
+ margin: 32px 0 12px;
715
+ scroll-margin-top: 80px;
716
+ }
717
+
718
+ .fd-page-body h4 {
719
+ font-size: var(--fd-h4-size, 1.125rem);
720
+ font-weight: var(--fd-h4-weight, 600);
721
+ line-height: var(--fd-h4-line-height, 1.4);
722
+ margin: 24px 0 8px;
723
+ scroll-margin-top: 80px;
724
+ }
725
+
726
+ .fd-page-body p {
727
+ margin: 0 0 16px;
728
+ }
729
+
730
+ .fd-page-body ul, .fd-page-body ol {
731
+ margin: 0 0 16px;
732
+ padding-left: 24px;
733
+ }
734
+
735
+ .fd-page-body li {
736
+ margin: 4px 0;
737
+ }
738
+
739
+ .fd-page-body li::marker {
740
+ color: var(--color-fd-muted-foreground);
741
+ }
742
+
743
+ .fd-page-body strong {
744
+ font-weight: 600;
745
+ color: var(--color-fd-foreground);
746
+ }
747
+
748
+ .fd-page-body hr {
749
+ border: none;
750
+ border-top: 1px solid var(--color-fd-border);
751
+ margin: 32px 0;
752
+ }
753
+
754
+ .fd-page-body blockquote {
755
+ border-left: 3px solid var(--color-fd-border);
756
+ padding: 8px 16px;
757
+ margin: 16px 0;
758
+ color: var(--color-fd-muted-foreground);
759
+ }
760
+
761
+ .fd-page-body code {
762
+ font-size: 0.875em;
763
+ padding: 2px 5px;
764
+ background: var(--color-fd-secondary);
765
+ border: 1px solid var(--color-fd-border);
766
+ border-radius: 4px;
767
+ color: var(--color-fd-foreground);
768
+ }
769
+
770
+ .fd-page-body pre {
771
+ margin: 16px 0;
772
+ padding: 14px 16px;
773
+ background: var(--color-fd-card);
774
+ border: 1px solid var(--color-fd-border);
775
+ border-radius: 8px;
776
+ overflow-x: auto;
777
+ font-size: 13px;
778
+ line-height: 1.5;
779
+ position: relative;
780
+ }
781
+
782
+ .fd-page-body pre code {
783
+ background: transparent;
784
+ border: none;
785
+ padding: 0;
786
+ font-size: inherit;
787
+ border-radius: 0;
788
+ color: inherit;
789
+ }
790
+
791
+ /* Shiki dual-theme: light uses inline styles, dark uses --shiki-dark vars */
792
+ .fd-page-body pre.shiki {
793
+ background-color: var(--color-fd-card) !important;
794
+ }
795
+
796
+ .fd-page-body pre.shiki code {
797
+ counter-reset: line;
798
+ }
799
+
800
+ html.dark .shiki,
801
+ html.dark .shiki span {
802
+ color: var(--shiki-dark) !important;
803
+ background-color: transparent !important;
804
+ }
805
+
806
+ html.dark pre.shiki {
807
+ background-color: var(--color-fd-card) !important;
808
+ }
809
+
810
+ /* ─── Code block wrapper + copy button ────────────────────────────────── */
811
+
812
+ .fd-codeblock {
813
+ position: relative;
814
+ margin: 16px 0;
815
+ }
816
+
817
+ .fd-codeblock pre {
818
+ margin: 0;
819
+ }
820
+
821
+ .fd-codeblock-title {
822
+ display: flex;
823
+ align-items: center;
824
+ gap: 8px;
825
+ padding: 8px 14px;
826
+ font-size: 13px;
827
+ font-weight: 500;
828
+ font-family: var(--fd-font-mono, ui-monospace, monospace);
829
+ color: var(--color-fd-muted-foreground, #71717a);
830
+ background: var(--color-fd-secondary, rgba(255, 255, 255, 0.04));
831
+ border: 1px solid var(--color-fd-border);
832
+ border-bottom: none;
833
+ border-radius: var(--radius, 12px) var(--radius, 12px) 0 0;
834
+ }
835
+
836
+ .fd-codeblock-title + .fd-copy-btn ~ pre {
837
+ border-top-left-radius: 0 !important;
838
+ border-top-right-radius: 0 !important;
839
+ }
840
+
841
+ .fd-codeblock:has(.fd-codeblock-title) pre {
842
+ border-top-left-radius: 0 !important;
843
+ border-top-right-radius: 0 !important;
844
+ }
845
+
846
+ .fd-copy-btn {
847
+ position: absolute;
848
+ top: 4px;
849
+ right: 4px;
850
+ z-index: 2;
851
+ display: inline-flex;
852
+ align-items: center;
853
+ justify-content: center;
854
+ width: 32px;
855
+ height: 32px;
856
+ padding: 0;
857
+ background: var(--color-fd-secondary);
858
+ border: 1px solid var(--color-fd-border);
859
+ border-radius: 6px;
860
+ color: var(--color-fd-muted-foreground);
861
+ cursor: pointer;
862
+ opacity: 0;
863
+ transition: opacity 0.15s, color 0.15s, background 0.15s;
864
+ }
865
+
866
+ .fd-codeblock:hover .fd-copy-btn {
867
+ opacity: 1;
868
+ }
869
+
870
+ .fd-copy-btn:hover {
871
+ color: var(--color-fd-foreground);
872
+ background: var(--color-fd-accent);
873
+ }
874
+
875
+ .fd-copy-btn-copied {
876
+ color: hsl(142, 71%, 45%) !important;
877
+ opacity: 1 !important;
878
+ }
879
+
880
+ /* ─── Tabs ────────────────────────────────────────────────────────────── */
881
+
882
+ .fd-tabs {
883
+ margin: 16px 0;
884
+ border: 1px solid var(--color-fd-border);
885
+ border-radius: 12px;
886
+ overflow: hidden;
887
+ background: var(--color-fd-card);
888
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
889
+ }
890
+
891
+ .fd-tabs-list {
892
+ display: flex;
893
+ border-bottom: 1px solid var(--color-fd-border);
894
+ background: transparent;
895
+ overflow-x: auto;
896
+ }
897
+
898
+ .fd-tab-trigger {
899
+ padding: 8px 14px;
900
+ font-size: 13px;
901
+ font-weight: 500;
902
+ font-family: inherit;
903
+ color: var(--color-fd-muted-foreground);
904
+ background: transparent;
905
+ border: none;
906
+ border-bottom: 2px solid transparent;
907
+ cursor: pointer;
908
+ transition: color 0.15s, border-color 0.15s;
909
+ white-space: nowrap;
910
+ }
911
+
912
+ .fd-tab-trigger:hover {
913
+ color: var(--color-fd-foreground);
914
+ }
915
+
916
+ .fd-tab-trigger.fd-tab-active {
917
+ color: var(--color-fd-foreground);
918
+ font-weight: 600;
919
+ border-bottom-color: var(--color-fd-primary);
920
+ }
921
+
922
+ .fd-tab-panel {
923
+ display: none;
924
+ }
925
+
926
+ .fd-tab-panel-active {
927
+ display: block;
928
+ }
929
+
930
+ .fd-tab-panel .fd-codeblock {
931
+ margin: 0;
932
+ }
933
+
934
+ .fd-tab-panel .fd-codeblock pre {
935
+ border: none;
936
+ border-radius: 0;
937
+ margin: 0;
938
+ background: transparent !important;
939
+ }
940
+
941
+ .fd-tab-panel .fd-copy-btn {
942
+ top: 6px;
943
+ right: 6px;
944
+ }
945
+
946
+ .fd-page-body .fd-table-wrapper {
947
+ margin: 16px 0;
948
+ overflow-x: auto;
949
+ border: 1px solid var(--color-fd-border);
950
+ border-radius: 8px;
951
+ }
952
+
953
+ .fd-page-body table {
954
+ width: 100%;
955
+ border-collapse: collapse;
956
+ font-size: 13px;
957
+ }
958
+
959
+ .fd-page-body thead {
960
+ background: var(--color-fd-muted);
961
+ }
962
+
963
+ .fd-page-body th {
964
+ padding: 10px 16px;
965
+ text-align: left;
966
+ font-weight: 600;
967
+ font-size: 13px;
968
+ color: var(--color-fd-muted-foreground);
969
+ border-bottom: 1px solid var(--color-fd-border);
970
+ white-space: nowrap;
971
+ }
972
+
973
+ .fd-page-body td {
974
+ padding: 10px 16px;
975
+ text-align: left;
976
+ border-bottom: 1px solid var(--color-fd-border);
977
+ color: var(--color-fd-foreground);
978
+ }
979
+
980
+ .fd-page-body tbody tr:last-child td {
981
+ border-bottom: none;
982
+ }
983
+
984
+ .fd-page-body tbody tr:hover {
985
+ background: var(--color-fd-accent);
986
+ }
987
+
988
+ .fd-page-body td code {
989
+ font-size: 12px;
990
+ padding: 1px 5px;
991
+ background: var(--color-fd-secondary);
992
+ border: 1px solid var(--color-fd-border);
993
+ border-radius: 4px;
994
+ white-space: nowrap;
995
+ }
996
+
997
+ .fd-page-body img {
998
+ max-width: 100%;
999
+ border-radius: 8px;
1000
+ margin: 16px 0;
1001
+ }
1002
+
1003
+ /* ─── Animations ─────────────────────────────────────────────────────── */
1004
+
1005
+ .fd-toc-empty {
1006
+ font-size: 13px;
1007
+ color: var(--color-fd-muted-foreground);
1008
+ padding: 4px 0;
1009
+ }
1010
+
1011
+ .fd-sidebar-folder-label {
1012
+ display: flex;
1013
+ align-items: center;
1014
+ gap: 8px;
1015
+ }
1016
+
1017
+ @keyframes fd-fade-in {
1018
+ from { opacity: 0; }
1019
+ to { opacity: 1; }
1020
+ }
1021
+
1022
+ @keyframes fd-slide-up {
1023
+ from { opacity: 0; transform: translateY(8px) scale(0.98); }
1024
+ to { opacity: 1; transform: translateY(0) scale(1); }
1025
+ }
1026
+
1027
+ /* ─── Callout / Admonition ──────────────────────────────────────────── */
1028
+
1029
+ .fd-callout {
1030
+ position: relative;
1031
+ display: flex;
1032
+ gap: 10px;
1033
+ margin: 16px 0;
1034
+ padding: 12px 16px;
1035
+ border: 1px solid var(--color-fd-border);
1036
+ border-radius: 8px;
1037
+ background: var(--color-fd-card);
1038
+ font-size: 14px;
1039
+ line-height: 1.6;
1040
+ overflow: hidden;
1041
+ }
1042
+
1043
+ .fd-callout-indicator {
1044
+ position: absolute;
1045
+ left: 0;
1046
+ top: 0;
1047
+ bottom: 0;
1048
+ width: 3px;
1049
+ border-radius: 8px 0 0 8px;
1050
+ }
1051
+
1052
+ .fd-callout-note .fd-callout-indicator { background: hsl(221, 83%, 53%); }
1053
+ .fd-callout-warning .fd-callout-indicator { background: hsl(38, 92%, 50%); }
1054
+ .fd-callout-tip .fd-callout-indicator { background: hsl(142, 71%, 45%); }
1055
+ .fd-callout-important .fd-callout-indicator { background: hsl(262, 83%, 58%); }
1056
+ .fd-callout-caution .fd-callout-indicator { background: hsl(0, 72%, 51%); }
1057
+
1058
+ .fd-callout-icon {
1059
+ flex-shrink: 0;
1060
+ margin-top: 2px;
1061
+ }
1062
+
1063
+ .fd-callout-note .fd-callout-icon { color: hsl(221, 83%, 53%); }
1064
+ .fd-callout-warning .fd-callout-icon { color: hsl(38, 92%, 50%); }
1065
+ .fd-callout-tip .fd-callout-icon { color: hsl(142, 71%, 45%); }
1066
+ .fd-callout-important .fd-callout-icon { color: hsl(262, 83%, 58%); }
1067
+ .fd-callout-caution .fd-callout-icon { color: hsl(0, 72%, 51%); }
1068
+
1069
+ .fd-callout-content {
1070
+ flex: 1;
1071
+ min-width: 0;
1072
+ }
1073
+
1074
+ .fd-callout-title {
1075
+ font-weight: 600;
1076
+ font-size: 13px;
1077
+ }
1078
+
1079
+ .fd-callout-note .fd-callout-title { color: hsl(221, 83%, 53%); }
1080
+ .fd-callout-warning .fd-callout-title { color: hsl(38, 92%, 50%); }
1081
+ .fd-callout-tip .fd-callout-title { color: hsl(142, 71%, 45%); }
1082
+ .fd-callout-important .fd-callout-title { color: hsl(262, 83%, 58%); }
1083
+ .fd-callout-caution .fd-callout-title { color: hsl(0, 72%, 51%); }
1084
+
1085
+ .fd-callout-content p:last-child {
1086
+ margin-bottom: 0;
1087
+ }
1088
+
1089
+ /* ─── Edit on GitHub ────────────────────────────────────────────────── */
1090
+
1091
+ .fd-edit-on-github {
1092
+ display: flex;
1093
+ align-items: center;
1094
+ gap: 16px;
1095
+ margin-top: 32px;
1096
+ padding-top: 16px;
1097
+ border-top: 1px solid var(--color-fd-border);
1098
+ font-size: 13px;
1099
+ }
1100
+
1101
+ .fd-edit-on-github a {
1102
+ display: inline-flex;
1103
+ align-items: center;
1104
+ gap: 6px;
1105
+ color: var(--color-fd-muted-foreground);
1106
+ text-decoration: none;
1107
+ transition: color 0.15s;
1108
+ }
1109
+
1110
+ .fd-edit-on-github a:hover {
1111
+ color: var(--color-fd-foreground);
1112
+ }
1113
+
1114
+ .fd-last-modified {
1115
+ color: var(--color-fd-muted-foreground);
1116
+ font-size: 12px;
1117
+ }
1118
+
1119
+ /* ─── Previous / Next Navigation ────────────────────────────────────── */
1120
+
1121
+ .fd-page-nav {
1122
+ display: grid;
1123
+ grid-template-columns: 1fr 1fr;
1124
+ gap: 16px;
1125
+ margin-top: 32px;
1126
+ padding-top: 24px;
1127
+ border-top: 1px solid var(--color-fd-border);
1128
+ }
1129
+
1130
+ .fd-page-nav-card {
1131
+ display: flex;
1132
+ flex-direction: column;
1133
+ gap: 4px;
1134
+ padding: 16px;
1135
+ border: 1px solid var(--color-fd-border);
1136
+ border-radius: 8px;
1137
+ text-decoration: none;
1138
+ color: var(--color-fd-foreground);
1139
+ transition: background-color 0.15s, border-color 0.15s;
1140
+ }
1141
+
1142
+ .fd-page-nav-card:hover {
1143
+ background: var(--color-fd-accent);
1144
+ border-color: var(--color-fd-ring);
1145
+ }
1146
+
1147
+ .fd-page-nav-next {
1148
+ text-align: right;
1149
+ align-items: flex-end;
1150
+ }
1151
+
1152
+ .fd-page-nav-label {
1153
+ display: inline-flex;
1154
+ align-items: center;
1155
+ gap: 4px;
1156
+ font-size: 12px;
1157
+ font-weight: 500;
1158
+ color: var(--color-fd-muted-foreground);
1159
+ text-transform: uppercase;
1160
+ letter-spacing: 0.05em;
1161
+ }
1162
+
1163
+ .fd-page-nav-title {
1164
+ font-size: 14px;
1165
+ font-weight: 600;
1166
+ color: var(--color-fd-foreground);
1167
+ }
1168
+
1169
+ /* ─── Sidebar icon ───────────────────────────────────────────────────── */
1170
+
1171
+ .fd-sidebar-icon {
1172
+ display: inline-flex;
1173
+ align-items: center;
1174
+ flex-shrink: 0;
1175
+ opacity: 0.7;
1176
+ }
1177
+
1178
+ .fd-sidebar-link-active .fd-sidebar-icon {
1179
+ opacity: 1;
1180
+ }
1181
+
1182
+ /* ═══════════════════════════════════════════════════════════════════════
1183
+ * AI Chat & Search Dialog — base styles (fd-ai-*)
1184
+ * ═══════════════════════════════════════════════════════════════════════ */
1185
+
1186
+ @keyframes fd-ai-dot {
1187
+ 0%, 80%, 100% { transform: scale(0); opacity: 0.5; }
1188
+ 40% { transform: scale(1); opacity: 1; }
1189
+ }
1190
+
1191
+ @keyframes fd-ai-fade-in {
1192
+ from { opacity: 0; }
1193
+ to { opacity: 1; }
1194
+ }
1195
+
1196
+ @keyframes fd-ai-slide-up {
1197
+ from { opacity: 0; transform: translate(-50%, -48%) scale(0.96); }
1198
+ to { opacity: 1; transform: translate(-50%, -50%) scale(1); }
1199
+ }
1200
+
1201
+ @keyframes fd-ai-float-in {
1202
+ from { opacity: 0; transform: translateY(12px) scale(0.95); }
1203
+ to { opacity: 1; transform: translateY(0) scale(1); }
1204
+ }
1205
+
1206
+ @keyframes fd-ai-float-center-in {
1207
+ from { opacity: 0; transform: translate(-50%, -48%) scale(0.96); }
1208
+ to { opacity: 1; transform: translate(-50%, -50%) scale(1); }
1209
+ }
1210
+
1211
+ .fd-ai-overlay {
1212
+ position: fixed;
1213
+ inset: 0;
1214
+ z-index: 9998;
1215
+ background: color-mix(in srgb, var(--color-fd-background) 70%, transparent);
1216
+ backdrop-filter: blur(6px);
1217
+ animation: fd-ai-fade-in 150ms ease-out;
1218
+ }
1219
+
1220
+ .fd-ai-dialog {
1221
+ position: fixed;
1222
+ z-index: 9999;
1223
+ display: flex;
1224
+ flex-direction: column;
1225
+ background: var(--color-fd-popover);
1226
+ border: 1px solid var(--color-fd-border);
1227
+ border-radius: 12px;
1228
+ box-shadow: 0 20px 60px color-mix(in srgb, var(--color-fd-background) 60%, transparent);
1229
+ overflow: hidden;
1230
+ color: var(--color-fd-foreground);
1231
+ font-family: var(--fd-font-sans, system-ui, -apple-system, sans-serif);
1232
+ }
1233
+
1234
+ .fd-ai-tab-bar {
1235
+ display: flex;
1236
+ align-items: center;
1237
+ gap: 2px;
1238
+ padding: 10px 12px 0;
1239
+ border-bottom: 1px solid var(--color-fd-border);
1240
+ }
1241
+
1242
+ .fd-ai-tab {
1243
+ display: flex;
1244
+ align-items: center;
1245
+ gap: 6px;
1246
+ padding: 8px 14px;
1247
+ font-size: 13px;
1248
+ font-weight: 500;
1249
+ border: none;
1250
+ border-radius: 8px 8px 0 0;
1251
+ cursor: pointer;
1252
+ transition: all 150ms;
1253
+ background: transparent;
1254
+ color: var(--color-fd-muted-foreground);
1255
+ border-bottom: 2px solid transparent;
1256
+ font-family: inherit;
1257
+ }
1258
+
1259
+ .fd-ai-tab[data-active="true"] {
1260
+ background: var(--color-fd-accent);
1261
+ color: var(--color-fd-foreground);
1262
+ border-bottom-color: var(--color-fd-primary);
1263
+ }
1264
+
1265
+ .fd-ai-tab:hover:not([data-active="true"]) {
1266
+ color: var(--color-fd-foreground);
1267
+ }
1268
+
1269
+ .fd-ai-esc {
1270
+ padding: 2px 6px;
1271
+ border-radius: 4px;
1272
+ border: 1px solid var(--color-fd-border);
1273
+ font-size: 10px;
1274
+ font-family: inherit;
1275
+ margin-right: 4px;
1276
+ color: var(--color-fd-muted-foreground);
1277
+ }
1278
+
1279
+ /* ─── Header ─────────────────────────────────────────────────── */
1280
+
1281
+ .fd-ai-header {
1282
+ display: flex;
1283
+ align-items: center;
1284
+ gap: 8px;
1285
+ padding: 12px 16px;
1286
+ border-bottom: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.06));
1287
+ }
1288
+
1289
+ .fd-ai-header-title {
1290
+ font-size: 14px;
1291
+ font-weight: 600;
1292
+ flex: 1;
1293
+ }
1294
+
1295
+ .fd-ai-close-btn {
1296
+ display: flex;
1297
+ align-items: center;
1298
+ justify-content: center;
1299
+ width: 28px;
1300
+ height: 28px;
1301
+ border-radius: var(--radius, 6px);
1302
+ border: none;
1303
+ cursor: pointer;
1304
+ background: transparent;
1305
+ color: var(--color-fd-muted-foreground, #71717a);
1306
+ transition: all 150ms;
1307
+ }
1308
+
1309
+ .fd-ai-close-btn:hover {
1310
+ color: var(--color-fd-foreground, #e4e4e7);
1311
+ background: var(--color-fd-accent, rgba(255, 255, 255, 0.06));
1312
+ }
1313
+
1314
+ .fd-ai-search-wrap {
1315
+ display: flex;
1316
+ align-items: center;
1317
+ gap: 10px;
1318
+ padding: 12px 16px;
1319
+ border-bottom: 1px solid var(--color-fd-border);
1320
+ color: var(--color-fd-muted-foreground);
1321
+ }
1322
+
1323
+ .fd-ai-input {
1324
+ flex: 1;
1325
+ background: transparent;
1326
+ border: none;
1327
+ outline: none;
1328
+ color: var(--color-fd-foreground);
1329
+ font-size: 14px;
1330
+ font-family: inherit;
1331
+ }
1332
+
1333
+ .fd-ai-results {
1334
+ flex: 1;
1335
+ overflow-y: auto;
1336
+ padding: 4px 8px;
1337
+ max-height: 360px;
1338
+ }
1339
+
1340
+ .fd-ai-result {
1341
+ display: flex;
1342
+ align-items: center;
1343
+ gap: 10px;
1344
+ width: 100%;
1345
+ padding: 10px 12px;
1346
+ border: none;
1347
+ border-radius: 8px;
1348
+ cursor: pointer;
1349
+ text-align: left;
1350
+ font-size: 13px;
1351
+ font-family: inherit;
1352
+ transition: background 100ms;
1353
+ background: transparent;
1354
+ color: var(--color-fd-foreground);
1355
+ }
1356
+
1357
+ .fd-ai-result[data-active="true"] {
1358
+ background: var(--color-fd-accent);
1359
+ color: var(--color-fd-accent-foreground);
1360
+ }
1361
+
1362
+ .fd-ai-result-empty {
1363
+ padding: 32px 16px;
1364
+ text-align: center;
1365
+ color: var(--color-fd-muted-foreground);
1366
+ font-size: 13px;
1367
+ }
1368
+
1369
+ .fd-ai-messages {
1370
+ flex: 1;
1371
+ overflow-y: auto;
1372
+ padding: 12px 16px;
1373
+ display: flex;
1374
+ flex-direction: column;
1375
+ gap: 16px;
1376
+ }
1377
+
1378
+ .fd-ai-empty {
1379
+ display: flex;
1380
+ flex-direction: column;
1381
+ align-items: center;
1382
+ justify-content: center;
1383
+ flex: 1;
1384
+ gap: 12px;
1385
+ padding: 24px 0;
1386
+ color: var(--color-fd-muted-foreground);
1387
+ }
1388
+
1389
+ .fd-ai-empty-title {
1390
+ font-size: 14px;
1391
+ font-weight: 500;
1392
+ }
1393
+
1394
+ .fd-ai-empty-desc {
1395
+ font-size: 12px;
1396
+ opacity: 0.7;
1397
+ text-align: center;
1398
+ max-width: 300px;
1399
+ line-height: 1.5;
1400
+ }
1401
+
1402
+ .fd-ai-suggestions {
1403
+ display: flex;
1404
+ flex-direction: column;
1405
+ gap: 6px;
1406
+ width: 100%;
1407
+ max-width: 360px;
1408
+ margin-top: 8px;
1409
+ }
1410
+
1411
+ .fd-ai-suggestion {
1412
+ display: flex;
1413
+ align-items: center;
1414
+ gap: 8px;
1415
+ padding: 8px 12px;
1416
+ border-radius: 8px;
1417
+ border: 1px solid var(--color-fd-border);
1418
+ background: var(--color-fd-background);
1419
+ opacity: 0.6;
1420
+ color: var(--color-fd-foreground);
1421
+ font-size: 13px;
1422
+ font-family: inherit;
1423
+ cursor: pointer;
1424
+ text-align: left;
1425
+ line-height: 1.4;
1426
+ transition: all 150ms;
1427
+ }
1428
+
1429
+ .fd-ai-suggestion:hover {
1430
+ background: var(--color-fd-accent);
1431
+ border-color: var(--color-fd-ring);
1432
+ opacity: 1;
1433
+ }
1434
+
1435
+ .fd-ai-msg {
1436
+ display: flex;
1437
+ flex-direction: column;
1438
+ gap: 4px;
1439
+ }
1440
+
1441
+ .fd-ai-msg[data-role="user"] {
1442
+ align-items: flex-end;
1443
+ }
1444
+
1445
+ .fd-ai-msg[data-role="assistant"] {
1446
+ align-items: flex-start;
1447
+ }
1448
+
1449
+ .fd-ai-msg-label {
1450
+ font-size: 10px;
1451
+ font-weight: 500;
1452
+ text-transform: uppercase;
1453
+ letter-spacing: 0.05em;
1454
+ color: var(--color-fd-muted-foreground);
1455
+ padding: 0 2px;
1456
+ }
1457
+
1458
+ .fd-ai-bubble-user {
1459
+ background: var(--color-fd-primary);
1460
+ color: var(--color-fd-primary-foreground);
1461
+ padding: 8px 14px;
1462
+ border-radius: 14px;
1463
+ font-size: 13px;
1464
+ line-height: 1.5;
1465
+ max-width: 85%;
1466
+ word-break: break-word;
1467
+ }
1468
+
1469
+ .fd-ai-bubble-ai {
1470
+ background: var(--color-fd-muted, rgba(255, 255, 255, 0.04));
1471
+ padding: 10px 14px;
1472
+ border-radius: var(--radius, 14px);
1473
+ font-size: 13px;
1474
+ line-height: 1.6;
1475
+ max-width: 95%;
1476
+ word-break: break-word;
1477
+ }
1478
+
1479
+ .fd-ai-chat-footer {
1480
+ padding: 8px 12px 12px;
1481
+ border-top: 1px solid var(--color-fd-border);
1482
+ }
1483
+
1484
+ .fd-ai-clear-btn {
1485
+ font-size: 11px;
1486
+ color: var(--color-fd-muted-foreground);
1487
+ background: transparent;
1488
+ border: none;
1489
+ cursor: pointer;
1490
+ padding: 2px 8px;
1491
+ border-radius: 4px;
1492
+ font-family: inherit;
1493
+ }
1494
+
1495
+ .fd-ai-clear-btn:hover {
1496
+ color: var(--color-fd-foreground);
1497
+ }
1498
+
1499
+ .fd-ai-input-wrap {
1500
+ display: flex;
1501
+ align-items: center;
1502
+ gap: 8px;
1503
+ background: var(--color-fd-muted);
1504
+ border-radius: 10px;
1505
+ padding: 4px 4px 4px 14px;
1506
+ border: 1px solid var(--color-fd-border);
1507
+ }
1508
+
1509
+ .fd-ai-send-btn {
1510
+ display: flex;
1511
+ align-items: center;
1512
+ justify-content: center;
1513
+ width: 32px;
1514
+ height: 32px;
1515
+ border-radius: 8px;
1516
+ border: none;
1517
+ transition: all 150ms;
1518
+ cursor: default;
1519
+ background: var(--color-fd-muted);
1520
+ color: var(--color-fd-muted-foreground);
1521
+ }
1522
+
1523
+ .fd-ai-send-btn[data-active="true"] {
1524
+ cursor: pointer;
1525
+ background: var(--color-fd-primary);
1526
+ color: var(--color-fd-primary-foreground);
1527
+ }
1528
+
1529
+ .fd-ai-loading {
1530
+ display: inline-flex;
1531
+ gap: 6px;
1532
+ align-items: center;
1533
+ }
1534
+
1535
+ .fd-ai-loading-text {
1536
+ font-size: 12px;
1537
+ color: var(--color-fd-muted-foreground);
1538
+ }
1539
+
1540
+ .fd-ai-loading-dots {
1541
+ display: inline-flex;
1542
+ gap: 3px;
1543
+ align-items: center;
1544
+ }
1545
+
1546
+ .fd-ai-loading-dot {
1547
+ width: 5px;
1548
+ height: 5px;
1549
+ border-radius: 50%;
1550
+ background: var(--color-fd-muted-foreground);
1551
+ animation: fd-ai-dot 1.4s infinite ease-in-out both;
1552
+ }
1553
+
1554
+ .fd-ai-loading-dot:nth-child(2) { animation-delay: 0.16s; }
1555
+ .fd-ai-loading-dot:nth-child(3) { animation-delay: 0.32s; }
1556
+
1557
+ /* ─── Markdown in AI responses ───────────────────────────────── */
1558
+
1559
+ .fd-ai-bubble-ai code {
1560
+ background: var(--color-fd-muted, #1a1a2e);
1561
+ padding: 2px 6px;
1562
+ border-radius: var(--radius, 4px);
1563
+ font-size: 0.875em;
1564
+ font-family: var(--fd-font-mono, ui-monospace, monospace);
1565
+ }
1566
+
1567
+ .fd-ai-bubble-ai a {
1568
+ color: var(--color-fd-primary, #6366f1);
1569
+ text-decoration: underline;
1570
+ }
1571
+
1572
+ .fd-ai-bubble-ai .fd-ai-code-block code {
1573
+ background: transparent;
1574
+ padding: 0;
1575
+ border-radius: 0;
1576
+ font-size: inherit;
1577
+ }
1578
+
1579
+ .fd-ai-bubble-ai table {
1580
+ width: 100%;
1581
+ border-collapse: collapse;
1582
+ margin: 8px 0;
1583
+ font-size: 13px;
1584
+ }
1585
+
1586
+ .fd-ai-bubble-ai th,
1587
+ .fd-ai-bubble-ai td {
1588
+ border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.1));
1589
+ padding: 6px 12px;
1590
+ text-align: left;
1591
+ }
1592
+
1593
+ .fd-ai-bubble-ai th {
1594
+ background: var(--color-fd-muted, #1a1a2e);
1595
+ font-weight: 600;
1596
+ font-size: 12px;
1597
+ }
1598
+
1599
+ /* ═══════════════════════════════════════════════════════════════════
1600
+ * Code blocks in AI chat — fd-ai-code-*
1601
+ * ═══════════════════════════════════════════════════════════════════ */
1602
+
1603
+ .fd-ai-code-block {
1604
+ --sh-class: #8be9fd;
1605
+ --sh-identifier: #c9d1d9;
1606
+ --sh-keyword: #ff7b72;
1607
+ --sh-string: #a5d6ff;
1608
+ --sh-property: #79c0ff;
1609
+ --sh-entity: #7ee787;
1610
+ --sh-sign: #8b949e;
1611
+ --sh-comment: #6e7681;
1612
+ --sh-jsxliterals: #d2a8ff;
1613
+ --sh-space: inherit;
1614
+
1615
+ margin: 10px 0;
1616
+ border-radius: var(--radius, 8px);
1617
+ border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.1));
1618
+ background: var(--color-fd-muted, #1a1a2e);
1619
+ overflow: hidden;
1620
+ }
1621
+
1622
+ .fd-ai-code-header {
1623
+ display: flex;
1624
+ align-items: center;
1625
+ justify-content: space-between;
1626
+ padding: 6px 12px;
1627
+ border-bottom: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.08));
1628
+ background: color-mix(in srgb, var(--color-fd-muted, #1a1a2e) 80%, black);
1629
+ min-height: 32px;
1630
+ }
1631
+
1632
+ .fd-ai-code-lang {
1633
+ font-size: 11px;
1634
+ font-family: var(--fd-font-mono, ui-monospace, monospace);
1635
+ color: var(--color-fd-muted-foreground, #71717a);
1636
+ text-transform: uppercase;
1637
+ letter-spacing: 0.04em;
1638
+ }
1639
+
1640
+ .fd-ai-code-copy {
1641
+ font-size: 11px;
1642
+ font-family: var(--fd-font-mono, ui-monospace, monospace);
1643
+ color: var(--color-fd-muted-foreground, #71717a);
1644
+ background: transparent;
1645
+ border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.1));
1646
+ border-radius: var(--radius, 4px);
1647
+ padding: 2px 8px;
1648
+ cursor: pointer;
1649
+ transition: all 150ms;
1650
+ }
1651
+
1652
+ .fd-ai-code-copy:hover {
1653
+ color: var(--color-fd-foreground, #e4e4e7);
1654
+ background: color-mix(in srgb, var(--color-fd-accent, rgba(255,255,255,0.05)) 60%, transparent);
1655
+ }
1656
+
1657
+ .fd-ai-code-block pre {
1658
+ margin: 0;
1659
+ padding: 12px 16px;
1660
+ overflow-x: auto;
1661
+ background: transparent;
1662
+ border: none;
1663
+ border-radius: 0;
1664
+ }
1665
+
1666
+ .fd-ai-code-block code {
1667
+ font-size: 13px;
1668
+ line-height: 1.45;
1669
+ font-family: var(--fd-font-mono, ui-monospace, monospace);
1670
+ background: transparent;
1671
+ padding: 0;
1672
+ border-radius: 0;
1673
+ }
1674
+
1675
+ .fd-ai-code-block .sh__line { display: block; min-height: 1.2em; }
1676
+
1677
+ /* ═══════════════════════════════════════════════════════════════
1678
+ Default theme AI overrides — rounded, soft, indigo
1679
+ (matches Next.js fumadocs default.css)
1680
+ ═══════════════════════════════════════════════════════════════ */
1681
+
1682
+ .fd-ai-dialog {
1683
+ border-radius: 12px;
1684
+ box-shadow: 0 20px 60px rgba(99, 102, 241, 0.08), 0 8px 24px rgba(0, 0, 0, 0.12);
1685
+ }
1686
+
1687
+ .fd-ai-bubble-user {
1688
+ border-radius: 16px 16px 4px 16px;
1689
+ }
1690
+
1691
+ .fd-ai-bubble-ai {
1692
+ border-radius: 16px 16px 16px 4px;
1693
+ }
1694
+
1695
+ .fd-ai-input-wrap {
1696
+ border-radius: 10px;
1697
+ }
1698
+
1699
+ .fd-ai-send-btn {
1700
+ border-radius: 8px;
1701
+ }
1702
+
1703
+ .fd-ai-floating-btn {
1704
+ border-radius: 26px;
1705
+ box-shadow: 0 8px 32px rgba(99, 102, 241, 0.3);
1706
+ }
1707
+
1708
+ .fd-ai-floating-btn:hover {
1709
+ box-shadow: 0 10px 40px rgba(99, 102, 241, 0.4);
1710
+ }
1711
+
1712
+ .fd-ai-suggestion {
1713
+ border-radius: 8px;
1714
+ }
1715
+
1716
+ .fd-ai-result {
1717
+ border-radius: 8px;
1718
+ }
1719
+
1720
+ .fd-ai-fm-input-container {
1721
+ border-radius: 12px;
1722
+ }
1723
+
1724
+ .fd-ai-fm-send-btn {
1725
+ border-radius: 9999px;
1726
+ }
1727
+
1728
+ .fd-ai-fm-suggestion {
1729
+ border-radius: 9999px;
1730
+ }
1731
+
1732
+ .fd-ai-fm-trigger-btn {
1733
+ border-radius: 16px;
1734
+ }
1735
+
1736
+ .fd-ai-fm-close-btn {
1737
+ border-radius: 9999px;
1738
+ }
1739
+
1740
+ .fd-ai-code-block {
1741
+ border-radius: 8px;
1742
+ }
1743
+
1744
+ .fd-ai-code-copy {
1745
+ border-radius: 4px;
1746
+ }
1747
+
1748
+ /* ═══════════════════════════════════════════════════════════════
1749
+ Floating AI Chat — fd-ai-floating-* + fd-ai-fm-*
1750
+ (exact port of Next.js fumadocs ai.css)
1751
+ ═══════════════════════════════════════════════════════════════ */
1752
+
1753
+ /* ─── Floating trigger button ────────────────────────────────── */
1754
+
1755
+ .fd-ai-floating-btn {
1756
+ position: fixed;
1757
+ z-index: 9997;
1758
+ width: 52px;
1759
+ height: 52px;
1760
+ border-radius: var(--radius, 26px);
1761
+ border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.1));
1762
+ background: var(--color-fd-primary, #6366f1);
1763
+ color: var(--color-fd-primary-foreground, #fff);
1764
+ cursor: pointer;
1765
+ display: flex;
1766
+ align-items: center;
1767
+ justify-content: center;
1768
+ box-shadow: 0 8px 32px color-mix(in srgb, var(--color-fd-primary, #6366f1) 30%, transparent);
1769
+ transition: all 200ms;
1770
+ animation: fd-ai-fade-in 300ms ease-out;
1771
+ }
1772
+
1773
+ .fd-ai-floating-btn:hover {
1774
+ transform: scale(1.05);
1775
+ box-shadow: 0 10px 40px color-mix(in srgb, var(--color-fd-primary, #6366f1) 40%, transparent);
1776
+ }
1777
+
1778
+ .fd-ai-floating-trigger {
1779
+ position: fixed;
1780
+ z-index: 9997;
1781
+ cursor: pointer;
1782
+ animation: fd-ai-fade-in 300ms ease-out;
1783
+ }
1784
+
1785
+ /* ═══════════════════════════════════════════════════════════════
1786
+ Full-Modal (better-auth inspired) — fd-ai-fm-*
1787
+ ═══════════════════════════════════════════════════════════════ */
1788
+
1789
+ .fd-ai-fm-overlay {
1790
+ position: fixed;
1791
+ inset: 0;
1792
+ display: flex;
1793
+ flex-direction: column;
1794
+ align-items: center;
1795
+ background: color-mix(in srgb, var(--color-fd-background, #000) 80%, transparent);
1796
+ backdrop-filter: blur(8px);
1797
+ z-index: 9998;
1798
+ animation: fd-ai-fade-in 200ms ease-out;
1799
+ padding: 0 8px;
1800
+ }
1801
+
1802
+ /* ─── Top bar (close button) ─────────────────────────────────── */
1803
+
1804
+ .fd-ai-fm-topbar {
1805
+ display: flex;
1806
+ justify-content: flex-end;
1807
+ align-items: center;
1808
+ width: min(800px, 100%);
1809
+ padding: 12px 0;
1810
+ position: sticky;
1811
+ top: 0;
1812
+ z-index: 2;
1813
+ }
1814
+
1815
+ .fd-ai-fm-close-btn {
1816
+ display: flex;
1817
+ align-items: center;
1818
+ justify-content: center;
1819
+ width: 32px;
1820
+ height: 32px;
1821
+ border-radius: var(--radius, 9999px);
1822
+ border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.1));
1823
+ background: var(--color-fd-secondary, rgba(255, 255, 255, 0.06));
1824
+ color: var(--color-fd-foreground, #e4e4e7);
1825
+ cursor: pointer;
1826
+ transition: all 150ms;
1827
+ }
1828
+
1829
+ .fd-ai-fm-close-btn:hover {
1830
+ background: var(--color-fd-accent, rgba(255, 255, 255, 0.1));
1831
+ }
1832
+
1833
+ /* ─── Message list ───────────────────────────────────────────── */
1834
+
1835
+ .fd-ai-fm-messages {
1836
+ flex: 1;
1837
+ overflow-y: auto;
1838
+ width: min(800px, 100%);
1839
+ padding: 24px 0 120px;
1840
+ mask-image: linear-gradient(to bottom, transparent, white 3rem, white calc(100% - 8rem), transparent 100%);
1841
+ -webkit-mask-image: linear-gradient(to bottom, transparent, white 3rem, white calc(100% - 8rem), transparent 100%);
1842
+ }
1843
+
1844
+ .fd-ai-fm-messages-inner {
1845
+ display: flex;
1846
+ flex-direction: column;
1847
+ gap: 20px;
1848
+ }
1849
+
1850
+ /* ─── Message ────────────────────────────────────────────────── */
1851
+
1852
+ .fd-ai-fm-msg {
1853
+ display: flex;
1854
+ flex-direction: column;
1855
+ }
1856
+
1857
+ .fd-ai-fm-msg-label {
1858
+ font-size: 13px;
1859
+ font-weight: 500;
1860
+ margin-bottom: 4px;
1861
+ color: var(--color-fd-muted-foreground, #71717a);
1862
+ }
1863
+
1864
+ .fd-ai-fm-msg-label[data-role="assistant"] {
1865
+ color: var(--color-fd-primary, #6366f1);
1866
+ }
1867
+
1868
+ .fd-ai-fm-msg-content {
1869
+ font-size: 14px;
1870
+ line-height: 1.7;
1871
+ color: var(--color-fd-foreground, #e4e4e7);
1872
+ }
1873
+
1874
+ .fd-ai-fm-msg-content code {
1875
+ background: var(--color-fd-muted, #1a1a2e);
1876
+ padding: 2px 6px;
1877
+ border-radius: var(--radius, 4px);
1878
+ font-size: 0.875em;
1879
+ font-family: var(--fd-font-mono, ui-monospace, monospace);
1880
+ }
1881
+
1882
+ .fd-ai-fm-msg-content .fd-ai-code-block code {
1883
+ background: transparent;
1884
+ padding: 0;
1885
+ border-radius: 0;
1886
+ font-size: inherit;
1887
+ }
1888
+
1889
+ .fd-ai-fm-msg-content a {
1890
+ color: var(--color-fd-primary, #6366f1);
1891
+ text-decoration: underline;
1892
+ }
1893
+
1894
+ .fd-ai-fm-msg-content table {
1895
+ width: 100%;
1896
+ border-collapse: collapse;
1897
+ margin: 8px 0;
1898
+ font-size: 13px;
1899
+ }
1900
+
1901
+ .fd-ai-fm-msg-content th,
1902
+ .fd-ai-fm-msg-content td {
1903
+ border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.1));
1904
+ padding: 6px 12px;
1905
+ text-align: left;
1906
+ }
1907
+
1908
+ .fd-ai-fm-msg-content th {
1909
+ background: var(--color-fd-muted, #1a1a2e);
1910
+ font-weight: 600;
1911
+ font-size: 12px;
1912
+ }
1913
+
1914
+ /* ─── Thinking dots ──────────────────────────────────────────── */
1915
+
1916
+ .fd-ai-fm-thinking {
1917
+ display: flex;
1918
+ gap: 4px;
1919
+ align-items: center;
1920
+ }
1921
+
1922
+ .fd-ai-fm-thinking-dot {
1923
+ width: 6px;
1924
+ height: 6px;
1925
+ border-radius: 9999px;
1926
+ background: var(--color-fd-primary, #6366f1);
1927
+ animation: fd-ai-fm-bounce 1s infinite ease-in-out;
1928
+ }
1929
+
1930
+ .fd-ai-fm-thinking-dot:nth-child(2) { animation-delay: 150ms; }
1931
+ .fd-ai-fm-thinking-dot:nth-child(3) { animation-delay: 300ms; }
1932
+
1933
+ @keyframes fd-ai-fm-bounce {
1934
+ 0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
1935
+ 40% { transform: scale(1); opacity: 1; }
1936
+ }
1937
+
1938
+ /* ─── Bottom input bar ───────────────────────────────────────── */
1939
+
1940
+ .fd-ai-fm-input-bar {
1941
+ position: fixed;
1942
+ z-index: 9999;
1943
+ transition: width 300ms cubic-bezier(0.34, 1.56, 0.64, 1),
1944
+ height 300ms cubic-bezier(0.34, 1.56, 0.64, 1),
1945
+ transform 200ms ease-out;
1946
+ }
1947
+
1948
+ .fd-ai-fm-input-bar--closed {
1949
+ /* inherits position from inline btnPosition styles */
1950
+ }
1951
+
1952
+ .fd-ai-fm-input-bar--open {
1953
+ bottom: 16px;
1954
+ left: 50%;
1955
+ transform: translateX(-50%);
1956
+ width: min(800px, calc(100vw - 32px));
1957
+ }
1958
+
1959
+ .fd-ai-fm-input-container {
1960
+ display: flex;
1961
+ flex-direction: column;
1962
+ border-radius: var(--radius, 12px);
1963
+ border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.1));
1964
+ background: var(--color-fd-background, #0c0c0c);
1965
+ box-shadow: 0 20px 60px color-mix(in srgb, var(--color-fd-background, #000) 70%, transparent);
1966
+ overflow: hidden;
1967
+ }
1968
+
1969
+ .fd-ai-fm-input-wrap {
1970
+ display: flex;
1971
+ align-items: flex-start;
1972
+ padding-right: 8px;
1973
+ }
1974
+
1975
+ .fd-ai-fm-input {
1976
+ flex: 1;
1977
+ padding: 16px;
1978
+ background: transparent;
1979
+ border: none;
1980
+ outline: none;
1981
+ resize: none;
1982
+ color: var(--color-fd-foreground, #e4e4e7);
1983
+ font-size: 14px;
1984
+ font-family: var(--fd-font-sans, system-ui, -apple-system, sans-serif);
1985
+ line-height: 1.5;
1986
+ min-height: 0;
1987
+ max-height: 120px;
1988
+ }
1989
+
1990
+ .fd-ai-fm-input::placeholder {
1991
+ color: var(--color-fd-muted-foreground, #71717a);
1992
+ }
1993
+
1994
+ .fd-ai-fm-send-btn {
1995
+ display: flex;
1996
+ align-items: center;
1997
+ justify-content: center;
1998
+ margin-top: 12px;
1999
+ width: 32px;
2000
+ height: 32px;
2001
+ border-radius: 9999px;
2002
+ border: none;
2003
+ cursor: default;
2004
+ transition: all 150ms;
2005
+ background: var(--color-fd-secondary, rgba(255, 255, 255, 0.06));
2006
+ color: var(--color-fd-muted-foreground, #71717a);
2007
+ }
2008
+
2009
+ .fd-ai-fm-send-btn[data-active="true"] {
2010
+ cursor: pointer;
2011
+ background: var(--color-fd-primary, #6366f1);
2012
+ color: var(--color-fd-primary-foreground, #fff);
2013
+ }
2014
+
2015
+ /* ─── Suggestions (horizontal pills) ────────────────────────── */
2016
+
2017
+ .fd-ai-fm-suggestions-area {
2018
+ padding: 12px 16px 4px;
2019
+ }
2020
+
2021
+ .fd-ai-fm-suggestions-label {
2022
+ font-size: 12px;
2023
+ font-weight: 500;
2024
+ color: var(--color-fd-muted-foreground, #71717a);
2025
+ margin-bottom: 8px;
2026
+ }
2027
+
2028
+ .fd-ai-fm-suggestions {
2029
+ display: flex;
2030
+ gap: 8px;
2031
+ overflow-x: auto;
2032
+ padding-bottom: 4px;
2033
+ mask-image: linear-gradient(to right, transparent 0%, black 1rem, black calc(100% - 1rem), transparent 100%);
2034
+ -webkit-mask-image: linear-gradient(to right, transparent 0%, black 1rem, black calc(100% - 1rem), transparent 100%);
2035
+ }
2036
+
2037
+ .fd-ai-fm-suggestion {
2038
+ flex-shrink: 0;
2039
+ white-space: nowrap;
2040
+ padding: 6px 14px;
2041
+ font-size: 12px;
2042
+ font-family: inherit;
2043
+ border-radius: 9999px;
2044
+ border: 1px solid color-mix(in srgb, var(--color-fd-border, rgba(255,255,255,0.1)) 50%, transparent);
2045
+ background: color-mix(in srgb, var(--color-fd-muted, rgba(255,255,255,0.04)) 30%, transparent);
2046
+ color: var(--color-fd-muted-foreground, #71717a);
2047
+ cursor: pointer;
2048
+ transition: all 200ms;
2049
+ }
2050
+
2051
+ .fd-ai-fm-suggestion:hover {
2052
+ background: color-mix(in srgb, var(--color-fd-muted, rgba(255,255,255,0.04)) 50%, transparent);
2053
+ color: var(--color-fd-foreground, #e4e4e7);
2054
+ border-color: var(--color-fd-border, rgba(255, 255, 255, 0.1));
2055
+ }
2056
+
2057
+ /* ─── Footer bar ─────────────────────────────────────────────── */
2058
+
2059
+ .fd-ai-fm-footer-bar {
2060
+ display: flex;
2061
+ align-items: center;
2062
+ gap: 4px;
2063
+ padding: 8px 16px;
2064
+ border-top: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.06));
2065
+ background: color-mix(in srgb, var(--color-fd-accent, rgba(255,255,255,0.03)) 40%, transparent);
2066
+ font-size: 12px;
2067
+ color: var(--color-fd-muted-foreground, #71717a);
2068
+ }
2069
+
2070
+ .fd-ai-fm-clear-btn {
2071
+ display: flex;
2072
+ align-items: center;
2073
+ gap: 4px;
2074
+ background: transparent;
2075
+ border: none;
2076
+ cursor: pointer;
2077
+ font-family: inherit;
2078
+ font-size: 12px;
2079
+ color: var(--color-fd-muted-foreground, #71717a);
2080
+ transition: color 200ms;
2081
+ padding: 0;
2082
+ }
2083
+
2084
+ .fd-ai-fm-clear-btn:hover {
2085
+ color: var(--color-fd-foreground, #e4e4e7);
2086
+ }
2087
+
2088
+ .fd-ai-fm-clear-btn[aria-disabled="true"] {
2089
+ opacity: 0.5;
2090
+ cursor: not-allowed;
2091
+ }
2092
+
2093
+ .fd-ai-fm-footer-hint {
2094
+ flex: 1;
2095
+ }
2096
+
2097
+ /* ─── Closed trigger button ──────────────────────────────────── */
2098
+
2099
+ .fd-ai-fm-trigger-btn {
2100
+ display: flex;
2101
+ align-items: center;
2102
+ justify-content: center;
2103
+ gap: 8px;
2104
+ padding: 8px 16px;
2105
+ height: 40px;
2106
+ border-radius: var(--radius, 16px);
2107
+ border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.1));
2108
+ background: var(--color-fd-secondary, rgba(255, 255, 255, 0.06));
2109
+ color: var(--color-fd-muted-foreground, #71717a);
2110
+ font-family: inherit;
2111
+ font-size: 14px;
2112
+ cursor: pointer;
2113
+ backdrop-filter: blur(8px);
2114
+ box-shadow: 0 8px 32px color-mix(in srgb, var(--color-fd-background, #000) 40%, transparent);
2115
+ transition: all 200ms;
2116
+ animation: fd-ai-fade-in 300ms ease-out;
2117
+ white-space: nowrap;
2118
+ }
2119
+
2120
+ .fd-ai-fm-trigger-btn:hover {
2121
+ background: var(--color-fd-accent, rgba(255, 255, 255, 0.1));
2122
+ color: var(--color-fd-accent-foreground, #fff);
2123
+ transform: scale(1.03);
2124
+ }