@revikornmann/muka-ui 0.13.0 → 0.14.0

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.
@@ -2887,6 +2887,196 @@ body {
2887
2887
  }
2888
2888
 
2889
2889
 
2890
+ /* Toast */
2891
+ /* Toast Component Styles - Using Muka Design Tokens */
2892
+
2893
+ .muka-toast {
2894
+ display: flex;
2895
+ align-items: flex-start;
2896
+ gap: var(--toast-gap);
2897
+ padding: var(--toast-padding-y) var(--toast-padding-x);
2898
+ border-radius: var(--toast-radius);
2899
+ box-shadow: var(--toast-shadow);
2900
+ min-width: var(--toast-width-min);
2901
+ max-width: var(--toast-width-max);
2902
+ pointer-events: auto;
2903
+ animation: muka-toast-slide-in 0.2s ease-out;
2904
+ }
2905
+
2906
+ /* Entry animation */
2907
+ @keyframes muka-toast-slide-in {
2908
+ from {
2909
+ opacity: 0;
2910
+ transform: translateY(8px);
2911
+ }
2912
+ to {
2913
+ opacity: 1;
2914
+ transform: translateY(0);
2915
+ }
2916
+ }
2917
+
2918
+ /* Position variants (for standalone use - typically managed by ToastProvider) */
2919
+ .muka-toast--top-right,
2920
+ .muka-toast--top-left,
2921
+ .muka-toast--top-center,
2922
+ .muka-toast--bottom-right,
2923
+ .muka-toast--bottom-left,
2924
+ .muka-toast--bottom-center {
2925
+ position: fixed;
2926
+ z-index: 9999;
2927
+ }
2928
+
2929
+ .muka-toast--top-right {
2930
+ top: var(--spacing-4);
2931
+ right: var(--spacing-4);
2932
+ }
2933
+
2934
+ .muka-toast--top-left {
2935
+ top: var(--spacing-4);
2936
+ left: var(--spacing-4);
2937
+ }
2938
+
2939
+ .muka-toast--top-center {
2940
+ top: var(--spacing-4);
2941
+ left: 50%;
2942
+ transform: translateX(-50%);
2943
+ }
2944
+
2945
+ .muka-toast--bottom-right {
2946
+ bottom: var(--spacing-4);
2947
+ right: var(--spacing-4);
2948
+ }
2949
+
2950
+ .muka-toast--bottom-left {
2951
+ bottom: var(--spacing-4);
2952
+ left: var(--spacing-4);
2953
+ }
2954
+
2955
+ .muka-toast--bottom-center {
2956
+ bottom: var(--spacing-4);
2957
+ left: 50%;
2958
+ transform: translateX(-50%);
2959
+ }
2960
+
2961
+ /* Variant: Info */
2962
+ .muka-toast--info {
2963
+ background-color: var(--toast-color-info-background);
2964
+ color: var(--toast-color-info-foreground);
2965
+ }
2966
+
2967
+ .muka-toast--info .muka-toast__icon {
2968
+ color: var(--toast-color-info-accent);
2969
+ }
2970
+
2971
+ /* Variant: Success */
2972
+ .muka-toast--success {
2973
+ background-color: var(--toast-color-success-background);
2974
+ color: var(--toast-color-success-foreground);
2975
+ }
2976
+
2977
+ .muka-toast--success .muka-toast__icon {
2978
+ color: var(--toast-color-success-accent);
2979
+ }
2980
+
2981
+ /* Variant: Warning */
2982
+ .muka-toast--warning {
2983
+ background-color: var(--toast-color-warning-background);
2984
+ color: var(--toast-color-warning-foreground);
2985
+ }
2986
+
2987
+ .muka-toast--warning .muka-toast__icon {
2988
+ color: var(--toast-color-warning-accent);
2989
+ }
2990
+
2991
+ /* Variant: Error */
2992
+ .muka-toast--error {
2993
+ background-color: var(--toast-color-error-background);
2994
+ color: var(--toast-color-error-foreground);
2995
+ }
2996
+
2997
+ .muka-toast--error .muka-toast__icon {
2998
+ color: var(--toast-color-error-accent);
2999
+ }
3000
+
3001
+ /* Icon */
3002
+ .muka-toast__icon {
3003
+ display: flex;
3004
+ align-items: center;
3005
+ justify-content: center;
3006
+ flex-shrink: 0;
3007
+ width: var(--toast-icon-size);
3008
+ height: var(--toast-icon-size);
3009
+ }
3010
+
3011
+ .muka-toast__icon svg {
3012
+ width: 100%;
3013
+ height: 100%;
3014
+ }
3015
+
3016
+ /* Content */
3017
+ .muka-toast__content {
3018
+ flex: 1;
3019
+ min-width: 0;
3020
+ }
3021
+
3022
+ .muka-toast__title {
3023
+ font-family: var(--text-label-md-semibold-fontFamily);
3024
+ font-weight: var(--text-label-md-semibold-fontWeight);
3025
+ font-size: var(--text-label-md-semibold-fontSize);
3026
+ line-height: var(--text-label-md-semibold-lineHeight);
3027
+ margin-bottom: var(--spacing-1);
3028
+ }
3029
+
3030
+ .muka-toast__message {
3031
+ font-family: var(--text-body-sm-regular-fontFamily);
3032
+ font-weight: var(--text-body-sm-regular-fontWeight);
3033
+ font-size: var(--text-body-sm-regular-fontSize);
3034
+ line-height: var(--text-body-sm-regular-lineHeight);
3035
+ }
3036
+
3037
+ /* Action slot */
3038
+ .muka-toast__action {
3039
+ display: flex;
3040
+ align-items: center;
3041
+ flex-shrink: 0;
3042
+ }
3043
+
3044
+ /* Dismiss button */
3045
+ .muka-toast__dismiss {
3046
+ display: flex;
3047
+ align-items: center;
3048
+ justify-content: center;
3049
+ flex-shrink: 0;
3050
+ width: 24px;
3051
+ height: 24px;
3052
+ padding: 0;
3053
+ margin: -2px -4px -2px 0;
3054
+ border: none;
3055
+ background: transparent;
3056
+ color: inherit;
3057
+ opacity: 0.7;
3058
+ cursor: pointer;
3059
+ border-radius: var(--border-radius-sm);
3060
+ transition: opacity 0.15s ease, background-color 0.15s ease;
3061
+ }
3062
+
3063
+ .muka-toast__dismiss:hover {
3064
+ opacity: 1;
3065
+ background-color: rgba(0, 0, 0, 0.05);
3066
+ }
3067
+
3068
+ .muka-toast__dismiss:focus-visible {
3069
+ outline: 2px solid var(--color-border-focus);
3070
+ outline-offset: 2px;
3071
+ opacity: 1;
3072
+ }
3073
+
3074
+ .muka-toast__dismiss svg {
3075
+ width: 16px;
3076
+ height: 16px;
3077
+ }
3078
+
3079
+
2890
3080
  /* Tile */
2891
3081
  /* Tile Component Styles - Using Muka Design Tokens */
2892
3082
 
@@ -3248,230 +3438,40 @@ body {
3248
3438
  }
3249
3439
 
3250
3440
 
3251
- /* Toast */
3252
- /* Toast Component Styles - Using Muka Design Tokens */
3441
+ /* Thumbnail */
3442
+ /* Thumbnail Component Styles - Using Muka Design Tokens */
3253
3443
 
