@farming-labs/theme 0.0.2-beta.9 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/styles/ai.css CHANGED
@@ -7,29 +7,46 @@
7
7
 
8
8
  /* ─── Animations ─────────────────────────────────────────────────── */
9
9
 
10
- @keyframes fd-ai-dot {
11
- 0%, 80%, 100% { transform: scale(0); opacity: 0.5; }
12
- 40% { transform: scale(1); opacity: 1; }
13
- }
14
-
15
10
  @keyframes fd-ai-fade-in {
16
- from { opacity: 0; }
17
- to { opacity: 1; }
11
+ from {
12
+ opacity: 0;
13
+ }
14
+ to {
15
+ opacity: 1;
16
+ }
18
17
  }
19
18
 
20
19
  @keyframes fd-ai-slide-up {
21
- from { opacity: 0; transform: translate(-50%, -48%) scale(0.96); }
22
- to { opacity: 1; transform: translate(-50%, -50%) scale(1); }
20
+ from {
21
+ opacity: 0;
22
+ transform: translate(-50%, -48%) scale(0.96);
23
+ }
24
+ to {
25
+ opacity: 1;
26
+ transform: translate(-50%, -50%) scale(1);
27
+ }
23
28
  }
24
29
 
25
30
  @keyframes fd-ai-float-in {
26
- from { opacity: 0; transform: translateY(12px) scale(0.95); }
27
- to { opacity: 1; transform: translateY(0) scale(1); }
31
+ from {
32
+ opacity: 0;
33
+ transform: translateY(12px) scale(0.95);
34
+ }
35
+ to {
36
+ opacity: 1;
37
+ transform: translateY(0) scale(1);
38
+ }
28
39
  }
29
40
 
30
41
  @keyframes fd-ai-float-center-in {
31
- from { opacity: 0; transform: translate(-50%, -48%) scale(0.96); }
32
- to { opacity: 1; transform: translate(-50%, -50%) scale(1); }
42
+ from {
43
+ opacity: 0;
44
+ transform: translate(-50%, -48%) scale(0.96);
45
+ }
46
+ to {
47
+ opacity: 1;
48
+ transform: translate(-50%, -50%) scale(1);
49
+ }
33
50
  }
34
51
 
35
52
  /* ─── Overlay ────────────────────────────────────────────────────── */
@@ -254,7 +271,7 @@
254
271
  border-radius: var(--radius, 8px);
255
272
  border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.08));
256
273
  background: var(--color-fd-background, rgba(255, 255, 255, 0.01));
257
- opacity: 0.6;
274
+ opacity: 0.6;
258
275
  color: var(--color-fd-foreground, #e4e4e7);
259
276
  font-size: 13px;
260
277
  font-family: inherit;
@@ -313,6 +330,12 @@
313
330
  line-height: 1.6;
314
331
  max-width: 95%;
315
332
  word-break: break-word;
333
+ animation: fd-ai-msg-in 300ms ease-out;
334
+ }
335
+
336
+ @keyframes fd-ai-msg-in {
337
+ from { opacity: 0; transform: translateY(6px); }
338
+ to { opacity: 1; transform: translateY(0); }
316
339
  }
317
340
 
318
341
  /* ─── Chat input ─────────────────────────────────────────────────── */
@@ -367,59 +390,310 @@
367
390
  color: var(--color-fd-primary-foreground, #fff);
368
391
  }
369
392
 
370
- /* ─── Loading indicator ──────────────────────────────────────────── */
393
+ /* ═══════════════════════════════════════════════════════════════════
394
+ * AI Loader variants — fd-ai-loader-*
395
+ * Default: "shimmer-dots" (shimmer text + typing dots in a row)
396
+ * ═══════════════════════════════════════════════════════════════════ */
371
397
 
