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