@farming-labs/astro-theme 0.0.2-beta.15

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