372
- .fd-ai-loading {
398
+ .fd-ai-loader {
373
399
  display: inline-flex;
400
+ align-items: center;
374
401
  gap: 6px;
402
+ animation: fd-ai-loader-in 300ms ease-out;
403
+ }
404
+
405
+ @keyframes fd-ai-loader-in {
406
+ from { opacity: 0; transform: translateY(4px); }
407
+ to { opacity: 1; transform: translateY(0); }
408
+ }
409
+
410
+ /* ── shimmer-dots (default): shimmer text + typing dots ──────────── */
411
+
412
+ .fd-ai-loader-shimmer-text {
413
+ font-size: 13px;
414
+ font-weight: 500;
415
+ background: linear-gradient(
416
+ to right,
417
+ var(--color-fd-muted-foreground, #888) 40%,
418
+ var(--color-fd-foreground, #fff) 60%,
419
+ var(--color-fd-muted-foreground, #888) 80%
420
+ );
421
+ background-size: 200% auto;
422
+ background-clip: text;
423
+ -webkit-background-clip: text;
424
+ color: transparent;
425
+ animation: fd-ai-shimmer-text 3s linear infinite;
426
+ }
427
+
428
+ @keyframes fd-ai-shimmer-text {
429
+ 0% { background-position: 150% center; }
430
+ 100% { background-position: -150% center; }
431
+ }
432
+
433
+ .fd-ai-loader-typing-dots {
434
+ display: inline-flex;
375
435
  align-items: center;
436
+ gap: 2px;
376
437
  }
377
438
 
378
- .fd-ai-loading-text {
379
- font-size: 12px;
380
- color: var(--color-fd-muted-foreground, #888);
439
+ .fd-ai-loader-typing-dot {
440
+ width: 4px;
441
+ height: 4px;
442
+ border-radius: 50%;
443
+ background: var(--color-fd-primary, #6366f1);
444
+ animation: fd-ai-typing 1s infinite;
381
445
  }
382
446
 
383
- .fd-ai-loading-dots {
447
+ .fd-ai-loader-typing-dot:nth-child(2) { animation-delay: 250ms; }
448
+ .fd-ai-loader-typing-dot:nth-child(3) { animation-delay: 500ms; }
449
+
450
+ @keyframes fd-ai-typing {
451
+ 0%, 100% { transform: translateY(0); opacity: 0.5; }
452
+ 50% { transform: translateY(-2px); opacity: 1; }
453
+ }
454
+
455
+ /* ── circular: spinning ring ─────────────────────────────────────── */
456
+
457
+ .fd-ai-loader-circular {
458
+ width: 16px;
459
+ height: 16px;
460
+ border: 2px solid var(--color-fd-primary, #6366f1);
461
+ border-top-color: transparent;
462
+ border-radius: 50%;
463
+ animation: fd-ai-spin 0.8s linear infinite;
464
+ }
465
+
466
+ @keyframes fd-ai-spin {
467
+ to { transform: rotate(360deg); }
468
+ }
469
+
470
+ /* ── dots: bouncing dots ─────────────────────────────────────────── */
471
+
472
+ .fd-ai-loader-dots {
384
473
  display: inline-flex;
474
+ align-items: center;
385
475
  gap: 3px;
476
+ }
477
+
478
+ .fd-ai-loader-bounce-dot {
479
+ width: 6px;
480
+ height: 6px;
481
+ border-radius: 50%;
482
+ background: var(--color-fd-primary, #6366f1);
483
+ animation: fd-ai-bounce-dots 1.4s ease-in-out infinite;
484
+ }
485
+
486
+ .fd-ai-loader-bounce-dot:nth-child(2) { animation-delay: 160ms; }
487
+ .fd-ai-loader-bounce-dot:nth-child(3) { animation-delay: 320ms; }
488
+
489
+ @keyframes fd-ai-bounce-dots {
490
+ 0%, 100% { transform: scale(0.8); opacity: 0.5; }
491
+ 50% { transform: scale(1.2); opacity: 1; }
492
+ }
493
+
494
+ /* ── wave: wave bars ─────────────────────────────────────────────── */
495
+
496
+ .fd-ai-loader-wave {
497
+ display: inline-flex;
386
498
  align-items: center;
499
+ gap: 2px;
500
+ height: 16px;
501
+ }
502
+
503
+ .fd-ai-loader-wave-bar {
504
+ width: 2px;
505
+ border-radius: 2px;
506
+ background: var(--color-fd-primary, #6366f1);
507
+ animation: fd-ai-wave 1s ease-in-out infinite;
508
+ }
509
+
510
+ .fd-ai-loader-wave-bar:nth-child(1) { height: 6px; animation-delay: 0ms; }
511
+ .fd-ai-loader-wave-bar:nth-child(2) { height: 10px; animation-delay: 100ms; }
512
+ .fd-ai-loader-wave-bar:nth-child(3) { height: 14px; animation-delay: 200ms; }
513
+ .fd-ai-loader-wave-bar:nth-child(4) { height: 10px; animation-delay: 300ms; }
514
+ .fd-ai-loader-wave-bar:nth-child(5) { height: 6px; animation-delay: 400ms; }
515
+
516
+ @keyframes fd-ai-wave {
517
+ 0%, 100% { transform: scaleY(1); }
518
+ 50% { transform: scaleY(0.6); }
519
+ }
520
+
521
+ /* ── pulse: pulsing ring ─────────────────────────────────────────── */
522
+
523
+ .fd-ai-loader-pulse {
524
+ width: 16px;
525
+ height: 16px;
526
+ border: 2px solid var(--color-fd-primary, #6366f1);
527
+ border-radius: 50%;
528
+ animation: fd-ai-pulse 1.5s ease-in-out infinite;
529
+ }
530
+
531
+ @keyframes fd-ai-pulse {
532
+ 0%, 100% { transform: scale(0.95); opacity: 0.8; }
533
+ 50% { transform: scale(1.05); opacity: 0.4; }
387
534
  }
388
535
 
389
- .fd-ai-loading-dot {
390
- width: 5px;
391
- height: 5px;
536
+ /* ── pulse-dot: pulsing dot ──────────────────────────────────────── */
537
+
538
+ .fd-ai-loader-pulse-dot {
539
+ width: 8px;
540
+ height: 8px;
392
541
  border-radius: 50%;
393
- background: var(--color-fd-muted-foreground, #888);
394
- animation: fd-ai-dot 1.4s infinite ease-in-out both;
542
+ background: var(--color-fd-primary, #6366f1);
543
+ animation: fd-ai-pulse-dot 1.2s ease-in-out infinite;
544
+ }
545
+
546
+ @keyframes fd-ai-pulse-dot {
547
+ 0%, 100% { transform: scale(1); opacity: 0.8; }
548
+ 50% { transform: scale(1.5); opacity: 1; }
549
+ }
550
+
551
+ /* ── terminal: blinking cursor ───────────────────────────────────── */
552
+
553
+ .fd-ai-loader-terminal {
554
+ display: inline-flex;
555
+ align-items: center;
556
+ gap: 3px;
557
+ }
558
+
559
+ .fd-ai-loader-terminal-prompt {
560
+ font-family: var(--fd-font-mono, ui-monospace, monospace);
561
+ font-size: 13px;
562
+ color: var(--color-fd-primary, #6366f1);
563
+ }
564
+
565
+ .fd-ai-loader-terminal-cursor {
566
+ width: 7px;
567
+ height: 14px;
568
+ background: var(--color-fd-primary, #6366f1);
569
+ animation: fd-ai-blink 1s step-end infinite;
570
+ }
571
+
572
+ @keyframes fd-ai-blink {
573
+ 0%, 100% { opacity: 1; }
574
+ 50% { opacity: 0; }
575
+ }
576
+
577
+ /* ── text-shimmer: shimmer text only ─────────────────────────────── */
578
+ /* (reuses .fd-ai-loader-shimmer-text above) */
579
+
580
+ /* ── text-blink: blinking text ───────────────────────────────────── */
581
+
582
+ .fd-ai-loader-text-blink {
583
+ font-size: 13px;
584
+ font-weight: 500;
585
+ animation: fd-ai-text-blink 2s ease-in-out infinite;
586
+ }
587
+
588
+ @keyframes fd-ai-text-blink {
589
+ 0%, 100% { color: var(--color-fd-primary, #6366f1); }
590
+ 50% { color: var(--color-fd-muted-foreground, #888); }
591
+ }
592
+
593
+ /* ── loading-dots: "Thinking..." with animated dots ──────────────── */
594
+
595
+ .fd-ai-loader-text {
596
+ font-size: 13px;
597
+ font-weight: 500;
598
+ color: var(--color-fd-primary, #6366f1);
599
+ }
600
+
601
+ .fd-ai-loader-text-dots {
602
+ display: inline-flex;
395
603
  }
396
604
 
397
- .fd-ai-loading-dot:nth-child(2) { animation-delay: 0.16s; }
398
- .fd-ai-loading-dot:nth-child(3) { animation-delay: 0.32s; }
605
+ .fd-ai-loader-text-dot {
606
+ font-size: 13px;
607
+ font-weight: 500;
608
+ color: var(--color-fd-primary, #6366f1);
609
+ animation: fd-ai-loading-dots 1.4s infinite;
610
+ }
611
+
612
+ .fd-ai-loader-text-dot:nth-child(1) { animation-delay: 200ms; }
613
+ .fd-ai-loader-text-dot:nth-child(2) { animation-delay: 400ms; }
614
+ .fd-ai-loader-text-dot:nth-child(3) { animation-delay: 600ms; }
615
+
616
+ @keyframes fd-ai-loading-dots {
617
+ 0%, 100% { opacity: 0; }
618
+ 50% { opacity: 1; }
619
+ }
620
+
621
+ /* ── bars: thick wave bars ───────────────────────────────────────── */
622
+
623
+ .fd-ai-loader-bars {
624
+ display: inline-flex;
625
+ align-items: stretch;
626
+ gap: 3px;
627
+ height: 16px;
628
+ }
629
+
630
+ .fd-ai-loader-bar {
631
+ width: 4px;
632
+ background: var(--color-fd-primary, #6366f1);
633
+ animation: fd-ai-wave-bars 1.2s ease-in-out infinite;
634
+ }
635
+
636
+ .fd-ai-loader-bar:nth-child(1) { animation-delay: 0s; }
637
+ .fd-ai-loader-bar:nth-child(2) { animation-delay: 0.2s; }
638
+ .fd-ai-loader-bar:nth-child(3) { animation-delay: 0.4s; }
639
+
640
+ @keyframes fd-ai-wave-bars {
641
+ 0%, 100% { transform: scaleY(1); opacity: 0.5; }
642
+ 50% { transform: scaleY(0.6); opacity: 1; }
643
+ }
644
+
645
+ /* ─── Streaming cursor ───────────────────────────────────────────── */
646
+
647
+ .fd-ai-streaming::after {
648
+ content: "";
649
+ display: inline-block;
650
+ width: 2px;
651
+ height: 1em;
652
+ background: var(--color-fd-primary, #6366f1);
653
+ margin-left: 2px;
654
+ vertical-align: text-bottom;
655
+ animation: fd-ai-cursor-blink 0.8s step-end infinite;
656
+ }
657
+
658
+ @keyframes fd-ai-cursor-blink {
659
+ 0%, 100% { opacity: 1; }
660
+ 50% { opacity: 0; }
661
+ }
399
662
 
400
663
  /* ─── Floating trigger button ────────────────────────────────────── */
401
664
 
402
665
  .fd-ai-floating-btn {
403
666
  position: fixed;
404
667
  z-index: 9997;
405
- width: 52px;
406
- height: 52px;
407
- border-radius: var(--radius, 26px);
408
- border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.1));
409
- background: var(--color-fd-primary, #6366f1);
410
- color: var(--color-fd-primary-foreground, #fff);
411
- cursor: pointer;
412
668
  display: flex;
413
669
  align-items: center;
414
670
  justify-content: center;
415
- box-shadow: 0 8px 32px color-mix(in srgb, var(--color-fd-primary, #6366f1) 30%, transparent);
416
- transition: all 200ms;
671
+ gap: 8px;
672
+ padding: 8px 12px;
673
+ height: 40px;
674
+ border-radius: 16px;
675
+ border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.1));
676
+ background: color-mix(in srgb, var(--color-fd-secondary, #f4f4f5) 80%, transparent);
677
+ backdrop-filter: blur(4px);
678
+ color: var(--color-fd-muted-foreground, #71717a);
679
+ cursor: pointer;
680
+ font-size: 14px;
681
+ box-shadow: 0 1px 3px color-mix(in srgb, var(--color-fd-background, #000) 20%, transparent);
682
+ transition:
683
+ transform 150ms,
684
+ background 150ms,
685
+ color 150ms;
417
686
  animation: fd-ai-fade-in 300ms ease-out;
418
687
  }
419
688
 
420
689
  .fd-ai-floating-btn:hover {
421
- transform: scale(1.05);
422
- box-shadow: 0 10px 40px color-mix(in srgb, var(--color-fd-primary, #6366f1) 40%, transparent);
690
+ background: var(--color-fd-accent);
691
+ color: var(--color-fd-accent-foreground);
692
+ transform: scale(1.03);
693
+ }
694
+
695
+ .fd-ai-floating-btn:active {
696
+ transform: scale(0.97);
423
697
  }
424
698
 
425
699
  .fd-ai-floating-trigger {
@@ -492,7 +766,7 @@
492
766
  margin: 10px 0;
493
767
  border-radius: var(--radius, 8px);
494
768
  border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.1));
495
- /* background: var(--color-fd-muted, #1a1a2e); */
769
+ background: var(--color-fd-muted, #1a1a2e);
496
770
  overflow: hidden;
497
771
  }
498
772
 
@@ -528,7 +802,11 @@
528
802
 
529
803
  .fd-ai-code-copy:hover {
530
804
  color: var(--color-fd-foreground, #e4e4e7);
531
- background: color-mix(in srgb, var(--color-fd-accent, rgba(255,255,255,0.05)) 60%, transparent);
805
+ background: color-mix(
806
+ in srgb,
807
+ var(--color-fd-accent, rgba(255, 255, 255, 0.05)) 60%,
808
+ transparent
809
+ );
532
810
  }
533
811
 
534
812
  .fd-ai-code-block pre {
@@ -550,7 +828,10 @@
550
828
  }
551
829
 
552
830
  /* sugar-high: each line is a block span, min-height keeps empty lines visible */
553
- .fd-ai-code-block .sh__line { display: block; min-height: 1.2em; }
831
+ .fd-ai-code-block .sh__line {
832
+ display: block;
833
+ min-height: 1.2em;
834
+ }
554
835
 
555
836
  /* ═══════════════════════════════════════════════════════════════════
556
837
  * Full-Modal (better-auth inspired) — fd-ai-fm-*
@@ -607,8 +888,20 @@
607
888
  overflow-y: auto;
608
889
  width: min(800px, 100%);
609
890
  padding: 24px 0 120px;
610
- mask-image: linear-gradient(to bottom, transparent, white 3rem, white calc(100% - 8rem), transparent 100%);
611
- -webkit-mask-image: linear-gradient(to bottom, transparent, white 3rem, white calc(100% - 8rem), transparent 100%);
891
+ mask-image: linear-gradient(
892
+ to bottom,
893
+ transparent,
894
+ white 3rem,
895
+ white calc(100% - 8rem),
896
+ transparent 100%
897
+ );
898
+ -webkit-mask-image: linear-gradient(
899
+ to bottom,
900
+ transparent,
901
+ white 3rem,
902
+ white calc(100% - 8rem),
903
+ transparent 100%
904
+ );
612
905
  }
613
906
 
614
907
  .fd-ai-fm-messages-inner {
@@ -683,36 +976,17 @@
683
976
 
684
977
  /* ─── Thinking dots ──────────────────────────────────────────────── */
685
978
 
686
- .fd-ai-fm-thinking {
687
- display: flex;
688
- gap: 4px;
689
- align-items: center;
690
- }
691
-
692
- .fd-ai-fm-thinking-dot {
693
- width: 6px;
694
- height: 6px;
695
- border-radius: 9999px;
696
- background: var(--color-fd-primary, #6366f1);
697
- animation: fd-ai-fm-bounce 1s infinite ease-in-out;
698
- }
699
-
700
- .fd-ai-fm-thinking-dot:nth-child(2) { animation-delay: 150ms; }
701
- .fd-ai-fm-thinking-dot:nth-child(3) { animation-delay: 300ms; }
702
-
703
- @keyframes fd-ai-fm-bounce {
704
- 0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
705
- 40% { transform: scale(1); opacity: 1; }
706
- }
979
+ /* Full-modal now uses the shared .fd-ai-loader indicator */
707
980
 
708
981
  /* ─── Bottom input bar ───────────────────────────────────────────── */
709
982
 
710
983
  .fd-ai-fm-input-bar {
711
984
  position: fixed;
712
985
  z-index: 9999;
713
- transition: width 300ms cubic-bezier(0.34, 1.56, 0.64, 1),
714
- height 300ms cubic-bezier(0.34, 1.56, 0.64, 1),
715
- transform 200ms ease-out;
986
+ transition:
987
+ width 300ms cubic-bezier(0.34, 1.56, 0.64, 1),
988
+ height 300ms cubic-bezier(0.34, 1.56, 0.64, 1),
989
+ transform 200ms ease-out;
716
990
  }
717
991
 
718
992
  .fd-ai-fm-input-bar--closed {
@@ -722,6 +996,7 @@
722
996
  .fd-ai-fm-input-bar--open {
723
997
  bottom: 16px;
724
998
  left: 50%;
999
+ right: auto;
725
1000
  transform: translateX(-50%);
726
1001
  width: min(800px, calc(100vw - 32px));
727
1002
  }
@@ -800,8 +1075,20 @@
800
1075
  gap: 8px;
801
1076
  overflow-x: auto;
802
1077
  padding-bottom: 4px;
803
- mask-image: linear-gradient(to right, transparent 0%, black 1rem, black calc(100% - 1rem), transparent 100%);
804
- -webkit-mask-image: linear-gradient(to right, transparent 0%, black 1rem, black calc(100% - 1rem), transparent 100%);
1078
+ mask-image: linear-gradient(
1079
+ to right,
1080
+ transparent 0%,
1081
+ black 1rem,
1082
+ black calc(100% - 1rem),
1083
+ transparent 100%
1084
+ );
1085
+ -webkit-mask-image: linear-gradient(
1086
+ to right,
1087
+ transparent 0%,
1088
+ black 1rem,
1089
+ black calc(100% - 1rem),
1090
+ transparent 100%
1091
+ );
805
1092
  }
806
1093
 
807
1094
  .fd-ai-fm-suggestion {
@@ -811,15 +1098,16 @@
811
1098
  font-size: 12px;
812
1099
  font-family: inherit;
813
1100
  border-radius: 9999px;
814
- border: 1px solid color-mix(in srgb, var(--color-fd-border, rgba(255,255,255,0.1)) 50%, transparent);
815
- background: color-mix(in srgb, var(--color-fd-muted, rgba(255,255,255,0.04)) 30%, transparent);
1101
+ border: 1px solid
1102
+ color-mix(in srgb, var(--color-fd-border, rgba(255, 255, 255, 0.1)) 50%, transparent);
1103
+ background: color-mix(in srgb, var(--color-fd-muted, rgba(255, 255, 255, 0.04)) 30%, transparent);
816
1104
  color: var(--color-fd-muted-foreground, #71717a);
817
1105
  cursor: pointer;
818
1106
  transition: all 200ms;
819
1107
  }
820
1108
 
821
1109
  .fd-ai-fm-suggestion:hover {
822
- background: color-mix(in srgb, var(--color-fd-muted, rgba(255,255,255,0.04)) 50%, transparent);
1110
+ background: color-mix(in srgb, var(--color-fd-muted, rgba(255, 255, 255, 0.04)) 50%, transparent);
823
1111
  color: var(--color-fd-foreground, #e4e4e7);
824
1112
  border-color: var(--color-fd-border, rgba(255, 255, 255, 0.1));
825
1113
  }
@@ -832,7 +1120,11 @@
832
1120
  gap: 4px;
833
1121
  padding: 8px 16px;
834
1122
  border-top: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.06));
835
- background: color-mix(in srgb, var(--color-fd-accent, rgba(255,255,255,0.03)) 40%, transparent);
1123
+ background: color-mix(
1124
+ in srgb,
1125
+ var(--color-fd-accent, rgba(255, 255, 255, 0.03)) 40%,
1126
+ transparent
1127
+ );
836
1128
  font-size: 12px;
837
1129
  color: var(--color-fd-muted-foreground, #71717a);
838
1130
  }
@@ -864,6 +1156,34 @@
864
1156
  flex: 1;
865
1157
  }
866
1158
 
1159
+ /* ─── Pure AI Modal footer ───────────────────────────────────────── */
1160
+
1161
+ .fd-ai-modal-pure {
1162
+ display: flex;
1163
+ flex-direction: column;
1164
+ }
1165
+
1166
+ .fd-ai-modal-footer {
1167
+ display: flex;
1168
+ align-items: center;
1169
+ gap: 4px;
1170
+ padding: 8px 16px;
1171
+ border-top: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.06));
1172
+ background: color-mix(
1173
+ in srgb,
1174
+ var(--color-fd-accent, rgba(255, 255, 255, 0.03)) 40%,
1175
+ transparent
1176
+ );
1177
+ font-size: 12px;
1178
+ color: var(--color-fd-muted-foreground, #71717a);
1179
+ border-radius: 0 0 var(--radius, 12px) var(--radius, 12px);
1180
+ flex-shrink: 0;
1181
+ }
1182
+
1183
+ .fd-ai-modal-footer-hint {
1184
+ flex: 1;
1185
+ }
1186
+
867
1187
  /* ─── Closed trigger button ──────────────────────────────────────── */
868
1188
 
869
1189
  .fd-ai-fm-trigger-btn {
@@ -871,24 +1191,31 @@
871
1191
  align-items: center;
872
1192
  justify-content: center;
873
1193
  gap: 8px;
874
- padding: 8px 16px;
1194
+ padding: 8px 12px;
875
1195
  height: 40px;
876
- border-radius: var(--radius, 16px);
1196
+ border-radius: 16px;
877
1197
  border: 1px solid var(--color-fd-border, rgba(255, 255, 255, 0.1));
878
- background: var(--color-fd-secondary, rgba(255, 255, 255, 0.06));
1198
+ background: color-mix(in srgb, var(--color-fd-secondary, #f4f4f5) 80%, transparent);
1199
+ backdrop-filter: blur(4px);
879
1200
  color: var(--color-fd-muted-foreground, #71717a);
880
1201
  font-family: inherit;
881
1202
  font-size: 14px;
882
1203
  cursor: pointer;
883
- backdrop-filter: blur(8px);
884
- box-shadow: 0 8px 32px color-mix(in srgb, var(--color-fd-background, #000) 40%, transparent);
885
- transition: all 200ms;
1204
+ box-shadow: 0 1px 3px color-mix(in srgb, var(--color-fd-background, #000) 20%, transparent);
1205
+ transition:
1206
+ transform 150ms,
1207
+ background 150ms,
1208
+ color 150ms;
886
1209
  animation: fd-ai-fade-in 300ms ease-out;
887
1210
  white-space: nowrap;
888
1211
  }
889
1212
 
890
1213
  .fd-ai-fm-trigger-btn:hover {
891
- background: var(--color-fd-accent, rgba(255, 255, 255, 0.1));
892
- color: var(--color-fd-accent-foreground, #fff);
1214
+ background: var(--color-fd-accent);
1215
+ color: var(--color-fd-accent-foreground);
893
1216
  transform: scale(1.03);
894
1217
  }
1218
+
1219
+ .fd-ai-fm-trigger-btn:active {
1220
+ transform: scale(0.97);
1221
+ }