@tenerife.music/ui 1.0.13 → 1.0.16

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.
@@ -5,13 +5,18 @@ var primaryColors = {
5
5
  100: "210 40% 96%",
6
6
  200: "217 32.6% 17.5%",
7
7
  300: "216 28% 26%",
8
- 400: "215 25% 27%",
9
- 500: "215 20% 35%",
10
- // Base primary
11
- 600: "215 16% 47%",
12
- 700: "216 12% 54%",
13
- 800: "217 10% 62%",
14
- 900: "222 47.4% 11.2%",
8
+ 400: "215 25% 30%",
9
+ // Adjusted for better progression
10
+ 500: "215 20% 38%",
11
+ // Adjusted for better progression
12
+ 600: "215 16% 45%",
13
+ // Adjusted for better progression
14
+ 700: "216 12% 35%",
15
+ // Rebalanced for semantic strength (L* ~35)
16
+ 800: "217 10% 28%",
17
+ // Adjusted for proper progression
18
+ 900: "222 47.4% 18%",
19
+ // Adjusted for better progression
15
20
  950: "222 84% 4.9%"
16
21
  // Darkest blue
17
22
  };
@@ -21,12 +26,15 @@ var accentColors = {
21
26
  200: "280 60% 85%",
22
27
  300: "280 55% 75%",
23
28
  400: "280 50% 65%",
24
- 500: "280 70% 67%",
25
- // Base accent (night mode primary)
26
- 600: "259 65% 58%",
27
- 700: "259 60% 50%",
28
- 800: "259 55% 45%",
29
- 900: "259 50% 40%",
29
+ 500: "280 65% 72%",
30
+ // Adjusted for WCAG AA contrast (4.5:1) with dark text in night mode
31
+ 600: "259 65% 59%",
32
+ // Default accent - lightened for better contrast vs secondary (L* ~59, was 52, 15 delta from secondary-600)
33
+ 700: "259 60% 44%",
34
+ // Active state - rebalanced for semantic strength (L* ~44, 12 delta from secondary-700)
35
+ 800: "259 55% 38%",
36
+ // Adjusted for proper progression
37
+ 900: "259 50% 32%",
30
38
  950: "259 45% 30%"
31
39
  };
