@revikornmann/muka-ui 0.29.0 → 0.30.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.
Files changed (44) hide show
  1. package/dist/cjs/components/Alert/Alert.css +8 -0
  2. package/dist/cjs/components/Alert/Alert.js.map +1 -1
  3. package/dist/cjs/components/ChatComposer/ChatComposer.css +121 -1
  4. package/dist/cjs/components/ChatComposer/ChatComposer.js +148 -21
  5. package/dist/cjs/components/ChatComposer/ChatComposer.js.map +1 -1
  6. package/dist/cjs/components/ChatComposer/index.js.map +1 -1
  7. package/dist/cjs/components/PhotoUploader/PhotoUploader.js.map +1 -1
  8. package/dist/cjs/components/ProgressTracker/ProgressTracker.css +23 -5
  9. package/dist/cjs/components/ProgressTracker/ProgressTracker.js +8 -6
  10. package/dist/cjs/components/ProgressTracker/ProgressTracker.js.map +1 -1
  11. package/dist/cjs/components/index.js.map +1 -1
  12. package/dist/esm/components/Alert/Alert.css +8 -0
  13. package/dist/esm/components/Alert/Alert.js.map +1 -1
  14. package/dist/esm/components/ChatComposer/ChatComposer.css +121 -1
  15. package/dist/esm/components/ChatComposer/ChatComposer.js +150 -23
  16. package/dist/esm/components/ChatComposer/ChatComposer.js.map +1 -1
  17. package/dist/esm/components/ChatComposer/index.js +1 -1
  18. package/dist/esm/components/ChatComposer/index.js.map +1 -1
  19. package/dist/esm/components/PhotoUploader/PhotoUploader.js.map +1 -1
  20. package/dist/esm/components/ProgressTracker/ProgressTracker.css +23 -5
  21. package/dist/esm/components/ProgressTracker/ProgressTracker.js +8 -6
  22. package/dist/esm/components/ProgressTracker/ProgressTracker.js.map +1 -1
  23. package/dist/esm/components/index.js +1 -1
  24. package/dist/esm/components/index.js.map +1 -1
  25. package/dist/styles/components/Alert.css +8 -0
  26. package/dist/styles/components/ChatComposer.css +121 -1
  27. package/dist/styles/components/ProgressTracker.css +23 -5
  28. package/dist/styles/index.css +2302 -2156
  29. package/dist/styles/muka-dark.css +2302 -2156
  30. package/dist/styles/muka-light.css +2302 -2156
  31. package/dist/styles/wireframe-dark.css +2302 -2156
  32. package/dist/styles/wireframe-light.css +2302 -2156
  33. package/dist/types/components/Alert/Alert.d.ts +1 -1
  34. package/dist/types/components/Alert/Alert.d.ts.map +1 -1
  35. package/dist/types/components/ChatComposer/ChatComposer.d.ts +83 -12
  36. package/dist/types/components/ChatComposer/ChatComposer.d.ts.map +1 -1
  37. package/dist/types/components/ChatComposer/index.d.ts +1 -1
  38. package/dist/types/components/ChatComposer/index.d.ts.map +1 -1
  39. package/dist/types/components/PhotoUploader/PhotoUploader.d.ts.map +1 -1
  40. package/dist/types/components/ProgressTracker/ProgressTracker.d.ts +10 -4
  41. package/dist/types/components/ProgressTracker/ProgressTracker.d.ts.map +1 -1
  42. package/dist/types/components/index.d.ts +1 -1
  43. package/dist/types/components/index.d.ts.map +1 -1
  44. package/package.json +1 -1
@@ -5231,6 +5231,81 @@ body {
5231
5231
  }
5232
5232
 
5233
5233
 
5234
+ /* Skeleton */
5235
+ /* Skeleton Component Styles */
5236
+
5237
+ .muka-skeleton {
5238
+ background-color: var(--color-surface-level1);
5239
+ display: block;
5240
+ }
5241
+
5242
+ /* Variants */
5243
+ .muka-skeleton--text {
5244
+ height: 1em;
5245
+ border-radius: var(--radius-md);
5246
+ width: 100%;
5247
+ }
5248
+
5249
+ .muka-skeleton--circular {
5250
+ width: 2.5rem;
5251
+ height: 2.5rem;
5252
+ border-radius: var(--radius-full);
5253
+ }
5254
+
5255
+ .muka-skeleton--rectangular {
5256
+ height: 7.5rem;
5257
+ border-radius: var(--radius-md);
5258
+ width: 100%;
5259
+ }
5260
+
5261
+ /* Last line in multi-line text is shorter */
5262
+ .muka-skeleton--last-line {
5263
+ width: 80%;
5264
+ }
5265
+
5266
+ /* Lines container */
5267
+ .muka-skeleton__lines {
5268
+ display: flex;
5269
+ flex-direction: column;
5270
+ gap: var(--spacing-2);
5271
+ }
5272
+
5273
+ /* Shimmer animation */
5274
+ @keyframes muka-skeleton-shimmer {
5275
+ 0% {
5276
+ background-position: -200% 0;
5277
+ }
5278
+ 100% {
5279
+ background-position: 200% 0;
5280
+ }
5281
+ }
5282
+
5283
+ .muka-skeleton--shimmer {
5284
+ background: linear-gradient(
5285
+ 90deg,
5286
+ var(--color-surface-level1) 25%,
5287
+ var(--color-surface-level2) 50%,
5288
+ var(--color-surface-level1) 75%
5289
+ );
5290
+ background-size: 200% 100%;
5291
+ animation: muka-skeleton-shimmer 1.5s ease-in-out infinite;
5292
+ }
5293
+
5294
+ /* Pulse animation */
5295
+ @keyframes muka-skeleton-pulse {
5296
+ 0%, 100% {
5297
+ opacity: 1;
5298
+ }
5299
+ 50% {
5300
+ opacity: 0.4;
5301
+ }
5302
+ }
5303
+
5304
+ .muka-skeleton--pulse {
5305
+ animation: muka-skeleton-pulse 1.5s ease-in-out infinite;
5306
+ }
5307
+
5308
+
5234
5309
  /* Sheet */
5235
5310
  /* Sheet Component Styles */
5236
5311
 
@@ -5311,81 +5386,6 @@ body {
5311
5386
  }
5312
5387
 
5313
5388
 
5314
- /* Skeleton */
5315
- /* Skeleton Component Styles */
5316
-
5317
- .muka-skeleton {
5318
- background-color: var(--color-surface-level1);
5319
- display: block;
5320
- }
5321
-
5322
- /* Variants */
5323
- .muka-skeleton--text {
5324
- height: 1em;
5325
- border-radius: var(--radius-md);
5326
- width: 100%;
5327
- }
5328
-
5329
- .muka-skeleton--circular {
5330
- width: 2.5rem;
5331
- height: 2.5rem;
5332
- border-radius: var(--radius-full);
5333
- }
5334
-
5335
- .muka-skeleton--rectangular {
5336
- height: 7.5rem;
5337
- border-radius: var(--radius-md);
5338
- width: 100%;
5339
- }
5340
-
5341
- /* Last line in multi-line text is shorter */
5342
- .muka-skeleton--last-line {
5343
- width: 80%;
5344
- }
5345
-
5346
- /* Lines container */
5347
- .muka-skeleton__lines {
5348
- display: flex;
5349
- flex-direction: column;
5350
- gap: var(--spacing-2);
5351
- }
5352
-
5353
- /* Shimmer animation */
5354
- @keyframes muka-skeleton-shimmer {
5355
- 0% {
5356
- background-position: -200% 0;
5357
- }
5358
- 100% {
5359
- background-position: 200% 0;
5360
- }
5361
- }
5362
-
5363
- .muka-skeleton--shimmer {
5364
- background: linear-gradient(
5365
- 90deg,
5366
- var(--color-surface-level1) 25%,
5367
- var(--color-surface-level2) 50%,
5368
- var(--color-surface-level1) 75%
5369
- );
5370
- background-size: 200% 100%;
5371
- animation: muka-skeleton-shimmer 1.5s ease-in-out infinite;
5372
- }
5373
-
5374
- /* Pulse animation */
5375
- @keyframes muka-skeleton-pulse {
5376
- 0%, 100% {
5377
- opacity: 1;
5378
- }
5379
- 50% {
5380
- opacity: 0.4;
5381
- }
5382
- }
5383
-
5384
- .muka-skeleton--pulse {
5385
- animation: muka-skeleton-pulse 1.5s ease-in-out infinite;
5386
- }
5387
-
5388
-
5389
5389
  /* Select */
5390
5390
  /* Select Component Styles - Aligned with Input for consistency */
5391
5391
 
@@ -6748,17 +6748,26 @@ body {
6748
6748
  color: var(--color-text-default-inverse);
6749
6749
  }
6750
6750
 
