@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.
@@ -2461,6 +2461,116 @@ body {
2461
2461
  }
2462
2462
 
2463
2463
 
2464
+ /* View */
2465
+ /* View Component Styles */
2466
+
2467
+ /* ─── Base layout ─────────────────────────────────────── */
2468
+
2469
+ .muka-view {
2470
+ display: flex;
2471
+ flex-direction: column;
2472
+ height: 100dvh;
2473
+ background-color: var(--view-color-background);
2474
+ position: relative;
2475
+ isolation: isolate;
2476
+ box-sizing: border-box;
2477
+
2478
+ /* Width reserved for the footer nav once it becomes a left sidebar at the
2479
+ large tier (matches BottomBar's desktopAs="sidebar" rail width). */
2480
+ --view-sidebar-width: 240px;
2481
+ }
2482
+
2483
+ /* ─── Surface level variants ─────────────────────────── */
2484
+
2485
+ .muka-view--surface-3 {
2486
+ background-color: var(--color-surface-level3);
2487
+ }
2488
+
2489
+ /* ─── Large screens: make room for the left sidebar ──────────
2490
+ A footer nav with desktopAs="sidebar" becomes a fixed 240px left rail at
2491
+ ≥1024px. Offset the shell so the TopBar/body clear it — tied to the sidebar's
2492
+ actual presence (the `.muka-bottombar--desktop-sidebar` element) rather than
2493
+ the View's `size`, so a forced `size="lg"` below 1024px never reserves space
2494
+ for a sidebar that hasn't rendered yet. */
2495
+ @media (min-width: 1024px) {
2496
+ .muka-view:has(.muka-bottombar--desktop-sidebar) {
2497
+ padding-left: var(--view-sidebar-width);
2498
+ }
2499
+ }
2500
+
2501
+ /* ─── TopBar elevation ────────────────────────────────── */
2502
+
2503
+ .muka-view .muka-topbar {
2504
+ flex-shrink: 0;
2505
+ z-index: 3;
2506
+ box-shadow: var(--shadow-level2);
2507
+ }
2508
+
2509
+ /* ─── Scrollable body ─────────────────────────────────── */
2510
+
2511
+ .muka-view__body {
2512
+ flex: 1 1 0%;
2513
+ min-height: 0;
2514
+ overflow-y: auto;
2515
+ overflow-x: clip;
2516
+ z-index: 1;
2517
+
2518
+ /* Column flow so the footer (now a scroll-area child) can pin to the bottom and
2519
+ content scrolls *behind* it — letting a floating BottomBar's frosted backdrop
2520
+ reveal the content underneath. */
2521
+ display: flex;
2522
+ flex-direction: column;
2523
+ }
2524
+
2525
+ /* Inner wrapper constrains content width at the large tier (enterprise desktop)
2526
+ using the alias-layer section/container tokens, while the body scrolls full
2527
+ width. Full-bleed below large. */
2528
+ .muka-view__body-inner {
2529
+ width: 100%;
2530
+ /* Grow on short content so the sticky footer is pushed to the bottom rather
2531
+ than floating mid-screen. */
2532
+ flex: 1 0 auto;
2533
+ }
2534
+
2535
+ @media (min-width: 1024px) {
2536
+ .muka-view:not([data-size]) .muka-view__body-inner {
2537
+ max-width: var(--container-max-width-xl);
2538
+ margin-inline: auto;
2539
+ padding-inline: var(--section-padding-horizontal-default);
2540
+ }
2541
+ }
2542
+
2543
+ .muka-view[data-size='lg'] .muka-view__body-inner {
2544
+ max-width: var(--container-max-width-xl);
2545
+ margin-inline: auto;
2546
+ padding-inline: var(--section-padding-horizontal-default);
2547
+ }
2548
+
2549
+ /* ─── Footer (e.g. BottomBar) ─────────────────────────── */
2550
+
2551
+ .muka-view__footer {
2552
+ position: sticky;
2553
+ bottom: 0;
2554
+ flex-shrink: 0;
2555
+ z-index: 2;
2556
+ }
2557
+
2558
+ /* Inside an AppShell, the persistent left rail replaces the per-view bottom
2559
+ navigation at the large tier, so hide a footer that holds a navigation bar.
2560
+ Scoped to `.muka-app-shell` so bare Views (and the standalone
2561
+ desktopAs="sidebar" footer pattern above) are unaffected. Action-bar footers
2562
+ (`.muka-bottombar--actions`) don't match and remain at the bottom. */
2563
+ @media (min-width: 1024px) {
2564
+ .muka-app-shell .muka-view__footer:has(.muka-bottombar--navigation) {
2565
+ display: none;
2566
+ }
2567
+ }
2568
+
2569
+ .muka-app-shell[data-size='lg'] .muka-view__footer:has(.muka-bottombar--navigation) {
2570
+ display: none;
2571
+ }
2572
+
2573
+
2464
2574
  /* Typography */
