@revikornmann/muka-ui 0.27.0 → 0.27.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2494,6 +2494,116 @@ body {
2494
2494
  }
2495
2495
 
2496
2496
 
2497
+ /* View */
2498
+ /* View Component Styles */
2499
+
2500
+ /* ─── Base layout ─────────────────────────────────────── */
2501
+
2502
+ .muka-view {
2503
+ display: flex;
2504
+ flex-direction: column;
2505
+ height: 100dvh;
2506
+ background-color: var(--view-color-background);
2507
+ position: relative;
2508
+ isolation: isolate;
2509
+ box-sizing: border-box;
2510
+
2511
+ /* Width reserved for the footer nav once it becomes a left sidebar at the
2512
+ large tier (matches BottomBar's desktopAs="sidebar" rail width). */
2513
+ --view-sidebar-width: 240px;
2514
+ }
2515
+
2516
+ /* ─── Surface level variants ─────────────────────────── */
2517
+
2518
+ .muka-view--surface-3 {
2519
+ background-color: var(--color-surface-level3);
2520
+ }
2521
+
2522
+ /* ─── Large screens: make room for the left sidebar ──────────
2523
+ A footer nav with desktopAs="sidebar" becomes a fixed 240px left rail at
2524
+ ≥1024px. Offset the shell so the TopBar/body clear it — tied to the sidebar's
2525
+ actual presence (the `.muka-bottombar--desktop-sidebar` element) rather than
2526
+ the View's `size`, so a forced `size="lg"` below 1024px never reserves space
2527
+ for a sidebar that hasn't rendered yet. */
2528
+ @media (min-width: 1024px) {
2529
+ .muka-view:has(.muka-bottombar--desktop-sidebar) {
2530
+ padding-left: var(--view-sidebar-width);
2531
+ }
2532
+ }
2533
+
2534
+ /* ─── TopBar elevation ────────────────────────────────── */
2535
+
2536
+ .muka-view .muka-topbar {
2537
+ flex-shrink: 0;
2538
+ z-index: 3;
2539
+ box-shadow: var(--shadow-level2);
2540
+ }
2541
+
2542
+ /* ─── Scrollable body ─────────────────────────────────── */
2543
+
2544
+ .muka-view__body {
2545
+ flex: 1 1 0%;
2546
+ min-height: 0;
2547
+ overflow-y: auto;
2548
+ overflow-x: clip;
2549
+ z-index: 1;
2550
+
2551
+ /* Column flow so the footer (now a scroll-area child) can pin to the bottom and
2552
+ content scrolls *behind* it — letting a floating BottomBar's frosted backdrop
2553
+ reveal the content underneath. */
2554
+ display: flex;
2555
+ flex-direction: column;
2556
+ }
2557
+
2558
+ /* Inner wrapper constrains content width at the large tier (enterprise desktop)
2559
+ using the alias-layer section/container tokens, while the body scrolls full
2560
+ width. Full-bleed below large. */
2561
+ .muka-view__body-inner {
2562
+ width: 100%;
2563
+ /* Grow on short content so the sticky footer is pushed to the bottom rather
2564
+ than floating mid-screen. */
2565
+ flex: 1 0 auto;
2566
+ }
2567
+
2568
+ @media (min-width: 1024px) {
2569
+ .muka-view:not([data-size]) .muka-view__body-inner {
2570
+ max-width: var(--container-max-width-xl);
2571
+ margin-inline: auto;
2572
+ padding-inline: var(--section-padding-horizontal-default);
2573
+ }
2574
+ }
2575
+
2576
+ .muka-view[data-size='lg'] .muka-view__body-inner {
2577
+ max-width: var(--container-max-width-xl);
2578
+ margin-inline: auto;
2579
+ padding-inline: var(--section-padding-horizontal-default);
2580
+ }
2581
+
2582
+ /* ─── Footer (e.g. BottomBar) ─────────────────────────── */
2583
+
2584
+ .muka-view__footer {
2585
+ position: sticky;
2586
+ bottom: 0;
2587
+ flex-shrink: 0;
2588
+ z-index: 2;
2589
+ }
2590
+
2591
+ /* Inside an AppShell, the persistent left rail replaces the per-view bottom
2592
+ navigation at the large tier, so hide a footer that holds a navigation bar.
2593
+ Scoped to `.muka-app-shell` so bare Views (and the standalone
2594
+ desktopAs="sidebar" footer pattern above) are unaffected. Action-bar footers
2595
+ (`.muka-bottombar--actions`) don't match and remain at the bottom. */
2596
+ @media (min-width: 1024px) {
2597
+ .muka-app-shell .muka-view__footer:has(.muka-bottombar--navigation) {
2598
+ display: none;
2599
+ }
2600
+ }
2601
+
2602
+ .muka-app-shell[data-size='lg'] .muka-view__footer:has(.muka-bottombar--navigation) {
2603
+ display: none;
2604
+ }
2605
+
2606
+
2497
2607
  /* Typography */
