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