3254
- .muka-toast {
3255
- display: flex;
3256
- align-items: flex-start;
3257
- gap: var(--toast-gap);
3258
- padding: var(--toast-padding-y) var(--toast-padding-x);
3259
- border-radius: var(--toast-radius);
3260
- box-shadow: var(--toast-shadow);
3261
- min-width: var(--toast-width-min);
3262
- max-width: var(--toast-width-max);
3263
- pointer-events: auto;
3264
- animation: muka-toast-slide-in 0.2s ease-out;
3444
+ .muka-thumbnail {
3445
+ position: relative;
3446
+ flex-shrink: 0;
3265
3447
  }
3266
3448
 
3267
- /* Entry animation */
3268
- @keyframes muka-toast-slide-in {
3269
- from {
3270
- opacity: 0;
3271
- transform: translateY(8px);
3272
- }
3273
- to {
3274
- opacity: 1;
3275
- transform: translateY(0);
3276
- }
3449
+ /* The frame carries the border, background and shape clip. Keeping it separate
3450
+ from the root lets the remove (×) button sit outside the clip (needed for the
3451
+ circular/ellipse shape, whose corners would otherwise clip the button). */
3452
+ .muka-thumbnail__frame {
3453
+ position: absolute;
3454
+ inset: 0;
3455
+ overflow: hidden;
3456
+ border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3457
+ border-radius: var(--border-radius-lg);
3458
+ background-color: var(--color-surface-level1);
3277
3459
  }
3278
3460
 
3279
- /* Position variants (for standalone use - typically managed by ToastProvider) */
3280
- .muka-toast--top-right,
3281
- .muka-toast--top-left,
3282
- .muka-toast--top-center,
3283
- .muka-toast--bottom-right,
3284
- .muka-toast--bottom-left,
3285
- .muka-toast--bottom-center {
3286
- position: fixed;
3287
- z-index: 9999;
3461
+ /* ─── Shapes ──────────────────────────────────────────── */
3462
+ .muka-thumbnail--4-3 {
3463
+ width: 160px;
3464
+ height: 120px;
3288
3465
  }
3289
3466
 
3290
- .muka-toast--top-right {
3291
- top: var(--spacing-4);
3292
- right: var(--spacing-4);
3467
+ .muka-thumbnail--1-1 {
3468
+ width: 120px;
3469
+ height: 120px;
3293
3470
  }
3294
3471
 
3295
- .muka-toast--top-left {
3296
- top: var(--spacing-4);
3297
- left: var(--spacing-4);
3298
- }
3299
-
3300
- .muka-toast--top-center {
3301
- top: var(--spacing-4);
3302
- left: 50%;
3303
- transform: translateX(-50%);
3304
- }
3305
-
3306
- .muka-toast--bottom-right {
3307
- bottom: var(--spacing-4);
3308
- right: var(--spacing-4);
3309
- }
3310
-
3311
- .muka-toast--bottom-left {
3312
- bottom: var(--spacing-4);
3313
- left: var(--spacing-4);
3314
- }
3315
-
3316
- .muka-toast--bottom-center {
3317
- bottom: var(--spacing-4);
3318
- left: 50%;
3319
- transform: translateX(-50%);
3320
- }
3321
-
3322
- /* Variant: Info */
3323
- .muka-toast--info {
3324
- background-color: var(--toast-color-info-background);
3325
- color: var(--toast-color-info-foreground);
3326
- }
3327
-
3328
- .muka-toast--info .muka-toast__icon {
3329
- color: var(--toast-color-info-accent);
3330
- }
3331
-
3332
- /* Variant: Success */
3333
- .muka-toast--success {
3334
- background-color: var(--toast-color-success-background);
3335
- color: var(--toast-color-success-foreground);
3336
- }
3337
-
3338
- .muka-toast--success .muka-toast__icon {
3339
- color: var(--toast-color-success-accent);
3340
- }
3341
-
3342
- /* Variant: Warning */
3343
- .muka-toast--warning {
3344
- background-color: var(--toast-color-warning-background);
3345
- color: var(--toast-color-warning-foreground);
3346
- }
3347
-
3348
- .muka-toast--warning .muka-toast__icon {
3349
- color: var(--toast-color-warning-accent);
3350
- }
3351
-
3352
- /* Variant: Error */
3353
- .muka-toast--error {
3354
- background-color: var(--toast-color-error-background);
3355
- color: var(--toast-color-error-foreground);
3356
- }
3357
-
3358
- .muka-toast--error .muka-toast__icon {
3359
- color: var(--toast-color-error-accent);
3360
- }
3361
-
3362
- /* Icon */
3363
- .muka-toast__icon {
3364
- display: flex;
3365
- align-items: center;
3366
- justify-content: center;
3367
- flex-shrink: 0;
3368
- width: var(--toast-icon-size);
3369
- height: var(--toast-icon-size);
3370
- }
3371
-
3372
- .muka-toast__icon svg {
3373
- width: 100%;
3374
- height: 100%;
3375
- }
3376
-
3377
- /* Content */
3378
- .muka-toast__content {
3379
- flex: 1;
3380
- min-width: 0;
3381
- }
3382
-
3383
- .muka-toast__title {
3384
- font-family: var(--text-label-md-semibold-fontFamily);
3385
- font-weight: var(--text-label-md-semibold-fontWeight);
3386
- font-size: var(--text-label-md-semibold-fontSize);
3387
- line-height: var(--text-label-md-semibold-lineHeight);
3388
- margin-bottom: var(--spacing-1);
3389
- }
3390
-
3391
- .muka-toast__message {
3392
- font-family: var(--text-body-sm-regular-fontFamily);
3393
- font-weight: var(--text-body-sm-regular-fontWeight);
3394
- font-size: var(--text-body-sm-regular-fontSize);
3395
- line-height: var(--text-body-sm-regular-lineHeight);
3396
- }
3397
-
3398
- /* Action slot */
3399
- .muka-toast__action {
3400
- display: flex;
3401
- align-items: center;
3402
- flex-shrink: 0;
3403
- }
3404
-
3405
- /* Dismiss button */
3406
- .muka-toast__dismiss {
3407
- display: flex;
3408
- align-items: center;
3409
- justify-content: center;
3410
- flex-shrink: 0;
3411
- width: 24px;
3412
- height: 24px;
3413
- padding: 0;
3414
- margin: -2px -4px -2px 0;
3415
- border: none;
3416
- background: transparent;
3417
- color: inherit;
3418
- opacity: 0.7;
3419
- cursor: pointer;
3420
- border-radius: var(--border-radius-sm);
3421
- transition: opacity 0.15s ease, background-color 0.15s ease;
3422
- }
3423
-
3424
- .muka-toast__dismiss:hover {
3425
- opacity: 1;
3426
- background-color: rgba(0, 0, 0, 0.05);
3427
- }
3428
-
3429
- .muka-toast__dismiss:focus-visible {
3430
- outline: 2px solid var(--color-border-focus);
3431
- outline-offset: 2px;
3432
- opacity: 1;
3433
- }
3434
-
3435
- .muka-toast__dismiss svg {
3436
- width: 16px;
3437
- height: 16px;
3438
- }
3439
-
3440
-
3441
- /* Thumbnail */
3442
- /* Thumbnail Component Styles - Using Muka Design Tokens */
3443
-
3444
- .muka-thumbnail {
3445
- position: relative;
3446
- flex-shrink: 0;
3447
- }
3448
-
3449
- /* The frame carries the border, background and shape clip. Keeping it separate
3450
- from the root lets the remove (×) button sit outside the clip (needed for the
3451
- circular/ellipse shape, whose corners would otherwise clip the button). */
3452
- .muka-thumbnail__frame {
3453
- position: absolute;
3454
- inset: 0;
3455
- overflow: hidden;
3456
- border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3457
- border-radius: var(--border-radius-lg);
3458
- background-color: var(--color-surface-level1);
3459
- }
3460
-
3461
- /* ─── Shapes ──────────────────────────────────────────── */
3462
- .muka-thumbnail--4-3 {
3463
- width: 160px;
3464
- height: 120px;
3465
- }
3466
-
3467
- .muka-thumbnail--1-1 {
3468
- width: 120px;
3469
- height: 120px;
3470
- }
3471
-
3472
- .muka-thumbnail--ellipse {
3473
- width: 120px;
3474
- height: 120px;
3472
+ .muka-thumbnail--ellipse {
3473
+ width: 120px;
3474
+ height: 120px;
3475
3475
  }
3476
3476
 
3477
3477
  .muka-thumbnail--ellipse .muka-thumbnail__frame {
@@ -4833,724 +4833,450 @@ body {
4833
4833
  }
4834
4834
 
4835
4835
 
4836
- /* Sheet */
4837
- /* Sheet Component Styles */
4838
-
4839
- /* ─── Backdrop ────────────────────────────────────────── */
4836
+ /* SegmentGroup */
4837
+ /* SegmentGroup Component Styles - Using Muka Design Tokens */
4840
4838
 
4841
- .muka-sheet__overlay {
4842
- position: fixed;
4843
- inset: 0;
4844
- background-color: var(--color-surface-backdrop);
4845
- z-index: 50;
4839
+ /* Container */
4840
+ .muka-segmentgroup {
4841
+ display: inline-flex;
4842
+ align-items: center;
4843
+ gap: 0;
4844
+ padding: var(--segmentgroup-container-padding);
4845
+ background-color: var(--segmentgroup-container-background);
4846
+ border-radius: var(--segmentgroup-container-radius);
4847
+ position: relative;
4848
+ transition: background-color 0.2s ease, box-shadow 0.2s ease;
4846
4849
  }
4847
4850
 
4848
- /* ─── Surface ─────────────────────────────────────────── */
4849
-
4850
- .muka-sheet {
4851
- position: fixed;
4852
- left: 0;
4853
- right: 0;
4854
- bottom: 0;
4855
- z-index: 51;
4856
-
4857
- display: flex;
4858
- flex-direction: column;
4859
-
4860
- max-height: 96dvh;
4861
-
4862
- background-color: var(--color-surface-level3);
4863
- border-top-left-radius: var(--radius-lg);
4864
- border-top-right-radius: var(--radius-lg);
4865
- box-shadow: var(--shadow-level5);
4866
-
4867
- outline: none;
4851
+ /* Inset shadow on container */
4852
+ .muka-segmentgroup::after {
4853
+ content: '';
4854
+ position: absolute;
4855
+ inset: 0;
4856
+ border-radius: inherit;
4857
+ box-shadow: var(--segmentgroup-container-shadow);
4858
+ pointer-events: none;
4868
4859
  }
4869
4860
 
4870
- /* Safe-area bottom inset for the iPhone home indicator. */
4871
- .muka-sheet:not(.muka-sheet--no-safe-area) {
4872
- padding-bottom: env(safe-area-inset-bottom);
4861
+ /* Full width variant */
4862
+ .muka-segmentgroup--full-width {
4863
+ width: 100%;
4873
4864
  }
4874
4865
 
4875
- /* ─── Drag handle ─────────────────────────────────────── */
4876
-
4877
- .muka-sheet__handle-container {
4878
- display: flex;
4879
- justify-content: center;
4880
- flex-shrink: 0;
4881
- padding: var(--spacing-3) 0;
4866
+ .muka-segmentgroup--full-width .muka-segmentgroup__segment {
4867
+ flex: 1;
4882
4868
  }
4883
4869
 
4884
- .muka-sheet__handle {
4885
- width: var(--dialog-drag-handle-width);
4886
- height: var(--dialog-drag-handle-height);
4887
- background-color: var(--dialog-drag-handle-color);
4888
- border-radius: var(--dialog-drag-handle-radius);
4870
+ /* Pill */
4871
+ .muka-segmentgroup__pill {
4872
+ position: absolute;
4873
+ top: var(--segmentgroup-container-padding);
4874
+ bottom: var(--segmentgroup-container-padding);
4875
+ left: 0;
4876
+ margin: 0;
4877
+ background-color: var(--segmentgroup-segment-color-selected-background);
4878
+ box-shadow: var(--segmentgroup-segment-shadow-selected);
4879
+ transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), width 0.25s cubic-bezier(0.4, 0, 0.2, 1);
4880
+ z-index: 0;
4881
+ pointer-events: none;
4889
4882
  }
4890
4883
 
4891
- /* ─── Body (scrollable) ───────────────────────────────── */
4884
+ /* Segment button */
4885
+ .muka-segmentgroup__segment {
4886
+ display: inline-flex;
4887
+ align-items: center;
4888
+ justify-content: center;
4889
+ gap: var(--segmentgroup-segment-gap);
4890
+ border: none;
4891
+ background-color: var(--segmentgroup-segment-color-unselected-background);
4892
+ color: var(--segmentgroup-segment-color-unselected-foreground);
4893
+ border-radius: var(--segmentgroup-segment-radius);
4894
+ cursor: pointer;
4895
+ transition: background-color 0.2s ease, box-shadow 0.2s ease, color 0.2s ease;
4896
+ position: relative;
4897
+ outline: none;
4898
+ box-shadow: var(--segmentgroup-segment-shadow-unselected);
4899
+ font-family: var(--alias-font-plain-family);
4900
+ font-weight: var(--segmentgroup-segment-fontWeight);
4901
+ z-index: 1; /* Keep above pill */
4902
+ }
4892
4903
 
4893
- .muka-sheet__body {
4894
- flex: 1 1 0%;
4895
- min-height: 0;
4896
- overflow-y: auto;
4897
- -webkit-overflow-scrolling: touch;
4898
- overscroll-behavior: contain;
4904
+ /* Size variants */
4905
+ .muka-segmentgroup--sm {
4906
+ border-radius: var(--border-radius-xl, 16px);
4907
+ }
4908
+ .muka-segmentgroup--sm .muka-segmentgroup__segment,
4909
+ .muka-segmentgroup--sm .muka-segmentgroup__pill {
4910
+ border-radius: var(--border-radius-xl, 16px);
4911
+ }
4912
+ .muka-segmentgroup--sm .muka-segmentgroup__segment {
4913
+ padding: var(--segmentgroup-segment-padding-sm-y) var(--segmentgroup-segment-padding-sm-x);
4914
+ height: var(--segmentgroup-segment-height-sm);
4915
+ font-size: var(--text-label-sm-fontSize);
4916
+ line-height: var(--text-label-sm-lineHeight);
4899
4917
  }
4900
4918
 
4901
- /* ─── Visually-hidden title (a11y) ────────────────────── */
4919
+ .muka-segmentgroup--md {
4920
+ border-radius: var(--border-radius-xl, 16px);
4921
+ }
4922
+ .muka-segmentgroup--md .muka-segmentgroup__segment,
4923
+ .muka-segmentgroup--md .muka-segmentgroup__pill {
4924
+ border-radius: var(--border-radius-xl, 16px);
4925
+ }
4926
+ .muka-segmentgroup--md .muka-segmentgroup__segment {
4927
+ padding: var(--segmentgroup-segment-padding-md-y) var(--segmentgroup-segment-padding-md-x);
4928
+ font-size: var(--text-label-md-fontSize);
4929
+ line-height: var(--text-label-md-lineHeight);
4930
+ }
4902
4931
 
4903
- .muka-sheet__sr-title {
4904
- position: absolute;
4905
- width: 1px;
4906
- height: 1px;
4932
+ .muka-segmentgroup--lg {
4933
+ border-radius: var(--border-radius-full, 9999px);
4934
+ }
4935
+ .muka-segmentgroup--lg .muka-segmentgroup__segment,
4936
+ .muka-segmentgroup--lg .muka-segmentgroup__pill {
4937
+ border-radius: var(--border-radius-full, 9999px);
4938
+ }
4939
+ .muka-segmentgroup--lg .muka-segmentgroup__segment {
4940
+ padding: var(--segmentgroup-segment-padding-lg-y) var(--segmentgroup-segment-padding-lg-x);
4941
+ height: 40px;
4942
+ font-size: var(--text-label-lg-fontSize);
4943
+ line-height: var(--text-label-lg-lineHeight);
4944
+ }
4945
+
4946
+ /* Icon-only variants */
4947
+ .muka-segmentgroup--icon-only {
4948
+ gap: var(--spacing-1, 4px);
4949
+ }
4950
+
4951
+ .muka-segmentgroup--icon-only.muka-segmentgroup--sm .muka-segmentgroup__segment {
4952
+ width: 24px;
4953
+ height: 24px;
4907
4954
  padding: 0;
4908
- margin: -1px;
4909
- overflow: hidden;
4910
- clip: rect(0, 0, 0, 0);
4911
- white-space: nowrap;
4912
- border: 0;
4955
+ }
4956
+ .muka-segmentgroup--icon-only.muka-segmentgroup--sm .muka-segmentgroup__icon svg {
4957
+ width: 16px;
4958
+ height: 16px;
4913
4959
  }
4914
4960
 
4961
+ .muka-segmentgroup--icon-only.muka-segmentgroup--md .muka-segmentgroup__segment {
4962
+ width: 32px;
4963
+ height: 32px;
4964
+ padding: 0;
4965
+ }
4966
+ .muka-segmentgroup--icon-only.muka-segmentgroup--md .muka-segmentgroup__icon svg {
4967
+ width: 20px;
4968
+ height: 20px;
4969
+ }
4915
4970
 
4916
- /* Select */
4917
- /* Select Component Styles - Aligned with Input for consistency */
4971
+ .muka-segmentgroup--icon-only.muka-segmentgroup--lg .muka-segmentgroup__segment {
4972
+ width: 40px;
4973
+ height: 40px;
4974
+ padding: 0;
4975
+ }
4976
+ .muka-segmentgroup--icon-only.muka-segmentgroup--lg .muka-segmentgroup__icon svg {
4977
+ width: 24px;
4978
+ height: 24px;
4979
+ }
4918
4980
 
4919
- .muka-select {
4981
+ /* Icon */
4982
+ .muka-segmentgroup__icon {
4920
4983
  display: inline-flex;
4921
- flex-direction: column;
4922
- gap: var(--spacing-2);
4984
+ align-items: center;
4985
+ justify-content: center;
4923
4986
  }
4924
4987
 
4925
- .muka-select--full-width {
4926
- width: 100%;
4988
+ /* Selected state */
4989
+ .muka-segmentgroup__segment--selected {
4990
+ background-color: transparent;
4991
+ box-shadow: none;
4992
+ color: var(--segmentgroup-segment-color-selected-foreground);
4993
+ z-index: 2; /* Highlight pill when focused is tested below */
4994
+ }
4995
+
4996
+ /* Hover state (only for unselected) */
4997
+ .muka-segmentgroup__segment:not(.muka-segmentgroup__segment--selected):not(:disabled):hover {
4998
+ color: var(--segmentgroup-segment-color-hover-foreground);
4999
+ }
5000
+
5001
+ /* Focus visible */
5002
+ .muka-segmentgroup__segment:focus-visible {
5003
+ outline: 2px solid var(--color-border-focus);
5004
+ outline-offset: 2px;
5005
+ z-index: 2;
5006
+ }
5007
+
5008
+ /* Disabled state */
5009
+ .muka-segmentgroup__segment--disabled,
5010
+ .muka-segmentgroup__segment:disabled {
5011
+ cursor: not-allowed;
5012
+ opacity: 0.5;
4927
5013
  }
4928
5014
 
4929
5015
  /* Label */
4930
- .muka-select__label {
4931
- color: var(--color-text-default-default);
4932
- cursor: pointer;
5016
+ .muka-segmentgroup__label {
5017
+ display: inline-flex;
5018
+ align-items: center;
5019
+ white-space: nowrap;
5020
+ user-select: none;
4933
5021
  }
4934
5022
 
4935
- .muka-select__label--sm {
4936
- font-family: var(--text-label-sm-semibold-fontFamily);
4937
- font-weight: var(--text-label-sm-semibold-fontWeight);
4938
- font-size: var(--text-label-sm-semibold-fontSize);
4939
- line-height: var(--text-label-sm-semibold-lineHeight);
5023
+
5024
+ /* Section */
5025
+ /* Section Component - Layout tokens (section.padding) */
5026
+
5027
+ .muka-section {
5028
+ box-sizing: border-box;
4940
5029
  }
4941
5030
 
4942
- .muka-select__label--md {
4943
- font-family: var(--text-label-md-semibold-fontFamily);
4944
- font-weight: var(--text-label-md-semibold-fontWeight);
4945
- font-size: var(--text-label-md-semibold-fontSize);
4946
- line-height: var(--text-label-md-semibold-lineHeight);
5031
+ .muka-section--padding-compact {
5032
+ padding-block: var(--section-padding-vertical-compact);
5033
+ padding-inline: var(--section-padding-horizontal-compact);
4947
5034
  }
4948
5035
 
4949
- .muka-select__label--lg {
4950
- font-family: var(--text-label-lg-semibold-fontFamily);
4951
- font-weight: var(--text-label-lg-semibold-fontWeight);
4952
- font-size: var(--text-label-lg-semibold-fontSize);
4953
- line-height: var(--text-label-lg-semibold-lineHeight);
5036
+ .muka-section--padding-default {
5037
+ padding-block: var(--section-padding-vertical-default);
5038
+ padding-inline: var(--section-padding-horizontal-default);
4954
5039
  }
4955
5040
 
4956
- .muka-select__required {
4957
- color: var(--color-state-error-foreground);
5041
+ .muka-section--padding-spacious {
5042
+ padding-block: var(--section-padding-vertical-spacious);
5043
+ padding-inline: var(--section-padding-horizontal-spacious);
4958
5044
  }
4959
5045
 
4960
- .muka-select__label--sm + .muka-select__field--disabled,
4961
- .muka-select__label--md + .muka-select__field--disabled,
4962
- .muka-select__label--lg + .muka-select__field--disabled {
4963
- cursor: not-allowed;
5046
+
5047
+ /* SearchInput */
5048
+ /* SearchInput Component Styles */
5049
+
5050
+ .muka-search-input {
5051
+ display: flex;
5052
+ align-items: center;
5053
+ gap: var(--spacing-3);
5054
+ width: 100%;
4964
5055
  }
4965
5056
 
4966
- /* Field container — same as Input: 1px border, radius, padding, inset shadow */
4967
- .muka-select__field {
5057
+ /* ─── Field wrapper ───────────────────────────────────── */
5058
+
5059
+ .muka-search-input__field {
5060
+ flex: 1 1 auto;
4968
5061
  display: flex;
4969
5062
  align-items: center;
4970
5063
  gap: var(--spacing-2);
4971
- position: relative;
4972
5064
  background-color: var(--input-field-color-default-background);
4973
5065
  border: var(--border-width-regular) solid var(--input-field-color-default-border);
4974
5066
  border-radius: var(--input-field-radius-md);
4975
- padding: var(--input-field-padding-y) var(--input-field-padding-x);
4976
- transition: border-color 0.2s ease, background-color 0.2s ease;
4977
- cursor: pointer;
4978
- box-sizing: border-box;
5067
+ padding: 0 var(--input-field-padding-x);
5068
+ transition: border-color 0.12s ease, background-color 0.12s ease;
4979
5069
  }
4980
5070
 
4981
- /* Inset shadow — same as Input (single subtle line) */
4982
- .muka-select__field::after {
4983
- content: '';
4984
- position: absolute;
4985
- inset: 0;
4986
- border-radius: inherit;
4987
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.08);
4988
- pointer-events: none;
5071
+ .muka-search-input--focused .muka-search-input__field {
5072
+ border-color: var(--input-field-color-focus-border, var(--color-action-default));
4989
5073
  }
4990
5074
 
4991
- /* Size variants — same radius/height as Input */
4992
- .muka-select__field--sm {
5075
+ /* ─── Sizes ───────────────────────────────────────────── */
5076
+
5077
+ .muka-search-input--sm .muka-search-input__field {
4993
5078
  min-height: var(--input-field-height-sm);
4994
5079
  border-radius: var(--input-field-radius-sm);
4995
5080
  }
4996
5081
 
4997
- .muka-select__field--md {
5082
+ .muka-search-input--md .muka-search-input__field {
4998
5083
  min-height: var(--input-field-height-default);
4999
- border-radius: var(--input-field-radius-md);
5000
5084
  }
5001
5085
 
5002
- .muka-select__field--lg {
5086
+ .muka-search-input--lg .muka-search-input__field {
5003
5087
  min-height: var(--input-field-height-lg);
5004
5088
  border-radius: var(--input-field-radius-lg);
5005
5089
  }
5006
5090
 
5007
- /* Hover — no visual change (same as Input) */
5091
+ /* ─── Embedded variant (e.g. inside TopBar) ───────────── */
5008
5092
 
5009
- /* Focus (active) — same as Input: 2px border, padding compensation */
5010
- .muka-select__field--focused:not(.muka-select__field--disabled) {
5011
- border-width: var(--border-width-bold);
5012
- border-color: var(--input-field-color-focus-border);
5013
- background-color: var(--input-field-color-focus-background);
5014
- padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
5093
+ .muka-search-input--embedded .muka-search-input__field {
5094
+ background-color: var(--color-surface-level1);
5095
+ border-color: transparent;
5015
5096
  }
5016
5097
 
5017
- /* Error — same as Input: 2px border, padding compensation */
5018
- .muka-select__field--error:not(.muka-select__field--disabled) {
5019
- border-width: var(--border-width-bold);
5020
- border-color: var(--input-field-color-error-border);
5021
- background-color: var(--input-field-color-error-background);
5022
- padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
5098
+ .muka-search-input--embedded.muka-search-input--focused .muka-search-input__field {
5099
+ border-color: transparent;
5100
+ background-color: var(--color-surface-level2);
5023
5101
  }
5024
5102
 
5025
- /* Disabled — same as Input */
5026
- .muka-select__field--disabled {
5027
- background-color: var(--input-field-color-disabled-background);
5028
- border-color: var(--input-field-color-disabled-border);
5029
- cursor: not-allowed;
5103
+ /* ─── Disabled ────────────────────────────────────────── */
5104
+
5105
+ .muka-search-input--disabled .muka-search-input__field {
5106
+ opacity: 0.5;
5107
+ pointer-events: none;
5030
5108
  }
5031
5109
 
5032
- .muka-select__field--disabled::after {
5033
- display: none;
5110
+ /* ─── Leading icon ────────────────────────────────────── */
5111
+
5112
+ .muka-search-input__leading {
5113
+ display: inline-flex;
5114
+ align-items: center;
5115
+ justify-content: center;
5116
+ flex-shrink: 0;
5117
+ color: var(--color-text-subtle-default);
5034
5118
  }
5035
5119
 
5036
- /* Native select — padding on field so native has 0 + right space for chevron */
5037
- .muka-select__native {
5038
- appearance: none;
5039
- -webkit-appearance: none;
5040
- flex: 1;
5120
+ /* ─── Input element ───────────────────────────────────── */
5121
+
5122
+ .muka-search-input__input {
5123
+ flex: 1 1 auto;
5124
+ min-width: 0;
5041
5125
  border: none;
5042
- outline: none;
5043
5126
  background: transparent;
5044
- color: var(--input-field-color-default-foreground);
5045
- font-family: var(--text-input-md-fontFamily);
5046
- font-weight: var(--text-input-md-fontWeight);
5047
- font-size: var(--text-input-md-fontSize);
5048
- line-height: var(--text-input-md-lineHeight);
5127
+ outline: none;
5049
5128
  padding: 0;
5050
- padding-right: calc(var(--input-field-padding-x) + 1.5rem);
5051
- cursor: pointer;
5052
- min-width: 0;
5053
- width: 100%;
5129
+ color: var(--color-text-default-default);
5130
+ font-family: var(--text-body-md-regular-fontFamily);
5131
+ font-weight: var(--text-body-md-regular-fontWeight);
5132
+ font-size: var(--text-body-md-regular-fontSize);
5133
+ line-height: var(--text-body-md-regular-lineHeight);
5134
+ appearance: none;
5135
+ -webkit-appearance: none;
5054
5136
  }
5055
5137
 
5056
- .muka-select__field--sm .muka-select__native {
5057
- font-family: var(--text-input-sm-fontFamily);
5058
- font-weight: var(--text-input-sm-fontWeight);
5059
- font-size: var(--text-input-sm-fontSize);
5060
- line-height: var(--text-input-sm-lineHeight);
5138
+ .muka-search-input__input::placeholder {
5139
+ color: var(--color-text-subtle-default);
5061
5140
  }
5062
5141
 
5063
- .muka-select__field--lg .muka-select__native {
5064
- font-family: var(--text-input-lg-fontFamily);
5065
- font-weight: var(--text-input-lg-fontWeight);
5066
- font-size: var(--text-input-lg-fontSize);
5067
- line-height: var(--text-input-lg-lineHeight);
5142
+ /* Hide the browser-supplied clear button (WebKit + Edge) */
5143
+ .muka-search-input__input::-webkit-search-cancel-button,
5144
+ .muka-search-input__input::-webkit-search-decoration {
5145
+ -webkit-appearance: none;
5146
+ appearance: none;
5068
5147
  }
5069
5148
 
5070
- .muka-select__field--disabled .muka-select__native {
5071
- color: var(--input-field-color-disabled-foreground);
5072
- cursor: not-allowed;
5149
+ .muka-search-input__input::-ms-clear {
5150
+ display: none;
5073
5151
  }
5074
5152
 
5075
- /* Chevron — aligned with field padding */
5076
- .muka-select__chevron {
5153
+ /* ─── Trailing slot (loading spinner) ─────────────────── */
5154
+
5155
+ .muka-search-input__trailing {
5077
5156
  display: inline-flex;
5078
5157
  align-items: center;
5079
- position: absolute;
5080
- right: var(--input-field-padding-x);
5081
- pointer-events: none;
5082
- color: var(--color-text-subtle-default);
5158
+ justify-content: center;
5159
+ flex-shrink: 0;
5083
5160
  }
5084
5161
 
5085
- .muka-select__field--disabled .muka-select__chevron {
5086
- color: var(--input-field-color-disabled-foreground);
5087
- }
5162
+ /* ─── Clear button ────────────────────────────────────── */
5088
5163
 
5089
- /* Helper text — same as Input */
5090
- .muka-select__helper {
5091
- font-family: var(--text-label-sm-regular-fontFamily);
5092
- font-weight: var(--text-label-sm-regular-fontWeight);
5093
- font-size: var(--text-label-sm-regular-fontSize);
5094
- line-height: var(--text-label-sm-regular-lineHeight);
5164
+ .muka-search-input__clear {
5165
+ display: inline-flex;
5166
+ align-items: center;
5167
+ justify-content: center;
5168
+ width: 20px;
5169
+ height: 20px;
5170
+ border: none;
5171
+ background: none;
5172
+ padding: 0;
5173
+ cursor: pointer;
5095
5174
  color: var(--color-text-subtle-default);
5096
- margin: 0;
5175
+ flex-shrink: 0;
5176
+ -webkit-tap-highlight-color: transparent;
5097
5177
  }
5098
5178
 
5099
- /* Error message — same as Input */
5100
- .muka-select__error {
5101
- font-family: var(--text-label-sm-regular-fontFamily);
5102
- font-weight: var(--text-label-sm-regular-fontWeight);
5103
- font-size: var(--text-label-sm-regular-fontSize);
5104
- line-height: var(--text-label-sm-regular-lineHeight);
5105
- color: var(--color-state-error-foreground);
5106
- margin: 0;
5179
+ .muka-search-input__clear:hover {
5180
+ color: var(--color-text-default-default);
5107
5181
  }
5108
5182
 
5183
+ .muka-search-input__clear:focus-visible {
5184
+ outline: 2px solid var(--color-action-default);
5185
+ outline-offset: 2px;
5186
+ border-radius: 50%;
5187
+ }
5109
5188
 
5110
- /* SegmentGroup */
5111
- /* SegmentGroup Component Styles - Using Muka Design Tokens */
5189
+ /* ─── Cancel button ───────────────────────────────────── */
5112
5190
 
5113
- /* Container */
5114
- .muka-segmentgroup {
5115
- display: inline-flex;
5116
- align-items: center;
5117
- gap: 0;
5118
- padding: var(--segmentgroup-container-padding);
5119
- background-color: var(--segmentgroup-container-background);
5120
- border-radius: var(--segmentgroup-container-radius);
5121
- position: relative;
5122
- transition: background-color 0.2s ease, box-shadow 0.2s ease;
5191
+ .muka-search-input__cancel {
5192
+ flex-shrink: 0;
5193
+ background: none;
5194
+ border: none;
5195
+ padding: var(--spacing-1) var(--spacing-2);
5196
+ cursor: pointer;
5197
+ color: var(--color-action-default);
5198
+ font-family: var(--text-label-md-regular-fontFamily);
5199
+ font-weight: var(--text-label-md-regular-fontWeight);
5200
+ font-size: var(--text-label-md-regular-fontSize);
5201
+ line-height: var(--text-label-md-regular-lineHeight);
5202
+ -webkit-tap-highlight-color: transparent;
5123
5203
  }
5124
5204
 
5125
- /* Inset shadow on container */
5126
- .muka-segmentgroup::after {
5127
- content: '';
5128
- position: absolute;
5129
- inset: 0;
5130
- border-radius: inherit;
5131
- box-shadow: var(--segmentgroup-container-shadow);
5132
- pointer-events: none;
5205
+ .muka-search-input__cancel:hover {
5206
+ color: var(--color-action-hover);
5133
5207
  }
5134
5208
 
5135
- /* Full width variant */
5136
- .muka-segmentgroup--full-width {
5137
- width: 100%;
5209
+ .muka-search-input__cancel:focus-visible {
5210
+ outline: 2px solid var(--color-action-default);
5211
+ outline-offset: 2px;
5212
+ border-radius: var(--radius-sm);
5138
5213
  }
5139
5214
 
5140
- .muka-segmentgroup--full-width .muka-segmentgroup__segment {
5141
- flex: 1;
5215
+
5216
+ /* RangeSlider */
5217
+ /* RangeSlider Component Styles - Using Muka Design Tokens */
5218
+
5219
+ .muka-range-slider {
5220
+ display: flex;
5221
+ flex-direction: column;
5222
+ gap: var(--spacing-1);
5223
+ width: 100%;
5142
5224
  }
5143
5225
 
5144
- /* Pill */
5145
- .muka-segmentgroup__pill {
5146
- position: absolute;
5147
- top: var(--segmentgroup-container-padding);
5148
- bottom: var(--segmentgroup-container-padding);
5149
- left: 0;
5150
- margin: 0;
5151
- background-color: var(--segmentgroup-segment-color-selected-background);
5152
- box-shadow: var(--segmentgroup-segment-shadow-selected);
5153
- transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), width 0.25s cubic-bezier(0.4, 0, 0.2, 1);
5154
- z-index: 0;
5155
- pointer-events: none;
5226
+ /* ========================================
5227
+ HEADER: label group (label + info + optional) and value readout
5228
+ ======================================== */
5229
+
5230
+ .muka-range-slider__header {
5231
+ display: flex;
5232
+ align-items: center;
5233
+ justify-content: space-between;
5234
+ gap: var(--spacing-2);
5235
+ min-height: 24px;
5156
5236
  }
5157
5237
 
5158
- /* Segment button */
5159
- .muka-segmentgroup__segment {
5238
+ .muka-range-slider__label-group {
5160
5239
  display: inline-flex;
5161
5240
  align-items: center;
5162
- justify-content: center;
5163
- gap: var(--segmentgroup-segment-gap);
5164
- border: none;
5165
- background-color: var(--segmentgroup-segment-color-unselected-background);
5166
- color: var(--segmentgroup-segment-color-unselected-foreground);
5167
- border-radius: var(--segmentgroup-segment-radius);
5168
- cursor: pointer;
5169
- transition: background-color 0.2s ease, box-shadow 0.2s ease, color 0.2s ease;
5170
- position: relative;
5171
- outline: none;
5172
- box-shadow: var(--segmentgroup-segment-shadow-unselected);
5173
- font-family: var(--alias-font-plain-family);
5174
- font-weight: var(--segmentgroup-segment-fontWeight);
5175
- z-index: 1; /* Keep above pill */
5241
+ gap: var(--spacing-2);
5176
5242
  }
5177
5243
 
5178
- /* Size variants */
5179
- .muka-segmentgroup--sm {
5180
- border-radius: var(--border-radius-xl, 16px);
5181
- }
5182
- .muka-segmentgroup--sm .muka-segmentgroup__segment,
5183
- .muka-segmentgroup--sm .muka-segmentgroup__pill {
5184
- border-radius: var(--border-radius-xl, 16px);
5185
- }
5186
- .muka-segmentgroup--sm .muka-segmentgroup__segment {
5187
- padding: var(--segmentgroup-segment-padding-sm-y) var(--segmentgroup-segment-padding-sm-x);
5188
- height: var(--segmentgroup-segment-height-sm);
5189
- font-size: var(--text-label-sm-fontSize);
5190
- line-height: var(--text-label-sm-lineHeight);
5244
+ .muka-range-slider__label {
5245
+ font-family: var(--text-label-md-semibold-fontFamily);
5246
+ font-weight: var(--text-label-md-semibold-fontWeight);
5247
+ font-size: var(--text-label-md-semibold-fontSize);
5248
+ line-height: var(--text-label-md-semibold-lineHeight);
5249
+ color: var(--color-text-default-default);
5191
5250
  }
5192
5251
 
5193
- .muka-segmentgroup--md {
5194
- border-radius: var(--border-radius-xl, 16px);
5252
+ .muka-range-slider__info {
5253
+ color: var(--color-text-subtle-default);
5195
5254
  }
5196
- .muka-segmentgroup--md .muka-segmentgroup__segment,
5197
- .muka-segmentgroup--md .muka-segmentgroup__pill {
5198
- border-radius: var(--border-radius-xl, 16px);
5255
+
5256
+ .muka-range-slider__optional {
5257
+ font-family: var(--text-label-sm-regular-fontFamily);
5258
+ font-weight: var(--text-label-sm-regular-fontWeight);
5259
+ font-size: var(--text-label-sm-regular-fontSize);
5260
+ line-height: var(--text-label-sm-regular-lineHeight);
5261
+ color: var(--color-text-subtle-default);
5199
5262
  }
5200
- .muka-segmentgroup--md .muka-segmentgroup__segment {
5201
- padding: var(--segmentgroup-segment-padding-md-y) var(--segmentgroup-segment-padding-md-x);
5202
- font-size: var(--text-label-md-fontSize);
5203
- line-height: var(--text-label-md-lineHeight);
5263
+
5264
+ .muka-range-slider__value {
5265
+ font-family: var(--text-label-md-regular-fontFamily);
5266
+ font-weight: var(--text-label-md-regular-fontWeight);
5267
+ font-size: var(--text-label-md-regular-fontSize);
5268
+ line-height: var(--text-label-md-regular-lineHeight);
5269
+ color: var(--color-text-default-default);
5270
+ font-variant-numeric: tabular-nums;
5204
5271
  }
5205
5272
 
5206
- .muka-segmentgroup--lg {
5207
- border-radius: var(--border-radius-full, 9999px);
5208
- }
5209
- .muka-segmentgroup--lg .muka-segmentgroup__segment,
5210
- .muka-segmentgroup--lg .muka-segmentgroup__pill {
5211
- border-radius: var(--border-radius-full, 9999px);
5212
- }
5213
- .muka-segmentgroup--lg .muka-segmentgroup__segment {
5214
- padding: var(--segmentgroup-segment-padding-lg-y) var(--segmentgroup-segment-padding-lg-x);
5215
- height: 40px;
5216
- font-size: var(--text-label-lg-fontSize);
5217
- line-height: var(--text-label-lg-lineHeight);
5218
- }
5219
-
5220
- /* Icon-only variants */
5221
- .muka-segmentgroup--icon-only {
5222
- gap: var(--spacing-1, 4px);
5223
- }
5224
-
5225
- .muka-segmentgroup--icon-only.muka-segmentgroup--sm .muka-segmentgroup__segment {
5226
- width: 24px;
5227
- height: 24px;
5228
- padding: 0;
5229
- }
5230
- .muka-segmentgroup--icon-only.muka-segmentgroup--sm .muka-segmentgroup__icon svg {
5231
- width: 16px;
5232
- height: 16px;
5233
- }
5234
-
5235
- .muka-segmentgroup--icon-only.muka-segmentgroup--md .muka-segmentgroup__segment {
5236
- width: 32px;
5237
- height: 32px;
5238
- padding: 0;
5239
- }
5240
- .muka-segmentgroup--icon-only.muka-segmentgroup--md .muka-segmentgroup__icon svg {
5241
- width: 20px;
5242
- height: 20px;
5243
- }
5244
-
5245
- .muka-segmentgroup--icon-only.muka-segmentgroup--lg .muka-segmentgroup__segment {
5246
- width: 40px;
5247
- height: 40px;
5248
- padding: 0;
5249
- }
5250
- .muka-segmentgroup--icon-only.muka-segmentgroup--lg .muka-segmentgroup__icon svg {
5251
- width: 24px;
5252
- height: 24px;
5253
- }
5254
-
5255
- /* Icon */
5256
- .muka-segmentgroup__icon {
5257
- display: inline-flex;
5258
- align-items: center;
5259
- justify-content: center;
5260
- }
5261
-
5262
- /* Selected state */
5263
- .muka-segmentgroup__segment--selected {
5264
- background-color: transparent;
5265
- box-shadow: none;
5266
- color: var(--segmentgroup-segment-color-selected-foreground);
5267
- z-index: 2; /* Highlight pill when focused is tested below */
5268
- }
5269
-
5270
- /* Hover state (only for unselected) */
5271
- .muka-segmentgroup__segment:not(.muka-segmentgroup__segment--selected):not(:disabled):hover {
5272
- color: var(--segmentgroup-segment-color-hover-foreground);
5273
- }
5274
-
5275
- /* Focus visible */
5276
- .muka-segmentgroup__segment:focus-visible {
5277
- outline: 2px solid var(--color-border-focus);
5278
- outline-offset: 2px;
5279
- z-index: 2;
5280
- }
5281
-
5282
- /* Disabled state */
5283
- .muka-segmentgroup__segment--disabled,
5284
- .muka-segmentgroup__segment:disabled {
5285
- cursor: not-allowed;
5286
- opacity: 0.5;
5287
- }
5288
-
5289
- /* Label */
5290
- .muka-segmentgroup__label {
5291
- display: inline-flex;
5292
- align-items: center;
5293
- white-space: nowrap;
5294
- user-select: none;
5295
- }
5296
-
5297
-
5298
- /* Section */
5299
- /* Section Component - Layout tokens (section.padding) */
5300
-
5301
- .muka-section {
5302
- box-sizing: border-box;
5303
- }
5304
-
5305
- .muka-section--padding-compact {
5306
- padding-block: var(--section-padding-vertical-compact);
5307
- padding-inline: var(--section-padding-horizontal-compact);
5308
- }
5309
-
5310
- .muka-section--padding-default {
5311
- padding-block: var(--section-padding-vertical-default);
5312
- padding-inline: var(--section-padding-horizontal-default);
5313
- }
5314
-
5315
- .muka-section--padding-spacious {
5316
- padding-block: var(--section-padding-vertical-spacious);
5317
- padding-inline: var(--section-padding-horizontal-spacious);
5318
- }
5319
-
5320
-
5321
- /* SearchInput */
5322
- /* SearchInput Component Styles */
5323
-
5324
- .muka-search-input {
5325
- display: flex;
5326
- align-items: center;
5327
- gap: var(--spacing-3);
5328
- width: 100%;
5329
- }
5330
-
5331
- /* ─── Field wrapper ───────────────────────────────────── */
5332
-
5333
- .muka-search-input__field {
5334
- flex: 1 1 auto;
5335
- display: flex;
5336
- align-items: center;
5337
- gap: var(--spacing-2);
5338
- background-color: var(--input-field-color-default-background);
5339
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
5340
- border-radius: var(--input-field-radius-md);
5341
- padding: 0 var(--input-field-padding-x);
5342
- transition: border-color 0.12s ease, background-color 0.12s ease;
5343
- }
5344
-
5345
- .muka-search-input--focused .muka-search-input__field {
5346
- border-color: var(--input-field-color-focus-border, var(--color-action-default));
5347
- }
5348
-
5349
- /* ─── Sizes ───────────────────────────────────────────── */
5350
-
5351
- .muka-search-input--sm .muka-search-input__field {
5352
- min-height: var(--input-field-height-sm);
5353
- border-radius: var(--input-field-radius-sm);
5354
- }
5355
-
5356
- .muka-search-input--md .muka-search-input__field {
5357
- min-height: var(--input-field-height-default);
5358
- }
5359
-
5360
- .muka-search-input--lg .muka-search-input__field {
5361
- min-height: var(--input-field-height-lg);
5362
- border-radius: var(--input-field-radius-lg);
5363
- }
5364
-
5365
- /* ─── Embedded variant (e.g. inside TopBar) ───────────── */
5366
-
5367
- .muka-search-input--embedded .muka-search-input__field {
5368
- background-color: var(--color-surface-level1);
5369
- border-color: transparent;
5370
- }
5371
-
5372
- .muka-search-input--embedded.muka-search-input--focused .muka-search-input__field {
5373
- border-color: transparent;
5374
- background-color: var(--color-surface-level2);
5375
- }
5376
-
5377
- /* ─── Disabled ────────────────────────────────────────── */
5378
-
5379
- .muka-search-input--disabled .muka-search-input__field {
5380
- opacity: 0.5;
5381
- pointer-events: none;
5382
- }
5383
-
5384
- /* ─── Leading icon ────────────────────────────────────── */
5385
-
5386
- .muka-search-input__leading {
5387
- display: inline-flex;
5388
- align-items: center;
5389
- justify-content: center;
5390
- flex-shrink: 0;
5391
- color: var(--color-text-subtle-default);
5392
- }
5393
-
5394
- /* ─── Input element ───────────────────────────────────── */
5395
-
5396
- .muka-search-input__input {
5397
- flex: 1 1 auto;
5398
- min-width: 0;
5399
- border: none;
5400
- background: transparent;
5401
- outline: none;
5402
- padding: 0;
5403
- color: var(--color-text-default-default);
5404
- font-family: var(--text-body-md-regular-fontFamily);
5405
- font-weight: var(--text-body-md-regular-fontWeight);
5406
- font-size: var(--text-body-md-regular-fontSize);
5407
- line-height: var(--text-body-md-regular-lineHeight);
5408
- appearance: none;
5409
- -webkit-appearance: none;
5410
- }
5411
-
5412
- .muka-search-input__input::placeholder {
5413
- color: var(--color-text-subtle-default);
5414
- }
5415
-
5416
- /* Hide the browser-supplied clear button (WebKit + Edge) */
5417
- .muka-search-input__input::-webkit-search-cancel-button,
5418
- .muka-search-input__input::-webkit-search-decoration {
5419
- -webkit-appearance: none;
5420
- appearance: none;
5421
- }
5422
-
5423
- .muka-search-input__input::-ms-clear {
5424
- display: none;
5425
- }
5426
-
5427
- /* ─── Trailing slot (loading spinner) ─────────────────── */
5428
-
5429
- .muka-search-input__trailing {
5430
- display: inline-flex;
5431
- align-items: center;
5432
- justify-content: center;
5433
- flex-shrink: 0;
5434
- }
5435
-
5436
- /* ─── Clear button ────────────────────────────────────── */
5437
-
5438
- .muka-search-input__clear {
5439
- display: inline-flex;
5440
- align-items: center;
5441
- justify-content: center;
5442
- width: 20px;
5443
- height: 20px;
5444
- border: none;
5445
- background: none;
5446
- padding: 0;
5447
- cursor: pointer;
5448
- color: var(--color-text-subtle-default);
5449
- flex-shrink: 0;
5450
- -webkit-tap-highlight-color: transparent;
5451
- }
5452
-
5453
- .muka-search-input__clear:hover {
5454
- color: var(--color-text-default-default);
5455
- }
5456
-
5457
- .muka-search-input__clear:focus-visible {
5458
- outline: 2px solid var(--color-action-default);
5459
- outline-offset: 2px;
5460
- border-radius: 50%;
5461
- }
5462
-
5463
- /* ─── Cancel button ───────────────────────────────────── */
5464
-
5465
- .muka-search-input__cancel {
5466
- flex-shrink: 0;
5467
- background: none;
5468
- border: none;
5469
- padding: var(--spacing-1) var(--spacing-2);
5470
- cursor: pointer;
5471
- color: var(--color-action-default);
5472
- font-family: var(--text-label-md-regular-fontFamily);
5473
- font-weight: var(--text-label-md-regular-fontWeight);
5474
- font-size: var(--text-label-md-regular-fontSize);
5475
- line-height: var(--text-label-md-regular-lineHeight);
5476
- -webkit-tap-highlight-color: transparent;
5477
- }
5478
-
5479
- .muka-search-input__cancel:hover {
5480
- color: var(--color-action-hover);
5481
- }
5482
-
5483
- .muka-search-input__cancel:focus-visible {
5484
- outline: 2px solid var(--color-action-default);
5485
- outline-offset: 2px;
5486
- border-radius: var(--radius-sm);
5487
- }
5488
-
5489
-
5490
- /* RangeSlider */
5491
- /* RangeSlider Component Styles - Using Muka Design Tokens */
5492
-
5493
- .muka-range-slider {
5494
- display: flex;
5495
- flex-direction: column;
5496
- gap: var(--spacing-1);
5497
- width: 100%;
5498
- }
5499
-
5500
- /* ========================================
5501
- HEADER: label group (label + info + optional) and value readout
5502
- ======================================== */
5503
-
5504
- .muka-range-slider__header {
5505
- display: flex;
5506
- align-items: center;
5507
- justify-content: space-between;
5508
- gap: var(--spacing-2);
5509
- min-height: 24px;
5510
- }
5511
-
5512
- .muka-range-slider__label-group {
5513
- display: inline-flex;
5514
- align-items: center;
5515
- gap: var(--spacing-2);
5516
- }
5517
-
5518
- .muka-range-slider__label {
5519
- font-family: var(--text-label-md-semibold-fontFamily);
5520
- font-weight: var(--text-label-md-semibold-fontWeight);
5521
- font-size: var(--text-label-md-semibold-fontSize);
5522
- line-height: var(--text-label-md-semibold-lineHeight);
5523
- color: var(--color-text-default-default);
5524
- }
5525
-
5526
- .muka-range-slider__info {
5527
- color: var(--color-text-subtle-default);
5528
- }
5529
-
5530
- .muka-range-slider__optional {
5531
- font-family: var(--text-label-sm-regular-fontFamily);
5532
- font-weight: var(--text-label-sm-regular-fontWeight);
5533
- font-size: var(--text-label-sm-regular-fontSize);
5534
- line-height: var(--text-label-sm-regular-lineHeight);
5535
- color: var(--color-text-subtle-default);
5536
- }
5537
-
5538
- .muka-range-slider__value {
5539
- font-family: var(--text-label-md-regular-fontFamily);
5540
- font-weight: var(--text-label-md-regular-fontWeight);
5541
- font-size: var(--text-label-md-regular-fontSize);
5542
- line-height: var(--text-label-md-regular-lineHeight);
5543
- color: var(--color-text-default-default);
5544
- font-variant-numeric: tabular-nums;
5545
- }
5546
-
5547
- .muka-range-slider__helper {
5548
- margin: 0;
5549
- font-family: var(--text-body-sm-regular-fontFamily);
5550
- font-weight: var(--text-body-sm-regular-fontWeight);
5551
- font-size: var(--text-body-sm-regular-fontSize);
5552
- line-height: var(--text-body-sm-regular-lineHeight);
5553
- color: var(--color-text-subtle-default);
5273
+ .muka-range-slider__helper {
5274
+ margin: 0;
5275
+ font-family: var(--text-body-sm-regular-fontFamily);
5276
+ font-weight: var(--text-body-sm-regular-fontWeight);
5277
+ font-size: var(--text-body-sm-regular-fontSize);
5278
+ line-height: var(--text-body-sm-regular-lineHeight);
5279
+ color: var(--color-text-subtle-default);
5554
5280
  }
5555
5281
 
5556
5282
  /* ========================================
@@ -11066,11 +10792,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
11066
10792
  grid-template-areas: 'rail bubble';
11067
10793
  }
11068
10794
 
11069
- .muka-chat-message--own.muka-chat-message--has-avatar .muka-chat-message__row {
11070
- grid-template-columns: minmax(0, 1fr) auto;
11071
- grid-template-areas: 'bubble rail';
11072
- }
11073
-
11074
10795
  .muka-chat-message__rail {
11075
10796
  grid-area: rail;
11076
10797
  /* Sits on the bubble's baseline (Figma 5355:44091) */
@@ -11105,6 +10826,12 @@ button.muka-chat-photo-grid__tile:focus-visible {
11105
10826
 
11106
10827
  .muka-chat-message__bubble {
11107
10828
  grid-area: bubble;
10829
+ /*
10830
+ * Width follows the content: a single line hugs, and once the text wraps the
10831
+ * bubble fills to the shared max width. Robust to string or rich children —
10832
+ * no length measuring needed (Figma `Text length` on 5355:44091).
10833
+ */
10834
+ width: fit-content;
11108
10835
  max-width: var(--chatbubble-max-width);
11109
10836
  position: relative;
11110
10837
  display: flex;
@@ -11117,18 +10844,11 @@ button.muka-chat-photo-grid__tile:focus-visible {
11117
10844
  word-break: break-word;
11118
10845
  }
11119
10846
 
11120
- /*
11121
- * Length axis (Figma `Text length` on 5355:44091): short messages hug their
11122
- * content, long ones fill the row up to the shared max width.
11123
- */
11124
- .muka-chat-message--long .muka-chat-message__bubble {
10847
+ /* Media, an embed or an action stack always run the full bubble width. */
10848
+ .muka-chat-message--has-blocks .muka-chat-message__bubble {
11125
10849
  width: 100%;
11126
10850
  }
11127
10851
 
11128
- .muka-chat-message--short .muka-chat-message__bubble {
11129
- width: fit-content;
11130
- }
11131
-
11132
10852
  .muka-chat-message--own .muka-chat-message__bubble {
11133
10853
  justify-self: end;
11134
10854
  }
@@ -11305,68 +11025,198 @@ button.muka-chat-photo-grid__tile:focus-visible {
11305
11025
  bottom: var(--spacing-1);
11306
11026
  }
11307
11027
 
11308
- /*
11309
- * Media, an embed or an action stack run the full width of the bubble, so the
11310
- * corner the timestamp sits in has to be cleared for it.
11311
- */
11312
- .muka-chat-message--has-timestamp.muka-chat-message--has-blocks .muka-chat-message__body {
11313
- padding-bottom: var(--text-body-xs-regular-lineHeight);
11028
+ /*
11029
+ * When the last block in the body is media, an embed or an action stack (not
11030
+ * trailing text), it runs the full width, so reserve a line below for the inset
11031
+ * timestamp. A message that ends in text clears the corner inline instead (see
11032
+ * `__message` padding-right above), so it needs no extra bottom space.
11033
+ */
11034
+ .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
11035
+ padding-bottom: var(--text-body-xs-regular-lineHeight);
11036
+ }
11037
+
11038
+ /* ─── Menu affordance ──────────────────────────────────── */
11039
+
11040
+ /*
11041
+ * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
11042
+ * everywhere, and pinned while its menu is open. On touch the equivalent
11043
+ * affordance is a long-press on the bubble, which opens an ActionSheet.
11044
+ */
11045
+ .muka-chat-message__menu {
11046
+ position: absolute;
11047
+ top: var(--spacing-1);
11048
+ right: var(--spacing-1);
11049
+ opacity: 0;
11050
+ pointer-events: none;
11051
+ }
11052
+
11053
+ .muka-chat-message__menu:focus-within,
11054
+ .muka-chat-message--menu-open .muka-chat-message__menu {
11055
+ opacity: 1;
11056
+ pointer-events: auto;
11057
+ }
11058
+
11059
+ @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
11060
+ .muka-chat-message__bubble:hover .muka-chat-message__menu {
11061
+ opacity: 1;
11062
+ pointer-events: auto;
11063
+ }
11064
+ }
11065
+
11066
+ /* Suppress iOS Safari's own callout so the long-press sheet can take over */
11067
+ @media (pointer: coarse) {
11068
+ .muka-chat-message--has-menu .muka-chat-message__bubble {
11069
+ -webkit-touch-callout: none;
11070
+ }
11071
+ }
11072
+
11073
+ /* ─── Print ────────────────────────────────────────────── */
11074
+
11075
+ @media print {
11076
+ .muka-chat-message__bubble {
11077
+ box-shadow: none;
11078
+ break-inside: avoid;
11079
+ print-color-adjust: exact;
11080
+ -webkit-print-color-adjust: exact;
11081
+ }
11082
+
11083
+ .muka-chat-message__embed {
11084
+ break-inside: avoid;
11085
+ print-color-adjust: exact;
11086
+ -webkit-print-color-adjust: exact;
11087
+ }
11088
+
11089
+ .muka-chat-message__menu,
11090
+ .muka-chat-message__embed-copy,
11091
+ .muka-chat-message__action-stack {
11092
+ display: none;
11093
+ }
11094
+ }
11095
+
11096
+
11097
+ /* ChatComposer */
11098
+ /* ChatComposer Component Styles */
11099
+
11100
+ /*
11101
+ * The composer is a bare, fill-width row: no padding, background, border or
11102
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
11103
+ * container — see BottomBar's `chat` variant.
11104
+ */
11105
+ .muka-chat-composer {
11106
+ display: flex;
11107
+ flex-direction: column;
11108
+ gap: var(--spacing-3);
11109
+ width: 100%;
11110
+ }
11111
+
11112
+ .muka-chat-composer--disabled {
11113
+ opacity: 0.6;
11114
+ pointer-events: none;
11115
+ }
11116
+
11117
+ /* ─── Input row ────────────────────────────────────────── */
11118
+
11119
+ .muka-chat-composer__row {
11120
+ display: flex;
11121
+ width: 100%;
11122
+ align-items: flex-end;
11123
+ gap: var(--spacing-3);
11124
+ }
11125
+
11126
+ /* ─── Text field ───────────────────────────────────────── */
11127
+
11128
+ .muka-chat-composer__field {
11129
+ display: flex;
11130
+ flex: 1 1 auto;
11131
+ min-width: 0;
11132
+ box-sizing: border-box;
11133
+ align-items: center;
11134
+ gap: var(--spacing-1);
11135
+ min-height: var(--input-field-height-lg, 48px);
11136
+ padding: 0 var(--spacing-2);
11137
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
11138
+ border-radius: var(--input-field-radius-lg);
11139
+ background-color: var(--input-field-color-default-background);
11140
+ transition: border-color 0.12s ease;
11141
+ }
11142
+
11143
+ .muka-chat-composer__field:focus-within {
11144
+ border-color: var(--input-field-color-focus-border, var(--color-action-default));
11145
+ }
11146
+
11147
+ .muka-chat-composer__input {
11148
+ flex: 1 1 auto;
11149
+ min-width: 0;
11150
+ width: 100%;
11151
+ box-sizing: border-box;
11152
+ resize: none;
11153
+ border: none;
11154
+ background: transparent;
11155
+ outline: none;
11156
+ padding: 0 var(--spacing-1);
11157
+ color: var(--color-text-default-default);
11158
+ font-family: var(--text-body-base-regular-fontFamily);
11159
+ font-weight: var(--text-body-base-regular-fontWeight);
11160
+ font-size: var(--text-body-base-regular-fontSize);
11161
+ line-height: var(--text-body-base-regular-lineHeight);
11162
+ appearance: none;
11163
+ -webkit-appearance: none;
11164
+ }
11165
+
11166
+ .muka-chat-composer__input::placeholder {
11167
+ color: var(--color-text-subtle-default);
11168
+ }
11169
+
11170
+ /* Keep the in-field emoji button flush to the bottom-right as the field grows */
11171
+ .muka-chat-composer__emoji {
11172
+ flex-shrink: 0;
11173
+ }
11174
+
11175
+ /* ─── Recording bar ────────────────────────────────────── */
11176
+
11177
+ .muka-chat-composer__recording {
11178
+ display: flex;
11179
+ flex: 1 1 auto;
11180
+ min-width: 0;
11181
+ box-sizing: border-box;
11182
+ align-items: center;
11183
+ min-height: var(--input-field-height-lg, 48px);
11184
+ padding: var(--card-padding-sm);
11185
+ border: var(--border-width-regular) solid var(--card-color-default-border);
11186
+ border-radius: var(--radius-lg);
11187
+ background-color: var(--card-color-default-background);
11314
11188
  }
11315
11189
 
11316
- /* ─── Menu affordance ──────────────────────────────────── */
11190
+ /* ─── Staged attachments strip ─────────────────────────── */
11317
11191
 
11318
- /*
11319
- * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
11320
- * everywhere, and pinned while its menu is open. On touch the equivalent
11321
- * affordance is a long-press on the bubble, which opens an ActionSheet.
11322
- */
11323
- .muka-chat-message__menu {
11324
- position: absolute;
11325
- top: var(--spacing-1);
11326
- right: var(--spacing-1);
11327
- opacity: 0;
11328
- pointer-events: none;
11192
+ .muka-chat-composer__attachments-strip {
11193
+ position: relative;
11194
+ width: 100%;
11329
11195
  }
11330
11196
 
11331
- .muka-chat-message__menu:focus-within,
11332
- .muka-chat-message--menu-open .muka-chat-message__menu {
11333
- opacity: 1;
11334
- pointer-events: auto;
11197
+ .muka-chat-composer__attachments {
11198
+ display: flex;
11199
+ gap: var(--spacing-3);
11200
+ overflow-x: auto;
11201
+ scroll-behavior: smooth;
11202
+ scrollbar-width: none;
11335
11203
  }
11336
11204
 
11337
- @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
11338
- .muka-chat-message__bubble:hover .muka-chat-message__menu {
11339
- opacity: 1;
11340
- pointer-events: auto;
11341
- }
11205
+ .muka-chat-composer__attachments::-webkit-scrollbar {
11206
+ display: none;
11342
11207
  }
11343
11208
 
11344
- /* Suppress iOS Safari's own callout so the long-press sheet can take over */
11345
- @media (pointer: coarse) {
11346
- .muka-chat-message--has-menu .muka-chat-message__bubble {
11347
- -webkit-touch-callout: none;
11348
- }
11209
+ .muka-chat-composer__overflow {
11210
+ position: absolute;
11211
+ top: 50%;
11212
+ right: var(--spacing-2);
11213
+ transform: translateY(-50%);
11349
11214
  }
11350
11215
 
11351
11216
  /* ─── Print ────────────────────────────────────────────── */
11352
11217
 
11353
11218
  @media print {
11354
- .muka-chat-message__bubble {
11355
- box-shadow: none;
11356
- break-inside: avoid;
11357
- print-color-adjust: exact;
11358
- -webkit-print-color-adjust: exact;
11359
- }
11360
-
11361
- .muka-chat-message__embed {
11362
- break-inside: avoid;
11363
- print-color-adjust: exact;
11364
- -webkit-print-color-adjust: exact;
11365
- }
11366
-
11367
- .muka-chat-message__menu,
11368
- .muka-chat-message__embed-copy,
11369
- .muka-chat-message__action-stack {
11219
+ .muka-chat-composer {
11370
11220
  display: none;
11371
11221
  }
11372
11222
  }
@@ -11516,254 +11366,441 @@ button.muka-chat-photo-grid__tile:focus-visible {
11516
11366
  overflow: hidden;
11517
11367
  }
11518
11368
 
11519
- .muka-chat-attachment-chip__progress-fill {
11520
- display: block;
11521
- height: 100%;
11522
- background-color: var(--color-action-default);
11523
- transition: width 0.16s ease;
11369
+ .muka-chat-attachment-chip__progress-fill {
11370
+ display: block;
11371
+ height: 100%;
11372
+ background-color: var(--color-action-default);
11373
+ transition: width 0.16s ease;
11374
+ }
11375
+
11376
+ .muka-chat-attachment-chip--error .muka-chat-attachment-chip__progress-fill {
11377
+ background-color: var(--color-state-error-default, var(--color-text-default-default));
11378
+ }
11379
+
11380
+
11381
+ /* Card */
11382
+ /* Card Component Styles - Using Muka Design Tokens */
11383
+
11384
+ .muka-card {
11385
+ background-color: var(--card-color-default-background);
11386
+ color: var(--card-color-default-foreground);
11387
+ border: var(--border-width-regular) solid var(--card-color-default-border);
11388
+ box-shadow: var(--card-shadow-default);
11389
+ transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
11390
+ overflow: hidden;
11391
+ }
11392
+
11393
+ /* Padding variants */
11394
+ .muka-card--padding-none {
11395
+ padding: 0;
11396
+ }
11397
+
11398
+ .muka-card--padding-sm {
11399
+ padding: var(--card-padding-sm);
11400
+ }
11401
+
11402
+ .muka-card--padding-md {
11403
+ padding: var(--card-padding-md);
11404
+ }
11405
+
11406
+ .muka-card--padding-lg {
11407
+ padding: var(--card-padding-lg);
11408
+ }
11409
+
11410
+ /* Radius variants */
11411
+ .muka-card--radius-sm {
11412
+ border-radius: var(--card-radius-sm);
11413
+ }
11414
+
11415
+ .muka-card--radius-md {
11416
+ border-radius: var(--card-radius-md);
11417
+ }
11418
+
11419
+ .muka-card--radius-lg {
11420
+ border-radius: var(--card-radius-lg);
11421
+ }
11422
+
11423
+ /* Interactive variant */
11424
+ .muka-card--interactive {
11425
+ cursor: pointer;
11426
+ user-select: none;
11427
+ }
11428
+
11429
+ .muka-card--interactive:hover {
11430
+ background-color: var(--card-color-hover-background);
11431
+ border-color: var(--card-color-hover-border);
11432
+ box-shadow: var(--card-shadow-hover);
11433
+ }
11434
+
11435
+ .muka-card--interactive:active,
11436
+ .muka-card--interactive.muka-card--pressed {
11437
+ background-color: var(--card-color-pressed-background);
11438
+ border-color: var(--card-color-pressed-border);
11439
+ box-shadow: var(--card-shadow-pressed);
11440
+ }
11441
+
11442
+ .muka-card--interactive:focus-visible {
11443
+ outline: 2px solid var(--color-border-focus);
11444
+ outline-offset: 2px;
11445
+ }
11446
+
11447
+ /* Selected variant */
11448
+ .muka-card--selected {
11449
+ background-color: var(--card-color-selected-background);
11450
+ border-color: var(--card-color-selected-border);
11451
+ border-width: var(--border-width-bold);
11452
+ box-shadow: var(--card-shadow-selected);
11453
+ }
11454
+
11455
+ /* Optional header (title + description) */
11456
+ .muka-card__header {
11457
+ margin-bottom: var(--spacing-4);
11458
+ }
11459
+
11460
+ .muka-card__title {
11461
+ margin: 0;
11462
+ color: var(--color-text-default-default);
11463
+ font-family: var(--text-heading-xs-fontFamily);
11464
+ font-weight: var(--text-heading-xs-fontWeight);
11465
+ font-size: var(--text-heading-xs-fontSize);
11466
+ line-height: var(--text-heading-xs-lineHeight);
11467
+ letter-spacing: var(--text-heading-xs-letterSpacing);
11468
+ }
11469
+
11470
+ .muka-card__description {
11471
+ margin: var(--spacing-1) 0 0;
11472
+ color: var(--color-text-subtle-default);
11473
+ font-family: var(--text-body-sm-regular-fontFamily);
11474
+ font-weight: var(--text-body-sm-regular-fontWeight);
11475
+ font-size: var(--text-body-sm-regular-fontSize);
11476
+ line-height: var(--text-body-sm-regular-lineHeight);
11477
+ }
11478
+
11479
+ /* Hide divider on last list item inside card */
11480
+ .muka-card > .muka-listitem:last-child > .muka-listitem__divider {
11481
+ display: none;
11482
+ }
11483
+
11484
+ /* Disabled state */
11485
+ .muka-card--disabled {
11486
+ opacity: 0.5;
11487
+ cursor: not-allowed;
11488
+ pointer-events: none;
11489
+ }
11490
+
11491
+
11492
+ /* Button */
11493
+ /* Button Component Styles - Using Muka Design Tokens */
11494
+
11495
+ /* Base button styles */
11496
+ .muka-button {
11497
+ /* Layout */
11498
+ display: inline-flex;
11499
+ align-items: center;
11500
+ justify-content: center;
11501
+
11502
+ /* Typography - using semantic tokens */
11503
+ font-family: var(--alias-font-brand-family);
11504
+ font-weight: var(--alias-font-brand-weight-semibold);
11505
+ text-decoration: none;
11506
+
11507
+ /* Interaction */
11508
+ border: none;
11509
+ cursor: pointer;
11510
+ user-select: none;
11511
+ transition: all 0.2s ease;
11512
+
11513
+ /* Accessibility */
11514
+ outline: none;
11515
+ position: relative;
11516
+ }
11517
+
11518
+ /* Focus styles for accessibility */
11519
+ .muka-button:focus-visible {
11520
+ outline: 2px solid var(--color-border-focus);
11521
+ outline-offset: 2px;
11522
+ }
11523
+
11524
+ /* Size variants
11525
+ Height is driven by min-height; vertical padding is 0 and the label carries
11526
+ tight (Figma) line-height. Horizontal spacing matches Figma's nested model:
11527
+ the button's padding is the outer container inset, and the label's own
11528
+ padding is the icon-to-text gap (so text-only buttons keep both insets). */
11529
+ .muka-button--sm {
11530
+ padding: 0 var(--button-padding-sm-x);
11531
+ border-radius: var(--button-radius-sm);
11532
+ font-size: var(--text-label-sm-semibold-fontSize);
11533
+ line-height: var(--text-label-sm-semibold-lineHeight);
11534
+ min-height: 32px;
11535
+ }
11536
+
11537
+ .muka-button--sm .muka-button__label {
11538
+ padding: 0 var(--button-gap-sm);
11539
+ }
11540
+
11541
+ .muka-button--md {
11542
+ padding: 0 var(--button-padding-md-x);
11543
+ border-radius: var(--button-radius-md);
11544
+ font-size: var(--text-label-sm-semibold-fontSize);
11545
+ line-height: var(--text-label-sm-semibold-lineHeight);
11546
+ min-height: 40px;
11547
+ }
11548
+
11549
+ .muka-button--md .muka-button__label {
11550
+ padding: 0 var(--button-gap-md);
11524
11551
  }
11525
11552
 
11526
- .muka-chat-attachment-chip--error .muka-chat-attachment-chip__progress-fill {
11527
- background-color: var(--color-state-error-default, var(--color-text-default-default));
11553
+ .muka-button--lg {
11554
+ padding: 0 var(--button-padding-lg-x);
11555
+ border-radius: var(--button-radius-lg);
11556
+ font-size: var(--text-label-lg-semibold-fontSize);
11557
+ line-height: var(--text-label-lg-semibold-lineHeight);
11558
+ min-height: 48px;
11528
11559
  }
11529
11560
 
11561
+ .muka-button--lg .muka-button__label {
11562
+ padding: 0 var(--button-gap-lg);
11563
+ }
11530
11564
 
11531
- /* Card */
11532
- /* Card Component Styles - Using Muka Design Tokens */
11533
-
11534
- .muka-card {
11535
- background-color: var(--card-color-default-background);
11536
- color: var(--card-color-default-foreground);
11537
- border: var(--border-width-regular) solid var(--card-color-default-border);
11538
- box-shadow: var(--card-shadow-default);
11539
- transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
11540
- overflow: hidden;
11565
+ .muka-button--xl {
11566
+ padding: 0 var(--button-padding-xl-x);
11567
+ border-radius: var(--button-radius-xl);
11568
+ font-size: var(--text-label-2xl-semibold-fontSize);
11569
+ line-height: var(--text-label-2xl-semibold-lineHeight);
11570
+ min-height: 64px;
11541
11571
  }
11542
11572
 
11543
- /* Padding variants */
11544
- .muka-card--padding-none {
11545
- padding: 0;
11573
+ .muka-button--xl .muka-button__label {
11574
+ padding: 0 var(--button-gap-xl);
11546
11575
  }
11547
11576
 
11548
- .muka-card--padding-sm {
11549
- padding: var(--card-padding-sm);
11577
+ /* Primary variant - your main CTA button */
11578
+ .muka-button--primary {
11579
+ background-color: var(--button-color-primary-background-default);
11580
+ color: var(--button-color-primary-foreground-default);
11581
+ box-shadow: var(--button-color-primary-shadow-default);
11550
11582
  }
11551
11583
 
11552
- .muka-card--padding-md {
11553
- padding: var(--card-padding-md);
11584
+ .muka-button--primary:hover:not(:disabled) {
11585
+ background-color: var(--button-color-primary-background-hover);
11586
+ color: var(--button-color-primary-foreground-hover);
11587
+ box-shadow: var(--button-color-primary-shadow-hover);
11554
11588
  }
11555
11589
 
11556
- .muka-card--padding-lg {
11557
- padding: var(--card-padding-lg);
11590
+ /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
11591
+ trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
11592
+ gives toggle buttons a visible selected state, so the toggle is not conveyed
11593
+ to sighted users by the accessibility tree alone. */
11594
+ .muka-button--primary:active:not(:disabled),
11595
+ .muka-button--primary.muka-button--pressed:not(:disabled),
11596
+ .muka-button--primary[data-state="open"]:not(:disabled),
11597
+ .muka-button--primary[aria-pressed="true"]:not(:disabled) {
11598
+ background-color: var(--button-color-primary-background-pressed);
11599
+ color: var(--button-color-primary-foreground-pressed);
11600
+ box-shadow: var(--button-color-primary-shadow-pressed);
11558
11601
  }
11559
11602
 
11560
- /* Radius variants */
11561
- .muka-card--radius-sm {
11562
- border-radius: var(--card-radius-sm);
11603
+ .muka-button--primary:disabled {
11604
+ background-color: var(--button-color-primary-background-disabled);
11605
+ color: var(--button-color-primary-foreground-disabled);
11606
+ box-shadow: var(--button-color-primary-shadow-disabled);
11607
+ cursor: not-allowed;
11608
+ opacity: 1; /* Remove opacity since we have proper disabled tokens */
11563
11609
  }
11564
11610
 
11565
- .muka-card--radius-md {
11566
- border-radius: var(--card-radius-md);
11611
+ /* Secondary variant - supporting actions, no border, only bottom inner shadow */
11612
+ .muka-button--secondary {
11613
+ background-color: var(--button-color-secondary-background-default);
11614
+ color: var(--button-color-secondary-foreground-default);
11615
+ box-shadow: var(--button-color-secondary-shadow-default);
11567
11616
  }
11568
11617
 
11569
- .muka-card--radius-lg {
11570
- border-radius: var(--card-radius-lg);
11618
+ .muka-button--secondary:hover:not(:disabled) {
11619
+ background-color: var(--button-color-secondary-background-hover);
11620
+ color: var(--button-color-secondary-foreground-hover);
11621
+ box-shadow: var(--button-color-secondary-shadow-hover);
11571
11622
  }
11572
11623
 
11573
- /* Interactive variant */
11574
- .muka-card--interactive {
11575
- cursor: pointer;
11576
- user-select: none;
11624
+ .muka-button--secondary:active:not(:disabled),
11625
+ .muka-button--secondary.muka-button--pressed:not(:disabled),
11626
+ .muka-button--secondary[data-state="open"]:not(:disabled),
11627
+ .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
11628
+ background-color: var(--button-color-secondary-background-pressed);
11629
+ color: var(--button-color-secondary-foreground-pressed);
11630
+ box-shadow: var(--button-color-secondary-shadow-pressed);
11577
11631
  }
11578
11632
 
11579
- .muka-card--interactive:hover {
11580
- background-color: var(--card-color-hover-background);
11581
- border-color: var(--card-color-hover-border);
11582
- box-shadow: var(--card-shadow-hover);
11633
+ .muka-button--secondary:disabled {
11634
+ background-color: var(--button-color-secondary-background-disabled);
11635
+ color: var(--button-color-secondary-foreground-disabled);
11636
+ box-shadow: var(--button-color-secondary-shadow-disabled);
11637
+ cursor: not-allowed;
11638
+ opacity: 1;
11583
11639
  }
11584
11640
 
11585
- .muka-card--interactive:active,
11586
- .muka-card--interactive.muka-card--pressed {
11587
- background-color: var(--card-color-pressed-background);
11588
- border-color: var(--card-color-pressed-border);
11589
- box-shadow: var(--card-shadow-pressed);
11641
+ /* Tertiary variant - tinted background with accent text and border */
11642
+ .muka-button--tertiary {
11643
+ background-color: var(--button-color-tertiary-background-default);
11644
+ color: var(--button-color-tertiary-foreground-default);
11645
+ border: 1px solid var(--button-color-tertiary-border-default);
11590
11646
  }
11591
11647
 
11592
- .muka-card--interactive:focus-visible {
11593
- outline: 2px solid var(--color-border-focus);
11594
- outline-offset: 2px;
11648
+ .muka-button--tertiary:hover:not(:disabled) {
11649
+ background-color: var(--button-color-tertiary-background-hover);
11650
+ color: var(--button-color-tertiary-foreground-hover);
11651
+ border-color: var(--button-color-tertiary-border-hover);
11595
11652
  }
11596
11653
 
11597
- /* Selected variant */
11598
- .muka-card--selected {
11599
- background-color: var(--card-color-selected-background);
11600
- border-color: var(--card-color-selected-border);
11601
- border-width: var(--border-width-bold);
11602
- box-shadow: var(--card-shadow-selected);
11654
+ .muka-button--tertiary:active:not(:disabled),
11655
+ .muka-button--tertiary.muka-button--pressed:not(:disabled),
11656
+ .muka-button--tertiary[data-state="open"]:not(:disabled),
11657
+ .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
11658
+ background-color: var(--button-color-tertiary-background-pressed);
11659
+ color: var(--button-color-tertiary-foreground-pressed);
11660
+ border-color: var(--button-color-tertiary-border-pressed);
11603
11661
  }
11604
11662
 
11605
- /* Optional header (title + description) */
11606
- .muka-card__header {
11607
- margin-bottom: var(--spacing-4);
11663
+ .muka-button--tertiary:disabled {
11664
+ background-color: var(--button-color-tertiary-background-disabled);
11665
+ color: var(--button-color-tertiary-foreground-disabled);
11666
+ border-color: var(--button-color-tertiary-border-disabled);
11667
+ cursor: not-allowed;
11668
+ opacity: 1;
11608
11669
  }
11609
11670
 
11610
- .muka-card__title {
11611
- margin: 0;
11612
- color: var(--color-text-default-default);
11613
- font-family: var(--text-heading-xs-fontFamily);
11614
- font-weight: var(--text-heading-xs-fontWeight);
11615
- font-size: var(--text-heading-xs-fontSize);
11616
- line-height: var(--text-heading-xs-lineHeight);
11617
- letter-spacing: var(--text-heading-xs-letterSpacing);
11671
+ /* Ghost variant - minimal styling, border appears on hover */
11672
+ .muka-button--ghost {
11673
+ background-color: var(--button-color-ghost-background-default);
11674
+ color: var(--button-color-ghost-foreground-default);
11675
+ border: 1px solid var(--button-color-ghost-border-default);
11618
11676
  }
11619
11677
 
11620
- .muka-card__description {
11621
- margin: var(--spacing-1) 0 0;
11622
- color: var(--color-text-subtle-default);
11623
- font-family: var(--text-body-sm-regular-fontFamily);
11624
- font-weight: var(--text-body-sm-regular-fontWeight);
11625
- font-size: var(--text-body-sm-regular-fontSize);
11626
- line-height: var(--text-body-sm-regular-lineHeight);
11678
+ .muka-button--ghost:hover:not(:disabled) {
11679
+ background-color: var(--button-color-ghost-background-hover);
11680
+ color: var(--button-color-ghost-foreground-hover);
11681
+ border-color: var(--button-color-ghost-border-hover);
11627
11682
  }
11628
11683
 
11629
- /* Hide divider on last list item inside card */
11630
- .muka-card > .muka-listitem:last-child > .muka-listitem__divider {
11631
- display: none;
11684
+ .muka-button--ghost:active:not(:disabled),
11685
+ .muka-button--ghost.muka-button--pressed:not(:disabled),
11686
+ .muka-button--ghost[data-state="open"]:not(:disabled),
11687
+ .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
11688
+ background-color: var(--button-color-ghost-background-pressed);
11689
+ color: var(--button-color-ghost-foreground-pressed);
11690
+ border-color: var(--button-color-ghost-border-pressed);
11632
11691
  }
11633
11692
 
11634
- /* Disabled state */
11635
- .muka-card--disabled {
11636
- opacity: 0.5;
11693
+ .muka-button--ghost:disabled {
11694
+ background-color: var(--button-color-ghost-background-disabled);
11695
+ color: var(--button-color-ghost-foreground-disabled);
11696
+ border-color: var(--button-color-ghost-border-disabled);
11637
11697
  cursor: not-allowed;
11638
- pointer-events: none;
11698
+ opacity: 1;
11639
11699
  }
11640
11700
 
11641
-
11642
- /* ChatComposer */
11643
- /* ChatComposer Component Styles */
11644
-
11645
- /*
11646
- * The composer is a bare, fill-width row: no padding, background, border or
11647
- * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
11648
- * container — see BottomBar's `chat` variant.
11649
- */
11650
- .muka-chat-composer {
11651
- display: flex;
11652
- flex-direction: column;
11653
- gap: var(--spacing-3);
11654
- width: 100%;
11701
+ /* Muted variant - same as ghost but resting foreground is subtle, darkens on interaction */
11702
+ .muka-button--muted {
11703
+ background-color: var(--button-color-muted-background-default);
11704
+ color: var(--button-color-muted-foreground-default);
11705
+ border: 1px solid var(--button-color-muted-border-default);
11655
11706
  }
11656
11707
 
11657
- .muka-chat-composer--disabled {
11658
- opacity: 0.6;
11659
- pointer-events: none;
11708
+ .muka-button--muted:hover:not(:disabled) {
11709
+ background-color: var(--button-color-muted-background-hover);
11710
+ color: var(--button-color-muted-foreground-hover);
11711
+ border-color: var(--button-color-muted-border-hover);
11660
11712
  }
11661
11713
 
11662
- /* ─── Input row ────────────────────────────────────────── */
11663
-
11664
- .muka-chat-composer__row {
11665
- display: flex;
11666
- width: 100%;
11667
- align-items: flex-end;
11668
- gap: var(--spacing-3);
11714
+ .muka-button--muted:active:not(:disabled),
11715
+ .muka-button--muted.muka-button--pressed:not(:disabled),
11716
+ .muka-button--muted[data-state="open"]:not(:disabled),
11717
+ .muka-button--muted[aria-pressed="true"]:not(:disabled) {
11718
+ background-color: var(--button-color-muted-background-pressed);
11719
+ color: var(--button-color-muted-foreground-pressed);
11720
+ border-color: var(--button-color-muted-border-pressed);
11669
11721
  }
11670
11722
 
11671
- /* ─── Text field ───────────────────────────────────────── */
11723
+ .muka-button--muted:disabled {
11724
+ background-color: var(--button-color-muted-background-disabled);
11725
+ color: var(--button-color-muted-foreground-disabled);
11726
+ border-color: var(--button-color-muted-border-disabled);
11727
+ cursor: not-allowed;
11728
+ opacity: 1;
11729
+ }
11672
11730
 
11673
- .muka-chat-composer__field {
11674
- display: flex;
11675
- flex: 1 1 auto;
11676
- min-width: 0;
11677
- box-sizing: border-box;
11678
- align-items: center;
11679
- gap: var(--spacing-1);
11680
- min-height: var(--input-field-height-lg, 48px);
11681
- padding: 0 var(--spacing-2);
11682
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
11683
- border-radius: var(--input-field-radius-lg);
11684
- background-color: var(--input-field-color-default-background);
11685
- transition: border-color 0.12s ease;
11731
+ /* General disabled state - fallback */
11732
+ .muka-button:disabled {
11733
+ cursor: not-allowed;
11734
+ pointer-events: none;
11735
+ }
11736
+
11737
+ /* Full width modifier */
11738
+ .muka-button--full-width {
11739
+ width: 100%;
11686
11740
  }
11687
11741
 
11688
- .muka-chat-composer__field:focus-within {
11689
- border-color: var(--input-field-color-focus-border, var(--color-action-default));
11742
+ /* Icons - forced to the Figma per-size dimension regardless of the icon passed */
11743
+ .muka-button__icon {
11744
+ display: inline-flex;
11745
+ align-items: center;
11746
+ justify-content: center;
11747
+ flex-shrink: 0;
11690
11748
  }
11691
11749
 
11692
- .muka-chat-composer__input {
11693
- flex: 1 1 auto;
11694
- min-width: 0;
11750
+ /* Make the icon content (raw <svg> or a nested Icon span) fill the wrapper.
11751
+ Scoped under .muka-button to outrank Icon.css's own `.muka-icon--{size}`
11752
+ rule, so the button's size wins even when the icon hardcodes its own size. */
11753
+ .muka-button .muka-button__icon > *,
11754
+ .muka-button .muka-button__icon svg {
11695
11755
  width: 100%;
11696
- box-sizing: border-box;
11697
- resize: none;
11698
- border: none;
11699
- background: transparent;
11700
- outline: none;
11701
- padding: 0 var(--spacing-1);
11702
- color: var(--color-text-default-default);
11703
- font-family: var(--text-body-base-regular-fontFamily);
11704
- font-weight: var(--text-body-base-regular-fontWeight);
11705
- font-size: var(--text-body-base-regular-fontSize);
11706
- line-height: var(--text-body-base-regular-lineHeight);
11707
- appearance: none;
11708
- -webkit-appearance: none;
11756
+ height: 100%;
11757
+ display: block;
11709
11758
  }
11710
11759
 
11711
- .muka-chat-composer__input::placeholder {
11712
- color: var(--color-text-subtle-default);
11760
+ .muka-button--sm .muka-button__icon {
11761
+ width: var(--button-icon-sm);
11762
+ height: var(--button-icon-sm);
11713
11763
  }
11714
11764
 
11715
- /* Keep the in-field emoji button flush to the bottom-right as the field grows */
11716
- .muka-chat-composer__emoji {
11717
- flex-shrink: 0;
11765
+ .muka-button--md .muka-button__icon {
11766
+ width: var(--button-icon-md);
11767
+ height: var(--button-icon-md);
11718
11768
  }
11719
11769
 
11720
- /* ─── Recording bar ────────────────────────────────────── */
11721
-
11722
- .muka-chat-composer__recording {
11723
- display: flex;
11724
- flex: 1 1 auto;
11725
- min-width: 0;
11726
- box-sizing: border-box;
11727
- align-items: center;
11728
- min-height: var(--input-field-height-lg, 48px);
11729
- padding: var(--card-padding-sm);
11730
- border: var(--border-width-regular) solid var(--card-color-default-border);
11731
- border-radius: var(--radius-lg);
11732
- background-color: var(--card-color-default-background);
11770
+ .muka-button--lg .muka-button__icon {
11771
+ width: var(--button-icon-lg);
11772
+ height: var(--button-icon-lg);
11733
11773
  }
11734
11774
 
11735
- /* ─── Staged attachments strip ─────────────────────────── */
11775
+ .muka-button--xl .muka-button__icon {
11776
+ width: var(--button-icon-xl);
11777
+ height: var(--button-icon-xl);
11778
+ }
11736
11779
 
11737
- .muka-chat-composer__attachments-strip {
11738
- position: relative;
11739
- width: 100%;
11780
+ .muka-button__label {
11781
+ display: inline-flex;
11782
+ align-items: center;
11740
11783
  }
11741
11784
 
11742
- .muka-chat-composer__attachments {
11743
- display: flex;
11744
- gap: var(--spacing-3);
11745
- overflow-x: auto;
11746
- scroll-behavior: smooth;
11747
- scrollbar-width: none;
11785
+ /* Icon-only buttons - square, sized to the button height per size */
11786
+ .muka-button--icon-only {
11787
+ padding: 0;
11748
11788
  }
11749
11789
 
11750
- .muka-chat-composer__attachments::-webkit-scrollbar {
11751
- display: none;
11790
+ .muka-button--icon-only.muka-button--sm {
11791
+ width: 32px;
11752
11792
  }
11753
11793
 
11754
- .muka-chat-composer__overflow {
11755
- position: absolute;
11756
- top: 50%;
11757
- right: var(--spacing-2);
11758
- transform: translateY(-50%);
11794
+ .muka-button--icon-only.muka-button--md {
11795
+ width: 40px;
11759
11796
  }
11760
11797
 
11761
- /* ─── Print ────────────────────────────────────────────── */
11798
+ .muka-button--icon-only.muka-button--lg {
11799
+ width: 48px;
11800
+ }
11762
11801
 
11763
- @media print {
11764
- .muka-chat-composer {
11765
- display: none;
11766
- }
11802
+ .muka-button--icon-only.muka-button--xl {
11803
+ width: 64px;
11767
11804
  }
11768
11805
 
11769
11806
 
@@ -12217,362 +12254,231 @@ button.muka-chat-photo-grid__tile:focus-visible {
12217
12254
  padding: 0 var(--badge-number-padding-lg);
12218
12255
  font-family: var(--text-label-2xl-bold-fontFamily);
12219
12256
  font-weight: var(--text-label-2xl-bold-fontWeight);
12220
- font-size: var(--text-label-2xl-bold-fontSize);
12221
- line-height: var(--text-label-2xl-bold-lineHeight);
12222
- }
12223
-
12224
- .muka-badge-number__label {
12225
- /*
12226
- * The badge sets a tight line-height for compact sizing, which would clip
12227
- * glyph descenders; give the label a roomier line-height. Vertical centering
12228
- * is unaffected because the badge height is fixed and content is centered.
12229
- */
12230
- line-height: normal;
12231
- }
12232
-
12233
- /* Neutral variant */
12234
- .muka-badge-number--neutral {
12235
- background-color: var(--color-surface-level1);
12236
- color: var(--color-text-default-default);
12237
- }
12238
-
12239
- /* Info variant */
12240
- .muka-badge-number--info {
12241
- background-color: var(--color-state-info-contrast);
12242
- color: var(--color-text-default-inverse);
12243
- }
12244
-
12245
- /* Success variant */
12246
- .muka-badge-number--success {
12247
- background-color: var(--color-state-success-contrast);
12248
- color: var(--color-text-default-inverse);
12249
- }
12250
-
12251
- /* Warning variant */
12252
- .muka-badge-number--warning {
12253
- background-color: var(--color-state-warning-contrast);
12254
- color: var(--color-text-default-inverse);
12255
- }
12256
-
12257
- /* Error variant */
12258
- .muka-badge-number--error {
12259
- background-color: var(--color-state-error-contrast);
12260
- color: var(--color-text-default-inverse);
12261
- }
12262
-
12263
-
12264
- /* Button */
12265
- /* Button Component Styles - Using Muka Design Tokens */
12266
-
12267
- /* Base button styles */
12268
- .muka-button {
12269
- /* Layout */
12270
- display: inline-flex;
12271
- align-items: center;
12272
- justify-content: center;
12273
-
12274
- /* Typography - using semantic tokens */
12275
- font-family: var(--alias-font-brand-family);
12276
- font-weight: var(--alias-font-brand-weight-semibold);
12277
- text-decoration: none;
12278
-
12279
- /* Interaction */
12280
- border: none;
12281
- cursor: pointer;
12282
- user-select: none;
12283
- transition: all 0.2s ease;
12284
-
12285
- /* Accessibility */
12286
- outline: none;
12287
- position: relative;
12288
- }
12289
-
12290
- /* Focus styles for accessibility */
12291
- .muka-button:focus-visible {
12292
- outline: 2px solid var(--color-border-focus);
12293
- outline-offset: 2px;
12294
- }
12295
-
12296
- /* Size variants
12297
- Height is driven by min-height; vertical padding is 0 and the label carries
12298
- tight (Figma) line-height. Horizontal spacing matches Figma's nested model:
12299
- the button's padding is the outer container inset, and the label's own
12300
- padding is the icon-to-text gap (so text-only buttons keep both insets). */
12301
- .muka-button--sm {
12302
- padding: 0 var(--button-padding-sm-x);
12303
- border-radius: var(--button-radius-sm);
12304
- font-size: var(--text-label-sm-semibold-fontSize);
12305
- line-height: var(--text-label-sm-semibold-lineHeight);
12306
- min-height: 32px;
12307
- }
12308
-
12309
- .muka-button--sm .muka-button__label {
12310
- padding: 0 var(--button-gap-sm);
12311
- }
12312
-
12313
- .muka-button--md {
12314
- padding: 0 var(--button-padding-md-x);
12315
- border-radius: var(--button-radius-md);
12316
- font-size: var(--text-label-sm-semibold-fontSize);
12317
- line-height: var(--text-label-sm-semibold-lineHeight);
12318
- min-height: 40px;
12319
- }
12320
-
12321
- .muka-button--md .muka-button__label {
12322
- padding: 0 var(--button-gap-md);
12323
- }
12324
-
12325
- .muka-button--lg {
12326
- padding: 0 var(--button-padding-lg-x);
12327
- border-radius: var(--button-radius-lg);
12328
- font-size: var(--text-label-lg-semibold-fontSize);
12329
- line-height: var(--text-label-lg-semibold-lineHeight);
12330
- min-height: 48px;
12331
- }
12332
-
12333
- .muka-button--lg .muka-button__label {
12334
- padding: 0 var(--button-gap-lg);
12335
- }
12336
-
12337
- .muka-button--xl {
12338
- padding: 0 var(--button-padding-xl-x);
12339
- border-radius: var(--button-radius-xl);
12340
- font-size: var(--text-label-2xl-semibold-fontSize);
12341
- line-height: var(--text-label-2xl-semibold-lineHeight);
12342
- min-height: 64px;
12343
- }
12344
-
12345
- .muka-button--xl .muka-button__label {
12346
- padding: 0 var(--button-gap-xl);
12347
- }
12348
-
12349
- /* Primary variant - your main CTA button */
12350
- .muka-button--primary {
12351
- background-color: var(--button-color-primary-background-default);
12352
- color: var(--button-color-primary-foreground-default);
12353
- box-shadow: var(--button-color-primary-shadow-default);
12354
- }
12355
-
12356
- .muka-button--primary:hover:not(:disabled) {
12357
- background-color: var(--button-color-primary-background-hover);
12358
- color: var(--button-color-primary-foreground-hover);
12359
- box-shadow: var(--button-color-primary-shadow-hover);
12360
- }
12361
-
12362
- /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
12363
- trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
12364
- gives toggle buttons a visible selected state, so the toggle is not conveyed
12365
- to sighted users by the accessibility tree alone. */
12366
- .muka-button--primary:active:not(:disabled),
12367
- .muka-button--primary.muka-button--pressed:not(:disabled),
12368
- .muka-button--primary[data-state="open"]:not(:disabled),
12369
- .muka-button--primary[aria-pressed="true"]:not(:disabled) {
12370
- background-color: var(--button-color-primary-background-pressed);
12371
- color: var(--button-color-primary-foreground-pressed);
12372
- box-shadow: var(--button-color-primary-shadow-pressed);
12257
+ font-size: var(--text-label-2xl-bold-fontSize);
12258
+ line-height: var(--text-label-2xl-bold-lineHeight);
12373
12259
  }
12374
12260
 
12375
- .muka-button--primary:disabled {
12376
- background-color: var(--button-color-primary-background-disabled);
12377
- color: var(--button-color-primary-foreground-disabled);
12378
- box-shadow: var(--button-color-primary-shadow-disabled);
12379
- cursor: not-allowed;
12380
- opacity: 1; /* Remove opacity since we have proper disabled tokens */
12261
+ .muka-badge-number__label {
12262
+ /*
12263
+ * The badge sets a tight line-height for compact sizing, which would clip
12264
+ * glyph descenders; give the label a roomier line-height. Vertical centering
12265
+ * is unaffected because the badge height is fixed and content is centered.
12266
+ */
12267
+ line-height: normal;
12381
12268
  }
12382
12269
 
12383
- /* Secondary variant - supporting actions, no border, only bottom inner shadow */
12384
- .muka-button--secondary {
12385
- background-color: var(--button-color-secondary-background-default);
12386
- color: var(--button-color-secondary-foreground-default);
12387
- box-shadow: var(--button-color-secondary-shadow-default);
12270
+ /* Neutral variant */
12271
+ .muka-badge-number--neutral {
12272
+ background-color: var(--color-surface-level1);
12273
+ color: var(--color-text-default-default);
12388
12274
  }
12389
12275
 
12390
- .muka-button--secondary:hover:not(:disabled) {
12391
- background-color: var(--button-color-secondary-background-hover);
12392
- color: var(--button-color-secondary-foreground-hover);
12393
- box-shadow: var(--button-color-secondary-shadow-hover);
12276
+ /* Info variant */
12277
+ .muka-badge-number--info {
12278
+ background-color: var(--color-state-info-contrast);
12279
+ color: var(--color-text-default-inverse);
12394
12280
  }
12395
12281
 
12396
- .muka-button--secondary:active:not(:disabled),
12397
- .muka-button--secondary.muka-button--pressed:not(:disabled),
12398
- .muka-button--secondary[data-state="open"]:not(:disabled),
12399
- .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
12400
- background-color: var(--button-color-secondary-background-pressed);
12401
- color: var(--button-color-secondary-foreground-pressed);
12402
- box-shadow: var(--button-color-secondary-shadow-pressed);
12282
+ /* Success variant */
12283
+ .muka-badge-number--success {
12284
+ background-color: var(--color-state-success-contrast);
12285
+ color: var(--color-text-default-inverse);
12403
12286
  }
12404
12287
 
12405
- .muka-button--secondary:disabled {
12406
- background-color: var(--button-color-secondary-background-disabled);
12407
- color: var(--button-color-secondary-foreground-disabled);
12408
- box-shadow: var(--button-color-secondary-shadow-disabled);
12409
- cursor: not-allowed;
12410
- opacity: 1;
12288
+ /* Warning variant */
12289
+ .muka-badge-number--warning {
12290
+ background-color: var(--color-state-warning-contrast);
12291
+ color: var(--color-text-default-inverse);
12411
12292
  }
12412
12293
 
12413
- /* Tertiary variant - tinted background with accent text and border */
12414
- .muka-button--tertiary {
12415
- background-color: var(--button-color-tertiary-background-default);
12416
- color: var(--button-color-tertiary-foreground-default);
12417
- border: 1px solid var(--button-color-tertiary-border-default);
12294
+ /* Error variant */
12295
+ .muka-badge-number--error {
12296
+ background-color: var(--color-state-error-contrast);
12297
+ color: var(--color-text-default-inverse);
12418
12298
  }
12419
12299
 
12420
- .muka-button--tertiary:hover:not(:disabled) {
12421
- background-color: var(--button-color-tertiary-background-hover);
12422
- color: var(--button-color-tertiary-foreground-hover);
12423
- border-color: var(--button-color-tertiary-border-hover);
12424
- }
12425
12300
 
12426
- .muka-button--tertiary:active:not(:disabled),
12427
- .muka-button--tertiary.muka-button--pressed:not(:disabled),
12428
- .muka-button--tertiary[data-state="open"]:not(:disabled),
12429
- .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
12430
- background-color: var(--button-color-tertiary-background-pressed);
12431
- color: var(--button-color-tertiary-foreground-pressed);
12432
- border-color: var(--button-color-tertiary-border-pressed);
12301
+ /* Badge */
12302
+ /* Badge Component Styles - Using Muka Design Tokens */
12303
+
12304
+ .muka-badge {
12305
+ display: inline-flex;
12306
+ align-items: center;
12307
+ border-radius: var(--border-radius-full);
12308
+ white-space: nowrap;
12309
+ user-select: none;
12310
+ box-sizing: border-box;
12433
12311
  }
12434
12312
 
12435
- .muka-button--tertiary:disabled {
12436
- background-color: var(--button-color-tertiary-background-disabled);
12437
- color: var(--button-color-tertiary-foreground-disabled);
12438
- border-color: var(--button-color-tertiary-border-disabled);
12439
- cursor: not-allowed;
12440
- opacity: 1;
12313
+ /*
12314
+ * Sizes — height, gap, type, and default (label-edge) horizontal padding.
12315
+ * Mirrors Chip so the two components share sizing, fonts, and spacing.
12316
+ * Vertical centering is handled by the fixed height + align-items: center.
12317
+ * The leading side gets a tighter padding when an icon/dot is present, via the
12318
+ * --has-icon / --has-dot modifiers below.
12319
+ */
12320
+ .muka-badge--sm {
12321
+ height: var(--badge-size-height-sm);
12322
+ gap: var(--badge-gap-sm);
12323
+ padding: 0 var(--badge-padding-label-sm);
12324
+ font-family: var(--text-label-sm-regular-fontFamily);
12325
+ font-weight: var(--text-label-sm-regular-fontWeight);
12326
+ font-size: var(--text-label-sm-regular-fontSize);
12327
+ line-height: var(--text-label-sm-regular-lineHeight);
12441
12328
  }
12442
12329
 
12443
- /* Ghost variant - minimal styling, border appears on hover */
12444
- .muka-button--ghost {
12445
- background-color: var(--button-color-ghost-background-default);
12446
- color: var(--button-color-ghost-foreground-default);
12447
- border: 1px solid var(--button-color-ghost-border-default);
12330
+ .muka-badge--md {
12331
+ height: var(--badge-size-height-md);
12332
+ gap: var(--badge-gap-md);
12333
+ padding: 0 var(--badge-padding-label-md);
12334
+ font-family: var(--text-label-md-regular-fontFamily);
12335
+ font-weight: var(--text-label-md-regular-fontWeight);
12336
+ font-size: var(--text-label-md-regular-fontSize);
12337
+ line-height: var(--text-label-md-regular-lineHeight);
12448
12338
  }
12449
12339
 
12450
- .muka-button--ghost:hover:not(:disabled) {
12451
- background-color: var(--button-color-ghost-background-hover);
12452
- color: var(--button-color-ghost-foreground-hover);
12453
- border-color: var(--button-color-ghost-border-hover);
12340
+ .muka-badge--lg {
12341
+ height: var(--badge-size-height-lg);
12342
+ gap: var(--badge-gap-lg);
12343
+ padding: 0 var(--badge-padding-label-lg);
12344
+ font-family: var(--text-label-lg-regular-fontFamily);
12345
+ font-weight: var(--text-label-lg-regular-fontWeight);
12346
+ font-size: var(--text-label-lg-regular-fontSize);
12347
+ line-height: var(--text-label-lg-regular-lineHeight);
12454
12348
  }
12455
12349
 
12456
- .muka-button--ghost:active:not(:disabled),
12457
- .muka-button--ghost.muka-button--pressed:not(:disabled),
12458
- .muka-button--ghost[data-state="open"]:not(:disabled),
12459
- .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
12460
- background-color: var(--button-color-ghost-background-pressed);
12461
- color: var(--button-color-ghost-foreground-pressed);
12462
- border-color: var(--button-color-ghost-border-pressed);
12350
+ /* Tighter leading padding when a leading icon or dot is present */
12351
+ .muka-badge--sm.muka-badge--has-icon,
12352
+ .muka-badge--sm.muka-badge--has-dot {
12353
+ padding-left: var(--badge-padding-leading-sm);
12354
+ }
12355
+ .muka-badge--md.muka-badge--has-icon,
12356
+ .muka-badge--md.muka-badge--has-dot {
12357
+ padding-left: var(--badge-padding-leading-md);
12358
+ }
12359
+ .muka-badge--lg.muka-badge--has-icon,
12360
+ .muka-badge--lg.muka-badge--has-dot {
12361
+ padding-left: var(--badge-padding-leading-lg);
12463
12362
  }
12464
12363
 
12465
- .muka-button--ghost:disabled {
12466
- background-color: var(--button-color-ghost-background-disabled);
12467
- color: var(--button-color-ghost-foreground-disabled);
12468
- border-color: var(--button-color-ghost-border-disabled);
12469
- cursor: not-allowed;
12470
- opacity: 1;
12364
+ /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
12365
+ .muka-badge__icon {
12366
+ display: inline-flex;
12367
+ align-items: center;
12368
+ justify-content: center;
12369
+ flex-shrink: 0;
12471
12370
  }
12472
12371
 
12473
- /* Muted variant - same as ghost but resting foreground is subtle, darkens on interaction */
12474
- .muka-button--muted {
12475
- background-color: var(--button-color-muted-background-default);
12476
- color: var(--button-color-muted-foreground-default);
12477
- border: 1px solid var(--button-color-muted-border-default);
12372
+ .muka-badge--sm .muka-badge__icon {
12373
+ width: var(--icon-size-xs);
12374
+ height: var(--icon-size-xs);
12375
+ }
12376
+ .muka-badge--md .muka-badge__icon {
12377
+ width: var(--icon-size-sm);
12378
+ height: var(--icon-size-sm);
12379
+ }
12380
+ .muka-badge--lg .muka-badge__icon {
12381
+ width: var(--icon-size-default);
12382
+ height: var(--icon-size-default);
12478
12383
  }
12479
12384
 
12480
- .muka-button--muted:hover:not(:disabled) {
12481
- background-color: var(--button-color-muted-background-hover);
12482
- color: var(--button-color-muted-foreground-hover);
12483
- border-color: var(--button-color-muted-border-hover);
12385
+ /* Force the passed content (raw <svg> or an <Icon> wrapper) to the slot size,
12386
+ so callers don't have to size the icon to match each badge size. The
12387
+ .muka-icon selector is intentionally 2 classes deep to override .muka-icon--md. */
12388
+ .muka-badge__icon .muka-icon,
12389
+ .muka-badge__icon svg {
12390
+ width: 100%;
12391
+ height: 100%;
12484
12392
  }
12485
12393
 
12486
- .muka-button--muted:active:not(:disabled),
12487
- .muka-button--muted.muka-button--pressed:not(:disabled),
12488
- .muka-button--muted[data-state="open"]:not(:disabled),
12489
- .muka-button--muted[aria-pressed="true"]:not(:disabled) {
12490
- background-color: var(--button-color-muted-background-pressed);
12491
- color: var(--button-color-muted-foreground-pressed);
12492
- border-color: var(--button-color-muted-border-pressed);
12394
+ /* Icons inherit the badge's per-variant foreground color */
12395
+ .muka-badge .muka-icon {
12396
+ color: inherit;
12493
12397
  }
12494
12398
 
12495
- .muka-button--muted:disabled {
12496
- background-color: var(--button-color-muted-background-disabled);
12497
- color: var(--button-color-muted-foreground-disabled);
12498
- border-color: var(--button-color-muted-border-disabled);
12499
- cursor: not-allowed;
12500
- opacity: 1;
12399
+ /* Dot indicator */
12400
+ .muka-badge__dot {
12401
+ flex-shrink: 0;
12402
+ border-radius: var(--border-radius-full);
12501
12403
  }
12502
12404
 
12503
- /* General disabled state - fallback */
12504
- .muka-button:disabled {
12505
- cursor: not-allowed;
12506
- pointer-events: none;
12405
+ .muka-badge--sm .muka-badge__dot {
12406
+ width: var(--badge-size-dot-sm);
12407
+ height: var(--badge-size-dot-sm);
12507
12408
  }
12508
12409
 
12509
- /* Full width modifier */
12510
- .muka-button--full-width {
12511
- width: 100%;
12410
+ .muka-badge--md .muka-badge__dot {
12411
+ width: var(--badge-size-dot-md);
12412
+ height: var(--badge-size-dot-md);
12512
12413
  }
12513
12414
 
12514
- /* Icons - forced to the Figma per-size dimension regardless of the icon passed */
12515
- .muka-button__icon {
12516
- display: inline-flex;
12517
- align-items: center;
12518
- justify-content: center;
12519
- flex-shrink: 0;
12415
+ .muka-badge--lg .muka-badge__dot {
12416
+ width: var(--badge-size-dot-lg);
12417
+ height: var(--badge-size-dot-lg);
12520
12418
  }
12521
12419
 
12522
- /* Make the icon content (raw <svg> or a nested Icon span) fill the wrapper.
12523
- Scoped under .muka-button to outrank Icon.css's own `.muka-icon--{size}`
12524
- rule, so the button's size wins even when the icon hardcodes its own size. */
12525
- .muka-button .muka-button__icon > *,
12526
- .muka-button .muka-button__icon svg {
12527
- width: 100%;
12528
- height: 100%;
12529
- display: block;
12420
+ .muka-badge__label {
12421
+ flex: 0 1 auto;
12422
+ min-width: 0;
12423
+ overflow: hidden;
12424
+ text-overflow: ellipsis;
12425
+ /*
12426
+ * The badge sets a tight line-height for compact sizing, but the label's
12427
+ * `overflow: hidden` (needed for ellipsis) then clips glyph descenders (g, y, p). Give the
12428
+ * label its own roomier line-height so descenders render; vertical centering is unaffected
12429
+ * because the badge height is fixed and content is centered via align-items: center.
12430
+ */
12431
+ line-height: normal;
12530
12432
  }
12531
12433
 
12532
- .muka-button--sm .muka-button__icon {
12533
- width: var(--button-icon-sm);
12534
- height: var(--button-icon-sm);
12434
+ /* Neutral variant */
12435
+ .muka-badge--neutral {
12436
+ background-color: var(--color-surface-level1);
12437
+ color: var(--color-text-default-default);
12535
12438
  }
12536
12439
 
12537
- .muka-button--md .muka-button__icon {
12538
- width: var(--button-icon-md);
12539
- height: var(--button-icon-md);
12440
+ .muka-badge--neutral .muka-badge__dot {
12441
+ background-color: var(--color-text-subtle-default);
12540
12442
  }
12541
12443
 
12542
- .muka-button--lg .muka-button__icon {
12543
- width: var(--button-icon-lg);
12544
- height: var(--button-icon-lg);
12444
+ /* Info variant */
12445
+ .muka-badge--info {
12446
+ background-color: var(--color-state-info-background);
12447
+ color: var(--color-state-info-contrast);
12545
12448
  }
12546
12449
 
12547
- .muka-button--xl .muka-button__icon {
12548
- width: var(--button-icon-xl);
12549
- height: var(--button-icon-xl);
12450
+ .muka-badge--info .muka-badge__dot {
12451
+ background-color: var(--color-state-info-default);
12550
12452
  }
12551
12453
 
12552
- .muka-button__label {
12553
- display: inline-flex;
12554
- align-items: center;
12454
+ /* Success variant */
12455
+ .muka-badge--success {
12456
+ background-color: var(--color-state-success-background);
12457
+ color: var(--color-state-success-contrast);
12555
12458
  }
12556
12459
 
12557
- /* Icon-only buttons - square, sized to the button height per size */
12558
- .muka-button--icon-only {
12559
- padding: 0;
12460
+ .muka-badge--success .muka-badge__dot {
12461
+ background-color: var(--color-state-success-default);
12560
12462
  }
12561
12463
 
12562
- .muka-button--icon-only.muka-button--sm {
12563
- width: 32px;
12464
+ /* Warning variant */
12465
+ .muka-badge--warning {
12466
+ background-color: var(--color-state-warning-background);
12467
+ color: var(--color-state-warning-contrast);
12564
12468
  }
12565
12469
 
12566
- .muka-button--icon-only.muka-button--md {
12567
- width: 40px;
12470
+ .muka-badge--warning .muka-badge__dot {
12471
+ background-color: var(--color-state-warning-default);
12568
12472
  }
12569
12473
 
12570
- .muka-button--icon-only.muka-button--lg {
12571
- width: 48px;
12474
+ /* Error variant */
12475
+ .muka-badge--error {
12476
+ background-color: var(--color-state-error-background);
12477
+ color: var(--color-state-error-contrast);
12572
12478
  }
12573
12479
 
12574
- .muka-button--icon-only.muka-button--xl {
12575
- width: 64px;
12480
+ .muka-badge--error .muka-badge__dot {
12481
+ background-color: var(--color-state-error-default);
12576
12482
  }
12577
12483
 
12578
12484
 
@@ -13094,236 +13000,52 @@ button.muka-chat-photo-grid__tile:focus-visible {
13094
13000
  font-size: var(--text-body-sm-regular-fontSize);
13095
13001
  line-height: var(--text-body-sm-regular-lineHeight);
13096
13002
  }
13097
-
13098
- .muka-alert--lg .muka-alert__message {
13099
- font-family: var(--text-body-base-regular-fontFamily);
13100
- font-weight: var(--text-body-base-regular-fontWeight);
13101
- font-size: var(--text-body-base-regular-fontSize);
13102
- line-height: var(--text-body-base-regular-lineHeight);
13103
- }
13104
-
13105
- /* Action slot */
13106
- .muka-alert__action {
13107
- display: flex;
13108
- align-items: center;
13109
- flex-shrink: 0;
13110
- }
13111
-
13112
- /* Dismiss button - uses accent color per variant, aligned with icon row */
13113
- .muka-alert__dismiss {
13114
- display: flex;
13115
- align-items: center;
13116
- justify-content: center;
13117
- flex-shrink: 0;
13118
- align-self: flex-start;
13119
- width: 24px;
13120
- height: 24px;
13121
- padding: 0;
13122
- margin: 0 0 0 auto;
13123
- border: none;
13124
- background: transparent;
13125
- cursor: pointer;
13126
- border-radius: var(--border-radius-sm);
13127
- transition: opacity 0.15s ease, background-color 0.15s ease;
13128
- }
13129
-
13130
- .muka-alert__dismiss:hover {
13131
- opacity: 0.85;
13132
- background-color: rgba(0, 0, 0, 0.05);
13133
- }
13134
-
13135
- .muka-alert__dismiss:focus-visible {
13136
- outline: 2px solid var(--color-border-focus);
13137
- outline-offset: 2px;
13138
- }
13139
-
13140
- .muka-alert__dismiss svg {
13141
- width: 16px;
13142
- height: 16px;
13143
- }
13144
-
13145
-
13146
- /* Badge */
13147
- /* Badge Component Styles - Using Muka Design Tokens */
13148
-
13149
- .muka-badge {
13150
- display: inline-flex;
13151
- align-items: center;
13152
- border-radius: var(--border-radius-full);
13153
- white-space: nowrap;
13154
- user-select: none;
13155
- box-sizing: border-box;
13156
- }
13157
-
13158
- /*
13159
- * Sizes — height, gap, type, and default (label-edge) horizontal padding.
13160
- * Mirrors Chip so the two components share sizing, fonts, and spacing.
13161
- * Vertical centering is handled by the fixed height + align-items: center.
13162
- * The leading side gets a tighter padding when an icon/dot is present, via the
13163
- * --has-icon / --has-dot modifiers below.
13164
- */
13165
- .muka-badge--sm {
13166
- height: var(--badge-size-height-sm);
13167
- gap: var(--badge-gap-sm);
13168
- padding: 0 var(--badge-padding-label-sm);
13169
- font-family: var(--text-label-sm-regular-fontFamily);
13170
- font-weight: var(--text-label-sm-regular-fontWeight);
13171
- font-size: var(--text-label-sm-regular-fontSize);
13172
- line-height: var(--text-label-sm-regular-lineHeight);
13173
- }
13174
-
13175
- .muka-badge--md {
13176
- height: var(--badge-size-height-md);
13177
- gap: var(--badge-gap-md);
13178
- padding: 0 var(--badge-padding-label-md);
13179
- font-family: var(--text-label-md-regular-fontFamily);
13180
- font-weight: var(--text-label-md-regular-fontWeight);
13181
- font-size: var(--text-label-md-regular-fontSize);
13182
- line-height: var(--text-label-md-regular-lineHeight);
13183
- }
13184
-
13185
- .muka-badge--lg {
13186
- height: var(--badge-size-height-lg);
13187
- gap: var(--badge-gap-lg);
13188
- padding: 0 var(--badge-padding-label-lg);
13189
- font-family: var(--text-label-lg-regular-fontFamily);
13190
- font-weight: var(--text-label-lg-regular-fontWeight);
13191
- font-size: var(--text-label-lg-regular-fontSize);
13192
- line-height: var(--text-label-lg-regular-lineHeight);
13193
- }
13194
-
13195
- /* Tighter leading padding when a leading icon or dot is present */
13196
- .muka-badge--sm.muka-badge--has-icon,
13197
- .muka-badge--sm.muka-badge--has-dot {
13198
- padding-left: var(--badge-padding-leading-sm);
13199
- }
13200
- .muka-badge--md.muka-badge--has-icon,
13201
- .muka-badge--md.muka-badge--has-dot {
13202
- padding-left: var(--badge-padding-leading-md);
13203
- }
13204
- .muka-badge--lg.muka-badge--has-icon,
13205
- .muka-badge--lg.muka-badge--has-dot {
13206
- padding-left: var(--badge-padding-leading-lg);
13207
- }
13208
-
13209
- /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
13210
- .muka-badge__icon {
13211
- display: inline-flex;
13212
- align-items: center;
13213
- justify-content: center;
13214
- flex-shrink: 0;
13215
- }
13216
-
13217
- .muka-badge--sm .muka-badge__icon {
13218
- width: var(--icon-size-xs);
13219
- height: var(--icon-size-xs);
13220
- }
13221
- .muka-badge--md .muka-badge__icon {
13222
- width: var(--icon-size-sm);
13223
- height: var(--icon-size-sm);
13224
- }
13225
- .muka-badge--lg .muka-badge__icon {
13226
- width: var(--icon-size-default);
13227
- height: var(--icon-size-default);
13228
- }
13229
-
13230
- /* Force the passed content (raw <svg> or an <Icon> wrapper) to the slot size,
13231
- so callers don't have to size the icon to match each badge size. The
13232
- .muka-icon selector is intentionally 2 classes deep to override .muka-icon--md. */
13233
- .muka-badge__icon .muka-icon,
13234
- .muka-badge__icon svg {
13235
- width: 100%;
13236
- height: 100%;
13237
- }
13238
-
13239
- /* Icons inherit the badge's per-variant foreground color */
13240
- .muka-badge .muka-icon {
13241
- color: inherit;
13242
- }
13243
-
13244
- /* Dot indicator */
13245
- .muka-badge__dot {
13246
- flex-shrink: 0;
13247
- border-radius: var(--border-radius-full);
13248
- }
13249
-
13250
- .muka-badge--sm .muka-badge__dot {
13251
- width: var(--badge-size-dot-sm);
13252
- height: var(--badge-size-dot-sm);
13253
- }
13254
-
13255
- .muka-badge--md .muka-badge__dot {
13256
- width: var(--badge-size-dot-md);
13257
- height: var(--badge-size-dot-md);
13258
- }
13259
-
13260
- .muka-badge--lg .muka-badge__dot {
13261
- width: var(--badge-size-dot-lg);
13262
- height: var(--badge-size-dot-lg);
13263
- }
13264
-
13265
- .muka-badge__label {
13266
- flex: 0 1 auto;
13267
- min-width: 0;
13268
- overflow: hidden;
13269
- text-overflow: ellipsis;
13270
- /*
13271
- * The badge sets a tight line-height for compact sizing, but the label's
13272
- * `overflow: hidden` (needed for ellipsis) then clips glyph descenders (g, y, p). Give the
13273
- * label its own roomier line-height so descenders render; vertical centering is unaffected
13274
- * because the badge height is fixed and content is centered via align-items: center.
13275
- */
13276
- line-height: normal;
13277
- }
13278
-
13279
- /* Neutral variant */
13280
- .muka-badge--neutral {
13281
- background-color: var(--color-surface-level1);
13282
- color: var(--color-text-default-default);
13283
- }
13284
-
13285
- .muka-badge--neutral .muka-badge__dot {
13286
- background-color: var(--color-text-subtle-default);
13287
- }
13288
-
13289
- /* Info variant */
13290
- .muka-badge--info {
13291
- background-color: var(--color-state-info-background);
13292
- color: var(--color-state-info-contrast);
13293
- }
13294
-
13295
- .muka-badge--info .muka-badge__dot {
13296
- background-color: var(--color-state-info-default);
13297
- }
13298
-
13299
- /* Success variant */
13300
- .muka-badge--success {
13301
- background-color: var(--color-state-success-background);
13302
- color: var(--color-state-success-contrast);
13003
+
13004
+ .muka-alert--lg .muka-alert__message {
13005
+ font-family: var(--text-body-base-regular-fontFamily);
13006
+ font-weight: var(--text-body-base-regular-fontWeight);
13007
+ font-size: var(--text-body-base-regular-fontSize);
13008
+ line-height: var(--text-body-base-regular-lineHeight);
13303
13009
  }
13304
13010
 
13305
- .muka-badge--success .muka-badge__dot {
13306
- background-color: var(--color-state-success-default);
13011
+ /* Action slot */
13012
+ .muka-alert__action {
13013
+ display: flex;
13014
+ align-items: center;
13015
+ flex-shrink: 0;
13307
13016
  }
13308
13017
 
13309
- /* Warning variant */
13310
- .muka-badge--warning {
13311
- background-color: var(--color-state-warning-background);
13312
- color: var(--color-state-warning-contrast);
13018
+ /* Dismiss button - uses accent color per variant, aligned with icon row */
13019
+ .muka-alert__dismiss {
13020
+ display: flex;
13021
+ align-items: center;
13022
+ justify-content: center;
13023
+ flex-shrink: 0;
13024
+ align-self: flex-start;
13025
+ width: 24px;
13026
+ height: 24px;
13027
+ padding: 0;
13028
+ margin: 0 0 0 auto;
13029
+ border: none;
13030
+ background: transparent;
13031
+ cursor: pointer;
13032
+ border-radius: var(--border-radius-sm);
13033
+ transition: opacity 0.15s ease, background-color 0.15s ease;
13313
13034
  }
13314
13035
 
13315
- .muka-badge--warning .muka-badge__dot {
13316
- background-color: var(--color-state-warning-default);
13036
+ .muka-alert__dismiss:hover {
13037
+ opacity: 0.85;
13038
+ background-color: rgba(0, 0, 0, 0.05);
13317
13039
  }
13318
13040
 
13319
- /* Error variant */
13320
- .muka-badge--error {
13321
- background-color: var(--color-state-error-background);
13322
- color: var(--color-state-error-contrast);
13041
+ .muka-alert__dismiss:focus-visible {
13042
+ outline: 2px solid var(--color-border-focus);
13043
+ outline-offset: 2px;
13323
13044
  }
13324
13045
 
13325
- .muka-badge--error .muka-badge__dot {
13326
- background-color: var(--color-state-error-default);
13046
+ .muka-alert__dismiss svg {
13047
+ width: 16px;
13048
+ height: 16px;
13327
13049
  }
13328
13050
 
13329
13051
 
@@ -13496,6 +13218,148 @@ button.muka-chat-photo-grid__tile:focus-visible {
13496
13218
  }
13497
13219
 
13498
13220
 
13221
+ /* ActionSheet */
13222
+ /* ActionSheet Component Styles */
13223
+
13224
+ .muka-action-sheet__inner {
13225
+ display: flex;
13226
+ flex-direction: column;
13227
+ padding: 0 var(--spacing-4) var(--spacing-3) var(--spacing-4);
13228
+ gap: var(--spacing-3);
13229
+ }
13230
+
13231
+ /* ─── Header ──────────────────────────────────────────── */
13232
+
13233
+ .muka-action-sheet__header {
13234
+ display: flex;
13235
+ flex-direction: column;
13236
+ align-items: center;
13237
+ gap: var(--spacing-1);
13238
+ padding: var(--spacing-2) 0 var(--spacing-3);
13239
+ text-align: center;
13240
+ }
13241
+
13242
+ .muka-action-sheet__title {
13243
+ margin: 0;
13244
+ color: var(--color-text-default-default);
13245
+ font-family: var(--text-label-md-semibold-fontFamily);
13246
+ font-weight: var(--text-label-md-semibold-fontWeight);
13247
+ font-size: var(--text-label-md-semibold-fontSize);
13248
+ line-height: var(--text-label-md-semibold-lineHeight);
13249
+ }
13250
+
13251
+ .muka-action-sheet__description {
13252
+ margin: 0;
13253
+ color: var(--color-text-subtle-default);
13254
+ font-family: var(--text-body-sm-regular-fontFamily);
13255
+ font-weight: var(--text-body-sm-regular-fontWeight);
13256
+ font-size: var(--text-body-sm-regular-fontSize);
13257
+ line-height: var(--text-body-sm-regular-lineHeight);
13258
+ }
13259
+
13260
+ /* ─── Actions group ───────────────────────────────────── */
13261
+
13262
+ .muka-action-sheet__actions {
13263
+ display: flex;
13264
+ flex-direction: column;
13265
+ background-color: var(--color-surface-level1);
13266
+ border-radius: var(--radius-md);
13267
+ overflow: hidden;
13268
+ }
13269
+
13270
+ .muka-action-sheet__item {
13271
+ display: flex;
13272
+ align-items: center;
13273
+ gap: var(--spacing-3);
13274
+ padding: var(--spacing-3) var(--spacing-4);
13275
+ background: none;
13276
+ border: none;
13277
+ cursor: pointer;
13278
+ text-align: left;
13279
+ color: var(--color-text-default-default);
13280
+ font-family: var(--text-body-md-regular-fontFamily);
13281
+ font-weight: var(--text-body-md-regular-fontWeight);
13282
+ font-size: var(--text-body-md-regular-fontSize);
13283
+ line-height: var(--text-body-md-regular-lineHeight);
13284
+ -webkit-tap-highlight-color: transparent;
13285
+ transition: background-color 0.12s ease;
13286
+ }
13287
+
13288
+ .muka-action-sheet__item + .muka-action-sheet__item {
13289
+ border-top: var(--border-width-regular) solid var(--color-border-default);
13290
+ }
13291
+
13292
+ .muka-action-sheet__item:hover:not(:disabled) {
13293
+ background-color: var(--color-surface-level2);
13294
+ }
13295
+
13296
+ .muka-action-sheet__item:active:not(:disabled) {
13297
+ background-color: var(--color-surface-level3);
13298
+ }
13299
+
13300
+ .muka-action-sheet__item:focus-visible {
13301
+ outline: 2px solid var(--color-action-default);
13302
+ outline-offset: -2px;
13303
+ }
13304
+
13305
+ .muka-action-sheet__item--destructive {
13306
+ color: var(--color-state-error-default);
13307
+ }
13308
+
13309
+ .muka-action-sheet__item--disabled,
13310
+ .muka-action-sheet__item:disabled {
13311
+ opacity: 0.5;
13312
+ cursor: not-allowed;
13313
+ }
13314
+
13315
+ .muka-action-sheet__item-icon {
13316
+ display: inline-flex;
13317
+ align-items: center;
13318
+ justify-content: center;
13319
+ width: 24px;
13320
+ height: 24px;
13321
+ flex-shrink: 0;
13322
+ }
13323
+
13324
+ .muka-action-sheet__item-icon svg {
13325
+ width: 100%;
13326
+ height: 100%;
13327
+ }
13328
+
13329
+ .muka-action-sheet__item-label {
13330
+ flex: 1;
13331
+ }
13332
+
13333
+ /* ─── Cancel button (separate at bottom) ──────────────── */
13334
+
13335
+ .muka-action-sheet__cancel {
13336
+ display: flex;
13337
+ align-items: center;
13338
+ justify-content: center;
13339
+ padding: var(--spacing-3) var(--spacing-4);
13340
+ background-color: var(--color-surface-level1);
13341
+ border: none;
13342
+ border-radius: var(--radius-md);
13343
+ cursor: pointer;
13344
+ color: var(--color-text-default-default);
13345
+ font-family: var(--text-label-md-semibold-fontFamily);
13346
+ font-weight: var(--text-label-md-semibold-fontWeight);
13347
+ font-size: var(--text-label-md-semibold-fontSize);
13348
+ line-height: var(--text-label-md-semibold-lineHeight);
13349
+ -webkit-tap-highlight-color: transparent;
13350
+ transition: background-color 0.12s ease;
13351
+ }
13352
+
13353
+ .muka-action-sheet__cancel:hover {
13354
+ background-color: var(--color-surface-level2);
13355
+ }
13356
+
13357
+ .muka-action-sheet__cancel:focus-visible {
13358
+ outline: 2px solid var(--color-action-default);
13359
+ outline-offset: 2px;
13360
+ }
13361
+
13362
+
13499
13363
  /* Accordion */
13500
13364
  /* Accordion Component Styles */
13501
13365
 
@@ -13618,153 +13482,285 @@ button.muka-chat-photo-grid__tile:focus-visible {
13618
13482
  overflow: hidden;
13619
13483
  }
13620
13484
 
13621
- .muka-accordion--contained .muka-accordion__item {
13622
- background-color: var(--color-surface-level3);
13485
+ .muka-accordion--contained .muka-accordion__item {
13486
+ background-color: var(--color-surface-level3);
13487
+ }
13488
+
13489
+ .muka-accordion--contained .muka-accordion__item:last-child {
13490
+ border-bottom: none;
13491
+ }
13492
+
13493
+
13494
+ /* Sheet */
13495
+ /* Sheet Component Styles */
13496
+
13497
+ /* ─── Backdrop ────────────────────────────────────────── */
13498
+
13499
+ .muka-sheet__overlay {
13500
+ position: fixed;
13501
+ inset: 0;
13502
+ background-color: var(--color-surface-backdrop);
13503
+ z-index: 50;
13504
+ }
13505
+
13506
+ /* ─── Surface ─────────────────────────────────────────── */
13507
+
13508
+ .muka-sheet {
13509
+ position: fixed;
13510
+ left: 0;
13511
+ right: 0;
13512
+ bottom: 0;
13513
+ z-index: 51;
13514
+
13515
+ display: flex;
13516
+ flex-direction: column;
13517
+
13518
+ max-height: 96dvh;
13519
+
13520
+ background-color: var(--color-surface-level3);
13521
+ border-top-left-radius: var(--radius-lg);
13522
+ border-top-right-radius: var(--radius-lg);
13523
+ box-shadow: var(--shadow-level5);
13524
+
13525
+ outline: none;
13526
+ }
13527
+
13528
+ /* Safe-area bottom inset for the iPhone home indicator. */
13529
+ .muka-sheet:not(.muka-sheet--no-safe-area) {
13530
+ padding-bottom: env(safe-area-inset-bottom);
13531
+ }
13532
+
13533
+ /* ─── Drag handle ─────────────────────────────────────── */
13534
+
13535
+ .muka-sheet__handle-container {
13536
+ display: flex;
13537
+ justify-content: center;
13538
+ flex-shrink: 0;
13539
+ padding: var(--spacing-3) 0;
13540
+ }
13541
+
13542
+ .muka-sheet__handle {
13543
+ width: var(--dialog-drag-handle-width);
13544
+ height: var(--dialog-drag-handle-height);
13545
+ background-color: var(--dialog-drag-handle-color);
13546
+ border-radius: var(--dialog-drag-handle-radius);
13547
+ }
13548
+
13549
+ /* ─── Body (scrollable) ───────────────────────────────── */
13550
+
13551
+ .muka-sheet__body {
13552
+ flex: 1 1 0%;
13553
+ min-height: 0;
13554
+ overflow-y: auto;
13555
+ -webkit-overflow-scrolling: touch;
13556
+ overscroll-behavior: contain;
13623
13557
  }
13624
13558
 
13625
- .muka-accordion--contained .muka-accordion__item:last-child {
13626
- border-bottom: none;
13559
+ /* ─── Visually-hidden title (a11y) ────────────────────── */
13560
+
13561
+ .muka-sheet__sr-title {
13562
+ position: absolute;
13563
+ width: 1px;
13564
+ height: 1px;
13565
+ padding: 0;
13566
+ margin: -1px;
13567
+ overflow: hidden;
13568
+ clip: rect(0, 0, 0, 0);
13569
+ white-space: nowrap;
13570
+ border: 0;
13627
13571
  }
13628
13572
 
13629
13573
 
13630
- /* ActionSheet */
13631
- /* ActionSheet Component Styles */
13574
+ /* Select */
13575
+ /* Select Component Styles - Aligned with Input for consistency */
13632
13576
 
13633
- .muka-action-sheet__inner {
13634
- display: flex;
13577
+ .muka-select {
13578
+ display: inline-flex;
13635
13579
  flex-direction: column;
13636
- padding: 0 var(--spacing-4) var(--spacing-3) var(--spacing-4);
13637
- gap: var(--spacing-3);
13580
+ gap: var(--spacing-2);
13638
13581
  }
13639
13582
 
13640
- /* ─── Header ──────────────────────────────────────────── */
13641
-
13642
- .muka-action-sheet__header {
13643
- display: flex;
13644
- flex-direction: column;
13645
- align-items: center;
13646
- gap: var(--spacing-1);
13647
- padding: var(--spacing-2) 0 var(--spacing-3);
13648
- text-align: center;
13583
+ .muka-select--full-width {
13584
+ width: 100%;
13649
13585
  }
13650
13586
 
13651
- .muka-action-sheet__title {
13652
- margin: 0;
13587
+ /* Label */
13588
+ .muka-select__label {
13653
13589
  color: var(--color-text-default-default);
13590
+ cursor: pointer;
13591
+ }
13592
+
13593
+ .muka-select__label--sm {
13594
+ font-family: var(--text-label-sm-semibold-fontFamily);
13595
+ font-weight: var(--text-label-sm-semibold-fontWeight);
13596
+ font-size: var(--text-label-sm-semibold-fontSize);
13597
+ line-height: var(--text-label-sm-semibold-lineHeight);
13598
+ }
13599
+
13600
+ .muka-select__label--md {
13654
13601
  font-family: var(--text-label-md-semibold-fontFamily);
13655
13602
  font-weight: var(--text-label-md-semibold-fontWeight);
13656
13603
  font-size: var(--text-label-md-semibold-fontSize);
13657
13604
  line-height: var(--text-label-md-semibold-lineHeight);
13658
13605
  }
13659
13606
 
13660
- .muka-action-sheet__description {
13661
- margin: 0;
13662
- color: var(--color-text-subtle-default);
13663
- font-family: var(--text-body-sm-regular-fontFamily);
13664
- font-weight: var(--text-body-sm-regular-fontWeight);
13665
- font-size: var(--text-body-sm-regular-fontSize);
13666
- line-height: var(--text-body-sm-regular-lineHeight);
13607
+ .muka-select__label--lg {
13608
+ font-family: var(--text-label-lg-semibold-fontFamily);
13609
+ font-weight: var(--text-label-lg-semibold-fontWeight);
13610
+ font-size: var(--text-label-lg-semibold-fontSize);
13611
+ line-height: var(--text-label-lg-semibold-lineHeight);
13667
13612
  }
13668
13613
 
13669
- /* ─── Actions group ───────────────────────────────────── */
13614
+ .muka-select__required {
13615
+ color: var(--color-state-error-foreground);
13616
+ }
13670
13617
 
13671
- .muka-action-sheet__actions {
13672
- display: flex;
13673
- flex-direction: column;
13674
- background-color: var(--color-surface-level1);
13675
- border-radius: var(--radius-md);
13676
- overflow: hidden;
13618
+ .muka-select__label--sm + .muka-select__field--disabled,
13619
+ .muka-select__label--md + .muka-select__field--disabled,
13620
+ .muka-select__label--lg + .muka-select__field--disabled {
13621
+ cursor: not-allowed;
13677
13622
  }
13678
13623
 
13679
- .muka-action-sheet__item {
13624
+ /* Field container — same as Input: 1px border, radius, padding, inset shadow */
13625
+ .muka-select__field {
13680
13626
  display: flex;
13681
13627
  align-items: center;
13682
- gap: var(--spacing-3);
13683
- padding: var(--spacing-3) var(--spacing-4);
13684
- background: none;
13685
- border: none;
13628
+ gap: var(--spacing-2);
13629
+ position: relative;
13630
+ background-color: var(--input-field-color-default-background);
13631
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
13632
+ border-radius: var(--input-field-radius-md);
13633
+ padding: var(--input-field-padding-y) var(--input-field-padding-x);
13634
+ transition: border-color 0.2s ease, background-color 0.2s ease;
13686
13635
  cursor: pointer;
13687
- text-align: left;
13688
- color: var(--color-text-default-default);
13689
- font-family: var(--text-body-md-regular-fontFamily);
13690
- font-weight: var(--text-body-md-regular-fontWeight);
13691
- font-size: var(--text-body-md-regular-fontSize);
13692
- line-height: var(--text-body-md-regular-lineHeight);
13693
- -webkit-tap-highlight-color: transparent;
13694
- transition: background-color 0.12s ease;
13636
+ box-sizing: border-box;
13695
13637
  }
13696
13638
 
13697
- .muka-action-sheet__item + .muka-action-sheet__item {
13698
- border-top: var(--border-width-regular) solid var(--color-border-default);
13639
+ /* Inset shadow — same as Input (single subtle line) */
13640
+ .muka-select__field::after {
13641
+ content: '';
13642
+ position: absolute;
13643
+ inset: 0;
13644
+ border-radius: inherit;
13645
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.08);
13646
+ pointer-events: none;
13699
13647
  }
13700
13648
 
13701
- .muka-action-sheet__item:hover:not(:disabled) {
13702
- background-color: var(--color-surface-level2);
13649
+ /* Size variants — same radius/height as Input */
13650
+ .muka-select__field--sm {
13651
+ min-height: var(--input-field-height-sm);
13652
+ border-radius: var(--input-field-radius-sm);
13703
13653
  }
13704
13654
 
13705
- .muka-action-sheet__item:active:not(:disabled) {
13706
- background-color: var(--color-surface-level3);
13655
+ .muka-select__field--md {
13656
+ min-height: var(--input-field-height-default);
13657
+ border-radius: var(--input-field-radius-md);
13707
13658
  }
13708
13659
 
13709
- .muka-action-sheet__item:focus-visible {
13710
- outline: 2px solid var(--color-action-default);
13711
- outline-offset: -2px;
13660
+ .muka-select__field--lg {
13661
+ min-height: var(--input-field-height-lg);
13662
+ border-radius: var(--input-field-radius-lg);
13712
13663
  }
13713
13664
 
13714
- .muka-action-sheet__item--destructive {
13715
- color: var(--color-state-error-default);
13665
+ /* Hover — no visual change (same as Input) */
13666
+
13667
+ /* Focus (active) — same as Input: 2px border, padding compensation */
13668
+ .muka-select__field--focused:not(.muka-select__field--disabled) {
13669
+ border-width: var(--border-width-bold);
13670
+ border-color: var(--input-field-color-focus-border);
13671
+ background-color: var(--input-field-color-focus-background);
13672
+ padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
13716
13673
  }
13717
13674
 
13718
- .muka-action-sheet__item--disabled,
13719
- .muka-action-sheet__item:disabled {
13720
- opacity: 0.5;
13675
+ /* Error — same as Input: 2px border, padding compensation */
13676
+ .muka-select__field--error:not(.muka-select__field--disabled) {
13677
+ border-width: var(--border-width-bold);
13678
+ border-color: var(--input-field-color-error-border);
13679
+ background-color: var(--input-field-color-error-background);
13680
+ padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
13681
+ }
13682
+
13683
+ /* Disabled — same as Input */
13684
+ .muka-select__field--disabled {
13685
+ background-color: var(--input-field-color-disabled-background);
13686
+ border-color: var(--input-field-color-disabled-border);
13721
13687
  cursor: not-allowed;
13722
13688
  }
13723
13689
 
13724
- .muka-action-sheet__item-icon {
13725
- display: inline-flex;
13726
- align-items: center;
13727
- justify-content: center;
13728
- width: 24px;
13729
- height: 24px;
13730
- flex-shrink: 0;
13690
+ .muka-select__field--disabled::after {
13691
+ display: none;
13731
13692
  }
13732
13693
 
13733
- .muka-action-sheet__item-icon svg {
13694
+ /* Native select — padding on field so native has 0 + right space for chevron */
13695
+ .muka-select__native {
13696
+ appearance: none;
13697
+ -webkit-appearance: none;
13698
+ flex: 1;
13699
+ border: none;
13700
+ outline: none;
13701
+ background: transparent;
13702
+ color: var(--input-field-color-default-foreground);
13703
+ font-family: var(--text-input-md-fontFamily);
13704
+ font-weight: var(--text-input-md-fontWeight);
13705
+ font-size: var(--text-input-md-fontSize);
13706
+ line-height: var(--text-input-md-lineHeight);
13707
+ padding: 0;
13708
+ padding-right: calc(var(--input-field-padding-x) + 1.5rem);
13709
+ cursor: pointer;
13710
+ min-width: 0;
13734
13711
  width: 100%;
13735
- height: 100%;
13736
13712
  }
13737
13713
 
13738
- .muka-action-sheet__item-label {
13739
- flex: 1;
13714
+ .muka-select__field--sm .muka-select__native {
13715
+ font-family: var(--text-input-sm-fontFamily);
13716
+ font-weight: var(--text-input-sm-fontWeight);
13717
+ font-size: var(--text-input-sm-fontSize);
13718
+ line-height: var(--text-input-sm-lineHeight);
13740
13719
  }
13741
13720
 
13742
- /* ─── Cancel button (separate at bottom) ──────────────── */
13721
+ .muka-select__field--lg .muka-select__native {
13722
+ font-family: var(--text-input-lg-fontFamily);
13723
+ font-weight: var(--text-input-lg-fontWeight);
13724
+ font-size: var(--text-input-lg-fontSize);
13725
+ line-height: var(--text-input-lg-lineHeight);
13726
+ }
13743
13727
 
13744
- .muka-action-sheet__cancel {
13745
- display: flex;
13728
+ .muka-select__field--disabled .muka-select__native {
13729
+ color: var(--input-field-color-disabled-foreground);
13730
+ cursor: not-allowed;
13731
+ }
13732
+
13733
+ /* Chevron — aligned with field padding */
13734
+ .muka-select__chevron {
13735
+ display: inline-flex;
13746
13736
  align-items: center;
13747
- justify-content: center;
13748
- padding: var(--spacing-3) var(--spacing-4);
13749
- background-color: var(--color-surface-level1);
13750
- border: none;
13751
- border-radius: var(--radius-md);
13752
- cursor: pointer;
13753
- color: var(--color-text-default-default);
13754
- font-family: var(--text-label-md-semibold-fontFamily);
13755
- font-weight: var(--text-label-md-semibold-fontWeight);
13756
- font-size: var(--text-label-md-semibold-fontSize);
13757
- line-height: var(--text-label-md-semibold-lineHeight);
13758
- -webkit-tap-highlight-color: transparent;
13759
- transition: background-color 0.12s ease;
13737
+ position: absolute;
13738
+ right: var(--input-field-padding-x);
13739
+ pointer-events: none;
13740
+ color: var(--color-text-subtle-default);
13760
13741
  }
13761
13742
 
13762
- .muka-action-sheet__cancel:hover {
13763
- background-color: var(--color-surface-level2);
13743
+ .muka-select__field--disabled .muka-select__chevron {
13744
+ color: var(--input-field-color-disabled-foreground);
13764
13745
  }
13765
13746
 
13766
- .muka-action-sheet__cancel:focus-visible {
13767
- outline: 2px solid var(--color-action-default);
13768
- outline-offset: 2px;
13747
+ /* Helper text — same as Input */
13748
+ .muka-select__helper {
13749
+ font-family: var(--text-label-sm-regular-fontFamily);
13750
+ font-weight: var(--text-label-sm-regular-fontWeight);
13751
+ font-size: var(--text-label-sm-regular-fontSize);
13752
+ line-height: var(--text-label-sm-regular-lineHeight);
13753
+ color: var(--color-text-subtle-default);
13754
+ margin: 0;
13755
+ }
13756
+
13757
+ /* Error message — same as Input */
13758
+ .muka-select__error {
13759
+ font-family: var(--text-label-sm-regular-fontFamily);
13760
+ font-weight: var(--text-label-sm-regular-fontWeight);
13761
+ font-size: var(--text-label-sm-regular-fontSize);
13762
+ line-height: var(--text-label-sm-regular-lineHeight);
13763
+ color: var(--color-state-error-foreground);
13764
+ margin: 0;
13769
13765
  }
13770
13766