2498
2608
  .muka-typography-catalog {
2499
2609
  display: flex;
@@ -2844,122 +2954,175 @@ body {
2844
2954
  }
2845
2955
 
2846
2956
 
2847
- /* View */
2848
- /* View Component Styles */
2849
-
2850
- /* ─── Base layout ─────────────────────────────────────── */
2957
+ /* Toggle */
2958
+ /* Toggle Component Styles - Using Muka Design Tokens */
2851
2959
 
2852
- .muka-view {
2960
+ /* Wrapper container */
2961
+ .muka-toggle {
2853
2962
  display: flex;
2854
- flex-direction: column;
2855
- height: 100dvh;
2856
- background-color: var(--view-color-background);
2963
+ align-items: center;
2964
+ gap: var(--spacing-2);
2857
2965
  position: relative;
2858
- isolation: isolate;
2859
- box-sizing: border-box;
2860
-
2861
- /* Width reserved for the footer nav once it becomes a left sidebar at the
2862
- large tier (matches BottomBar's desktopAs="sidebar" rail width). */
2863
- --view-sidebar-width: 240px;
2966
+ padding: var(--spacing-4) 0;
2864
2967
  }
2865
2968
 
2866
- /* ─── Surface level variants ─────────────────────────── */
2867
-
2868
- .muka-view--surface-3 {
2869
- background-color: var(--color-surface-level3);
2969
+ .muka-toggle--with-caption {
2970
+ padding: var(--spacing-5) 0;
2870
2971
  }
2871
2972
 
2872
- /* ─── Large screens: make room for the left sidebar ──────────
2873
- A footer nav with desktopAs="sidebar" becomes a fixed 240px left rail at
2874
- ≥1024px. Offset the shell so the TopBar/body clear it — tied to the sidebar's
2875
- actual presence (the `.muka-bottombar--desktop-sidebar` element) rather than
2876
- the View's `size`, so a forced `size="lg"` below 1024px never reserves space
2877
- for a sidebar that hasn't rendered yet. */
2878
- @media (min-width: 1024px) {
2879
- .muka-view:has(.muka-bottombar--desktop-sidebar) {
2880
- padding-left: var(--view-sidebar-width);
2881
- }
2973
+ .muka-toggle--disabled {
2974
+ opacity: 0.6;
2882
2975
  }
2883
2976
 
2884
- /* ─── TopBar elevation ────────────────────────────────── */
2885
-
2886
- .muka-view .muka-topbar {
2977
+ /* Icon */
2978
+ .muka-toggle__icon {
2979
+ display: flex;
2980
+ align-items: center;
2981
+ justify-content: center;
2887
2982
  flex-shrink: 0;
2888
- z-index: 3;
2889
- box-shadow: var(--shadow-level2);
2983
+ width: var(--icon-size-default);
2984
+ height: var(--icon-size-default);
2985
+ color: var(--color-text-default-default);
2890
2986
  }
2891
2987
 
2892
- /* ─── Scrollable body ─────────────────────────────────── */
2893
-
2894
- .muka-view__body {
2895
- flex: 1 1 0%;
2896
- min-height: 0;
2897
- overflow-y: auto;
2898
- overflow-x: clip;
2899
- z-index: 1;
2988
+ .muka-toggle__icon svg {
2989
+ width: 100%;
2990
+ height: 100%;
2991
+ }
2900
2992
 
2901
- /* Column flow so the footer (now a scroll-area child) can pin to the bottom and
2902
- content scrolls *behind* it — letting a floating BottomBar's frosted backdrop
2903
- reveal the content underneath. */
2993
+ /* Content area (label + caption) */
2994
+ .muka-toggle__content {
2904
2995
  display: flex;
2905
2996
  flex-direction: column;
2997
+ flex: 1;
2998
+ min-width: 0;
2999
+ gap: var(--spacing-1);
2906
3000
  }
2907
3001
 
2908
- /* Inner wrapper constrains content width at the large tier (enterprise desktop)
2909
- using the alias-layer section/container tokens, while the body scrolls full
2910
- width. Full-bleed below large. */
2911
- .muka-view__body-inner {
2912
- width: 100%;
2913
- /* Grow on short content so the sticky footer is pushed to the bottom rather
2914
- than floating mid-screen. */
2915
- flex: 1 0 auto;
3002
+ /* Label */
3003
+ .muka-toggle__label {
3004
+ font-family: var(--text-label-lg-regular-fontFamily);
3005
+ font-weight: var(--text-label-lg-regular-fontWeight);
3006
+ font-size: var(--text-label-lg-regular-fontSize);
3007
+ line-height: var(--text-label-lg-regular-lineHeight);
3008
+ color: var(--color-text-default-default);
3009
+ cursor: pointer;
2916
3010
  }
2917
3011
 
2918
- @media (min-width: 1024px) {
2919
- .muka-view:not([data-size]) .muka-view__body-inner {
2920
- max-width: var(--container-max-width-xl);
2921
- margin-inline: auto;
2922
- padding-inline: var(--section-padding-horizontal-default);
2923
- }
3012
+ .muka-toggle--with-caption .muka-toggle__label {
3013
+ font-family: var(--text-label-lg-semibold-fontFamily);
3014
+ font-weight: var(--text-label-lg-semibold-fontWeight);
3015
+ font-size: var(--text-label-lg-semibold-fontSize);
3016
+ line-height: var(--text-label-lg-semibold-lineHeight);
2924
3017
  }
2925
3018
 
2926
- .muka-view[data-size='lg'] .muka-view__body-inner {
2927
- max-width: var(--container-max-width-xl);
2928
- margin-inline: auto;
2929
- padding-inline: var(--section-padding-horizontal-default);
3019
+ .muka-toggle--disabled .muka-toggle__label {
3020
+ color: var(--color-text-subtle-default);
3021
+ cursor: not-allowed;
2930
3022
  }
2931
3023
 
2932
- /* ─── Footer (e.g. BottomBar) ─────────────────────────── */
2933
-
2934
- .muka-view__footer {
2935
- position: sticky;
2936
- bottom: 0;
2937
- flex-shrink: 0;
2938
- z-index: 2;
3024
+ /* Caption */
3025
+ .muka-toggle__caption {
3026
+ font-family: var(--text-body-base-regular-fontFamily);
3027
+ font-weight: var(--text-body-base-regular-fontWeight);
3028
+ font-size: var(--text-body-base-regular-fontSize);
3029
+ line-height: var(--text-body-base-regular-lineHeight);
3030
+ color: var(--color-text-subtle-default);
2939
3031
  }
2940
3032
 
2941
- /* Inside an AppShell, the persistent left rail replaces the per-view bottom
2942
- navigation at the large tier, so hide a footer that holds a navigation bar.
2943
- Scoped to `.muka-app-shell` so bare Views (and the standalone
2944
- desktopAs="sidebar" footer pattern above) are unaffected. Action-bar footers
2945
- (`.muka-bottombar--actions`) don't match and remain at the bottom. */
2946
- @media (min-width: 1024px) {
2947
- .muka-app-shell .muka-view__footer:has(.muka-bottombar--navigation) {
2948
- display: none;
2949
- }
3033
+ /* Switch container */
3034
+ .muka-toggle__switch {
3035
+ position: relative;
3036
+ display: inline-flex;
3037
+ flex-shrink: 0;
3038
+ cursor: pointer;
2950
3039
  }
2951
3040
 
2952
- .muka-app-shell[data-size='lg'] .muka-view__footer:has(.muka-bottombar--navigation) {
2953
- display: none;
3041
+ .muka-toggle--disabled .muka-toggle__switch {
3042
+ cursor: not-allowed;
2954
3043
  }
2955
3044
 
2956
-
2957
- /* Toast */
2958
- /* Toast Component Styles - Using Muka Design Tokens */
2959
-
2960
- .muka-toast {
2961
- display: flex;
2962
- align-items: flex-start;
3045
+ /* Hidden native input */
3046
+ .muka-toggle__input {
3047
+ position: absolute;
3048
+ width: 1px;
3049
+ height: 1px;
3050
+ padding: 0;
3051
+ margin: -1px;
3052
+ overflow: hidden;
3053
+ clip: rect(0, 0, 0, 0);
3054
+ white-space: nowrap;
3055
+ border: 0;
3056
+ }
3057
+
3058
+ /* Track (background pill) */
3059
+ .muka-toggle__track {
3060
+ display: flex;
3061
+ align-items: center;
3062
+ width: var(--toggle-track-width);
3063
+ height: var(--toggle-track-height);
3064
+ border-radius: var(--toggle-track-radius);
3065
+ background-color: var(--toggle-track-color-off);
3066
+ transition: background-color 0.2s ease;
3067
+ box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.16);
3068
+ position: relative;
3069
+ }
3070
+
3071
+ /* Knob (sliding circle) */
3072
+ .muka-toggle__knob {
3073
+ position: absolute;
3074
+ width: var(--toggle-knob-size);
3075
+ height: var(--toggle-knob-size);
3076
+ border-radius: var(--border-radius-full);
3077
+ background-color: var(--toggle-knob-color-default);
3078
+ box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);
3079
+ left: var(--toggle-knob-offset);
3080
+ transition: left 0.2s ease, transform 0.2s ease;
3081
+ }
3082
+
3083
+ /* Focus state */
3084
+ .muka-toggle__input:focus-visible + .muka-toggle__track {
3085
+ outline: 2px solid var(--color-border-focus);
3086
+ outline-offset: 2px;
3087
+ }
3088
+
3089
+ /* Checked (on) state */
3090
+ .muka-toggle__input:checked + .muka-toggle__track {
3091
+ background-color: var(--toggle-track-color-on);
3092
+ }
3093
+
3094
+ .muka-toggle__input:checked + .muka-toggle__track .muka-toggle__knob {
3095
+ left: calc(var(--toggle-track-width) - var(--toggle-knob-size) - var(--toggle-knob-offset));
3096
+ }
3097
+
3098
+ /* Disabled state */
3099
+ .muka-toggle--disabled .muka-toggle__track {
3100
+ background-color: var(--toggle-track-color-disabled);
3101
+ box-shadow: none;
3102
+ }
3103
+
3104
+ .muka-toggle--disabled .muka-toggle__knob {
3105
+ background-color: var(--toggle-knob-color-disabled);
3106
+ box-shadow: none;
3107
+ }
3108
+
3109
+ /* Divider */
3110
+ .muka-toggle__divider {
3111
+ position: absolute;
3112
+ bottom: 0;
3113
+ left: 0;
3114
+ right: 0;
3115
+ height: 1px;
3116
+ background-color: var(--color-border-muted);
3117
+ }
3118
+
3119
+
3120
+ /* Toast */
3121
+ /* Toast Component Styles - Using Muka Design Tokens */
3122
+
3123
+ .muka-toast {
3124
+ display: flex;
3125
+ align-items: flex-start;
2963
3126
  gap: var(--toast-gap);
2964
3127
  padding: var(--toast-padding-y) var(--toast-padding-x);
2965
3128
  border-radius: var(--toast-radius);
@@ -3679,166 +3842,249 @@ body {
3679
3842
  }
3680
3843
 
3681
3844
 
3682
- /* Toggle */
3683
- /* Toggle Component Styles - Using Muka Design Tokens */
3845
+ /* Textarea */
3846
+ /* Textarea Component Styles - Using Muka Design Tokens */
3684
3847
 
3685
- /* Wrapper container */
3686
- .muka-toggle {
3687
- display: flex;
3688
- align-items: center;
3848
+ .muka-textarea {
3849
+ display: inline-flex;
3850
+ flex-direction: column;
3689
3851
  gap: var(--spacing-2);
3690
- position: relative;
3691
- padding: var(--spacing-4) 0;
3692
- }
3693
-
3694
- .muka-toggle--with-caption {
3695
- padding: var(--spacing-5) 0;
3696
- }
3697
-
3698
- .muka-toggle--disabled {
3699
- opacity: 0.6;
3700
3852
  }
3701
3853
 
3702
- /* Icon */
3703
- .muka-toggle__icon {
3704
- display: flex;
3705
- align-items: center;
3706
- justify-content: center;
3707
- flex-shrink: 0;
3708
- width: var(--icon-size-default);
3709
- height: var(--icon-size-default);
3854
+ /* Label */
3855
+ .muka-textarea__label {
3710
3856
  color: var(--color-text-default-default);
3857
+ cursor: pointer;
3711
3858
  }
3712
3859
 
3713
- .muka-toggle__icon svg {
3714
- width: 100%;
3715
- height: 100%;
3716
- }
3717
-
3718
- /* Content area (label + caption) */
3719
- .muka-toggle__content {
3720
- display: flex;
3721
- flex-direction: column;
3722
- flex: 1;
3723
- min-width: 0;
3724
- gap: var(--spacing-1);
3860
+ .muka-textarea__label--sm {
3861
+ font-family: var(--text-label-sm-semibold-fontFamily);
3862
+ font-weight: var(--text-label-sm-semibold-fontWeight);
3863
+ font-size: var(--text-label-sm-semibold-fontSize);
3864
+ line-height: var(--text-label-sm-semibold-lineHeight);
3725
3865
  }
3726
3866
 
3727
- /* Label */
3728
- .muka-toggle__label {
3729
- font-family: var(--text-label-lg-regular-fontFamily);
3730
- font-weight: var(--text-label-lg-regular-fontWeight);
3731
- font-size: var(--text-label-lg-regular-fontSize);
3732
- line-height: var(--text-label-lg-regular-lineHeight);
3733
- color: var(--color-text-default-default);
3734
- cursor: pointer;
3867
+ .muka-textarea__label--md {
3868
+ font-family: var(--text-label-md-semibold-fontFamily);
3869
+ font-weight: var(--text-label-md-semibold-fontWeight);
3870
+ font-size: var(--text-label-md-semibold-fontSize);
3871
+ line-height: var(--text-label-md-semibold-lineHeight);
3735
3872
  }
3736
3873
 
3737
- .muka-toggle--with-caption .muka-toggle__label {
3874
+ .muka-textarea__label--lg {
3738
3875
  font-family: var(--text-label-lg-semibold-fontFamily);
3739
3876
  font-weight: var(--text-label-lg-semibold-fontWeight);
3740
3877
  font-size: var(--text-label-lg-semibold-fontSize);
3741
3878
  line-height: var(--text-label-lg-semibold-lineHeight);
3742
3879
  }
3743
3880
 
3744
- .muka-toggle--disabled .muka-toggle__label {
3745
- color: var(--color-text-subtle-default);
3746
- cursor: not-allowed;
3747
- }
3748
-
3749
- /* Caption */
3750
- .muka-toggle__caption {
3751
- font-family: var(--text-body-base-regular-fontFamily);
3752
- font-weight: var(--text-body-base-regular-fontWeight);
3753
- font-size: var(--text-body-base-regular-fontSize);
3754
- line-height: var(--text-body-base-regular-lineHeight);
3755
- color: var(--color-text-subtle-default);
3756
- }
3757
-
3758
- /* Switch container */
3759
- .muka-toggle__switch {
3760
- position: relative;
3761
- display: inline-flex;
3762
- flex-shrink: 0;
3763
- cursor: pointer;
3881
+ .muka-textarea__required {
3882
+ color: var(--color-state-error-default);
3764
3883
  }
3765
3884
 
3766
- .muka-toggle--disabled .muka-toggle__switch {
3767
- cursor: not-allowed;
3885
+ /* Field container */
3886
+ .muka-textarea__field {
3887
+ display: flex;
3888
+ background-color: var(--input-field-color-default-background);
3889
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
3890
+ border-radius: var(--input-field-radius-md);
3891
+ padding: var(--input-field-padding-y) var(--input-field-padding-x);
3892
+ transition: border-color 0.2s ease, background-color 0.2s ease;
3893
+ box-sizing: border-box;
3768
3894
  }
3769
3895
 
3770
- /* Hidden native input */
3771
- .muka-toggle__input {
3772
- position: absolute;
3773
- width: 1px;
3774
- height: 1px;
3775
- padding: 0;
3776
- margin: -1px;
3777
- overflow: hidden;
3778
- clip: rect(0, 0, 0, 0);
3779
- white-space: nowrap;
3780
- border: 0;
3896
+ .muka-textarea__field--sm {
3897
+ min-height: var(--input-textarea-height-sm);
3898
+ border-radius: var(--input-field-radius-sm);
3781
3899
  }
3782
3900
 
3783
- /* Track (background pill) */
3784
- .muka-toggle__track {
3785
- display: flex;
3786
- align-items: center;
3787
- width: var(--toggle-track-width);
3788
- height: var(--toggle-track-height);
3789
- border-radius: var(--toggle-track-radius);
3790
- background-color: var(--toggle-track-color-off);
3791
- transition: background-color 0.2s ease;
3792
- box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.16);
3793
- position: relative;
3901
+ .muka-textarea__field--md {
3902
+ min-height: var(--input-textarea-height-default);
3903
+ border-radius: var(--input-field-radius-md);
3794
3904
  }
3795
3905
 
3796
- /* Knob (sliding circle) */
3797
- .muka-toggle__knob {
3798
- position: absolute;
3799
- width: var(--toggle-knob-size);
3800
- height: var(--toggle-knob-size);
3801
- border-radius: var(--border-radius-full);
3802
- background-color: var(--toggle-knob-color-default);
3803
- box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);
3804
- left: var(--toggle-knob-offset);
3805
- transition: left 0.2s ease, transform 0.2s ease;
3906
+ .muka-textarea__field--lg {
3907
+ min-height: var(--input-textarea-height-lg);
3908
+ border-radius: var(--input-field-radius-lg);
3806
3909
  }
3807
3910
 
3808
3911
  /* Focus state */
3809
- .muka-toggle__input:focus-visible + .muka-toggle__track {
3810
- outline: 2px solid var(--color-border-focus);
3811
- outline-offset: 2px;
3812
- }
3813
-
3814
- /* Checked (on) state */
3815
- .muka-toggle__input:checked + .muka-toggle__track {
3816
- background-color: var(--toggle-track-color-on);
3912
+ .muka-textarea__field--focused:not(.muka-textarea__field--disabled) {
3913
+ border-width: var(--border-width-bold);
3914
+ border-color: var(--input-field-color-focus-border);
3915
+ background-color: var(--input-field-color-focus-background);
3916
+ padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
3817
3917
  }
3818
3918
 
3819
- .muka-toggle__input:checked + .muka-toggle__track .muka-toggle__knob {
3820
- left: calc(var(--toggle-track-width) - var(--toggle-knob-size) - var(--toggle-knob-offset));
3919
+ /* Error state */
3920
+ .muka-textarea__field--error:not(.muka-textarea__field--disabled) {
3921
+ border-width: var(--border-width-bold);
3922
+ border-color: var(--input-field-color-error-border);
3923
+ background-color: var(--input-field-color-error-background);
3924
+ padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
3821
3925
  }
3822
3926
 
3823
3927
  /* Disabled state */
3824
- .muka-toggle--disabled .muka-toggle__track {
3825
- background-color: var(--toggle-track-color-disabled);
3826
- box-shadow: none;
3827
- }
3828
-
3829
- .muka-toggle--disabled .muka-toggle__knob {
3830
- background-color: var(--toggle-knob-color-disabled);
3831
- box-shadow: none;
3928
+ .muka-textarea__field--disabled {
3929
+ background-color: var(--input-field-color-disabled-background);
3930
+ border-color: var(--input-field-color-disabled-border);
3931
+ cursor: not-allowed;
3832
3932
  }
3833
3933
 
3834
- /* Divider */
3835
- .muka-toggle__divider {
3836
- position: absolute;
3837
- bottom: 0;
3838
- left: 0;
3839
- right: 0;
3840
- height: 1px;
3841
- background-color: var(--color-border-muted);
3934
+ /* Native textarea */
3935
+ .muka-textarea__native {
3936
+ flex: 1;
3937
+ border: none;
3938
+ outline: none;
3939
+ background: transparent;
3940
+ color: var(--input-field-color-default-foreground);
3941
+ font-family: var(--text-input-md-fontFamily);
3942
+ font-weight: var(--text-input-md-fontWeight);
3943
+ font-size: var(--text-input-md-fontSize);
3944
+ line-height: var(--text-input-md-lineHeight);
3945
+ padding: 0;
3946
+ width: 100%;
3947
+ min-width: 0;
3948
+ }
3949
+
3950
+ .muka-textarea__field--sm .muka-textarea__native {
3951
+ font-family: var(--text-input-sm-fontFamily);
3952
+ font-weight: var(--text-input-sm-fontWeight);
3953
+ font-size: var(--text-input-sm-fontSize);
3954
+ line-height: var(--text-input-sm-lineHeight);
3955
+ }
3956
+
3957
+ .muka-textarea__field--lg .muka-textarea__native {
3958
+ font-family: var(--text-input-lg-fontFamily);
3959
+ font-weight: var(--text-input-lg-fontWeight);
3960
+ font-size: var(--text-input-lg-fontSize);
3961
+ line-height: var(--text-input-lg-lineHeight);
3962
+ }
3963
+
3964
+ .muka-textarea__native::placeholder {
3965
+ color: var(--color-text-subtle-default);
3966
+ }
3967
+
3968
+ .muka-textarea__field--disabled .muka-textarea__native {
3969
+ color: var(--input-field-color-disabled-foreground);
3970
+ cursor: not-allowed;
3971
+ }
3972
+
3973
+ /* Footer (helper/error + count) */
3974
+ .muka-textarea__footer {
3975
+ display: flex;
3976
+ justify-content: space-between;
3977
+ align-items: flex-start;
3978
+ gap: var(--spacing-2);
3979
+ }
3980
+
3981
+ .muka-textarea__helper {
3982
+ font-family: var(--text-label-sm-regular-fontFamily);
3983
+ font-weight: var(--text-label-sm-regular-fontWeight);
3984
+ font-size: var(--text-label-sm-regular-fontSize);
3985
+ line-height: var(--text-label-sm-regular-lineHeight);
3986
+ color: var(--color-text-subtle-default);
3987
+ margin: 0;
3988
+ }
3989
+
3990
+ .muka-textarea__error {
3991
+ font-family: var(--text-label-sm-regular-fontFamily);
3992
+ font-weight: var(--text-label-sm-regular-fontWeight);
3993
+ font-size: var(--text-label-sm-regular-fontSize);
3994
+ line-height: var(--text-label-sm-regular-lineHeight);
3995
+ color: var(--color-state-error-default);
3996
+ margin: 0;
3997
+ }
3998
+
3999
+ .muka-textarea__count {
4000
+ font-family: var(--text-label-sm-regular-fontFamily);
4001
+ font-weight: var(--text-label-sm-regular-fontWeight);
4002
+ font-size: var(--text-label-sm-regular-fontSize);
4003
+ line-height: var(--text-label-sm-regular-lineHeight);
4004
+ color: var(--color-text-subtle-default);
4005
+ margin-left: auto;
4006
+ }
4007
+
4008
+
4009
+ /* TextLink */
4010
+ /* TextLink Component Styles - Using Muka Design Tokens */
4011
+
4012
+ .muka-text-link {
4013
+ display: inline;
4014
+ cursor: pointer;
4015
+ text-decoration: underline;
4016
+ /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
4017
+ text-underline-offset: 0.2em;
4018
+ text-decoration-thickness: from-font;
4019
+ /* Rounds the focus ring's corners; the link itself has no visible box. */
4020
+ border-radius: var(--border-radius-sm);
4021
+ transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
4022
+ }
4023
+
4024
+ /* ─── Sizes ───────────────────────────────────────────────
4025
+ Mirrors the body text scale so a link matches the copy it sits in. */
4026
+ .muka-text-link--sm {
4027
+ font-family: var(--text-body-sm-regular-fontFamily);
4028
+ font-weight: var(--text-body-sm-regular-fontWeight);
4029
+ font-size: var(--text-body-sm-regular-fontSize);
4030
+ line-height: var(--text-body-sm-regular-lineHeight);
4031
+ }
4032
+
4033
+ .muka-text-link--base {
4034
+ font-family: var(--text-body-base-regular-fontFamily);
4035
+ font-weight: var(--text-body-base-regular-fontWeight);
4036
+ font-size: var(--text-body-base-regular-fontSize);
4037
+ line-height: var(--text-body-base-regular-lineHeight);
4038
+ }
4039
+
4040
+ .muka-text-link--lg {
4041
+ font-family: var(--text-body-lg-regular-fontFamily);
4042
+ font-weight: var(--text-body-lg-regular-fontWeight);
4043
+ font-size: var(--text-body-lg-regular-fontSize);
4044
+ line-height: var(--text-body-lg-regular-lineHeight);
4045
+ }
4046
+
4047
+ /* ─── Variant: default (accent) ───────────────────────────
4048
+ Visited repeats the default colour on purpose: the design treats visited and
4049
+ default the same, and pinning it stops the browser's purple from showing. */
4050
+ .muka-text-link--default,
4051
+ .muka-text-link--default:visited {
4052
+ color: var(--color-text-action-default);
4053
+ }
4054
+
4055
+ .muka-text-link--default:hover,
4056
+ .muka-text-link--default:focus-visible {
4057
+ color: var(--color-text-action-hover);
4058
+ }
4059
+
4060
+ .muka-text-link--default:active {
4061
+ color: var(--color-text-action-pressed);
4062
+ }
4063
+
4064
+ /* ─── Variant: subtle (neutral) ───────────────────────────
4065
+ Hover, focus and pressed all darken to the default text colour. */
4066
+ .muka-text-link--subtle,
4067
+ .muka-text-link--subtle:visited {
4068
+ color: var(--color-text-subtle-default);
4069
+ }
4070
+
4071
+ .muka-text-link--subtle:hover,
4072
+ .muka-text-link--subtle:focus-visible,
4073
+ .muka-text-link--subtle:active {
4074
+ color: var(--color-text-default-default);
4075
+ }
4076
+
4077
+ /* ─── Focus ───────────────────────────────────────────────
4078
+ Same ring as every other focusable Muka component. */
4079
+ .muka-text-link:focus-visible {
4080
+ outline: 2px solid var(--color-border-focus);
4081
+ outline-offset: 2px;
4082
+ }
4083
+
4084
+ @media (prefers-reduced-motion: reduce) {
4085
+ .muka-text-link {
4086
+ transition: none;
4087
+ }
3842
4088
  }
3843
4089
 
3844
4090
 
@@ -4032,252 +4278,6 @@ body {
4032
4278
  }
4033
4279
 
4034
4280
 
4035
- /* Textarea */
4036
- /* Textarea Component Styles - Using Muka Design Tokens */
4037
-
4038
- .muka-textarea {
4039
- display: inline-flex;
4040
- flex-direction: column;
4041
- gap: var(--spacing-2);
4042
- }
4043
-
4044
- /* Label */
4045
- .muka-textarea__label {
4046
- color: var(--color-text-default-default);
4047
- cursor: pointer;
4048
- }
4049
-
4050
- .muka-textarea__label--sm {
4051
- font-family: var(--text-label-sm-semibold-fontFamily);
4052
- font-weight: var(--text-label-sm-semibold-fontWeight);
4053
- font-size: var(--text-label-sm-semibold-fontSize);
4054
- line-height: var(--text-label-sm-semibold-lineHeight);
4055
- }
4056
-
4057
- .muka-textarea__label--md {
4058
- font-family: var(--text-label-md-semibold-fontFamily);
4059
- font-weight: var(--text-label-md-semibold-fontWeight);
4060
- font-size: var(--text-label-md-semibold-fontSize);
4061
- line-height: var(--text-label-md-semibold-lineHeight);
4062
- }
4063
-
4064
- .muka-textarea__label--lg {
4065
- font-family: var(--text-label-lg-semibold-fontFamily);
4066
- font-weight: var(--text-label-lg-semibold-fontWeight);
4067
- font-size: var(--text-label-lg-semibold-fontSize);
4068
- line-height: var(--text-label-lg-semibold-lineHeight);
4069
- }
4070
-
4071
- .muka-textarea__required {
4072
- color: var(--color-state-error-default);
4073
- }
4074
-
4075
- /* Field container */
4076
- .muka-textarea__field {
4077
- display: flex;
4078
- background-color: var(--input-field-color-default-background);
4079
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
4080
- border-radius: var(--input-field-radius-md);
4081
- padding: var(--input-field-padding-y) var(--input-field-padding-x);
4082
- transition: border-color 0.2s ease, background-color 0.2s ease;
4083
- box-sizing: border-box;
4084
- }
4085
-
4086
- .muka-textarea__field--sm {
4087
- min-height: var(--input-textarea-height-sm);
4088
- border-radius: var(--input-field-radius-sm);
4089
- }
4090
-
4091
- .muka-textarea__field--md {
4092
- min-height: var(--input-textarea-height-default);
4093
- border-radius: var(--input-field-radius-md);
4094
- }
4095
-
4096
- .muka-textarea__field--lg {
4097
- min-height: var(--input-textarea-height-lg);
4098
- border-radius: var(--input-field-radius-lg);
4099
- }
4100
-
4101
- /* Focus state */
4102
- .muka-textarea__field--focused:not(.muka-textarea__field--disabled) {
4103
- border-width: var(--border-width-bold);
4104
- border-color: var(--input-field-color-focus-border);
4105
- background-color: var(--input-field-color-focus-background);
4106
- padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
4107
- }
4108
-
4109
- /* Error state */
4110
- .muka-textarea__field--error:not(.muka-textarea__field--disabled) {
4111
- border-width: var(--border-width-bold);
4112
- border-color: var(--input-field-color-error-border);
4113
- background-color: var(--input-field-color-error-background);
4114
- padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
4115
- }
4116
-
4117
- /* Disabled state */
4118
- .muka-textarea__field--disabled {
4119
- background-color: var(--input-field-color-disabled-background);
4120
- border-color: var(--input-field-color-disabled-border);
4121
- cursor: not-allowed;
4122
- }
4123
-
4124
- /* Native textarea */
4125
- .muka-textarea__native {
4126
- flex: 1;
4127
- border: none;
4128
- outline: none;
4129
- background: transparent;
4130
- color: var(--input-field-color-default-foreground);
4131
- font-family: var(--text-input-md-fontFamily);
4132
- font-weight: var(--text-input-md-fontWeight);
4133
- font-size: var(--text-input-md-fontSize);
4134
- line-height: var(--text-input-md-lineHeight);
4135
- padding: 0;
4136
- width: 100%;
4137
- min-width: 0;
4138
- }
4139
-
4140
- .muka-textarea__field--sm .muka-textarea__native {
4141
- font-family: var(--text-input-sm-fontFamily);
4142
- font-weight: var(--text-input-sm-fontWeight);
4143
- font-size: var(--text-input-sm-fontSize);
4144
- line-height: var(--text-input-sm-lineHeight);
4145
- }
4146
-
4147
- .muka-textarea__field--lg .muka-textarea__native {
4148
- font-family: var(--text-input-lg-fontFamily);
4149
- font-weight: var(--text-input-lg-fontWeight);
4150
- font-size: var(--text-input-lg-fontSize);
4151
- line-height: var(--text-input-lg-lineHeight);
4152
- }
4153
-
4154
- .muka-textarea__native::placeholder {
4155
- color: var(--color-text-subtle-default);
4156
- }
4157
-
4158
- .muka-textarea__field--disabled .muka-textarea__native {
4159
- color: var(--input-field-color-disabled-foreground);
4160
- cursor: not-allowed;
4161
- }
4162
-
4163
- /* Footer (helper/error + count) */
4164
- .muka-textarea__footer {
4165
- display: flex;
4166
- justify-content: space-between;
4167
- align-items: flex-start;
4168
- gap: var(--spacing-2);
4169
- }
4170
-
4171
- .muka-textarea__helper {
4172
- font-family: var(--text-label-sm-regular-fontFamily);
4173
- font-weight: var(--text-label-sm-regular-fontWeight);
4174
- font-size: var(--text-label-sm-regular-fontSize);
4175
- line-height: var(--text-label-sm-regular-lineHeight);
4176
- color: var(--color-text-subtle-default);
4177
- margin: 0;
4178
- }
4179
-
4180
- .muka-textarea__error {
4181
- font-family: var(--text-label-sm-regular-fontFamily);
4182
- font-weight: var(--text-label-sm-regular-fontWeight);
4183
- font-size: var(--text-label-sm-regular-fontSize);
4184
- line-height: var(--text-label-sm-regular-lineHeight);
4185
- color: var(--color-state-error-default);
4186
- margin: 0;
4187
- }
4188
-
4189
- .muka-textarea__count {
4190
- font-family: var(--text-label-sm-regular-fontFamily);
4191
- font-weight: var(--text-label-sm-regular-fontWeight);
4192
- font-size: var(--text-label-sm-regular-fontSize);
4193
- line-height: var(--text-label-sm-regular-lineHeight);
4194
- color: var(--color-text-subtle-default);
4195
- margin-left: auto;
4196
- }
4197
-
4198
-
4199
- /* TextLink */
4200
- /* TextLink Component Styles - Using Muka Design Tokens */
4201
-
4202
- .muka-text-link {
4203
- display: inline;
4204
- cursor: pointer;
4205
- text-decoration: underline;
4206
- /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
4207
- text-underline-offset: 0.2em;
4208
- text-decoration-thickness: from-font;
4209
- /* Rounds the focus ring's corners; the link itself has no visible box. */
4210
- border-radius: var(--border-radius-sm);
4211
- transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
4212
- }
4213
-
4214
- /* ─── Sizes ───────────────────────────────────────────────
4215
- Mirrors the body text scale so a link matches the copy it sits in. */
4216
- .muka-text-link--sm {
4217
- font-family: var(--text-body-sm-regular-fontFamily);
4218
- font-weight: var(--text-body-sm-regular-fontWeight);
4219
- font-size: var(--text-body-sm-regular-fontSize);
4220
- line-height: var(--text-body-sm-regular-lineHeight);
4221
- }
4222
-
4223
- .muka-text-link--base {
4224
- font-family: var(--text-body-base-regular-fontFamily);
4225
- font-weight: var(--text-body-base-regular-fontWeight);
4226
- font-size: var(--text-body-base-regular-fontSize);
4227
- line-height: var(--text-body-base-regular-lineHeight);
4228
- }
4229
-
4230
- .muka-text-link--lg {
4231
- font-family: var(--text-body-lg-regular-fontFamily);
4232
- font-weight: var(--text-body-lg-regular-fontWeight);
4233
- font-size: var(--text-body-lg-regular-fontSize);
4234
- line-height: var(--text-body-lg-regular-lineHeight);
4235
- }
4236
-
4237
- /* ─── Variant: default (accent) ───────────────────────────
4238
- Visited repeats the default colour on purpose: the design treats visited and
4239
- default the same, and pinning it stops the browser's purple from showing. */
4240
- .muka-text-link--default,
4241
- .muka-text-link--default:visited {
4242
- color: var(--color-text-action-default);
4243
- }
4244
-
4245
- .muka-text-link--default:hover,
4246
- .muka-text-link--default:focus-visible {
4247
- color: var(--color-text-action-hover);
4248
- }
4249
-
4250
- .muka-text-link--default:active {
4251
- color: var(--color-text-action-pressed);
4252
- }
4253
-
4254
- /* ─── Variant: subtle (neutral) ───────────────────────────
4255
- Hover, focus and pressed all darken to the default text colour. */
4256
- .muka-text-link--subtle,
4257
- .muka-text-link--subtle:visited {
4258
- color: var(--color-text-subtle-default);
4259
- }
4260
-
4261
- .muka-text-link--subtle:hover,
4262
- .muka-text-link--subtle:focus-visible,
4263
- .muka-text-link--subtle:active {
4264
- color: var(--color-text-default-default);
4265
- }
4266
-
4267
- /* ─── Focus ───────────────────────────────────────────────
4268
- Same ring as every other focusable Muka component. */
4269
- .muka-text-link:focus-visible {
4270
- outline: 2px solid var(--color-border-focus);
4271
- outline-offset: 2px;
4272
- }
4273
-
4274
- @media (prefers-reduced-motion: reduce) {
4275
- .muka-text-link {
4276
- transition: none;
4277
- }
4278
- }
4279
-
4280
-
4281
4281
  /* Table */
4282
4282
  /* Table Component Styles - Using Muka Design Tokens */
4283
4283
 
@@ -4568,65 +4568,173 @@ body {
4568
4568
  text-align: left;
4569
4569
  }
4570
4570
 
4571
- .muka-table__cell--center,
4572
- .muka-table__header-cell--center {
4573
- text-align: center;
4571
+ .muka-table__cell--center,
4572
+ .muka-table__header-cell--center {
4573
+ text-align: center;
4574
+ }
4575
+
4576
+ .muka-table__cell--right,
4577
+ .muka-table__header-cell--right {
4578
+ text-align: right;
4579
+ }
4580
+
4581
+ /* ========================================
4582
+ HEADER CELLS
4583
+ ======================================== */
4584
+
4585
+ .muka-table__header-cell {
4586
+ font-family: var(--text-body-base-bold-fontFamily);
4587
+ font-weight: var(--text-body-base-bold-fontWeight);
4588
+ font-size: var(--text-body-base-bold-fontSize);
4589
+ line-height: var(--text-body-base-bold-lineHeight);
4590
+ color: var(--color-text-default-default);
4591
+ white-space: nowrap;
4592
+ }
4593
+
4594
+ .muka-table__header-content {
4595
+ display: inline-flex;
4596
+ align-items: center;
4597
+ gap: var(--spacing-1);
4598
+ }
4599
+
4600
+ /* Sortable */
4601
+ .muka-table__header-cell--sortable {
4602
+ cursor: pointer;
4603
+ user-select: none;
4604
+ }
4605
+
4606
+ .muka-table__header-cell--sortable:hover {
4607
+ color: var(--color-text-default-default);
4608
+ }
4609
+
4610
+ .muka-table__header-cell--sortable:focus-visible {
4611
+ outline: 2px solid var(--color-action-default);
4612
+ outline-offset: -2px;
4613
+ }
4614
+
4615
+ /* Sort icon */
4616
+ .muka-table__sort-icon {
4617
+ width: 1em;
4618
+ height: 1em;
4619
+ opacity: 0.4;
4620
+ transition: opacity 0.2s, transform 0.2s;
4621
+ }
4622
+
4623
+ .muka-table__header-cell--sortable:hover .muka-table__sort-icon {
4624
+ opacity: 0.7;
4625
+ }
4626
+
4627
+ .muka-table__sort-icon--asc,
4628
+ .muka-table__sort-icon--desc {
4629
+ opacity: 1;
4630
+ }
4631
+
4632
+
4633
+ /* SwipeActions */
4634
+ /* SwipeActions Component Styles */
4635
+
4636
+ .muka-swipe-actions {
4637
+ position: relative;
4638
+ overflow: hidden;
4639
+ touch-action: pan-y;
4640
+ -webkit-user-select: none;
4641
+ user-select: none;
4642
+ background-color: var(--color-surface-level3);
4643
+ }
4644
+
4645
+ .muka-swipe-actions--disabled {
4646
+ touch-action: auto;
4647
+ }
4648
+
4649
+ /* ─── Row that holds the actual content ────────────────── */
4650
+
4651
+ .muka-swipe-actions__row {
4652
+ position: relative;
4653
+ z-index: 1;
4654
+ background-color: inherit;
4655
+ will-change: transform;
4656
+ }
4657
+
4658
+ /* ─── Action panels — sit beneath the row ──────────────── */
4659
+
4660
+ .muka-swipe-actions__panel {
4661
+ position: absolute;
4662
+ top: 0;
4663
+ bottom: 0;
4664
+ display: flex;
4665
+ align-items: stretch;
4666
+ z-index: 0;
4667
+ }
4668
+
4669
+ .muka-swipe-actions__panel--left {
4670
+ left: 0;
4671
+ }
4672
+
4673
+ .muka-swipe-actions__panel--right {
4674
+ right: 0;
4574
4675
  }
4575
4676
 
4576
- .muka-table__cell--right,
4577
- .muka-table__header-cell--right {
4578
- text-align: right;
4677
+ /* ─── Single action button ─────────────────────────────── */
4678
+
4679
+ .muka-swipe-actions__button {
4680
+ display: flex;
4681
+ flex-direction: column;
4682
+ align-items: center;
4683
+ justify-content: center;
4684
+ gap: var(--spacing-1);
4685
+ border: none;
4686
+ cursor: pointer;
4687
+ padding: var(--spacing-2);
4688
+ background-color: var(--color-surface-level2);
4689
+ color: var(--color-text-default-default);
4690
+ font-family: var(--text-label-sm-semibold-fontFamily);
4691
+ font-weight: var(--text-label-sm-semibold-fontWeight);
4692
+ font-size: var(--text-label-sm-semibold-fontSize);
4693
+ line-height: var(--text-label-sm-semibold-lineHeight);
4694
+ -webkit-tap-highlight-color: transparent;
4695
+ transition: filter 0.12s ease;
4579
4696
  }
4580
4697
 
4581
- /* ========================================
4582
- HEADER CELLS
4583
- ======================================== */
4698
+ .muka-swipe-actions__button:hover {
4699
+ filter: brightness(0.95);
4700
+ }
4584
4701
 
4585
- .muka-table__header-cell {
4586
- font-family: var(--text-body-base-bold-fontFamily);
4587
- font-weight: var(--text-body-base-bold-fontWeight);
4588
- font-size: var(--text-body-base-bold-fontSize);
4589
- line-height: var(--text-body-base-bold-lineHeight);
4590
- color: var(--color-text-default-default);
4591
- white-space: nowrap;
4702
+ .muka-swipe-actions__button:focus-visible {
4703
+ outline: 2px solid var(--color-action-default);
4704
+ outline-offset: -2px;
4592
4705
  }
4593
4706
 
4594
- .muka-table__header-content {
4707
+ .muka-swipe-actions__button-icon {
4595
4708
  display: inline-flex;
4596
4709
  align-items: center;
4597
- gap: var(--spacing-1);
4710
+ justify-content: center;
4598
4711
  }
4599
4712
 
4600
- /* Sortable */
4601
- .muka-table__header-cell--sortable {
4602
- cursor: pointer;
4603
- user-select: none;
4604
- }
4713
+ /* ─── Color variants ───────────────────────────────────── */
4605
4714
 
4606
- .muka-table__header-cell--sortable:hover {
4715
+ .muka-swipe-actions__button--neutral {
4716
+ background-color: var(--color-surface-level2);
4607
4717
  color: var(--color-text-default-default);
4608
4718
  }
4609
4719
 
4610
- .muka-table__header-cell--sortable:focus-visible {
4611
- outline: 2px solid var(--color-action-default);
4612
- outline-offset: -2px;
4720
+ .muka-swipe-actions__button--primary {
4721
+ background-color: var(--color-action-default);
4722
+ color: var(--color-text-default-inverse);
4613
4723
  }
4614
4724
 
4615
- /* Sort icon */
4616
- .muka-table__sort-icon {
4617
- width: 1em;
4618
- height: 1em;
4619
- opacity: 0.4;
4620
- transition: opacity 0.2s, transform 0.2s;
4725
+ .muka-swipe-actions__button--success {
4726
+ background-color: var(--color-state-success-default);
4727
+ color: var(--color-text-default-inverse);
4621
4728
  }
4622
4729
 
4623
- .muka-table__header-cell--sortable:hover .muka-table__sort-icon {
4624
- opacity: 0.7;
4730
+ .muka-swipe-actions__button--warning {
4731
+ background-color: var(--color-state-warning-default);
4732
+ color: var(--color-text-default-default);
4625
4733
  }
4626
4734
 
4627
- .muka-table__sort-icon--asc,
4628
- .muka-table__sort-icon--desc {
4629
- opacity: 1;
4735
+ .muka-swipe-actions__button--destructive {
4736
+ background-color: var(--color-state-error-default);
4737
+ color: var(--color-text-default-inverse);
4630
4738
  }
4631
4739
 
4632
4740
 
@@ -4793,114 +4901,6 @@ body {
4793
4901
  }
4794
4902
 
4795
4903
 
4796
- /* SwipeActions */
4797
- /* SwipeActions Component Styles */
4798
-
4799
- .muka-swipe-actions {
4800
- position: relative;
4801
- overflow: hidden;
4802
- touch-action: pan-y;
4803
- -webkit-user-select: none;
4804
- user-select: none;
4805
- background-color: var(--color-surface-level3);
4806
- }
4807
-
4808
- .muka-swipe-actions--disabled {
4809
- touch-action: auto;
4810
- }
4811
-
4812
- /* ─── Row that holds the actual content ────────────────── */
4813
-
4814
- .muka-swipe-actions__row {
4815
- position: relative;
4816
- z-index: 1;
4817
- background-color: inherit;
4818
- will-change: transform;
4819
- }
4820
-
4821
- /* ─── Action panels — sit beneath the row ──────────────── */
4822
-
4823
- .muka-swipe-actions__panel {
4824
- position: absolute;
4825
- top: 0;
4826
- bottom: 0;
4827
- display: flex;
4828
- align-items: stretch;
4829
- z-index: 0;
4830
- }
4831
-
4832
- .muka-swipe-actions__panel--left {
4833
- left: 0;
4834
- }
4835
-
4836
- .muka-swipe-actions__panel--right {
4837
- right: 0;
4838
- }
4839
-
4840
- /* ─── Single action button ─────────────────────────────── */
4841
-
4842
- .muka-swipe-actions__button {
4843
- display: flex;
4844
- flex-direction: column;
4845
- align-items: center;
4846
- justify-content: center;
4847
- gap: var(--spacing-1);
4848
- border: none;
4849
- cursor: pointer;
4850
- padding: var(--spacing-2);
4851
- background-color: var(--color-surface-level2);
4852
- color: var(--color-text-default-default);
4853
- font-family: var(--text-label-sm-semibold-fontFamily);
4854
- font-weight: var(--text-label-sm-semibold-fontWeight);
4855
- font-size: var(--text-label-sm-semibold-fontSize);
4856
- line-height: var(--text-label-sm-semibold-lineHeight);
4857
- -webkit-tap-highlight-color: transparent;
4858
- transition: filter 0.12s ease;
4859
- }
4860
-
4861
- .muka-swipe-actions__button:hover {
4862
- filter: brightness(0.95);
4863
- }
4864
-
4865
- .muka-swipe-actions__button:focus-visible {
4866
- outline: 2px solid var(--color-action-default);
4867
- outline-offset: -2px;
4868
- }
4869
-
4870
- .muka-swipe-actions__button-icon {
4871
- display: inline-flex;
4872
- align-items: center;
4873
- justify-content: center;
4874
- }
4875
-
4876
- /* ─── Color variants ───────────────────────────────────── */
4877
-
4878
- .muka-swipe-actions__button--neutral {
4879
- background-color: var(--color-surface-level2);
4880
- color: var(--color-text-default-default);
4881
- }
4882
-
4883
- .muka-swipe-actions__button--primary {
4884
- background-color: var(--color-action-default);
4885
- color: var(--color-text-default-inverse);
4886
- }
4887
-
4888
- .muka-swipe-actions__button--success {
4889
- background-color: var(--color-state-success-default);
4890
- color: var(--color-text-default-inverse);
4891
- }
4892
-
4893
- .muka-swipe-actions__button--warning {
4894
- background-color: var(--color-state-warning-default);
4895
- color: var(--color-text-default-default);
4896
- }
4897
-
4898
- .muka-swipe-actions__button--destructive {
4899
- background-color: var(--color-state-error-default);
4900
- color: var(--color-text-default-inverse);
4901
- }
4902
-
4903
-
4904
4904
  /* SocialSignInButton */
4905
4905
  /*
4906
4906
  * SocialSignInButton lockup colors are provider-mandated (Apple HIG /
@@ -10821,6 +10821,38 @@ li.muka-listitem {
10821
10821
  }
10822
10822
 
10823
10823
 
10824
+ /* DatePicker */
10825
+ /* DatePicker — compact native date field. */
10826
+ /* Field/label/helper styling is inherited from ../Input/Input.css. */
10827
+
10828
+ /* Adopt the field typography on the native date input. */
10829
+ .muka-datepicker__field .muka-input__native {
10830
+ font-family: var(--text-input-md-fontFamily);
10831
+ font-size: var(--text-input-md-fontSize);
10832
+ line-height: var(--text-input-md-lineHeight);
10833
+ }
10834
+
10835
+ .muka-datepicker__field--sm .muka-input__native {
10836
+ font-family: var(--text-input-sm-fontFamily);
10837
+ font-size: var(--text-input-sm-fontSize);
10838
+ line-height: var(--text-input-sm-lineHeight);
10839
+ }
10840
+
10841
+ /* Tint the browser calendar indicator to match the field foreground. */
10842
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
10843
+ cursor: pointer;
10844
+ opacity: 0.6;
10845
+ }
10846
+
10847
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
10848
+ opacity: 1;
10849
+ }
10850
+
10851
+ .muka-datepicker__field .muka-input__native:disabled {
10852
+ cursor: not-allowed;
10853
+ }
10854
+
10855
+
10824
10856
  /* Dialog */
10825
10857
  /* Dialog Component Styles */
10826
10858
 
@@ -11082,42 +11114,10 @@ li.muka-listitem {
11082
11114
  box-shadow: var(--shadow-level2);
11083
11115
  }
11084
11116
 
11085
- .muka-dialog .muka-bottombar {
11086
- position: relative;
11087
- z-index: 1;
11088
- box-shadow: var(--shadow-level2);
11089
- }
11090
-
11091
-
11092
- /* DatePicker */
11093
- /* DatePicker — compact native date field. */
11094
- /* Field/label/helper styling is inherited from ../Input/Input.css. */
11095
-
11096
- /* Adopt the field typography on the native date input. */
11097
- .muka-datepicker__field .muka-input__native {
11098
- font-family: var(--text-input-md-fontFamily);
11099
- font-size: var(--text-input-md-fontSize);
11100
- line-height: var(--text-input-md-lineHeight);
11101
- }
11102
-
11103
- .muka-datepicker__field--sm .muka-input__native {
11104
- font-family: var(--text-input-sm-fontFamily);
11105
- font-size: var(--text-input-sm-fontSize);
11106
- line-height: var(--text-input-sm-lineHeight);
11107
- }
11108
-
11109
- /* Tint the browser calendar indicator to match the field foreground. */
11110
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
11111
- cursor: pointer;
11112
- opacity: 0.6;
11113
- }
11114
-
11115
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
11116
- opacity: 1;
11117
- }
11118
-
11119
- .muka-datepicker__field .muka-input__native:disabled {
11120
- cursor: not-allowed;
11117
+ .muka-dialog .muka-bottombar {
11118
+ position: relative;
11119
+ z-index: 1;
11120
+ box-shadow: var(--shadow-level2);
11121
11121
  }
11122
11122
 
11123
11123
 
@@ -12438,6 +12438,128 @@ li.muka-listitem {
12438
12438
  }
12439
12439
 
12440
12440
 
12441
+ /* ChatPhotoGrid */
12442
+ /* ChatPhotoGrid Component Styles */
12443
+
12444
+ /*
12445
+ * The grid clips to its own radius and the tiles stay square, so only the four
12446
+ * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12447
+ */
12448
+ .muka-chat-photo-grid {
12449
+ display: grid;
12450
+ gap: var(--chatphotogrid-gap);
12451
+ width: 100%;
12452
+ min-width: 0;
12453
+ overflow: hidden;
12454
+ border-radius: var(--chatphotogrid-radius);
12455
+ }
12456
+
12457
+ /* ─── Tiles ────────────────────────────────────────────── */
12458
+
12459
+ .muka-chat-photo-grid__tile {
12460
+ position: relative;
12461
+ display: block;
12462
+ overflow: hidden;
12463
+ min-width: 0;
12464
+ padding: 0;
12465
+ margin: 0;
12466
+ border: none;
12467
+ background-color: var(--chatphotogrid-color-placeholder);
12468
+ aspect-ratio: 1 / 1;
12469
+ }
12470
+
12471
+ button.muka-chat-photo-grid__tile {
12472
+ cursor: pointer;
12473
+ appearance: none;
12474
+ }
12475
+
12476
+ button.muka-chat-photo-grid__tile:focus-visible {
12477
+ outline: var(--border-width-bold) solid var(--color-border-focus);
12478
+ /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12479
+ outline-offset: calc(-1 * var(--border-width-bold));
12480
+ }
12481
+
12482
+ .muka-chat-photo-grid__image {
12483
+ display: block;
12484
+ width: 100%;
12485
+ height: 100%;
12486
+ object-fit: cover;
12487
+ }
12488
+
12489
+ /* ─── Overflow tile ────────────────────────────────────── */
12490
+
12491
+ .muka-chat-photo-grid__overflow {
12492
+ position: absolute;
12493
+ inset: 0;
12494
+ display: flex;
12495
+ align-items: center;
12496
+ justify-content: center;
12497
+ background-color: var(--chatphotogrid-color-overflow-background);
12498
+ color: var(--chatphotogrid-color-overflow-foreground);
12499
+ font-family: var(--text-body-2xl-regular-fontFamily);
12500
+ font-weight: var(--text-body-2xl-regular-fontWeight);
12501
+ font-size: var(--text-body-2xl-regular-fontSize);
12502
+ line-height: var(--text-body-2xl-regular-lineHeight);
12503
+ }
12504
+
12505
+ /* ─── Layouts ──────────────────────────────────────────── */
12506
+
12507
+ .muka-chat-photo-grid--1 {
12508
+ grid-template-columns: 1fr;
12509
+ }
12510
+
12511
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12512
+ aspect-ratio: 4 / 3;
12513
+ }
12514
+
12515
+ .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12516
+ aspect-ratio: 3 / 4;
12517
+ }
12518
+
12519
+ .muka-chat-photo-grid--2 {
12520
+ grid-template-columns: repeat(2, 1fr);
12521
+ }
12522
+
12523
+ .muka-chat-photo-grid--3 {
12524
+ grid-template-columns: repeat(3, 1fr);
12525
+ }
12526
+
12527
+ .muka-chat-photo-grid--4 {
12528
+ grid-template-columns: repeat(2, 1fr);
12529
+ }
12530
+
12531
+ /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12532
+ .muka-chat-photo-grid--5 {
12533
+ grid-template-columns: repeat(6, 1fr);
12534
+ }
12535
+
12536
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12537
+ grid-column: span 3;
12538
+ }
12539
+
12540
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12541
+ grid-column: span 2;
12542
+ }
12543
+
12544
+ .muka-chat-photo-grid--6,
12545
+ .muka-chat-photo-grid--overflow {
12546
+ grid-template-columns: repeat(3, 1fr);
12547
+ }
12548
+
12549
+ /* ─── Print ────────────────────────────────────────────── */
12550
+
12551
+ @media print {
12552
+ .muka-chat-photo-grid {
12553
+ break-inside: avoid;
12554
+ }
12555
+
12556
+ .muka-chat-photo-grid__image {
12557
+ print-color-adjust: exact;
12558
+ -webkit-print-color-adjust: exact;
12559
+ }
12560
+ }
12561
+
12562
+
12441
12563
  /* Checkbox */
12442
12564
  /* Checkbox Component Styles - Using Muka Design Tokens */
12443
12565
 
@@ -12572,158 +12694,36 @@ li.muka-listitem {
12572
12694
  box-shadow: none;
12573
12695
  }
12574
12696
 
12575
- .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12576
- .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12577
- color: var(--checkbox-color-disabled-icon);
12578
- }
12579
-
12580
- /* Label text */
12581
- .muka-checkbox__label {
12582
- font-family: var(--text-label-lg-regular-fontFamily);
12583
- font-weight: var(--text-label-lg-regular-fontWeight);
12584
- font-size: var(--text-label-lg-regular-fontSize);
12585
- line-height: var(--text-label-lg-regular-lineHeight);
12586
- color: var(--color-text-default-default);
12587
- }
12588
-
12589
- .muka-checkbox--sm .muka-checkbox__label {
12590
- font-family: var(--text-label-md-regular-fontFamily);
12591
- font-weight: var(--text-label-md-regular-fontWeight);
12592
- font-size: var(--text-label-md-regular-fontSize);
12593
- line-height: var(--text-label-md-regular-lineHeight);
12594
- }
12595
-
12596
- .muka-checkbox--lg .muka-checkbox__label {
12597
- font-family: var(--text-label-xl-regular-fontFamily);
12598
- font-weight: var(--text-label-xl-regular-fontWeight);
12599
- font-size: var(--text-label-xl-regular-fontSize);
12600
- line-height: var(--text-label-xl-regular-lineHeight);
12601
- }
12602
-
12603
- .muka-checkbox--disabled .muka-checkbox__label {
12604
- color: var(--color-text-subtle-default);
12605
- }
12606
-
12607
-
12608
- /* ChatPhotoGrid */
12609
- /* ChatPhotoGrid Component Styles */
12610
-
12611
- /*
12612
- * The grid clips to its own radius and the tiles stay square, so only the four
12613
- * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12614
- */
12615
- .muka-chat-photo-grid {
12616
- display: grid;
12617
- gap: var(--chatphotogrid-gap);
12618
- width: 100%;
12619
- min-width: 0;
12620
- overflow: hidden;
12621
- border-radius: var(--chatphotogrid-radius);
12622
- }
12623
-
12624
- /* ─── Tiles ────────────────────────────────────────────── */
12625
-
12626
- .muka-chat-photo-grid__tile {
12627
- position: relative;
12628
- display: block;
12629
- overflow: hidden;
12630
- min-width: 0;
12631
- padding: 0;
12632
- margin: 0;
12633
- border: none;
12634
- background-color: var(--chatphotogrid-color-placeholder);
12635
- aspect-ratio: 1 / 1;
12636
- }
12637
-
12638
- button.muka-chat-photo-grid__tile {
12639
- cursor: pointer;
12640
- appearance: none;
12641
- }
12642
-
12643
- button.muka-chat-photo-grid__tile:focus-visible {
12644
- outline: var(--border-width-bold) solid var(--color-border-focus);
12645
- /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12646
- outline-offset: calc(-1 * var(--border-width-bold));
12647
- }
12648
-
12649
- .muka-chat-photo-grid__image {
12650
- display: block;
12651
- width: 100%;
12652
- height: 100%;
12653
- object-fit: cover;
12654
- }
12655
-
12656
- /* ─── Overflow tile ────────────────────────────────────── */
12657
-
12658
- .muka-chat-photo-grid__overflow {
12659
- position: absolute;
12660
- inset: 0;
12661
- display: flex;
12662
- align-items: center;
12663
- justify-content: center;
12664
- background-color: var(--chatphotogrid-color-overflow-background);
12665
- color: var(--chatphotogrid-color-overflow-foreground);
12666
- font-family: var(--text-body-2xl-regular-fontFamily);
12667
- font-weight: var(--text-body-2xl-regular-fontWeight);
12668
- font-size: var(--text-body-2xl-regular-fontSize);
12669
- line-height: var(--text-body-2xl-regular-lineHeight);
12670
- }
12671
-
12672
- /* ─── Layouts ──────────────────────────────────────────── */
12673
-
12674
- .muka-chat-photo-grid--1 {
12675
- grid-template-columns: 1fr;
12676
- }
12677
-
12678
- .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12679
- aspect-ratio: 4 / 3;
12680
- }
12681
-
12682
- .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12683
- aspect-ratio: 3 / 4;
12684
- }
12685
-
12686
- .muka-chat-photo-grid--2 {
12687
- grid-template-columns: repeat(2, 1fr);
12688
- }
12689
-
12690
- .muka-chat-photo-grid--3 {
12691
- grid-template-columns: repeat(3, 1fr);
12692
- }
12693
-
12694
- .muka-chat-photo-grid--4 {
12695
- grid-template-columns: repeat(2, 1fr);
12696
- }
12697
-
12698
- /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12699
- .muka-chat-photo-grid--5 {
12700
- grid-template-columns: repeat(6, 1fr);
12701
- }
12702
-
12703
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12704
- grid-column: span 3;
12697
+ .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12698
+ .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12699
+ color: var(--checkbox-color-disabled-icon);
12705
12700
  }
12706
12701
 
12707
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12708
- grid-column: span 2;
12702
+ /* Label text */
12703
+ .muka-checkbox__label {
12704
+ font-family: var(--text-label-lg-regular-fontFamily);
12705
+ font-weight: var(--text-label-lg-regular-fontWeight);
12706
+ font-size: var(--text-label-lg-regular-fontSize);
12707
+ line-height: var(--text-label-lg-regular-lineHeight);
12708
+ color: var(--color-text-default-default);
12709
12709
  }
12710
12710
 
12711
- .muka-chat-photo-grid--6,
12712
- .muka-chat-photo-grid--overflow {
12713
- grid-template-columns: repeat(3, 1fr);
12711
+ .muka-checkbox--sm .muka-checkbox__label {
12712
+ font-family: var(--text-label-md-regular-fontFamily);
12713
+ font-weight: var(--text-label-md-regular-fontWeight);
12714
+ font-size: var(--text-label-md-regular-fontSize);
12715
+ line-height: var(--text-label-md-regular-lineHeight);
12714
12716
  }
12715
12717
 
12716
- /* ─── Print ────────────────────────────────────────────── */
12717
-
12718
- @media print {
12719
- .muka-chat-photo-grid {
12720
- break-inside: avoid;
12721
- }
12718
+ .muka-checkbox--lg .muka-checkbox__label {
12719
+ font-family: var(--text-label-xl-regular-fontFamily);
12720
+ font-weight: var(--text-label-xl-regular-fontWeight);
12721
+ font-size: var(--text-label-xl-regular-fontSize);
12722
+ line-height: var(--text-label-xl-regular-lineHeight);
12723
+ }
12722
12724
 
12723
- .muka-chat-photo-grid__image {
12724
- print-color-adjust: exact;
12725
- -webkit-print-color-adjust: exact;
12726
- }
12725
+ .muka-checkbox--disabled .muka-checkbox__label {
12726
+ color: var(--color-text-subtle-default);
12727
12727
  }
12728
12728
 
12729
12729
 
@@ -14012,6 +14012,114 @@ button.muka-chat-photo-grid__tile:focus-visible {
14012
14012
  }
14013
14013
 
14014
14014
 
14015
+ /* BadgeNumber */
14016
+ /* BadgeNumber Component Styles - Using Muka Design Tokens */
14017
+
14018
+ .muka-badge-number {
14019
+ display: inline-flex;
14020
+ align-items: center;
14021
+ justify-content: center;
14022
+ border-radius: var(--border-radius-full);
14023
+ white-space: nowrap;
14024
+ user-select: none;
14025
+ box-sizing: border-box;
14026
+ }
14027
+
14028
+ /*
14029
+ * Sizes — fixed height, matching min-width (so a single digit renders as a
14030
+ * circle), horizontal padding, and bold label typography. Vertical centering
14031
+ * is handled by the fixed height + align-items: center.
14032
+ */
14033
+ .muka-badge-number--2xs {
14034
+ height: var(--badge-number-size-2xs);
14035
+ min-width: var(--badge-number-size-2xs);
14036
+ padding: 0 var(--badge-number-padding-2xs);
14037
+ font-family: var(--text-label-xs-bold-fontFamily);
14038
+ font-weight: var(--text-label-xs-bold-fontWeight);
14039
+ font-size: var(--text-label-xs-bold-fontSize);
14040
+ line-height: var(--text-label-xs-bold-lineHeight);
14041
+ }
14042
+
14043
+ .muka-badge-number--xs {
14044
+ height: var(--badge-number-size-xs);
14045
+ min-width: var(--badge-number-size-xs);
14046
+ padding: 0 var(--badge-number-padding-xs);
14047
+ font-family: var(--text-label-sm-bold-fontFamily);
14048
+ font-weight: var(--text-label-sm-bold-fontWeight);
14049
+ font-size: var(--text-label-sm-bold-fontSize);
14050
+ line-height: var(--text-label-sm-bold-lineHeight);
14051
+ }
14052
+
14053
+ .muka-badge-number--sm {
14054
+ height: var(--badge-number-size-sm);
14055
+ min-width: var(--badge-number-size-sm);
14056
+ padding: 0 var(--badge-number-padding-sm);
14057
+ font-family: var(--text-label-md-bold-fontFamily);
14058
+ font-weight: var(--text-label-md-bold-fontWeight);
14059
+ font-size: var(--text-label-md-bold-fontSize);
14060
+ line-height: var(--text-label-md-bold-lineHeight);
14061
+ }
14062
+
14063
+ .muka-badge-number--md {
14064
+ height: var(--badge-number-size-md);
14065
+ min-width: var(--badge-number-size-md);
14066
+ padding: 0 var(--badge-number-padding-md);
14067
+ font-family: var(--text-label-lg-bold-fontFamily);
14068
+ font-weight: var(--text-label-lg-bold-fontWeight);
14069
+ font-size: var(--text-label-lg-bold-fontSize);
14070
+ line-height: var(--text-label-lg-bold-lineHeight);
14071
+ }
14072
+
14073
+ .muka-badge-number--lg {
14074
+ height: var(--badge-number-size-lg);
14075
+ min-width: var(--badge-number-size-lg);
14076
+ padding: 0 var(--badge-number-padding-lg);
14077
+ font-family: var(--text-label-2xl-bold-fontFamily);
14078
+ font-weight: var(--text-label-2xl-bold-fontWeight);
14079
+ font-size: var(--text-label-2xl-bold-fontSize);
14080
+ line-height: var(--text-label-2xl-bold-lineHeight);
14081
+ }
14082
+
14083
+ .muka-badge-number__label {
14084
+ /*
14085
+ * The badge sets a tight line-height for compact sizing, which would clip
14086
+ * glyph descenders; give the label a roomier line-height. Vertical centering
14087
+ * is unaffected because the badge height is fixed and content is centered.
14088
+ */
14089
+ line-height: normal;
14090
+ }
14091
+
14092
+ /* Neutral variant */
14093
+ .muka-badge-number--neutral {
14094
+ background-color: var(--color-surface-level1);
14095
+ color: var(--color-text-default-default);
14096
+ }
14097
+
14098
+ /* Info variant */
14099
+ .muka-badge-number--info {
14100
+ background-color: var(--color-state-info-contrast);
14101
+ color: var(--color-text-default-inverse);
14102
+ }
14103
+
14104
+ /* Success variant */
14105
+ .muka-badge-number--success {
14106
+ background-color: var(--color-state-success-contrast);
14107
+ color: var(--color-text-default-inverse);
14108
+ }
14109
+
14110
+ /* Warning variant */
14111
+ .muka-badge-number--warning {
14112
+ background-color: var(--color-state-warning-contrast);
14113
+ color: var(--color-text-default-inverse);
14114
+ }
14115
+
14116
+ /* Error variant */
14117
+ .muka-badge-number--error {
14118
+ background-color: var(--color-state-error-contrast);
14119
+ color: var(--color-text-default-inverse);
14120
+ }
14121
+
14122
+
14015
14123
  /* BottomBar */
14016
14124
  /* BottomBar Component Styles */
14017
14125
 
@@ -14328,114 +14436,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
14328
14436
  }
14329
14437
 
14330
14438
 
14331
- /* BadgeNumber */
14332
- /* BadgeNumber Component Styles - Using Muka Design Tokens */
14333
-
14334
- .muka-badge-number {
14335
- display: inline-flex;
14336
- align-items: center;
14337
- justify-content: center;
14338
- border-radius: var(--border-radius-full);
14339
- white-space: nowrap;
14340
- user-select: none;
14341
- box-sizing: border-box;
14342
- }
14343
-
14344
- /*
14345
- * Sizes — fixed height, matching min-width (so a single digit renders as a
14346
- * circle), horizontal padding, and bold label typography. Vertical centering
14347
- * is handled by the fixed height + align-items: center.
14348
- */
14349
- .muka-badge-number--2xs {
14350
- height: var(--badge-number-size-2xs);
14351
- min-width: var(--badge-number-size-2xs);
14352
- padding: 0 var(--badge-number-padding-2xs);
14353
- font-family: var(--text-label-xs-bold-fontFamily);
14354
- font-weight: var(--text-label-xs-bold-fontWeight);
14355
- font-size: var(--text-label-xs-bold-fontSize);
14356
- line-height: var(--text-label-xs-bold-lineHeight);
14357
- }
14358
-
14359
- .muka-badge-number--xs {
14360
- height: var(--badge-number-size-xs);
14361
- min-width: var(--badge-number-size-xs);
14362
- padding: 0 var(--badge-number-padding-xs);
14363
- font-family: var(--text-label-sm-bold-fontFamily);
14364
- font-weight: var(--text-label-sm-bold-fontWeight);
14365
- font-size: var(--text-label-sm-bold-fontSize);
14366
- line-height: var(--text-label-sm-bold-lineHeight);
14367
- }
14368
-
14369
- .muka-badge-number--sm {
14370
- height: var(--badge-number-size-sm);
14371
- min-width: var(--badge-number-size-sm);
14372
- padding: 0 var(--badge-number-padding-sm);
14373
- font-family: var(--text-label-md-bold-fontFamily);
14374
- font-weight: var(--text-label-md-bold-fontWeight);
14375
- font-size: var(--text-label-md-bold-fontSize);
14376
- line-height: var(--text-label-md-bold-lineHeight);
14377
- }
14378
-
14379
- .muka-badge-number--md {
14380
- height: var(--badge-number-size-md);
14381
- min-width: var(--badge-number-size-md);
14382
- padding: 0 var(--badge-number-padding-md);
14383
- font-family: var(--text-label-lg-bold-fontFamily);
14384
- font-weight: var(--text-label-lg-bold-fontWeight);
14385
- font-size: var(--text-label-lg-bold-fontSize);
14386
- line-height: var(--text-label-lg-bold-lineHeight);
14387
- }
14388
-
14389
- .muka-badge-number--lg {
14390
- height: var(--badge-number-size-lg);
14391
- min-width: var(--badge-number-size-lg);
14392
- padding: 0 var(--badge-number-padding-lg);
14393
- font-family: var(--text-label-2xl-bold-fontFamily);
14394
- font-weight: var(--text-label-2xl-bold-fontWeight);
14395
- font-size: var(--text-label-2xl-bold-fontSize);
14396
- line-height: var(--text-label-2xl-bold-lineHeight);
14397
- }
14398
-
14399
- .muka-badge-number__label {
14400
- /*
14401
- * The badge sets a tight line-height for compact sizing, which would clip
14402
- * glyph descenders; give the label a roomier line-height. Vertical centering
14403
- * is unaffected because the badge height is fixed and content is centered.
14404
- */
14405
- line-height: normal;
14406
- }
14407
-
14408
- /* Neutral variant */
14409
- .muka-badge-number--neutral {
14410
- background-color: var(--color-surface-level1);
14411
- color: var(--color-text-default-default);
14412
- }
14413
-
14414
- /* Info variant */
14415
- .muka-badge-number--info {
14416
- background-color: var(--color-state-info-contrast);
14417
- color: var(--color-text-default-inverse);
14418
- }
14419
-
14420
- /* Success variant */
14421
- .muka-badge-number--success {
14422
- background-color: var(--color-state-success-contrast);
14423
- color: var(--color-text-default-inverse);
14424
- }
14425
-
14426
- /* Warning variant */
14427
- .muka-badge-number--warning {
14428
- background-color: var(--color-state-warning-contrast);
14429
- color: var(--color-text-default-inverse);
14430
- }
14431
-
14432
- /* Error variant */
14433
- .muka-badge-number--error {
14434
- background-color: var(--color-state-error-contrast);
14435
- color: var(--color-text-default-inverse);
14436
- }
14437
-
14438
-
14439
14439
  /* Badge */
14440
14440
  /* Badge Component Styles - Using Muka Design Tokens */
14441
14441