2465
2575
  .muka-typography-catalog {
2466
2576
  display: flex;
@@ -2811,122 +2921,175 @@ body {
2811
2921
  }
2812
2922
 
2813
2923
 
2814
- /* View */
2815
- /* View Component Styles */
2816
-
2817
- /* ─── Base layout ─────────────────────────────────────── */
2924
+ /* Toggle */
2925
+ /* Toggle Component Styles - Using Muka Design Tokens */
2818
2926
 
2819
- .muka-view {
2927
+ /* Wrapper container */
2928
+ .muka-toggle {
2820
2929
  display: flex;
2821
- flex-direction: column;
2822
- height: 100dvh;
2823
- background-color: var(--view-color-background);
2930
+ align-items: center;
2931
+ gap: var(--spacing-2);
2824
2932
  position: relative;
2825
- isolation: isolate;
2826
- box-sizing: border-box;
2827
-
2828
- /* Width reserved for the footer nav once it becomes a left sidebar at the
2829
- large tier (matches BottomBar's desktopAs="sidebar" rail width). */
2830
- --view-sidebar-width: 240px;
2933
+ padding: var(--spacing-4) 0;
2831
2934
  }
2832
2935
 
2833
- /* ─── Surface level variants ─────────────────────────── */
2834
-
2835
- .muka-view--surface-3 {
2836
- background-color: var(--color-surface-level3);
2936
+ .muka-toggle--with-caption {
2937
+ padding: var(--spacing-5) 0;
2837
2938
  }
2838
2939
 
2839
- /* ─── Large screens: make room for the left sidebar ──────────
2840
- A footer nav with desktopAs="sidebar" becomes a fixed 240px left rail at
2841
- ≥1024px. Offset the shell so the TopBar/body clear it — tied to the sidebar's
2842
- actual presence (the `.muka-bottombar--desktop-sidebar` element) rather than
2843
- the View's `size`, so a forced `size="lg"` below 1024px never reserves space
2844
- for a sidebar that hasn't rendered yet. */
2845
- @media (min-width: 1024px) {
2846
- .muka-view:has(.muka-bottombar--desktop-sidebar) {
2847
- padding-left: var(--view-sidebar-width);
2848
- }
2940
+ .muka-toggle--disabled {
2941
+ opacity: 0.6;
2849
2942
  }
2850
2943
 
2851
- /* ─── TopBar elevation ────────────────────────────────── */
2852
-
2853
- .muka-view .muka-topbar {
2944
+ /* Icon */
2945
+ .muka-toggle__icon {
2946
+ display: flex;
2947
+ align-items: center;
2948
+ justify-content: center;
2854
2949
  flex-shrink: 0;
2855
- z-index: 3;
2856
- box-shadow: var(--shadow-level2);
2950
+ width: var(--icon-size-default);
2951
+ height: var(--icon-size-default);
2952
+ color: var(--color-text-default-default);
2857
2953
  }
2858
2954
 
2859
- /* ─── Scrollable body ─────────────────────────────────── */
2860
-
2861
- .muka-view__body {
2862
- flex: 1 1 0%;
2863
- min-height: 0;
2864
- overflow-y: auto;
2865
- overflow-x: clip;
2866
- z-index: 1;
2955
+ .muka-toggle__icon svg {
2956
+ width: 100%;
2957
+ height: 100%;
2958
+ }
2867
2959
 
2868
- /* Column flow so the footer (now a scroll-area child) can pin to the bottom and
2869
- content scrolls *behind* it — letting a floating BottomBar's frosted backdrop
2870
- reveal the content underneath. */
2960
+ /* Content area (label + caption) */
2961
+ .muka-toggle__content {
2871
2962
  display: flex;
2872
2963
  flex-direction: column;
2964
+ flex: 1;
2965
+ min-width: 0;
2966
+ gap: var(--spacing-1);
2873
2967
  }
2874
2968
 
2875
- /* Inner wrapper constrains content width at the large tier (enterprise desktop)
2876
- using the alias-layer section/container tokens, while the body scrolls full
2877
- width. Full-bleed below large. */
2878
- .muka-view__body-inner {
2879
- width: 100%;
2880
- /* Grow on short content so the sticky footer is pushed to the bottom rather
2881
- than floating mid-screen. */
2882
- flex: 1 0 auto;
2969
+ /* Label */
2970
+ .muka-toggle__label {
2971
+ font-family: var(--text-label-lg-regular-fontFamily);
2972
+ font-weight: var(--text-label-lg-regular-fontWeight);
2973
+ font-size: var(--text-label-lg-regular-fontSize);
2974
+ line-height: var(--text-label-lg-regular-lineHeight);
2975
+ color: var(--color-text-default-default);
2976
+ cursor: pointer;
2883
2977
  }
2884
2978
 
2885
- @media (min-width: 1024px) {
2886
- .muka-view:not([data-size]) .muka-view__body-inner {
2887
- max-width: var(--container-max-width-xl);
2888
- margin-inline: auto;
2889
- padding-inline: var(--section-padding-horizontal-default);
2890
- }
2979
+ .muka-toggle--with-caption .muka-toggle__label {
2980
+ font-family: var(--text-label-lg-semibold-fontFamily);
2981
+ font-weight: var(--text-label-lg-semibold-fontWeight);
2982
+ font-size: var(--text-label-lg-semibold-fontSize);
2983
+ line-height: var(--text-label-lg-semibold-lineHeight);
2891
2984
  }
2892
2985
 
2893
- .muka-view[data-size='lg'] .muka-view__body-inner {
2894
- max-width: var(--container-max-width-xl);
2895
- margin-inline: auto;
2896
- padding-inline: var(--section-padding-horizontal-default);
2986
+ .muka-toggle--disabled .muka-toggle__label {
2987
+ color: var(--color-text-subtle-default);
2988
+ cursor: not-allowed;
2897
2989
  }
2898
2990
 
2899
- /* ─── Footer (e.g. BottomBar) ─────────────────────────── */
2900
-
2901
- .muka-view__footer {
2902
- position: sticky;
2903
- bottom: 0;
2904
- flex-shrink: 0;
2905
- z-index: 2;
2991
+ /* Caption */
2992
+ .muka-toggle__caption {
2993
+ font-family: var(--text-body-base-regular-fontFamily);
2994
+ font-weight: var(--text-body-base-regular-fontWeight);
2995
+ font-size: var(--text-body-base-regular-fontSize);
2996
+ line-height: var(--text-body-base-regular-lineHeight);
2997
+ color: var(--color-text-subtle-default);
2906
2998
  }
2907
2999
 
2908
- /* Inside an AppShell, the persistent left rail replaces the per-view bottom
2909
- navigation at the large tier, so hide a footer that holds a navigation bar.
2910
- Scoped to `.muka-app-shell` so bare Views (and the standalone
2911
- desktopAs="sidebar" footer pattern above) are unaffected. Action-bar footers
2912
- (`.muka-bottombar--actions`) don't match and remain at the bottom. */
2913
- @media (min-width: 1024px) {
2914
- .muka-app-shell .muka-view__footer:has(.muka-bottombar--navigation) {
2915
- display: none;
2916
- }
3000
+ /* Switch container */
3001
+ .muka-toggle__switch {
3002
+ position: relative;
3003
+ display: inline-flex;
3004
+ flex-shrink: 0;
3005
+ cursor: pointer;
2917
3006
  }
2918
3007
 
2919
- .muka-app-shell[data-size='lg'] .muka-view__footer:has(.muka-bottombar--navigation) {
2920
- display: none;
3008
+ .muka-toggle--disabled .muka-toggle__switch {
3009
+ cursor: not-allowed;
2921
3010
  }
2922
3011
 
2923
-
2924
- /* Toast */
2925
- /* Toast Component Styles - Using Muka Design Tokens */
2926
-
2927
- .muka-toast {
2928
- display: flex;
2929
- align-items: flex-start;
3012
+ /* Hidden native input */
3013
+ .muka-toggle__input {
3014
+ position: absolute;
3015
+ width: 1px;
3016
+ height: 1px;
3017
+ padding: 0;
3018
+ margin: -1px;
3019
+ overflow: hidden;
3020
+ clip: rect(0, 0, 0, 0);
3021
+ white-space: nowrap;
3022
+ border: 0;
3023
+ }
3024
+
3025
+ /* Track (background pill) */
3026
+ .muka-toggle__track {
3027
+ display: flex;
3028
+ align-items: center;
3029
+ width: var(--toggle-track-width);
3030
+ height: var(--toggle-track-height);
3031
+ border-radius: var(--toggle-track-radius);
3032
+ background-color: var(--toggle-track-color-off);
3033
+ transition: background-color 0.2s ease;
3034
+ box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.16);
3035
+ position: relative;
3036
+ }
3037
+
3038
+ /* Knob (sliding circle) */
3039
+ .muka-toggle__knob {
3040
+ position: absolute;
3041
+ width: var(--toggle-knob-size);
3042
+ height: var(--toggle-knob-size);
3043
+ border-radius: var(--border-radius-full);
3044
+ background-color: var(--toggle-knob-color-default);
3045
+ box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);
3046
+ left: var(--toggle-knob-offset);
3047
+ transition: left 0.2s ease, transform 0.2s ease;
3048
+ }
3049
+
3050
+ /* Focus state */
3051
+ .muka-toggle__input:focus-visible + .muka-toggle__track {
3052
+ outline: 2px solid var(--color-border-focus);
3053
+ outline-offset: 2px;
3054
+ }
3055
+
3056
+ /* Checked (on) state */
3057
+ .muka-toggle__input:checked + .muka-toggle__track {
3058
+ background-color: var(--toggle-track-color-on);
3059
+ }
3060
+
3061
+ .muka-toggle__input:checked + .muka-toggle__track .muka-toggle__knob {
3062
+ left: calc(var(--toggle-track-width) - var(--toggle-knob-size) - var(--toggle-knob-offset));
3063
+ }
3064
+
3065
+ /* Disabled state */
3066
+ .muka-toggle--disabled .muka-toggle__track {
3067
+ background-color: var(--toggle-track-color-disabled);
3068
+ box-shadow: none;
3069
+ }
3070
+
3071
+ .muka-toggle--disabled .muka-toggle__knob {
3072
+ background-color: var(--toggle-knob-color-disabled);
3073
+ box-shadow: none;
3074
+ }
3075
+
3076
+ /* Divider */
3077
+ .muka-toggle__divider {
3078
+ position: absolute;
3079
+ bottom: 0;
3080
+ left: 0;
3081
+ right: 0;
3082
+ height: 1px;
3083
+ background-color: var(--color-border-muted);
3084
+ }
3085
+
3086
+
3087
+ /* Toast */
3088
+ /* Toast Component Styles - Using Muka Design Tokens */
3089
+
3090
+ .muka-toast {
3091
+ display: flex;
3092
+ align-items: flex-start;
2930
3093
  gap: var(--toast-gap);
2931
3094
  padding: var(--toast-padding-y) var(--toast-padding-x);
2932
3095
  border-radius: var(--toast-radius);
@@ -3646,166 +3809,249 @@ body {
3646
3809
  }
3647
3810
 
3648
3811
 
3649
- /* Toggle */
3650
- /* Toggle Component Styles - Using Muka Design Tokens */
3812
+ /* Textarea */
3813
+ /* Textarea Component Styles - Using Muka Design Tokens */
3651
3814
 
3652
- /* Wrapper container */
3653
- .muka-toggle {
3654
- display: flex;
3655
- align-items: center;
3815
+ .muka-textarea {
3816
+ display: inline-flex;
3817
+ flex-direction: column;
3656
3818
  gap: var(--spacing-2);
3657
- position: relative;
3658
- padding: var(--spacing-4) 0;
3659
- }
3660
-
3661
- .muka-toggle--with-caption {
3662
- padding: var(--spacing-5) 0;
3663
- }
3664
-
3665
- .muka-toggle--disabled {
3666
- opacity: 0.6;
3667
3819
  }
3668
3820
 
3669
- /* Icon */
3670
- .muka-toggle__icon {
3671
- display: flex;
3672
- align-items: center;
3673
- justify-content: center;
3674
- flex-shrink: 0;
3675
- width: var(--icon-size-default);
3676
- height: var(--icon-size-default);
3821
+ /* Label */
3822
+ .muka-textarea__label {
3677
3823
  color: var(--color-text-default-default);
3824
+ cursor: pointer;
3678
3825
  }
3679
3826
 
3680
- .muka-toggle__icon svg {
3681
- width: 100%;
3682
- height: 100%;
3683
- }
3684
-
3685
- /* Content area (label + caption) */
3686
- .muka-toggle__content {
3687
- display: flex;
3688
- flex-direction: column;
3689
- flex: 1;
3690
- min-width: 0;
3691
- gap: var(--spacing-1);
3827
+ .muka-textarea__label--sm {
3828
+ font-family: var(--text-label-sm-semibold-fontFamily);
3829
+ font-weight: var(--text-label-sm-semibold-fontWeight);
3830
+ font-size: var(--text-label-sm-semibold-fontSize);
3831
+ line-height: var(--text-label-sm-semibold-lineHeight);
3692
3832
  }
3693
3833
 
3694
- /* Label */
3695
- .muka-toggle__label {
3696
- font-family: var(--text-label-lg-regular-fontFamily);
3697
- font-weight: var(--text-label-lg-regular-fontWeight);
3698
- font-size: var(--text-label-lg-regular-fontSize);
3699
- line-height: var(--text-label-lg-regular-lineHeight);
3700
- color: var(--color-text-default-default);
3701
- cursor: pointer;
3834
+ .muka-textarea__label--md {
3835
+ font-family: var(--text-label-md-semibold-fontFamily);
3836
+ font-weight: var(--text-label-md-semibold-fontWeight);
3837
+ font-size: var(--text-label-md-semibold-fontSize);
3838
+ line-height: var(--text-label-md-semibold-lineHeight);
3702
3839
  }
3703
3840
 
3704
- .muka-toggle--with-caption .muka-toggle__label {
3841
+ .muka-textarea__label--lg {
3705
3842
  font-family: var(--text-label-lg-semibold-fontFamily);
3706
3843
  font-weight: var(--text-label-lg-semibold-fontWeight);
3707
3844
  font-size: var(--text-label-lg-semibold-fontSize);
3708
3845
  line-height: var(--text-label-lg-semibold-lineHeight);
3709
3846
  }
3710
3847
 
3711
- .muka-toggle--disabled .muka-toggle__label {
3712
- color: var(--color-text-subtle-default);
3713
- cursor: not-allowed;
3714
- }
3715
-
3716
- /* Caption */
3717
- .muka-toggle__caption {
3718
- font-family: var(--text-body-base-regular-fontFamily);
3719
- font-weight: var(--text-body-base-regular-fontWeight);
3720
- font-size: var(--text-body-base-regular-fontSize);
3721
- line-height: var(--text-body-base-regular-lineHeight);
3722
- color: var(--color-text-subtle-default);
3723
- }
3724
-
3725
- /* Switch container */
3726
- .muka-toggle__switch {
3727
- position: relative;
3728
- display: inline-flex;
3729
- flex-shrink: 0;
3730
- cursor: pointer;
3848
+ .muka-textarea__required {
3849
+ color: var(--color-state-error-default);
3731
3850
  }
3732
3851
 
3733
- .muka-toggle--disabled .muka-toggle__switch {
3734
- cursor: not-allowed;
3852
+ /* Field container */
3853
+ .muka-textarea__field {
3854
+ display: flex;
3855
+ background-color: var(--input-field-color-default-background);
3856
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
3857
+ border-radius: var(--input-field-radius-md);
3858
+ padding: var(--input-field-padding-y) var(--input-field-padding-x);
3859
+ transition: border-color 0.2s ease, background-color 0.2s ease;
3860
+ box-sizing: border-box;
3735
3861
  }
3736
3862
 
3737
- /* Hidden native input */
3738
- .muka-toggle__input {
3739
- position: absolute;
3740
- width: 1px;
3741
- height: 1px;
3742
- padding: 0;
3743
- margin: -1px;
3744
- overflow: hidden;
3745
- clip: rect(0, 0, 0, 0);
3746
- white-space: nowrap;
3747
- border: 0;
3863
+ .muka-textarea__field--sm {
3864
+ min-height: var(--input-textarea-height-sm);
3865
+ border-radius: var(--input-field-radius-sm);
3748
3866
  }
3749
3867
 
3750
- /* Track (background pill) */
3751
- .muka-toggle__track {
3752
- display: flex;
3753
- align-items: center;
3754
- width: var(--toggle-track-width);
3755
- height: var(--toggle-track-height);
3756
- border-radius: var(--toggle-track-radius);
3757
- background-color: var(--toggle-track-color-off);
3758
- transition: background-color 0.2s ease;
3759
- box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.16);
3760
- position: relative;
3868
+ .muka-textarea__field--md {
3869
+ min-height: var(--input-textarea-height-default);
3870
+ border-radius: var(--input-field-radius-md);
3761
3871
  }
3762
3872
 
3763
- /* Knob (sliding circle) */
3764
- .muka-toggle__knob {
3765
- position: absolute;
3766
- width: var(--toggle-knob-size);
3767
- height: var(--toggle-knob-size);
3768
- border-radius: var(--border-radius-full);
3769
- background-color: var(--toggle-knob-color-default);
3770
- box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.1);
3771
- left: var(--toggle-knob-offset);
3772
- transition: left 0.2s ease, transform 0.2s ease;
3873
+ .muka-textarea__field--lg {
3874
+ min-height: var(--input-textarea-height-lg);
3875
+ border-radius: var(--input-field-radius-lg);
3773
3876
  }
3774
3877
 
3775
3878
  /* Focus state */
3776
- .muka-toggle__input:focus-visible + .muka-toggle__track {
3777
- outline: 2px solid var(--color-border-focus);
3778
- outline-offset: 2px;
3779
- }
3780
-
3781
- /* Checked (on) state */
3782
- .muka-toggle__input:checked + .muka-toggle__track {
3783
- background-color: var(--toggle-track-color-on);
3879
+ .muka-textarea__field--focused:not(.muka-textarea__field--disabled) {
3880
+ border-width: var(--border-width-bold);
3881
+ border-color: var(--input-field-color-focus-border);
3882
+ background-color: var(--input-field-color-focus-background);
3883
+ padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
3784
3884
  }
3785
3885
 
3786
- .muka-toggle__input:checked + .muka-toggle__track .muka-toggle__knob {
3787
- left: calc(var(--toggle-track-width) - var(--toggle-knob-size) - var(--toggle-knob-offset));
3886
+ /* Error state */
3887
+ .muka-textarea__field--error:not(.muka-textarea__field--disabled) {
3888
+ border-width: var(--border-width-bold);
3889
+ border-color: var(--input-field-color-error-border);
3890
+ background-color: var(--input-field-color-error-background);
3891
+ padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
3788
3892
  }
3789
3893
 
3790
3894
  /* Disabled state */
3791
- .muka-toggle--disabled .muka-toggle__track {
3792
- background-color: var(--toggle-track-color-disabled);
3793
- box-shadow: none;
3794
- }
3795
-
3796
- .muka-toggle--disabled .muka-toggle__knob {
3797
- background-color: var(--toggle-knob-color-disabled);
3798
- box-shadow: none;
3895
+ .muka-textarea__field--disabled {
3896
+ background-color: var(--input-field-color-disabled-background);
3897
+ border-color: var(--input-field-color-disabled-border);
3898
+ cursor: not-allowed;
3799
3899
  }
3800
3900
 
3801
- /* Divider */
3802
- .muka-toggle__divider {
3803
- position: absolute;
3804
- bottom: 0;
3805
- left: 0;
3806
- right: 0;
3807
- height: 1px;
3808
- background-color: var(--color-border-muted);
3901
+ /* Native textarea */
3902
+ .muka-textarea__native {
3903
+ flex: 1;
3904
+ border: none;
3905
+ outline: none;
3906
+ background: transparent;
3907
+ color: var(--input-field-color-default-foreground);
3908
+ font-family: var(--text-input-md-fontFamily);
3909
+ font-weight: var(--text-input-md-fontWeight);
3910
+ font-size: var(--text-input-md-fontSize);
3911
+ line-height: var(--text-input-md-lineHeight);
3912
+ padding: 0;
3913
+ width: 100%;
3914
+ min-width: 0;
3915
+ }
3916
+
3917
+ .muka-textarea__field--sm .muka-textarea__native {
3918
+ font-family: var(--text-input-sm-fontFamily);
3919
+ font-weight: var(--text-input-sm-fontWeight);
3920
+ font-size: var(--text-input-sm-fontSize);
3921
+ line-height: var(--text-input-sm-lineHeight);
3922
+ }
3923
+
3924
+ .muka-textarea__field--lg .muka-textarea__native {
3925
+ font-family: var(--text-input-lg-fontFamily);
3926
+ font-weight: var(--text-input-lg-fontWeight);
3927
+ font-size: var(--text-input-lg-fontSize);
3928
+ line-height: var(--text-input-lg-lineHeight);
3929
+ }
3930
+
3931
+ .muka-textarea__native::placeholder {
3932
+ color: var(--color-text-subtle-default);
3933
+ }
3934
+
3935
+ .muka-textarea__field--disabled .muka-textarea__native {
3936
+ color: var(--input-field-color-disabled-foreground);
3937
+ cursor: not-allowed;
3938
+ }
3939
+
3940
+ /* Footer (helper/error + count) */
3941
+ .muka-textarea__footer {
3942
+ display: flex;
3943
+ justify-content: space-between;
3944
+ align-items: flex-start;
3945
+ gap: var(--spacing-2);
3946
+ }
3947
+
3948
+ .muka-textarea__helper {
3949
+ font-family: var(--text-label-sm-regular-fontFamily);
3950
+ font-weight: var(--text-label-sm-regular-fontWeight);
3951
+ font-size: var(--text-label-sm-regular-fontSize);
3952
+ line-height: var(--text-label-sm-regular-lineHeight);
3953
+ color: var(--color-text-subtle-default);
3954
+ margin: 0;
3955
+ }
3956
+
3957
+ .muka-textarea__error {
3958
+ font-family: var(--text-label-sm-regular-fontFamily);
3959
+ font-weight: var(--text-label-sm-regular-fontWeight);
3960
+ font-size: var(--text-label-sm-regular-fontSize);
3961
+ line-height: var(--text-label-sm-regular-lineHeight);
3962
+ color: var(--color-state-error-default);
3963
+ margin: 0;
3964
+ }
3965
+
3966
+ .muka-textarea__count {
3967
+ font-family: var(--text-label-sm-regular-fontFamily);
3968
+ font-weight: var(--text-label-sm-regular-fontWeight);
3969
+ font-size: var(--text-label-sm-regular-fontSize);
3970
+ line-height: var(--text-label-sm-regular-lineHeight);
3971
+ color: var(--color-text-subtle-default);
3972
+ margin-left: auto;
3973
+ }
3974
+
3975
+
3976
+ /* TextLink */
3977
+ /* TextLink Component Styles - Using Muka Design Tokens */
3978
+
3979
+ .muka-text-link {
3980
+ display: inline;
3981
+ cursor: pointer;
3982
+ text-decoration: underline;
3983
+ /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
3984
+ text-underline-offset: 0.2em;
3985
+ text-decoration-thickness: from-font;
3986
+ /* Rounds the focus ring's corners; the link itself has no visible box. */
3987
+ border-radius: var(--border-radius-sm);
3988
+ transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
3989
+ }
3990
+
3991
+ /* ─── Sizes ───────────────────────────────────────────────
3992
+ Mirrors the body text scale so a link matches the copy it sits in. */
3993
+ .muka-text-link--sm {
3994
+ font-family: var(--text-body-sm-regular-fontFamily);
3995
+ font-weight: var(--text-body-sm-regular-fontWeight);
3996
+ font-size: var(--text-body-sm-regular-fontSize);
3997
+ line-height: var(--text-body-sm-regular-lineHeight);
3998
+ }
3999
+
4000
+ .muka-text-link--base {
4001
+ font-family: var(--text-body-base-regular-fontFamily);
4002
+ font-weight: var(--text-body-base-regular-fontWeight);
4003
+ font-size: var(--text-body-base-regular-fontSize);
4004
+ line-height: var(--text-body-base-regular-lineHeight);
4005
+ }
4006
+
4007
+ .muka-text-link--lg {
4008
+ font-family: var(--text-body-lg-regular-fontFamily);
4009
+ font-weight: var(--text-body-lg-regular-fontWeight);
4010
+ font-size: var(--text-body-lg-regular-fontSize);
4011
+ line-height: var(--text-body-lg-regular-lineHeight);
4012
+ }
4013
+
4014
+ /* ─── Variant: default (accent) ───────────────────────────
4015
+ Visited repeats the default colour on purpose: the design treats visited and
4016
+ default the same, and pinning it stops the browser's purple from showing. */
4017
+ .muka-text-link--default,
4018
+ .muka-text-link--default:visited {
4019
+ color: var(--color-text-action-default);
4020
+ }
4021
+
4022
+ .muka-text-link--default:hover,
4023
+ .muka-text-link--default:focus-visible {
4024
+ color: var(--color-text-action-hover);
4025
+ }
4026
+
4027
+ .muka-text-link--default:active {
4028
+ color: var(--color-text-action-pressed);
4029
+ }
4030
+
4031
+ /* ─── Variant: subtle (neutral) ───────────────────────────
4032
+ Hover, focus and pressed all darken to the default text colour. */
4033
+ .muka-text-link--subtle,
4034
+ .muka-text-link--subtle:visited {
4035
+ color: var(--color-text-subtle-default);
4036
+ }
4037
+
4038
+ .muka-text-link--subtle:hover,
4039
+ .muka-text-link--subtle:focus-visible,
4040
+ .muka-text-link--subtle:active {
4041
+ color: var(--color-text-default-default);
4042
+ }
4043
+
4044
+ /* ─── Focus ───────────────────────────────────────────────
4045
+ Same ring as every other focusable Muka component. */
4046
+ .muka-text-link:focus-visible {
4047
+ outline: 2px solid var(--color-border-focus);
4048
+ outline-offset: 2px;
4049
+ }
4050
+
4051
+ @media (prefers-reduced-motion: reduce) {
4052
+ .muka-text-link {
4053
+ transition: none;
4054
+ }
3809
4055
  }
3810
4056
 
3811
4057
 
@@ -3999,252 +4245,6 @@ body {
3999
4245
  }
4000
4246
 
4001
4247
 
4002
- /* Textarea */
4003
- /* Textarea Component Styles - Using Muka Design Tokens */
4004
-
4005
- .muka-textarea {
4006
- display: inline-flex;
4007
- flex-direction: column;
4008
- gap: var(--spacing-2);
4009
- }
4010
-
4011
- /* Label */
4012
- .muka-textarea__label {
4013
- color: var(--color-text-default-default);
4014
- cursor: pointer;
4015
- }
4016
-
4017
- .muka-textarea__label--sm {
4018
- font-family: var(--text-label-sm-semibold-fontFamily);
4019
- font-weight: var(--text-label-sm-semibold-fontWeight);
4020
- font-size: var(--text-label-sm-semibold-fontSize);
4021
- line-height: var(--text-label-sm-semibold-lineHeight);
4022
- }
4023
-
4024
- .muka-textarea__label--md {
4025
- font-family: var(--text-label-md-semibold-fontFamily);
4026
- font-weight: var(--text-label-md-semibold-fontWeight);
4027
- font-size: var(--text-label-md-semibold-fontSize);
4028
- line-height: var(--text-label-md-semibold-lineHeight);
4029
- }
4030
-
4031
- .muka-textarea__label--lg {
4032
- font-family: var(--text-label-lg-semibold-fontFamily);
4033
- font-weight: var(--text-label-lg-semibold-fontWeight);
4034
- font-size: var(--text-label-lg-semibold-fontSize);
4035
- line-height: var(--text-label-lg-semibold-lineHeight);
4036
- }
4037
-
4038
- .muka-textarea__required {
4039
- color: var(--color-state-error-default);
4040
- }
4041
-
4042
- /* Field container */
4043
- .muka-textarea__field {
4044
- display: flex;
4045
- background-color: var(--input-field-color-default-background);
4046
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
4047
- border-radius: var(--input-field-radius-md);
4048
- padding: var(--input-field-padding-y) var(--input-field-padding-x);
4049
- transition: border-color 0.2s ease, background-color 0.2s ease;
4050
- box-sizing: border-box;
4051
- }
4052
-
4053
- .muka-textarea__field--sm {
4054
- min-height: var(--input-textarea-height-sm);
4055
- border-radius: var(--input-field-radius-sm);
4056
- }
4057
-
4058
- .muka-textarea__field--md {
4059
- min-height: var(--input-textarea-height-default);
4060
- border-radius: var(--input-field-radius-md);
4061
- }
4062
-
4063
- .muka-textarea__field--lg {
4064
- min-height: var(--input-textarea-height-lg);
4065
- border-radius: var(--input-field-radius-lg);
4066
- }
4067
-
4068
- /* Focus state */
4069
- .muka-textarea__field--focused:not(.muka-textarea__field--disabled) {
4070
- border-width: var(--border-width-bold);
4071
- border-color: var(--input-field-color-focus-border);
4072
- background-color: var(--input-field-color-focus-background);
4073
- padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
4074
- }
4075
-
4076
- /* Error state */
4077
- .muka-textarea__field--error:not(.muka-textarea__field--disabled) {
4078
- border-width: var(--border-width-bold);
4079
- border-color: var(--input-field-color-error-border);
4080
- background-color: var(--input-field-color-error-background);
4081
- padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
4082
- }
4083
-
4084
- /* Disabled state */
4085
- .muka-textarea__field--disabled {
4086
- background-color: var(--input-field-color-disabled-background);
4087
- border-color: var(--input-field-color-disabled-border);
4088
- cursor: not-allowed;
4089
- }
4090
-
4091
- /* Native textarea */
4092
- .muka-textarea__native {
4093
- flex: 1;
4094
- border: none;
4095
- outline: none;
4096
- background: transparent;
4097
- color: var(--input-field-color-default-foreground);
4098
- font-family: var(--text-input-md-fontFamily);
4099
- font-weight: var(--text-input-md-fontWeight);
4100
- font-size: var(--text-input-md-fontSize);
4101
- line-height: var(--text-input-md-lineHeight);
4102
- padding: 0;
4103
- width: 100%;
4104
- min-width: 0;
4105
- }
4106
-
4107
- .muka-textarea__field--sm .muka-textarea__native {
4108
- font-family: var(--text-input-sm-fontFamily);
4109
- font-weight: var(--text-input-sm-fontWeight);
4110
- font-size: var(--text-input-sm-fontSize);
4111
- line-height: var(--text-input-sm-lineHeight);
4112
- }
4113
-
4114
- .muka-textarea__field--lg .muka-textarea__native {
4115
- font-family: var(--text-input-lg-fontFamily);
4116
- font-weight: var(--text-input-lg-fontWeight);
4117
- font-size: var(--text-input-lg-fontSize);
4118
- line-height: var(--text-input-lg-lineHeight);
4119
- }
4120
-
4121
- .muka-textarea__native::placeholder {
4122
- color: var(--color-text-subtle-default);
4123
- }
4124
-
4125
- .muka-textarea__field--disabled .muka-textarea__native {
4126
- color: var(--input-field-color-disabled-foreground);
4127
- cursor: not-allowed;
4128
- }
4129
-
4130
- /* Footer (helper/error + count) */
4131
- .muka-textarea__footer {
4132
- display: flex;
4133
- justify-content: space-between;
4134
- align-items: flex-start;
4135
- gap: var(--spacing-2);
4136
- }
4137
-
4138
- .muka-textarea__helper {
4139
- font-family: var(--text-label-sm-regular-fontFamily);
4140
- font-weight: var(--text-label-sm-regular-fontWeight);
4141
- font-size: var(--text-label-sm-regular-fontSize);
4142
- line-height: var(--text-label-sm-regular-lineHeight);
4143
- color: var(--color-text-subtle-default);
4144
- margin: 0;
4145
- }
4146
-
4147
- .muka-textarea__error {
4148
- font-family: var(--text-label-sm-regular-fontFamily);
4149
- font-weight: var(--text-label-sm-regular-fontWeight);
4150
- font-size: var(--text-label-sm-regular-fontSize);
4151
- line-height: var(--text-label-sm-regular-lineHeight);
4152
- color: var(--color-state-error-default);
4153
- margin: 0;
4154
- }
4155
-
4156
- .muka-textarea__count {
4157
- font-family: var(--text-label-sm-regular-fontFamily);
4158
- font-weight: var(--text-label-sm-regular-fontWeight);
4159
- font-size: var(--text-label-sm-regular-fontSize);
4160
- line-height: var(--text-label-sm-regular-lineHeight);
4161
- color: var(--color-text-subtle-default);
4162
- margin-left: auto;
4163
- }
4164
-
4165
-
4166
- /* TextLink */
4167
- /* TextLink Component Styles - Using Muka Design Tokens */
4168
-
4169
- .muka-text-link {
4170
- display: inline;
4171
- cursor: pointer;
4172
- text-decoration: underline;
4173
- /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
4174
- text-underline-offset: 0.2em;
4175
- text-decoration-thickness: from-font;
4176
- /* Rounds the focus ring's corners; the link itself has no visible box. */
4177
- border-radius: var(--border-radius-sm);
4178
- transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
4179
- }
4180
-
4181
- /* ─── Sizes ───────────────────────────────────────────────
4182
- Mirrors the body text scale so a link matches the copy it sits in. */
4183
- .muka-text-link--sm {
4184
- font-family: var(--text-body-sm-regular-fontFamily);
4185
- font-weight: var(--text-body-sm-regular-fontWeight);
4186
- font-size: var(--text-body-sm-regular-fontSize);
4187
- line-height: var(--text-body-sm-regular-lineHeight);
4188
- }
4189
-
4190
- .muka-text-link--base {
4191
- font-family: var(--text-body-base-regular-fontFamily);
4192
- font-weight: var(--text-body-base-regular-fontWeight);
4193
- font-size: var(--text-body-base-regular-fontSize);
4194
- line-height: var(--text-body-base-regular-lineHeight);
4195
- }
4196
-
4197
- .muka-text-link--lg {
4198
- font-family: var(--text-body-lg-regular-fontFamily);
4199
- font-weight: var(--text-body-lg-regular-fontWeight);
4200
- font-size: var(--text-body-lg-regular-fontSize);
4201
- line-height: var(--text-body-lg-regular-lineHeight);
4202
- }
4203
-
4204
- /* ─── Variant: default (accent) ───────────────────────────
4205
- Visited repeats the default colour on purpose: the design treats visited and
4206
- default the same, and pinning it stops the browser's purple from showing. */
4207
- .muka-text-link--default,
4208
- .muka-text-link--default:visited {
4209
- color: var(--color-text-action-default);
4210
- }
4211
-
4212
- .muka-text-link--default:hover,
4213
- .muka-text-link--default:focus-visible {
4214
- color: var(--color-text-action-hover);
4215
- }
4216
-
4217
- .muka-text-link--default:active {
4218
- color: var(--color-text-action-pressed);
4219
- }
4220
-
4221
- /* ─── Variant: subtle (neutral) ───────────────────────────
4222
- Hover, focus and pressed all darken to the default text colour. */
4223
- .muka-text-link--subtle,
4224
- .muka-text-link--subtle:visited {
4225
- color: var(--color-text-subtle-default);
4226
- }
4227
-
4228
- .muka-text-link--subtle:hover,
4229
- .muka-text-link--subtle:focus-visible,
4230
- .muka-text-link--subtle:active {
4231
- color: var(--color-text-default-default);
4232
- }
4233
-
4234
- /* ─── Focus ───────────────────────────────────────────────
4235
- Same ring as every other focusable Muka component. */
4236
- .muka-text-link:focus-visible {
4237
- outline: 2px solid var(--color-border-focus);
4238
- outline-offset: 2px;
4239
- }
4240
-
4241
- @media (prefers-reduced-motion: reduce) {
4242
- .muka-text-link {
4243
- transition: none;
4244
- }
4245
- }
4246
-
4247
-
4248
4248
  /* Table */
4249
4249
  /* Table Component Styles - Using Muka Design Tokens */
4250
4250
 
@@ -4535,65 +4535,173 @@ body {
4535
4535
  text-align: left;
4536
4536
  }
4537
4537
 
4538
- .muka-table__cell--center,
4539
- .muka-table__header-cell--center {
4540
- text-align: center;
4538
+ .muka-table__cell--center,
4539
+ .muka-table__header-cell--center {
4540
+ text-align: center;
4541
+ }
4542
+
4543
+ .muka-table__cell--right,
4544
+ .muka-table__header-cell--right {
4545
+ text-align: right;
4546
+ }
4547
+
4548
+ /* ========================================
4549
+ HEADER CELLS
4550
+ ======================================== */
4551
+
4552
+ .muka-table__header-cell {
4553
+ font-family: var(--text-body-base-bold-fontFamily);
4554
+ font-weight: var(--text-body-base-bold-fontWeight);
4555
+ font-size: var(--text-body-base-bold-fontSize);
4556
+ line-height: var(--text-body-base-bold-lineHeight);
4557
+ color: var(--color-text-default-default);
4558
+ white-space: nowrap;
4559
+ }
4560
+
4561
+ .muka-table__header-content {
4562
+ display: inline-flex;
4563
+ align-items: center;
4564
+ gap: var(--spacing-1);
4565
+ }
4566
+
4567
+ /* Sortable */
4568
+ .muka-table__header-cell--sortable {
4569
+ cursor: pointer;
4570
+ user-select: none;
4571
+ }
4572
+
4573
+ .muka-table__header-cell--sortable:hover {
4574
+ color: var(--color-text-default-default);
4575
+ }
4576
+
4577
+ .muka-table__header-cell--sortable:focus-visible {
4578
+ outline: 2px solid var(--color-action-default);
4579
+ outline-offset: -2px;
4580
+ }
4581
+
4582
+ /* Sort icon */
4583
+ .muka-table__sort-icon {
4584
+ width: 1em;
4585
+ height: 1em;
4586
+ opacity: 0.4;
4587
+ transition: opacity 0.2s, transform 0.2s;
4588
+ }
4589
+
4590
+ .muka-table__header-cell--sortable:hover .muka-table__sort-icon {
4591
+ opacity: 0.7;
4592
+ }
4593
+
4594
+ .muka-table__sort-icon--asc,
4595
+ .muka-table__sort-icon--desc {
4596
+ opacity: 1;
4597
+ }
4598
+
4599
+
4600
+ /* SwipeActions */
4601
+ /* SwipeActions Component Styles */
4602
+
4603
+ .muka-swipe-actions {
4604
+ position: relative;
4605
+ overflow: hidden;
4606
+ touch-action: pan-y;
4607
+ -webkit-user-select: none;
4608
+ user-select: none;
4609
+ background-color: var(--color-surface-level3);
4610
+ }
4611
+
4612
+ .muka-swipe-actions--disabled {
4613
+ touch-action: auto;
4614
+ }
4615
+
4616
+ /* ─── Row that holds the actual content ────────────────── */
4617
+
4618
+ .muka-swipe-actions__row {
4619
+ position: relative;
4620
+ z-index: 1;
4621
+ background-color: inherit;
4622
+ will-change: transform;
4623
+ }
4624
+
4625
+ /* ─── Action panels — sit beneath the row ──────────────── */
4626
+
4627
+ .muka-swipe-actions__panel {
4628
+ position: absolute;
4629
+ top: 0;
4630
+ bottom: 0;
4631
+ display: flex;
4632
+ align-items: stretch;
4633
+ z-index: 0;
4634
+ }
4635
+
4636
+ .muka-swipe-actions__panel--left {
4637
+ left: 0;
4638
+ }
4639
+
4640
+ .muka-swipe-actions__panel--right {
4641
+ right: 0;
4541
4642
  }
4542
4643
 
4543
- .muka-table__cell--right,
4544
- .muka-table__header-cell--right {
4545
- text-align: right;
4644
+ /* ─── Single action button ─────────────────────────────── */
4645
+
4646
+ .muka-swipe-actions__button {
4647
+ display: flex;
4648
+ flex-direction: column;
4649
+ align-items: center;
4650
+ justify-content: center;
4651
+ gap: var(--spacing-1);
4652
+ border: none;
4653
+ cursor: pointer;
4654
+ padding: var(--spacing-2);
4655
+ background-color: var(--color-surface-level2);
4656
+ color: var(--color-text-default-default);
4657
+ font-family: var(--text-label-sm-semibold-fontFamily);
4658
+ font-weight: var(--text-label-sm-semibold-fontWeight);
4659
+ font-size: var(--text-label-sm-semibold-fontSize);
4660
+ line-height: var(--text-label-sm-semibold-lineHeight);
4661
+ -webkit-tap-highlight-color: transparent;
4662
+ transition: filter 0.12s ease;
4546
4663
  }
4547
4664
 
4548
- /* ========================================
4549
- HEADER CELLS
4550
- ======================================== */
4665
+ .muka-swipe-actions__button:hover {
4666
+ filter: brightness(0.95);
4667
+ }
4551
4668
 
4552
- .muka-table__header-cell {
4553
- font-family: var(--text-body-base-bold-fontFamily);
4554
- font-weight: var(--text-body-base-bold-fontWeight);
4555
- font-size: var(--text-body-base-bold-fontSize);
4556
- line-height: var(--text-body-base-bold-lineHeight);
4557
- color: var(--color-text-default-default);
4558
- white-space: nowrap;
4669
+ .muka-swipe-actions__button:focus-visible {
4670
+ outline: 2px solid var(--color-action-default);
4671
+ outline-offset: -2px;
4559
4672
  }
4560
4673
 
4561
- .muka-table__header-content {
4674
+ .muka-swipe-actions__button-icon {
4562
4675
  display: inline-flex;
4563
4676
  align-items: center;
4564
- gap: var(--spacing-1);
4677
+ justify-content: center;
4565
4678
  }
4566
4679
 
4567
- /* Sortable */
4568
- .muka-table__header-cell--sortable {
4569
- cursor: pointer;
4570
- user-select: none;
4571
- }
4680
+ /* ─── Color variants ───────────────────────────────────── */
4572
4681
 
4573
- .muka-table__header-cell--sortable:hover {
4682
+ .muka-swipe-actions__button--neutral {
4683
+ background-color: var(--color-surface-level2);
4574
4684
  color: var(--color-text-default-default);
4575
4685
  }
4576
4686
 
4577
- .muka-table__header-cell--sortable:focus-visible {
4578
- outline: 2px solid var(--color-action-default);
4579
- outline-offset: -2px;
4687
+ .muka-swipe-actions__button--primary {
4688
+ background-color: var(--color-action-default);
4689
+ color: var(--color-text-default-inverse);
4580
4690
  }
4581
4691
 
4582
- /* Sort icon */
4583
- .muka-table__sort-icon {
4584
- width: 1em;
4585
- height: 1em;
4586
- opacity: 0.4;
4587
- transition: opacity 0.2s, transform 0.2s;
4692
+ .muka-swipe-actions__button--success {
4693
+ background-color: var(--color-state-success-default);
4694
+ color: var(--color-text-default-inverse);
4588
4695
  }
4589
4696
 
4590
- .muka-table__header-cell--sortable:hover .muka-table__sort-icon {
4591
- opacity: 0.7;
4697
+ .muka-swipe-actions__button--warning {
4698
+ background-color: var(--color-state-warning-default);
4699
+ color: var(--color-text-default-default);
4592
4700
  }
4593
4701
 
4594
- .muka-table__sort-icon--asc,
4595
- .muka-table__sort-icon--desc {
4596
- opacity: 1;
4702
+ .muka-swipe-actions__button--destructive {
4703
+ background-color: var(--color-state-error-default);
4704
+ color: var(--color-text-default-inverse);
4597
4705
  }
4598
4706
 
4599
4707
 
@@ -4760,114 +4868,6 @@ body {
4760
4868
  }
4761
4869
 
4762
4870
 
4763
- /* SwipeActions */
4764
- /* SwipeActions Component Styles */
4765
-
4766
- .muka-swipe-actions {
4767
- position: relative;
4768
- overflow: hidden;
4769
- touch-action: pan-y;
4770
- -webkit-user-select: none;
4771
- user-select: none;
4772
- background-color: var(--color-surface-level3);
4773
- }
4774
-
4775
- .muka-swipe-actions--disabled {
4776
- touch-action: auto;
4777
- }
4778
-
4779
- /* ─── Row that holds the actual content ────────────────── */
4780
-
4781
- .muka-swipe-actions__row {
4782
- position: relative;
4783
- z-index: 1;
4784
- background-color: inherit;
4785
- will-change: transform;
4786
- }
4787
-
4788
- /* ─── Action panels — sit beneath the row ──────────────── */
4789
-
4790
- .muka-swipe-actions__panel {
4791
- position: absolute;
4792
- top: 0;
4793
- bottom: 0;
4794
- display: flex;
4795
- align-items: stretch;
4796
- z-index: 0;
4797
- }
4798
-
4799
- .muka-swipe-actions__panel--left {
4800
- left: 0;
4801
- }
4802
-
4803
- .muka-swipe-actions__panel--right {
4804
- right: 0;
4805
- }
4806
-
4807
- /* ─── Single action button ─────────────────────────────── */
4808
-
4809
- .muka-swipe-actions__button {
4810
- display: flex;
4811
- flex-direction: column;
4812
- align-items: center;
4813
- justify-content: center;
4814
- gap: var(--spacing-1);
4815
- border: none;
4816
- cursor: pointer;
4817
- padding: var(--spacing-2);
4818
- background-color: var(--color-surface-level2);
4819
- color: var(--color-text-default-default);
4820
- font-family: var(--text-label-sm-semibold-fontFamily);
4821
- font-weight: var(--text-label-sm-semibold-fontWeight);
4822
- font-size: var(--text-label-sm-semibold-fontSize);
4823
- line-height: var(--text-label-sm-semibold-lineHeight);
4824
- -webkit-tap-highlight-color: transparent;
4825
- transition: filter 0.12s ease;
4826
- }
4827
-
4828
- .muka-swipe-actions__button:hover {
4829
- filter: brightness(0.95);
4830
- }
4831
-
4832
- .muka-swipe-actions__button:focus-visible {
4833
- outline: 2px solid var(--color-action-default);
4834
- outline-offset: -2px;
4835
- }
4836
-
4837
- .muka-swipe-actions__button-icon {
4838
- display: inline-flex;
4839
- align-items: center;
4840
- justify-content: center;
4841
- }
4842
-
4843
- /* ─── Color variants ───────────────────────────────────── */
4844
-
4845
- .muka-swipe-actions__button--neutral {
4846
- background-color: var(--color-surface-level2);
4847
- color: var(--color-text-default-default);
4848
- }
4849
-
4850
- .muka-swipe-actions__button--primary {
4851
- background-color: var(--color-action-default);
4852
- color: var(--color-text-default-inverse);
4853
- }
4854
-
4855
- .muka-swipe-actions__button--success {
4856
- background-color: var(--color-state-success-default);
4857
- color: var(--color-text-default-inverse);
4858
- }
4859
-
4860
- .muka-swipe-actions__button--warning {
4861
- background-color: var(--color-state-warning-default);
4862
- color: var(--color-text-default-default);
4863
- }
4864
-
4865
- .muka-swipe-actions__button--destructive {
4866
- background-color: var(--color-state-error-default);
4867
- color: var(--color-text-default-inverse);
4868
- }
4869
-
4870
-
4871
4871
  /* SocialSignInButton */
4872
4872
  /*
4873
4873
  * SocialSignInButton lockup colors are provider-mandated (Apple HIG /
@@ -10788,6 +10788,38 @@ li.muka-listitem {
10788
10788
  }
10789
10789
 
10790
10790
 
10791
+ /* DatePicker */
10792
+ /* DatePicker — compact native date field. */
10793
+ /* Field/label/helper styling is inherited from ../Input/Input.css. */
10794
+
10795
+ /* Adopt the field typography on the native date input. */
10796
+ .muka-datepicker__field .muka-input__native {
10797
+ font-family: var(--text-input-md-fontFamily);
10798
+ font-size: var(--text-input-md-fontSize);
10799
+ line-height: var(--text-input-md-lineHeight);
10800
+ }
10801
+
10802
+ .muka-datepicker__field--sm .muka-input__native {
10803
+ font-family: var(--text-input-sm-fontFamily);
10804
+ font-size: var(--text-input-sm-fontSize);
10805
+ line-height: var(--text-input-sm-lineHeight);
10806
+ }
10807
+
10808
+ /* Tint the browser calendar indicator to match the field foreground. */
10809
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
10810
+ cursor: pointer;
10811
+ opacity: 0.6;
10812
+ }
10813
+
10814
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
10815
+ opacity: 1;
10816
+ }
10817
+
10818
+ .muka-datepicker__field .muka-input__native:disabled {
10819
+ cursor: not-allowed;
10820
+ }
10821
+
10822
+
10791
10823
  /* Dialog */
10792
10824
  /* Dialog Component Styles */
10793
10825
 
@@ -11049,42 +11081,10 @@ li.muka-listitem {
11049
11081
  box-shadow: var(--shadow-level2);
11050
11082
  }
11051
11083
 
11052
- .muka-dialog .muka-bottombar {
11053
- position: relative;
11054
- z-index: 1;
11055
- box-shadow: var(--shadow-level2);
11056
- }
11057
-
11058
-
11059
- /* DatePicker */
11060
- /* DatePicker — compact native date field. */
11061
- /* Field/label/helper styling is inherited from ../Input/Input.css. */
11062
-
11063
- /* Adopt the field typography on the native date input. */
11064
- .muka-datepicker__field .muka-input__native {
11065
- font-family: var(--text-input-md-fontFamily);
11066
- font-size: var(--text-input-md-fontSize);
11067
- line-height: var(--text-input-md-lineHeight);
11068
- }
11069
-
11070
- .muka-datepicker__field--sm .muka-input__native {
11071
- font-family: var(--text-input-sm-fontFamily);
11072
- font-size: var(--text-input-sm-fontSize);
11073
- line-height: var(--text-input-sm-lineHeight);
11074
- }
11075
-
11076
- /* Tint the browser calendar indicator to match the field foreground. */
11077
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
11078
- cursor: pointer;
11079
- opacity: 0.6;
11080
- }
11081
-
11082
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
11083
- opacity: 1;
11084
- }
11085
-
11086
- .muka-datepicker__field .muka-input__native:disabled {
11087
- cursor: not-allowed;
11084
+ .muka-dialog .muka-bottombar {
11085
+ position: relative;
11086
+ z-index: 1;
11087
+ box-shadow: var(--shadow-level2);
11088
11088
  }
11089
11089
 
11090
11090
 
@@ -12405,6 +12405,128 @@ li.muka-listitem {
12405
12405
  }
12406
12406
 
12407
12407
 
12408
+ /* ChatPhotoGrid */
12409
+ /* ChatPhotoGrid Component Styles */
12410
+
12411
+ /*
12412
+ * The grid clips to its own radius and the tiles stay square, so only the four
12413
+ * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12414
+ */
12415
+ .muka-chat-photo-grid {
12416
+ display: grid;
12417
+ gap: var(--chatphotogrid-gap);
12418
+ width: 100%;
12419
+ min-width: 0;
12420
+ overflow: hidden;
12421
+ border-radius: var(--chatphotogrid-radius);
12422
+ }
12423
+
12424
+ /* ─── Tiles ────────────────────────────────────────────── */
12425
+
12426
+ .muka-chat-photo-grid__tile {
12427
+ position: relative;
12428
+ display: block;
12429
+ overflow: hidden;
12430
+ min-width: 0;
12431
+ padding: 0;
12432
+ margin: 0;
12433
+ border: none;
12434
+ background-color: var(--chatphotogrid-color-placeholder);
12435
+ aspect-ratio: 1 / 1;
12436
+ }
12437
+
12438
+ button.muka-chat-photo-grid__tile {
12439
+ cursor: pointer;
12440
+ appearance: none;
12441
+ }
12442
+
12443
+ button.muka-chat-photo-grid__tile:focus-visible {
12444
+ outline: var(--border-width-bold) solid var(--color-border-focus);
12445
+ /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12446
+ outline-offset: calc(-1 * var(--border-width-bold));
12447
+ }
12448
+
12449
+ .muka-chat-photo-grid__image {
12450
+ display: block;
12451
+ width: 100%;
12452
+ height: 100%;
12453
+ object-fit: cover;
12454
+ }
12455
+
12456
+ /* ─── Overflow tile ────────────────────────────────────── */
12457
+
12458
+ .muka-chat-photo-grid__overflow {
12459
+ position: absolute;
12460
+ inset: 0;
12461
+ display: flex;
12462
+ align-items: center;
12463
+ justify-content: center;
12464
+ background-color: var(--chatphotogrid-color-overflow-background);
12465
+ color: var(--chatphotogrid-color-overflow-foreground);
12466
+ font-family: var(--text-body-2xl-regular-fontFamily);
12467
+ font-weight: var(--text-body-2xl-regular-fontWeight);
12468
+ font-size: var(--text-body-2xl-regular-fontSize);
12469
+ line-height: var(--text-body-2xl-regular-lineHeight);
12470
+ }
12471
+
12472
+ /* ─── Layouts ──────────────────────────────────────────── */
12473
+
12474
+ .muka-chat-photo-grid--1 {
12475
+ grid-template-columns: 1fr;
12476
+ }
12477
+
12478
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12479
+ aspect-ratio: 4 / 3;
12480
+ }
12481
+
12482
+ .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12483
+ aspect-ratio: 3 / 4;
12484
+ }
12485
+
12486
+ .muka-chat-photo-grid--2 {
12487
+ grid-template-columns: repeat(2, 1fr);
12488
+ }
12489
+
12490
+ .muka-chat-photo-grid--3 {
12491
+ grid-template-columns: repeat(3, 1fr);
12492
+ }
12493
+
12494
+ .muka-chat-photo-grid--4 {
12495
+ grid-template-columns: repeat(2, 1fr);
12496
+ }
12497
+
12498
+ /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12499
+ .muka-chat-photo-grid--5 {
12500
+ grid-template-columns: repeat(6, 1fr);
12501
+ }
12502
+
12503
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12504
+ grid-column: span 3;
12505
+ }
12506
+
12507
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12508
+ grid-column: span 2;
12509
+ }
12510
+
12511
+ .muka-chat-photo-grid--6,
12512
+ .muka-chat-photo-grid--overflow {
12513
+ grid-template-columns: repeat(3, 1fr);
12514
+ }
12515
+
12516
+ /* ─── Print ────────────────────────────────────────────── */
12517
+
12518
+ @media print {
12519
+ .muka-chat-photo-grid {
12520
+ break-inside: avoid;
12521
+ }
12522
+
12523
+ .muka-chat-photo-grid__image {
12524
+ print-color-adjust: exact;
12525
+ -webkit-print-color-adjust: exact;
12526
+ }
12527
+ }
12528
+
12529
+
12408
12530
  /* Checkbox */
12409
12531
  /* Checkbox Component Styles - Using Muka Design Tokens */
12410
12532
 
@@ -12539,158 +12661,36 @@ li.muka-listitem {
12539
12661
  box-shadow: none;
12540
12662
  }
12541
12663
 
12542
- .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12543
- .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12544
- color: var(--checkbox-color-disabled-icon);
12545
- }
12546
-
12547
- /* Label text */
12548
- .muka-checkbox__label {
12549
- font-family: var(--text-label-lg-regular-fontFamily);
12550
- font-weight: var(--text-label-lg-regular-fontWeight);
12551
- font-size: var(--text-label-lg-regular-fontSize);
12552
- line-height: var(--text-label-lg-regular-lineHeight);
12553
- color: var(--color-text-default-default);
12554
- }
12555
-
12556
- .muka-checkbox--sm .muka-checkbox__label {
12557
- font-family: var(--text-label-md-regular-fontFamily);
12558
- font-weight: var(--text-label-md-regular-fontWeight);
12559
- font-size: var(--text-label-md-regular-fontSize);
12560
- line-height: var(--text-label-md-regular-lineHeight);
12561
- }
12562
-
12563
- .muka-checkbox--lg .muka-checkbox__label {
12564
- font-family: var(--text-label-xl-regular-fontFamily);
12565
- font-weight: var(--text-label-xl-regular-fontWeight);
12566
- font-size: var(--text-label-xl-regular-fontSize);
12567
- line-height: var(--text-label-xl-regular-lineHeight);
12568
- }
12569
-
12570
- .muka-checkbox--disabled .muka-checkbox__label {
12571
- color: var(--color-text-subtle-default);
12572
- }
12573
-
12574
-
12575
- /* ChatPhotoGrid */
12576
- /* ChatPhotoGrid Component Styles */
12577
-
12578
- /*
12579
- * The grid clips to its own radius and the tiles stay square, so only the four
12580
- * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12581
- */
12582
- .muka-chat-photo-grid {
12583
- display: grid;
12584
- gap: var(--chatphotogrid-gap);
12585
- width: 100%;
12586
- min-width: 0;
12587
- overflow: hidden;
12588
- border-radius: var(--chatphotogrid-radius);
12589
- }
12590
-
12591
- /* ─── Tiles ────────────────────────────────────────────── */
12592
-
12593
- .muka-chat-photo-grid__tile {
12594
- position: relative;
12595
- display: block;
12596
- overflow: hidden;
12597
- min-width: 0;
12598
- padding: 0;
12599
- margin: 0;
12600
- border: none;
12601
- background-color: var(--chatphotogrid-color-placeholder);
12602
- aspect-ratio: 1 / 1;
12603
- }
12604
-
12605
- button.muka-chat-photo-grid__tile {
12606
- cursor: pointer;
12607
- appearance: none;
12608
- }
12609
-
12610
- button.muka-chat-photo-grid__tile:focus-visible {
12611
- outline: var(--border-width-bold) solid var(--color-border-focus);
12612
- /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12613
- outline-offset: calc(-1 * var(--border-width-bold));
12614
- }
12615
-
12616
- .muka-chat-photo-grid__image {
12617
- display: block;
12618
- width: 100%;
12619
- height: 100%;
12620
- object-fit: cover;
12621
- }
12622
-
12623
- /* ─── Overflow tile ────────────────────────────────────── */
12624
-
12625
- .muka-chat-photo-grid__overflow {
12626
- position: absolute;
12627
- inset: 0;
12628
- display: flex;
12629
- align-items: center;
12630
- justify-content: center;
12631
- background-color: var(--chatphotogrid-color-overflow-background);
12632
- color: var(--chatphotogrid-color-overflow-foreground);
12633
- font-family: var(--text-body-2xl-regular-fontFamily);
12634
- font-weight: var(--text-body-2xl-regular-fontWeight);
12635
- font-size: var(--text-body-2xl-regular-fontSize);
12636
- line-height: var(--text-body-2xl-regular-lineHeight);
12637
- }
12638
-
12639
- /* ─── Layouts ──────────────────────────────────────────── */
12640
-
12641
- .muka-chat-photo-grid--1 {
12642
- grid-template-columns: 1fr;
12643
- }
12644
-
12645
- .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12646
- aspect-ratio: 4 / 3;
12647
- }
12648
-
12649
- .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12650
- aspect-ratio: 3 / 4;
12651
- }
12652
-
12653
- .muka-chat-photo-grid--2 {
12654
- grid-template-columns: repeat(2, 1fr);
12655
- }
12656
-
12657
- .muka-chat-photo-grid--3 {
12658
- grid-template-columns: repeat(3, 1fr);
12659
- }
12660
-
12661
- .muka-chat-photo-grid--4 {
12662
- grid-template-columns: repeat(2, 1fr);
12663
- }
12664
-
12665
- /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12666
- .muka-chat-photo-grid--5 {
12667
- grid-template-columns: repeat(6, 1fr);
12668
- }
12669
-
12670
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12671
- grid-column: span 3;
12664
+ .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12665
+ .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12666
+ color: var(--checkbox-color-disabled-icon);
12672
12667
  }
12673
12668
 
12674
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12675
- grid-column: span 2;
12669
+ /* Label text */
12670
+ .muka-checkbox__label {
12671
+ font-family: var(--text-label-lg-regular-fontFamily);
12672
+ font-weight: var(--text-label-lg-regular-fontWeight);
12673
+ font-size: var(--text-label-lg-regular-fontSize);
12674
+ line-height: var(--text-label-lg-regular-lineHeight);
12675
+ color: var(--color-text-default-default);
12676
12676
  }
12677
12677
 
12678
- .muka-chat-photo-grid--6,
12679
- .muka-chat-photo-grid--overflow {
12680
- grid-template-columns: repeat(3, 1fr);
12678
+ .muka-checkbox--sm .muka-checkbox__label {
12679
+ font-family: var(--text-label-md-regular-fontFamily);
12680
+ font-weight: var(--text-label-md-regular-fontWeight);
12681
+ font-size: var(--text-label-md-regular-fontSize);
12682
+ line-height: var(--text-label-md-regular-lineHeight);
12681
12683
  }
12682
12684
 
12683
- /* ─── Print ────────────────────────────────────────────── */
12684
-
12685
- @media print {
12686
- .muka-chat-photo-grid {
12687
- break-inside: avoid;
12688
- }
12685
+ .muka-checkbox--lg .muka-checkbox__label {
12686
+ font-family: var(--text-label-xl-regular-fontFamily);
12687
+ font-weight: var(--text-label-xl-regular-fontWeight);
12688
+ font-size: var(--text-label-xl-regular-fontSize);
12689
+ line-height: var(--text-label-xl-regular-lineHeight);
12690
+ }
12689
12691
 
12690
- .muka-chat-photo-grid__image {
12691
- print-color-adjust: exact;
12692
- -webkit-print-color-adjust: exact;
12693
- }
12692
+ .muka-checkbox--disabled .muka-checkbox__label {
12693
+ color: var(--color-text-subtle-default);
12694
12694
  }
12695
12695
 
12696
12696
 
@@ -13979,6 +13979,114 @@ button.muka-chat-photo-grid__tile:focus-visible {
13979
13979
  }
13980
13980
 
13981
13981
 
13982
+ /* BadgeNumber */
13983
+ /* BadgeNumber Component Styles - Using Muka Design Tokens */
13984
+
13985
+ .muka-badge-number {
13986
+ display: inline-flex;
13987
+ align-items: center;
13988
+ justify-content: center;
13989
+ border-radius: var(--border-radius-full);
13990
+ white-space: nowrap;
13991
+ user-select: none;
13992
+ box-sizing: border-box;
13993
+ }
13994
+
13995
+ /*
13996
+ * Sizes — fixed height, matching min-width (so a single digit renders as a
13997
+ * circle), horizontal padding, and bold label typography. Vertical centering
13998
+ * is handled by the fixed height + align-items: center.
13999
+ */
14000
+ .muka-badge-number--2xs {
14001
+ height: var(--badge-number-size-2xs);
14002
+ min-width: var(--badge-number-size-2xs);
14003
+ padding: 0 var(--badge-number-padding-2xs);
14004
+ font-family: var(--text-label-xs-bold-fontFamily);
14005
+ font-weight: var(--text-label-xs-bold-fontWeight);
14006
+ font-size: var(--text-label-xs-bold-fontSize);
14007
+ line-height: var(--text-label-xs-bold-lineHeight);
14008
+ }
14009
+
14010
+ .muka-badge-number--xs {
14011
+ height: var(--badge-number-size-xs);
14012
+ min-width: var(--badge-number-size-xs);
14013
+ padding: 0 var(--badge-number-padding-xs);
14014
+ font-family: var(--text-label-sm-bold-fontFamily);
14015
+ font-weight: var(--text-label-sm-bold-fontWeight);
14016
+ font-size: var(--text-label-sm-bold-fontSize);
14017
+ line-height: var(--text-label-sm-bold-lineHeight);
14018
+ }
14019
+
14020
+ .muka-badge-number--sm {
14021
+ height: var(--badge-number-size-sm);
14022
+ min-width: var(--badge-number-size-sm);
14023
+ padding: 0 var(--badge-number-padding-sm);
14024
+ font-family: var(--text-label-md-bold-fontFamily);
14025
+ font-weight: var(--text-label-md-bold-fontWeight);
14026
+ font-size: var(--text-label-md-bold-fontSize);
14027
+ line-height: var(--text-label-md-bold-lineHeight);
14028
+ }
14029
+
14030
+ .muka-badge-number--md {
14031
+ height: var(--badge-number-size-md);
14032
+ min-width: var(--badge-number-size-md);
14033
+ padding: 0 var(--badge-number-padding-md);
14034
+ font-family: var(--text-label-lg-bold-fontFamily);
14035
+ font-weight: var(--text-label-lg-bold-fontWeight);
14036
+ font-size: var(--text-label-lg-bold-fontSize);
14037
+ line-height: var(--text-label-lg-bold-lineHeight);
14038
+ }
14039
+
14040
+ .muka-badge-number--lg {
14041
+ height: var(--badge-number-size-lg);
14042
+ min-width: var(--badge-number-size-lg);
14043
+ padding: 0 var(--badge-number-padding-lg);
14044
+ font-family: var(--text-label-2xl-bold-fontFamily);
14045
+ font-weight: var(--text-label-2xl-bold-fontWeight);
14046
+ font-size: var(--text-label-2xl-bold-fontSize);
14047
+ line-height: var(--text-label-2xl-bold-lineHeight);
14048
+ }
14049
+
14050
+ .muka-badge-number__label {
14051
+ /*
14052
+ * The badge sets a tight line-height for compact sizing, which would clip
14053
+ * glyph descenders; give the label a roomier line-height. Vertical centering
14054
+ * is unaffected because the badge height is fixed and content is centered.
14055
+ */
14056
+ line-height: normal;
14057
+ }
14058
+
14059
+ /* Neutral variant */
14060
+ .muka-badge-number--neutral {
14061
+ background-color: var(--color-surface-level1);
14062
+ color: var(--color-text-default-default);
14063
+ }
14064
+
14065
+ /* Info variant */
14066
+ .muka-badge-number--info {
14067
+ background-color: var(--color-state-info-contrast);
14068
+ color: var(--color-text-default-inverse);
14069
+ }
14070
+
14071
+ /* Success variant */
14072
+ .muka-badge-number--success {
14073
+ background-color: var(--color-state-success-contrast);
14074
+ color: var(--color-text-default-inverse);
14075
+ }
14076
+
14077
+ /* Warning variant */
14078
+ .muka-badge-number--warning {
14079
+ background-color: var(--color-state-warning-contrast);
14080
+ color: var(--color-text-default-inverse);
14081
+ }
14082
+
14083
+ /* Error variant */
14084
+ .muka-badge-number--error {
14085
+ background-color: var(--color-state-error-contrast);
14086
+ color: var(--color-text-default-inverse);
14087
+ }
14088
+
14089
+
13982
14090
  /* BottomBar */
13983
14091
  /* BottomBar Component Styles */
13984
14092
 
@@ -14295,114 +14403,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
14295
14403
  }
14296
14404
 
14297
14405
 
14298
- /* BadgeNumber */
14299
- /* BadgeNumber Component Styles - Using Muka Design Tokens */
14300
-
14301
- .muka-badge-number {
14302
- display: inline-flex;
14303
- align-items: center;
14304
- justify-content: center;
14305
- border-radius: var(--border-radius-full);
14306
- white-space: nowrap;
14307
- user-select: none;
14308
- box-sizing: border-box;
14309
- }
14310
-
14311
- /*
14312
- * Sizes — fixed height, matching min-width (so a single digit renders as a
14313
- * circle), horizontal padding, and bold label typography. Vertical centering
14314
- * is handled by the fixed height + align-items: center.
14315
- */
14316
- .muka-badge-number--2xs {
14317
- height: var(--badge-number-size-2xs);
14318
- min-width: var(--badge-number-size-2xs);
14319
- padding: 0 var(--badge-number-padding-2xs);
14320
- font-family: var(--text-label-xs-bold-fontFamily);
14321
- font-weight: var(--text-label-xs-bold-fontWeight);
14322
- font-size: var(--text-label-xs-bold-fontSize);
14323
- line-height: var(--text-label-xs-bold-lineHeight);
14324
- }
14325
-
14326
- .muka-badge-number--xs {
14327
- height: var(--badge-number-size-xs);
14328
- min-width: var(--badge-number-size-xs);
14329
- padding: 0 var(--badge-number-padding-xs);
14330
- font-family: var(--text-label-sm-bold-fontFamily);
14331
- font-weight: var(--text-label-sm-bold-fontWeight);
14332
- font-size: var(--text-label-sm-bold-fontSize);
14333
- line-height: var(--text-label-sm-bold-lineHeight);
14334
- }
14335
-
14336
- .muka-badge-number--sm {
14337
- height: var(--badge-number-size-sm);
14338
- min-width: var(--badge-number-size-sm);
14339
- padding: 0 var(--badge-number-padding-sm);
14340
- font-family: var(--text-label-md-bold-fontFamily);
14341
- font-weight: var(--text-label-md-bold-fontWeight);
14342
- font-size: var(--text-label-md-bold-fontSize);
14343
- line-height: var(--text-label-md-bold-lineHeight);
14344
- }
14345
-
14346
- .muka-badge-number--md {
14347
- height: var(--badge-number-size-md);
14348
- min-width: var(--badge-number-size-md);
14349
- padding: 0 var(--badge-number-padding-md);
14350
- font-family: var(--text-label-lg-bold-fontFamily);
14351
- font-weight: var(--text-label-lg-bold-fontWeight);
14352
- font-size: var(--text-label-lg-bold-fontSize);
14353
- line-height: var(--text-label-lg-bold-lineHeight);
14354
- }
14355
-
14356
- .muka-badge-number--lg {
14357
- height: var(--badge-number-size-lg);
14358
- min-width: var(--badge-number-size-lg);
14359
- padding: 0 var(--badge-number-padding-lg);
14360
- font-family: var(--text-label-2xl-bold-fontFamily);
14361
- font-weight: var(--text-label-2xl-bold-fontWeight);
14362
- font-size: var(--text-label-2xl-bold-fontSize);
14363
- line-height: var(--text-label-2xl-bold-lineHeight);
14364
- }
14365
-
14366
- .muka-badge-number__label {
14367
- /*
14368
- * The badge sets a tight line-height for compact sizing, which would clip
14369
- * glyph descenders; give the label a roomier line-height. Vertical centering
14370
- * is unaffected because the badge height is fixed and content is centered.
14371
- */
14372
- line-height: normal;
14373
- }
14374
-
14375
- /* Neutral variant */
14376
- .muka-badge-number--neutral {
14377
- background-color: var(--color-surface-level1);
14378
- color: var(--color-text-default-default);
14379
- }
14380
-
14381
- /* Info variant */
14382
- .muka-badge-number--info {
14383
- background-color: var(--color-state-info-contrast);
14384
- color: var(--color-text-default-inverse);
14385
- }
14386
-
14387
- /* Success variant */
14388
- .muka-badge-number--success {
14389
- background-color: var(--color-state-success-contrast);
14390
- color: var(--color-text-default-inverse);
14391
- }
14392
-
14393
- /* Warning variant */
14394
- .muka-badge-number--warning {
14395
- background-color: var(--color-state-warning-contrast);
14396
- color: var(--color-text-default-inverse);
14397
- }
14398
-
14399
- /* Error variant */
14400
- .muka-badge-number--error {
14401
- background-color: var(--color-state-error-contrast);
14402
- color: var(--color-text-default-inverse);
14403
- }
14404
-
14405
-
14406
14406
  /* Badge */
14407
14407
  /* Badge Component Styles - Using Muka Design Tokens */
14408
14408