32
40
  var secondaryColors = {
@@ -35,12 +43,15 @@ var secondaryColors = {
35
43
  200: "173 100% 85%",
36
44
  300: "173 100% 70%",
37
45
  400: "173 100% 55%",
38
- 500: "173 100% 37%",
39
- // Base secondary (Tenerife #00bfa6)
40
- 600: "173 100% 32%",
41
- 700: "173 95% 27%",
46
+ 500: "173 100% 45%",
47
+ // Adjusted for better scale progression
48
+ 600: "173 100% 44%",
49
+ // Default secondary - rebalanced for better contrast vs primary (L* ~44, was 38)
50
+ 700: "173 95% 32%",
51
+ // Active state - rebalanced for semantic strength (L* ~32)
42
52
  800: "173 90% 22%",
43
- 900: "173 85% 17%",
53
+ // Primary variant - darkened for dominance (L* ~22, was 26)
54
+ 900: "173 85% 20%",
44
55
  950: "173 80% 12%"
45
56
  };
46
57
  var surfaceColors = {
@@ -133,13 +144,13 @@ var chartColors = {
133
144
  var textColors = {
134
145
  day: {
135
146
  primary: "0 0% 9%",
136
- // Almost black
147
+ // Almost black (neutral-900 equivalent)
137
148
  secondary: "0 0% 45%",
138
149
  // Medium gray
139
150
  tertiary: "0 0% 65%",
140
151
  // Light gray
141
- muted: "0 0% 38%",
142
- // Muted gray with stronger contrast
152
+ muted: "0 0% 42%",
153
+ // Muted gray - adjusted for WCAG AA contrast (4.5:1) on surface.elevated2
143
154
  inverse: "0 0% 100%"
144
155
  // White (for dark backgrounds)
145
156
  },
@@ -451,6 +462,139 @@ var ALERT_TOKENS = {
451
462
  }
452
463
  };
453
464
 
465
+ // src/tokens/components/motion.ts
466
+ var MOTION_TOKENS = {
467
+ /**
468
+ * Transition property tokens
469
+ * Maps to Tailwind transition utilities
470
+ */
471
+ transition: {
472
+ all: "transition-all",
473
+ // All properties
474
+ colors: "transition-colors",
475
+ // Color properties only
476
+ opacity: "transition-opacity",
477
+ // Opacity only
478
+ transform: "transition-transform",
479
+ // Transform only
480
+ shadow: "transition-shadow",
481
+ // Box shadow only
482
+ none: "transition-none"
483
+ // No transition
484
+ },
485
+ /**
486
+ * Duration tokens
487
+ * Maps to foundation motion duration tokens via Tailwind
488
+ */
489
+ duration: {
490
+ instant: "duration-0",
491
+ // 0ms
492
+ fast: "duration-fast",
493
+ // 150ms - maps to motion.durations.fast
494
+ normal: "duration-normal",
495
+ // 300ms - maps to motion.durations.normal
496
+ slow: "duration-slow",
497
+ // 500ms - maps to motion.durations.slow
498
+ slower: "duration-slower",
499
+ // 700ms - maps to motion.durations.slower
500
+ slowest: "duration-slowest",
501
+ // 1000ms - maps to motion.durations.slowest
502
+ // Granular durations
503
+ "75": "duration-75",
504
+ // 75ms
505
+ "100": "duration-100",
506
+ // 100ms
507
+ "200": "duration-200",
508
+ // 200ms
509
+ "250": "duration-250",
510
+ // 250ms
511
+ "300": "duration-300",
512
+ // 300ms
513
+ "400": "duration-400",
514
+ // 400ms
515
+ "500": "duration-500",
516
+ // 500ms
517
+ "600": "duration-600",
518
+ // 600ms
519
+ "700": "duration-700",
520
+ // 700ms
521
+ "800": "duration-800",
522
+ // 800ms
523
+ "1000": "duration-1000"
524
+ // 1000ms
525
+ },
526
+ /**
527
+ * Easing tokens
528
+ * Maps to foundation motion easing tokens via Tailwind
529
+ */
530
+ easing: {
531
+ linear: "ease-linear",
532
+ // Linear easing
533
+ in: "ease-in",
534
+ // Ease in
535
+ out: "ease-out",
536
+ // Ease out (recommended for most UI)
537
+ "in-out": "ease-in-out",
538
+ // Ease in-out
539
+ bounce: "ease-bounce",
540
+ // Bounce easing
541
+ elastic: "ease-elastic"
542
+ // Elastic easing
543
+ },
544
+ /**
545
+ * Pre-configured transition tokens
546
+ * Combines duration and easing for common use cases
547
+ */
548
+ transitionPreset: {
549
+ fast: "transition-all duration-fast ease-out",
550
+ // Fast transition
551
+ normal: "transition-all duration-normal ease-in-out",
552
+ // Normal transition (default)
553
+ slow: "transition-all duration-slow ease-in-out",
554
+ // Slow transition
555
+ colors: "transition-colors duration-normal ease-out",
556
+ // Color transitions (common)
557
+ transform: "transition-transform duration-normal ease-out",
558
+ // Transform transitions
559
+ opacity: "transition-opacity duration-fast ease-out"
560
+ // Opacity transitions
561
+ },
562
+ /**
563
+ * Animation tokens
564
+ * Maps to foundation motion animation tokens via Tailwind
565
+ */
566
+ animation: {
567
+ none: "animate-none",
568
+ // No animation
569
+ spin: "animate-spin",
570
+ // Spin animation
571
+ pulse: "animate-pulse",
572
+ // Pulse animation
573
+ bounce: "animate-bounce",
574
+ // Bounce animation
575
+ ping: "animate-ping",
576
+ // Ping animation
577
+ shake: "animate-shake",
578
+ // Shake animation
579
+ fadeIn: "animate-fadeIn",
580
+ // Fade in
581
+ fadeOut: "animate-fadeOut",
582
+ // Fade out
583
+ slideInUp: "animate-slideInUp",
584
+ // Slide in from bottom
585
+ slideInDown: "animate-slideInDown",
586
+ // Slide in from top
587
+ slideInLeft: "animate-slideInLeft",
588
+ // Slide in from right
589
+ slideInRight: "animate-slideInRight",
590
+ // Slide in from left
591
+ scaleIn: "animate-scaleIn",
592
+ // Scale in
593
+ scaleOut: "animate-scaleOut"
594
+ // Scale out
595
+ }
596
+ };
597
+
454
598
  // src/tokens/components/button.ts
455
599
  var BUTTON_TOKENS = {
456
600
  /**
@@ -483,25 +627,48 @@ var BUTTON_TOKENS = {
483
627
  vertical: {
484
628
  sm: "py-xs",
485
629
  // 4px (0.25rem) - maps to semanticSpacing.xs
486
- md: "py-sm"
630
+ md: "py-sm",
487
631
  // 8px (0.5rem) - maps to semanticSpacing.sm
632
+ lg: "py-md"
633
+ // 16px (1rem) - maps to semanticSpacing.md - standardized for visual distinction
488
634
  }
489
635
  },
490
636
  /**
491
- * Gap between icon and text
637
+ * Gap between icon and text by size
638
+ * Scales with button size for visual consistency
492
639
  */
493
- gap: "gap-sm",
494
- // 8px (0.5rem) - maps to semanticSpacing.sm
640
+ gap: {
641
+ sm: "gap-xs",
642
+ // 4px (0.25rem) - smaller gap for small buttons
643
+ md: "gap-sm",
644
+ // 8px (0.5rem) - medium gap for medium buttons
645
+ lg: "gap-md"
646
+ // 16px (1rem) - larger gap for large buttons
647
+ },
495
648
  /**
496
649
  * Border radius for all button sizes
650
+ * Consistent radius across sizes for visual harmony
651
+ *
652
+ * @enforcement TUNG_TOKEN_AUTHORITY_EXPANSION_PLAN
653
+ * @rule References componentRadius.button.md (6px / 0.375rem) from Radius Authority
654
+ * @see docs/architecture/RADIUS_AUTHORITY_CONTRACT.md
497
655
  */
498
656
  radius: "rounded-md",
499
- // 6px (0.375rem) - maps to borderRadius.md
657
+ // References componentRadius.button.md (6px / 0.375rem) - Radius Authority compliant
500
658
  /**
501
- * Icon size within buttons
659
+ * Icon size within buttons by button size
660
+ * Scales proportionally with button size for visual balance
502
661
  */
503
- iconSize: "size-4",
504
- // 16px (1rem) - maps to spacing[4]
662
+ iconSize: {
663
+ sm: "size-3.5",
664
+ // 14px (0.875rem) - smaller icon for small buttons
665
+ md: "size-4",
666
+ // 16px (1rem) - medium icon for medium buttons
667
+ lg: "size-5",
668
+ // 20px (1.25rem) - larger icon for large buttons
669
+ icon: "size-4"
670
+ // 16px (1rem) - medium icon for icon-only buttons
671
+ },
505
672
  /**
506
673
  * Width tokens
507
674
  */
@@ -511,15 +678,19 @@ var BUTTON_TOKENS = {
511
678
  },
512
679
  /**
513
680
  * Font sizes by button size
514
- * Maps to foundation typography fontSize tokens
681
+ * References foundation typography fontSize tokens from Typography Authority
682
+ *
683
+ * @enforcement TUNG_TOKEN_AUTHORITY_EXPANSION_PLAN
684
+ * @rule All fontSize values reference Typography Authority tokens
685
+ * @see docs/architecture/TYPOGRAPHY_AUTHORITY_CONTRACT.md
515
686
  */
516
687
  fontSize: {
517
688
  sm: "text-xs",
518
- // Maps to fontSize.xs[0]
689
+ // References fontSize.xs[0] from Typography Authority (~12px)
519
690
  md: "text-sm",
520
- // Maps to fontSize.sm[0]
521
- lg: "text-sm"
522
- // Maps to fontSize.sm[0]
691
+ // References fontSize.sm[0] from Typography Authority (~14px)
692
+ lg: "text-base"
693
+ // References fontSize.base[0] from Typography Authority (~16px)
523
694
  },
524
695
  /**
525
696
  * Shadow tokens by variant
@@ -534,50 +705,137 @@ var BUTTON_TOKENS = {
534
705
  /**
535
706
  * Color tokens for button variants
536
707
  * Uses semantic color tokens that map to CSS variables
708
+ *
709
+ * State tokens (hover, active, disabled) use CSS variables from State Matrix.
710
+ * All states are injected via updateStateMatrixFromTokens() and consumed via arbitrary values.
711
+ * States react to Color Authority changes automatically through State Matrix.
712
+ *
713
+ * Interaction Authority Rules:
714
+ * - Hover (Priority 4): hover: prefix - ONLY when !disabled && !loading && pointer-events:auto
715
+ * - Active (Priority 3): active: prefix - ONLY when !disabled && !loading && mousedown
716
+ * - Focus (Priority 5): focus-visible: prefix - ONLY when !disabled && keyboard navigation
717
+ * - Disabled (Priority 1): disabled: prefix - Blocks ALL interactions
718
+ * - Loading (Priority 2): loading: prefix - Blocks hover/active (when implemented)
719
+ * - Base (Priority 6): No prefix - Default state, pointer-events: auto
720
+ *
721
+ * @enforcement TUNG_STATE_AUTHORITY_FOUNDATION_LOCK
722
+ * @enforcement TUNG_INTERACTION_AUTHORITY_FOUNDATION
723
+ * @rule States use CSS variables, not Tailwind variants
724
+ * @rule All state variables follow pattern: --{component}-{variant}-{state}-{property}
725
+ * @rule Visual states (colors) are SEPARATE from interaction states (pointer-events)
726
+ * @rule Hover MUST work with real mouse cursor, NOT just DevTools force state
727
+ * @rule Active MUST activate only on mousedown, NOT on hover
728
+ * @rule Focus MUST activate only on keyboard navigation, NOT on mouse click
729
+ *
730
+ * @see docs/architecture/INTERACTION_AUTHORITY_CONTRACT.md
537
731
  */
538
732
  variant: {
539
733
  primary: {
540
- background: "bg-primary",
541
- // Primary background using CSS var
734
+ background: "bg-[hsl(var(--button-primary-base-bg))]",
735
+ // Primary base background - CSS variable from State Matrix
542
736
  text: "text-primary-foreground",
543
737
  // Primary text using CSS var
544
- hover: "hover:bg-primary/90"
545
- // Primary hover using CSS var
738
+ hover: "hover:bg-[hsl(var(--button-primary-hover-bg))]",
739
+ // Primary hover - CSS variable from State Matrix (Priority 4: blocked by disabled/loading)
740
+ active: "active:bg-[hsl(var(--button-primary-active-bg))]",
741
+ // Primary active - CSS variable from State Matrix (Priority 3: blocked by disabled/loading, priority over hover)
742
+ focus: "focus-visible:bg-[hsl(var(--button-primary-focus-bg))]",
743
+ // Primary focus - CSS variable from State Matrix (Priority 5: keyboard navigation only)
744
+ disabled: {
745
+ background: "disabled:bg-[hsl(var(--button-primary-disabled-bg))]",
746
+ // Disabled background - CSS variable from State Matrix (Priority 1: blocks all)
747
+ text: "disabled:text-[hsl(var(--button-primary-disabled-text))]"
748
+ // Disabled text - CSS variable from State Matrix
749
+ },
750
+ loading: "bg-[hsl(var(--button-primary-loading-bg))]"
751
+ // Primary loading - CSS variable from State Matrix (Priority 2: blocks hover/active, used with aria-busy/data-loading when implemented)
546
752
  },
547
753
  secondary: {
548
754
  background: "bg-secondary",
549
755
  // Secondary background using CSS var
550
756
  text: "text-secondary-foreground",
551
757
  // Secondary text using CSS var
552
- hover: "hover:bg-secondary/80"
553
- // Secondary hover using CSS var
758
+ hover: "hover:bg-[hsl(var(--button-secondary-hover-bg))]",
759
+ // Secondary hover - CSS variable from State Matrix
760
+ active: "active:bg-[hsl(var(--button-secondary-active-bg))]",
761
+ // Secondary active - CSS variable from State Matrix
762
+ disabled: {
763
+ background: "disabled:bg-[hsl(var(--button-secondary-disabled-bg))]",
764
+ // Disabled background - CSS variable from State Matrix
765
+ text: "disabled:text-[hsl(var(--button-secondary-disabled-text))]"
766
+ // Disabled text - CSS variable from State Matrix
767
+ }
554
768
  },
555
769
  accent: {
556
770
  background: "bg-accent",
557
771
  // Accent background using CSS var
558
772
  text: "text-accent-foreground",
559
773
  // Accent text using CSS var
560
- hover: "hover:bg-accent/90"
561
- // Accent hover using CSS var
774
+ hover: "hover:bg-[hsl(var(--button-accent-hover-bg))]",
775
+ // Accent hover - CSS variable from State Matrix
776
+ active: "active:bg-[hsl(var(--button-accent-active-bg))]",
777
+ // Accent active - CSS variable from State Matrix
778
+ disabled: {
779
+ background: "disabled:bg-[hsl(var(--button-accent-disabled-bg))]",
780
+ // Disabled background - CSS variable from State Matrix
781
+ text: "disabled:text-[hsl(var(--button-accent-disabled-text))]"
782
+ // Disabled text - CSS variable from State Matrix
783
+ }
562
784
  },
563
785
  outline: {
564
786
  border: "border border-input",
565
787
  // Input border using CSS var
566
788
  background: "bg-background",
567
789
  // Background using CSS var
790
+ text: "text-foreground",
791
+ // Foreground text using CSS var
568
792
  hover: {
569
- background: "hover:bg-accent",
570
- // Accent hover using CSS var
571
- text: "hover:text-accent-foreground"
572
- // Accent text using CSS var
793
+ background: "hover:bg-[hsl(var(--button-outline-hover-bg))]",
794
+ // Outline hover background - CSS variable from State Matrix
795
+ text: "hover:text-[hsl(var(--button-outline-hover-text))]",
796
+ // Outline hover text - CSS variable from State Matrix
797
+ border: "hover:border-[hsl(var(--button-outline-hover-border))]"
798
+ // Outline hover border - CSS variable from State Matrix
799
+ },
800
+ active: {
801
+ background: "active:bg-[hsl(var(--button-outline-active-bg))]",
802
+ // Outline active background - CSS variable from State Matrix
803
+ text: "active:text-[hsl(var(--button-outline-active-text))]",
804
+ // Outline active text - CSS variable from State Matrix
805
+ border: "active:border-[hsl(var(--button-outline-active-border))]"
806
+ // Outline active border - CSS variable from State Matrix
807
+ },
808
+ disabled: {
809
+ background: "disabled:bg-[hsl(var(--button-outline-disabled-bg))]",
810
+ // Disabled background - CSS variable from State Matrix
811
+ text: "disabled:text-[hsl(var(--button-outline-disabled-text))]",
812
+ // Disabled text - CSS variable from State Matrix
813
+ border: "disabled:border-[hsl(var(--button-outline-disabled-border))]"
814
+ // Disabled border - CSS variable from State Matrix
573
815
  }
574
816
  },
575
817
  ghost: {
818
+ background: "bg-transparent",
819
+ // Transparent background
820
+ text: "text-foreground",
821
+ // Foreground text using CSS var
576
822
  hover: {
577
- background: "hover:bg-accent",
578
- // Accent hover using CSS var
579
- text: "hover:text-accent-foreground"
580
- // Accent text using CSS var
823
+ background: "hover:bg-[hsl(var(--button-ghost-hover-bg))]",
824
+ // Ghost hover background - CSS variable from State Matrix
825
+ text: "hover:text-[hsl(var(--button-ghost-hover-text))]"
826
+ // Ghost hover text - CSS variable from State Matrix
827
+ },
828
+ active: {
829
+ background: "active:bg-[hsl(var(--button-ghost-active-bg))]",
830
+ // Ghost active background - CSS variable from State Matrix
831
+ text: "active:text-[hsl(var(--button-ghost-active-text))]"
832
+ // Ghost active text - CSS variable from State Matrix
833
+ },
834
+ disabled: {
835
+ background: "disabled:bg-[hsl(var(--button-ghost-disabled-bg))]",
836
+ // Disabled background - CSS variable from State Matrix
837
+ text: "disabled:text-[hsl(var(--button-ghost-disabled-text))]"
838
+ // Disabled text - CSS variable from State Matrix
581
839
  }
582
840
  },
583
841
  destructive: {
@@ -585,16 +843,94 @@ var BUTTON_TOKENS = {
585
843
  // Destructive background using CSS var
586
844
  text: "text-destructive-foreground",
587
845
  // Destructive text using CSS var
588
- hover: "hover:bg-destructive/90"
589
- // Destructive hover using CSS var
846
+ hover: "hover:bg-[hsl(var(--button-destructive-hover-bg))]",
847
+ // Destructive hover - CSS variable from State Matrix
848
+ active: "active:bg-[hsl(var(--button-destructive-active-bg))]",
849
+ // Destructive active - CSS variable from State Matrix
850
+ disabled: {
851
+ background: "disabled:bg-[hsl(var(--button-destructive-disabled-bg))]",
852
+ // Disabled background - CSS variable from State Matrix
853
+ text: "disabled:text-[hsl(var(--button-destructive-disabled-text))]"
854
+ // Disabled text - CSS variable from State Matrix
855
+ }
590
856
  }
591
857
  },
592
858
  /**
593
859
  * Transition tokens
860
+ * References Motion Authority tokens for consistent motion behavior
861
+ *
862
+ * @enforcement TUNG_TOKEN_AUTHORITY_EXPANSION_PLAN
863
+ * @rule Uses MOTION_TOKENS.transitionPreset.colors from Motion Authority
864
+ * @rule Motion transitions MUST use canonical motion tokens only
865
+ * @see docs/architecture/MOTION_AUTHORITY_CONTRACT.md
594
866
  */
595
867
  transition: {
596
- colors: "transition-colors"
597
- // Color transition using motion tokens
868
+ colors: MOTION_TOKENS.transitionPreset.colors
869
+ // "transition-colors duration-normal ease-out" - Motion Authority compliant
870
+ },
871
+ /**
872
+ * Global state tokens
873
+ * Shared state tokens that apply across all variants
874
+ * Variant-specific states are defined in variant.*.active and variant.*.disabled
875
+ *
876
+ * @enforcement TUNG_INTERACTION_AUTHORITY_FOUNDATION
877
+ * @rule All interaction states MUST follow Interaction Authority Contract
878
+ * @rule State priority: disabled > loading > active > hover > focus-visible > base
879
+ * @rule Visual states (colors) are SEPARATE from interaction states (pointer-events, cursor)
880
+ * @rule All states MUST be browser-native (CSS pseudo-classes), NOT JavaScript-managed
881
+ */
882
+ state: {
883
+ /**
884
+ * Disabled state tokens
885
+ * Global disabled state tokens (variant-specific overrides in variant.*.disabled)
886
+ *
887
+ * Interaction Authority Rules:
888
+ * - Priority: 1 (Highest) - Blocks ALL interactions
889
+ * - MUST block hover, active, and focus states
890
+ * - MUST use disabled: prefix (never in base state)
891
+ * - Base state MUST have pointer-events: auto (default) for hover to work
892
+ *
893
+ * @enforcement TUNG_INTERACTION_AUTHORITY_FOUNDATION
894
+ * @enforcement TUNG_BUTTON_INTERACTION_FIX
895
+ * @rule Interaction Authority: pointer-events is NOT a visual token
896
+ * @rule pointer-events-none MUST use disabled: prefix (never in base state)
897
+ * @rule Base state MUST have pointer-events: auto (default) for hover to work
898
+ * @rule These tokens are applied in base but only activate when element is disabled
899
+ * @rule Hover is FORBIDDEN when disabled={true}
900
+ * @rule Active is FORBIDDEN when disabled={true}
901
+ * @rule Focus is FORBIDDEN when disabled={true} (for interactions)
902
+ *
903
+ * @see docs/architecture/INTERACTION_AUTHORITY_CONTRACT.md
904
+ */
905
+ disabled: {
906
+ cursor: "disabled:cursor-not-allowed",
907
+ // Disabled cursor style (only applies when disabled)
908
+ pointerEvents: "disabled:pointer-events-none"
909
+ // Disable pointer events (only applies when disabled)
910
+ },
911
+ /**
912
+ * Focus state tokens
913
+ * Focus ring for keyboard navigation
914
+ *
915
+ * Interaction Authority Rules:
916
+ * - Priority: 5 - Lower than active and hover
917
+ * - MUST activate only on keyboard navigation (focus-visible: prefix)
918
+ * - MUST NOT activate on mouse click (use :focus-visible, not :focus)
919
+ * - MUST be blocked by disabled state
920
+ *
921
+ * @enforcement TUNG_INTERACTION_AUTHORITY_FOUNDATION
922
+ * @rule Focus MUST use focus-visible: prefix (keyboard navigation only)
923
+ * @rule Focus MUST be blocked when disabled={true}
924
+ * @rule Focus MUST NOT activate on mouse click
925
+ *
926
+ * @see docs/architecture/INTERACTION_AUTHORITY_CONTRACT.md
927
+ */
928
+ focus: {
929
+ ring: "focus-visible:ring-1 focus-visible:ring-ring",
930
+ // Focus ring using semantic ring color
931
+ outline: "focus-visible:outline-none"
932
+ // Remove default outline (replaced by ring)
933
+ }
598
934
  }
599
935
  };
600
936
 
@@ -682,6 +1018,68 @@ var CARD_TOKENS = {
682
1018
  }
683
1019
  };
684
1020
 
1021
+ // src/tokens/components/artist.ts
1022
+ var ARTIST_TOKENS = {
1023
+ /**
1024
+ * Image container tokens
1025
+ * Layout classes for image container wrapper
1026
+ */
1027
+ image: {
1028
+ /**
1029
+ * Container layout tokens
1030
+ * Positioning and sizing for image container
1031
+ */
1032
+ container: {
1033
+ /**
1034
+ * Base container layout
1035
+ * Relative positioning, full width, overflow hidden
1036
+ * Uses Tailwind layout utilities (allowed per architecture)
1037
+ */
1038
+ layout: "relative w-full overflow-hidden"
1039
+ },
1040
+ /**
1041
+ * Image sizing tokens
1042
+ * Full width and height for images
1043
+ */
1044
+ sizing: {
1045
+ /**
1046
+ * Full size image
1047
+ * Uses Tailwind sizing utilities (allowed per architecture)
1048
+ */
1049
+ full: "h-full w-full"
1050
+ },
1051
+ /**
1052
+ * Placeholder container tokens
1053
+ * Layout for placeholder icon container when no image is provided
1054
+ */
1055
+ placeholder: {
1056
+ /**
1057
+ * Placeholder container layout
1058
+ * Flex centering for placeholder icon
1059
+ * Uses Tailwind layout utilities (allowed per architecture)
1060
+ */
1061
+ container: "flex h-full w-full items-center justify-center"
1062
+ }
1063
+ },
1064
+ /**
1065
+ * Footer border tokens
1066
+ * Border styling for card footer separator
1067
+ */
1068
+ footer: {
1069
+ /**
1070
+ * Footer border tokens
1071
+ * Top border separator for footer section
1072
+ */
1073
+ border: {
1074
+ /**
1075
+ * Footer border top
1076
+ * Uses semantic border color token
1077
+ */
1078
+ top: "border-t border-border"
1079
+ }
1080
+ }
1081
+ };
1082
+
685
1083
  // src/tokens/spacing.ts
686
1084
  var spacing = {
687
1085
  // Zero spacing
@@ -944,101 +1342,6 @@ var tailwindSpacingConfig = {
944
1342
 
945
1343
  // src/tokens/components/data.ts
946
1344
  var DATA_TOKENS = {
947
- /**
948
- * Table Component Tokens
949
- */
950
- table: {
951
- /**
952
- * Table row heights by size
953
- * Maps to Tailwind height utilities
954
- */
955
- rowHeight: {
956
- sm: "h-8",
957
- // 32px (2rem) - compact rows
958
- md: "h-10",
959
- // 40px (2.5rem) - default rows
960
- lg: "h-12"
961
- // 48px (3rem) - spacious rows
962
- },
963
- /**
964
- * Table cell and header padding by size
965
- * Maps to semantic spacing tokens
966
- */
967
- padding: {
968
- cell: {
969
- sm: "p-xs",
970
- // 4px (0.25rem) - maps to semanticSpacing.xs
971
- md: "p-sm",
972
- // 8px (0.5rem) - maps to semanticSpacing.sm
973
- lg: "p-md"
974
- // 16px (1rem) - maps to semanticSpacing.md
975
- },
976
- header: {
977
- sm: "px-xs py-sm",
978
- // 4px horizontal, 8px vertical
979
- md: "px-sm py-md",
980
- // 8px horizontal, 16px vertical
981
- lg: "px-md py-lg"
982
- // 16px horizontal, 24px vertical
983
- }
984
- },
985
- /**
986
- * Gap between table cells (horizontal spacing)
987
- */
988
- gap: {
989
- sm: "gap-xs",
990
- // 4px (0.25rem) - maps to semanticSpacing.xs
991
- md: "gap-sm"
992
- // 8px (0.5rem) - maps to semanticSpacing.sm
993
- },
994
- /**
995
- * Border radius for table
996
- */
997
- radius: {
998
- default: "rounded-md"
999
- // 6px (0.375rem) - maps to borderRadius.md
1000
- },
1001
- /**
1002
- * Shadow tokens for table
1003
- * Maps to foundation elevation shadow tokens
1004
- */
1005
- shadow: {
1006
- none: "shadow-none",
1007
- // No shadow
1008
- subtle: "shadow-sm"
1009
- // Maps to elevationShadows.sm
1010
- },
1011
- /**
1012
- * Typography tokens for table headers and cells
1013
- * Maps to foundation typography fontSize tokens
1014
- */
1015
- typography: {
1016
- header: {
1017
- fontSize: "text-sm",
1018
- // Maps to fontSize.sm[0]
1019
- fontWeight: "font-semibold"
1020
- // Maps to fontWeight.semibold
1021
- },
1022
- cell: {
1023
- fontSize: "text-sm",
1024
- // Maps to fontSize.sm[0]
1025
- fontWeight: "font-normal"
1026
- // Maps to fontWeight.normal
1027
- }
1028
- },
1029
- /**
1030
- * Color tokens for table states
1031
- * Uses semantic color tokens
1032
- */
1033
- colors: {
1034
- border: "border-border",
1035
- // Border color
1036
- rowHover: "hover:bg-muted/50",
1037
- // Row hover background
1038
- rowSelected: "bg-muted"
1039
- // Selected row background
1040
- }
1041
- },
1042
1345
  /**
1043
1346
  * Skeleton Component Tokens
1044
1347
  */
@@ -1104,97 +1407,6 @@ var DATA_TOKENS = {
1104
1407
  inline: "inline-block"
1105
1408
  // Inline block display
1106
1409
  }
1107
- },
1108
- /**
1109
- * EmptyState Component Tokens
1110
- */
1111
- emptyState: {
1112
- /**
1113
- * Spacing tokens for EmptyState
1114
- * Maps to semantic spacing tokens
1115
- */
1116
- spacing: {
1117
- gap: "gap-md",
1118
- // 16px (1rem) - gap between elements - maps to semanticSpacing.md
1119
- padding: "p-lg"
1120
- // 24px (1.5rem) - container padding - maps to semanticSpacing.lg
1121
- },
1122
- /**
1123
- * Border radius for EmptyState container
1124
- */
1125
- radius: {
1126
- default: "rounded-xl"
1127
- // 12px (0.75rem) - maps to borderRadius.xl
1128
- },
1129
- /**
1130
- * Icon sizes by variant
1131
- * Maps to Tailwind size utilities
1132
- */
1133
- iconSize: {
1134
- sm: "size-8",
1135
- // 32px (2rem)
1136
- md: "size-12",
1137
- // 48px (3rem)
1138
- lg: "size-16"
1139
- // 64px (4rem)
1140
- },
1141
- /**
1142
- * Typography tokens for EmptyState
1143
- * Maps to foundation typography tokens
1144
- */
1145
- typography: {
1146
- title: {
1147
- fontSize: "text-lg",
1148
- // Maps to fontSize.lg[0]
1149
- fontWeight: "font-semibold"
1150
- // Maps to fontWeight.semibold
1151
- },
1152
- description: {
1153
- fontSize: "text-sm",
1154
- // Maps to fontSize.sm[0]
1155
- fontWeight: "font-normal"
1156
- // Maps to fontWeight.normal
1157
- }
1158
- }
1159
- },
1160
- /**
1161
- * DataList Component Tokens
1162
- */
1163
- dataList: {
1164
- /**
1165
- * Spacing tokens for DataList
1166
- * Maps to semantic spacing tokens
1167
- */
1168
- spacing: {
1169
- gap: "gap-md",
1170
- // 16px (1rem) - gap between items - maps to semanticSpacing.md
1171
- padding: "p-md"
1172
- // 16px (1rem) - container padding - maps to semanticSpacing.md
1173
- },
1174
- /**
1175
- * Label width tokens (for desktop horizontal layout)
1176
- * Maps to Tailwind width utilities
1177
- */
1178
- labelWidth: {
1179
- sm: "w-24",
1180
- // 96px (6rem) - small label width
1181
- md: "w-32",
1182
- // 128px (8rem) - default label width
1183
- lg: "w-40"
1184
- // 160px (10rem) - large label width
1185
- },
1186
- /**
1187
- * Row padding tokens
1188
- * Maps to semantic spacing tokens
1189
- */
1190
- rowPadding: {
1191
- sm: "py-xs",
1192
- // 4px (0.25rem) - maps to semanticSpacing.xs
1193
- md: "py-sm",
1194
- // 8px (0.5rem) - maps to semanticSpacing.sm
1195
- lg: "py-md"
1196
- // 16px (1rem) - maps to semanticSpacing.md
1197
- }
1198
1410
  }
1199
1411
  };
1200
1412
 
@@ -1254,139 +1466,6 @@ var ICON_TOKENS = {
1254
1466
  }
1255
1467
  };
1256
1468
 
1257
- // src/tokens/components/motion.ts
1258
- var MOTION_TOKENS = {
1259
- /**
1260
- * Transition property tokens
1261
- * Maps to Tailwind transition utilities
1262
- */
1263
- transition: {
1264
- all: "transition-all",
1265
- // All properties
1266
- colors: "transition-colors",
1267
- // Color properties only
1268
- opacity: "transition-opacity",
1269
- // Opacity only
1270
- transform: "transition-transform",
1271
- // Transform only
1272
- shadow: "transition-shadow",
1273
- // Box shadow only
1274
- none: "transition-none"
1275
- // No transition
1276
- },
1277
- /**
1278
- * Duration tokens
1279
- * Maps to foundation motion duration tokens via Tailwind
1280
- */
1281
- duration: {
1282
- instant: "duration-0",
1283
- // 0ms
1284
- fast: "duration-fast",
1285
- // 150ms - maps to motion.durations.fast
1286
- normal: "duration-normal",
1287
- // 300ms - maps to motion.durations.normal
1288
- slow: "duration-slow",
1289
- // 500ms - maps to motion.durations.slow
1290
- slower: "duration-slower",
1291
- // 700ms - maps to motion.durations.slower
1292
- slowest: "duration-slowest",
1293
- // 1000ms - maps to motion.durations.slowest
1294
- // Granular durations
1295
- "75": "duration-75",
1296
- // 75ms
1297
- "100": "duration-100",
1298
- // 100ms
1299
- "200": "duration-200",
1300
- // 200ms
1301
- "250": "duration-250",
1302
- // 250ms
1303
- "300": "duration-300",
1304
- // 300ms
1305
- "400": "duration-400",
1306
- // 400ms
1307
- "500": "duration-500",
1308
- // 500ms
1309
- "600": "duration-600",
1310
- // 600ms
1311
- "700": "duration-700",
1312
- // 700ms
1313
- "800": "duration-800",
1314
- // 800ms
1315
- "1000": "duration-1000"
1316
- // 1000ms
1317
- },
1318
- /**
1319
- * Easing tokens
1320
- * Maps to foundation motion easing tokens via Tailwind
1321
- */
1322
- easing: {
1323
- linear: "ease-linear",
1324
- // Linear easing
1325
- in: "ease-in",
1326
- // Ease in
1327
- out: "ease-out",
1328
- // Ease out (recommended for most UI)
1329
- "in-out": "ease-in-out",
1330
- // Ease in-out
1331
- bounce: "ease-bounce",
1332
- // Bounce easing
1333
- elastic: "ease-elastic"
1334
- // Elastic easing
1335
- },
1336
- /**
1337
- * Pre-configured transition tokens
1338
- * Combines duration and easing for common use cases
1339
- */
1340
- transitionPreset: {
1341
- fast: "transition-all duration-fast ease-out",
1342
- // Fast transition
1343
- normal: "transition-all duration-normal ease-in-out",
1344
- // Normal transition (default)
1345
- slow: "transition-all duration-slow ease-in-out",
1346
- // Slow transition
1347
- colors: "transition-colors duration-normal ease-out",
1348
- // Color transitions (common)
1349
- transform: "transition-transform duration-normal ease-out",
1350
- // Transform transitions
1351
- opacity: "transition-opacity duration-fast ease-out"
1352
- // Opacity transitions
1353
- },
1354
- /**
1355
- * Animation tokens
1356
- * Maps to foundation motion animation tokens via Tailwind
1357
- */
1358
- animation: {
1359
- none: "animate-none",
1360
- // No animation
1361
- spin: "animate-spin",
1362
- // Spin animation
1363
- pulse: "animate-pulse",
1364
- // Pulse animation
1365
- bounce: "animate-bounce",
1366
- // Bounce animation
1367
- ping: "animate-ping",
1368
- // Ping animation
1369
- shake: "animate-shake",
1370
- // Shake animation
1371
- fadeIn: "animate-fadeIn",
1372
- // Fade in
1373
- fadeOut: "animate-fadeOut",
1374
- // Fade out
1375
- slideInUp: "animate-slideInUp",
1376
- // Slide in from bottom
1377
- slideInDown: "animate-slideInDown",
1378
- // Slide in from top
1379
- slideInLeft: "animate-slideInLeft",
1380
- // Slide in from right
1381
- slideInRight: "animate-slideInRight",
1382
- // Slide in from left
1383
- scaleIn: "animate-scaleIn",
1384
- // Scale in
1385
- scaleOut: "animate-scaleOut"
1386
- // Scale out
1387
- }
1388
- };
1389
-
1390
1469
  // src/tokens/components/domain.ts
1391
1470
  var DOMAIN_TOKENS = {
1392
1471
  /**
@@ -1539,7 +1618,7 @@ var DOMAIN_TOKENS = {
1539
1618
  },
1540
1619
  /**
1541
1620
  * Image tokens for card media
1542
- * Defines aspect ratio, radius, and overlay styles
1621
+ * Defines aspect ratio, radius, overlay styles, and placeholder gradients
1543
1622
  */
1544
1623
  image: {
1545
1624
  /**
@@ -1562,6 +1641,40 @@ var DOMAIN_TOKENS = {
1562
1641
  overlay: {
1563
1642
  gradient: "bg-gradient-to-t from-black/60 via-transparent to-transparent"
1564
1643
  // Gradient overlay for image hover states
1644
+ },
1645
+ /**
1646
+ * Placeholder gradient tokens for image placeholders
1647
+ * Used when no image URL is provided
1648
+ */
1649
+ placeholder: {
1650
+ gradient: "bg-gradient-to-br from-muted to-muted/50"
1651
+ // Placeholder gradient background
1652
+ }
1653
+ },
1654
+ /**
1655
+ * Text tokens for card text elements
1656
+ * Defines hover states and line clamping for titles and descriptions
1657
+ */
1658
+ text: {
1659
+ /**
1660
+ * Hover state tokens for text elements
1661
+ * Used for interactive text elements like titles
1662
+ */
1663
+ hover: {
1664
+ primary: "group-hover:text-primary"
1665
+ // Hover state for primary text color
1666
+ },
1667
+ /**
1668
+ * Line clamp tokens for text truncation
1669
+ * Used for limiting text to specific number of lines
1670
+ */
1671
+ lineClamp: {
1672
+ one: "line-clamp-1",
1673
+ // Single line clamp
1674
+ two: "line-clamp-2",
1675
+ // Two line clamp
1676
+ three: "line-clamp-3"
1677
+ // Three line clamp
1565
1678
  }
1566
1679
  },
1567
1680
  /**
@@ -1784,6 +1897,94 @@ var DOMAIN_TOKENS = {
1784
1897
  height: "h-6"
1785
1898
  // References spacing[6] (1.5rem / 24px) via Tailwind
1786
1899
  }
1900
+ },
1901
+ /**
1902
+ * CTA (Call-to-Action) button tokens for domain card components
1903
+ * Provides PromoCard-specific CTA button styling tokens
1904
+ * These tokens are semantically owned by domain card components, not by the Button component
1905
+ * References foundation tokens (spacing, typography, radius, shadows, motion) for consistency
1906
+ */
1907
+ cta: {
1908
+ /**
1909
+ * CTA button styling tokens
1910
+ * Used by PromoCard and other domain card components for CTA button elements
1911
+ */
1912
+ button: {
1913
+ /**
1914
+ * Button heights by size
1915
+ * Maps to Tailwind height utilities: h-8, h-9
1916
+ */
1917
+ height: {
1918
+ sm: "h-8",
1919
+ // 32px (2rem) - compact size
1920
+ md: "h-9"
1921
+ // 36px (2.25rem) - default size
1922
+ },
1923
+ /**
1924
+ * Button padding by size
1925
+ * Horizontal and vertical padding values
1926
+ * References semanticSpacing tokens
1927
+ */
1928
+ padding: {
1929
+ horizontal: {
1930
+ sm: "px-sm",
1931
+ // 8px (0.5rem) - maps to semanticSpacing.sm
1932
+ md: "px-md"
1933
+ // 16px (1rem) - maps to semanticSpacing.md
1934
+ },
1935
+ vertical: {
1936
+ sm: "py-xs"
1937
+ // 4px (0.25rem) - maps to semanticSpacing.xs
1938
+ }
1939
+ },
1940
+ /**
1941
+ * Border radius for CTA buttons
1942
+ * References borderRadius.md (6px / 0.375rem)
1943
+ * Using Tailwind class "rounded-md" which maps to borderRadius.md
1944
+ */
1945
+ radius: "rounded-md",
1946
+ // References borderRadius.md via Tailwind
1947
+ /**
1948
+ * Font sizes by button size
1949
+ * Maps to foundation typography fontSize tokens
1950
+ */
1951
+ fontSize: {
1952
+ sm: "text-xs",
1953
+ // Maps to fontSize.xs[0]
1954
+ md: "text-sm"
1955
+ // Maps to fontSize.sm[0]
1956
+ },
1957
+ /**
1958
+ * Shadow tokens for CTA buttons
1959
+ * Maps to foundation elevation shadow tokens
1960
+ */
1961
+ shadow: {
1962
+ primary: "shadow"
1963
+ // Maps to elevationShadows.xs (primary variant uses shadow)
1964
+ },
1965
+ /**
1966
+ * Color tokens for CTA button variants
1967
+ * Uses semantic color tokens that map to CSS variables
1968
+ */
1969
+ variant: {
1970
+ primary: {
1971
+ background: "bg-primary",
1972
+ // Primary background using CSS var
1973
+ text: "text-primary-foreground",
1974
+ // Primary text using CSS var
1975
+ hover: "hover:bg-primary/90"
1976
+ // Primary hover using CSS var
1977
+ }
1978
+ },
1979
+ /**
1980
+ * Transition tokens for CTA buttons
1981
+ * References MOTION_TOKENS for transitions
1982
+ */
1983
+ transition: {
1984
+ colors: "transition-colors"
1985
+ // Color transition using motion tokens
1986
+ }
1987
+ }
1787
1988
  }
1788
1989
  };
1789
1990
 
@@ -1887,40 +2088,6 @@ var INPUT_TOKENS = {
1887
2088
  text: "text-[hsl(var(--foreground))]"
1888
2089
  // File input text color using CSS var
1889
2090
  },
1890
- /**
1891
- * Select listbox tokens
1892
- * Styling for select dropdown container
1893
- */
1894
- selectListbox: {
1895
- border: "border border-[hsl(var(--border))]",
1896
- // Border color using CSS var
1897
- background: "bg-[hsl(var(--popover))]",
1898
- // Background using CSS var
1899
- text: "text-[hsl(var(--popover-foreground))]",
1900
- // Text color using CSS var
1901
- radius: "rounded-md",
1902
- // Radius token (6px)
1903
- shadow: "shadow-md"
1904
- // Shadow token
1905
- },
1906
- /**
1907
- * Select option tokens
1908
- * Styling for select option items
1909
- */
1910
- selectOption: {
1911
- focus: {
1912
- background: "focus:bg-[hsl(var(--accent))]",
1913
- // Focus background using CSS var
1914
- text: "focus:text-[hsl(var(--accent-foreground))]"
1915
- // Focus text using CSS var
1916
- },
1917
- selected: {
1918
- background: "bg-[hsl(var(--accent))]",
1919
- // Selected background using CSS var
1920
- text: "text-[hsl(var(--accent-foreground))]"
1921
- // Selected text using CSS var
1922
- }
1923
- },
1924
2091
  /**
1925
2092
  * Variant-based tokens
1926
2093
  * Border, background, and text colors for different variants
@@ -2908,8 +3075,16 @@ var TEXT_TOKENS = {
2908
3075
  // Maps to fontSize.base[0]
2909
3076
  lg: "text-lg",
2910
3077
  // Maps to fontSize.lg[0]
2911
- xl: "text-xl"
3078
+ xl: "text-xl",
2912
3079
  // Maps to fontSize.xl[0]
3080
+ "2xl": "text-2xl",
3081
+ // Maps to fontSize.2xl[0]
3082
+ "3xl": "text-3xl",
3083
+ // Maps to fontSize.3xl[0]
3084
+ "4xl": "text-4xl",
3085
+ // Maps to fontSize.4xl[0]
3086
+ "5xl": "text-5xl"
3087
+ // Maps to fontSize.5xl[0]
2913
3088
  },
2914
3089
  /**
2915
3090
  * Font weights by weight variant
@@ -2934,6 +3109,8 @@ var TEXT_TOKENS = {
2934
3109
  // Maps to lineHeight.none
2935
3110
  tight: "leading-tight",
2936
3111
  // Maps to lineHeight.tight
3112
+ snug: "leading-snug",
3113
+ // Maps to lineHeight.snug
2937
3114
  normal: "leading-normal",
2938
3115
  // Maps to lineHeight.normal
2939
3116
  relaxed: "leading-relaxed",
@@ -3457,9 +3634,9 @@ var TOAST_TOKENS = {
3457
3634
  // Default opacity (hidden)
3458
3635
  groupHover: "group-hover:opacity-100",
3459
3636
  // Visible on group hover
3460
- focus: "focus:opacity-100",
3637
+ focus: "focus-visible:opacity-100",
3461
3638
  // Visible on focus
3462
- focusRing: "focus:outline-none focus:ring-1"
3639
+ focusRing: "focus-visible:outline-none focus-visible:ring-1"
3463
3640
  // Focus ring styling
3464
3641
  }
3465
3642
  }
@@ -4201,19 +4378,27 @@ var DROPDOWN_TOKENS = {
4201
4378
  // 256px
4202
4379
  }
4203
4380
  },
4381
+ /**
4382
+ * Width tokens
4383
+ * Common width utilities
4384
+ */
4385
+ width: {
4386
+ full: "w-full"
4387
+ // Full width (100%)
4388
+ },
4204
4389
  /**
4205
4390
  * Item tokens by size
4206
4391
  * Individual menu item
4207
4392
  */
4208
4393
  item: {
4209
4394
  background: {
4210
- focus: "focus:bg-[hsl(var(--accent))]",
4395
+ focus: "focus-visible:bg-[hsl(var(--accent))]",
4211
4396
  // Focus background using CSS var
4212
4397
  selected: "bg-[hsl(var(--accent))]"
4213
4398
  // Selected background using CSS var
4214
4399
  },
4215
4400
  text: {
4216
- focus: "focus:text-[hsl(var(--accent-foreground))]",
4401
+ focus: "focus-visible:text-[hsl(var(--accent-foreground))]",
4217
4402
  // Focus text using CSS var
4218
4403
  selected: "text-[hsl(var(--accent-foreground))]"
4219
4404
  // Selected text using CSS var
@@ -4471,9 +4656,9 @@ var SELECT_TOKENS = {
4471
4656
  // 8px (0.5rem) from left
4472
4657
  },
4473
4658
  focus: {
4474
- background: "focus:bg-[hsl(var(--accent))]",
4659
+ background: "focus-visible:bg-[hsl(var(--accent))]",
4475
4660
  // Focus background using CSS var
4476
- text: "focus:text-[hsl(var(--accent-foreground))]"
4661
+ text: "focus-visible:text-[hsl(var(--accent-foreground))]"
4477
4662
  // Focus text using CSS var
4478
4663
  },
4479
4664
  selected: {
@@ -5063,54 +5248,54 @@ var transitions = {
5063
5248
  var keyframes = {
5064
5249
  // Fade animations
5065
5250
  fadeIn: {
5066
- from: { opacity: 0 },
5067
- to: { opacity: 1 }
5251
+ from: { opacity: "0" },
5252
+ to: { opacity: "1" }
5068
5253
  },
5069
5254
  fadeOut: {
5070
- from: { opacity: 1 },
5071
- to: { opacity: 0 }
5255
+ from: { opacity: "1" },
5256
+ to: { opacity: "0" }
5072
5257
  },
5073
5258
  // Slide animations
5074
5259
  slideInUp: {
5075
- from: { transform: "translateY(100%)", opacity: 0 },
5076
- to: { transform: "translateY(0)", opacity: 1 }
5260
+ from: { transform: "translateY(100%)", opacity: "0" },
5261
+ to: { transform: "translateY(0)", opacity: "1" }
5077
5262
  },
5078
5263
  slideInDown: {
5079
- from: { transform: "translateY(-100%)", opacity: 0 },
5080
- to: { transform: "translateY(0)", opacity: 1 }
5264
+ from: { transform: "translateY(-100%)", opacity: "0" },
5265
+ to: { transform: "translateY(0)", opacity: "1" }
5081
5266
  },
5082
5267
  slideInLeft: {
5083
- from: { transform: "translateX(-100%)", opacity: 0 },
5084
- to: { transform: "translateX(0)", opacity: 1 }
5268
+ from: { transform: "translateX(-100%)", opacity: "0" },
5269
+ to: { transform: "translateX(0)", opacity: "1" }
5085
5270
  },
5086
5271
  slideInRight: {
5087
- from: { transform: "translateX(100%)", opacity: 0 },
5088
- to: { transform: "translateX(0)", opacity: 1 }
5272
+ from: { transform: "translateX(100%)", opacity: "0" },
5273
+ to: { transform: "translateX(0)", opacity: "1" }
5089
5274
  },
5090
5275
  slideOutUp: {
5091
- from: { transform: "translateY(0)", opacity: 1 },
5092
- to: { transform: "translateY(-100%)", opacity: 0 }
5276
+ from: { transform: "translateY(0)", opacity: "1" },
5277
+ to: { transform: "translateY(-100%)", opacity: "0" }
5093
5278
  },
5094
5279
  slideOutDown: {
5095
- from: { transform: "translateY(0)", opacity: 1 },
5096
- to: { transform: "translateY(100%)", opacity: 0 }
5280
+ from: { transform: "translateY(0)", opacity: "1" },
5281
+ to: { transform: "translateY(100%)", opacity: "0" }
5097
5282
  },
5098
5283
  slideOutLeft: {
5099
- from: { transform: "translateX(0)", opacity: 1 },
5100
- to: { transform: "translateX(-100%)", opacity: 0 }
5284
+ from: { transform: "translateX(0)", opacity: "1" },
5285
+ to: { transform: "translateX(-100%)", opacity: "0" }
5101
5286
  },
5102
5287
  slideOutRight: {
5103
- from: { transform: "translateX(0)", opacity: 1 },
5104
- to: { transform: "translateX(100%)", opacity: 0 }
5288
+ from: { transform: "translateX(0)", opacity: "1" },
5289
+ to: { transform: "translateX(100%)", opacity: "0" }
5105
5290
  },
5106
5291
  // Scale animations
5107
5292
  scaleIn: {
5108
- from: { transform: "scale(0.95)", opacity: 0 },
5109
- to: { transform: "scale(1)", opacity: 1 }
5293
+ from: { transform: "scale(0.95)", opacity: "0" },
5294
+ to: { transform: "scale(1)", opacity: "1" }
5110
5295
  },
5111
5296
  scaleOut: {
5112
- from: { transform: "scale(1)", opacity: 1 },
5113
- to: { transform: "scale(0.95)", opacity: 0 }
5297
+ from: { transform: "scale(1)", opacity: "1" },
5298
+ to: { transform: "scale(0.95)", opacity: "0" }
5114
5299
  },
5115
5300
  scaleUp: {
5116
5301
  from: { transform: "scale(1)" },
@@ -5131,8 +5316,8 @@ var keyframes = {
5131
5316
  },
5132
5317
  // Pulse and bounce
5133
5318
  pulse: {
5134
- "0%, 100%": { opacity: 1 },
5135
- "50%": { opacity: 0.5 }
5319
+ "0%, 100%": { opacity: "1" },
5320
+ "50%": { opacity: "0.5" }
5136
5321
  },
5137
5322
  bounce: {
5138
5323
  "0%, 100%": {
@@ -5154,7 +5339,7 @@ var keyframes = {
5154
5339
  ping: {
5155
5340
  "75%, 100%": {
5156
5341
  transform: "scale(2)",
5157
- opacity: 0
5342
+ opacity: "0"
5158
5343
  }
5159
5344
  },
5160
5345
  // Accordion animations (for Radix UI)
@@ -6114,4 +6299,4 @@ var tokenSystemSummary = {
6114
6299
  // src/tokens/theme.ts
6115
6300
  var UI_COLORS = tailwindThemeColors;
6116
6301
 
6117
- export { ALERT_TOKENS, BUTTON_TOKENS, CARD_TOKENS, CHECKBOX_TOKENS, DATA_TOKENS, DOMAIN_TOKENS, DROPDOWN_TOKENS, ICON_TOKENS, INPUT_TOKENS, MENU_TOKENS, MOTION_TOKENS, NAVIGATION_TOKENS, NOTIFICATION_TOKENS, OVERLAY_TOKENS, POPOVER_TOKENS, RADIO_TOKENS, SECTION_TOKENS, SELECT_TOKENS, SURFACE_TOKENS, SWITCH_TOKENS, TEXT_TOKENS, TOAST_TOKENS, TOOLTIP_TOKENS, UI_COLORS, accentColoredShadows, accentColors, allCSSVariables, allCSSVariablesCSS, animations, baseColors, borderRadius, chartColors, colorCSSVariables, componentRadius, componentShadowMapping, cssVariableColorTokens, durations, easings, elevationShadows, focusRings, fontFamily, fontSize, fontSizeWithMd, fontWeight, generateCSSVariablesCSS, glowEffects, keyframes, layoutSpacing, letterSpacing, lineHeight, motionCSSVariables, motionV2CSSVariables, motionV2Combined, motionV2Durations, motionV2Easings, motionV2Fade, motionV2Scale, motionV2Slide, motionV2TailwindConfig, motionV2Transitions, primaryColoredShadows, primaryColors, radiusCSSVariables, reducedMotion, secondaryColors, semanticColors, semanticSpacing, shadowBase, shadowCSSVariables, shadowOpacity, spacing, spacingCSSVariables, springs, surfaceColors, tailwindMotionConfig, tailwindRadiusConfig, tailwindShadowConfig, tailwindSpacingConfig, tailwindThemeColors, tailwindTypographyConfig, textColors, textStyles, tokenSystemSummary, transitions, typographyCSSVariables };
6302
+ export { ALERT_TOKENS, ARTIST_TOKENS, BUTTON_TOKENS, CARD_TOKENS, CHECKBOX_TOKENS, DATA_TOKENS, DOMAIN_TOKENS, DROPDOWN_TOKENS, ICON_TOKENS, INPUT_TOKENS, MENU_TOKENS, MOTION_TOKENS, NAVIGATION_TOKENS, NOTIFICATION_TOKENS, OVERLAY_TOKENS, POPOVER_TOKENS, RADIO_TOKENS, SECTION_TOKENS, SELECT_TOKENS, SURFACE_TOKENS, SWITCH_TOKENS, TEXT_TOKENS, TOAST_TOKENS, TOOLTIP_TOKENS, UI_COLORS, accentColoredShadows, accentColors, allCSSVariables, allCSSVariablesCSS, animations, baseColors, borderRadius, chartColors, colorCSSVariables, componentRadius, componentShadowMapping, cssVariableColorTokens, durations, easings, elevationShadows, focusRings, fontFamily, fontSize, fontSizeWithMd, fontWeight, generateCSSVariablesCSS, glowEffects, keyframes, layoutSpacing, letterSpacing, lineHeight, motionCSSVariables, motionV2CSSVariables, motionV2Combined, motionV2Durations, motionV2Easings, motionV2Fade, motionV2Scale, motionV2Slide, motionV2TailwindConfig, motionV2Transitions, primaryColoredShadows, primaryColors, radiusCSSVariables, reducedMotion, secondaryColors, semanticColors, semanticSpacing, shadowBase, shadowCSSVariables, shadowOpacity, spacing, spacingCSSVariables, springs, surfaceColors, tailwindMotionConfig, tailwindRadiusConfig, tailwindShadowConfig, tailwindSpacingConfig, tailwindThemeColors, tailwindTypographyConfig, textColors, textStyles, tokenSystemSummary, transitions, typographyCSSVariables };