@farming-labs/nuxt-theme 0.0.2-beta.17

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