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