6751
- .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--past {
6751
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--interactive {
6752
6752
  cursor: pointer;
6753
6753
  }
6754
6754
 
6755
- .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--past:hover {
6755
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--interactive:focus-visible {
6756
+ outline: 2px solid var(--color-border-focus);
6757
+ outline-offset: 2px;
6758
+ }
6759
+
6760
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--past.muka-progress-tracker__indicator--interactive:hover {
6756
6761
  background-color: var(--alias-color-accent-pressed);
6757
6762
  }
6758
6763
 
6759
- .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--past:focus-visible {
6760
- outline: 2px solid var(--color-border-focus);
6761
- outline-offset: 2px;
6764
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--current.muka-progress-tracker__indicator--interactive:hover {
6765
+ background-color: var(--alias-color-accent-hover);
6766
+ }
6767
+
6768
+ /* Upcoming (clickableSteps="all"): a 4px halo, the vertical hover's 40px circle */
6769
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--upcoming.muka-progress-tracker__indicator--interactive:hover {
6770
+ box-shadow: 0 0 0 4px var(--color-surface-level1);
6762
6771
  }
6763
6772
 
6764
6773
  /* Current: accent default circle with white number */
@@ -6831,6 +6840,15 @@ body {
6831
6840
  font-weight: var(--text-label-sm-bold-fontWeight);
6832
6841
  }
6833
6842
 
6843
+ /* Selected step: a pill behind the label (horizontal), matching the vertical
6844
+ selected pill's surface. The label stays centred under its indicator. */
6845
+ .muka-progress-tracker--horizontal .muka-progress-tracker__step[data-selected='true'] .muka-progress-tracker__label {
6846
+ padding: 0 var(--spacing-2);
6847
+ border-radius: var(--border-radius-full);
6848
+ background-color: var(--color-surface-level1);
6849
+ max-width: calc(120px + 2 * var(--spacing-2));
6850
+ }
6851
+
6834
6852
  /* ─── Connectors layer (behind indicators) — horizontal ─── */
6835
6853
  .muka-progress-tracker--horizontal .muka-progress-tracker__connectors {
6836
6854
  display: flex;
@@ -7362,242 +7380,70 @@ body {
7362
7380
  }
7363
7381
 
7364
7382
 
7365
- /* Progress */
7366
- /* Progress Component Styles - Using Muka Design Tokens */
7367
-
7368
- /* ========================================
7369
- BAR VARIANT
7370
- ======================================== */
7383
+ /* ProfileBadge */
7384
+ /* ProfileBadge Component Styles - Using Muka Design Tokens */
7371
7385
 
7372
- .muka-progress--bar {
7373
- display: flex;
7386
+ .muka-profile-badge {
7387
+ display: inline-flex;
7374
7388
  align-items: center;
7375
- gap: var(--spacing-2);
7376
- width: 100%;
7389
+ font-family: var(--text-body-base-regular-fontFamily);
7377
7390
  }
7378
7391
 
7379
- .muka-progress--bar .muka-progress__track {
7380
- flex: 1;
7381
- background-color: var(--color-surface-level1);
7382
- border-radius: var(--border-radius-full);
7383
- overflow: hidden;
7392
+ /* Size variants */
7393
+ .muka-profile-badge--lg {
7394
+ gap: var(--spacing-4); /* 16px */
7384
7395
  }
7385
7396
 
7386
- .muka-progress--bar.muka-progress--sm .muka-progress__track {
7387
- height: var(--progress-size-bar-height-sm);
7397
+ .muka-profile-badge--md {
7398
+ gap: var(--spacing-3); /* 12px */
7388
7399
  }
7389
7400
 
7390
- .muka-progress--bar.muka-progress--md .muka-progress__track {
7391
- height: var(--progress-size-bar-height-md);
7401
+ .muka-profile-badge__avatar {
7402
+ flex-shrink: 0;
7392
7403
  }
7393
7404
 
7394
- .muka-progress--bar.muka-progress--lg .muka-progress__track {
7395
- height: var(--progress-size-bar-height-lg);
7405
+ /* Text stack */
7406
+ .muka-profile-badge__text {
7407
+ display: flex;
7408
+ flex-direction: column;
7409
+ align-items: flex-start;
7410
+ min-width: 0;
7396
7411
  }
7397
7412
 
7398
- .muka-progress--bar .muka-progress__fill {
7399
- height: 100%;
7400
- background-color: var(--color-action-default);
7401
- border-radius: var(--border-radius-full);
7402
- transition: width 0.3s ease;
7413
+ .muka-profile-badge__name {
7414
+ font-family: var(--text-body-base-regular-fontFamily);
7415
+ font-size: var(--text-body-base-regular-fontSize);
7416
+ font-weight: var(--text-body-base-regular-fontWeight);
7417
+ line-height: var(--text-body-base-regular-lineHeight);
7418
+ color: var(--color-text-default-default);
7403
7419
  }
7404
7420
 
7405
- .muka-progress--bar .muka-progress__label {
7406
- flex-shrink: 0;
7407
- font-family: var(--text-label-sm-semibold-fontFamily);
7408
- font-weight: var(--text-label-sm-semibold-fontWeight);
7409
- font-size: var(--text-label-sm-semibold-fontSize);
7410
- line-height: var(--text-label-sm-semibold-lineHeight);
7411
- color: var(--color-text-default-default);
7412
- min-width: 3ch;
7413
- text-align: right;
7421
+ .muka-profile-badge__email {
7422
+ font-family: var(--text-body-xs-regular-fontFamily);
7423
+ font-size: var(--text-body-xs-regular-fontSize);
7424
+ font-weight: var(--text-body-xs-regular-fontWeight);
7425
+ line-height: var(--text-body-xs-regular-lineHeight);
7426
+ color: var(--color-text-subtle-default);
7414
7427
  }
7415
7428
 
7416
- /* Indeterminate animation for bar */
7417
- .muka-progress--bar.muka-progress--indeterminate .muka-progress__fill {
7418
- width: 40%;
7419
- animation: muka-progress-bar-indeterminate 1.5s ease-in-out infinite;
7429
+ /* Clickable state */
7430
+ .muka-profile-badge--clickable {
7431
+ cursor: pointer;
7432
+ border: none;
7433
+ background: none;
7434
+ padding: 0;
7435
+ text-align: left;
7436
+ border-radius: var(--radius-md);
7437
+ transition: opacity 0.2s ease;
7420
7438
  }
7421
7439
 
7422
- @keyframes muka-progress-bar-indeterminate {
7423
- 0% {
7424
- transform: translateX(-100%);
7425
- }
7426
- 100% {
7427
- transform: translateX(250%);
7428
- }
7440
+ .muka-profile-badge--clickable:hover {
7441
+ opacity: 0.9;
7429
7442
  }
7430
7443
 
7431
- /* ========================================
7432
- CIRCLE VARIANT
7433
- ======================================== */
7434
-
7435
- .muka-progress--circle {
7436
- position: relative;
7437
- display: inline-flex;
7438
- align-items: center;
7439
- justify-content: center;
7440
- }
7441
-
7442
- .muka-progress--circle.muka-progress--sm {
7443
- width: var(--progress-size-circle-diameter-sm);
7444
- height: var(--progress-size-circle-diameter-sm);
7445
- }
7446
-
7447
- .muka-progress--circle.muka-progress--md {
7448
- width: var(--progress-size-circle-diameter-md);
7449
- height: var(--progress-size-circle-diameter-md);
7450
- }
7451
-
7452
- .muka-progress--circle.muka-progress--lg {
7453
- width: var(--progress-size-circle-diameter-lg);
7454
- height: var(--progress-size-circle-diameter-lg);
7455
- }
7456
-
7457
- .muka-progress__circle {
7458
- width: 100%;
7459
- height: 100%;
7460
- transform: rotate(-90deg);
7461
- }
7462
-
7463
- .muka-progress--circle .muka-progress__track {
7464
- fill: none;
7465
- stroke: var(--color-surface-level1);
7466
- }
7467
-
7468
- .muka-progress--circle.muka-progress--sm .muka-progress__track,
7469
- .muka-progress--circle.muka-progress--sm .muka-progress__fill {
7470
- stroke-width: var(--progress-size-circle-strokeWidth-sm);
7471
- }
7472
-
7473
- .muka-progress--circle.muka-progress--md .muka-progress__track,
7474
- .muka-progress--circle.muka-progress--md .muka-progress__fill {
7475
- stroke-width: var(--progress-size-circle-strokeWidth-md);
7476
- }
7477
-
7478
- .muka-progress--circle.muka-progress--lg .muka-progress__track,
7479
- .muka-progress--circle.muka-progress--lg .muka-progress__fill {
7480
- stroke-width: var(--progress-size-circle-strokeWidth-lg);
7481
- }
7482
-
7483
- .muka-progress--circle .muka-progress__fill {
7484
- fill: none;
7485
- stroke: var(--color-action-default);
7486
- stroke-linecap: round;
7487
- transition: stroke-dashoffset 0.3s ease;
7488
- }
7489
-
7490
- .muka-progress--circle .muka-progress__label {
7491
- position: absolute;
7492
- font-family: var(--text-label-sm-semibold-fontFamily);
7493
- font-weight: var(--text-label-sm-semibold-fontWeight);
7494
- color: var(--color-text-default-default);
7495
- }
7496
-
7497
- .muka-progress--circle.muka-progress--sm .muka-progress__label {
7498
- font-size: var(--text-label-sm-semibold-fontSize);
7499
- }
7500
-
7501
- .muka-progress--circle.muka-progress--md .muka-progress__label {
7502
- font-size: var(--text-label-md-semibold-fontSize);
7503
- }
7504
-
7505
- .muka-progress--circle.muka-progress--lg .muka-progress__label {
7506
- font-size: var(--text-label-lg-semibold-fontSize);
7507
- }
7508
-
7509
- /* Indeterminate animation for circle */
7510
- .muka-progress--circle.muka-progress--indeterminate .muka-progress__circle {
7511
- animation: muka-progress-circle-rotate 2s linear infinite;
7512
- }
7513
-
7514
- .muka-progress--circle.muka-progress--indeterminate .muka-progress__fill {
7515
- animation: muka-progress-circle-dash 1.5s ease-in-out infinite;
7516
- }
7517
-
7518
- @keyframes muka-progress-circle-rotate {
7519
- 100% {
7520
- transform: rotate(270deg);
7521
- }
7522
- }
7523
-
7524
- @keyframes muka-progress-circle-dash {
7525
- 0% {
7526
- stroke-dashoffset: 220;
7527
- }
7528
- 50% {
7529
- stroke-dashoffset: 70;
7530
- }
7531
- 100% {
7532
- stroke-dashoffset: 220;
7533
- }
7534
- }
7535
-
7536
-
7537
- /* ProfileBadge */
7538
- /* ProfileBadge Component Styles - Using Muka Design Tokens */
7539
-
7540
- .muka-profile-badge {
7541
- display: inline-flex;
7542
- align-items: center;
7543
- font-family: var(--text-body-base-regular-fontFamily);
7544
- }
7545
-
7546
- /* Size variants */
7547
- .muka-profile-badge--lg {
7548
- gap: var(--spacing-4); /* 16px */
7549
- }
7550
-
7551
- .muka-profile-badge--md {
7552
- gap: var(--spacing-3); /* 12px */
7553
- }
7554
-
7555
- .muka-profile-badge__avatar {
7556
- flex-shrink: 0;
7557
- }
7558
-
7559
- /* Text stack */
7560
- .muka-profile-badge__text {
7561
- display: flex;
7562
- flex-direction: column;
7563
- align-items: flex-start;
7564
- min-width: 0;
7565
- }
7566
-
7567
- .muka-profile-badge__name {
7568
- font-family: var(--text-body-base-regular-fontFamily);
7569
- font-size: var(--text-body-base-regular-fontSize);
7570
- font-weight: var(--text-body-base-regular-fontWeight);
7571
- line-height: var(--text-body-base-regular-lineHeight);
7572
- color: var(--color-text-default-default);
7573
- }
7574
-
7575
- .muka-profile-badge__email {
7576
- font-family: var(--text-body-xs-regular-fontFamily);
7577
- font-size: var(--text-body-xs-regular-fontSize);
7578
- font-weight: var(--text-body-xs-regular-fontWeight);
7579
- line-height: var(--text-body-xs-regular-lineHeight);
7580
- color: var(--color-text-subtle-default);
7581
- }
7582
-
7583
- /* Clickable state */
7584
- .muka-profile-badge--clickable {
7585
- cursor: pointer;
7586
- border: none;
7587
- background: none;
7588
- padding: 0;
7589
- text-align: left;
7590
- border-radius: var(--radius-md);
7591
- transition: opacity 0.2s ease;
7592
- }
7593
-
7594
- .muka-profile-badge--clickable:hover {
7595
- opacity: 0.9;
7596
- }
7597
-
7598
- .muka-profile-badge--clickable:active {
7599
- opacity: 0.8;
7600
- }
7444
+ .muka-profile-badge--clickable:active {
7445
+ opacity: 0.8;
7446
+ }
7601
7447
 
7602
7448
  .muka-profile-badge--clickable:focus-visible {
7603
7449
  outline: 2px solid var(--color-border-focus);
@@ -7702,68 +7548,271 @@ body {
7702
7548
  }
7703
7549
 
7704
7550
 
7705
- /* PieChart */
7706
- /* PieChart Component Styles - Using Muka Design Tokens */
7551
+ /* Popover */
7552
+ /* Popover Component Styles */
7707
7553
 
7708
- .muka-piechart {
7709
- display: inline-flex;
7710
- align-items: center;
7711
- gap: var(--spacing-4);
7554
+ .muka-popover__content {
7555
+ background-color: var(--color-surface-level3);
7556
+ border: var(--border-width-regular) solid var(--color-border-default);
7557
+ border-radius: var(--radius-md);
7558
+ padding: var(--spacing-4);
7559
+ box-shadow: var(--shadow-level3);
7560
+ max-width: 20rem;
7561
+ z-index: 50;
7562
+ animation: muka-popover-fade-in 150ms ease;
7712
7563
  }
7713
7564
 
7714
- /* Legend layout */
7715
- .muka-piechart--legend-right {
7716
- flex-direction: row;
7565
+ @keyframes muka-popover-fade-in {
7566
+ from {
7567
+ opacity: 0;
7568
+ transform: scale(0.96);
7569
+ }
7570
+ to {
7571
+ opacity: 1;
7572
+ transform: scale(1);
7573
+ }
7717
7574
  }
7718
7575
 
7719
- .muka-piechart--legend-bottom {
7720
- flex-direction: column;
7576
+ /* Arrow */
7577
+ .muka-popover__arrow {
7578
+ fill: var(--color-surface-level3);
7721
7579
  }
7722
7580
 
7581
+
7582
+ /* Progress */
7583
+ /* Progress Component Styles - Using Muka Design Tokens */
7584
+
7723
7585
  /* ========================================
7724
- CHART
7586
+ BAR VARIANT
7725
7587
  ======================================== */
7726
7588
 
7727
- .muka-piechart__chart {
7728
- position: relative;
7729
- flex-shrink: 0;
7730
- }
7731
-
7732
- .muka-piechart__chart--sm {
7733
- width: var(--piechart-size-diameter-sm);
7734
- height: var(--piechart-size-diameter-sm);
7589
+ .muka-progress--bar {
7590
+ display: flex;
7591
+ align-items: center;
7592
+ gap: var(--spacing-2);
7593
+ width: 100%;
7735
7594
  }
7736
7595
 
7737
- .muka-piechart__chart--md {
7738
- width: var(--piechart-size-diameter-md);
7739
- height: var(--piechart-size-diameter-md);
7596
+ .muka-progress--bar .muka-progress__track {
7597
+ flex: 1;
7598
+ background-color: var(--color-surface-level1);
7599
+ border-radius: var(--border-radius-full);
7600
+ overflow: hidden;
7740
7601
  }
7741
7602
 
7742
- .muka-piechart__chart--lg {
7743
- width: var(--piechart-size-diameter-lg);
7744
- height: var(--piechart-size-diameter-lg);
7603
+ .muka-progress--bar.muka-progress--sm .muka-progress__track {
7604
+ height: var(--progress-size-bar-height-sm);
7745
7605
  }
7746
7606
 
7747
- .muka-piechart__svg {
7748
- display: block;
7749
- width: 100%;
7750
- height: 100%;
7751
- /* Start slices at 12 o'clock instead of 3 o'clock */
7752
- transform: rotate(-90deg);
7607
+ .muka-progress--bar.muka-progress--md .muka-progress__track {
7608
+ height: var(--progress-size-bar-height-md);
7753
7609
  }
7754
7610
 
7755
- .muka-piechart__track {
7756
- fill: none;
7757
- stroke: var(--piechart-color-track);
7611
+ .muka-progress--bar.muka-progress--lg .muka-progress__track {
7612
+ height: var(--progress-size-bar-height-lg);
7758
7613
  }
7759
7614
 
7760
- .muka-piechart__segment {
7761
- fill: none;
7615
+ .muka-progress--bar .muka-progress__fill {
7616
+ height: 100%;
7617
+ background-color: var(--color-action-default);
7618
+ border-radius: var(--border-radius-full);
7619
+ transition: width 0.3s ease;
7762
7620
  }
7763
7621
 
7764
- /* ========================================
7765
- LEGEND
7766
- ======================================== */
7622
+ .muka-progress--bar .muka-progress__label {
7623
+ flex-shrink: 0;
7624
+ font-family: var(--text-label-sm-semibold-fontFamily);
7625
+ font-weight: var(--text-label-sm-semibold-fontWeight);
7626
+ font-size: var(--text-label-sm-semibold-fontSize);
7627
+ line-height: var(--text-label-sm-semibold-lineHeight);
7628
+ color: var(--color-text-default-default);
7629
+ min-width: 3ch;
7630
+ text-align: right;
7631
+ }
7632
+
7633
+ /* Indeterminate animation for bar */
7634
+ .muka-progress--bar.muka-progress--indeterminate .muka-progress__fill {
7635
+ width: 40%;
7636
+ animation: muka-progress-bar-indeterminate 1.5s ease-in-out infinite;
7637
+ }
7638
+
7639
+ @keyframes muka-progress-bar-indeterminate {
7640
+ 0% {
7641
+ transform: translateX(-100%);
7642
+ }
7643
+ 100% {
7644
+ transform: translateX(250%);
7645
+ }
7646
+ }
7647
+
7648
+ /* ========================================
7649
+ CIRCLE VARIANT
7650
+ ======================================== */
7651
+
7652
+ .muka-progress--circle {
7653
+ position: relative;
7654
+ display: inline-flex;
7655
+ align-items: center;
7656
+ justify-content: center;
7657
+ }
7658
+
7659
+ .muka-progress--circle.muka-progress--sm {
7660
+ width: var(--progress-size-circle-diameter-sm);
7661
+ height: var(--progress-size-circle-diameter-sm);
7662
+ }
7663
+
7664
+ .muka-progress--circle.muka-progress--md {
7665
+ width: var(--progress-size-circle-diameter-md);
7666
+ height: var(--progress-size-circle-diameter-md);
7667
+ }
7668
+
7669
+ .muka-progress--circle.muka-progress--lg {
7670
+ width: var(--progress-size-circle-diameter-lg);
7671
+ height: var(--progress-size-circle-diameter-lg);
7672
+ }
7673
+
7674
+ .muka-progress__circle {
7675
+ width: 100%;
7676
+ height: 100%;
7677
+ transform: rotate(-90deg);
7678
+ }
7679
+
7680
+ .muka-progress--circle .muka-progress__track {
7681
+ fill: none;
7682
+ stroke: var(--color-surface-level1);
7683
+ }
7684
+
7685
+ .muka-progress--circle.muka-progress--sm .muka-progress__track,
7686
+ .muka-progress--circle.muka-progress--sm .muka-progress__fill {
7687
+ stroke-width: var(--progress-size-circle-strokeWidth-sm);
7688
+ }
7689
+
7690
+ .muka-progress--circle.muka-progress--md .muka-progress__track,
7691
+ .muka-progress--circle.muka-progress--md .muka-progress__fill {
7692
+ stroke-width: var(--progress-size-circle-strokeWidth-md);
7693
+ }
7694
+
7695
+ .muka-progress--circle.muka-progress--lg .muka-progress__track,
7696
+ .muka-progress--circle.muka-progress--lg .muka-progress__fill {
7697
+ stroke-width: var(--progress-size-circle-strokeWidth-lg);
7698
+ }
7699
+
7700
+ .muka-progress--circle .muka-progress__fill {
7701
+ fill: none;
7702
+ stroke: var(--color-action-default);
7703
+ stroke-linecap: round;
7704
+ transition: stroke-dashoffset 0.3s ease;
7705
+ }
7706
+
7707
+ .muka-progress--circle .muka-progress__label {
7708
+ position: absolute;
7709
+ font-family: var(--text-label-sm-semibold-fontFamily);
7710
+ font-weight: var(--text-label-sm-semibold-fontWeight);
7711
+ color: var(--color-text-default-default);
7712
+ }
7713
+
7714
+ .muka-progress--circle.muka-progress--sm .muka-progress__label {
7715
+ font-size: var(--text-label-sm-semibold-fontSize);
7716
+ }
7717
+
7718
+ .muka-progress--circle.muka-progress--md .muka-progress__label {
7719
+ font-size: var(--text-label-md-semibold-fontSize);
7720
+ }
7721
+
7722
+ .muka-progress--circle.muka-progress--lg .muka-progress__label {
7723
+ font-size: var(--text-label-lg-semibold-fontSize);
7724
+ }
7725
+
7726
+ /* Indeterminate animation for circle */
7727
+ .muka-progress--circle.muka-progress--indeterminate .muka-progress__circle {
7728
+ animation: muka-progress-circle-rotate 2s linear infinite;
7729
+ }
7730
+
7731
+ .muka-progress--circle.muka-progress--indeterminate .muka-progress__fill {
7732
+ animation: muka-progress-circle-dash 1.5s ease-in-out infinite;
7733
+ }
7734
+
7735
+ @keyframes muka-progress-circle-rotate {
7736
+ 100% {
7737
+ transform: rotate(270deg);
7738
+ }
7739
+ }
7740
+
7741
+ @keyframes muka-progress-circle-dash {
7742
+ 0% {
7743
+ stroke-dashoffset: 220;
7744
+ }
7745
+ 50% {
7746
+ stroke-dashoffset: 70;
7747
+ }
7748
+ 100% {
7749
+ stroke-dashoffset: 220;
7750
+ }
7751
+ }
7752
+
7753
+
7754
+ /* PieChart */
7755
+ /* PieChart Component Styles - Using Muka Design Tokens */
7756
+
7757
+ .muka-piechart {
7758
+ display: inline-flex;
7759
+ align-items: center;
7760
+ gap: var(--spacing-4);
7761
+ }
7762
+
7763
+ /* Legend layout */
7764
+ .muka-piechart--legend-right {
7765
+ flex-direction: row;
7766
+ }
7767
+
7768
+ .muka-piechart--legend-bottom {
7769
+ flex-direction: column;
7770
+ }
7771
+
7772
+ /* ========================================
7773
+ CHART
7774
+ ======================================== */
7775
+
7776
+ .muka-piechart__chart {
7777
+ position: relative;
7778
+ flex-shrink: 0;
7779
+ }
7780
+
7781
+ .muka-piechart__chart--sm {
7782
+ width: var(--piechart-size-diameter-sm);
7783
+ height: var(--piechart-size-diameter-sm);
7784
+ }
7785
+
7786
+ .muka-piechart__chart--md {
7787
+ width: var(--piechart-size-diameter-md);
7788
+ height: var(--piechart-size-diameter-md);
7789
+ }
7790
+
7791
+ .muka-piechart__chart--lg {
7792
+ width: var(--piechart-size-diameter-lg);
7793
+ height: var(--piechart-size-diameter-lg);
7794
+ }
7795
+
7796
+ .muka-piechart__svg {
7797
+ display: block;
7798
+ width: 100%;
7799
+ height: 100%;
7800
+ /* Start slices at 12 o'clock instead of 3 o'clock */
7801
+ transform: rotate(-90deg);
7802
+ }
7803
+
7804
+ .muka-piechart__track {
7805
+ fill: none;
7806
+ stroke: var(--piechart-color-track);
7807
+ }
7808
+
7809
+ .muka-piechart__segment {
7810
+ fill: none;
7811
+ }
7812
+
7813
+ /* ========================================
7814
+ LEGEND
7815
+ ======================================== */
7767
7816
 
7768
7817
  .muka-piechart__legend {
7769
7818
  list-style: none;
@@ -7799,37 +7848,6 @@ body {
7799
7848
  }
7800
7849
 
7801
7850
 
7802
- /* Popover */
7803
- /* Popover Component Styles */
7804
-
7805
- .muka-popover__content {
7806
- background-color: var(--color-surface-level3);
7807
- border: var(--border-width-regular) solid var(--color-border-default);
7808
- border-radius: var(--radius-md);
7809
- padding: var(--spacing-4);
7810
- box-shadow: var(--shadow-level3);
7811
- max-width: 20rem;
7812
- z-index: 50;
7813
- animation: muka-popover-fade-in 150ms ease;
7814
- }
7815
-
7816
- @keyframes muka-popover-fade-in {
7817
- from {
7818
- opacity: 0;
7819
- transform: scale(0.96);
7820
- }
7821
- to {
7822
- opacity: 1;
7823
- transform: scale(1);
7824
- }
7825
- }
7826
-
7827
- /* Arrow */
7828
- .muka-popover__arrow {
7829
- fill: var(--color-surface-level3);
7830
- }
7831
-
7832
-
7833
7851
  /* PhotoUploader */
7834
7852
  /* PhotoUploader Component Styles - Using Muka Design Tokens */
7835
7853
 
@@ -8615,198 +8633,12 @@ body {
8615
8633
  }
8616
8634
 
8617
8635
 
8618
- /* MediaViewer */
8619
- /* MediaViewer Component Styles - Using Muka Design Tokens */
8636
+ /* ListItem */
8637
+ /* ListItem Component Styles - Using Muka Design Tokens */
8620
8638
 
8621
- /* ─── Native dialog: full viewport ────────────────────── */
8622
- .muka-media-viewer {
8623
- position: fixed;
8624
- inset: 0;
8625
- width: 100%;
8626
- height: 100%;
8627
- max-width: none;
8628
- max-height: none;
8629
- margin: 0;
8630
- padding: 0;
8631
- border: none;
8632
- display: flex;
8633
- flex-direction: column;
8634
- overflow: hidden;
8635
- overscroll-behavior: contain;
8636
- color: var(--color-text-default-default);
8637
- background-color: var(--color-black-alpha-12);
8638
- animation: muka-media-viewer-in var(--motion-duration-component) var(--motion-easing-enter);
8639
- }
8640
-
8641
- .muka-media-viewer:not([open]) {
8642
- display: none;
8643
- }
8644
-
8645
- .muka-media-viewer::backdrop {
8646
- background-color: var(--color-black-alpha-12);
8647
- }
8648
-
8649
- @keyframes muka-media-viewer-in {
8650
- from {
8651
- opacity: 0;
8652
- }
8653
- to {
8654
- opacity: 1;
8655
- }
8656
- }
8657
-
8658
- /* ─── Chrome: TopBar and footer sit on a surface ──────── */
8659
- .muka-media-viewer__topbar {
8660
- flex-shrink: 0;
8661
- background-color: var(--color-surface-level3);
8662
- }
8663
-
8664
- .muka-media-viewer__live {
8665
- position: absolute;
8666
- width: 1px;
8667
- height: 1px;
8668
- padding: 0;
8669
- margin: -1px;
8670
- overflow: hidden;
8671
- clip: rect(0, 0, 0, 0);
8672
- white-space: nowrap;
8673
- border: 0;
8674
- }
8675
-
8676
- /* ─── Stage: the dark area the images slide across ────── */
8677
- .muka-media-viewer__stage {
8678
- position: relative;
8679
- flex: 1 1 auto;
8680
- min-height: 0;
8681
- overflow: hidden;
8682
- /* Gestures are handled in JS: no browser panning or pinch on the stage. */
8683
- touch-action: none;
8684
- user-select: none;
8685
- -webkit-user-select: none;
8686
- }
8687
-
8688
- .muka-media-viewer__slide {
8689
- position: absolute;
8690
- inset: 0;
8691
- display: flex;
8692
- align-items: center;
8693
- justify-content: center;
8694
- padding: var(--spacing-4);
8695
- transition: transform var(--motion-duration-component) var(--motion-easing-default);
8696
- will-change: transform;
8697
- }
8698
-
8699
- /* While a finger drags, the image follows it without easing. */
8700
- .muka-media-viewer--dragging .muka-media-viewer__slide {
8701
- transition: none;
8702
- }
8703
-
8704
- .muka-media-viewer__image {
8705
- display: block;
8706
- max-width: 100%;
8707
- max-height: 100%;
8708
- object-fit: contain;
8709
- /* The image takes touches, so a long press opens the OS menu (save, share,
8710
- copy). The swipe still works: pointer events bubble to the stage, and a
8711
- long press doesn't move far enough to start a drag. */
8712
- -webkit-touch-callout: default;
8713
- }
8714
-
8715
- /* ─── Previous / next: devices that can hover ─────────── */
8716
- .muka-media-viewer__nav {
8717
- position: absolute;
8718
- top: 50%;
8719
- display: none;
8720
- transform: translateY(-50%);
8721
- opacity: 0;
8722
- transition: opacity var(--motion-duration-micro) var(--motion-easing-enter);
8723
- }
8724
-
8725
- .muka-media-viewer__nav--previous {
8726
- left: var(--spacing-4);
8727
- }
8728
-
8729
- .muka-media-viewer__nav--next {
8730
- right: var(--spacing-4);
8731
- }
8732
-
8733
- @media (hover: hover) and (pointer: fine) {
8734
- .muka-media-viewer__nav {
8735
- display: block;
8736
- }
8737
-
8738
- .muka-media-viewer__stage:hover .muka-media-viewer__nav,
8739
- .muka-media-viewer__nav:focus-within {
8740
- opacity: 1;
8741
- }
8742
- }
8743
-
8744
- /* ─── Footer: caption, meta and actions ───────────────── */
8745
- .muka-media-viewer__footer {
8746
- flex-shrink: 0;
8747
- display: flex;
8748
- flex-direction: column;
8749
- gap: var(--spacing-3);
8750
- padding: var(--spacing-4);
8751
- padding-bottom: calc(var(--spacing-4) + env(safe-area-inset-bottom, 0px));
8752
- background-color: var(--color-surface-level3);
8753
- }
8754
-
8755
- .muka-media-viewer__details {
8756
- display: flex;
8757
- align-items: flex-start;
8758
- justify-content: space-between;
8759
- gap: var(--spacing-3);
8760
- }
8761
-
8762
- .muka-media-viewer__caption {
8763
- min-width: 0;
8764
- color: var(--color-text-subtle-default);
8765
- font-family: var(--text-body-sm-regular-fontFamily);
8766
- font-size: var(--text-body-sm-regular-fontSize);
8767
- font-weight: var(--text-body-sm-regular-fontWeight);
8768
- line-height: var(--text-body-sm-regular-lineHeight);
8769
- overflow-wrap: anywhere;
8770
- }
8771
-
8772
- .muka-media-viewer__meta {
8773
- flex-shrink: 0;
8774
- }
8775
-
8776
- .muka-media-viewer__actions {
8777
- display: flex;
8778
- flex-wrap: wrap;
8779
- gap: var(--spacing-2);
8780
- }
8781
-
8782
- /* Mobile: actions stack full width, like Dialog footers. */
8783
- @media (max-width: 1023px) {
8784
- .muka-media-viewer__actions {
8785
- flex-direction: column;
8786
- }
8787
-
8788
- .muka-media-viewer__actions > * {
8789
- width: 100%;
8790
- }
8791
- }
8792
-
8793
- /* ─── Reduced motion ──────────────────────────────────── */
8794
- @media (prefers-reduced-motion: reduce) {
8795
- .muka-media-viewer,
8796
- .muka-media-viewer__slide,
8797
- .muka-media-viewer__nav {
8798
- animation: none;
8799
- transition: none;
8800
- }
8801
- }
8802
-
8803
-
8804
- /* ListItem */
8805
- /* ListItem Component Styles - Using Muka Design Tokens */
8806
-
8807
- /* Base list item styles */
8808
- .muka-listitem {
8809
- /* Layout */
8639
+ /* Base list item styles */
8640
+ .muka-listitem {
8641
+ /* Layout */
8810
8642
  display: flex;
8811
8643
  align-items: flex-start;
8812
8644
  gap: var(--spacing-4);
@@ -8995,196 +8827,189 @@ li.muka-listitem {
8995
8827
  }
8996
8828
 
8997
8829
 
8998
- /* LicensePlateInput */
8999
- /* LicensePlateInput — Dutch RDW-style plate input
9000
- *
9001
- * Plate body colors are regulatory (EU/NL) and intentionally fixed:
9002
- * - Plate yellow: #F0CE3D
9003
- * - EU strip blue: #003399
9004
- * - EU stars yellow: #FFCC00
9005
- * - Plate text: #1A1A1A
9006
- *
9007
- * All surrounding UI (label, helper, focus ring, error border) uses Muka tokens.
9008
- */
9009
-
9010
- .muka-license-plate-input {
9011
- --plate-yellow: #f0ce3d;
9012
- --plate-blue: #003399;
9013
- --plate-text: #1a1a1a;
9014
- --plate-stars: #ffcc00;
8830
+ /* MediaViewer */
8831
+ /* MediaViewer Component Styles - Using Muka Design Tokens */
9015
8832
 
9016
- display: inline-flex;
8833
+ /* ─── Native dialog: full viewport ────────────────────── */
8834
+ .muka-media-viewer {
8835
+ position: fixed;
8836
+ inset: 0;
8837
+ width: 100%;
8838
+ height: 100%;
8839
+ max-width: none;
8840
+ max-height: none;
8841
+ margin: 0;
8842
+ padding: 0;
8843
+ border: none;
8844
+ display: flex;
9017
8845
  flex-direction: column;
9018
- gap: var(--spacing-2);
9019
- }
9020
-
9021
- /* Plate body */
9022
- .muka-license-plate-input__plate {
9023
- display: inline-flex;
9024
- align-items: stretch;
9025
- background-color: var(--plate-yellow);
9026
- border-radius: var(--input-field-radius-md);
9027
- cursor: text;
9028
- position: relative;
9029
8846
  overflow: hidden;
9030
- box-sizing: border-box;
9031
- /* Subtle outline to lift the plate from light backgrounds */
9032
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
9033
- /* Reserve space for the focus / error solid ring without shifting layout */
9034
- outline: 3px solid transparent;
9035
- outline-offset: 2px;
9036
- transition: outline-color 0.15s ease, opacity 0.15s ease;
9037
- }
9038
-
9039
- /* Size variants — plate aspect echoes the real RDW plate (~5:1) */
9040
- .muka-license-plate-input__plate--sm {
9041
- height: 44px;
9042
- min-width: 220px;
9043
- border-radius: var(--input-field-radius-sm);
8847
+ overscroll-behavior: contain;
8848
+ color: var(--color-text-default-default);
8849
+ background-color: var(--color-black-alpha-12);
8850
+ animation: muka-media-viewer-in var(--motion-duration-component) var(--motion-easing-enter);
9044
8851
  }
9045
8852
 
9046
- .muka-license-plate-input__plate--md {
9047
- height: 60px;
9048
- min-width: 300px;
9049
- border-radius: var(--input-field-radius-md);
8853
+ .muka-media-viewer:not([open]) {
8854
+ display: none;
9050
8855
  }
9051
8856
 
9052
- .muka-license-plate-input__plate--lg {
9053
- height: 80px;
9054
- min-width: 400px;
9055
- border-radius: var(--input-field-radius-lg);
8857
+ .muka-media-viewer::backdrop {
8858
+ background-color: var(--color-black-alpha-12);
9056
8859
  }
9057
8860
 
9058
- /* Focus — solid outline ring */
9059
- .muka-license-plate-input__plate--focused:not(.muka-license-plate-input__plate--disabled) {
9060
- outline-color: var(--input-field-color-focus-border);
8861
+ @keyframes muka-media-viewer-in {
8862
+ from {
8863
+ opacity: 0;
8864
+ }
8865
+ to {
8866
+ opacity: 1;
8867
+ }
9061
8868
  }
9062
8869
 
9063
- /* Error — solid outline ring in error color */
9064
- .muka-license-plate-input__plate--error:not(.muka-license-plate-input__plate--disabled) {
9065
- outline-color: var(--input-field-color-error-border);
8870
+ /* ─── Chrome: TopBar and footer sit on a surface ──────── */
8871
+ .muka-media-viewer__topbar {
8872
+ flex-shrink: 0;
8873
+ background-color: var(--color-surface-level3);
9066
8874
  }
9067
8875
 
9068
- /* Disabled */
9069
- .muka-license-plate-input__plate--disabled {
9070
- cursor: not-allowed;
9071
- opacity: 0.55;
8876
+ .muka-media-viewer__live {
8877
+ position: absolute;
8878
+ width: 1px;
8879
+ height: 1px;
8880
+ padding: 0;
8881
+ margin: -1px;
8882
+ overflow: hidden;
8883
+ clip: rect(0, 0, 0, 0);
8884
+ white-space: nowrap;
8885
+ border: 0;
9072
8886
  }
9073
8887
 
9074
- /* EU strip */
9075
- .muka-license-plate-input__eu-strip {
9076
- display: inline-flex;
9077
- flex-direction: column;
8888
+ /* ─── Stage: the dark area the images slide across ────── */
8889
+ .muka-media-viewer__stage {
8890
+ position: relative;
8891
+ flex: 1 1 auto;
8892
+ min-height: 0;
8893
+ overflow: hidden;
8894
+ /* Gestures are handled in JS: no browser panning or pinch on the stage. */
8895
+ touch-action: none;
8896
+ user-select: none;
8897
+ -webkit-user-select: none;
8898
+ }
8899
+
8900
+ .muka-media-viewer__slide {
8901
+ position: absolute;
8902
+ inset: 0;
8903
+ display: flex;
9078
8904
  align-items: center;
9079
8905
  justify-content: center;
9080
- background-color: var(--plate-blue);
9081
- color: #ffffff;
9082
- flex-shrink: 0;
9083
- padding: 0 0.4em;
9084
- gap: 0.15em;
9085
- /* Strip width scales with plate height for a consistent ratio */
9086
- width: 14%;
9087
- min-width: 36px;
8906
+ padding: var(--spacing-4);
8907
+ transition: transform var(--motion-duration-component) var(--motion-easing-default);
8908
+ will-change: transform;
9088
8909
  }
9089
8910
 
9090
- .muka-license-plate-input__eu-stars {
9091
- width: 60%;
9092
- max-width: 28px;
9093
- aspect-ratio: 1 / 1;
9094
- display: block;
8911
+ /* While a finger drags, the image follows it without easing. */
8912
+ .muka-media-viewer--dragging .muka-media-viewer__slide {
8913
+ transition: none;
9095
8914
  }
9096
8915
 
9097
- .muka-license-plate-input__plate--sm .muka-license-plate-input__eu-stars {
9098
- max-width: 20px;
8916
+ .muka-media-viewer__image {
8917
+ display: block;
8918
+ max-width: 100%;
8919
+ max-height: 100%;
8920
+ object-fit: contain;
8921
+ /* The image takes touches, so a long press opens the OS menu (save, share,
8922
+ copy). The swipe still works: pointer events bubble to the stage, and a
8923
+ long press doesn't move far enough to start a drag. */
8924
+ -webkit-touch-callout: default;
9099
8925
  }
9100
8926
 
9101
- .muka-license-plate-input__plate--lg .muka-license-plate-input__eu-stars {
9102
- max-width: 36px;
8927
+ /* ─── Previous / next: devices that can hover ─────────── */
8928
+ .muka-media-viewer__nav {
8929
+ position: absolute;
8930
+ top: 50%;
8931
+ display: none;
8932
+ transform: translateY(-50%);
8933
+ opacity: 0;
8934
+ transition: opacity var(--motion-duration-micro) var(--motion-easing-enter);
9103
8935
  }
9104
8936
 
9105
- .muka-license-plate-input__country-code {
9106
- font-family:
9107
- 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
9108
- font-weight: 700;
9109
- letter-spacing: 0.04em;
9110
- line-height: 1;
9111
- color: #ffffff;
8937
+ .muka-media-viewer__nav--previous {
8938
+ left: var(--spacing-4);
9112
8939
  }
9113
8940
 
9114
- .muka-license-plate-input__plate--sm .muka-license-plate-input__country-code {
9115
- font-size: 10px;
8941
+ .muka-media-viewer__nav--next {
8942
+ right: var(--spacing-4);
9116
8943
  }
9117
8944
 
9118
- .muka-license-plate-input__plate--md .muka-license-plate-input__country-code {
9119
- font-size: 13px;
9120
- }
8945
+ @media (hover: hover) and (pointer: fine) {
8946
+ .muka-media-viewer__nav {
8947
+ display: block;
8948
+ }
9121
8949
 
9122
- .muka-license-plate-input__plate--lg .muka-license-plate-input__country-code {
9123
- font-size: 16px;
8950
+ .muka-media-viewer__stage:hover .muka-media-viewer__nav,
8951
+ .muka-media-viewer__nav:focus-within {
8952
+ opacity: 1;
8953
+ }
9124
8954
  }
9125
8955
 
9126
- /* Native input */
9127
- .muka-license-plate-input__native {
9128
- flex: 1;
9129
- min-width: 0;
9130
- border: none;
9131
- outline: none;
9132
- background: transparent;
9133
- color: var(--plate-text);
9134
- text-align: center;
9135
- text-transform: uppercase;
9136
- letter-spacing: 0.06em;
9137
- /* Plate font — bold condensed sans is closest to the FE-Schrift look without
9138
- shipping a custom font. JetBrains Mono is the system mono brand font. */
9139
- font-family:
9140
- 'Arial Narrow', 'Helvetica Neue', Helvetica, Arial, sans-serif;
9141
- font-weight: 800;
9142
- padding: 0 0.5em;
9143
- width: 100%;
9144
- caret-color: var(--plate-text);
8956
+ /* ─── Footer: caption, meta and actions ───────────────── */
8957
+ .muka-media-viewer__footer {
8958
+ flex-shrink: 0;
8959
+ display: flex;
8960
+ flex-direction: column;
8961
+ gap: var(--spacing-3);
8962
+ padding: var(--spacing-4);
8963
+ padding-bottom: calc(var(--spacing-4) + env(safe-area-inset-bottom, 0px));
8964
+ background-color: var(--color-surface-level3);
9145
8965
  }
9146
8966
 
9147
- .muka-license-plate-input__plate--sm .muka-license-plate-input__native {
9148
- font-size: 22px;
8967
+ .muka-media-viewer__details {
8968
+ display: flex;
8969
+ align-items: flex-start;
8970
+ justify-content: space-between;
8971
+ gap: var(--spacing-3);
9149
8972
  }
9150
8973
 
9151
- .muka-license-plate-input__plate--md .muka-license-plate-input__native {
9152
- font-size: 30px;
8974
+ .muka-media-viewer__caption {
8975
+ min-width: 0;
8976
+ color: var(--color-text-subtle-default);
8977
+ font-family: var(--text-body-sm-regular-fontFamily);
8978
+ font-size: var(--text-body-sm-regular-fontSize);
8979
+ font-weight: var(--text-body-sm-regular-fontWeight);
8980
+ line-height: var(--text-body-sm-regular-lineHeight);
8981
+ overflow-wrap: anywhere;
9153
8982
  }
9154
8983
 
9155
- .muka-license-plate-input__plate--lg .muka-license-plate-input__native {
9156
- font-size: 42px;
8984
+ .muka-media-viewer__meta {
8985
+ flex-shrink: 0;
9157
8986
  }
9158
8987
 
9159
- .muka-license-plate-input__native::placeholder {
9160
- color: var(--plate-text);
9161
- opacity: 0.55;
9162
- font-weight: 700;
9163
- letter-spacing: 0.08em;
8988
+ .muka-media-viewer__actions {
8989
+ display: flex;
8990
+ flex-wrap: wrap;
8991
+ gap: var(--spacing-2);
9164
8992
  }
9165
8993
 
9166
- .muka-license-plate-input__plate--disabled .muka-license-plate-input__native {
9167
- cursor: not-allowed;
9168
- }
8994
+ /* Mobile: actions stack full width, like Dialog footers. */
8995
+ @media (max-width: 1023px) {
8996
+ .muka-media-viewer__actions {
8997
+ flex-direction: column;
8998
+ }
9169
8999
 
9170
- /* Helper text */
9171
- .muka-license-plate-input__helper {
9172
- font-family: var(--text-label-sm-regular-fontFamily);
9173
- font-weight: var(--text-label-sm-regular-fontWeight);
9174
- font-size: var(--text-label-sm-regular-fontSize);
9175
- line-height: var(--text-label-sm-regular-lineHeight);
9176
- color: var(--color-text-subtle-default);
9177
- margin: 0;
9000
+ .muka-media-viewer__actions > * {
9001
+ width: 100%;
9002
+ }
9178
9003
  }
9179
9004
 
9180
- /* Error message */
9181
- .muka-license-plate-input__error {
9182
- font-family: var(--text-label-sm-regular-fontFamily);
9183
- font-weight: var(--text-label-sm-regular-fontWeight);
9184
- font-size: var(--text-label-sm-regular-fontSize);
9185
- line-height: var(--text-label-sm-regular-lineHeight);
9186
- color: var(--color-state-error-default);
9187
- margin: 0;
9005
+ /* ─── Reduced motion ──────────────────────────────────── */
9006
+ @media (prefers-reduced-motion: reduce) {
9007
+ .muka-media-viewer,
9008
+ .muka-media-viewer__slide,
9009
+ .muka-media-viewer__nav {
9010
+ animation: none;
9011
+ transition: none;
9012
+ }
9188
9013
  }
9189
9014
 
9190
9015
 
@@ -9407,38 +9232,231 @@ li.muka-listitem {
9407
9232
  }
9408
9233
 
9409
9234
 
9410
- /* Input */
9411
- /* Input Component Styles - Using Muka Design Tokens */
9235
+ /* LicensePlateInput */
9236
+ /* LicensePlateInput — Dutch RDW-style plate input
9237
+ *
9238
+ * Plate body colors are regulatory (EU/NL) and intentionally fixed:
9239
+ * - Plate yellow: #F0CE3D
9240
+ * - EU strip blue: #003399
9241
+ * - EU stars yellow: #FFCC00
9242
+ * - Plate text: #1A1A1A
9243
+ *
9244
+ * All surrounding UI (label, helper, focus ring, error border) uses Muka tokens.
9245
+ */
9246
+
9247
+ .muka-license-plate-input {
9248
+ --plate-yellow: #f0ce3d;
9249
+ --plate-blue: #003399;
9250
+ --plate-text: #1a1a1a;
9251
+ --plate-stars: #ffcc00;
9412
9252
 
9413
- /* Wrapper — label, field, helper spacing per Figma */
9414
- .muka-input {
9415
9253
  display: inline-flex;
9416
9254
  flex-direction: column;
9417
9255
  gap: var(--spacing-2);
9418
9256
  }
9419
9257
 
9420
- .muka-input--full-width {
9421
- width: 100%;
9422
- }
9423
-
9424
- /* Label */
9425
- .muka-input__label {
9426
- color: var(--color-text-default-default);
9427
- cursor: pointer;
9258
+ /* Plate body */
9259
+ .muka-license-plate-input__plate {
9260
+ display: inline-flex;
9261
+ align-items: stretch;
9262
+ background-color: var(--plate-yellow);
9263
+ border-radius: var(--input-field-radius-md);
9264
+ cursor: text;
9265
+ position: relative;
9266
+ overflow: hidden;
9267
+ box-sizing: border-box;
9268
+ /* Subtle outline to lift the plate from light backgrounds */
9269
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
9270
+ /* Reserve space for the focus / error solid ring without shifting layout */
9271
+ outline: 3px solid transparent;
9272
+ outline-offset: 2px;
9273
+ transition: outline-color 0.15s ease, opacity 0.15s ease;
9428
9274
  }
9429
9275
 
9430
- .muka-input__label--sm {
9431
- font-family: var(--text-label-sm-semibold-fontFamily);
9432
- font-weight: var(--text-label-sm-semibold-fontWeight);
9433
- font-size: var(--text-label-sm-semibold-fontSize);
9434
- line-height: var(--text-label-sm-semibold-lineHeight);
9276
+ /* Size variants — plate aspect echoes the real RDW plate (~5:1) */
9277
+ .muka-license-plate-input__plate--sm {
9278
+ height: 44px;
9279
+ min-width: 220px;
9280
+ border-radius: var(--input-field-radius-sm);
9435
9281
  }
9436
9282
 
9437
- .muka-input__label--md {
9438
- font-family: var(--text-label-md-semibold-fontFamily);
9439
- font-weight: var(--text-label-md-semibold-fontWeight);
9440
- font-size: var(--text-label-md-semibold-fontSize);
9441
- line-height: var(--text-label-md-semibold-lineHeight);
9283
+ .muka-license-plate-input__plate--md {
9284
+ height: 60px;
9285
+ min-width: 300px;
9286
+ border-radius: var(--input-field-radius-md);
9287
+ }
9288
+
9289
+ .muka-license-plate-input__plate--lg {
9290
+ height: 80px;
9291
+ min-width: 400px;
9292
+ border-radius: var(--input-field-radius-lg);
9293
+ }
9294
+
9295
+ /* Focus — solid outline ring */
9296
+ .muka-license-plate-input__plate--focused:not(.muka-license-plate-input__plate--disabled) {
9297
+ outline-color: var(--input-field-color-focus-border);
9298
+ }
9299
+
9300
+ /* Error — solid outline ring in error color */
9301
+ .muka-license-plate-input__plate--error:not(.muka-license-plate-input__plate--disabled) {
9302
+ outline-color: var(--input-field-color-error-border);
9303
+ }
9304
+
9305
+ /* Disabled */
9306
+ .muka-license-plate-input__plate--disabled {
9307
+ cursor: not-allowed;
9308
+ opacity: 0.55;
9309
+ }
9310
+
9311
+ /* EU strip */
9312
+ .muka-license-plate-input__eu-strip {
9313
+ display: inline-flex;
9314
+ flex-direction: column;
9315
+ align-items: center;
9316
+ justify-content: center;
9317
+ background-color: var(--plate-blue);
9318
+ color: #ffffff;
9319
+ flex-shrink: 0;
9320
+ padding: 0 0.4em;
9321
+ gap: 0.15em;
9322
+ /* Strip width scales with plate height for a consistent ratio */
9323
+ width: 14%;
9324
+ min-width: 36px;
9325
+ }
9326
+
9327
+ .muka-license-plate-input__eu-stars {
9328
+ width: 60%;
9329
+ max-width: 28px;
9330
+ aspect-ratio: 1 / 1;
9331
+ display: block;
9332
+ }
9333
+
9334
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__eu-stars {
9335
+ max-width: 20px;
9336
+ }
9337
+
9338
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__eu-stars {
9339
+ max-width: 36px;
9340
+ }
9341
+
9342
+ .muka-license-plate-input__country-code {
9343
+ font-family:
9344
+ 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
9345
+ font-weight: 700;
9346
+ letter-spacing: 0.04em;
9347
+ line-height: 1;
9348
+ color: #ffffff;
9349
+ }
9350
+
9351
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__country-code {
9352
+ font-size: 10px;
9353
+ }
9354
+
9355
+ .muka-license-plate-input__plate--md .muka-license-plate-input__country-code {
9356
+ font-size: 13px;
9357
+ }
9358
+
9359
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__country-code {
9360
+ font-size: 16px;
9361
+ }
9362
+
9363
+ /* Native input */
9364
+ .muka-license-plate-input__native {
9365
+ flex: 1;
9366
+ min-width: 0;
9367
+ border: none;
9368
+ outline: none;
9369
+ background: transparent;
9370
+ color: var(--plate-text);
9371
+ text-align: center;
9372
+ text-transform: uppercase;
9373
+ letter-spacing: 0.06em;
9374
+ /* Plate font — bold condensed sans is closest to the FE-Schrift look without
9375
+ shipping a custom font. JetBrains Mono is the system mono brand font. */
9376
+ font-family:
9377
+ 'Arial Narrow', 'Helvetica Neue', Helvetica, Arial, sans-serif;
9378
+ font-weight: 800;
9379
+ padding: 0 0.5em;
9380
+ width: 100%;
9381
+ caret-color: var(--plate-text);
9382
+ }
9383
+
9384
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__native {
9385
+ font-size: 22px;
9386
+ }
9387
+
9388
+ .muka-license-plate-input__plate--md .muka-license-plate-input__native {
9389
+ font-size: 30px;
9390
+ }
9391
+
9392
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__native {
9393
+ font-size: 42px;
9394
+ }
9395
+
9396
+ .muka-license-plate-input__native::placeholder {
9397
+ color: var(--plate-text);
9398
+ opacity: 0.55;
9399
+ font-weight: 700;
9400
+ letter-spacing: 0.08em;
9401
+ }
9402
+
9403
+ .muka-license-plate-input__plate--disabled .muka-license-plate-input__native {
9404
+ cursor: not-allowed;
9405
+ }
9406
+
9407
+ /* Helper text */
9408
+ .muka-license-plate-input__helper {
9409
+ font-family: var(--text-label-sm-regular-fontFamily);
9410
+ font-weight: var(--text-label-sm-regular-fontWeight);
9411
+ font-size: var(--text-label-sm-regular-fontSize);
9412
+ line-height: var(--text-label-sm-regular-lineHeight);
9413
+ color: var(--color-text-subtle-default);
9414
+ margin: 0;
9415
+ }
9416
+
9417
+ /* Error message */
9418
+ .muka-license-plate-input__error {
9419
+ font-family: var(--text-label-sm-regular-fontFamily);
9420
+ font-weight: var(--text-label-sm-regular-fontWeight);
9421
+ font-size: var(--text-label-sm-regular-fontSize);
9422
+ line-height: var(--text-label-sm-regular-lineHeight);
9423
+ color: var(--color-state-error-default);
9424
+ margin: 0;
9425
+ }
9426
+
9427
+
9428
+ /* Input */
9429
+ /* Input Component Styles - Using Muka Design Tokens */
9430
+
9431
+ /* Wrapper — label, field, helper spacing per Figma */
9432
+ .muka-input {
9433
+ display: inline-flex;
9434
+ flex-direction: column;
9435
+ gap: var(--spacing-2);
9436
+ }
9437
+
9438
+ .muka-input--full-width {
9439
+ width: 100%;
9440
+ }
9441
+
9442
+ /* Label */
9443
+ .muka-input__label {
9444
+ color: var(--color-text-default-default);
9445
+ cursor: pointer;
9446
+ }
9447
+
9448
+ .muka-input__label--sm {
9449
+ font-family: var(--text-label-sm-semibold-fontFamily);
9450
+ font-weight: var(--text-label-sm-semibold-fontWeight);
9451
+ font-size: var(--text-label-sm-semibold-fontSize);
9452
+ line-height: var(--text-label-sm-semibold-lineHeight);
9453
+ }
9454
+
9455
+ .muka-input__label--md {
9456
+ font-family: var(--text-label-md-semibold-fontFamily);
9457
+ font-weight: var(--text-label-md-semibold-fontWeight);
9458
+ font-size: var(--text-label-md-semibold-fontSize);
9459
+ line-height: var(--text-label-md-semibold-lineHeight);
9442
9460
  }
9443
9461
 
9444
9462
  .muka-input__label--lg {
@@ -9688,60 +9706,6 @@ li.muka-listitem {
9688
9706
  }
9689
9707
 
9690
9708
 
9691
- /* Icon */
9692
- /* Icon Component Styles - Using Muka Design Tokens */
9693
-
9694
- .muka-icon {
9695
- display: inline-flex;
9696
- align-items: center;
9697
- justify-content: center;
9698
- flex-shrink: 0;
9699
- color: var(--color-icon-default-default, currentColor);
9700
- }
9701
-
9702
- /* Icons inside buttons should inherit from button's foreground color */
9703
- .muka-button .muka-icon {
9704
- color: inherit;
9705
- }
9706
-
9707
- .muka-icon--subtle {
9708
- color: var(--color-icon-subtle-default);
9709
- }
9710
-
9711
- .muka-icon--muted {
9712
- color: var(--color-icon-muted-default);
9713
- }
9714
-
9715
- .muka-icon--inverse {
9716
- color: var(--color-icon-default-inverse);
9717
- }
9718
-
9719
- .muka-icon--xs {
9720
- width: var(--icon-size-xs);
9721
- height: var(--icon-size-xs);
9722
- }
9723
-
9724
- .muka-icon--sm {
9725
- width: var(--icon-size-sm);
9726
- height: var(--icon-size-sm);
9727
- }
9728
-
9729
- .muka-icon--md {
9730
- width: var(--icon-size-default);
9731
- height: var(--icon-size-default);
9732
- }
9733
-
9734
- .muka-icon--lg {
9735
- width: var(--icon-size-lg);
9736
- height: var(--icon-size-lg);
9737
- }
9738
-
9739
- .muka-icon svg {
9740
- width: 100%;
9741
- height: 100%;
9742
- }
9743
-
9744
-
9745
9709
  /* Form */
9746
9710
  .muka-form {
9747
9711
  display: flex;
@@ -10024,33 +9988,87 @@ li.muka-listitem {
10024
9988
  }
10025
9989
 
10026
9990
 
10027
- /* FAB */
10028
- /* FAB (Floating Action Button) Component Styles */
10029
-
10030
- .muka-fab {
10031
- position: fixed;
10032
- z-index: 40;
9991
+ /* Icon */
9992
+ /* Icon Component Styles - Using Muka Design Tokens */
10033
9993
 
9994
+ .muka-icon {
10034
9995
  display: inline-flex;
10035
9996
  align-items: center;
10036
9997
  justify-content: center;
10037
- gap: var(--spacing-2);
10038
-
10039
- border: none;
10040
- cursor: pointer;
10041
- font-family: inherit;
10042
- box-shadow: var(--shadow-level4);
9998
+ flex-shrink: 0;
9999
+ color: var(--color-icon-default-default, currentColor);
10000
+ }
10043
10001
 
10044
- transition: transform 0.12s ease, box-shadow 0.12s ease, background-color 0.12s ease;
10045
- -webkit-tap-highlight-color: transparent;
10002
+ /* Icons inside buttons should inherit from button's foreground color */
10003
+ .muka-button .muka-icon {
10004
+ color: inherit;
10046
10005
  }
10047
10006
 
10048
- .muka-fab:active {
10049
- transform: scale(0.96);
10050
- box-shadow: var(--shadow-level3);
10007
+ .muka-icon--subtle {
10008
+ color: var(--color-icon-subtle-default);
10051
10009
  }
10052
10010
 
10053
- .muka-fab:focus-visible {
10011
+ .muka-icon--muted {
10012
+ color: var(--color-icon-muted-default);
10013
+ }
10014
+
10015
+ .muka-icon--inverse {
10016
+ color: var(--color-icon-default-inverse);
10017
+ }
10018
+
10019
+ .muka-icon--xs {
10020
+ width: var(--icon-size-xs);
10021
+ height: var(--icon-size-xs);
10022
+ }
10023
+
10024
+ .muka-icon--sm {
10025
+ width: var(--icon-size-sm);
10026
+ height: var(--icon-size-sm);
10027
+ }
10028
+
10029
+ .muka-icon--md {
10030
+ width: var(--icon-size-default);
10031
+ height: var(--icon-size-default);
10032
+ }
10033
+
10034
+ .muka-icon--lg {
10035
+ width: var(--icon-size-lg);
10036
+ height: var(--icon-size-lg);
10037
+ }
10038
+
10039
+ .muka-icon svg {
10040
+ width: 100%;
10041
+ height: 100%;
10042
+ }
10043
+
10044
+
10045
+ /* FAB */
10046
+ /* FAB (Floating Action Button) Component Styles */
10047
+
10048
+ .muka-fab {
10049
+ position: fixed;
10050
+ z-index: 40;
10051
+
10052
+ display: inline-flex;
10053
+ align-items: center;
10054
+ justify-content: center;
10055
+ gap: var(--spacing-2);
10056
+
10057
+ border: none;
10058
+ cursor: pointer;
10059
+ font-family: inherit;
10060
+ box-shadow: var(--shadow-level4);
10061
+
10062
+ transition: transform 0.12s ease, box-shadow 0.12s ease, background-color 0.12s ease;
10063
+ -webkit-tap-highlight-color: transparent;
10064
+ }
10065
+
10066
+ .muka-fab:active {
10067
+ transform: scale(0.96);
10068
+ box-shadow: var(--shadow-level3);
10069
+ }
10070
+
10071
+ .muka-fab:focus-visible {
10054
10072
  outline: 2px solid var(--color-action-default);
10055
10073
  outline-offset: 2px;
10056
10074
  }
@@ -10165,25 +10183,144 @@ li.muka-listitem {
10165
10183
  }
10166
10184
 
10167
10185
 
10168
- /* EmojiPicker */
10169
- /* EmojiPicker Component Styles */
10186
+ /* EmptyState */
10187
+ /* EmptyState Component Styles - Using Muka Design Tokens */
10170
10188
 
10171
- .muka-emoji-picker {
10172
- display: grid;
10173
- grid-template-columns: repeat(8, 1fr);
10174
- gap: var(--spacing-1);
10175
- padding: var(--spacing-2);
10176
- max-height: 12rem;
10177
- overflow-y: auto;
10178
- background: var(--color-surface-level2);
10179
- border: var(--border-width-regular, 1px) solid var(--color-border-default);
10180
- border-radius: var(--radius-lg);
10181
- box-shadow: var(--menu-content-shadow, 0 4px 12px rgba(0, 0, 0, 0.12));
10189
+ .muka-emptystate {
10190
+ display: flex;
10191
+ flex-direction: column;
10192
+ align-items: center;
10193
+ justify-content: center;
10194
+ gap: var(--emptystate-container-gap);
10195
+ max-width: var(--emptystate-container-maxWidth);
10196
+ margin: 0 auto;
10197
+ text-align: center;
10182
10198
  }
10183
10199
 
10184
- .muka-emoji-picker__glyph {
10185
- font-size: 1.25rem;
10186
- line-height: 1;
10200
+ /* Alignment variants */
10201
+ .muka-emptystate--left {
10202
+ align-items: flex-start;
10203
+ text-align: left;
10204
+ }
10205
+
10206
+ /* Size variants */
10207
+ .muka-emptystate--sm {
10208
+ padding: var(--emptystate-container-padding-sm);
10209
+ }
10210
+
10211
+ .muka-emptystate--md {
10212
+ padding: var(--emptystate-container-padding-md);
10213
+ }
10214
+
10215
+ .muka-emptystate--lg {
10216
+ padding: var(--emptystate-container-padding-lg);
10217
+ }
10218
+
10219
+ /* Visual (icon or illustration) */
10220
+ .muka-emptystate__visual {
10221
+ display: flex;
10222
+ align-items: center;
10223
+ justify-content: center;
10224
+ color: var(--emptystate-icon-color);
10225
+ flex-shrink: 0;
10226
+ }
10227
+
10228
+ .muka-emptystate--sm .muka-emptystate__visual {
10229
+ width: var(--emptystate-icon-size-sm);
10230
+ height: var(--emptystate-icon-size-sm);
10231
+ }
10232
+
10233
+ .muka-emptystate--md .muka-emptystate__visual {
10234
+ width: var(--emptystate-icon-size-md);
10235
+ height: var(--emptystate-icon-size-md);
10236
+ }
10237
+
10238
+ .muka-emptystate--lg .muka-emptystate__visual {
10239
+ width: var(--emptystate-icon-size-lg);
10240
+ height: var(--emptystate-icon-size-lg);
10241
+ }
10242
+
10243
+ .muka-emptystate__visual svg {
10244
+ width: 100%;
10245
+ height: 100%;
10246
+ }
10247
+
10248
+ .muka-emptystate__visual img {
10249
+ width: 100%;
10250
+ height: 100%;
10251
+ object-fit: contain;
10252
+ }
10253
+
10254
+ /* Content */
10255
+ .muka-emptystate__content {
10256
+ display: flex;
10257
+ flex-direction: column;
10258
+ gap: var(--spacing-2);
10259
+ }
10260
+
10261
+ .muka-emptystate--left .muka-emptystate__content {
10262
+ align-items: flex-start;
10263
+ }
10264
+
10265
+ /* Title */
10266
+ .muka-emptystate__title {
10267
+ color: var(--emptystate-title-color);
10268
+ margin: 0;
10269
+ font-family: var(--text-heading-sm-fontFamily);
10270
+ font-weight: var(--text-heading-sm-fontWeight);
10271
+ font-size: var(--text-heading-sm-fontSize);
10272
+ line-height: var(--text-heading-sm-lineHeight);
10273
+ }
10274
+
10275
+ .muka-emptystate--sm .muka-emptystate__title {
10276
+ font-family: var(--text-label-lg-semibold-fontFamily);
10277
+ font-weight: var(--text-label-lg-semibold-fontWeight);
10278
+ font-size: var(--text-label-lg-semibold-fontSize);
10279
+ line-height: var(--text-label-lg-semibold-lineHeight);
10280
+ }
10281
+
10282
+ .muka-emptystate--lg .muka-emptystate__title {
10283
+ font-family: var(--text-heading-md-fontFamily);
10284
+ font-weight: var(--text-heading-md-fontWeight);
10285
+ font-size: var(--text-heading-md-fontSize);
10286
+ line-height: var(--text-heading-md-lineHeight);
10287
+ }
10288
+
10289
+ /* Description */
10290
+ .muka-emptystate__description {
10291
+ color: var(--emptystate-description-color);
10292
+ margin: 0;
10293
+ font-family: var(--text-body-sm-regular-fontFamily);
10294
+ font-weight: var(--text-body-sm-regular-fontWeight);
10295
+ font-size: var(--text-body-sm-regular-fontSize);
10296
+ line-height: var(--text-body-sm-regular-lineHeight);
10297
+ }
10298
+
10299
+ .muka-emptystate--md .muka-emptystate__description {
10300
+ font-family: var(--text-body-base-regular-fontFamily);
10301
+ font-weight: var(--text-body-base-regular-fontWeight);
10302
+ font-size: var(--text-body-base-regular-fontSize);
10303
+ line-height: var(--text-body-base-regular-lineHeight);
10304
+ }
10305
+
10306
+ .muka-emptystate--lg .muka-emptystate__description {
10307
+ font-family: var(--text-body-lg-regular-fontFamily);
10308
+ font-weight: var(--text-body-lg-regular-fontWeight);
10309
+ font-size: var(--text-body-lg-regular-fontSize);
10310
+ line-height: var(--text-body-lg-regular-lineHeight);
10311
+ }
10312
+
10313
+ /* Actions */
10314
+ .muka-emptystate__actions {
10315
+ display: flex;
10316
+ gap: var(--emptystate-actions-gap);
10317
+ margin-top: var(--emptystate-actions-marginTop);
10318
+ flex-wrap: wrap;
10319
+ justify-content: center;
10320
+ }
10321
+
10322
+ .muka-emptystate--left .muka-emptystate__actions {
10323
+ justify-content: flex-start;
10187
10324
  }
10188
10325
 
10189
10326
 
@@ -10415,6 +10552,28 @@ li.muka-listitem {
10415
10552
  }
10416
10553
 
10417
10554
 
10555
+ /* EmojiPicker */
10556
+ /* EmojiPicker Component Styles */
10557
+
10558
+ .muka-emoji-picker {
10559
+ display: grid;
10560
+ grid-template-columns: repeat(8, 1fr);
10561
+ gap: var(--spacing-1);
10562
+ padding: var(--spacing-2);
10563
+ max-height: 12rem;
10564
+ overflow-y: auto;
10565
+ background: var(--color-surface-level2);
10566
+ border: var(--border-width-regular, 1px) solid var(--color-border-default);
10567
+ border-radius: var(--radius-lg);
10568
+ box-shadow: var(--menu-content-shadow, 0 4px 12px rgba(0, 0, 0, 0.12));
10569
+ }
10570
+
10571
+ .muka-emoji-picker__glyph {
10572
+ font-size: 1.25rem;
10573
+ line-height: 1;
10574
+ }
10575
+
10576
+
10418
10577
  /* Drawer */
10419
10578
  /* Drawer Component Styles */
10420
10579
 
@@ -11148,156 +11307,15 @@ li.muka-listitem {
11148
11307
  }
11149
11308
 
11150
11309
 
11151
- /* EmptyState */
11152
- /* EmptyState Component Styles - Using Muka Design Tokens */
11310
+ /* DatePicker */
11311
+ /* DatePicker — compact native date field. */
11312
+ /* Field/label/helper styling is inherited from ../Input/Input.css. */
11153
11313
 
11154
- .muka-emptystate {
11155
- display: flex;
11156
- flex-direction: column;
11157
- align-items: center;
11158
- justify-content: center;
11159
- gap: var(--emptystate-container-gap);
11160
- max-width: var(--emptystate-container-maxWidth);
11161
- margin: 0 auto;
11162
- text-align: center;
11163
- }
11164
-
11165
- /* Alignment variants */
11166
- .muka-emptystate--left {
11167
- align-items: flex-start;
11168
- text-align: left;
11169
- }
11170
-
11171
- /* Size variants */
11172
- .muka-emptystate--sm {
11173
- padding: var(--emptystate-container-padding-sm);
11174
- }
11175
-
11176
- .muka-emptystate--md {
11177
- padding: var(--emptystate-container-padding-md);
11178
- }
11179
-
11180
- .muka-emptystate--lg {
11181
- padding: var(--emptystate-container-padding-lg);
11182
- }
11183
-
11184
- /* Visual (icon or illustration) */
11185
- .muka-emptystate__visual {
11186
- display: flex;
11187
- align-items: center;
11188
- justify-content: center;
11189
- color: var(--emptystate-icon-color);
11190
- flex-shrink: 0;
11191
- }
11192
-
11193
- .muka-emptystate--sm .muka-emptystate__visual {
11194
- width: var(--emptystate-icon-size-sm);
11195
- height: var(--emptystate-icon-size-sm);
11196
- }
11197
-
11198
- .muka-emptystate--md .muka-emptystate__visual {
11199
- width: var(--emptystate-icon-size-md);
11200
- height: var(--emptystate-icon-size-md);
11201
- }
11202
-
11203
- .muka-emptystate--lg .muka-emptystate__visual {
11204
- width: var(--emptystate-icon-size-lg);
11205
- height: var(--emptystate-icon-size-lg);
11206
- }
11207
-
11208
- .muka-emptystate__visual svg {
11209
- width: 100%;
11210
- height: 100%;
11211
- }
11212
-
11213
- .muka-emptystate__visual img {
11214
- width: 100%;
11215
- height: 100%;
11216
- object-fit: contain;
11217
- }
11218
-
11219
- /* Content */
11220
- .muka-emptystate__content {
11221
- display: flex;
11222
- flex-direction: column;
11223
- gap: var(--spacing-2);
11224
- }
11225
-
11226
- .muka-emptystate--left .muka-emptystate__content {
11227
- align-items: flex-start;
11228
- }
11229
-
11230
- /* Title */
11231
- .muka-emptystate__title {
11232
- color: var(--emptystate-title-color);
11233
- margin: 0;
11234
- font-family: var(--text-heading-sm-fontFamily);
11235
- font-weight: var(--text-heading-sm-fontWeight);
11236
- font-size: var(--text-heading-sm-fontSize);
11237
- line-height: var(--text-heading-sm-lineHeight);
11238
- }
11239
-
11240
- .muka-emptystate--sm .muka-emptystate__title {
11241
- font-family: var(--text-label-lg-semibold-fontFamily);
11242
- font-weight: var(--text-label-lg-semibold-fontWeight);
11243
- font-size: var(--text-label-lg-semibold-fontSize);
11244
- line-height: var(--text-label-lg-semibold-lineHeight);
11245
- }
11246
-
11247
- .muka-emptystate--lg .muka-emptystate__title {
11248
- font-family: var(--text-heading-md-fontFamily);
11249
- font-weight: var(--text-heading-md-fontWeight);
11250
- font-size: var(--text-heading-md-fontSize);
11251
- line-height: var(--text-heading-md-lineHeight);
11252
- }
11253
-
11254
- /* Description */
11255
- .muka-emptystate__description {
11256
- color: var(--emptystate-description-color);
11257
- margin: 0;
11258
- font-family: var(--text-body-sm-regular-fontFamily);
11259
- font-weight: var(--text-body-sm-regular-fontWeight);
11260
- font-size: var(--text-body-sm-regular-fontSize);
11261
- line-height: var(--text-body-sm-regular-lineHeight);
11262
- }
11263
-
11264
- .muka-emptystate--md .muka-emptystate__description {
11265
- font-family: var(--text-body-base-regular-fontFamily);
11266
- font-weight: var(--text-body-base-regular-fontWeight);
11267
- font-size: var(--text-body-base-regular-fontSize);
11268
- line-height: var(--text-body-base-regular-lineHeight);
11269
- }
11270
-
11271
- .muka-emptystate--lg .muka-emptystate__description {
11272
- font-family: var(--text-body-lg-regular-fontFamily);
11273
- font-weight: var(--text-body-lg-regular-fontWeight);
11274
- font-size: var(--text-body-lg-regular-fontSize);
11275
- line-height: var(--text-body-lg-regular-lineHeight);
11276
- }
11277
-
11278
- /* Actions */
11279
- .muka-emptystate__actions {
11280
- display: flex;
11281
- gap: var(--emptystate-actions-gap);
11282
- margin-top: var(--emptystate-actions-marginTop);
11283
- flex-wrap: wrap;
11284
- justify-content: center;
11285
- }
11286
-
11287
- .muka-emptystate--left .muka-emptystate__actions {
11288
- justify-content: flex-start;
11289
- }
11290
-
11291
-
11292
- /* DatePicker */
11293
- /* DatePicker — compact native date field. */
11294
- /* Field/label/helper styling is inherited from ../Input/Input.css. */
11295
-
11296
- /* Adopt the field typography on the native date input. */
11297
- .muka-datepicker__field .muka-input__native {
11298
- font-family: var(--text-input-md-fontFamily);
11299
- font-size: var(--text-input-md-fontSize);
11300
- line-height: var(--text-input-md-lineHeight);
11314
+ /* Adopt the field typography on the native date input. */
11315
+ .muka-datepicker__field .muka-input__native {
11316
+ font-family: var(--text-input-md-fontFamily);
11317
+ font-size: var(--text-input-md-fontSize);
11318
+ line-height: var(--text-input-md-lineHeight);
11301
11319
  }
11302
11320
 
11303
11321
  .muka-datepicker__field--sm .muka-input__native {
@@ -12641,89 +12659,256 @@ li.muka-listitem {
12641
12659
  }
12642
12660
 
12643
12661
 
12644
- /* ChatPhotoGrid */
12645
- /* ChatPhotoGrid Component Styles */
12646
-
12647
- /*
12648
- * The grid clips to its own radius and the tiles stay square, so only the four
12649
- * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12650
- */
12651
- .muka-chat-photo-grid {
12652
- display: grid;
12653
- gap: var(--chatphotogrid-gap);
12654
- width: 100%;
12655
- min-width: 0;
12656
- overflow: hidden;
12657
- border-radius: var(--chatphotogrid-radius);
12658
- }
12659
-
12660
- /* ─── Tiles ────────────────────────────────────────────── */
12661
-
12662
- .muka-chat-photo-grid__tile {
12663
- position: relative;
12664
- display: block;
12665
- overflow: hidden;
12666
- min-width: 0;
12667
- padding: 0;
12668
- margin: 0;
12669
- border: none;
12670
- background-color: var(--chatphotogrid-color-placeholder);
12671
- aspect-ratio: 1 / 1;
12672
- }
12662
+ /* Checkbox */
12663
+ /* Checkbox Component Styles - Using Muka Design Tokens */
12673
12664
 
12674
- button.muka-chat-photo-grid__tile {
12665
+ /* Wrapper - clickable label container */
12666
+ .muka-checkbox {
12667
+ display: inline-flex;
12668
+ align-items: center;
12669
+ gap: var(--spacing-4);
12675
12670
  cursor: pointer;
12676
- appearance: none;
12671
+ user-select: none;
12677
12672
  }
12678
12673
 
12679
- button.muka-chat-photo-grid__tile:focus-visible {
12680
- outline: var(--border-width-bold) solid var(--color-border-focus);
12681
- /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12682
- outline-offset: calc(-1 * var(--border-width-bold));
12674
+ .muka-checkbox--disabled {
12675
+ cursor: not-allowed;
12676
+ opacity: 0.6;
12683
12677
  }
12684
12678
 
12685
- .muka-chat-photo-grid__image {
12686
- display: block;
12687
- width: 100%;
12688
- height: 100%;
12689
- object-fit: cover;
12679
+ /* Control container */
12680
+ .muka-checkbox__control {
12681
+ position: relative;
12682
+ display: inline-flex;
12683
+ align-items: center;
12684
+ justify-content: center;
12685
+ flex-shrink: 0;
12690
12686
  }
12691
12687
 
12692
- /* ─── Overflow tile ────────────────────────────────────── */
12693
-
12694
- .muka-chat-photo-grid__overflow {
12688
+ /* Hidden native input */
12689
+ .muka-checkbox__input {
12695
12690
  position: absolute;
12696
- inset: 0;
12691
+ width: 1px;
12692
+ height: 1px;
12693
+ padding: 0;
12694
+ margin: -1px;
12695
+ overflow: hidden;
12696
+ clip: rect(0, 0, 0, 0);
12697
+ white-space: nowrap;
12698
+ border: 0;
12699
+ }
12700
+
12701
+ /* Visual indicator (square) */
12702
+ .muka-checkbox__indicator {
12697
12703
  display: flex;
12698
12704
  align-items: center;
12699
12705
  justify-content: center;
12700
- background-color: var(--chatphotogrid-color-overflow-background);
12701
- color: var(--chatphotogrid-color-overflow-foreground);
12702
- font-family: var(--text-body-2xl-regular-fontFamily);
12703
- font-weight: var(--text-body-2xl-regular-fontWeight);
12704
- font-size: var(--text-body-2xl-regular-fontSize);
12705
- line-height: var(--text-body-2xl-regular-lineHeight);
12706
+ width: var(--checkbox-size-default);
12707
+ height: var(--checkbox-size-default);
12708
+ border-radius: var(--checkbox-radius);
12709
+ background-color: var(--checkbox-color-default-background);
12710
+ border: var(--border-width-regular) solid var(--checkbox-color-default-border);
12711
+ transition: all 0.15s ease;
12712
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
12706
12713
  }
12707
12714
 
12708
- /* ─── Layouts ──────────────────────────────────────────── */
12715
+ /* Size variants */
12716
+ .muka-checkbox--sm .muka-checkbox__indicator {
12717
+ width: var(--checkbox-size-sm);
12718
+ height: var(--checkbox-size-sm);
12719
+ }
12709
12720
 
12710
- .muka-chat-photo-grid--1 {
12711
- grid-template-columns: 1fr;
12721
+ .muka-checkbox--lg .muka-checkbox__indicator {
12722
+ width: var(--checkbox-size-lg);
12723
+ height: var(--checkbox-size-lg);
12712
12724
  }
12713
12725
 
12714
- .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12715
- aspect-ratio: 4 / 3;
12726
+ /* Icon inside checkbox */
12727
+ .muka-checkbox__icon {
12728
+ width: var(--checkbox-icon-size-default);
12729
+ height: var(--checkbox-icon-size-default);
12730
+ color: var(--checkbox-color-default-icon);
12731
+ opacity: 0;
12732
+ transform: scale(0.8);
12733
+ transition: opacity 0.15s ease, transform 0.15s ease;
12716
12734
  }
12717
12735
 
12718
- .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12719
- aspect-ratio: 3 / 4;
12736
+ .muka-checkbox--sm .muka-checkbox__icon {
12737
+ width: var(--checkbox-icon-size-sm);
12738
+ height: var(--checkbox-icon-size-sm);
12720
12739
  }
12721
12740
 
12722
- .muka-chat-photo-grid--2 {
12723
- grid-template-columns: repeat(2, 1fr);
12741
+ .muka-checkbox--lg .muka-checkbox__icon {
12742
+ width: var(--checkbox-icon-size-lg);
12743
+ height: var(--checkbox-icon-size-lg);
12724
12744
  }
12725
12745
 
12726
- .muka-chat-photo-grid--3 {
12746
+ /* Hide indeterminate icon by default */
12747
+ .muka-checkbox__icon--indeterminate {
12748
+ position: absolute;
12749
+ }
12750
+
12751
+ /* Hover state - removed per design */
12752
+
12753
+ /* Focus state */
12754
+ .muka-checkbox__input:focus-visible + .muka-checkbox__indicator {
12755
+ outline: 2px solid var(--color-border-focus);
12756
+ outline-offset: 2px;
12757
+ }
12758
+
12759
+ /* Checked state */
12760
+ .muka-checkbox__input:checked + .muka-checkbox__indicator {
12761
+ background-color: var(--checkbox-color-checked-background);
12762
+ border-color: var(--checkbox-color-checked-border);
12763
+ box-shadow: none;
12764
+ }
12765
+
12766
+ .muka-checkbox__input:checked + .muka-checkbox__indicator .muka-checkbox__icon--check {
12767
+ color: var(--checkbox-color-checked-icon);
12768
+ opacity: 1;
12769
+ transform: scale(1);
12770
+ }
12771
+
12772
+ /* Indeterminate state */
12773
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator {
12774
+ background-color: var(--checkbox-color-checked-background);
12775
+ border-color: var(--checkbox-color-checked-border);
12776
+ box-shadow: none;
12777
+ }
12778
+
12779
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--check {
12780
+ opacity: 0;
12781
+ }
12782
+
12783
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12784
+ color: var(--checkbox-color-checked-icon);
12785
+ opacity: 1;
12786
+ transform: scale(1);
12787
+ }
12788
+
12789
+ /* Disabled state */
12790
+ .muka-checkbox--disabled .muka-checkbox__indicator {
12791
+ background-color: var(--checkbox-color-disabled-background);
12792
+ border-color: var(--checkbox-color-disabled-border);
12793
+ box-shadow: none;
12794
+ }
12795
+
12796
+ .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12797
+ .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12798
+ color: var(--checkbox-color-disabled-icon);
12799
+ }
12800
+
12801
+ /* Label text */
12802
+ .muka-checkbox__label {
12803
+ font-family: var(--text-label-lg-regular-fontFamily);
12804
+ font-weight: var(--text-label-lg-regular-fontWeight);
12805
+ font-size: var(--text-label-lg-regular-fontSize);
12806
+ line-height: var(--text-label-lg-regular-lineHeight);
12807
+ color: var(--color-text-default-default);
12808
+ }
12809
+
12810
+ .muka-checkbox--sm .muka-checkbox__label {
12811
+ font-family: var(--text-label-md-regular-fontFamily);
12812
+ font-weight: var(--text-label-md-regular-fontWeight);
12813
+ font-size: var(--text-label-md-regular-fontSize);
12814
+ line-height: var(--text-label-md-regular-lineHeight);
12815
+ }
12816
+
12817
+ .muka-checkbox--lg .muka-checkbox__label {
12818
+ font-family: var(--text-label-xl-regular-fontFamily);
12819
+ font-weight: var(--text-label-xl-regular-fontWeight);
12820
+ font-size: var(--text-label-xl-regular-fontSize);
12821
+ line-height: var(--text-label-xl-regular-lineHeight);
12822
+ }
12823
+
12824
+ .muka-checkbox--disabled .muka-checkbox__label {
12825
+ color: var(--color-text-subtle-default);
12826
+ }
12827
+
12828
+
12829
+ /* ChatPhotoGrid */
12830
+ /* ChatPhotoGrid Component Styles */
12831
+
12832
+ /*
12833
+ * The grid clips to its own radius and the tiles stay square, so only the four
12834
+ * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12835
+ */
12836
+ .muka-chat-photo-grid {
12837
+ display: grid;
12838
+ gap: var(--chatphotogrid-gap);
12839
+ width: 100%;
12840
+ min-width: 0;
12841
+ overflow: hidden;
12842
+ border-radius: var(--chatphotogrid-radius);
12843
+ }
12844
+
12845
+ /* ─── Tiles ────────────────────────────────────────────── */
12846
+
12847
+ .muka-chat-photo-grid__tile {
12848
+ position: relative;
12849
+ display: block;
12850
+ overflow: hidden;
12851
+ min-width: 0;
12852
+ padding: 0;
12853
+ margin: 0;
12854
+ border: none;
12855
+ background-color: var(--chatphotogrid-color-placeholder);
12856
+ aspect-ratio: 1 / 1;
12857
+ }
12858
+
12859
+ button.muka-chat-photo-grid__tile {
12860
+ cursor: pointer;
12861
+ appearance: none;
12862
+ }
12863
+
12864
+ button.muka-chat-photo-grid__tile:focus-visible {
12865
+ outline: var(--border-width-bold) solid var(--color-border-focus);
12866
+ /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12867
+ outline-offset: calc(-1 * var(--border-width-bold));
12868
+ }
12869
+
12870
+ .muka-chat-photo-grid__image {
12871
+ display: block;
12872
+ width: 100%;
12873
+ height: 100%;
12874
+ object-fit: cover;
12875
+ }
12876
+
12877
+ /* ─── Overflow tile ────────────────────────────────────── */
12878
+
12879
+ .muka-chat-photo-grid__overflow {
12880
+ position: absolute;
12881
+ inset: 0;
12882
+ display: flex;
12883
+ align-items: center;
12884
+ justify-content: center;
12885
+ background-color: var(--chatphotogrid-color-overflow-background);
12886
+ color: var(--chatphotogrid-color-overflow-foreground);
12887
+ font-family: var(--text-body-2xl-regular-fontFamily);
12888
+ font-weight: var(--text-body-2xl-regular-fontWeight);
12889
+ font-size: var(--text-body-2xl-regular-fontSize);
12890
+ line-height: var(--text-body-2xl-regular-lineHeight);
12891
+ }
12892
+
12893
+ /* ─── Layouts ──────────────────────────────────────────── */
12894
+
12895
+ .muka-chat-photo-grid--1 {
12896
+ grid-template-columns: 1fr;
12897
+ }
12898
+
12899
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12900
+ aspect-ratio: 4 / 3;
12901
+ }
12902
+
12903
+ .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12904
+ aspect-ratio: 3 / 4;
12905
+ }
12906
+
12907
+ .muka-chat-photo-grid--2 {
12908
+ grid-template-columns: repeat(2, 1fr);
12909
+ }
12910
+
12911
+ .muka-chat-photo-grid--3 {
12727
12912
  grid-template-columns: repeat(3, 1fr);
12728
12913
  }
12729
12914
 
@@ -12817,939 +13002,892 @@ button.muka-chat-photo-grid__tile:focus-visible {
12817
13002
  }
12818
13003
 
12819
13004
 
12820
- /* Checkbox */
12821
- /* Checkbox Component Styles - Using Muka Design Tokens */
13005
+ /* ChatMessageList */
13006
+ /* ChatMessageList Component Styles */
12822
13007
 
12823
- /* Wrapper - clickable label container */
12824
- .muka-checkbox {
12825
- display: inline-flex;
12826
- align-items: center;
12827
- gap: var(--spacing-4);
12828
- cursor: pointer;
12829
- user-select: none;
13008
+ .muka-chat-message-list {
13009
+ flex: 1 1 auto;
13010
+ min-height: 0;
13011
+ width: 100%;
13012
+ overflow-x: clip;
13013
+ overflow-y: auto;
13014
+ background-color: var(--color-surface-level3);
13015
+ padding: var(--section-padding-vertical-default, var(--spacing-8))
13016
+ var(--section-padding-horizontal-default, var(--spacing-4));
13017
+ -webkit-overflow-scrolling: touch;
13018
+ overscroll-behavior: contain;
12830
13019
  }
12831
13020
 
12832
- .muka-checkbox--disabled {
12833
- cursor: not-allowed;
12834
- opacity: 0.6;
13021
+ .muka-chat-message-list__inner {
13022
+ display: flex;
13023
+ flex-direction: column;
13024
+ align-items: stretch;
13025
+ gap: var(--spacing-8);
13026
+ width: 100%;
13027
+ max-width: var(--chat-column-max-width);
13028
+ margin: 0 auto;
12835
13029
  }
12836
13030
 
12837
- /* Control container */
12838
- .muka-checkbox__control {
12839
- position: relative;
12840
- display: inline-flex;
12841
- align-items: center;
12842
- justify-content: center;
12843
- flex-shrink: 0;
12844
- }
13031
+ /* ─── Print ────────────────────────────────────────────── */
12845
13032
 
12846
- /* Hidden native input */
12847
- .muka-checkbox__input {
12848
- position: absolute;
12849
- width: 1px;
12850
- height: 1px;
12851
- padding: 0;
12852
- margin: -1px;
12853
- overflow: hidden;
12854
- clip: rect(0, 0, 0, 0);
12855
- white-space: nowrap;
12856
- border: 0;
13033
+ @media print {
13034
+ .muka-chat-message-list {
13035
+ overflow: visible;
13036
+ height: auto;
13037
+ max-height: none;
13038
+ background: none;
13039
+ padding: 0;
13040
+ }
13041
+
13042
+ .muka-chat-message-list__inner {
13043
+ max-width: 100%;
13044
+ }
12857
13045
  }
12858
13046
 
12859
- /* Visual indicator (square) */
12860
- .muka-checkbox__indicator {
13047
+
13048
+ /* ChatMessage */
13049
+ /* ChatMessage Component Styles */
13050
+
13051
+ .muka-chat-message {
12861
13052
  display: flex;
12862
- align-items: center;
12863
- justify-content: center;
12864
- width: var(--checkbox-size-default);
12865
- height: var(--checkbox-size-default);
12866
- border-radius: var(--checkbox-radius);
12867
- background-color: var(--checkbox-color-default-background);
12868
- border: var(--border-width-regular) solid var(--checkbox-color-default-border);
12869
- transition: all 0.15s ease;
12870
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
13053
+ flex-direction: column;
13054
+ width: 100%;
13055
+ max-width: 100%;
12871
13056
  }
12872
13057
 
12873
- /* Size variants */
12874
- .muka-checkbox--sm .muka-checkbox__indicator {
12875
- width: var(--checkbox-size-sm);
12876
- height: var(--checkbox-size-sm);
12877
- }
13058
+ /* ─── Row: avatar rail + bubble ────────────────────────── */
12878
13059
 
12879
- .muka-checkbox--lg .muka-checkbox__indicator {
12880
- width: var(--checkbox-size-lg);
12881
- height: var(--checkbox-size-lg);
12882
- }
12883
-
12884
- /* Icon inside checkbox */
12885
- .muka-checkbox__icon {
12886
- width: var(--checkbox-icon-size-default);
12887
- height: var(--checkbox-icon-size-default);
12888
- color: var(--checkbox-color-default-icon);
12889
- opacity: 0;
12890
- transform: scale(0.8);
12891
- transition: opacity 0.15s ease, transform 0.15s ease;
12892
- }
12893
-
12894
- .muka-checkbox--sm .muka-checkbox__icon {
12895
- width: var(--checkbox-icon-size-sm);
12896
- height: var(--checkbox-icon-size-sm);
12897
- }
12898
-
12899
- .muka-checkbox--lg .muka-checkbox__icon {
12900
- width: var(--checkbox-icon-size-lg);
12901
- height: var(--checkbox-icon-size-lg);
12902
- }
12903
-
12904
- /* Hide indeterminate icon by default */
12905
- .muka-checkbox__icon--indeterminate {
12906
- position: absolute;
12907
- }
12908
-
12909
- /* Hover state - removed per design */
12910
-
12911
- /* Focus state */
12912
- .muka-checkbox__input:focus-visible + .muka-checkbox__indicator {
12913
- outline: 2px solid var(--color-border-focus);
12914
- outline-offset: 2px;
12915
- }
12916
-
12917
- /* Checked state */
12918
- .muka-checkbox__input:checked + .muka-checkbox__indicator {
12919
- background-color: var(--checkbox-color-checked-background);
12920
- border-color: var(--checkbox-color-checked-border);
12921
- box-shadow: none;
12922
- }
12923
-
12924
- .muka-checkbox__input:checked + .muka-checkbox__indicator .muka-checkbox__icon--check {
12925
- color: var(--checkbox-color-checked-icon);
12926
- opacity: 1;
12927
- transform: scale(1);
12928
- }
12929
-
12930
- /* Indeterminate state */
12931
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator {
12932
- background-color: var(--checkbox-color-checked-background);
12933
- border-color: var(--checkbox-color-checked-border);
12934
- box-shadow: none;
12935
- }
12936
-
12937
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--check {
12938
- opacity: 0;
12939
- }
12940
-
12941
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12942
- color: var(--checkbox-color-checked-icon);
12943
- opacity: 1;
12944
- transform: scale(1);
12945
- }
12946
-
12947
- /* Disabled state */
12948
- .muka-checkbox--disabled .muka-checkbox__indicator {
12949
- background-color: var(--checkbox-color-disabled-background);
12950
- border-color: var(--checkbox-color-disabled-border);
12951
- box-shadow: none;
12952
- }
12953
-
12954
- .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12955
- .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12956
- color: var(--checkbox-color-disabled-icon);
12957
- }
12958
-
12959
- /* Label text */
12960
- .muka-checkbox__label {
12961
- font-family: var(--text-label-lg-regular-fontFamily);
12962
- font-weight: var(--text-label-lg-regular-fontWeight);
12963
- font-size: var(--text-label-lg-regular-fontSize);
12964
- line-height: var(--text-label-lg-regular-lineHeight);
12965
- color: var(--color-text-default-default);
12966
- }
12967
-
12968
- .muka-checkbox--sm .muka-checkbox__label {
12969
- font-family: var(--text-label-md-regular-fontFamily);
12970
- font-weight: var(--text-label-md-regular-fontWeight);
12971
- font-size: var(--text-label-md-regular-fontSize);
12972
- line-height: var(--text-label-md-regular-lineHeight);
12973
- }
12974
-
12975
- .muka-checkbox--lg .muka-checkbox__label {
12976
- font-family: var(--text-label-xl-regular-fontFamily);
12977
- font-weight: var(--text-label-xl-regular-fontWeight);
12978
- font-size: var(--text-label-xl-regular-fontSize);
12979
- line-height: var(--text-label-xl-regular-lineHeight);
12980
- }
12981
-
12982
- .muka-checkbox--disabled .muka-checkbox__label {
12983
- color: var(--color-text-subtle-default);
13060
+ .muka-chat-message__row {
13061
+ display: grid;
13062
+ grid-template-columns: minmax(0, 1fr);
13063
+ grid-template-areas: 'bubble';
13064
+ column-gap: var(--chatbubble-row-gap);
13065
+ width: 100%;
12984
13066
  }
12985
13067
 
12986
-
12987
- /* ChatMessageList */
12988
- /* ChatMessageList Component Styles */
12989
-
12990
- .muka-chat-message-list {
12991
- flex: 1 1 auto;
12992
- min-height: 0;
12993
- width: 100%;
12994
- overflow-x: clip;
12995
- overflow-y: auto;
12996
- background-color: var(--color-surface-level3);
12997
- padding: var(--section-padding-vertical-default, var(--spacing-8))
12998
- var(--section-padding-horizontal-default, var(--spacing-4));
12999
- -webkit-overflow-scrolling: touch;
13000
- overscroll-behavior: contain;
13068
+ .muka-chat-message--has-avatar .muka-chat-message__row {
13069
+ grid-template-columns: auto minmax(0, 1fr);
13070
+ grid-template-areas: 'rail bubble';
13001
13071
  }
13002
13072
 
13003
- .muka-chat-message-list__inner {
13073
+ .muka-chat-message__rail {
13074
+ grid-area: rail;
13075
+ /* Sits on the bubble's baseline (Figma 5355:44091) */
13076
+ align-self: end;
13004
13077
  display: flex;
13005
- flex-direction: column;
13006
- align-items: stretch;
13007
- gap: var(--spacing-8);
13008
- width: 100%;
13009
- max-width: var(--chat-column-max-width);
13010
- margin: 0 auto;
13078
+ justify-content: center;
13079
+ min-width: var(--chatbubble-avatar-size);
13011
13080
  }
13012
13081
 
13013
- /* ─── Print ────────────────────────────────────────────── */
13082
+ /*
13083
+ * The Small size in Figma (5373:44702) halves the avatar to 32px and tightens
13084
+ * the gap to the bubble. Size the avatar itself, not just the rail, so the
13085
+ * bubbles keep their alignment. The header row keeps its own gap.
13086
+ */
13087
+ @media (max-width: 1023px) {
13088
+ .muka-chat-message__row {
13089
+ column-gap: var(--chatbubble-row-gap-compact);
13090
+ }
13014
13091
 
13015
- @media print {
13016
- .muka-chat-message-list {
13017
- overflow: visible;
13018
- height: auto;
13019
- max-height: none;
13020
- background: none;
13021
- padding: 0;
13092
+ .muka-chat-message__rail {
13093
+ min-width: var(--chatbubble-avatar-size-compact);
13022
13094
  }
13023
13095
 
13024
- .muka-chat-message-list__inner {
13025
- max-width: 100%;
13096
+ /* Outweighs the avatar's own size class, which sets width/height directly */
13097
+ .muka-chat-message .muka-chat-message__rail > * {
13098
+ width: var(--chatbubble-avatar-size-compact);
13099
+ height: var(--chatbubble-avatar-size-compact);
13026
13100
  }
13027
13101
  }
13028
13102
 
13103
+ /* ─── Bubble surface ───────────────────────────────────── */
13029
13104
 
13030
- /* ChatComposer */
13031
- /* ChatComposer Component Styles */
13032
-
13033
- /*
13034
- * The composer is a bare, fill-width row: no padding, background, border or
13035
- * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
13036
- * container — see BottomBar's `chat` variant.
13037
- */
13038
- .muka-chat-composer {
13105
+ .muka-chat-message__bubble {
13106
+ grid-area: bubble;
13107
+ /*
13108
+ * Width follows the content: a single line hugs, and once the text wraps the
13109
+ * bubble fills to the shared max width. Robust to string or rich children —
13110
+ * no length measuring needed (Figma `Text length` on 5355:44091).
13111
+ */
13112
+ width: fit-content;
13113
+ /*
13114
+ * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
13115
+ * row; above it the fixed cap leaves room for own/peer alignment.
13116
+ */
13117
+ max-width: var(--chatbubble-max-width);
13118
+ position: relative;
13039
13119
  display: flex;
13040
13120
  flex-direction: column;
13041
- gap: var(--spacing-3);
13121
+ gap: var(--chatbubble-gap);
13122
+ padding: var(--chatbubble-padding-block) var(--chatbubble-padding-inline);
13123
+ border-radius: var(--chatbubble-radius);
13124
+ border: var(--border-width-regular) solid transparent;
13125
+ box-shadow: var(--shadow-level2);
13126
+ word-break: break-word;
13127
+ }
13128
+
13129
+ /* Media, an embed or an action stack always run the full bubble width. */
13130
+ .muka-chat-message--has-blocks .muka-chat-message__bubble {
13042
13131
  width: 100%;
13043
13132
  }
13044
13133
 
13045
- .muka-chat-composer--disabled {
13046
- opacity: 0.6;
13047
- pointer-events: none;
13134
+ .muka-chat-message--own .muka-chat-message__bubble {
13135
+ justify-self: end;
13048
13136
  }
13049
13137
 
13050
- /* ─── Input row ────────────────────────────────────────── */
13138
+ .muka-chat-message--own .muka-chat-message__bubble {
13139
+ background-color: var(--chatbubble-color-own-background);
13140
+ border-color: var(--chatbubble-color-own-border);
13141
+ color: var(--chatbubble-color-own-foreground);
13142
+ }
13051
13143
 
13052
- .muka-chat-composer__row {
13053
- display: flex;
13054
- width: 100%;
13055
- align-items: flex-end;
13056
- gap: var(--spacing-3);
13144
+ .muka-chat-message--peer .muka-chat-message__bubble {
13145
+ background-color: var(--chatbubble-color-peer-background);
13146
+ border-color: var(--chatbubble-color-peer-border);
13147
+ color: var(--chatbubble-color-peer-foreground);
13057
13148
  }
13058
13149
 
13059
- /* ─── Text field ───────────────────────────────────────── */
13150
+ .muka-chat-message--agent .muka-chat-message__bubble {
13151
+ background-color: var(--chatbubble-color-agent-background);
13152
+ border-color: var(--chatbubble-color-agent-border);
13153
+ color: var(--chatbubble-color-agent-foreground);
13154
+ }
13060
13155
 
13061
- .muka-chat-composer__field {
13156
+ /* ─── Header row (author · meta · time · badge) ────────── */
13157
+
13158
+ .muka-chat-message__header {
13062
13159
  display: flex;
13063
- flex: 1 1 auto;
13064
- min-width: 0;
13065
- box-sizing: border-box;
13160
+ flex-flow: row wrap;
13066
13161
  align-items: center;
13067
- gap: var(--spacing-1);
13068
- min-height: var(--input-field-height-lg, 48px);
13069
- padding: 0 var(--spacing-2);
13070
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
13071
- border-radius: var(--input-field-radius-lg);
13072
- background-color: var(--input-field-color-default-background);
13073
- transition: border-color 0.12s ease;
13162
+ gap: var(--chatbubble-row-gap);
13074
13163
  }
13075
13164
 
13076
- .muka-chat-composer__field:focus-within {
13077
- border-color: var(--input-field-color-focus-border, var(--color-action-default));
13165
+ .muka-chat-message__author {
13166
+ font-family: var(--text-body-base-bold-fontFamily);
13167
+ font-weight: var(--text-body-base-bold-fontWeight);
13168
+ font-size: var(--text-body-base-bold-fontSize);
13169
+ line-height: var(--text-body-base-bold-lineHeight);
13078
13170
  }
13079
13171
 
13080
- .muka-chat-composer__input {
13081
- flex: 1 1 auto;
13082
- min-width: 0;
13083
- width: 100%;
13084
- box-sizing: border-box;
13085
- resize: none;
13086
- border: none;
13087
- background: transparent;
13088
- outline: none;
13089
- padding: 0 var(--spacing-1);
13090
- color: var(--color-text-default-default);
13172
+ .muka-chat-message__author-meta {
13173
+ /* Inherits the variant's body colour from the bubble */
13174
+ color: inherit;
13091
13175
  font-family: var(--text-body-base-regular-fontFamily);
13092
13176
  font-weight: var(--text-body-base-regular-fontWeight);
13093
13177
  font-size: var(--text-body-base-regular-fontSize);
13094
13178
  line-height: var(--text-body-base-regular-lineHeight);
13095
- appearance: none;
13096
- -webkit-appearance: none;
13097
13179
  }
13098
13180
 
13099
- .muka-chat-composer__input::placeholder {
13100
- color: var(--color-text-subtle-default);
13101
- }
13102
-
13103
- /* Keep the in-field emoji button flush to the bottom-right as the field grows */
13104
- .muka-chat-composer__emoji {
13105
- flex-shrink: 0;
13106
- }
13107
-
13108
- /* ─── Recording bar ────────────────────────────────────── */
13109
-
13110
- .muka-chat-composer__recording {
13111
- display: flex;
13112
- flex: 1 1 auto;
13113
- min-width: 0;
13114
- box-sizing: border-box;
13181
+ .muka-chat-message__badge {
13182
+ display: inline-flex;
13115
13183
  align-items: center;
13116
- min-height: var(--input-field-height-lg, 48px);
13117
- padding: var(--card-padding-sm);
13118
- border: var(--border-width-regular) solid var(--card-color-default-border);
13119
- border-radius: var(--radius-lg);
13120
- background-color: var(--card-color-default-background);
13121
- }
13122
-
13123
- /* ─── Staged attachments strip ─────────────────────────── */
13124
-
13125
- .muka-chat-composer__attachments-strip {
13126
- position: relative;
13127
- width: 100%;
13128
13184
  }
13129
13185
 
13130
- .muka-chat-composer__attachments {
13131
- display: flex;
13132
- gap: var(--spacing-3);
13133
- overflow-x: auto;
13134
- scroll-behavior: smooth;
13135
- scrollbar-width: none;
13186
+ /*
13187
+ * Keep the first line of content clear of the absolutely positioned menu
13188
+ * button in the bubble's top-right corner.
13189
+ */
13190
+ .muka-chat-message--has-menu .muka-chat-message__header,
13191
+ .muka-chat-message--has-menu.muka-chat-message--no-header .muka-chat-message__message {
13192
+ padding-right: var(--spacing-10);
13136
13193
  }
13137
13194
 
13138
- .muka-chat-composer__attachments::-webkit-scrollbar {
13139
- display: none;
13195
+ /* …and the last line clear of the inset timestamp in the bottom-right corner */
13196
+ .muka-chat-message--has-timestamp .muka-chat-message__message {
13197
+ padding-right: var(--spacing-10);
13140
13198
  }
13141
13199
 
13142
- .muka-chat-composer__overflow {
13143
- position: absolute;
13144
- top: 50%;
13145
- right: var(--spacing-2);
13146
- transform: translateY(-50%);
13200
+ /* ─── Body ─────────────────────────────────────────────── */
13201
+
13202
+ .muka-chat-message__body {
13203
+ display: flex;
13204
+ flex-direction: column;
13205
+ gap: var(--chatbubble-gap);
13206
+ min-width: 0;
13147
13207
  }
13148
13208
 
13149
- /* ─── Print ────────────────────────────────────────────── */
13209
+ .muka-chat-message__media {
13210
+ min-width: 0;
13211
+ }
13150
13212
 
13151
- @media print {
13152
- .muka-chat-composer {
13153
- display: none;
13154
- }
13213
+ .muka-chat-message__message {
13214
+ font-family: var(--text-body-base-regular-fontFamily);
13215
+ font-weight: var(--text-body-base-regular-fontWeight);
13216
+ font-size: var(--text-body-base-regular-fontSize);
13217
+ line-height: var(--text-body-base-regular-lineHeight);
13218
+ white-space: pre-wrap;
13219
+ word-break: break-word;
13155
13220
  }
13156
13221
 
13222
+ /* Empty message block should not add a gap of its own */
13223
+ .muka-chat-message__message:empty {
13224
+ display: none;
13225
+ }
13157
13226
 
13158
- /* ChatAttachmentChip */
13159
- /* ChatAttachmentChip Component Styles */
13227
+ /* ─── Embedded card ────────────────────────────────────── */
13160
13228
 
13161
- .muka-chat-attachment-chip {
13229
+ .muka-chat-message__embed {
13162
13230
  position: relative;
13163
- display: inline-flex;
13164
- align-items: center;
13165
- gap: var(--spacing-1);
13166
- max-width: 240px;
13167
- padding: var(--spacing-2) var(--spacing-3);
13168
- background-color: var(--color-surface-level1);
13169
- border: var(--border-width-regular) solid var(--color-border-default);
13170
- border-radius: var(--radius-md);
13171
- overflow: hidden;
13231
+ display: flex;
13232
+ flex-direction: column;
13233
+ gap: var(--chatbubble-embed-gap);
13234
+ /* The card is inset from the blocks above and below it (Figma 5289:40562) */
13235
+ margin-block: var(--chatbubble-embed-margin-block);
13236
+ padding: var(--chatbubble-embed-padding-block) var(--chatbubble-embed-padding-inline);
13237
+ border-radius: var(--chatbubble-embed-radius);
13238
+ border: var(--border-width-regular) solid transparent;
13172
13239
  }
13173
13240
 
13174
- .muka-chat-attachment-chip--uploading {
13175
- padding-bottom: calc(var(--spacing-2) + 2px);
13241
+ /*
13242
+ * The embed sits on the raised surface of its author's role, one step apart
13243
+ * from the bubble it is nested in, and reuses that role's border colour.
13244
+ */
13245
+ .muka-chat-message--own .muka-chat-message__embed {
13246
+ background-color: var(--chatbubble-embed-color-own-background);
13247
+ border-color: var(--chatbubble-embed-color-own-border);
13248
+ color: var(--chatbubble-embed-color-own-foreground);
13176
13249
  }
13177
13250
 
13178
- .muka-chat-attachment-chip--error {
13179
- border-color: var(--color-state-error-default, var(--color-text-default-default));
13251
+ .muka-chat-message--peer .muka-chat-message__embed {
13252
+ background-color: var(--chatbubble-embed-color-peer-background);
13253
+ border-color: var(--chatbubble-embed-color-peer-border);
13254
+ color: var(--chatbubble-embed-color-peer-foreground);
13180
13255
  }
13181
13256
 
13182
- .muka-chat-attachment-chip--disabled {
13183
- opacity: 0.5;
13184
- pointer-events: none;
13257
+ .muka-chat-message--agent .muka-chat-message__embed {
13258
+ background-color: var(--chatbubble-embed-color-agent-background);
13259
+ border-color: var(--chatbubble-embed-color-agent-border);
13260
+ color: var(--chatbubble-embed-color-agent-foreground);
13185
13261
  }
13186
13262
 
13187
- /* ─── Body (icon + text) ───────────────────────────────── */
13188
-
13189
- .muka-chat-attachment-chip__body {
13190
- display: inline-flex;
13191
- align-items: center;
13192
- gap: var(--spacing-2);
13263
+ .muka-chat-message__embed-content {
13264
+ display: flex;
13265
+ flex-direction: column;
13266
+ gap: var(--chatbubble-embed-gap);
13193
13267
  min-width: 0;
13194
- flex: 1 1 auto;
13195
- background: none;
13196
- border: none;
13197
- padding: 0;
13198
- margin: 0;
13199
- text-align: left;
13200
- color: inherit;
13201
- font: inherit;
13202
- cursor: default;
13203
- -webkit-tap-highlight-color: transparent;
13204
- }
13205
-
13206
- .muka-chat-attachment-chip--interactive .muka-chat-attachment-chip__body {
13207
- cursor: pointer;
13208
13268
  }
13209
13269
 
13210
- .muka-chat-attachment-chip--interactive .muka-chat-attachment-chip__body:focus-visible {
13211
- outline: 2px solid var(--color-action-default);
13212
- outline-offset: 2px;
13213
- border-radius: var(--radius-sm);
13270
+ .muka-chat-message__embed-copy {
13271
+ position: absolute;
13272
+ top: var(--chatbubble-embed-padding-block);
13273
+ right: var(--chatbubble-embed-padding-inline);
13214
13274
  }
13215
13275
 
13216
- .muka-chat-attachment-chip__icon {
13217
- display: inline-flex;
13218
- align-items: center;
13219
- justify-content: center;
13220
- flex-shrink: 0;
13221
- color: var(--color-text-subtle-default);
13222
- }
13276
+ /* ─── Stacked full-width action buttons ────────────────── */
13223
13277
 
13224
- .muka-chat-attachment-chip__text {
13278
+ .muka-chat-message__action-stack {
13225
13279
  display: flex;
13226
13280
  flex-direction: column;
13227
- min-width: 0;
13228
- flex: 1 1 auto;
13281
+ gap: var(--chatbubble-action-stack-gap);
13229
13282
  }
13230
13283
 
13231
- .muka-chat-attachment-chip__name {
13232
- color: var(--color-text-default-default);
13233
- font-family: var(--text-body-sm-regular-fontFamily);
13234
- font-weight: var(--text-body-sm-regular-fontWeight);
13235
- font-size: var(--text-body-sm-regular-fontSize);
13236
- line-height: var(--text-body-sm-regular-lineHeight);
13284
+ /* ─── Inset timestamp ──────────────────────────────────── */
13285
+
13286
+ /*
13287
+ * Every author puts its timestamp in the bubble's bottom-right corner, below
13288
+ * the message — never in the header row (Figma 5355:44091).
13289
+ */
13290
+
13291
+ .muka-chat-message__timestamp {
13292
+ color: var(--chatbubble-color-timestamp);
13293
+ font-family: var(--text-body-xs-regular-fontFamily);
13294
+ font-weight: var(--text-body-xs-regular-fontWeight);
13295
+ font-size: var(--text-body-xs-regular-fontSize);
13296
+ line-height: var(--text-body-xs-regular-lineHeight);
13237
13297
  white-space: nowrap;
13238
- overflow: hidden;
13239
- text-overflow: ellipsis;
13240
13298
  }
13241
13299
 
13242
- .muka-chat-attachment-chip__meta {
13243
- color: var(--color-text-subtle-default);
13244
- font-family: var(--text-body-sm-regular-fontFamily);
13245
- font-weight: var(--text-body-sm-regular-fontWeight);
13246
- font-size: var(--text-body-sm-regular-fontSize);
13247
- line-height: var(--text-body-sm-regular-lineHeight);
13248
- white-space: nowrap;
13249
- overflow: hidden;
13250
- text-overflow: ellipsis;
13300
+ /*
13301
+ * Pinned to the corner rather than stacked below the message, so a one-line
13302
+ * message stays one line tall. The message reserves the width it needs.
13303
+ */
13304
+ .muka-chat-message__timestamp--inset {
13305
+ position: absolute;
13306
+ right: var(--spacing-2);
13307
+ bottom: var(--spacing-1);
13251
13308
  }
13252
13309
 
13253
- .muka-chat-attachment-chip--error .muka-chat-attachment-chip__meta {
13254
- color: var(--color-state-error-default, var(--color-text-default-default));
13310
+ /*
13311
+ * When the last block in the body is media, an embed or an action stack (not
13312
+ * trailing text), it runs the full width, so reserve a line below for the inset
13313
+ * timestamp. A message that ends in text clears the corner inline instead (see
13314
+ * `__message` padding-right above), so it needs no extra bottom space.
13315
+ */
13316
+ .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
13317
+ padding-bottom: var(--text-body-xs-regular-lineHeight);
13255
13318
  }
13256
13319
 
13257
- /* ─── Remove button ────────────────────────────────────── */
13320
+ /* ─── Menu affordance ──────────────────────────────────── */
13258
13321
 
13259
- .muka-chat-attachment-chip__remove {
13260
- display: inline-flex;
13261
- align-items: center;
13262
- justify-content: center;
13263
- width: 20px;
13264
- height: 20px;
13265
- border: none;
13266
- background: none;
13267
- padding: 0;
13268
- border-radius: var(--radius-sm);
13269
- cursor: pointer;
13270
- color: var(--color-text-subtle-default);
13271
- flex-shrink: 0;
13272
- -webkit-tap-highlight-color: transparent;
13322
+ /*
13323
+ * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
13324
+ * everywhere, and pinned while its menu is open. On touch the equivalent
13325
+ * affordance is a long-press on the bubble, which opens an ActionSheet.
13326
+ */
13327
+ .muka-chat-message__menu {
13328
+ position: absolute;
13329
+ top: var(--spacing-1);
13330
+ right: var(--spacing-1);
13331
+ opacity: 0;
13332
+ pointer-events: none;
13273
13333
  }
13274
13334
 
13275
- .muka-chat-attachment-chip__remove:hover:not(:disabled) {
13276
- color: var(--color-text-default-default);
13277
- background-color: var(--color-surface-level2);
13335
+ .muka-chat-message__menu:focus-within,
13336
+ .muka-chat-message--menu-open .muka-chat-message__menu {
13337
+ opacity: 1;
13338
+ pointer-events: auto;
13278
13339
  }
13279
13340
 
13280
- .muka-chat-attachment-chip__remove:focus-visible {
13281
- outline: 2px solid var(--color-action-default);
13282
- outline-offset: 2px;
13341
+ @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
13342
+ .muka-chat-message__bubble:hover .muka-chat-message__menu {
13343
+ opacity: 1;
13344
+ pointer-events: auto;
13345
+ }
13283
13346
  }
13284
13347
 
13285
- .muka-chat-attachment-chip__remove:disabled {
13286
- cursor: not-allowed;
13287
- opacity: 0.5;
13348
+ /* Suppress iOS Safari's own callout so the long-press sheet can take over */
13349
+ @media (pointer: coarse) {
13350
+ .muka-chat-message--has-menu .muka-chat-message__bubble {
13351
+ -webkit-touch-callout: none;
13352
+ }
13288
13353
  }
13289
13354
 
13290
- /* ─── Progress bar ─────────────────────────────────────── */
13355
+ /* ─── Print ────────────────────────────────────────────── */
13291
13356
 
13292
- .muka-chat-attachment-chip__progress {
13293
- position: absolute;
13294
- left: 0;
13295
- right: 0;
13296
- bottom: 0;
13297
- height: 2px;
13298
- background-color: var(--color-surface-level2);
13299
- overflow: hidden;
13300
- }
13357
+ @media print {
13358
+ .muka-chat-message__bubble {
13359
+ box-shadow: none;
13360
+ break-inside: avoid;
13361
+ print-color-adjust: exact;
13362
+ -webkit-print-color-adjust: exact;
13363
+ }
13301
13364
 
13302
- .muka-chat-attachment-chip__progress-fill {
13303
- display: block;
13304
- height: 100%;
13305
- background-color: var(--color-action-default);
13306
- transition: width 0.16s ease;
13307
- }
13365
+ .muka-chat-message__embed {
13366
+ break-inside: avoid;
13367
+ print-color-adjust: exact;
13368
+ -webkit-print-color-adjust: exact;
13369
+ }
13308
13370
 
13309
- .muka-chat-attachment-chip--error .muka-chat-attachment-chip__progress-fill {
13310
- background-color: var(--color-state-error-default, var(--color-text-default-default));
13371
+ .muka-chat-message__menu,
13372
+ .muka-chat-message__embed-copy,
13373
+ .muka-chat-message__action-stack {
13374
+ display: none;
13375
+ }
13311
13376
  }
13312
13377
 
13313
13378
 
13314
- /* Card */
13315
- /* Card Component Styles - Using Muka Design Tokens */
13379
+ /* ChatComposer */
13380
+ /* ChatComposer Component Styles */
13316
13381
 
13317
- .muka-card {
13318
- background-color: var(--card-color-default-background);
13319
- color: var(--card-color-default-foreground);
13320
- border: var(--border-width-regular) solid var(--card-color-default-border);
13321
- box-shadow: var(--card-shadow-default);
13322
- transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
13323
- overflow: hidden;
13382
+ /*
13383
+ * The composer is a bare, fill-width row: no padding, background, border or
13384
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
13385
+ * container — see BottomBar's `chat` variant.
13386
+ */
13387
+ .muka-chat-composer {
13388
+ display: flex;
13389
+ flex-direction: column;
13390
+ gap: var(--spacing-3);
13391
+ width: 100%;
13324
13392
  }
13325
13393
 
13326
- /* Padding variants */
13327
- .muka-card--padding-none {
13328
- padding: 0;
13394
+ .muka-chat-composer--disabled {
13395
+ opacity: 0.6;
13396
+ pointer-events: none;
13329
13397
  }
13330
13398
 
13331
- .muka-card--padding-sm {
13332
- padding: var(--card-padding-sm);
13333
- }
13399
+ /* ─── Input row (default layout) ───────────────────────── */
13334
13400
 
13335
- .muka-card--padding-md {
13336
- padding: var(--card-padding-md);
13401
+ .muka-chat-composer__row {
13402
+ display: flex;
13403
+ width: 100%;
13404
+ align-items: flex-end;
13405
+ gap: var(--spacing-3);
13337
13406
  }
13338
13407
 
13339
- .muka-card--padding-lg {
13340
- padding: var(--card-padding-lg);
13341
- }
13408
+ /* ─── Text field ───────────────────────────────────────── */
13342
13409
 
13343
- /* Radius variants */
13344
- .muka-card--radius-sm {
13345
- border-radius: var(--card-radius-sm);
13410
+ .muka-chat-composer__field {
13411
+ display: flex;
13412
+ flex: 1 1 auto;
13413
+ min-width: 0;
13414
+ box-sizing: border-box;
13415
+ align-items: center;
13416
+ gap: var(--spacing-1);
13417
+ min-height: var(--input-field-height-lg, 48px);
13418
+ padding: 0 var(--spacing-2);
13419
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
13420
+ border-radius: var(--input-field-radius-lg);
13421
+ background-color: var(--input-field-color-default-background);
13422
+ transition: border-color 0.12s ease;
13346
13423
  }
13347
13424
 
13348
- .muka-card--radius-md {
13349
- border-radius: var(--card-radius-md);
13425
+ .muka-chat-composer--options .muka-chat-composer__field {
13426
+ flex: 1 1 auto;
13427
+ width: auto;
13350
13428
  }
13351
13429
 
13352
- .muka-card--radius-lg {
13353
- border-radius: var(--card-radius-lg);
13430
+ /* Options input row: text field + mic / send beside it */
13431
+ .muka-chat-composer__options-input {
13432
+ display: flex;
13433
+ align-items: flex-end;
13434
+ gap: var(--spacing-3);
13435
+ width: 100%;
13354
13436
  }
13355
13437
 
13356
- /* Interactive variant */
13357
- .muka-card--interactive {
13358
- cursor: pointer;
13359
- user-select: none;
13438
+ .muka-chat-composer__field:focus-within {
13439
+ border-color: var(--input-field-color-focus-border, var(--color-action-default));
13360
13440
  }
13361
13441
 
13362
- .muka-card--interactive:hover {
13363
- background-color: var(--card-color-hover-background);
13364
- border-color: var(--card-color-hover-border);
13365
- box-shadow: var(--card-shadow-hover);
13442
+ .muka-chat-composer__input {
13443
+ flex: 1 1 auto;
13444
+ min-width: 0;
13445
+ width: 100%;
13446
+ box-sizing: border-box;
13447
+ resize: none;
13448
+ border: none;
13449
+ background: transparent;
13450
+ outline: none;
13451
+ padding: 0 var(--spacing-1);
13452
+ color: var(--color-text-default-default);
13453
+ font-family: var(--text-body-base-regular-fontFamily);
13454
+ font-weight: var(--text-body-base-regular-fontWeight);
13455
+ font-size: var(--text-body-base-regular-fontSize);
13456
+ line-height: var(--text-body-base-regular-lineHeight);
13457
+ appearance: none;
13458
+ -webkit-appearance: none;
13366
13459
  }
13367
13460
 
13368
- .muka-card--interactive:active,
13369
- .muka-card--interactive.muka-card--pressed {
13370
- background-color: var(--card-color-pressed-background);
13371
- border-color: var(--card-color-pressed-border);
13372
- box-shadow: var(--card-shadow-pressed);
13461
+ .muka-chat-composer__input::placeholder {
13462
+ color: var(--color-text-subtle-default);
13373
13463
  }
13374
13464
 
13375
- .muka-card--interactive:focus-visible {
13376
- outline: 2px solid var(--color-border-focus);
13377
- outline-offset: 2px;
13465
+ /* Keep the in-field emoji button flush to the bottom-right as the field grows */
13466
+ .muka-chat-composer__emoji {
13467
+ flex-shrink: 0;
13378
13468
  }
13379
13469
 
13380
- /* Selected variant */
13381
- .muka-card--selected {
13382
- background-color: var(--card-color-selected-background);
13383
- border-color: var(--card-color-selected-border);
13384
- border-width: var(--border-width-bold);
13385
- box-shadow: var(--card-shadow-selected);
13386
- }
13470
+ /* ─── Recording bar ────────────────────────────────────── */
13387
13471
 
13388
- /* Optional header (title + description) */
13389
- .muka-card__header {
13390
- margin-bottom: var(--spacing-4);
13472
+ .muka-chat-composer__recording {
13473
+ display: flex;
13474
+ flex: 1 1 auto;
13475
+ min-width: 0;
13476
+ box-sizing: border-box;
13477
+ align-items: center;
13478
+ min-height: var(--input-field-height-lg, 48px);
13479
+ padding: var(--card-padding-sm);
13480
+ border: var(--border-width-regular) solid var(--card-color-default-border);
13481
+ border-radius: var(--radius-lg);
13482
+ background-color: var(--card-color-default-background);
13391
13483
  }
13392
13484
 
13393
- .muka-card__title {
13394
- margin: 0;
13395
- color: var(--color-text-default-default);
13396
- font-family: var(--text-heading-xs-fontFamily);
13397
- font-weight: var(--text-heading-xs-fontWeight);
13398
- font-size: var(--text-heading-xs-fontSize);
13399
- line-height: var(--text-heading-xs-lineHeight);
13400
- letter-spacing: var(--text-heading-xs-letterSpacing);
13485
+ /* ─── Staged attachments strip ─────────────────────────── */
13486
+
13487
+ .muka-chat-composer__attachments-strip {
13488
+ position: relative;
13489
+ width: 100%;
13401
13490
  }
13402
13491
 
13403
- .muka-card__description {
13404
- margin: var(--spacing-1) 0 0;
13405
- color: var(--color-text-subtle-default);
13406
- font-family: var(--text-body-sm-regular-fontFamily);
13407
- font-weight: var(--text-body-sm-regular-fontWeight);
13408
- font-size: var(--text-body-sm-regular-fontSize);
13409
- line-height: var(--text-body-sm-regular-lineHeight);
13492
+ .muka-chat-composer__attachments {
13493
+ display: flex;
13494
+ gap: var(--spacing-3);
13495
+ overflow-x: auto;
13496
+ scroll-behavior: smooth;
13497
+ scrollbar-width: none;
13410
13498
  }
13411
13499
 
13412
- /* Hide divider on last list item inside card */
13413
- .muka-card > .muka-listitem:last-child > .muka-listitem__divider {
13500
+ .muka-chat-composer__attachments::-webkit-scrollbar {
13414
13501
  display: none;
13415
13502
  }
13416
13503
 
13417
- /* Disabled state */
13418
- .muka-card--disabled {
13419
- opacity: 0.5;
13420
- cursor: not-allowed;
13421
- pointer-events: none;
13504
+ .muka-chat-composer__overflow {
13505
+ position: absolute;
13506
+ top: 50%;
13507
+ right: var(--spacing-2);
13508
+ transform: translateY(-50%);
13422
13509
  }
13423
13510
 
13511
+ /* ─── Options mode (Figma State=Options / State7 / State8) ─ */
13424
13512
 
13425
- /* ChatMessage */
13426
- /* ChatMessage Component Styles */
13427
-
13428
- .muka-chat-message {
13513
+ .muka-chat-composer__prompt {
13429
13514
  display: flex;
13430
- flex-direction: column;
13515
+ align-items: flex-start;
13516
+ gap: var(--spacing-3);
13431
13517
  width: 100%;
13432
- max-width: 100%;
13433
13518
  }
13434
13519
 
13435
- /* ─── Row: avatar rail + bubble ────────────────────────── */
13436
-
13437
- .muka-chat-message__row {
13438
- display: grid;
13439
- grid-template-columns: minmax(0, 1fr);
13440
- grid-template-areas: 'bubble';
13441
- column-gap: var(--chatbubble-row-gap);
13442
- width: 100%;
13520
+ .muka-chat-composer__prompt-step {
13521
+ flex-shrink: 0;
13443
13522
  }
13444
13523
 
13445
- .muka-chat-message--has-avatar .muka-chat-message__row {
13446
- grid-template-columns: auto minmax(0, 1fr);
13447
- grid-template-areas: 'rail bubble';
13524
+ .muka-chat-composer__prompt-text {
13525
+ display: flex;
13526
+ flex-direction: column;
13527
+ gap: var(--spacing-1);
13528
+ min-width: 0;
13529
+ flex: 1 1 auto;
13448
13530
  }
13449
13531
 
13450
- .muka-chat-message__rail {
13451
- grid-area: rail;
13452
- /* Sits on the bubble's baseline (Figma 5355:44091) */
13453
- align-self: end;
13454
- display: flex;
13455
- justify-content: center;
13456
- min-width: var(--chatbubble-avatar-size);
13532
+ .muka-chat-composer__prompt-heading {
13533
+ color: var(--color-text-default-default);
13534
+ font-family: var(--text-heading-sm-fontFamily);
13535
+ font-weight: var(--text-heading-sm-fontWeight);
13536
+ font-size: var(--text-heading-sm-fontSize);
13537
+ line-height: var(--text-heading-sm-lineHeight);
13457
13538
  }
13458
13539
 
13459
- /*
13460
- * The Small size in Figma (5373:44702) halves the avatar to 32px and tightens
13461
- * the gap to the bubble. Size the avatar itself, not just the rail, so the
13462
- * bubbles keep their alignment. The header row keeps its own gap.
13463
- */
13464
- @media (max-width: 1023px) {
13465
- .muka-chat-message__row {
13466
- column-gap: var(--chatbubble-row-gap-compact);
13467
- }
13540
+ .muka-chat-composer__prompt-description {
13541
+ color: var(--color-text-subtle-default);
13542
+ font-family: var(--text-body-base-regular-fontFamily);
13543
+ font-weight: var(--text-body-base-regular-fontWeight);
13544
+ font-size: var(--text-body-base-regular-fontSize);
13545
+ line-height: var(--text-body-base-regular-lineHeight);
13546
+ }
13468
13547
 
13469
- .muka-chat-message__rail {
13470
- min-width: var(--chatbubble-avatar-size-compact);
13471
- }
13548
+ .muka-chat-composer__choices {
13549
+ width: 100%;
13550
+ }
13472
13551
 
13473
- /* Outweighs the avatar's own size class, which sets width/height directly */
13474
- .muka-chat-message .muka-chat-message__rail > * {
13475
- width: var(--chatbubble-avatar-size-compact);
13476
- height: var(--chatbubble-avatar-size-compact);
13477
- }
13552
+ .muka-chat-composer__choices-card {
13553
+ width: 100%;
13554
+ overflow: hidden;
13478
13555
  }
13479
13556
 
13480
- /* ─── Bubble surface ───────────────────────────────────── */
13557
+ /* Choice rows: the ListItem is the interactive control; the Radio/Checkbox is
13558
+ decorative for AT (aria-hidden) and sits in the leading slot. */
13559
+ .muka-chat-composer__choice-control {
13560
+ display: inline-flex;
13561
+ align-items: center;
13562
+ pointer-events: none;
13563
+ }
13481
13564
 
13482
- .muka-chat-message__bubble {
13483
- grid-area: bubble;
13484
- /*
13485
- * Width follows the content: a single line hugs, and once the text wraps the
13486
- * bubble fills to the shared max width. Robust to string or rich children —
13487
- * no length measuring needed (Figma `Text length` on 5355:44091).
13488
- */
13489
- width: fit-content;
13490
- /*
13491
- * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
13492
- * row; above it the fixed cap leaves room for own/peer alignment.
13493
- */
13494
- max-width: var(--chatbubble-max-width);
13565
+ .muka-chat-composer__choice-control .muka-radio,
13566
+ .muka-chat-composer__choice-control .muka-checkbox {
13567
+ pointer-events: none;
13568
+ }
13569
+
13570
+ /*
13571
+ * Multi-step footer (Figma Canned responses). Previous (muted) | centered
13572
+ * progress | Next/Send (muted when not ready, primary when ready — never
13573
+ * disabled for unreadiness).
13574
+ */
13575
+ .muka-chat-composer__footer {
13495
13576
  position: relative;
13496
13577
  display: flex;
13497
- flex-direction: column;
13498
- gap: var(--chatbubble-gap);
13499
- padding: var(--chatbubble-padding-block) var(--chatbubble-padding-inline);
13500
- border-radius: var(--chatbubble-radius);
13501
- border: var(--border-width-regular) solid transparent;
13502
- box-shadow: var(--shadow-level2);
13503
- word-break: break-word;
13578
+ align-items: center;
13579
+ justify-content: space-between;
13580
+ gap: var(--spacing-2);
13581
+ width: 100%;
13582
+ min-height: var(--input-field-height-lg, 48px);
13504
13583
  }
13505
13584
 
13506
- /* Media, an embed or an action stack always run the full bubble width. */
13507
- .muka-chat-message--has-blocks .muka-chat-message__bubble {
13508
- width: 100%;
13585
+ .muka-chat-composer__footer-spacer {
13586
+ display: inline-block;
13587
+ /* Approximate width of a Previous button so Next stays right-aligned when
13588
+ there is no back control (step 1 of N). */
13589
+ min-width: 7rem;
13590
+ flex-shrink: 0;
13509
13591
  }
13510
13592
 
13511
- .muka-chat-message--own .muka-chat-message__bubble {
13512
- justify-self: end;
13593
+ .muka-chat-composer__footer-back {
13594
+ flex-shrink: 0;
13595
+ z-index: 1;
13513
13596
  }
13514
13597
 
13515
- .muka-chat-message--own .muka-chat-message__bubble {
13516
- background-color: var(--chatbubble-color-own-background);
13517
- border-color: var(--chatbubble-color-own-border);
13518
- color: var(--chatbubble-color-own-foreground);
13598
+ .muka-chat-composer__footer-action {
13599
+ flex-shrink: 0;
13600
+ margin-left: auto;
13601
+ z-index: 1;
13519
13602
  }
13520
13603
 
13521
- .muka-chat-message--peer .muka-chat-message__bubble {
13522
- background-color: var(--chatbubble-color-peer-background);
13523
- border-color: var(--chatbubble-color-peer-border);
13524
- color: var(--chatbubble-color-peer-foreground);
13604
+ .muka-chat-composer__progress {
13605
+ position: absolute;
13606
+ left: 50%;
13607
+ top: 50%;
13608
+ transform: translate(-50%, -50%);
13609
+ color: var(--color-text-subtle-default);
13610
+ font-family: var(--text-label-lg-regular-fontFamily, var(--text-body-base-regular-fontFamily));
13611
+ font-weight: var(--text-label-lg-regular-fontWeight, var(--text-body-base-regular-fontWeight));
13612
+ font-size: var(--text-label-lg-regular-fontSize, var(--text-body-base-regular-fontSize));
13613
+ line-height: var(--text-label-lg-regular-lineHeight, var(--text-body-base-regular-lineHeight));
13614
+ white-space: nowrap;
13615
+ pointer-events: none;
13525
13616
  }
13526
13617
 
13527
- .muka-chat-message--agent .muka-chat-message__bubble {
13528
- background-color: var(--chatbubble-color-agent-background);
13529
- border-color: var(--chatbubble-color-agent-border);
13530
- color: var(--chatbubble-color-agent-foreground);
13618
+ /* ─── Print ────────────────────────────────────────────── */
13619
+
13620
+ @media print {
13621
+ .muka-chat-composer {
13622
+ display: none;
13623
+ }
13531
13624
  }
13532
13625
 
13533
- /* ─── Header row (author · meta · time · badge) ────────── */
13534
13626
 
13535
- .muka-chat-message__header {
13536
- display: flex;
13537
- flex-flow: row wrap;
13627
+ /* ChatAttachmentChip */
13628
+ /* ChatAttachmentChip Component Styles */
13629
+
13630
+ .muka-chat-attachment-chip {
13631
+ position: relative;
13632
+ display: inline-flex;
13538
13633
  align-items: center;
13539
- gap: var(--chatbubble-row-gap);
13634
+ gap: var(--spacing-1);
13635
+ max-width: 240px;
13636
+ padding: var(--spacing-2) var(--spacing-3);
13637
+ background-color: var(--color-surface-level1);
13638
+ border: var(--border-width-regular) solid var(--color-border-default);
13639
+ border-radius: var(--radius-md);
13640
+ overflow: hidden;
13540
13641
  }
13541
13642
 
13542
- .muka-chat-message__author {
13543
- font-family: var(--text-body-base-bold-fontFamily);
13544
- font-weight: var(--text-body-base-bold-fontWeight);
13545
- font-size: var(--text-body-base-bold-fontSize);
13546
- line-height: var(--text-body-base-bold-lineHeight);
13643
+ .muka-chat-attachment-chip--uploading {
13644
+ padding-bottom: calc(var(--spacing-2) + 2px);
13547
13645
  }
13548
13646
 
13549
- .muka-chat-message__author-meta {
13550
- /* Inherits the variant's body colour from the bubble */
13551
- color: inherit;
13552
- font-family: var(--text-body-base-regular-fontFamily);
13553
- font-weight: var(--text-body-base-regular-fontWeight);
13554
- font-size: var(--text-body-base-regular-fontSize);
13555
- line-height: var(--text-body-base-regular-lineHeight);
13647
+ .muka-chat-attachment-chip--error {
13648
+ border-color: var(--color-state-error-default, var(--color-text-default-default));
13556
13649
  }
13557
13650
 
13558
- .muka-chat-message__badge {
13651
+ .muka-chat-attachment-chip--disabled {
13652
+ opacity: 0.5;
13653
+ pointer-events: none;
13654
+ }
13655
+
13656
+ /* ─── Body (icon + text) ───────────────────────────────── */
13657
+
13658
+ .muka-chat-attachment-chip__body {
13559
13659
  display: inline-flex;
13560
13660
  align-items: center;
13661
+ gap: var(--spacing-2);
13662
+ min-width: 0;
13663
+ flex: 1 1 auto;
13664
+ background: none;
13665
+ border: none;
13666
+ padding: 0;
13667
+ margin: 0;
13668
+ text-align: left;
13669
+ color: inherit;
13670
+ font: inherit;
13671
+ cursor: default;
13672
+ -webkit-tap-highlight-color: transparent;
13561
13673
  }
13562
13674
 
13563
- /*
13564
- * Keep the first line of content clear of the absolutely positioned menu
13565
- * button in the bubble's top-right corner.
13566
- */
13567
- .muka-chat-message--has-menu .muka-chat-message__header,
13568
- .muka-chat-message--has-menu.muka-chat-message--no-header .muka-chat-message__message {
13569
- padding-right: var(--spacing-10);
13675
+ .muka-chat-attachment-chip--interactive .muka-chat-attachment-chip__body {
13676
+ cursor: pointer;
13570
13677
  }
13571
13678
 
13572
- /* …and the last line clear of the inset timestamp in the bottom-right corner */
13573
- .muka-chat-message--has-timestamp .muka-chat-message__message {
13574
- padding-right: var(--spacing-10);
13679
+ .muka-chat-attachment-chip--interactive .muka-chat-attachment-chip__body:focus-visible {
13680
+ outline: 2px solid var(--color-action-default);
13681
+ outline-offset: 2px;
13682
+ border-radius: var(--radius-sm);
13575
13683
  }
13576
13684
 
13577
- /* ─── Body ─────────────────────────────────────────────── */
13685
+ .muka-chat-attachment-chip__icon {
13686
+ display: inline-flex;
13687
+ align-items: center;
13688
+ justify-content: center;
13689
+ flex-shrink: 0;
13690
+ color: var(--color-text-subtle-default);
13691
+ }
13578
13692
 
13579
- .muka-chat-message__body {
13693
+ .muka-chat-attachment-chip__text {
13580
13694
  display: flex;
13581
13695
  flex-direction: column;
13582
- gap: var(--chatbubble-gap);
13583
13696
  min-width: 0;
13697
+ flex: 1 1 auto;
13584
13698
  }
13585
13699
 
13586
- .muka-chat-message__media {
13587
- min-width: 0;
13700
+ .muka-chat-attachment-chip__name {
13701
+ color: var(--color-text-default-default);
13702
+ font-family: var(--text-body-sm-regular-fontFamily);
13703
+ font-weight: var(--text-body-sm-regular-fontWeight);
13704
+ font-size: var(--text-body-sm-regular-fontSize);
13705
+ line-height: var(--text-body-sm-regular-lineHeight);
13706
+ white-space: nowrap;
13707
+ overflow: hidden;
13708
+ text-overflow: ellipsis;
13588
13709
  }
13589
13710
 
13590
- .muka-chat-message__message {
13591
- font-family: var(--text-body-base-regular-fontFamily);
13592
- font-weight: var(--text-body-base-regular-fontWeight);
13593
- font-size: var(--text-body-base-regular-fontSize);
13594
- line-height: var(--text-body-base-regular-lineHeight);
13595
- white-space: pre-wrap;
13596
- word-break: break-word;
13711
+ .muka-chat-attachment-chip__meta {
13712
+ color: var(--color-text-subtle-default);
13713
+ font-family: var(--text-body-sm-regular-fontFamily);
13714
+ font-weight: var(--text-body-sm-regular-fontWeight);
13715
+ font-size: var(--text-body-sm-regular-fontSize);
13716
+ line-height: var(--text-body-sm-regular-lineHeight);
13717
+ white-space: nowrap;
13718
+ overflow: hidden;
13719
+ text-overflow: ellipsis;
13597
13720
  }
13598
13721
 
13599
- /* Empty message block should not add a gap of its own */
13600
- .muka-chat-message__message:empty {
13601
- display: none;
13722
+ .muka-chat-attachment-chip--error .muka-chat-attachment-chip__meta {
13723
+ color: var(--color-state-error-default, var(--color-text-default-default));
13602
13724
  }
13603
13725
 
13604
- /* ─── Embedded card ────────────────────────────────────── */
13726
+ /* ─── Remove button ────────────────────────────────────── */
13605
13727
 
13606
- .muka-chat-message__embed {
13607
- position: relative;
13608
- display: flex;
13609
- flex-direction: column;
13610
- gap: var(--chatbubble-embed-gap);
13611
- /* The card is inset from the blocks above and below it (Figma 5289:40562) */
13612
- margin-block: var(--chatbubble-embed-margin-block);
13613
- padding: var(--chatbubble-embed-padding-block) var(--chatbubble-embed-padding-inline);
13614
- border-radius: var(--chatbubble-embed-radius);
13615
- border: var(--border-width-regular) solid transparent;
13728
+ .muka-chat-attachment-chip__remove {
13729
+ display: inline-flex;
13730
+ align-items: center;
13731
+ justify-content: center;
13732
+ width: 20px;
13733
+ height: 20px;
13734
+ border: none;
13735
+ background: none;
13736
+ padding: 0;
13737
+ border-radius: var(--radius-sm);
13738
+ cursor: pointer;
13739
+ color: var(--color-text-subtle-default);
13740
+ flex-shrink: 0;
13741
+ -webkit-tap-highlight-color: transparent;
13616
13742
  }
13617
13743
 
13618
- /*
13619
- * The embed sits on the raised surface of its author's role, one step apart
13620
- * from the bubble it is nested in, and reuses that role's border colour.
13621
- */
13622
- .muka-chat-message--own .muka-chat-message__embed {
13623
- background-color: var(--chatbubble-embed-color-own-background);
13624
- border-color: var(--chatbubble-embed-color-own-border);
13625
- color: var(--chatbubble-embed-color-own-foreground);
13744
+ .muka-chat-attachment-chip__remove:hover:not(:disabled) {
13745
+ color: var(--color-text-default-default);
13746
+ background-color: var(--color-surface-level2);
13626
13747
  }
13627
13748
 
13628
- .muka-chat-message--peer .muka-chat-message__embed {
13629
- background-color: var(--chatbubble-embed-color-peer-background);
13630
- border-color: var(--chatbubble-embed-color-peer-border);
13631
- color: var(--chatbubble-embed-color-peer-foreground);
13749
+ .muka-chat-attachment-chip__remove:focus-visible {
13750
+ outline: 2px solid var(--color-action-default);
13751
+ outline-offset: 2px;
13632
13752
  }
13633
13753
 
13634
- .muka-chat-message--agent .muka-chat-message__embed {
13635
- background-color: var(--chatbubble-embed-color-agent-background);
13636
- border-color: var(--chatbubble-embed-color-agent-border);
13637
- color: var(--chatbubble-embed-color-agent-foreground);
13754
+ .muka-chat-attachment-chip__remove:disabled {
13755
+ cursor: not-allowed;
13756
+ opacity: 0.5;
13638
13757
  }
13639
13758
 
13640
- .muka-chat-message__embed-content {
13641
- display: flex;
13642
- flex-direction: column;
13643
- gap: var(--chatbubble-embed-gap);
13644
- min-width: 0;
13759
+ /* ─── Progress bar ─────────────────────────────────────── */
13760
+
13761
+ .muka-chat-attachment-chip__progress {
13762
+ position: absolute;
13763
+ left: 0;
13764
+ right: 0;
13765
+ bottom: 0;
13766
+ height: 2px;
13767
+ background-color: var(--color-surface-level2);
13768
+ overflow: hidden;
13769
+ }
13770
+
13771
+ .muka-chat-attachment-chip__progress-fill {
13772
+ display: block;
13773
+ height: 100%;
13774
+ background-color: var(--color-action-default);
13775
+ transition: width 0.16s ease;
13776
+ }
13777
+
13778
+ .muka-chat-attachment-chip--error .muka-chat-attachment-chip__progress-fill {
13779
+ background-color: var(--color-state-error-default, var(--color-text-default-default));
13780
+ }
13781
+
13782
+
13783
+ /* Card */
13784
+ /* Card Component Styles - Using Muka Design Tokens */
13785
+
13786
+ .muka-card {
13787
+ background-color: var(--card-color-default-background);
13788
+ color: var(--card-color-default-foreground);
13789
+ border: var(--border-width-regular) solid var(--card-color-default-border);
13790
+ box-shadow: var(--card-shadow-default);
13791
+ transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
13792
+ overflow: hidden;
13645
13793
  }
13646
13794
 
13647
- .muka-chat-message__embed-copy {
13648
- position: absolute;
13649
- top: var(--chatbubble-embed-padding-block);
13650
- right: var(--chatbubble-embed-padding-inline);
13795
+ /* Padding variants */
13796
+ .muka-card--padding-none {
13797
+ padding: 0;
13651
13798
  }
13652
13799
 
13653
- /* ─── Stacked full-width action buttons ────────────────── */
13800
+ .muka-card--padding-sm {
13801
+ padding: var(--card-padding-sm);
13802
+ }
13654
13803
 
13655
- .muka-chat-message__action-stack {
13656
- display: flex;
13657
- flex-direction: column;
13658
- gap: var(--chatbubble-action-stack-gap);
13804
+ .muka-card--padding-md {
13805
+ padding: var(--card-padding-md);
13659
13806
  }
13660
13807
 
13661
- /* ─── Inset timestamp ──────────────────────────────────── */
13808
+ .muka-card--padding-lg {
13809
+ padding: var(--card-padding-lg);
13810
+ }
13662
13811
 
13663
- /*
13664
- * Every author puts its timestamp in the bubble's bottom-right corner, below
13665
- * the message — never in the header row (Figma 5355:44091).
13666
- */
13812
+ /* Radius variants */
13813
+ .muka-card--radius-sm {
13814
+ border-radius: var(--card-radius-sm);
13815
+ }
13667
13816
 
13668
- .muka-chat-message__timestamp {
13669
- color: var(--chatbubble-color-timestamp);
13670
- font-family: var(--text-body-xs-regular-fontFamily);
13671
- font-weight: var(--text-body-xs-regular-fontWeight);
13672
- font-size: var(--text-body-xs-regular-fontSize);
13673
- line-height: var(--text-body-xs-regular-lineHeight);
13674
- white-space: nowrap;
13817
+ .muka-card--radius-md {
13818
+ border-radius: var(--card-radius-md);
13675
13819
  }
13676
13820
 
13677
- /*
13678
- * Pinned to the corner rather than stacked below the message, so a one-line
13679
- * message stays one line tall. The message reserves the width it needs.
13680
- */
13681
- .muka-chat-message__timestamp--inset {
13682
- position: absolute;
13683
- right: var(--spacing-2);
13684
- bottom: var(--spacing-1);
13821
+ .muka-card--radius-lg {
13822
+ border-radius: var(--card-radius-lg);
13685
13823
  }
13686
13824
 
13687
- /*
13688
- * When the last block in the body is media, an embed or an action stack (not
13689
- * trailing text), it runs the full width, so reserve a line below for the inset
13690
- * timestamp. A message that ends in text clears the corner inline instead (see
13691
- * `__message` padding-right above), so it needs no extra bottom space.
13692
- */
13693
- .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
13694
- padding-bottom: var(--text-body-xs-regular-lineHeight);
13825
+ /* Interactive variant */
13826
+ .muka-card--interactive {
13827
+ cursor: pointer;
13828
+ user-select: none;
13695
13829
  }
13696
13830
 
13697
- /* ─── Menu affordance ──────────────────────────────────── */
13831
+ .muka-card--interactive:hover {
13832
+ background-color: var(--card-color-hover-background);
13833
+ border-color: var(--card-color-hover-border);
13834
+ box-shadow: var(--card-shadow-hover);
13835
+ }
13698
13836
 
13699
- /*
13700
- * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
13701
- * everywhere, and pinned while its menu is open. On touch the equivalent
13702
- * affordance is a long-press on the bubble, which opens an ActionSheet.
13703
- */
13704
- .muka-chat-message__menu {
13705
- position: absolute;
13706
- top: var(--spacing-1);
13707
- right: var(--spacing-1);
13708
- opacity: 0;
13709
- pointer-events: none;
13837
+ .muka-card--interactive:active,
13838
+ .muka-card--interactive.muka-card--pressed {
13839
+ background-color: var(--card-color-pressed-background);
13840
+ border-color: var(--card-color-pressed-border);
13841
+ box-shadow: var(--card-shadow-pressed);
13710
13842
  }
13711
13843
 
13712
- .muka-chat-message__menu:focus-within,
13713
- .muka-chat-message--menu-open .muka-chat-message__menu {
13714
- opacity: 1;
13715
- pointer-events: auto;
13844
+ .muka-card--interactive:focus-visible {
13845
+ outline: 2px solid var(--color-border-focus);
13846
+ outline-offset: 2px;
13716
13847
  }
13717
13848
 
13718
- @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
13719
- .muka-chat-message__bubble:hover .muka-chat-message__menu {
13720
- opacity: 1;
13721
- pointer-events: auto;
13722
- }
13849
+ /* Selected variant */
13850
+ .muka-card--selected {
13851
+ background-color: var(--card-color-selected-background);
13852
+ border-color: var(--card-color-selected-border);
13853
+ border-width: var(--border-width-bold);
13854
+ box-shadow: var(--card-shadow-selected);
13723
13855
  }
13724
13856
 
13725
- /* Suppress iOS Safari's own callout so the long-press sheet can take over */
13726
- @media (pointer: coarse) {
13727
- .muka-chat-message--has-menu .muka-chat-message__bubble {
13728
- -webkit-touch-callout: none;
13729
- }
13857
+ /* Optional header (title + description) */
13858
+ .muka-card__header {
13859
+ margin-bottom: var(--spacing-4);
13730
13860
  }
13731
13861
 
13732
- /* ─── Print ────────────────────────────────────────────── */
13862
+ .muka-card__title {
13863
+ margin: 0;
13864
+ color: var(--color-text-default-default);
13865
+ font-family: var(--text-heading-xs-fontFamily);
13866
+ font-weight: var(--text-heading-xs-fontWeight);
13867
+ font-size: var(--text-heading-xs-fontSize);
13868
+ line-height: var(--text-heading-xs-lineHeight);
13869
+ letter-spacing: var(--text-heading-xs-letterSpacing);
13870
+ }
13733
13871
 
13734
- @media print {
13735
- .muka-chat-message__bubble {
13736
- box-shadow: none;
13737
- break-inside: avoid;
13738
- print-color-adjust: exact;
13739
- -webkit-print-color-adjust: exact;
13740
- }
13872
+ .muka-card__description {
13873
+ margin: var(--spacing-1) 0 0;
13874
+ color: var(--color-text-subtle-default);
13875
+ font-family: var(--text-body-sm-regular-fontFamily);
13876
+ font-weight: var(--text-body-sm-regular-fontWeight);
13877
+ font-size: var(--text-body-sm-regular-fontSize);
13878
+ line-height: var(--text-body-sm-regular-lineHeight);
13879
+ }
13741
13880
 
13742
- .muka-chat-message__embed {
13743
- break-inside: avoid;
13744
- print-color-adjust: exact;
13745
- -webkit-print-color-adjust: exact;
13746
- }
13881
+ /* Hide divider on last list item inside card */
13882
+ .muka-card > .muka-listitem:last-child > .muka-listitem__divider {
13883
+ display: none;
13884
+ }
13747
13885
 
13748
- .muka-chat-message__menu,
13749
- .muka-chat-message__embed-copy,
13750
- .muka-chat-message__action-stack {
13751
- display: none;
13752
- }
13886
+ /* Disabled state */
13887
+ .muka-card--disabled {
13888
+ opacity: 0.5;
13889
+ cursor: not-allowed;
13890
+ pointer-events: none;
13753
13891
  }
13754
13892
 
13755
13893
 
@@ -14079,25 +14217,139 @@ button.muka-chat-photo-grid__tile:focus-visible {
14079
14217
  align-items: center;
14080
14218
  }
14081
14219
 
14082
- /* Icon-only buttons - square, sized to the button height per size */
14083
- .muka-button--icon-only {
14084
- padding: 0;
14220
+ /* Icon-only buttons - square, sized to the button height per size */
14221
+ .muka-button--icon-only {
14222
+ padding: 0;
14223
+ }
14224
+
14225
+ .muka-button--icon-only.muka-button--sm {
14226
+ width: 32px;
14227
+ }
14228
+
14229
+ .muka-button--icon-only.muka-button--md {
14230
+ width: 40px;
14231
+ }
14232
+
14233
+ .muka-button--icon-only.muka-button--lg {
14234
+ width: 48px;
14235
+ }
14236
+
14237
+ .muka-button--icon-only.muka-button--xl {
14238
+ width: 64px;
14239
+ }
14240
+
14241
+
14242
+ /* Breadcrumb */
14243
+ /* Breadcrumb Component Styles */
14244
+
14245
+ .muka-breadcrumb__list {
14246
+ display: flex;
14247
+ align-items: center;
14248
+ flex-wrap: wrap;
14249
+ list-style: none;
14250
+ margin: 0;
14251
+ padding: 0;
14252
+ gap: var(--spacing-1);
14253
+ }
14254
+
14255
+ .muka-breadcrumb__item {
14256
+ display: inline-flex;
14257
+ align-items: center;
14258
+ gap: var(--spacing-1);
14259
+ }
14260
+
14261
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) {
14262
+ padding-left: var(--spacing-1);
14263
+ }
14264
+
14265
+ .muka-breadcrumb__icon {
14266
+ display: inline-flex;
14267
+ align-items: center;
14268
+ color: var(--color-text-subtle-default);
14269
+ }
14270
+
14271
+ .muka-breadcrumb__icon .muka-icon {
14272
+ color: inherit;
14273
+ }
14274
+
14275
+ .muka-breadcrumb__item:has(.muka-breadcrumb__current) .muka-breadcrumb__icon {
14276
+ color: var(--color-text-default-default);
14277
+ }
14278
+
14279
+ .muka-breadcrumb__item:has(.muka-breadcrumb__link:hover) .muka-breadcrumb__icon {
14280
+ color: var(--color-text-action-default);
14281
+ }
14282
+
14283
+ /* Link styles */
14284
+ .muka-breadcrumb__link {
14285
+ color: var(--color-text-subtle-default);
14286
+ text-decoration: none;
14287
+ border: none;
14288
+ background: none;
14289
+ padding-inline: var(--spacing-2);
14290
+ padding-block: 0;
14291
+ cursor: pointer;
14292
+ font: inherit;
14293
+ transition: color 0.15s ease;
14294
+ }
14295
+
14296
+ .muka-breadcrumb__link:hover {
14297
+ color: var(--color-text-action-default);
14298
+ text-decoration: underline;
14299
+ }
14300
+
14301
+ /* Tighter gap after leading icon */
14302
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__link,
14303
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__current {
14304
+ padding-left: var(--spacing-1);
14305
+ }
14306
+
14307
+ /* Current page (last item, no context switcher) */
14308
+ .muka-breadcrumb__current {
14309
+ color: var(--color-text-default-default);
14310
+ font-weight: 600;
14311
+ padding-inline: var(--spacing-2);
14312
+ }
14313
+
14314
+ /* Separator */
14315
+ .muka-breadcrumb__separator {
14316
+ color: var(--color-text-subtle-default);
14317
+ user-select: none;
14318
+ }
14319
+
14320
+ .muka-breadcrumb__item--context {
14321
+ gap: 0;
14322
+ }
14323
+
14324
+ .muka-breadcrumb__list:has(.muka-breadcrumb__item--context) {
14325
+ gap: 0;
14085
14326
  }
14086
14327
 
14087
- .muka-button--icon-only.muka-button--sm {
14088
- width: 32px;
14328
+ .muka-breadcrumb__item--context .muka-breadcrumb__separator {
14329
+ margin: 0;
14330
+ padding-inline: var(--spacing-1, 4px);
14089
14331
  }
14090
14332
 
14091
- .muka-button--icon-only.muka-button--md {
14092
- width: 40px;
14333
+ /* Size variants */
14334
+ .muka-breadcrumb--sm {
14335
+ font-family: var(--text-label-sm-regular-fontFamily);
14336
+ font-weight: var(--text-label-sm-regular-fontWeight);
14337
+ font-size: var(--text-label-sm-regular-fontSize);
14338
+ line-height: var(--text-label-sm-regular-lineHeight);
14093
14339
  }
14094
14340
 
14095
- .muka-button--icon-only.muka-button--lg {
14096
- width: 48px;
14341
+ .muka-breadcrumb--md {
14342
+ font-family: var(--text-label-md-regular-fontFamily);
14343
+ font-weight: var(--text-label-md-regular-fontWeight);
14344
+ font-size: var(--text-label-md-regular-fontSize);
14345
+ line-height: var(--text-label-md-regular-lineHeight);
14097
14346
  }
14098
14347
 
14099
- .muka-button--icon-only.muka-button--xl {
14100
- width: 64px;
14348
+ .muka-breadcrumb--lg {
14349
+ font-family: var(--text-label-lg-regular-fontFamily);
14350
+ font-weight: var(--text-label-lg-regular-fontWeight);
14351
+ font-size: var(--text-label-lg-regular-fontSize);
14352
+ line-height: var(--text-label-lg-regular-lineHeight);
14101
14353
  }
14102
14354
 
14103
14355
 
@@ -14323,319 +14575,97 @@ button.muka-chat-photo-grid__tile:focus-visible {
14323
14575
 
14324
14576
  .muka-bottombar--desktop-sidebar .muka-bottombar__tab:hover {
14325
14577
  background-color: var(--color-surface-level2);
14326
- }
14327
-
14328
- .muka-bottombar--desktop-sidebar .muka-bottombar__tab-label {
14329
- font-family: var(--text-label-md-regular-fontFamily);
14330
- font-weight: var(--text-label-md-regular-fontWeight);
14331
- font-size: var(--text-label-md-regular-fontSize);
14332
- line-height: var(--text-label-md-regular-lineHeight);
14333
- }
14334
-
14335
- /* When floating and sidebar, remove the floating card styles */
14336
- .muka-bottombar--desktop-sidebar.muka-bottombar--floating {
14337
- padding: 0;
14338
- }
14339
-
14340
- .muka-bottombar--desktop-sidebar.muka-bottombar--floating .muka-bottombar__content {
14341
- background-color: transparent;
14342
- border-radius: 0;
14343
- box-shadow: none;
14344
- }
14345
- }
14346
-
14347
- /* ─── Desktop: Top Navigation transformation ──────────── */
14348
-
14349
- @media (min-width: 1024px) {
14350
- .muka-bottombar--desktop-topnav {
14351
- position: fixed;
14352
- top: 0;
14353
- left: 0;
14354
- right: 0;
14355
- width: 100%;
14356
- height: auto;
14357
- background-color: var(--bottombar-color-background);
14358
- border-bottom: var(--border-width-regular) solid var(--bottombar-color-border);
14359
- z-index: 10;
14360
- }
14361
-
14362
- .muka-bottombar--desktop-topnav .muka-bottombar__divider {
14363
- display: none;
14364
- }
14365
-
14366
- .muka-bottombar--desktop-topnav .muka-bottombar__content {
14367
- flex-direction: row;
14368
- justify-content: center;
14369
- gap: var(--spacing-1);
14370
- padding: 0 var(--spacing-4);
14371
- max-width: var(--container-max-width-large, 1200px);
14372
- margin: 0 auto;
14373
- }
14374
-
14375
- .muka-bottombar--desktop-topnav .muka-bottombar__tab {
14376
- flex: 0 0 auto;
14377
- flex-direction: row;
14378
- gap: var(--spacing-2);
14379
- padding: var(--spacing-3) var(--spacing-4);
14380
- border-radius: 0;
14381
- border-bottom: 2px solid transparent;
14382
- }
14383
-
14384
- .muka-bottombar--desktop-topnav .muka-bottombar__tab--active {
14385
- border-bottom-color: var(--color-action-default);
14386
- }
14387
-
14388
- .muka-bottombar--desktop-topnav .muka-bottombar__tab:hover {
14389
- background-color: var(--color-surface-level2);
14390
- }
14391
-
14392
- .muka-bottombar--desktop-topnav .muka-bottombar__tab-label {
14393
- font-family: var(--text-label-md-regular-fontFamily);
14394
- font-weight: var(--text-label-md-regular-fontWeight);
14395
- font-size: var(--text-label-md-regular-fontSize);
14396
- line-height: var(--text-label-md-regular-lineHeight);
14397
- }
14398
-
14399
- /* When floating and topnav, remove the floating card styles */
14400
- .muka-bottombar--desktop-topnav.muka-bottombar--floating {
14401
- padding: 0;
14402
- }
14403
-
14404
- .muka-bottombar--desktop-topnav.muka-bottombar--floating .muka-bottombar__content {
14405
- background-color: transparent;
14406
- border-radius: 0;
14407
- box-shadow: none;
14408
- }
14409
- }
14410
-
14411
- /* ─── Print ────────────────────────────────────────────── */
14412
-
14413
- @media print {
14414
- .muka-bottombar {
14415
- display: none;
14416
- }
14417
- }
14418
-
14419
-
14420
- /* BadgeNumber */
14421
- /* BadgeNumber Component Styles - Using Muka Design Tokens */
14422
-
14423
- .muka-badge-number {
14424
- display: inline-flex;
14425
- align-items: center;
14426
- justify-content: center;
14427
- border-radius: var(--border-radius-full);
14428
- white-space: nowrap;
14429
- user-select: none;
14430
- box-sizing: border-box;
14431
- }
14432
-
14433
- /*
14434
- * Sizes — fixed height, matching min-width (so a single digit renders as a
14435
- * circle), horizontal padding, and bold label typography. Vertical centering
14436
- * is handled by the fixed height + align-items: center.
14437
- */
14438
- .muka-badge-number--2xs {
14439
- height: var(--badge-number-size-2xs);
14440
- min-width: var(--badge-number-size-2xs);
14441
- padding: 0 var(--badge-number-padding-2xs);
14442
- font-family: var(--text-label-xs-bold-fontFamily);
14443
- font-weight: var(--text-label-xs-bold-fontWeight);
14444
- font-size: var(--text-label-xs-bold-fontSize);
14445
- line-height: var(--text-label-xs-bold-lineHeight);
14446
- }
14447
-
14448
- .muka-badge-number--xs {
14449
- height: var(--badge-number-size-xs);
14450
- min-width: var(--badge-number-size-xs);
14451
- padding: 0 var(--badge-number-padding-xs);
14452
- font-family: var(--text-label-sm-bold-fontFamily);
14453
- font-weight: var(--text-label-sm-bold-fontWeight);
14454
- font-size: var(--text-label-sm-bold-fontSize);
14455
- line-height: var(--text-label-sm-bold-lineHeight);
14456
- }
14457
-
14458
- .muka-badge-number--sm {
14459
- height: var(--badge-number-size-sm);
14460
- min-width: var(--badge-number-size-sm);
14461
- padding: 0 var(--badge-number-padding-sm);
14462
- font-family: var(--text-label-md-bold-fontFamily);
14463
- font-weight: var(--text-label-md-bold-fontWeight);
14464
- font-size: var(--text-label-md-bold-fontSize);
14465
- line-height: var(--text-label-md-bold-lineHeight);
14466
- }
14467
-
14468
- .muka-badge-number--md {
14469
- height: var(--badge-number-size-md);
14470
- min-width: var(--badge-number-size-md);
14471
- padding: 0 var(--badge-number-padding-md);
14472
- font-family: var(--text-label-lg-bold-fontFamily);
14473
- font-weight: var(--text-label-lg-bold-fontWeight);
14474
- font-size: var(--text-label-lg-bold-fontSize);
14475
- line-height: var(--text-label-lg-bold-lineHeight);
14476
- }
14477
-
14478
- .muka-badge-number--lg {
14479
- height: var(--badge-number-size-lg);
14480
- min-width: var(--badge-number-size-lg);
14481
- padding: 0 var(--badge-number-padding-lg);
14482
- font-family: var(--text-label-2xl-bold-fontFamily);
14483
- font-weight: var(--text-label-2xl-bold-fontWeight);
14484
- font-size: var(--text-label-2xl-bold-fontSize);
14485
- line-height: var(--text-label-2xl-bold-lineHeight);
14486
- }
14487
-
14488
- .muka-badge-number__label {
14489
- /*
14490
- * The badge sets a tight line-height for compact sizing, which would clip
14491
- * glyph descenders; give the label a roomier line-height. Vertical centering
14492
- * is unaffected because the badge height is fixed and content is centered.
14493
- */
14494
- line-height: normal;
14495
- }
14496
-
14497
- /* Neutral variant */
14498
- .muka-badge-number--neutral {
14499
- background-color: var(--color-surface-level1);
14500
- color: var(--color-text-default-default);
14501
- }
14502
-
14503
- /* Info variant */
14504
- .muka-badge-number--info {
14505
- background-color: var(--color-state-info-contrast);
14506
- color: var(--color-text-default-inverse);
14507
- }
14508
-
14509
- /* Success variant */
14510
- .muka-badge-number--success {
14511
- background-color: var(--color-state-success-contrast);
14512
- color: var(--color-text-default-inverse);
14513
- }
14514
-
14515
- /* Warning variant */
14516
- .muka-badge-number--warning {
14517
- background-color: var(--color-state-warning-contrast);
14518
- color: var(--color-text-default-inverse);
14519
- }
14520
-
14521
- /* Error variant */
14522
- .muka-badge-number--error {
14523
- background-color: var(--color-state-error-contrast);
14524
- color: var(--color-text-default-inverse);
14525
- }
14526
-
14527
-
14528
- /* Breadcrumb */
14529
- /* Breadcrumb Component Styles */
14530
-
14531
- .muka-breadcrumb__list {
14532
- display: flex;
14533
- align-items: center;
14534
- flex-wrap: wrap;
14535
- list-style: none;
14536
- margin: 0;
14537
- padding: 0;
14538
- gap: var(--spacing-1);
14539
- }
14540
-
14541
- .muka-breadcrumb__item {
14542
- display: inline-flex;
14543
- align-items: center;
14544
- gap: var(--spacing-1);
14545
- }
14546
-
14547
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) {
14548
- padding-left: var(--spacing-1);
14549
- }
14578
+ }
14550
14579
 
14551
- .muka-breadcrumb__icon {
14552
- display: inline-flex;
14553
- align-items: center;
14554
- color: var(--color-text-subtle-default);
14555
- }
14580
+ .muka-bottombar--desktop-sidebar .muka-bottombar__tab-label {
14581
+ font-family: var(--text-label-md-regular-fontFamily);
14582
+ font-weight: var(--text-label-md-regular-fontWeight);
14583
+ font-size: var(--text-label-md-regular-fontSize);
14584
+ line-height: var(--text-label-md-regular-lineHeight);
14585
+ }
14556
14586
 
14557
- .muka-breadcrumb__icon .muka-icon {
14558
- color: inherit;
14559
- }
14587
+ /* When floating and sidebar, remove the floating card styles */
14588
+ .muka-bottombar--desktop-sidebar.muka-bottombar--floating {
14589
+ padding: 0;
14590
+ }
14560
14591
 
14561
- .muka-breadcrumb__item:has(.muka-breadcrumb__current) .muka-breadcrumb__icon {
14562
- color: var(--color-text-default-default);
14592
+ .muka-bottombar--desktop-sidebar.muka-bottombar--floating .muka-bottombar__content {
14593
+ background-color: transparent;
14594
+ border-radius: 0;
14595
+ box-shadow: none;
14596
+ }
14563
14597
  }
14564
14598
 
14565
- .muka-breadcrumb__item:has(.muka-breadcrumb__link:hover) .muka-breadcrumb__icon {
14566
- color: var(--color-text-action-default);
14567
- }
14599
+ /* ─── Desktop: Top Navigation transformation ──────────── */
14568
14600
 
14569
- /* Link styles */
14570
- .muka-breadcrumb__link {
14571
- color: var(--color-text-subtle-default);
14572
- text-decoration: none;
14573
- border: none;
14574
- background: none;
14575
- padding-inline: var(--spacing-2);
14576
- padding-block: 0;
14577
- cursor: pointer;
14578
- font: inherit;
14579
- transition: color 0.15s ease;
14580
- }
14601
+ @media (min-width: 1024px) {
14602
+ .muka-bottombar--desktop-topnav {
14603
+ position: fixed;
14604
+ top: 0;
14605
+ left: 0;
14606
+ right: 0;
14607
+ width: 100%;
14608
+ height: auto;
14609
+ background-color: var(--bottombar-color-background);
14610
+ border-bottom: var(--border-width-regular) solid var(--bottombar-color-border);
14611
+ z-index: 10;
14612
+ }
14581
14613
 
14582
- .muka-breadcrumb__link:hover {
14583
- color: var(--color-text-action-default);
14584
- text-decoration: underline;
14585
- }
14614
+ .muka-bottombar--desktop-topnav .muka-bottombar__divider {
14615
+ display: none;
14616
+ }
14586
14617
 
14587
- /* Tighter gap after leading icon */
14588
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__link,
14589
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__current {
14590
- padding-left: var(--spacing-1);
14591
- }
14618
+ .muka-bottombar--desktop-topnav .muka-bottombar__content {
14619
+ flex-direction: row;
14620
+ justify-content: center;
14621
+ gap: var(--spacing-1);
14622
+ padding: 0 var(--spacing-4);
14623
+ max-width: var(--container-max-width-large, 1200px);
14624
+ margin: 0 auto;
14625
+ }
14592
14626
 
14593
- /* Current page (last item, no context switcher) */
14594
- .muka-breadcrumb__current {
14595
- color: var(--color-text-default-default);
14596
- font-weight: 600;
14597
- padding-inline: var(--spacing-2);
14598
- }
14627
+ .muka-bottombar--desktop-topnav .muka-bottombar__tab {
14628
+ flex: 0 0 auto;
14629
+ flex-direction: row;
14630
+ gap: var(--spacing-2);
14631
+ padding: var(--spacing-3) var(--spacing-4);
14632
+ border-radius: 0;
14633
+ border-bottom: 2px solid transparent;
14634
+ }
14599
14635
 
14600
- /* Separator */
14601
- .muka-breadcrumb__separator {
14602
- color: var(--color-text-subtle-default);
14603
- user-select: none;
14604
- }
14636
+ .muka-bottombar--desktop-topnav .muka-bottombar__tab--active {
14637
+ border-bottom-color: var(--color-action-default);
14638
+ }
14605
14639
 
14606
- .muka-breadcrumb__item--context {
14607
- gap: 0;
14608
- }
14640
+ .muka-bottombar--desktop-topnav .muka-bottombar__tab:hover {
14641
+ background-color: var(--color-surface-level2);
14642
+ }
14609
14643
 
14610
- .muka-breadcrumb__list:has(.muka-breadcrumb__item--context) {
14611
- gap: 0;
14612
- }
14644
+ .muka-bottombar--desktop-topnav .muka-bottombar__tab-label {
14645
+ font-family: var(--text-label-md-regular-fontFamily);
14646
+ font-weight: var(--text-label-md-regular-fontWeight);
14647
+ font-size: var(--text-label-md-regular-fontSize);
14648
+ line-height: var(--text-label-md-regular-lineHeight);
14649
+ }
14613
14650
 
14614
- .muka-breadcrumb__item--context .muka-breadcrumb__separator {
14615
- margin: 0;
14616
- padding-inline: var(--spacing-1, 4px);
14617
- }
14651
+ /* When floating and topnav, remove the floating card styles */
14652
+ .muka-bottombar--desktop-topnav.muka-bottombar--floating {
14653
+ padding: 0;
14654
+ }
14618
14655
 
14619
- /* Size variants */
14620
- .muka-breadcrumb--sm {
14621
- font-family: var(--text-label-sm-regular-fontFamily);
14622
- font-weight: var(--text-label-sm-regular-fontWeight);
14623
- font-size: var(--text-label-sm-regular-fontSize);
14624
- line-height: var(--text-label-sm-regular-lineHeight);
14656
+ .muka-bottombar--desktop-topnav.muka-bottombar--floating .muka-bottombar__content {
14657
+ background-color: transparent;
14658
+ border-radius: 0;
14659
+ box-shadow: none;
14660
+ }
14625
14661
  }
14626
14662
 
14627
- .muka-breadcrumb--md {
14628
- font-family: var(--text-label-md-regular-fontFamily);
14629
- font-weight: var(--text-label-md-regular-fontWeight);
14630
- font-size: var(--text-label-md-regular-fontSize);
14631
- line-height: var(--text-label-md-regular-lineHeight);
14632
- }
14663
+ /* ─── Print ────────────────────────────────────────────── */
14633
14664
 
14634
- .muka-breadcrumb--lg {
14635
- font-family: var(--text-label-lg-regular-fontFamily);
14636
- font-weight: var(--text-label-lg-regular-fontWeight);
14637
- font-size: var(--text-label-lg-regular-fontSize);
14638
- line-height: var(--text-label-lg-regular-lineHeight);
14665
+ @media print {
14666
+ .muka-bottombar {
14667
+ display: none;
14668
+ }
14639
14669
  }
14640
14670
 
14641
14671
 
@@ -15230,41 +15260,137 @@ button.muka-chat-photo-grid__tile:focus-visible {
15230
15260
  z-index: 1;
15231
15261
  }
15232
15262
 
15233
- /* Figma: the menu is as wide as the field (never below the menu min-width token). */
15234
- .muka-autocomplete__menu {
15235
- width: var(--radix-dropdown-menu-trigger-width);
15236
- max-width: calc(100vw - 2rem);
15263
+ /* Figma: the menu is as wide as the field (never below the menu min-width token). */
15264
+ .muka-autocomplete__menu {
15265
+ width: var(--radix-dropdown-menu-trigger-width);
15266
+ max-width: calc(100vw - 2rem);
15267
+ }
15268
+
15269
+ /* Suggestions are single-line; long labels truncate. */
15270
+ .muka-autocomplete__menu .muka-menu__item-label {
15271
+ overflow: hidden;
15272
+ text-overflow: ellipsis;
15273
+ }
15274
+
15275
+ /* Loading and empty rows: menu-row geometry, not selectable. */
15276
+ .muka-autocomplete__status {
15277
+ display: flex;
15278
+ align-items: center;
15279
+ gap: var(--menu-item-gap);
15280
+ min-height: var(--menu-item-height);
15281
+ padding: var(--menu-item-padding-y) var(--menu-item-padding-x);
15282
+ color: var(--color-text-subtle-default);
15283
+ font-family: var(--text-label-md-regular-fontFamily);
15284
+ font-size: var(--text-label-md-regular-fontSize);
15285
+ font-weight: var(--text-label-md-regular-fontWeight);
15286
+ line-height: var(--text-label-md-regular-lineHeight);
15287
+ }
15288
+
15289
+ .muka-autocomplete__footer {
15290
+ flex-shrink: 0;
15291
+ padding: var(--spacing-2) var(--spacing-3);
15292
+ border-top: var(--border-width-regular) solid var(--color-border-default);
15293
+ color: var(--color-text-subtle-default);
15294
+ font-family: var(--text-label-sm-regular-fontFamily);
15295
+ font-size: var(--text-label-sm-regular-fontSize);
15296
+ font-weight: var(--text-label-sm-regular-fontWeight);
15297
+ line-height: var(--text-label-sm-regular-lineHeight);
15298
+ }
15299
+
15300
+
15301
+ /* AppShell */
15302
+ /* AppShell Component Styles */
15303
+
15304
+ /*
15305
+ * Layout wrapper for a persistent left navigation rail + main view area, with an
15306
+ * optional full-width top app bar. The rail itself is styled by the BottomBar
15307
+ * `desktopAs="sidebar"` rules (fixed 240px left rail at ≥1024px); AppShell shows/
15308
+ * hides the sidebar + app-bar slots and offsets the main area to match. Both
15309
+ * appear at the large tier — responsively (no `size`, scoped with
15310
+ * `:not([data-size])`) or forced via `[data-size="lg"]`.
15311
+ */
15312
+ .muka-app-shell {
15313
+ position: relative;
15314
+ /* Reserved width for the rail; matches BottomBar's desktop-sidebar width. */
15315
+ --app-shell-sidebar-width: 240px;
15316
+ /* Height of the optional top app bar. */
15317
+ --app-shell-appbar-height: 64px;
15318
+ }
15319
+
15320
+ /* Sidebar slot: hidden below the large tier (per-view nav handles small/medium). */
15321
+ .muka-app-shell__sidebar {
15322
+ display: none;
15323
+ }
15324
+
15325
+ .muka-app-shell__main {
15326
+ min-height: 100dvh;
15327
+ }
15328
+
15329
+ /*
15330
+ * App bar: full-width top strip. Intrinsic styling lives here (harmless while
15331
+ * hidden); it is revealed only at the large tier. Sits above the sidebar rail.
15332
+ */
15333
+ .muka-app-shell__appbar {
15334
+ display: none;
15335
+ align-items: center;
15336
+ justify-content: space-between;
15337
+ gap: var(--spacing-4);
15338
+ position: fixed;
15339
+ top: 0;
15340
+ left: 0;
15341
+ right: 0;
15342
+ height: var(--app-shell-appbar-height);
15343
+ padding-inline: var(--spacing-4);
15344
+ background-color: var(--color-surface-level3);
15345
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
15346
+ z-index: 11; /* above the sidebar rail (z-index 10) */
15347
+ }
15348
+
15349
+ /* ─── Large tier (responsive) ─── */
15350
+ @media (min-width: 1024px) {
15351
+ .muka-app-shell:not([data-size]) .muka-app-shell__sidebar {
15352
+ display: block;
15353
+ }
15354
+ .muka-app-shell:not([data-size]) .muka-app-shell__main {
15355
+ padding-left: var(--app-shell-sidebar-width);
15356
+ }
15357
+ .muka-app-shell:not([data-size]) .muka-app-shell__appbar {
15358
+ display: flex;
15359
+ }
15360
+ /* When an app bar is present, drop the rail + content below it so nothing overlaps. */
15361
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-app-shell__main {
15362
+ padding-top: var(--app-shell-appbar-height);
15363
+ }
15364
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15365
+ top: var(--app-shell-appbar-height);
15366
+ height: calc(100vh - var(--app-shell-appbar-height));
15367
+ }
15368
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-view,
15369
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-nav-transition {
15370
+ height: calc(100dvh - var(--app-shell-appbar-height));
15371
+ }
15372
+ }
15373
+
15374
+ /* ─── Large tier (forced via size="lg") ─── */
15375
+ .muka-app-shell[data-size='lg'] .muka-app-shell__sidebar {
15376
+ display: block;
15237
15377
  }
15238
-
15239
- /* Suggestions are single-line; long labels truncate. */
15240
- .muka-autocomplete__menu .muka-menu__item-label {
15241
- overflow: hidden;
15242
- text-overflow: ellipsis;
15378
+ .muka-app-shell[data-size='lg'] .muka-app-shell__main {
15379
+ padding-left: var(--app-shell-sidebar-width);
15243
15380
  }
15244
-
15245
- /* Loading and empty rows: menu-row geometry, not selectable. */
15246
- .muka-autocomplete__status {
15381
+ .muka-app-shell[data-size='lg'] .muka-app-shell__appbar {
15247
15382
  display: flex;
15248
- align-items: center;
15249
- gap: var(--menu-item-gap);
15250
- min-height: var(--menu-item-height);
15251
- padding: var(--menu-item-padding-y) var(--menu-item-padding-x);
15252
- color: var(--color-text-subtle-default);
15253
- font-family: var(--text-label-md-regular-fontFamily);
15254
- font-size: var(--text-label-md-regular-fontSize);
15255
- font-weight: var(--text-label-md-regular-fontWeight);
15256
- line-height: var(--text-label-md-regular-lineHeight);
15257
15383
  }
15258
-
15259
- .muka-autocomplete__footer {
15260
- flex-shrink: 0;
15261
- padding: var(--spacing-2) var(--spacing-3);
15262
- border-top: var(--border-width-regular) solid var(--color-border-default);
15263
- color: var(--color-text-subtle-default);
15264
- font-family: var(--text-label-sm-regular-fontFamily);
15265
- font-size: var(--text-label-sm-regular-fontSize);
15266
- font-weight: var(--text-label-sm-regular-fontWeight);
15267
- line-height: var(--text-label-sm-regular-lineHeight);
15384
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-app-shell__main {
15385
+ padding-top: var(--app-shell-appbar-height);
15386
+ }
15387
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15388
+ top: var(--app-shell-appbar-height);
15389
+ height: calc(100vh - var(--app-shell-appbar-height));
15390
+ }
15391
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-view,
15392
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-nav-transition {
15393
+ height: calc(100dvh - var(--app-shell-appbar-height));
15268
15394
  }
15269
15395
 
15270
15396
 
@@ -15420,6 +15546,14 @@ button.muka-chat-photo-grid__tile:focus-visible {
15420
15546
  font-weight: var(--text-body-sm-regular-fontWeight);
15421
15547
  font-size: var(--text-body-sm-regular-fontSize);
15422
15548
  line-height: var(--text-body-sm-regular-lineHeight);
15549
+ /* Beat ambient docs/page text colors (e.g. Storybook sbdocs) so variant
15550
+ foreground stays readable in light and dark themes. */
15551
+ color: inherit;
15552
+ }
15553
+
15554
+ .muka-alert .muka-alert__message,
15555
+ .muka-alert .muka-alert__message * {
15556
+ color: inherit;
15423
15557
  }
15424
15558
 
15425
15559
  .muka-alert--lg .muka-alert__message {
@@ -15471,102 +15605,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
15471
15605
  }
15472
15606
 
15473
15607
 
15474
- /* AppShell */
15475
- /* AppShell Component Styles */
15476
-
15477
- /*
15478
- * Layout wrapper for a persistent left navigation rail + main view area, with an
15479
- * optional full-width top app bar. The rail itself is styled by the BottomBar
15480
- * `desktopAs="sidebar"` rules (fixed 240px left rail at ≥1024px); AppShell shows/
15481
- * hides the sidebar + app-bar slots and offsets the main area to match. Both
15482
- * appear at the large tier — responsively (no `size`, scoped with
15483
- * `:not([data-size])`) or forced via `[data-size="lg"]`.
15484
- */
15485
- .muka-app-shell {
15486
- position: relative;
15487
- /* Reserved width for the rail; matches BottomBar's desktop-sidebar width. */
15488
- --app-shell-sidebar-width: 240px;
15489
- /* Height of the optional top app bar. */
15490
- --app-shell-appbar-height: 64px;
15491
- }
15492
-
15493
- /* Sidebar slot: hidden below the large tier (per-view nav handles small/medium). */
15494
- .muka-app-shell__sidebar {
15495
- display: none;
15496
- }
15497
-
15498
- .muka-app-shell__main {
15499
- min-height: 100dvh;
15500
- }
15501
-
15502
- /*
15503
- * App bar: full-width top strip. Intrinsic styling lives here (harmless while
15504
- * hidden); it is revealed only at the large tier. Sits above the sidebar rail.
15505
- */
15506
- .muka-app-shell__appbar {
15507
- display: none;
15508
- align-items: center;
15509
- justify-content: space-between;
15510
- gap: var(--spacing-4);
15511
- position: fixed;
15512
- top: 0;
15513
- left: 0;
15514
- right: 0;
15515
- height: var(--app-shell-appbar-height);
15516
- padding-inline: var(--spacing-4);
15517
- background-color: var(--color-surface-level3);
15518
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
15519
- z-index: 11; /* above the sidebar rail (z-index 10) */
15520
- }
15521
-
15522
- /* ─── Large tier (responsive) ─── */
15523
- @media (min-width: 1024px) {
15524
- .muka-app-shell:not([data-size]) .muka-app-shell__sidebar {
15525
- display: block;
15526
- }
15527
- .muka-app-shell:not([data-size]) .muka-app-shell__main {
15528
- padding-left: var(--app-shell-sidebar-width);
15529
- }
15530
- .muka-app-shell:not([data-size]) .muka-app-shell__appbar {
15531
- display: flex;
15532
- }
15533
- /* When an app bar is present, drop the rail + content below it so nothing overlaps. */
15534
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-app-shell__main {
15535
- padding-top: var(--app-shell-appbar-height);
15536
- }
15537
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15538
- top: var(--app-shell-appbar-height);
15539
- height: calc(100vh - var(--app-shell-appbar-height));
15540
- }
15541
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-view,
15542
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-nav-transition {
15543
- height: calc(100dvh - var(--app-shell-appbar-height));
15544
- }
15545
- }
15546
-
15547
- /* ─── Large tier (forced via size="lg") ─── */
15548
- .muka-app-shell[data-size='lg'] .muka-app-shell__sidebar {
15549
- display: block;
15550
- }
15551
- .muka-app-shell[data-size='lg'] .muka-app-shell__main {
15552
- padding-left: var(--app-shell-sidebar-width);
15553
- }
15554
- .muka-app-shell[data-size='lg'] .muka-app-shell__appbar {
15555
- display: flex;
15556
- }
15557
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-app-shell__main {
15558
- padding-top: var(--app-shell-appbar-height);
15559
- }
15560
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15561
- top: var(--app-shell-appbar-height);
15562
- height: calc(100vh - var(--app-shell-appbar-height));
15563
- }
15564
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-view,
15565
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-nav-transition {
15566
- height: calc(100dvh - var(--app-shell-appbar-height));
15567
- }
15568
-
15569
-
15570
15608
  /* AgentTaskList */
15571
15609
  /* AgentTaskList Component Styles */
15572
15610
 
@@ -16008,3 +16046,111 @@ button.muka-chat-photo-grid__tile:focus-visible {
16008
16046
  border-bottom: none;
16009
16047
  }
16010
16048
 
16049
+
16050
+ /* BadgeNumber */
16051
+ /* BadgeNumber Component Styles - Using Muka Design Tokens */
16052
+
16053
+ .muka-badge-number {
16054
+ display: inline-flex;
16055
+ align-items: center;
16056
+ justify-content: center;
16057
+ border-radius: var(--border-radius-full);
16058
+ white-space: nowrap;
16059
+ user-select: none;
16060
+ box-sizing: border-box;
16061
+ }
16062
+
16063
+ /*
16064
+ * Sizes — fixed height, matching min-width (so a single digit renders as a
16065
+ * circle), horizontal padding, and bold label typography. Vertical centering
16066
+ * is handled by the fixed height + align-items: center.
16067
+ */
16068
+ .muka-badge-number--2xs {
16069
+ height: var(--badge-number-size-2xs);
16070
+ min-width: var(--badge-number-size-2xs);
16071
+ padding: 0 var(--badge-number-padding-2xs);
16072
+ font-family: var(--text-label-xs-bold-fontFamily);
16073
+ font-weight: var(--text-label-xs-bold-fontWeight);
16074
+ font-size: var(--text-label-xs-bold-fontSize);
16075
+ line-height: var(--text-label-xs-bold-lineHeight);
16076
+ }
16077
+
16078
+ .muka-badge-number--xs {
16079
+ height: var(--badge-number-size-xs);
16080
+ min-width: var(--badge-number-size-xs);
16081
+ padding: 0 var(--badge-number-padding-xs);
16082
+ font-family: var(--text-label-sm-bold-fontFamily);
16083
+ font-weight: var(--text-label-sm-bold-fontWeight);
16084
+ font-size: var(--text-label-sm-bold-fontSize);
16085
+ line-height: var(--text-label-sm-bold-lineHeight);
16086
+ }
16087
+
16088
+ .muka-badge-number--sm {
16089
+ height: var(--badge-number-size-sm);
16090
+ min-width: var(--badge-number-size-sm);
16091
+ padding: 0 var(--badge-number-padding-sm);
16092
+ font-family: var(--text-label-md-bold-fontFamily);
16093
+ font-weight: var(--text-label-md-bold-fontWeight);
16094
+ font-size: var(--text-label-md-bold-fontSize);
16095
+ line-height: var(--text-label-md-bold-lineHeight);
16096
+ }
16097
+
16098
+ .muka-badge-number--md {
16099
+ height: var(--badge-number-size-md);
16100
+ min-width: var(--badge-number-size-md);
16101
+ padding: 0 var(--badge-number-padding-md);
16102
+ font-family: var(--text-label-lg-bold-fontFamily);
16103
+ font-weight: var(--text-label-lg-bold-fontWeight);
16104
+ font-size: var(--text-label-lg-bold-fontSize);
16105
+ line-height: var(--text-label-lg-bold-lineHeight);
16106
+ }
16107
+
16108
+ .muka-badge-number--lg {
16109
+ height: var(--badge-number-size-lg);
16110
+ min-width: var(--badge-number-size-lg);
16111
+ padding: 0 var(--badge-number-padding-lg);
16112
+ font-family: var(--text-label-2xl-bold-fontFamily);
16113
+ font-weight: var(--text-label-2xl-bold-fontWeight);
16114
+ font-size: var(--text-label-2xl-bold-fontSize);
16115
+ line-height: var(--text-label-2xl-bold-lineHeight);
16116
+ }
16117
+
16118
+ .muka-badge-number__label {
16119
+ /*
16120
+ * The badge sets a tight line-height for compact sizing, which would clip
16121
+ * glyph descenders; give the label a roomier line-height. Vertical centering
16122
+ * is unaffected because the badge height is fixed and content is centered.
16123
+ */
16124
+ line-height: normal;
16125
+ }
16126
+
16127
+ /* Neutral variant */
16128
+ .muka-badge-number--neutral {
16129
+ background-color: var(--color-surface-level1);
16130
+ color: var(--color-text-default-default);
16131
+ }
16132
+
16133
+ /* Info variant */
16134
+ .muka-badge-number--info {
16135
+ background-color: var(--color-state-info-contrast);
16136
+ color: var(--color-text-default-inverse);
16137
+ }
16138
+
16139
+ /* Success variant */
16140
+ .muka-badge-number--success {
16141
+ background-color: var(--color-state-success-contrast);
16142
+ color: var(--color-text-default-inverse);
16143
+ }
16144
+
16145
+ /* Warning variant */
16146
+ .muka-badge-number--warning {
16147
+ background-color: var(--color-state-warning-contrast);
16148
+ color: var(--color-text-default-inverse);
16149
+ }
16150
+
16151
+ /* Error variant */
16152
+ .muka-badge-number--error {
16153
+ background-color: var(--color-state-error-contrast);
16154
+ color: var(--color-text-default-inverse);
16155
+ }
16156
+