@revikornmann/muka-ui 0.28.1 → 0.29.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 (42) hide show
  1. package/dist/cjs/components/Alert/Alert.css +4 -3
  2. package/dist/cjs/components/Alert/Alert.js +1 -1
  3. package/dist/cjs/components/Alert/Alert.js.map +1 -1
  4. package/dist/cjs/components/Badge/Badge.css +27 -0
  5. package/dist/cjs/components/Badge/Badge.js +14 -5
  6. package/dist/cjs/components/Badge/Badge.js.map +1 -1
  7. package/dist/cjs/components/PhotoUploader/PhotoUploader.css +6 -18
  8. package/dist/cjs/components/PhotoUploader/PhotoUploader.js +15 -16
  9. package/dist/cjs/components/PhotoUploader/PhotoUploader.js.map +1 -1
  10. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.css +26 -12
  11. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.js +49 -40
  12. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.js.map +1 -1
  13. package/dist/esm/components/Alert/Alert.css +4 -3
  14. package/dist/esm/components/Alert/Alert.js +1 -1
  15. package/dist/esm/components/Alert/Alert.js.map +1 -1
  16. package/dist/esm/components/Badge/Badge.css +27 -0
  17. package/dist/esm/components/Badge/Badge.js +14 -5
  18. package/dist/esm/components/Badge/Badge.js.map +1 -1
  19. package/dist/esm/components/PhotoUploader/PhotoUploader.css +6 -18
  20. package/dist/esm/components/PhotoUploader/PhotoUploader.js +15 -16
  21. package/dist/esm/components/PhotoUploader/PhotoUploader.js.map +1 -1
  22. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.css +26 -12
  23. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.js +49 -40
  24. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.js.map +1 -1
  25. package/dist/styles/components/Alert.css +4 -3
  26. package/dist/styles/components/Badge.css +27 -0
  27. package/dist/styles/components/PhotoUploader.css +6 -18
  28. package/dist/styles/components/ProgressAccordeon.css +26 -12
  29. package/dist/styles/index.css +1947 -1917
  30. package/dist/styles/muka-dark.css +1947 -1917
  31. package/dist/styles/muka-light.css +1947 -1917
  32. package/dist/styles/wireframe-dark.css +1947 -1917
  33. package/dist/styles/wireframe-light.css +1947 -1917
  34. package/dist/types/components/Alert/Alert.d.ts +1 -1
  35. package/dist/types/components/Alert/Alert.d.ts.map +1 -1
  36. package/dist/types/components/Badge/Badge.d.ts +7 -5
  37. package/dist/types/components/Badge/Badge.d.ts.map +1 -1
  38. package/dist/types/components/PhotoUploader/PhotoUploader.d.ts +8 -8
  39. package/dist/types/components/PhotoUploader/PhotoUploader.d.ts.map +1 -1
  40. package/dist/types/components/ProgressAccordeon/ProgressAccordeon.d.ts +36 -29
  41. package/dist/types/components/ProgressAccordeon/ProgressAccordeon.d.ts.map +1 -1
  42. package/package.json +1 -1
@@ -2471,6 +2471,38 @@ body {
2471
2471
  }
2472
2472
 
2473
2473
 
2474
+ /* VoiceMessage */
2475
+ /* VoiceMessage Component Styles */
2476
+
2477
+ .muka-voice-message {
2478
+ display: flex;
2479
+ align-items: center;
2480
+ gap: var(--spacing-3);
2481
+ width: 100%;
2482
+ min-width: min(16rem, 60vw);
2483
+ }
2484
+
2485
+ .muka-voice-message__wave {
2486
+ flex: 1 1 auto;
2487
+ min-width: 0;
2488
+ }
2489
+
2490
+ .muka-voice-message__time {
2491
+ flex: 0 0 auto;
2492
+ white-space: nowrap;
2493
+ font-size: var(--text-label-sm-fontSize, 0.75rem);
2494
+ line-height: var(--text-label-sm-lineHeight, 1);
2495
+ font-variant-numeric: tabular-nums;
2496
+ color: var(--color-text-subtle-default);
2497
+ }
2498
+
2499
+ /* On the tinted own bubble the surface is the action color, so the timer flips
2500
+ * to the inverse text token for contrast. */
2501
+ .muka-voice-message--own .muka-voice-message__time {
2502
+ color: var(--color-text-default-inverse);
2503
+ }
2504
+
2505
+
2474
2506
  /* View */
2475
2507
  /* View Component Styles */
2476
2508
 
@@ -2581,38 +2613,6 @@ body {
2581
2613
  }
2582
2614
 
2583
2615
 
2584
- /* VoiceMessage */
2585
- /* VoiceMessage Component Styles */
2586
-
2587
- .muka-voice-message {
2588
- display: flex;
2589
- align-items: center;
2590
- gap: var(--spacing-3);
2591
- width: 100%;
2592
- min-width: min(16rem, 60vw);
2593
- }
2594
-
2595
- .muka-voice-message__wave {
2596
- flex: 1 1 auto;
2597
- min-width: 0;
2598
- }
2599
-
2600
- .muka-voice-message__time {
2601
- flex: 0 0 auto;
2602
- white-space: nowrap;
2603
- font-size: var(--text-label-sm-fontSize, 0.75rem);
2604
- line-height: var(--text-label-sm-lineHeight, 1);
2605
- font-variant-numeric: tabular-nums;
2606
- color: var(--color-text-subtle-default);
2607
- }
2608
-
2609
- /* On the tinted own bubble the surface is the action color, so the timer flips
2610
- * to the inverse text token for contrast. */
2611
- .muka-voice-message--own .muka-voice-message__time {
2612
- color: var(--color-text-default-inverse);
2613
- }
2614
-
2615
-
2616
2616
  /* Typography */
2617
2617
  .muka-typography-catalog {
2618
2618
  display: flex;
@@ -5263,81 +5263,6 @@ body {
5263
5263
  }
5264
5264
 
5265
5265
 
5266
- /* Skeleton */
5267
- /* Skeleton Component Styles */
5268
-
5269
- .muka-skeleton {
5270
- background-color: var(--color-surface-level1);
5271
- display: block;
5272
- }
5273
-
5274
- /* Variants */
5275
- .muka-skeleton--text {
5276
- height: 1em;
5277
- border-radius: var(--radius-md);
5278
- width: 100%;
5279
- }
5280
-
5281
- .muka-skeleton--circular {
5282
- width: 2.5rem;
5283
- height: 2.5rem;
5284
- border-radius: var(--radius-full);
5285
- }
5286
-
5287
- .muka-skeleton--rectangular {
5288
- height: 7.5rem;
5289
- border-radius: var(--radius-md);
5290
- width: 100%;
5291
- }
5292
-
5293
- /* Last line in multi-line text is shorter */
5294
- .muka-skeleton--last-line {
5295
- width: 80%;
5296
- }
5297
-
5298
- /* Lines container */
5299
- .muka-skeleton__lines {
5300
- display: flex;
5301
- flex-direction: column;
5302
- gap: var(--spacing-2);
5303
- }
5304
-
5305
- /* Shimmer animation */
5306
- @keyframes muka-skeleton-shimmer {
5307
- 0% {
5308
- background-position: -200% 0;
5309
- }
5310
- 100% {
5311
- background-position: 200% 0;
5312
- }
5313
- }
5314
-
5315
- .muka-skeleton--shimmer {
5316
- background: linear-gradient(
5317
- 90deg,
5318
- var(--color-surface-level1) 25%,
5319
- var(--color-surface-level2) 50%,
5320
- var(--color-surface-level1) 75%
5321
- );
5322
- background-size: 200% 100%;
5323
- animation: muka-skeleton-shimmer 1.5s ease-in-out infinite;
5324
- }
5325
-
5326
- /* Pulse animation */
5327
- @keyframes muka-skeleton-pulse {
5328
- 0%, 100% {
5329
- opacity: 1;
5330
- }
5331
- 50% {
5332
- opacity: 0.4;
5333
- }
5334
- }
5335
-
5336
- .muka-skeleton--pulse {
5337
- animation: muka-skeleton-pulse 1.5s ease-in-out infinite;
5338
- }
5339
-
5340
-
5341
5266
  /* Sheet */
5342
5267
  /* Sheet Component Styles */
5343
5268
 
@@ -5418,6 +5343,81 @@ body {
5418
5343
  }
5419
5344
 
5420
5345
 
5346
+ /* Skeleton */
5347
+ /* Skeleton Component Styles */
5348
+
5349
+ .muka-skeleton {
5350
+ background-color: var(--color-surface-level1);
5351
+ display: block;
5352
+ }
5353
+
5354
+ /* Variants */
5355
+ .muka-skeleton--text {
5356
+ height: 1em;
5357
+ border-radius: var(--radius-md);
5358
+ width: 100%;
5359
+ }
5360
+
5361
+ .muka-skeleton--circular {
5362
+ width: 2.5rem;
5363
+ height: 2.5rem;
5364
+ border-radius: var(--radius-full);
5365
+ }
5366
+
5367
+ .muka-skeleton--rectangular {
5368
+ height: 7.5rem;
5369
+ border-radius: var(--radius-md);
5370
+ width: 100%;
5371
+ }
5372
+
5373
+ /* Last line in multi-line text is shorter */
5374
+ .muka-skeleton--last-line {
5375
+ width: 80%;
5376
+ }
5377
+
5378
+ /* Lines container */
5379
+ .muka-skeleton__lines {
5380
+ display: flex;
5381
+ flex-direction: column;
5382
+ gap: var(--spacing-2);
5383
+ }
5384
+
5385
+ /* Shimmer animation */
5386
+ @keyframes muka-skeleton-shimmer {
5387
+ 0% {
5388
+ background-position: -200% 0;
5389
+ }
5390
+ 100% {
5391
+ background-position: 200% 0;
5392
+ }
5393
+ }
5394
+
5395
+ .muka-skeleton--shimmer {
5396
+ background: linear-gradient(
5397
+ 90deg,
5398
+ var(--color-surface-level1) 25%,
5399
+ var(--color-surface-level2) 50%,
5400
+ var(--color-surface-level1) 75%
5401
+ );
5402
+ background-size: 200% 100%;
5403
+ animation: muka-skeleton-shimmer 1.5s ease-in-out infinite;
5404
+ }
5405
+
5406
+ /* Pulse animation */
5407
+ @keyframes muka-skeleton-pulse {
5408
+ 0%, 100% {
5409
+ opacity: 1;
5410
+ }
5411
+ 50% {
5412
+ opacity: 0.4;
5413
+ }
5414
+ }
5415
+
5416
+ .muka-skeleton--pulse {
5417
+ animation: muka-skeleton-pulse 1.5s ease-in-out infinite;
5418
+ }
5419
+
5420
+
5421
5421
  /* Select */
5422
5422
  /* Select Component Styles - Aligned with Input for consistency */
5423
5423
 
@@ -7152,6 +7152,7 @@ body {
7152
7152
 
7153
7153
  /* Per-state gap: content-bearing steps are tighter, header-only steps looser */
7154
7154
  .muka-progress-accordeon--current,
7155
+ .muka-progress-accordeon--current.muka-progress-accordeon--expanded,
7155
7156
  .muka-progress-accordeon--past.muka-progress-accordeon--expanded,
7156
7157
  .muka-progress-accordeon--upcoming.muka-progress-accordeon--expanded {
7157
7158
  gap: var(--spacing-6);
@@ -7159,7 +7160,8 @@ body {
7159
7160
 
7160
7161
  .muka-progress-accordeon--upcoming,
7161
7162
  .muka-progress-accordeon--past.muka-progress-accordeon--collapsed,
7162
- .muka-progress-accordeon--upcoming.muka-progress-accordeon--collapsed {
7163
+ .muka-progress-accordeon--upcoming.muka-progress-accordeon--collapsed,
7164
+ .muka-progress-accordeon--current.muka-progress-accordeon--collapsed {
7163
7165
  gap: var(--spacing-8);
7164
7166
  }
7165
7167
 
@@ -7304,32 +7306,44 @@ body {
7304
7306
  width: 100%;
7305
7307
  }
7306
7308
 
7307
- /* ─── Collapse/expand animation (past & upcoming steps) ──────
7308
- The grid-template-rows 1fr → 0fr technique animates the content to/from its
7309
- intrinsic (auto) height with no magic max-height. Under prefers-reduced-motion
7310
- --motion-duration-view resolves to 0ms, so the toggle stays instant. */
7311
- .muka-progress-accordeon__slot-wrapper {
7309
+ /* ─── Collapse/expand animation (any expandable step) ──────
7310
+ Animates grid-template-rows 1fr ↔ 0fr so the panel (slot + actions) grows and
7311
+ shrinks to its intrinsic height. Opacity fades with the same duration.
7312
+ Under prefers-reduced-motion, --motion-duration-view is 0ms. */
7313
+ .muka-progress-accordeon__panel-wrapper {
7312
7314
  display: grid;
7313
7315
  grid-template-rows: 1fr;
7314
- transition: grid-template-rows var(--motion-duration-view) var(--motion-easing-enter);
7316
+ opacity: 1;
7317
+ transition:
7318
+ grid-template-rows var(--motion-duration-view) var(--motion-easing-enter),
7319
+ opacity var(--motion-duration-view) var(--motion-easing-enter);
7315
7320
  }
7316
7321
 
7317
- .muka-progress-accordeon__slot-wrapper--collapsed {
7322
+ .muka-progress-accordeon__panel-wrapper--collapsed {
7318
7323
  grid-template-rows: 0fr;
7324
+ opacity: 0;
7325
+ transition:
7326
+ grid-template-rows var(--motion-duration-view) var(--motion-easing-exit),
7327
+ opacity calc(var(--motion-duration-view) * 0.6) var(--motion-easing-exit);
7319
7328
  }
7320
7329
 
7321
7330
  /* The direct grid child clips and must have NO padding/border of its own —
7322
7331
  min-height:0 lets it shrink, and with no padding the 0fr track reaches a true
7323
7332
  0 height (padding on the item would leave a residual gap when collapsed). */
7324
- .muka-progress-accordeon__slot-clip {
7333
+ .muka-progress-accordeon__panel-clip {
7325
7334
  overflow: hidden;
7326
7335
  min-height: 0;
7327
7336
  }
7328
7337
 
7329
- /* The header↔content spacing lives on the inner slot (inside the clip region)
7330
- so it collapses together with the content. */
7331
- .muka-progress-accordeon__slot-wrapper .muka-progress-accordeon__slot {
7338
+ /* Header↔content spacing + slot/actions gap live inside the clip so they
7339
+ collapse together with the panel. */
7340
+ .muka-progress-accordeon__panel {
7341
+ display: flex;
7342
+ flex-direction: column;
7343
+ align-items: stretch;
7344
+ gap: var(--spacing-6);
7332
7345
  padding-top: var(--spacing-4);
7346
+ width: 100%;
7333
7347
  }
7334
7348
 
7335
7349
  /* ─── Action buttons (current state) ─────────────────────── */
@@ -7623,34 +7637,100 @@ body {
7623
7637
  }
7624
7638
 
7625
7639
 
7626
- /* Popover */
7627
- /* Popover Component Styles */
7628
-
7629
- .muka-popover__content {
7630
- background-color: var(--color-surface-level3);
7631
- border: var(--border-width-regular) solid var(--color-border-default);
7632
- border-radius: var(--radius-md);
7633
- padding: var(--spacing-4);
7634
- box-shadow: var(--shadow-level3);
7635
- max-width: 20rem;
7636
- z-index: 50;
7637
- animation: muka-popover-fade-in 150ms ease;
7638
- }
7640
+ /* PriceTag */
7641
+ /* PriceTag Component Styles - Using Muka Design Tokens */
7639
7642
 
7640
- @keyframes muka-popover-fade-in {
7641
- from {
7642
- opacity: 0;
7643
- transform: scale(0.96);
7644
- }
7645
- to {
7646
- opacity: 1;
7647
- transform: scale(1);
7648
- }
7643
+ .muka-price-tag {
7644
+ display: flex;
7645
+ flex-shrink: 0;
7649
7646
  }
7650
7647
 
7651
- /* Arrow */
7652
- .muka-popover__arrow {
7653
- fill: var(--color-surface-level3);
7648
+ /* Medium: stacked layout (price on top, unit below) */
7649
+ .muka-price-tag--md {
7650
+ flex-direction: column;
7651
+ align-items: flex-end;
7652
+ justify-content: center;
7653
+ }
7654
+
7655
+ /* Small: inline layout */
7656
+ .muka-price-tag--sm {
7657
+ flex-direction: row;
7658
+ align-items: center;
7659
+ gap: 3px;
7660
+ }
7661
+
7662
+ /* Amount row: currency + numbers */
7663
+ .muka-price-tag__amount {
7664
+ display: flex;
7665
+ align-items: flex-start;
7666
+ gap: var(--spacing-1);
7667
+ }
7668
+
7669
+ .muka-price-tag--sm .muka-price-tag__amount {
7670
+ align-items: center;
7671
+ }
7672
+
7673
+ /* Numbers group: whole + decimal + cents */
7674
+ .muka-price-tag__numbers {
7675
+ display: flex;
7676
+ align-items: baseline;
7677
+ }
7678
+
7679
+ /* ─── Medium size typography ──────────────────────────── */
7680
+
7681
+ .muka-price-tag--md .muka-price-tag__currency {
7682
+ font-family: var(--text-subheading-md-fontFamily);
7683
+ font-weight: var(--text-subheading-md-fontWeight);
7684
+ font-size: var(--text-subheading-md-fontSize);
7685
+ line-height: var(--text-label-2xl-bold-lineHeight);
7686
+ color: var(--color-text-subtle-default);
7687
+ }
7688
+
7689
+ .muka-price-tag--md .muka-price-tag__whole {
7690
+ font-family: var(--text-label-2xl-bold-fontFamily);
7691
+ font-weight: var(--text-label-2xl-bold-fontWeight);
7692
+ font-size: var(--text-label-2xl-bold-fontSize);
7693
+ line-height: var(--text-label-2xl-bold-lineHeight);
7694
+ color: var(--color-text-default-default);
7695
+ }
7696
+
7697
+ .muka-price-tag--md .muka-price-tag__decimal,
7698
+ .muka-price-tag--md .muka-price-tag__cents {
7699
+ font-family: var(--text-label-md-bold-fontFamily);
7700
+ font-weight: var(--text-label-md-bold-fontWeight);
7701
+ font-size: var(--text-label-md-bold-fontSize);
7702
+ line-height: var(--text-label-md-bold-lineHeight);
7703
+ color: var(--color-text-default-default);
7704
+ }
7705
+
7706
+ /* ─── Small size typography ───────────────────────────── */
7707
+
7708
+ .muka-price-tag--sm .muka-price-tag__currency {
7709
+ font-family: var(--text-body-base-regular-fontFamily);
7710
+ font-weight: var(--text-body-base-regular-fontWeight);
7711
+ font-size: var(--text-body-base-regular-fontSize);
7712
+ line-height: var(--text-label-md-bold-lineHeight);
7713
+ color: var(--color-text-subtle-default);
7714
+ }
7715
+
7716
+ .muka-price-tag--sm .muka-price-tag__whole,
7717
+ .muka-price-tag--sm .muka-price-tag__decimal,
7718
+ .muka-price-tag--sm .muka-price-tag__cents {
7719
+ font-family: var(--text-label-md-bold-fontFamily);
7720
+ font-weight: var(--text-label-md-bold-fontWeight);
7721
+ font-size: var(--text-label-md-bold-fontSize);
7722
+ line-height: var(--text-label-md-bold-lineHeight);
7723
+ color: var(--color-text-default-default);
7724
+ }
7725
+
7726
+ /* ─── Unit label (same for both sizes) ────────────────── */
7727
+
7728
+ .muka-price-tag__unit {
7729
+ font-family: var(--text-body-sm-regular-fontFamily);
7730
+ font-weight: var(--text-body-sm-regular-fontWeight);
7731
+ font-size: var(--text-body-sm-regular-fontSize);
7732
+ line-height: var(--text-body-sm-regular-lineHeight);
7733
+ color: var(--color-text-subtle-default);
7654
7734
  }
7655
7735
 
7656
7736
 
@@ -7751,6 +7831,37 @@ body {
7751
7831
  }
7752
7832
 
7753
7833
 
7834
+ /* Popover */
7835
+ /* Popover Component Styles */
7836
+
7837
+ .muka-popover__content {
7838
+ background-color: var(--color-surface-level3);
7839
+ border: var(--border-width-regular) solid var(--color-border-default);
7840
+ border-radius: var(--radius-md);
7841
+ padding: var(--spacing-4);
7842
+ box-shadow: var(--shadow-level3);
7843
+ max-width: 20rem;
7844
+ z-index: 50;
7845
+ animation: muka-popover-fade-in 150ms ease;
7846
+ }
7847
+
7848
+ @keyframes muka-popover-fade-in {
7849
+ from {
7850
+ opacity: 0;
7851
+ transform: scale(0.96);
7852
+ }
7853
+ to {
7854
+ opacity: 1;
7855
+ transform: scale(1);
7856
+ }
7857
+ }
7858
+
7859
+ /* Arrow */
7860
+ .muka-popover__arrow {
7861
+ fill: var(--color-surface-level3);
7862
+ }
7863
+
7864
+
7754
7865
  /* PhotoUploader */
7755
7866
  /* PhotoUploader Component Styles - Using Muka Design Tokens */
7756
7867
 
@@ -7796,7 +7907,7 @@ body {
7796
7907
  padding: 0;
7797
7908
  }
7798
7909
 
7799
- /* ─── Drop zone card ──────────────────────────────────── */
7910
+ /* ─── Drop zone card (button + "or drop here") ────────── */
7800
7911
  .muka-photo-uploader__dropzone {
7801
7912
  display: flex;
7802
7913
  flex-direction: column;
@@ -7820,24 +7931,12 @@ body {
7820
7931
  background-color: var(--color-surface-level1);
7821
7932
  }
7822
7933
 
7823
- .muka-photo-uploader__dropzone:focus-visible {
7824
- outline: 2px solid var(--color-border-focus);
7825
- outline-offset: 2px;
7826
- }
7827
-
7828
- .muka-photo-uploader__dropzone-icon {
7829
- display: flex;
7830
- align-items: center;
7831
- justify-content: center;
7832
- color: var(--color-icon-subtle-default);
7833
- }
7834
-
7835
7934
  .muka-photo-uploader__dropzone-text {
7836
- font-family: var(--text-body-base-regular-fontFamily);
7837
- font-size: var(--text-body-base-regular-fontSize);
7838
- font-weight: var(--text-body-base-regular-fontWeight);
7839
- line-height: var(--text-body-base-regular-lineHeight);
7840
- color: var(--color-text-subtle-default);
7935
+ font-family: var(--text-subheading-sm-fontFamily);
7936
+ font-size: var(--text-subheading-sm-fontSize);
7937
+ font-weight: var(--text-subheading-sm-fontWeight);
7938
+ line-height: var(--text-subheading-sm-lineHeight);
7939
+ color: var(--color-text-default-default);
7841
7940
  }
7842
7941
 
7843
7942
  /* ─── Disabled ────────────────────────────────────────── */
@@ -7879,103 +7978,6 @@ body {
7879
7978
  }
7880
7979
 
7881
7980
 
7882
- /* PriceTag */
7883
- /* PriceTag Component Styles - Using Muka Design Tokens */
7884
-
7885
- .muka-price-tag {
7886
- display: flex;
7887
- flex-shrink: 0;
7888
- }
7889
-
7890
- /* Medium: stacked layout (price on top, unit below) */
7891
- .muka-price-tag--md {
7892
- flex-direction: column;
7893
- align-items: flex-end;
7894
- justify-content: center;
7895
- }
7896
-
7897
- /* Small: inline layout */
7898
- .muka-price-tag--sm {
7899
- flex-direction: row;
7900
- align-items: center;
7901
- gap: 3px;
7902
- }
7903
-
7904
- /* Amount row: currency + numbers */
7905
- .muka-price-tag__amount {
7906
- display: flex;
7907
- align-items: flex-start;
7908
- gap: var(--spacing-1);
7909
- }
7910
-
7911
- .muka-price-tag--sm .muka-price-tag__amount {
7912
- align-items: center;
7913
- }
7914
-
7915
- /* Numbers group: whole + decimal + cents */
7916
- .muka-price-tag__numbers {
7917
- display: flex;
7918
- align-items: baseline;
7919
- }
7920
-
7921
- /* ─── Medium size typography ──────────────────────────── */
7922
-
7923
- .muka-price-tag--md .muka-price-tag__currency {
7924
- font-family: var(--text-subheading-md-fontFamily);
7925
- font-weight: var(--text-subheading-md-fontWeight);
7926
- font-size: var(--text-subheading-md-fontSize);
7927
- line-height: var(--text-label-2xl-bold-lineHeight);
7928
- color: var(--color-text-subtle-default);
7929
- }
7930
-
7931
- .muka-price-tag--md .muka-price-tag__whole {
7932
- font-family: var(--text-label-2xl-bold-fontFamily);
7933
- font-weight: var(--text-label-2xl-bold-fontWeight);
7934
- font-size: var(--text-label-2xl-bold-fontSize);
7935
- line-height: var(--text-label-2xl-bold-lineHeight);
7936
- color: var(--color-text-default-default);
7937
- }
7938
-
7939
- .muka-price-tag--md .muka-price-tag__decimal,
7940
- .muka-price-tag--md .muka-price-tag__cents {
7941
- font-family: var(--text-label-md-bold-fontFamily);
7942
- font-weight: var(--text-label-md-bold-fontWeight);
7943
- font-size: var(--text-label-md-bold-fontSize);
7944
- line-height: var(--text-label-md-bold-lineHeight);
7945
- color: var(--color-text-default-default);
7946
- }
7947
-
7948
- /* ─── Small size typography ───────────────────────────── */
7949
-
7950
- .muka-price-tag--sm .muka-price-tag__currency {
7951
- font-family: var(--text-body-base-regular-fontFamily);
7952
- font-weight: var(--text-body-base-regular-fontWeight);
7953
- font-size: var(--text-body-base-regular-fontSize);
7954
- line-height: var(--text-label-md-bold-lineHeight);
7955
- color: var(--color-text-subtle-default);
7956
- }
7957
-
7958
- .muka-price-tag--sm .muka-price-tag__whole,
7959
- .muka-price-tag--sm .muka-price-tag__decimal,
7960
- .muka-price-tag--sm .muka-price-tag__cents {
7961
- font-family: var(--text-label-md-bold-fontFamily);
7962
- font-weight: var(--text-label-md-bold-fontWeight);
7963
- font-size: var(--text-label-md-bold-fontSize);
7964
- line-height: var(--text-label-md-bold-lineHeight);
7965
- color: var(--color-text-default-default);
7966
- }
7967
-
7968
- /* ─── Unit label (same for both sizes) ────────────────── */
7969
-
7970
- .muka-price-tag__unit {
7971
- font-family: var(--text-body-sm-regular-fontFamily);
7972
- font-weight: var(--text-body-sm-regular-fontWeight);
7973
- font-size: var(--text-body-sm-regular-fontSize);
7974
- line-height: var(--text-body-sm-regular-lineHeight);
7975
- color: var(--color-text-subtle-default);
7976
- }
7977
-
7978
-
7979
7981
  /* PhotoDraftStrip */
7980
7982
  /* PhotoDraftStrip Component Styles */
7981
7983
 
@@ -8138,27 +8140,55 @@ body {
8138
8140
  }
8139
8141
 
8140
8142
 
8141
- /* Menu */
8142
- /* Menu Component Styles */
8143
+ /* NavigationTransition */
8144
+ /* NavigationTransition Component Styles */
8143
8145
 
8144
- /* ─── Content Container ──────────────────────────────────────────────────── */
8146
+ /* ─── Wrapper ────────────────────────────────────────── */
8145
8147
 
8146
- .muka-menu__content {
8147
- display: flex;
8148
- flex-direction: column;
8149
- min-width: var(--menu-content-min-width);
8150
- max-height: var(--menu-content-max-height);
8148
+ .muka-nav-transition {
8149
+ position: relative;
8150
+ height: 100vh;
8151
8151
  overflow: hidden;
8152
- background-color: var(--menu-content-color-background);
8153
- border: var(--menu-content-border-width) solid var(--menu-content-color-border);
8154
- border-radius: var(--menu-content-border-radius);
8155
- box-shadow: var(--menu-content-shadow);
8156
- padding: 0;
8157
- z-index: 50;
8152
+ }
8158
8153
 
8159
- /* Animation */
8160
- animation-duration: 150ms;
8161
- animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
8154
+ /* Disable interaction during animation */
8155
+ .muka-nav-transition--active {
8156
+ pointer-events: none;
8157
+ }
8158
+
8159
+ /* ─── View slots ─────────────────────────────────────── */
8160
+
8161
+ .muka-nav-transition--active .muka-nav-transition__view {
8162
+ position: absolute;
8163
+ inset: 0;
8164
+ }
8165
+
8166
+ /* Z-index layering */
8167
+ .muka-nav-transition__view--bottom { z-index: 1; }
8168
+ .muka-nav-transition__view--top { z-index: 2; }
8169
+
8170
+
8171
+ /* Menu */
8172
+ /* Menu Component Styles */
8173
+
8174
+ /* ─── Content Container ──────────────────────────────────────────────────── */
8175
+
8176
+ .muka-menu__content {
8177
+ display: flex;
8178
+ flex-direction: column;
8179
+ min-width: var(--menu-content-min-width);
8180
+ max-height: var(--menu-content-max-height);
8181
+ overflow: hidden;
8182
+ background-color: var(--menu-content-color-background);
8183
+ border: var(--menu-content-border-width) solid var(--menu-content-color-border);
8184
+ border-radius: var(--menu-content-border-radius);
8185
+ box-shadow: var(--menu-content-shadow);
8186
+ padding: 0;
8187
+ z-index: 50;
8188
+
8189
+ /* Animation */
8190
+ animation-duration: 150ms;
8191
+ animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
8162
8192
  }
8163
8193
 
8164
8194
  .muka-menu__body {
@@ -8803,34 +8833,6 @@ body {
8803
8833
  }
8804
8834
 
8805
8835
 
8806
- /* NavigationTransition */
8807
- /* NavigationTransition Component Styles */
8808
-
8809
- /* ─── Wrapper ────────────────────────────────────────── */
8810
-
8811
- .muka-nav-transition {
8812
- position: relative;
8813
- height: 100vh;
8814
- overflow: hidden;
8815
- }
8816
-
8817
- /* Disable interaction during animation */
8818
- .muka-nav-transition--active {
8819
- pointer-events: none;
8820
- }
8821
-
8822
- /* ─── View slots ─────────────────────────────────────── */
8823
-
8824
- .muka-nav-transition--active .muka-nav-transition__view {
8825
- position: absolute;
8826
- inset: 0;
8827
- }
8828
-
8829
- /* Z-index layering */
8830
- .muka-nav-transition__view--bottom { z-index: 1; }
8831
- .muka-nav-transition__view--top { z-index: 2; }
8832
-
8833
-
8834
8836
  /* ListItem */
8835
8837
  /* ListItem Component Styles - Using Muka Design Tokens */
8836
8838
 
@@ -9025,6 +9027,199 @@ li.muka-listitem {
9025
9027
  }
9026
9028
 
9027
9029
 
9030
+ /* LicensePlateInput */
9031
+ /* LicensePlateInput — Dutch RDW-style plate input
9032
+ *
9033
+ * Plate body colors are regulatory (EU/NL) and intentionally fixed:
9034
+ * - Plate yellow: #F0CE3D
9035
+ * - EU strip blue: #003399
9036
+ * - EU stars yellow: #FFCC00
9037
+ * - Plate text: #1A1A1A
9038
+ *
9039
+ * All surrounding UI (label, helper, focus ring, error border) uses Muka tokens.
9040
+ */
9041
+
9042
+ .muka-license-plate-input {
9043
+ --plate-yellow: #f0ce3d;
9044
+ --plate-blue: #003399;
9045
+ --plate-text: #1a1a1a;
9046
+ --plate-stars: #ffcc00;
9047
+
9048
+ display: inline-flex;
9049
+ flex-direction: column;
9050
+ gap: var(--spacing-2);
9051
+ }
9052
+
9053
+ /* Plate body */
9054
+ .muka-license-plate-input__plate {
9055
+ display: inline-flex;
9056
+ align-items: stretch;
9057
+ background-color: var(--plate-yellow);
9058
+ border-radius: var(--input-field-radius-md);
9059
+ cursor: text;
9060
+ position: relative;
9061
+ overflow: hidden;
9062
+ box-sizing: border-box;
9063
+ /* Subtle outline to lift the plate from light backgrounds */
9064
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
9065
+ /* Reserve space for the focus / error solid ring without shifting layout */
9066
+ outline: 3px solid transparent;
9067
+ outline-offset: 2px;
9068
+ transition: outline-color 0.15s ease, opacity 0.15s ease;
9069
+ }
9070
+
9071
+ /* Size variants — plate aspect echoes the real RDW plate (~5:1) */
9072
+ .muka-license-plate-input__plate--sm {
9073
+ height: 44px;
9074
+ min-width: 220px;
9075
+ border-radius: var(--input-field-radius-sm);
9076
+ }
9077
+
9078
+ .muka-license-plate-input__plate--md {
9079
+ height: 60px;
9080
+ min-width: 300px;
9081
+ border-radius: var(--input-field-radius-md);
9082
+ }
9083
+
9084
+ .muka-license-plate-input__plate--lg {
9085
+ height: 80px;
9086
+ min-width: 400px;
9087
+ border-radius: var(--input-field-radius-lg);
9088
+ }
9089
+
9090
+ /* Focus — solid outline ring */
9091
+ .muka-license-plate-input__plate--focused:not(.muka-license-plate-input__plate--disabled) {
9092
+ outline-color: var(--input-field-color-focus-border);
9093
+ }
9094
+
9095
+ /* Error — solid outline ring in error color */
9096
+ .muka-license-plate-input__plate--error:not(.muka-license-plate-input__plate--disabled) {
9097
+ outline-color: var(--input-field-color-error-border);
9098
+ }
9099
+
9100
+ /* Disabled */
9101
+ .muka-license-plate-input__plate--disabled {
9102
+ cursor: not-allowed;
9103
+ opacity: 0.55;
9104
+ }
9105
+
9106
+ /* EU strip */
9107
+ .muka-license-plate-input__eu-strip {
9108
+ display: inline-flex;
9109
+ flex-direction: column;
9110
+ align-items: center;
9111
+ justify-content: center;
9112
+ background-color: var(--plate-blue);
9113
+ color: #ffffff;
9114
+ flex-shrink: 0;
9115
+ padding: 0 0.4em;
9116
+ gap: 0.15em;
9117
+ /* Strip width scales with plate height for a consistent ratio */
9118
+ width: 14%;
9119
+ min-width: 36px;
9120
+ }
9121
+
9122
+ .muka-license-plate-input__eu-stars {
9123
+ width: 60%;
9124
+ max-width: 28px;
9125
+ aspect-ratio: 1 / 1;
9126
+ display: block;
9127
+ }
9128
+
9129
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__eu-stars {
9130
+ max-width: 20px;
9131
+ }
9132
+
9133
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__eu-stars {
9134
+ max-width: 36px;
9135
+ }
9136
+
9137
+ .muka-license-plate-input__country-code {
9138
+ font-family:
9139
+ 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
9140
+ font-weight: 700;
9141
+ letter-spacing: 0.04em;
9142
+ line-height: 1;
9143
+ color: #ffffff;
9144
+ }
9145
+
9146
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__country-code {
9147
+ font-size: 10px;
9148
+ }
9149
+
9150
+ .muka-license-plate-input__plate--md .muka-license-plate-input__country-code {
9151
+ font-size: 13px;
9152
+ }
9153
+
9154
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__country-code {
9155
+ font-size: 16px;
9156
+ }
9157
+
9158
+ /* Native input */
9159
+ .muka-license-plate-input__native {
9160
+ flex: 1;
9161
+ min-width: 0;
9162
+ border: none;
9163
+ outline: none;
9164
+ background: transparent;
9165
+ color: var(--plate-text);
9166
+ text-align: center;
9167
+ text-transform: uppercase;
9168
+ letter-spacing: 0.06em;
9169
+ /* Plate font — bold condensed sans is closest to the FE-Schrift look without
9170
+ shipping a custom font. JetBrains Mono is the system mono brand font. */
9171
+ font-family:
9172
+ 'Arial Narrow', 'Helvetica Neue', Helvetica, Arial, sans-serif;
9173
+ font-weight: 800;
9174
+ padding: 0 0.5em;
9175
+ width: 100%;
9176
+ caret-color: var(--plate-text);
9177
+ }
9178
+
9179
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__native {
9180
+ font-size: 22px;
9181
+ }
9182
+
9183
+ .muka-license-plate-input__plate--md .muka-license-plate-input__native {
9184
+ font-size: 30px;
9185
+ }
9186
+
9187
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__native {
9188
+ font-size: 42px;
9189
+ }
9190
+
9191
+ .muka-license-plate-input__native::placeholder {
9192
+ color: var(--plate-text);
9193
+ opacity: 0.55;
9194
+ font-weight: 700;
9195
+ letter-spacing: 0.08em;
9196
+ }
9197
+
9198
+ .muka-license-plate-input__plate--disabled .muka-license-plate-input__native {
9199
+ cursor: not-allowed;
9200
+ }
9201
+
9202
+ /* Helper text */
9203
+ .muka-license-plate-input__helper {
9204
+ font-family: var(--text-label-sm-regular-fontFamily);
9205
+ font-weight: var(--text-label-sm-regular-fontWeight);
9206
+ font-size: var(--text-label-sm-regular-fontSize);
9207
+ line-height: var(--text-label-sm-regular-lineHeight);
9208
+ color: var(--color-text-subtle-default);
9209
+ margin: 0;
9210
+ }
9211
+
9212
+ /* Error message */
9213
+ .muka-license-plate-input__error {
9214
+ font-family: var(--text-label-sm-regular-fontFamily);
9215
+ font-weight: var(--text-label-sm-regular-fontWeight);
9216
+ font-size: var(--text-label-sm-regular-fontSize);
9217
+ line-height: var(--text-label-sm-regular-lineHeight);
9218
+ color: var(--color-state-error-default);
9219
+ margin: 0;
9220
+ }
9221
+
9222
+
9028
9223
  /* Label */
9029
9224
  /* Label Component Styles - Using Muka Design Tokens */
9030
9225
 
@@ -9244,199 +9439,6 @@ li.muka-listitem {
9244
9439
  }
9245
9440
 
9246
9441
 
9247
- /* LicensePlateInput */
9248
- /* LicensePlateInput — Dutch RDW-style plate input
9249
- *
9250
- * Plate body colors are regulatory (EU/NL) and intentionally fixed:
9251
- * - Plate yellow: #F0CE3D
9252
- * - EU strip blue: #003399
9253
- * - EU stars yellow: #FFCC00
9254
- * - Plate text: #1A1A1A
9255
- *
9256
- * All surrounding UI (label, helper, focus ring, error border) uses Muka tokens.
9257
- */
9258
-
9259
- .muka-license-plate-input {
9260
- --plate-yellow: #f0ce3d;
9261
- --plate-blue: #003399;
9262
- --plate-text: #1a1a1a;
9263
- --plate-stars: #ffcc00;
9264
-
9265
- display: inline-flex;
9266
- flex-direction: column;
9267
- gap: var(--spacing-2);
9268
- }
9269
-
9270
- /* Plate body */
9271
- .muka-license-plate-input__plate {
9272
- display: inline-flex;
9273
- align-items: stretch;
9274
- background-color: var(--plate-yellow);
9275
- border-radius: var(--input-field-radius-md);
9276
- cursor: text;
9277
- position: relative;
9278
- overflow: hidden;
9279
- box-sizing: border-box;
9280
- /* Subtle outline to lift the plate from light backgrounds */
9281
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
9282
- /* Reserve space for the focus / error solid ring without shifting layout */
9283
- outline: 3px solid transparent;
9284
- outline-offset: 2px;
9285
- transition: outline-color 0.15s ease, opacity 0.15s ease;
9286
- }
9287
-
9288
- /* Size variants — plate aspect echoes the real RDW plate (~5:1) */
9289
- .muka-license-plate-input__plate--sm {
9290
- height: 44px;
9291
- min-width: 220px;
9292
- border-radius: var(--input-field-radius-sm);
9293
- }
9294
-
9295
- .muka-license-plate-input__plate--md {
9296
- height: 60px;
9297
- min-width: 300px;
9298
- border-radius: var(--input-field-radius-md);
9299
- }
9300
-
9301
- .muka-license-plate-input__plate--lg {
9302
- height: 80px;
9303
- min-width: 400px;
9304
- border-radius: var(--input-field-radius-lg);
9305
- }
9306
-
9307
- /* Focus — solid outline ring */
9308
- .muka-license-plate-input__plate--focused:not(.muka-license-plate-input__plate--disabled) {
9309
- outline-color: var(--input-field-color-focus-border);
9310
- }
9311
-
9312
- /* Error — solid outline ring in error color */
9313
- .muka-license-plate-input__plate--error:not(.muka-license-plate-input__plate--disabled) {
9314
- outline-color: var(--input-field-color-error-border);
9315
- }
9316
-
9317
- /* Disabled */
9318
- .muka-license-plate-input__plate--disabled {
9319
- cursor: not-allowed;
9320
- opacity: 0.55;
9321
- }
9322
-
9323
- /* EU strip */
9324
- .muka-license-plate-input__eu-strip {
9325
- display: inline-flex;
9326
- flex-direction: column;
9327
- align-items: center;
9328
- justify-content: center;
9329
- background-color: var(--plate-blue);
9330
- color: #ffffff;
9331
- flex-shrink: 0;
9332
- padding: 0 0.4em;
9333
- gap: 0.15em;
9334
- /* Strip width scales with plate height for a consistent ratio */
9335
- width: 14%;
9336
- min-width: 36px;
9337
- }
9338
-
9339
- .muka-license-plate-input__eu-stars {
9340
- width: 60%;
9341
- max-width: 28px;
9342
- aspect-ratio: 1 / 1;
9343
- display: block;
9344
- }
9345
-
9346
- .muka-license-plate-input__plate--sm .muka-license-plate-input__eu-stars {
9347
- max-width: 20px;
9348
- }
9349
-
9350
- .muka-license-plate-input__plate--lg .muka-license-plate-input__eu-stars {
9351
- max-width: 36px;
9352
- }
9353
-
9354
- .muka-license-plate-input__country-code {
9355
- font-family:
9356
- 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
9357
- font-weight: 700;
9358
- letter-spacing: 0.04em;
9359
- line-height: 1;
9360
- color: #ffffff;
9361
- }
9362
-
9363
- .muka-license-plate-input__plate--sm .muka-license-plate-input__country-code {
9364
- font-size: 10px;
9365
- }
9366
-
9367
- .muka-license-plate-input__plate--md .muka-license-plate-input__country-code {
9368
- font-size: 13px;
9369
- }
9370
-
9371
- .muka-license-plate-input__plate--lg .muka-license-plate-input__country-code {
9372
- font-size: 16px;
9373
- }
9374
-
9375
- /* Native input */
9376
- .muka-license-plate-input__native {
9377
- flex: 1;
9378
- min-width: 0;
9379
- border: none;
9380
- outline: none;
9381
- background: transparent;
9382
- color: var(--plate-text);
9383
- text-align: center;
9384
- text-transform: uppercase;
9385
- letter-spacing: 0.06em;
9386
- /* Plate font — bold condensed sans is closest to the FE-Schrift look without
9387
- shipping a custom font. JetBrains Mono is the system mono brand font. */
9388
- font-family:
9389
- 'Arial Narrow', 'Helvetica Neue', Helvetica, Arial, sans-serif;
9390
- font-weight: 800;
9391
- padding: 0 0.5em;
9392
- width: 100%;
9393
- caret-color: var(--plate-text);
9394
- }
9395
-
9396
- .muka-license-plate-input__plate--sm .muka-license-plate-input__native {
9397
- font-size: 22px;
9398
- }
9399
-
9400
- .muka-license-plate-input__plate--md .muka-license-plate-input__native {
9401
- font-size: 30px;
9402
- }
9403
-
9404
- .muka-license-plate-input__plate--lg .muka-license-plate-input__native {
9405
- font-size: 42px;
9406
- }
9407
-
9408
- .muka-license-plate-input__native::placeholder {
9409
- color: var(--plate-text);
9410
- opacity: 0.55;
9411
- font-weight: 700;
9412
- letter-spacing: 0.08em;
9413
- }
9414
-
9415
- .muka-license-plate-input__plate--disabled .muka-license-plate-input__native {
9416
- cursor: not-allowed;
9417
- }
9418
-
9419
- /* Helper text */
9420
- .muka-license-plate-input__helper {
9421
- font-family: var(--text-label-sm-regular-fontFamily);
9422
- font-weight: var(--text-label-sm-regular-fontWeight);
9423
- font-size: var(--text-label-sm-regular-fontSize);
9424
- line-height: var(--text-label-sm-regular-lineHeight);
9425
- color: var(--color-text-subtle-default);
9426
- margin: 0;
9427
- }
9428
-
9429
- /* Error message */
9430
- .muka-license-plate-input__error {
9431
- font-family: var(--text-label-sm-regular-fontFamily);
9432
- font-weight: var(--text-label-sm-regular-fontWeight);
9433
- font-size: var(--text-label-sm-regular-fontSize);
9434
- line-height: var(--text-label-sm-regular-lineHeight);
9435
- color: var(--color-state-error-default);
9436
- margin: 0;
9437
- }
9438
-
9439
-
9440
9442
  /* Input */
9441
9443
  /* Input Component Styles - Using Muka Design Tokens */
9442
9444
 
@@ -9718,6 +9720,60 @@ li.muka-listitem {
9718
9720
  }
9719
9721
 
9720
9722
 
9723
+ /* Icon */
9724
+ /* Icon Component Styles - Using Muka Design Tokens */
9725
+
9726
+ .muka-icon {
9727
+ display: inline-flex;
9728
+ align-items: center;
9729
+ justify-content: center;
9730
+ flex-shrink: 0;
9731
+ color: var(--color-icon-default-default, currentColor);
9732
+ }
9733
+
9734
+ /* Icons inside buttons should inherit from button's foreground color */
9735
+ .muka-button .muka-icon {
9736
+ color: inherit;
9737
+ }
9738
+
9739
+ .muka-icon--subtle {
9740
+ color: var(--color-icon-subtle-default);
9741
+ }
9742
+
9743
+ .muka-icon--muted {
9744
+ color: var(--color-icon-muted-default);
9745
+ }
9746
+
9747
+ .muka-icon--inverse {
9748
+ color: var(--color-icon-default-inverse);
9749
+ }
9750
+
9751
+ .muka-icon--xs {
9752
+ width: var(--icon-size-xs);
9753
+ height: var(--icon-size-xs);
9754
+ }
9755
+
9756
+ .muka-icon--sm {
9757
+ width: var(--icon-size-sm);
9758
+ height: var(--icon-size-sm);
9759
+ }
9760
+
9761
+ .muka-icon--md {
9762
+ width: var(--icon-size-default);
9763
+ height: var(--icon-size-default);
9764
+ }
9765
+
9766
+ .muka-icon--lg {
9767
+ width: var(--icon-size-lg);
9768
+ height: var(--icon-size-lg);
9769
+ }
9770
+
9771
+ .muka-icon svg {
9772
+ width: 100%;
9773
+ height: 100%;
9774
+ }
9775
+
9776
+
9721
9777
  /* Form */
9722
9778
  .muka-form {
9723
9779
  display: flex;
@@ -10000,207 +10056,12 @@ li.muka-listitem {
10000
10056
  }
10001
10057
 
10002
10058
 
10003
- /* Icon */
10004
- /* Icon Component Styles - Using Muka Design Tokens */
10005
-
10006
- .muka-icon {
10007
- display: inline-flex;
10008
- align-items: center;
10009
- justify-content: center;
10010
- flex-shrink: 0;
10011
- color: var(--color-icon-default-default, currentColor);
10012
- }
10013
-
10014
- /* Icons inside buttons should inherit from button's foreground color */
10015
- .muka-button .muka-icon {
10016
- color: inherit;
10017
- }
10018
-
10019
- .muka-icon--subtle {
10020
- color: var(--color-icon-subtle-default);
10021
- }
10022
-
10023
- .muka-icon--muted {
10024
- color: var(--color-icon-muted-default);
10025
- }
10026
-
10027
- .muka-icon--inverse {
10028
- color: var(--color-icon-default-inverse);
10029
- }
10030
-
10031
- .muka-icon--xs {
10032
- width: var(--icon-size-xs);
10033
- height: var(--icon-size-xs);
10034
- }
10035
-
10036
- .muka-icon--sm {
10037
- width: var(--icon-size-sm);
10038
- height: var(--icon-size-sm);
10039
- }
10040
-
10041
- .muka-icon--md {
10042
- width: var(--icon-size-default);
10043
- height: var(--icon-size-default);
10044
- }
10045
-
10046
- .muka-icon--lg {
10047
- width: var(--icon-size-lg);
10048
- height: var(--icon-size-lg);
10049
- }
10050
-
10051
- .muka-icon svg {
10052
- width: 100%;
10053
- height: 100%;
10054
- }
10055
-
10056
-
10057
- /* EmptyState */
10058
- /* EmptyState Component Styles - Using Muka Design Tokens */
10059
-
10060
- .muka-emptystate {
10061
- display: flex;
10062
- flex-direction: column;
10063
- align-items: center;
10064
- justify-content: center;
10065
- gap: var(--emptystate-container-gap);
10066
- max-width: var(--emptystate-container-maxWidth);
10067
- margin: 0 auto;
10068
- text-align: center;
10069
- }
10070
-
10071
- /* Alignment variants */
10072
- .muka-emptystate--left {
10073
- align-items: flex-start;
10074
- text-align: left;
10075
- }
10076
-
10077
- /* Size variants */
10078
- .muka-emptystate--sm {
10079
- padding: var(--emptystate-container-padding-sm);
10080
- }
10081
-
10082
- .muka-emptystate--md {
10083
- padding: var(--emptystate-container-padding-md);
10084
- }
10085
-
10086
- .muka-emptystate--lg {
10087
- padding: var(--emptystate-container-padding-lg);
10088
- }
10089
-
10090
- /* Visual (icon or illustration) */
10091
- .muka-emptystate__visual {
10092
- display: flex;
10093
- align-items: center;
10094
- justify-content: center;
10095
- color: var(--emptystate-icon-color);
10096
- flex-shrink: 0;
10097
- }
10098
-
10099
- .muka-emptystate--sm .muka-emptystate__visual {
10100
- width: var(--emptystate-icon-size-sm);
10101
- height: var(--emptystate-icon-size-sm);
10102
- }
10103
-
10104
- .muka-emptystate--md .muka-emptystate__visual {
10105
- width: var(--emptystate-icon-size-md);
10106
- height: var(--emptystate-icon-size-md);
10107
- }
10108
-
10109
- .muka-emptystate--lg .muka-emptystate__visual {
10110
- width: var(--emptystate-icon-size-lg);
10111
- height: var(--emptystate-icon-size-lg);
10112
- }
10113
-
10114
- .muka-emptystate__visual svg {
10115
- width: 100%;
10116
- height: 100%;
10117
- }
10118
-
10119
- .muka-emptystate__visual img {
10120
- width: 100%;
10121
- height: 100%;
10122
- object-fit: contain;
10123
- }
10124
-
10125
- /* Content */
10126
- .muka-emptystate__content {
10127
- display: flex;
10128
- flex-direction: column;
10129
- gap: var(--spacing-2);
10130
- }
10131
-
10132
- .muka-emptystate--left .muka-emptystate__content {
10133
- align-items: flex-start;
10134
- }
10135
-
10136
- /* Title */
10137
- .muka-emptystate__title {
10138
- color: var(--emptystate-title-color);
10139
- margin: 0;
10140
- font-family: var(--text-heading-sm-fontFamily);
10141
- font-weight: var(--text-heading-sm-fontWeight);
10142
- font-size: var(--text-heading-sm-fontSize);
10143
- line-height: var(--text-heading-sm-lineHeight);
10144
- }
10145
-
10146
- .muka-emptystate--sm .muka-emptystate__title {
10147
- font-family: var(--text-label-lg-semibold-fontFamily);
10148
- font-weight: var(--text-label-lg-semibold-fontWeight);
10149
- font-size: var(--text-label-lg-semibold-fontSize);
10150
- line-height: var(--text-label-lg-semibold-lineHeight);
10151
- }
10152
-
10153
- .muka-emptystate--lg .muka-emptystate__title {
10154
- font-family: var(--text-heading-md-fontFamily);
10155
- font-weight: var(--text-heading-md-fontWeight);
10156
- font-size: var(--text-heading-md-fontSize);
10157
- line-height: var(--text-heading-md-lineHeight);
10158
- }
10159
-
10160
- /* Description */
10161
- .muka-emptystate__description {
10162
- color: var(--emptystate-description-color);
10163
- margin: 0;
10164
- font-family: var(--text-body-sm-regular-fontFamily);
10165
- font-weight: var(--text-body-sm-regular-fontWeight);
10166
- font-size: var(--text-body-sm-regular-fontSize);
10167
- line-height: var(--text-body-sm-regular-lineHeight);
10168
- }
10169
-
10170
- .muka-emptystate--md .muka-emptystate__description {
10171
- font-family: var(--text-body-base-regular-fontFamily);
10172
- font-weight: var(--text-body-base-regular-fontWeight);
10173
- font-size: var(--text-body-base-regular-fontSize);
10174
- line-height: var(--text-body-base-regular-lineHeight);
10175
- }
10176
-
10177
- .muka-emptystate--lg .muka-emptystate__description {
10178
- font-family: var(--text-body-lg-regular-fontFamily);
10179
- font-weight: var(--text-body-lg-regular-fontWeight);
10180
- font-size: var(--text-body-lg-regular-fontSize);
10181
- line-height: var(--text-body-lg-regular-lineHeight);
10182
- }
10183
-
10184
- /* Actions */
10185
- .muka-emptystate__actions {
10186
- display: flex;
10187
- gap: var(--emptystate-actions-gap);
10188
- margin-top: var(--emptystate-actions-marginTop);
10189
- flex-wrap: wrap;
10190
- justify-content: center;
10191
- }
10192
-
10193
- .muka-emptystate--left .muka-emptystate__actions {
10194
- justify-content: flex-start;
10195
- }
10196
-
10197
-
10198
- /* FAB */
10199
- /* FAB (Floating Action Button) Component Styles */
10200
-
10201
- .muka-fab {
10202
- position: fixed;
10203
- z-index: 40;
10059
+ /* FAB */
10060
+ /* FAB (Floating Action Button) Component Styles */
10061
+
10062
+ .muka-fab {
10063
+ position: fixed;
10064
+ z-index: 40;
10204
10065
 
10205
10066
  display: inline-flex;
10206
10067
  align-items: center;
@@ -10742,36 +10603,315 @@ li.muka-listitem {
10742
10603
  }
10743
10604
 
10744
10605
 
10745
- /* Divider */
10746
- /* Divider Component Styles - Using Muka Design Tokens */
10606
+ /* DocumentViewer */
10607
+ /* DocumentViewer Component Styles - Using Muka Design Tokens */
10747
10608
 
10748
- .muka-divider {
10749
- flex-shrink: 0;
10609
+ .muka-documentviewer {
10610
+ display: flex;
10611
+ flex-direction: column;
10612
+ background-color: var(--documentviewer-container-background);
10613
+ border-radius: var(--documentviewer-container-borderRadius);
10614
+ overflow: hidden;
10615
+ position: relative;
10750
10616
  }
10751
10617
 
10752
- .muka-divider--horizontal {
10753
- width: 100%;
10754
- height: var(--separator-width);
10618
+ .muka-documentviewer--fullscreen {
10619
+ position: fixed;
10620
+ top: 0;
10621
+ left: 0;
10622
+ right: 0;
10623
+ bottom: 0;
10624
+ width: 100vw;
10625
+ height: 100vh;
10626
+ z-index: 9999;
10627
+ border-radius: 0;
10755
10628
  }
10756
10629
 
10757
- .muka-divider--vertical {
10758
- height: 100%;
10759
- width: var(--separator-width);
10760
- align-self: stretch;
10630
+ /* Toolbar */
10631
+ .muka-documentviewer__toolbar {
10632
+ display: flex;
10633
+ align-items: center;
10634
+ justify-content: space-between;
10635
+ height: var(--documentviewer-toolbar-height);
10636
+ padding: var(--documentviewer-toolbar-padding-y) var(--documentviewer-toolbar-padding-x);
10637
+ background-color: var(--documentviewer-toolbar-background);
10638
+ border-bottom: 1px solid var(--documentviewer-toolbar-border);
10639
+ gap: var(--documentviewer-toolbar-gap);
10640
+ flex-shrink: 0;
10761
10641
  }
10762
10642
 
10763
- .muka-divider--default {
10764
- background-color: var(--separator-color-default);
10643
+ .muka-documentviewer__toolbar-section {
10644
+ display: flex;
10645
+ align-items: center;
10646
+ gap: var(--documentviewer-toolbar-gap);
10765
10647
  }
10766
10648
 
10767
- .muka-divider--contrast {
10768
- background-color: var(--separator-color-contrast);
10649
+ .muka-documentviewer__toolbar-section--center {
10650
+ flex: 1;
10651
+ justify-content: center;
10769
10652
  }
10770
10653
 
10654
+ .muka-documentviewer__toolbar-section--end {
10655
+ justify-content: flex-end;
10656
+ }
10657
+
10658
+ /* Page navigation */
10659
+ .muka-documentviewer__page-input {
10660
+ display: flex;
10661
+ align-items: center;
10662
+ gap: var(--spacing-1);
10663
+ }
10664
+
10665
+ .muka-documentviewer__page-number {
10666
+ width: 3rem;
10667
+ padding: var(--spacing-1) var(--spacing-2);
10668
+ text-align: center;
10669
+ font-family: var(--alias-font-brand-family);
10670
+ font-size: var(--text-label-sm-fontSize);
10671
+ line-height: var(--text-label-sm-lineHeight);
10672
+ border: 1px solid var(--color-border-default);
10673
+ border-radius: var(--border-radius-md);
10674
+ background-color: var(--color-surface-level0);
10675
+ color: var(--color-text-default-default);
10676
+ }
10677
+
10678
+ .muka-documentviewer__page-number:focus {
10679
+ outline: 2px solid var(--color-border-focus);
10680
+ outline-offset: 0;
10681
+ border-color: var(--color-border-focus);
10682
+ }
10683
+
10684
+ .muka-documentviewer__page-total {
10685
+ font-family: var(--alias-font-brand-family);
10686
+ font-size: var(--text-label-sm-fontSize);
10687
+ color: var(--color-text-subtle-default);
10688
+ }
10689
+
10690
+ /* Zoom controls */
10691
+ .muka-documentviewer__zoom-display {
10692
+ min-width: var(--documentviewer-zoom-button-width);
10693
+ padding: var(--spacing-1) var(--spacing-2);
10694
+ font-family: var(--alias-font-brand-family);
10695
+ font-size: var(--text-label-sm-fontSize);
10696
+ font-weight: var(--alias-font-brand-weight-semibold);
10697
+ color: var(--color-text-default-default);
10698
+ background: transparent;
10699
+ border: none;
10700
+ border-radius: var(--border-radius-md);
10701
+ cursor: pointer;
10702
+ transition: background-color 0.2s ease;
10703
+ }
10704
+
10705
+ .muka-documentviewer__zoom-display:hover {
10706
+ background-color: var(--color-surface-level2);
10707
+ }
10708
+
10709
+ .muka-documentviewer__zoom-display:focus {
10710
+ outline: 2px solid var(--color-border-focus);
10711
+ outline-offset: 0;
10712
+ }
10713
+
10714
+ /* Content area */
10715
+ .muka-documentviewer__content {
10716
+ display: flex;
10717
+ flex: 1;
10718
+ overflow: hidden;
10719
+ }
10720
+
10721
+ .muka-documentviewer__main {
10722
+ flex: 1;
10723
+ display: flex;
10724
+ flex-direction: column;
10725
+ overflow: hidden;
10726
+ position: relative;
10727
+ }
10728
+
10729
+ /* Canvas */
10730
+ .muka-documentviewer__canvas {
10731
+ flex: 1;
10732
+ background-color: var(--documentviewer-canvas-background);
10733
+ padding: var(--documentviewer-canvas-padding);
10734
+ overflow: auto;
10735
+ display: flex;
10736
+ align-items: flex-start;
10737
+ justify-content: center;
10738
+ }
10739
+
10740
+ .muka-documentviewer__page {
10741
+ background-color: var(--documentviewer-page-background);
10742
+ box-shadow: var(--documentviewer-page-shadow);
10743
+ border-radius: var(--documentviewer-page-borderRadius);
10744
+ overflow: hidden;
10745
+ }
10746
+
10747
+ .muka-documentviewer__page canvas {
10748
+ display: block;
10749
+ max-width: 100%;
10750
+ height: auto;
10751
+ }
10752
+
10753
+ .muka-documentviewer__page-number {
10754
+ text-align: center;
10755
+ padding: var(--spacing-2);
10756
+ font-family: var(--alias-font-brand-family);
10757
+ font-size: var(--text-label-sm-fontSize);
10758
+ color: var(--color-text-subtle-default);
10759
+ }
10760
+
10761
+ /* Thumbnails */
10762
+ .muka-documentviewer__thumbnails {
10763
+ width: var(--documentviewer-thumbnails-width);
10764
+ background-color: var(--documentviewer-thumbnails-background);
10765
+ border-right: 1px solid var(--documentviewer-thumbnails-border);
10766
+ overflow-y: auto;
10767
+ flex-shrink: 0;
10768
+ }
10769
+
10770
+ .muka-documentviewer__thumbnails-list {
10771
+ display: flex;
10772
+ flex-direction: column;
10773
+ gap: var(--documentviewer-thumbnails-item-gap);
10774
+ padding: var(--spacing-2);
10775
+ }
10776
+
10777
+ .muka-documentviewer__thumbnail-item {
10778
+ display: flex;
10779
+ flex-direction: column;
10780
+ align-items: center;
10781
+ gap: var(--spacing-1);
10782
+ padding: var(--documentviewer-thumbnails-item-padding);
10783
+ border-radius: var(--documentviewer-thumbnails-item-borderRadius);
10784
+ border: 2px solid var(--documentviewer-thumbnails-item-border-default);
10785
+ background-color: var(--documentviewer-thumbnails-item-background-default);
10786
+ cursor: pointer;
10787
+ transition: all 0.2s ease;
10788
+ width: 100%;
10789
+ }
10790
+
10791
+ .muka-documentviewer__thumbnail-item:hover {
10792
+ background-color: var(--documentviewer-thumbnails-item-background-hover);
10793
+ }
10794
+
10795
+ .muka-documentviewer__thumbnail-item--selected {
10796
+ background-color: var(--documentviewer-thumbnails-item-background-selected);
10797
+ border-color: var(--documentviewer-thumbnails-item-border-selected);
10798
+ }
10799
+
10800
+ .muka-documentviewer__thumbnail-item:focus {
10801
+ outline: 2px solid var(--color-border-focus);
10802
+ outline-offset: 2px;
10803
+ }
10804
+
10805
+ .muka-documentviewer__thumbnail-preview {
10806
+ width: 100%;
10807
+ overflow: hidden;
10808
+ border-radius: var(--border-radius-sm);
10809
+ }
10810
+
10811
+ .muka-documentviewer__thumbnail-preview canvas {
10812
+ display: block;
10813
+ width: 100%;
10814
+ height: auto;
10815
+ }
10816
+
10817
+ .muka-documentviewer__thumbnail-label {
10818
+ font-family: var(--alias-font-brand-family);
10819
+ font-size: var(--text-label-xs-regular-fontSize);
10820
+ color: var(--color-text-default-default);
10821
+ font-weight: var(--alias-font-brand-weight-medium);
10822
+ }
10823
+
10824
+ /* Loading state */
10825
+ .muka-documentviewer__loading {
10826
+ display: flex;
10827
+ align-items: center;
10828
+ justify-content: center;
10829
+ flex: 1;
10830
+ background-color: var(--documentviewer-loading-overlay-background);
10831
+ }
10832
+
10833
+ /* Error state */
10834
+ .muka-documentviewer__error {
10835
+ display: flex;
10836
+ align-items: center;
10837
+ justify-content: center;
10838
+ flex: 1;
10839
+ padding: var(--spacing-4);
10840
+ background-color: var(--documentviewer-error-background);
10841
+ }
10842
+
10843
+ /* Accessibility - visually hidden */
10844
+ .visually-hidden {
10845
+ position: absolute;
10846
+ width: 1px;
10847
+ height: 1px;
10848
+ margin: -1px;
10849
+ padding: 0;
10850
+ overflow: hidden;
10851
+ clip: rect(0, 0, 0, 0);
10852
+ white-space: nowrap;
10853
+ border-width: 0;
10854
+ }
10855
+
10856
+ /* React-PDF specific styles */
10857
+ .react-pdf__Document {
10858
+ display: flex;
10859
+ flex-direction: column;
10860
+ align-items: center;
10861
+ }
10862
+
10863
+ .react-pdf__Page {
10864
+ max-width: 100%;
10865
+ box-shadow: var(--documentviewer-page-shadow);
10866
+ border-radius: var(--documentviewer-page-borderRadius);
10867
+ overflow: hidden;
10868
+ }
10869
+
10870
+ .react-pdf__Page__canvas {
10871
+ max-width: 100%;
10872
+ height: auto !important;
10873
+ display: block;
10874
+ }
10875
+
10876
+ .react-pdf__Page__textContent {
10877
+ max-width: 100%;
10878
+ }
10879
+
10880
+ .react-pdf__Page__annotations {
10881
+ max-width: 100%;
10882
+ }
10883
+
10884
+
10885
+ /* Divider */
10886
+ /* Divider Component Styles - Using Muka Design Tokens */
10887
+
10888
+ .muka-divider {
10889
+ flex-shrink: 0;
10890
+ }
10891
+
10892
+ .muka-divider--horizontal {
10893
+ width: 100%;
10894
+ height: var(--separator-width);
10895
+ }
10896
+
10897
+ .muka-divider--vertical {
10898
+ height: 100%;
10899
+ width: var(--separator-width);
10900
+ align-self: stretch;
10901
+ }
10902
+
10903
+ .muka-divider--default {
10904
+ background-color: var(--separator-color-default);
10905
+ }
10906
+
10907
+ .muka-divider--contrast {
10908
+ background-color: var(--separator-color-contrast);
10909
+ }
10910
+
10911
+
10912
+ /* Dialog */
10913
+ /* Dialog Component Styles */
10771
10914
 
10772
- /* Dialog */
10773
- /* Dialog Component Styles */
10774
-
10775
10915
  /* ─── Native dialog reset ─────────────────────────────── */
10776
10916
 
10777
10917
  .muka-dialog {
@@ -11040,282 +11180,144 @@ li.muka-listitem {
11040
11180
  }
11041
11181
 
11042
11182
 
11043
- /* DocumentViewer */
11044
- /* DocumentViewer Component Styles - Using Muka Design Tokens */
11183
+ /* EmptyState */
11184
+ /* EmptyState Component Styles - Using Muka Design Tokens */
11045
11185
 
11046
- .muka-documentviewer {
11186
+ .muka-emptystate {
11047
11187
  display: flex;
11048
11188
  flex-direction: column;
11049
- background-color: var(--documentviewer-container-background);
11050
- border-radius: var(--documentviewer-container-borderRadius);
11051
- overflow: hidden;
11052
- position: relative;
11053
- }
11054
-
11055
- .muka-documentviewer--fullscreen {
11056
- position: fixed;
11057
- top: 0;
11058
- left: 0;
11059
- right: 0;
11060
- bottom: 0;
11061
- width: 100vw;
11062
- height: 100vh;
11063
- z-index: 9999;
11064
- border-radius: 0;
11065
- }
11066
-
11067
- /* Toolbar */
11068
- .muka-documentviewer__toolbar {
11069
- display: flex;
11070
- align-items: center;
11071
- justify-content: space-between;
11072
- height: var(--documentviewer-toolbar-height);
11073
- padding: var(--documentviewer-toolbar-padding-y) var(--documentviewer-toolbar-padding-x);
11074
- background-color: var(--documentviewer-toolbar-background);
11075
- border-bottom: 1px solid var(--documentviewer-toolbar-border);
11076
- gap: var(--documentviewer-toolbar-gap);
11077
- flex-shrink: 0;
11078
- }
11079
-
11080
- .muka-documentviewer__toolbar-section {
11081
- display: flex;
11082
11189
  align-items: center;
11083
- gap: var(--documentviewer-toolbar-gap);
11084
- }
11085
-
11086
- .muka-documentviewer__toolbar-section--center {
11087
- flex: 1;
11088
11190
  justify-content: center;
11089
- }
11090
-
11091
- .muka-documentviewer__toolbar-section--end {
11092
- justify-content: flex-end;
11093
- }
11094
-
11095
- /* Page navigation */
11096
- .muka-documentviewer__page-input {
11097
- display: flex;
11098
- align-items: center;
11099
- gap: var(--spacing-1);
11100
- }
11101
-
11102
- .muka-documentviewer__page-number {
11103
- width: 3rem;
11104
- padding: var(--spacing-1) var(--spacing-2);
11191
+ gap: var(--emptystate-container-gap);
11192
+ max-width: var(--emptystate-container-maxWidth);
11193
+ margin: 0 auto;
11105
11194
  text-align: center;
11106
- font-family: var(--alias-font-brand-family);
11107
- font-size: var(--text-label-sm-fontSize);
11108
- line-height: var(--text-label-sm-lineHeight);
11109
- border: 1px solid var(--color-border-default);
11110
- border-radius: var(--border-radius-md);
11111
- background-color: var(--color-surface-level0);
11112
- color: var(--color-text-default-default);
11113
11195
  }
11114
11196
 
11115
- .muka-documentviewer__page-number:focus {
11116
- outline: 2px solid var(--color-border-focus);
11117
- outline-offset: 0;
11118
- border-color: var(--color-border-focus);
11119
- }
11120
-
11121
- .muka-documentviewer__page-total {
11122
- font-family: var(--alias-font-brand-family);
11123
- font-size: var(--text-label-sm-fontSize);
11124
- color: var(--color-text-subtle-default);
11125
- }
11126
-
11127
- /* Zoom controls */
11128
- .muka-documentviewer__zoom-display {
11129
- min-width: var(--documentviewer-zoom-button-width);
11130
- padding: var(--spacing-1) var(--spacing-2);
11131
- font-family: var(--alias-font-brand-family);
11132
- font-size: var(--text-label-sm-fontSize);
11133
- font-weight: var(--alias-font-brand-weight-semibold);
11134
- color: var(--color-text-default-default);
11135
- background: transparent;
11136
- border: none;
11137
- border-radius: var(--border-radius-md);
11138
- cursor: pointer;
11139
- transition: background-color 0.2s ease;
11140
- }
11141
-
11142
- .muka-documentviewer__zoom-display:hover {
11143
- background-color: var(--color-surface-level2);
11144
- }
11145
-
11146
- .muka-documentviewer__zoom-display:focus {
11147
- outline: 2px solid var(--color-border-focus);
11148
- outline-offset: 0;
11149
- }
11150
-
11151
- /* Content area */
11152
- .muka-documentviewer__content {
11153
- display: flex;
11154
- flex: 1;
11155
- overflow: hidden;
11156
- }
11157
-
11158
- .muka-documentviewer__main {
11159
- flex: 1;
11160
- display: flex;
11161
- flex-direction: column;
11162
- overflow: hidden;
11163
- position: relative;
11164
- }
11165
-
11166
- /* Canvas */
11167
- .muka-documentviewer__canvas {
11168
- flex: 1;
11169
- background-color: var(--documentviewer-canvas-background);
11170
- padding: var(--documentviewer-canvas-padding);
11171
- overflow: auto;
11172
- display: flex;
11197
+ /* Alignment variants */
11198
+ .muka-emptystate--left {
11173
11199
  align-items: flex-start;
11174
- justify-content: center;
11175
- }
11176
-
11177
- .muka-documentviewer__page {
11178
- background-color: var(--documentviewer-page-background);
11179
- box-shadow: var(--documentviewer-page-shadow);
11180
- border-radius: var(--documentviewer-page-borderRadius);
11181
- overflow: hidden;
11182
- }
11183
-
11184
- .muka-documentviewer__page canvas {
11185
- display: block;
11186
- max-width: 100%;
11187
- height: auto;
11200
+ text-align: left;
11188
11201
  }
11189
11202
 
11190
- .muka-documentviewer__page-number {
11191
- text-align: center;
11192
- padding: var(--spacing-2);
11193
- font-family: var(--alias-font-brand-family);
11194
- font-size: var(--text-label-sm-fontSize);
11195
- color: var(--color-text-subtle-default);
11203
+ /* Size variants */
11204
+ .muka-emptystate--sm {
11205
+ padding: var(--emptystate-container-padding-sm);
11196
11206
  }
11197
11207
 
11198
- /* Thumbnails */
11199
- .muka-documentviewer__thumbnails {
11200
- width: var(--documentviewer-thumbnails-width);
11201
- background-color: var(--documentviewer-thumbnails-background);
11202
- border-right: 1px solid var(--documentviewer-thumbnails-border);
11203
- overflow-y: auto;
11204
- flex-shrink: 0;
11208
+ .muka-emptystate--md {
11209
+ padding: var(--emptystate-container-padding-md);
11205
11210
  }
11206
11211
 
11207
- .muka-documentviewer__thumbnails-list {
11208
- display: flex;
11209
- flex-direction: column;
11210
- gap: var(--documentviewer-thumbnails-item-gap);
11211
- padding: var(--spacing-2);
11212
+ .muka-emptystate--lg {
11213
+ padding: var(--emptystate-container-padding-lg);
11212
11214
  }
11213
11215
 
11214
- .muka-documentviewer__thumbnail-item {
11216
+ /* Visual (icon or illustration) */
11217
+ .muka-emptystate__visual {
11215
11218
  display: flex;
11216
- flex-direction: column;
11217
11219
  align-items: center;
11218
- gap: var(--spacing-1);
11219
- padding: var(--documentviewer-thumbnails-item-padding);
11220
- border-radius: var(--documentviewer-thumbnails-item-borderRadius);
11221
- border: 2px solid var(--documentviewer-thumbnails-item-border-default);
11222
- background-color: var(--documentviewer-thumbnails-item-background-default);
11223
- cursor: pointer;
11224
- transition: all 0.2s ease;
11225
- width: 100%;
11220
+ justify-content: center;
11221
+ color: var(--emptystate-icon-color);
11222
+ flex-shrink: 0;
11226
11223
  }
11227
11224
 
11228
- .muka-documentviewer__thumbnail-item:hover {
11229
- background-color: var(--documentviewer-thumbnails-item-background-hover);
11225
+ .muka-emptystate--sm .muka-emptystate__visual {
11226
+ width: var(--emptystate-icon-size-sm);
11227
+ height: var(--emptystate-icon-size-sm);
11230
11228
  }
11231
11229
 
11232
- .muka-documentviewer__thumbnail-item--selected {
11233
- background-color: var(--documentviewer-thumbnails-item-background-selected);
11234
- border-color: var(--documentviewer-thumbnails-item-border-selected);
11230
+ .muka-emptystate--md .muka-emptystate__visual {
11231
+ width: var(--emptystate-icon-size-md);
11232
+ height: var(--emptystate-icon-size-md);
11235
11233
  }
11236
11234
 
11237
- .muka-documentviewer__thumbnail-item:focus {
11238
- outline: 2px solid var(--color-border-focus);
11239
- outline-offset: 2px;
11235
+ .muka-emptystate--lg .muka-emptystate__visual {
11236
+ width: var(--emptystate-icon-size-lg);
11237
+ height: var(--emptystate-icon-size-lg);
11240
11238
  }
11241
11239
 
11242
- .muka-documentviewer__thumbnail-preview {
11240
+ .muka-emptystate__visual svg {
11243
11241
  width: 100%;
11244
- overflow: hidden;
11245
- border-radius: var(--border-radius-sm);
11242
+ height: 100%;
11246
11243
  }
11247
11244
 
11248
- .muka-documentviewer__thumbnail-preview canvas {
11249
- display: block;
11245
+ .muka-emptystate__visual img {
11250
11246
  width: 100%;
11251
- height: auto;
11247
+ height: 100%;
11248
+ object-fit: contain;
11252
11249
  }
11253
11250
 
11254
- .muka-documentviewer__thumbnail-label {
11255
- font-family: var(--alias-font-brand-family);
11256
- font-size: var(--text-label-xs-regular-fontSize);
11257
- color: var(--color-text-default-default);
11258
- font-weight: var(--alias-font-brand-weight-medium);
11251
+ /* Content */
11252
+ .muka-emptystate__content {
11253
+ display: flex;
11254
+ flex-direction: column;
11255
+ gap: var(--spacing-2);
11259
11256
  }
11260
11257
 
11261
- /* Loading state */
11262
- .muka-documentviewer__loading {
11263
- display: flex;
11264
- align-items: center;
11265
- justify-content: center;
11266
- flex: 1;
11267
- background-color: var(--documentviewer-loading-overlay-background);
11258
+ .muka-emptystate--left .muka-emptystate__content {
11259
+ align-items: flex-start;
11268
11260
  }
11269
11261
 
11270
- /* Error state */
11271
- .muka-documentviewer__error {
11272
- display: flex;
11273
- align-items: center;
11274
- justify-content: center;
11275
- flex: 1;
11276
- padding: var(--spacing-4);
11277
- background-color: var(--documentviewer-error-background);
11262
+ /* Title */
11263
+ .muka-emptystate__title {
11264
+ color: var(--emptystate-title-color);
11265
+ margin: 0;
11266
+ font-family: var(--text-heading-sm-fontFamily);
11267
+ font-weight: var(--text-heading-sm-fontWeight);
11268
+ font-size: var(--text-heading-sm-fontSize);
11269
+ line-height: var(--text-heading-sm-lineHeight);
11278
11270
  }
11279
11271
 
11280
- /* Accessibility - visually hidden */
11281
- .visually-hidden {
11282
- position: absolute;
11283
- width: 1px;
11284
- height: 1px;
11285
- margin: -1px;
11286
- padding: 0;
11287
- overflow: hidden;
11288
- clip: rect(0, 0, 0, 0);
11289
- white-space: nowrap;
11290
- border-width: 0;
11272
+ .muka-emptystate--sm .muka-emptystate__title {
11273
+ font-family: var(--text-label-lg-semibold-fontFamily);
11274
+ font-weight: var(--text-label-lg-semibold-fontWeight);
11275
+ font-size: var(--text-label-lg-semibold-fontSize);
11276
+ line-height: var(--text-label-lg-semibold-lineHeight);
11291
11277
  }
11292
11278
 
11293
- /* React-PDF specific styles */
11294
- .react-pdf__Document {
11295
- display: flex;
11296
- flex-direction: column;
11297
- align-items: center;
11279
+ .muka-emptystate--lg .muka-emptystate__title {
11280
+ font-family: var(--text-heading-md-fontFamily);
11281
+ font-weight: var(--text-heading-md-fontWeight);
11282
+ font-size: var(--text-heading-md-fontSize);
11283
+ line-height: var(--text-heading-md-lineHeight);
11298
11284
  }
11299
11285
 
11300
- .react-pdf__Page {
11301
- max-width: 100%;
11302
- box-shadow: var(--documentviewer-page-shadow);
11303
- border-radius: var(--documentviewer-page-borderRadius);
11304
- overflow: hidden;
11286
+ /* Description */
11287
+ .muka-emptystate__description {
11288
+ color: var(--emptystate-description-color);
11289
+ margin: 0;
11290
+ font-family: var(--text-body-sm-regular-fontFamily);
11291
+ font-weight: var(--text-body-sm-regular-fontWeight);
11292
+ font-size: var(--text-body-sm-regular-fontSize);
11293
+ line-height: var(--text-body-sm-regular-lineHeight);
11305
11294
  }
11306
11295
 
11307
- .react-pdf__Page__canvas {
11308
- max-width: 100%;
11309
- height: auto !important;
11310
- display: block;
11296
+ .muka-emptystate--md .muka-emptystate__description {
11297
+ font-family: var(--text-body-base-regular-fontFamily);
11298
+ font-weight: var(--text-body-base-regular-fontWeight);
11299
+ font-size: var(--text-body-base-regular-fontSize);
11300
+ line-height: var(--text-body-base-regular-lineHeight);
11311
11301
  }
11312
11302
 
11313
- .react-pdf__Page__textContent {
11314
- max-width: 100%;
11303
+ .muka-emptystate--lg .muka-emptystate__description {
11304
+ font-family: var(--text-body-lg-regular-fontFamily);
11305
+ font-weight: var(--text-body-lg-regular-fontWeight);
11306
+ font-size: var(--text-body-lg-regular-fontSize);
11307
+ line-height: var(--text-body-lg-regular-lineHeight);
11315
11308
  }
11316
11309
 
11317
- .react-pdf__Page__annotations {
11318
- max-width: 100%;
11310
+ /* Actions */
11311
+ .muka-emptystate__actions {
11312
+ display: flex;
11313
+ gap: var(--emptystate-actions-gap);
11314
+ margin-top: var(--emptystate-actions-marginTop);
11315
+ flex-wrap: wrap;
11316
+ justify-content: center;
11317
+ }
11318
+
11319
+ .muka-emptystate--left .muka-emptystate__actions {
11320
+ justify-content: flex-start;
11319
11321
  }
11320
11322
 
11321
11323
 
@@ -12605,235 +12607,68 @@ li.muka-listitem {
12605
12607
  height: 40px;
12606
12608
  }
12607
12609
 
12608
- /* Vertical image sizing */
12609
- .muka-checkbox-tile--vertical .muka-checkbox-tile__image {
12610
- width: 100%;
12611
- aspect-ratio: 4/3;
12612
- }
12613
-
12614
- /* Content container */
12615
- .muka-checkbox-tile__content {
12616
- display: flex;
12617
- flex-direction: column;
12618
- flex: 1;
12619
- min-width: 0;
12620
- gap: var(--spacing-2);
12621
- }
12622
-
12623
- .muka-checkbox-tile__content-inner {
12624
- display: flex;
12625
- flex-direction: column;
12626
- gap: var(--spacing-1);
12627
- }
12628
-
12629
- /* Chip slot (replaces badge; use Chip component) */
12630
- .muka-checkbox-tile__chip {
12631
- flex-shrink: 0;
12632
- }
12633
-
12634
- .muka-checkbox-tile__chip--vertical {
12635
- margin-top: var(--spacing-1);
12636
- }
12637
-
12638
- /* Label */
12639
- .muka-checkbox-tile__label {
12640
- font-family: var(--text-body-lg-regular-fontFamily);
12641
- font-weight: var(--text-body-lg-regular-fontWeight);
12642
- font-size: var(--text-body-lg-regular-fontSize);
12643
- line-height: var(--text-body-lg-regular-lineHeight);
12644
- color: var(--color-text-default-default);
12645
- }
12646
-
12647
- .muka-checkbox-tile__label--bold {
12648
- font-family: var(--text-label-lg-semibold-fontFamily);
12649
- font-weight: var(--text-label-lg-semibold-fontWeight);
12650
- font-size: var(--text-label-lg-semibold-fontSize);
12651
- line-height: var(--text-label-lg-semibold-lineHeight);
12652
- }
12653
-
12654
- .muka-checkbox-tile__label--center {
12655
- text-align: center;
12656
- }
12657
-
12658
- /* Caption */
12659
- .muka-checkbox-tile__caption {
12660
- font-family: var(--text-body-base-regular-fontFamily);
12661
- font-weight: var(--text-body-base-regular-fontWeight);
12662
- font-size: var(--text-body-base-regular-fontSize);
12663
- line-height: var(--text-body-base-regular-lineHeight);
12664
- color: var(--color-text-subtle-default);
12665
- }
12666
-
12667
- /* Disabled states */
12668
- .muka-checkbox-tile--disabled .muka-checkbox-tile__label,
12669
- .muka-checkbox-tile--disabled .muka-checkbox-tile__icon {
12670
- color: var(--color-text-subtle-default);
12671
- }
12672
-
12673
-
12674
- /* Checkbox */
12675
- /* Checkbox Component Styles - Using Muka Design Tokens */
12676
-
12677
- /* Wrapper - clickable label container */
12678
- .muka-checkbox {
12679
- display: inline-flex;
12680
- align-items: center;
12681
- gap: var(--spacing-4);
12682
- cursor: pointer;
12683
- user-select: none;
12684
- }
12685
-
12686
- .muka-checkbox--disabled {
12687
- cursor: not-allowed;
12688
- opacity: 0.6;
12689
- }
12690
-
12691
- /* Control container */
12692
- .muka-checkbox__control {
12693
- position: relative;
12694
- display: inline-flex;
12695
- align-items: center;
12696
- justify-content: center;
12697
- flex-shrink: 0;
12698
- }
12699
-
12700
- /* Hidden native input */
12701
- .muka-checkbox__input {
12702
- position: absolute;
12703
- width: 1px;
12704
- height: 1px;
12705
- padding: 0;
12706
- margin: -1px;
12707
- overflow: hidden;
12708
- clip: rect(0, 0, 0, 0);
12709
- white-space: nowrap;
12710
- border: 0;
12711
- }
12712
-
12713
- /* Visual indicator (square) */
12714
- .muka-checkbox__indicator {
12715
- display: flex;
12716
- align-items: center;
12717
- justify-content: center;
12718
- width: var(--checkbox-size-default);
12719
- height: var(--checkbox-size-default);
12720
- border-radius: var(--checkbox-radius);
12721
- background-color: var(--checkbox-color-default-background);
12722
- border: var(--border-width-regular) solid var(--checkbox-color-default-border);
12723
- transition: all 0.15s ease;
12724
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
12725
- }
12726
-
12727
- /* Size variants */
12728
- .muka-checkbox--sm .muka-checkbox__indicator {
12729
- width: var(--checkbox-size-sm);
12730
- height: var(--checkbox-size-sm);
12731
- }
12732
-
12733
- .muka-checkbox--lg .muka-checkbox__indicator {
12734
- width: var(--checkbox-size-lg);
12735
- height: var(--checkbox-size-lg);
12736
- }
12737
-
12738
- /* Icon inside checkbox */
12739
- .muka-checkbox__icon {
12740
- width: var(--checkbox-icon-size-default);
12741
- height: var(--checkbox-icon-size-default);
12742
- color: var(--checkbox-color-default-icon);
12743
- opacity: 0;
12744
- transform: scale(0.8);
12745
- transition: opacity 0.15s ease, transform 0.15s ease;
12746
- }
12747
-
12748
- .muka-checkbox--sm .muka-checkbox__icon {
12749
- width: var(--checkbox-icon-size-sm);
12750
- height: var(--checkbox-icon-size-sm);
12751
- }
12752
-
12753
- .muka-checkbox--lg .muka-checkbox__icon {
12754
- width: var(--checkbox-icon-size-lg);
12755
- height: var(--checkbox-icon-size-lg);
12756
- }
12757
-
12758
- /* Hide indeterminate icon by default */
12759
- .muka-checkbox__icon--indeterminate {
12760
- position: absolute;
12761
- }
12762
-
12763
- /* Hover state - removed per design */
12764
-
12765
- /* Focus state */
12766
- .muka-checkbox__input:focus-visible + .muka-checkbox__indicator {
12767
- outline: 2px solid var(--color-border-focus);
12768
- outline-offset: 2px;
12769
- }
12770
-
12771
- /* Checked state */
12772
- .muka-checkbox__input:checked + .muka-checkbox__indicator {
12773
- background-color: var(--checkbox-color-checked-background);
12774
- border-color: var(--checkbox-color-checked-border);
12775
- box-shadow: none;
12776
- }
12777
-
12778
- .muka-checkbox__input:checked + .muka-checkbox__indicator .muka-checkbox__icon--check {
12779
- color: var(--checkbox-color-checked-icon);
12780
- opacity: 1;
12781
- transform: scale(1);
12610
+ /* Vertical image sizing */
12611
+ .muka-checkbox-tile--vertical .muka-checkbox-tile__image {
12612
+ width: 100%;
12613
+ aspect-ratio: 4/3;
12782
12614
  }
12783
12615
 
12784
- /* Indeterminate state */
12785
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator {
12786
- background-color: var(--checkbox-color-checked-background);
12787
- border-color: var(--checkbox-color-checked-border);
12788
- box-shadow: none;
12616
+ /* Content container */
12617
+ .muka-checkbox-tile__content {
12618
+ display: flex;
12619
+ flex-direction: column;
12620
+ flex: 1;
12621
+ min-width: 0;
12622
+ gap: var(--spacing-2);
12789
12623
  }
12790
12624
 
12791
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--check {
12792
- opacity: 0;
12625
+ .muka-checkbox-tile__content-inner {
12626
+ display: flex;
12627
+ flex-direction: column;
12628
+ gap: var(--spacing-1);
12793
12629
  }
12794
12630
 
12795
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12796
- color: var(--checkbox-color-checked-icon);
12797
- opacity: 1;
12798
- transform: scale(1);
12631
+ /* Chip slot (replaces badge; use Chip component) */
12632
+ .muka-checkbox-tile__chip {
12633
+ flex-shrink: 0;
12799
12634
  }
12800
12635
 
12801
- /* Disabled state */
12802
- .muka-checkbox--disabled .muka-checkbox__indicator {
12803
- background-color: var(--checkbox-color-disabled-background);
12804
- border-color: var(--checkbox-color-disabled-border);
12805
- box-shadow: none;
12636
+ .muka-checkbox-tile__chip--vertical {
12637
+ margin-top: var(--spacing-1);
12806
12638
  }
12807
12639
 
12808
- .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12809
- .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12810
- color: var(--checkbox-color-disabled-icon);
12640
+ /* Label */
12641
+ .muka-checkbox-tile__label {
12642
+ font-family: var(--text-body-lg-regular-fontFamily);
12643
+ font-weight: var(--text-body-lg-regular-fontWeight);
12644
+ font-size: var(--text-body-lg-regular-fontSize);
12645
+ line-height: var(--text-body-lg-regular-lineHeight);
12646
+ color: var(--color-text-default-default);
12811
12647
  }
12812
12648
 
12813
- /* Label text */
12814
- .muka-checkbox__label {
12815
- font-family: var(--text-label-lg-regular-fontFamily);
12816
- font-weight: var(--text-label-lg-regular-fontWeight);
12817
- font-size: var(--text-label-lg-regular-fontSize);
12818
- line-height: var(--text-label-lg-regular-lineHeight);
12819
- color: var(--color-text-default-default);
12649
+ .muka-checkbox-tile__label--bold {
12650
+ font-family: var(--text-label-lg-semibold-fontFamily);
12651
+ font-weight: var(--text-label-lg-semibold-fontWeight);
12652
+ font-size: var(--text-label-lg-semibold-fontSize);
12653
+ line-height: var(--text-label-lg-semibold-lineHeight);
12820
12654
  }
12821
12655
 
12822
- .muka-checkbox--sm .muka-checkbox__label {
12823
- font-family: var(--text-label-md-regular-fontFamily);
12824
- font-weight: var(--text-label-md-regular-fontWeight);
12825
- font-size: var(--text-label-md-regular-fontSize);
12826
- line-height: var(--text-label-md-regular-lineHeight);
12656
+ .muka-checkbox-tile__label--center {
12657
+ text-align: center;
12827
12658
  }
12828
12659
 
12829
- .muka-checkbox--lg .muka-checkbox__label {
12830
- font-family: var(--text-label-xl-regular-fontFamily);
12831
- font-weight: var(--text-label-xl-regular-fontWeight);
12832
- font-size: var(--text-label-xl-regular-fontSize);
12833
- line-height: var(--text-label-xl-regular-lineHeight);
12660
+ /* Caption */
12661
+ .muka-checkbox-tile__caption {
12662
+ font-family: var(--text-body-base-regular-fontFamily);
12663
+ font-weight: var(--text-body-base-regular-fontWeight);
12664
+ font-size: var(--text-body-base-regular-fontSize);
12665
+ line-height: var(--text-body-base-regular-lineHeight);
12666
+ color: var(--color-text-subtle-default);
12834
12667
  }
12835
12668
 
12836
- .muka-checkbox--disabled .muka-checkbox__label {
12669
+ /* Disabled states */
12670
+ .muka-checkbox-tile--disabled .muka-checkbox-tile__label,
12671
+ .muka-checkbox-tile--disabled .muka-checkbox-tile__icon {
12837
12672
  color: var(--color-text-subtle-default);
12838
12673
  }
12839
12674
 
@@ -13004,13 +12839,180 @@ button.muka-chat-photo-grid__tile:focus-visible {
13004
12839
  );
13005
12840
  }
13006
12841
 
13007
- .muka-chat-message-stack--own.muka-chat-message-stack--has-avatar
13008
- .muka-chat-message-stack__reasoning {
13009
- padding-left: 0;
13010
- padding-right: calc(
13011
- var(--chatbubble-avatar-size-compact) + var(--chatbubble-row-gap-compact)
13012
- );
13013
- }
12842
+ .muka-chat-message-stack--own.muka-chat-message-stack--has-avatar
12843
+ .muka-chat-message-stack__reasoning {
12844
+ padding-left: 0;
12845
+ padding-right: calc(
12846
+ var(--chatbubble-avatar-size-compact) + var(--chatbubble-row-gap-compact)
12847
+ );
12848
+ }
12849
+ }
12850
+
12851
+
12852
+ /* Checkbox */
12853
+ /* Checkbox Component Styles - Using Muka Design Tokens */
12854
+
12855
+ /* Wrapper - clickable label container */
12856
+ .muka-checkbox {
12857
+ display: inline-flex;
12858
+ align-items: center;
12859
+ gap: var(--spacing-4);
12860
+ cursor: pointer;
12861
+ user-select: none;
12862
+ }
12863
+
12864
+ .muka-checkbox--disabled {
12865
+ cursor: not-allowed;
12866
+ opacity: 0.6;
12867
+ }
12868
+
12869
+ /* Control container */
12870
+ .muka-checkbox__control {
12871
+ position: relative;
12872
+ display: inline-flex;
12873
+ align-items: center;
12874
+ justify-content: center;
12875
+ flex-shrink: 0;
12876
+ }
12877
+
12878
+ /* Hidden native input */
12879
+ .muka-checkbox__input {
12880
+ position: absolute;
12881
+ width: 1px;
12882
+ height: 1px;
12883
+ padding: 0;
12884
+ margin: -1px;
12885
+ overflow: hidden;
12886
+ clip: rect(0, 0, 0, 0);
12887
+ white-space: nowrap;
12888
+ border: 0;
12889
+ }
12890
+
12891
+ /* Visual indicator (square) */
12892
+ .muka-checkbox__indicator {
12893
+ display: flex;
12894
+ align-items: center;
12895
+ justify-content: center;
12896
+ width: var(--checkbox-size-default);
12897
+ height: var(--checkbox-size-default);
12898
+ border-radius: var(--checkbox-radius);
12899
+ background-color: var(--checkbox-color-default-background);
12900
+ border: var(--border-width-regular) solid var(--checkbox-color-default-border);
12901
+ transition: all 0.15s ease;
12902
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
12903
+ }
12904
+
12905
+ /* Size variants */
12906
+ .muka-checkbox--sm .muka-checkbox__indicator {
12907
+ width: var(--checkbox-size-sm);
12908
+ height: var(--checkbox-size-sm);
12909
+ }
12910
+
12911
+ .muka-checkbox--lg .muka-checkbox__indicator {
12912
+ width: var(--checkbox-size-lg);
12913
+ height: var(--checkbox-size-lg);
12914
+ }
12915
+
12916
+ /* Icon inside checkbox */
12917
+ .muka-checkbox__icon {
12918
+ width: var(--checkbox-icon-size-default);
12919
+ height: var(--checkbox-icon-size-default);
12920
+ color: var(--checkbox-color-default-icon);
12921
+ opacity: 0;
12922
+ transform: scale(0.8);
12923
+ transition: opacity 0.15s ease, transform 0.15s ease;
12924
+ }
12925
+
12926
+ .muka-checkbox--sm .muka-checkbox__icon {
12927
+ width: var(--checkbox-icon-size-sm);
12928
+ height: var(--checkbox-icon-size-sm);
12929
+ }
12930
+
12931
+ .muka-checkbox--lg .muka-checkbox__icon {
12932
+ width: var(--checkbox-icon-size-lg);
12933
+ height: var(--checkbox-icon-size-lg);
12934
+ }
12935
+
12936
+ /* Hide indeterminate icon by default */
12937
+ .muka-checkbox__icon--indeterminate {
12938
+ position: absolute;
12939
+ }
12940
+
12941
+ /* Hover state - removed per design */
12942
+
12943
+ /* Focus state */
12944
+ .muka-checkbox__input:focus-visible + .muka-checkbox__indicator {
12945
+ outline: 2px solid var(--color-border-focus);
12946
+ outline-offset: 2px;
12947
+ }
12948
+
12949
+ /* Checked state */
12950
+ .muka-checkbox__input:checked + .muka-checkbox__indicator {
12951
+ background-color: var(--checkbox-color-checked-background);
12952
+ border-color: var(--checkbox-color-checked-border);
12953
+ box-shadow: none;
12954
+ }
12955
+
12956
+ .muka-checkbox__input:checked + .muka-checkbox__indicator .muka-checkbox__icon--check {
12957
+ color: var(--checkbox-color-checked-icon);
12958
+ opacity: 1;
12959
+ transform: scale(1);
12960
+ }
12961
+
12962
+ /* Indeterminate state */
12963
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator {
12964
+ background-color: var(--checkbox-color-checked-background);
12965
+ border-color: var(--checkbox-color-checked-border);
12966
+ box-shadow: none;
12967
+ }
12968
+
12969
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--check {
12970
+ opacity: 0;
12971
+ }
12972
+
12973
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12974
+ color: var(--checkbox-color-checked-icon);
12975
+ opacity: 1;
12976
+ transform: scale(1);
12977
+ }
12978
+
12979
+ /* Disabled state */
12980
+ .muka-checkbox--disabled .muka-checkbox__indicator {
12981
+ background-color: var(--checkbox-color-disabled-background);
12982
+ border-color: var(--checkbox-color-disabled-border);
12983
+ box-shadow: none;
12984
+ }
12985
+
12986
+ .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12987
+ .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12988
+ color: var(--checkbox-color-disabled-icon);
12989
+ }
12990
+
12991
+ /* Label text */
12992
+ .muka-checkbox__label {
12993
+ font-family: var(--text-label-lg-regular-fontFamily);
12994
+ font-weight: var(--text-label-lg-regular-fontWeight);
12995
+ font-size: var(--text-label-lg-regular-fontSize);
12996
+ line-height: var(--text-label-lg-regular-lineHeight);
12997
+ color: var(--color-text-default-default);
12998
+ }
12999
+
13000
+ .muka-checkbox--sm .muka-checkbox__label {
13001
+ font-family: var(--text-label-md-regular-fontFamily);
13002
+ font-weight: var(--text-label-md-regular-fontWeight);
13003
+ font-size: var(--text-label-md-regular-fontSize);
13004
+ line-height: var(--text-label-md-regular-lineHeight);
13005
+ }
13006
+
13007
+ .muka-checkbox--lg .muka-checkbox__label {
13008
+ font-family: var(--text-label-xl-regular-fontFamily);
13009
+ font-weight: var(--text-label-xl-regular-fontWeight);
13010
+ font-size: var(--text-label-xl-regular-fontSize);
13011
+ line-height: var(--text-label-xl-regular-lineHeight);
13012
+ }
13013
+
13014
+ .muka-checkbox--disabled .muka-checkbox__label {
13015
+ color: var(--color-text-subtle-default);
13014
13016
  }
13015
13017
 
13016
13018
 
@@ -13057,729 +13059,729 @@ button.muka-chat-photo-grid__tile:focus-visible {
13057
13059
  }
13058
13060
 
13059
13061
 
13060
- /* ChatMessage */
13061
- /* ChatMessage Component Styles */
13062
+ /* ChatComposer */
13063
+ /* ChatComposer Component Styles */
13062
13064
 
13063
- .muka-chat-message {
13065
+ /*
13066
+ * The composer is a bare, fill-width row: no padding, background, border or
13067
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
13068
+ * container — see BottomBar's `chat` variant.
13069
+ */
13070
+ .muka-chat-composer {
13064
13071
  display: flex;
13065
13072
  flex-direction: column;
13073
+ gap: var(--spacing-3);
13066
13074
  width: 100%;
13067
- max-width: 100%;
13068
13075
  }
13069
13076
 
13070
- /* ─── Row: avatar rail + bubble ────────────────────────── */
13077
+ .muka-chat-composer--disabled {
13078
+ opacity: 0.6;
13079
+ pointer-events: none;
13080
+ }
13071
13081
 
13072
- .muka-chat-message__row {
13073
- display: grid;
13074
- grid-template-columns: minmax(0, 1fr);
13075
- grid-template-areas: 'bubble';
13076
- column-gap: var(--chatbubble-row-gap);
13082
+ /* ─── Input row ────────────────────────────────────────── */
13083
+
13084
+ .muka-chat-composer__row {
13085
+ display: flex;
13077
13086
  width: 100%;
13087
+ align-items: flex-end;
13088
+ gap: var(--spacing-3);
13078
13089
  }
13079
13090
 
13080
- .muka-chat-message--has-avatar .muka-chat-message__row {
13081
- grid-template-columns: auto minmax(0, 1fr);
13082
- grid-template-areas: 'rail bubble';
13083
- }
13091
+ /* ─── Text field ───────────────────────────────────────── */
13084
13092
 
13085
- .muka-chat-message__rail {
13086
- grid-area: rail;
13087
- /* Sits on the bubble's baseline (Figma 5355:44091) */
13088
- align-self: end;
13093
+ .muka-chat-composer__field {
13089
13094
  display: flex;
13090
- justify-content: center;
13091
- min-width: var(--chatbubble-avatar-size);
13095
+ flex: 1 1 auto;
13096
+ min-width: 0;
13097
+ box-sizing: border-box;
13098
+ align-items: center;
13099
+ gap: var(--spacing-1);
13100
+ min-height: var(--input-field-height-lg, 48px);
13101
+ padding: 0 var(--spacing-2);
13102
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
13103
+ border-radius: var(--input-field-radius-lg);
13104
+ background-color: var(--input-field-color-default-background);
13105
+ transition: border-color 0.12s ease;
13092
13106
  }
13093
13107
 
13094
- /*
13095
- * The Small size in Figma (5373:44702) halves the avatar to 32px and tightens
13096
- * the gap to the bubble. Size the avatar itself, not just the rail, so the
13097
- * bubbles keep their alignment. The header row keeps its own gap.
13098
- */
13099
- @media (max-width: 1023px) {
13100
- .muka-chat-message__row {
13101
- column-gap: var(--chatbubble-row-gap-compact);
13102
- }
13108
+ .muka-chat-composer__field:focus-within {
13109
+ border-color: var(--input-field-color-focus-border, var(--color-action-default));
13110
+ }
13103
13111
 
13104
- .muka-chat-message__rail {
13105
- min-width: var(--chatbubble-avatar-size-compact);
13106
- }
13112
+ .muka-chat-composer__input {
13113
+ flex: 1 1 auto;
13114
+ min-width: 0;
13115
+ width: 100%;
13116
+ box-sizing: border-box;
13117
+ resize: none;
13118
+ border: none;
13119
+ background: transparent;
13120
+ outline: none;
13121
+ padding: 0 var(--spacing-1);
13122
+ color: var(--color-text-default-default);
13123
+ font-family: var(--text-body-base-regular-fontFamily);
13124
+ font-weight: var(--text-body-base-regular-fontWeight);
13125
+ font-size: var(--text-body-base-regular-fontSize);
13126
+ line-height: var(--text-body-base-regular-lineHeight);
13127
+ appearance: none;
13128
+ -webkit-appearance: none;
13129
+ }
13107
13130
 
13108
- /* Outweighs the avatar's own size class, which sets width/height directly */
13109
- .muka-chat-message .muka-chat-message__rail > * {
13110
- width: var(--chatbubble-avatar-size-compact);
13111
- height: var(--chatbubble-avatar-size-compact);
13112
- }
13131
+ .muka-chat-composer__input::placeholder {
13132
+ color: var(--color-text-subtle-default);
13113
13133
  }
13114
13134
 
13115
- /* ─── Bubble surface ───────────────────────────────────── */
13135
+ /* Keep the in-field emoji button flush to the bottom-right as the field grows */
13136
+ .muka-chat-composer__emoji {
13137
+ flex-shrink: 0;
13138
+ }
13116
13139
 
13117
- .muka-chat-message__bubble {
13118
- grid-area: bubble;
13119
- /*
13120
- * Width follows the content: a single line hugs, and once the text wraps the
13121
- * bubble fills to the shared max width. Robust to string or rich children —
13122
- * no length measuring needed (Figma `Text length` on 5355:44091).
13123
- */
13124
- width: fit-content;
13125
- /*
13126
- * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
13127
- * row; above it the fixed cap leaves room for own/peer alignment.
13128
- */
13129
- max-width: var(--chatbubble-max-width);
13130
- position: relative;
13140
+ /* ─── Recording bar ────────────────────────────────────── */
13141
+
13142
+ .muka-chat-composer__recording {
13131
13143
  display: flex;
13132
- flex-direction: column;
13133
- gap: var(--chatbubble-gap);
13134
- padding: var(--chatbubble-padding-block) var(--chatbubble-padding-inline);
13135
- border-radius: var(--chatbubble-radius);
13136
- border: var(--border-width-regular) solid transparent;
13137
- box-shadow: var(--shadow-level2);
13138
- word-break: break-word;
13144
+ flex: 1 1 auto;
13145
+ min-width: 0;
13146
+ box-sizing: border-box;
13147
+ align-items: center;
13148
+ min-height: var(--input-field-height-lg, 48px);
13149
+ padding: var(--card-padding-sm);
13150
+ border: var(--border-width-regular) solid var(--card-color-default-border);
13151
+ border-radius: var(--radius-lg);
13152
+ background-color: var(--card-color-default-background);
13139
13153
  }
13140
13154
 
13141
- /* Media, an embed or an action stack always run the full bubble width. */
13142
- .muka-chat-message--has-blocks .muka-chat-message__bubble {
13155
+ /* ─── Staged attachments strip ─────────────────────────── */
13156
+
13157
+ .muka-chat-composer__attachments-strip {
13158
+ position: relative;
13143
13159
  width: 100%;
13144
13160
  }
13145
13161
 
13146
- .muka-chat-message--own .muka-chat-message__bubble {
13147
- justify-self: end;
13162
+ .muka-chat-composer__attachments {
13163
+ display: flex;
13164
+ gap: var(--spacing-3);
13165
+ overflow-x: auto;
13166
+ scroll-behavior: smooth;
13167
+ scrollbar-width: none;
13148
13168
  }
13149
13169
 
13150
- .muka-chat-message--own .muka-chat-message__bubble {
13151
- background-color: var(--chatbubble-color-own-background);
13152
- border-color: var(--chatbubble-color-own-border);
13153
- color: var(--chatbubble-color-own-foreground);
13170
+ .muka-chat-composer__attachments::-webkit-scrollbar {
13171
+ display: none;
13154
13172
  }
13155
13173
 
13156
- .muka-chat-message--peer .muka-chat-message__bubble {
13157
- background-color: var(--chatbubble-color-peer-background);
13158
- border-color: var(--chatbubble-color-peer-border);
13159
- color: var(--chatbubble-color-peer-foreground);
13174
+ .muka-chat-composer__overflow {
13175
+ position: absolute;
13176
+ top: 50%;
13177
+ right: var(--spacing-2);
13178
+ transform: translateY(-50%);
13160
13179
  }
13161
13180
 
13162
- .muka-chat-message--agent .muka-chat-message__bubble {
13163
- background-color: var(--chatbubble-color-agent-background);
13164
- border-color: var(--chatbubble-color-agent-border);
13165
- color: var(--chatbubble-color-agent-foreground);
13181
+ /* ─── Print ────────────────────────────────────────────── */
13182
+
13183
+ @media print {
13184
+ .muka-chat-composer {
13185
+ display: none;
13186
+ }
13166
13187
  }
13167
13188
 
13168
- /* ─── Header row (author · meta · time · badge) ────────── */
13169
13189
 
13170
- .muka-chat-message__header {
13171
- display: flex;
13172
- flex-flow: row wrap;
13190
+ /* ChatAttachmentChip */
13191
+ /* ChatAttachmentChip Component Styles */
13192
+
13193
+ .muka-chat-attachment-chip {
13194
+ position: relative;
13195
+ display: inline-flex;
13173
13196
  align-items: center;
13174
- gap: var(--chatbubble-row-gap);
13197
+ gap: var(--spacing-1);
13198
+ max-width: 240px;
13199
+ padding: var(--spacing-2) var(--spacing-3);
13200
+ background-color: var(--color-surface-level1);
13201
+ border: var(--border-width-regular) solid var(--color-border-default);
13202
+ border-radius: var(--radius-md);
13203
+ overflow: hidden;
13175
13204
  }
13176
13205
 
13177
- .muka-chat-message__author {
13178
- font-family: var(--text-body-base-bold-fontFamily);
13179
- font-weight: var(--text-body-base-bold-fontWeight);
13180
- font-size: var(--text-body-base-bold-fontSize);
13181
- line-height: var(--text-body-base-bold-lineHeight);
13206
+ .muka-chat-attachment-chip--uploading {
13207
+ padding-bottom: calc(var(--spacing-2) + 2px);
13182
13208
  }
13183
13209
 
13184
- .muka-chat-message__author-meta {
13185
- /* Inherits the variant's body colour from the bubble */
13186
- color: inherit;
13187
- font-family: var(--text-body-base-regular-fontFamily);
13188
- font-weight: var(--text-body-base-regular-fontWeight);
13189
- font-size: var(--text-body-base-regular-fontSize);
13190
- line-height: var(--text-body-base-regular-lineHeight);
13210
+ .muka-chat-attachment-chip--error {
13211
+ border-color: var(--color-state-error-default, var(--color-text-default-default));
13191
13212
  }
13192
13213
 
13193
- .muka-chat-message__badge {
13214
+ .muka-chat-attachment-chip--disabled {
13215
+ opacity: 0.5;
13216
+ pointer-events: none;
13217
+ }
13218
+
13219
+ /* ─── Body (icon + text) ───────────────────────────────── */
13220
+
13221
+ .muka-chat-attachment-chip__body {
13194
13222
  display: inline-flex;
13195
13223
  align-items: center;
13224
+ gap: var(--spacing-2);
13225
+ min-width: 0;
13226
+ flex: 1 1 auto;
13227
+ background: none;
13228
+ border: none;
13229
+ padding: 0;
13230
+ margin: 0;
13231
+ text-align: left;
13232
+ color: inherit;
13233
+ font: inherit;
13234
+ cursor: default;
13235
+ -webkit-tap-highlight-color: transparent;
13196
13236
  }
13197
13237
 
13198
- /*
13199
- * Keep the first line of content clear of the absolutely positioned menu
13200
- * button in the bubble's top-right corner.
13201
- */
13202
- .muka-chat-message--has-menu .muka-chat-message__header,
13203
- .muka-chat-message--has-menu.muka-chat-message--no-header .muka-chat-message__message {
13204
- padding-right: var(--spacing-10);
13238
+ .muka-chat-attachment-chip--interactive .muka-chat-attachment-chip__body {
13239
+ cursor: pointer;
13205
13240
  }
13206
13241
 
13207
- /* …and the last line clear of the inset timestamp in the bottom-right corner */
13208
- .muka-chat-message--has-timestamp .muka-chat-message__message {
13209
- padding-right: var(--spacing-10);
13242
+ .muka-chat-attachment-chip--interactive .muka-chat-attachment-chip__body:focus-visible {
13243
+ outline: 2px solid var(--color-action-default);
13244
+ outline-offset: 2px;
13245
+ border-radius: var(--radius-sm);
13246
+ }
13247
+
13248
+ .muka-chat-attachment-chip__icon {
13249
+ display: inline-flex;
13250
+ align-items: center;
13251
+ justify-content: center;
13252
+ flex-shrink: 0;
13253
+ color: var(--color-text-subtle-default);
13210
13254
  }
13211
13255
 
13212
- /* ─── Body ─────────────────────────────────────────────── */
13213
-
13214
- .muka-chat-message__body {
13256
+ .muka-chat-attachment-chip__text {
13215
13257
  display: flex;
13216
13258
  flex-direction: column;
13217
- gap: var(--chatbubble-gap);
13218
13259
  min-width: 0;
13260
+ flex: 1 1 auto;
13219
13261
  }
13220
13262
 
13221
- .muka-chat-message__media {
13222
- min-width: 0;
13263
+ .muka-chat-attachment-chip__name {
13264
+ color: var(--color-text-default-default);
13265
+ font-family: var(--text-body-sm-regular-fontFamily);
13266
+ font-weight: var(--text-body-sm-regular-fontWeight);
13267
+ font-size: var(--text-body-sm-regular-fontSize);
13268
+ line-height: var(--text-body-sm-regular-lineHeight);
13269
+ white-space: nowrap;
13270
+ overflow: hidden;
13271
+ text-overflow: ellipsis;
13223
13272
  }
13224
13273
 
13225
- .muka-chat-message__message {
13226
- font-family: var(--text-body-base-regular-fontFamily);
13227
- font-weight: var(--text-body-base-regular-fontWeight);
13228
- font-size: var(--text-body-base-regular-fontSize);
13229
- line-height: var(--text-body-base-regular-lineHeight);
13230
- white-space: pre-wrap;
13231
- word-break: break-word;
13274
+ .muka-chat-attachment-chip__meta {
13275
+ color: var(--color-text-subtle-default);
13276
+ font-family: var(--text-body-sm-regular-fontFamily);
13277
+ font-weight: var(--text-body-sm-regular-fontWeight);
13278
+ font-size: var(--text-body-sm-regular-fontSize);
13279
+ line-height: var(--text-body-sm-regular-lineHeight);
13280
+ white-space: nowrap;
13281
+ overflow: hidden;
13282
+ text-overflow: ellipsis;
13232
13283
  }
13233
13284
 
13234
- /* Empty message block should not add a gap of its own */
13235
- .muka-chat-message__message:empty {
13236
- display: none;
13285
+ .muka-chat-attachment-chip--error .muka-chat-attachment-chip__meta {
13286
+ color: var(--color-state-error-default, var(--color-text-default-default));
13237
13287
  }
13238
13288
 
13239
- /* ─── Embedded card ────────────────────────────────────── */
13289
+ /* ─── Remove button ────────────────────────────────────── */
13240
13290
 
13241
- .muka-chat-message__embed {
13242
- position: relative;
13243
- display: flex;
13244
- flex-direction: column;
13245
- gap: var(--chatbubble-embed-gap);
13246
- /* The card is inset from the blocks above and below it (Figma 5289:40562) */
13247
- margin-block: var(--chatbubble-embed-margin-block);
13248
- padding: var(--chatbubble-embed-padding-block) var(--chatbubble-embed-padding-inline);
13249
- border-radius: var(--chatbubble-embed-radius);
13250
- border: var(--border-width-regular) solid transparent;
13291
+ .muka-chat-attachment-chip__remove {
13292
+ display: inline-flex;
13293
+ align-items: center;
13294
+ justify-content: center;
13295
+ width: 20px;
13296
+ height: 20px;
13297
+ border: none;
13298
+ background: none;
13299
+ padding: 0;
13300
+ border-radius: var(--radius-sm);
13301
+ cursor: pointer;
13302
+ color: var(--color-text-subtle-default);
13303
+ flex-shrink: 0;
13304
+ -webkit-tap-highlight-color: transparent;
13251
13305
  }
13252
13306
 
13253
- /*
13254
- * The embed sits on the raised surface of its author's role, one step apart
13255
- * from the bubble it is nested in, and reuses that role's border colour.
13256
- */
13257
- .muka-chat-message--own .muka-chat-message__embed {
13258
- background-color: var(--chatbubble-embed-color-own-background);
13259
- border-color: var(--chatbubble-embed-color-own-border);
13260
- color: var(--chatbubble-embed-color-own-foreground);
13307
+ .muka-chat-attachment-chip__remove:hover:not(:disabled) {
13308
+ color: var(--color-text-default-default);
13309
+ background-color: var(--color-surface-level2);
13261
13310
  }
13262
13311
 
13263
- .muka-chat-message--peer .muka-chat-message__embed {
13264
- background-color: var(--chatbubble-embed-color-peer-background);
13265
- border-color: var(--chatbubble-embed-color-peer-border);
13266
- color: var(--chatbubble-embed-color-peer-foreground);
13312
+ .muka-chat-attachment-chip__remove:focus-visible {
13313
+ outline: 2px solid var(--color-action-default);
13314
+ outline-offset: 2px;
13267
13315
  }
13268
13316
 
13269
- .muka-chat-message--agent .muka-chat-message__embed {
13270
- background-color: var(--chatbubble-embed-color-agent-background);
13271
- border-color: var(--chatbubble-embed-color-agent-border);
13272
- color: var(--chatbubble-embed-color-agent-foreground);
13317
+ .muka-chat-attachment-chip__remove:disabled {
13318
+ cursor: not-allowed;
13319
+ opacity: 0.5;
13273
13320
  }
13274
13321
 
13275
- .muka-chat-message__embed-content {
13276
- display: flex;
13277
- flex-direction: column;
13278
- gap: var(--chatbubble-embed-gap);
13279
- min-width: 0;
13280
- }
13322
+ /* ─── Progress bar ─────────────────────────────────────── */
13281
13323
 
13282
- .muka-chat-message__embed-copy {
13324
+ .muka-chat-attachment-chip__progress {
13283
13325
  position: absolute;
13284
- top: var(--chatbubble-embed-padding-block);
13285
- right: var(--chatbubble-embed-padding-inline);
13326
+ left: 0;
13327
+ right: 0;
13328
+ bottom: 0;
13329
+ height: 2px;
13330
+ background-color: var(--color-surface-level2);
13331
+ overflow: hidden;
13286
13332
  }
13287
13333
 
13288
- /* ─── Stacked full-width action buttons ────────────────── */
13334
+ .muka-chat-attachment-chip__progress-fill {
13335
+ display: block;
13336
+ height: 100%;
13337
+ background-color: var(--color-action-default);
13338
+ transition: width 0.16s ease;
13339
+ }
13289
13340
 
13290
- .muka-chat-message__action-stack {
13291
- display: flex;
13292
- flex-direction: column;
13293
- gap: var(--chatbubble-action-stack-gap);
13341
+ .muka-chat-attachment-chip--error .muka-chat-attachment-chip__progress-fill {
13342
+ background-color: var(--color-state-error-default, var(--color-text-default-default));
13294
13343
  }
13295
13344
 
13296
- /* ─── Inset timestamp ──────────────────────────────────── */
13297
13345
 
13298
- /*
13299
- * Every author puts its timestamp in the bubble's bottom-right corner, below
13300
- * the message — never in the header row (Figma 5355:44091).
13301
- */
13346
+ /* Card */
13347
+ /* Card Component Styles - Using Muka Design Tokens */
13302
13348
 
13303
- .muka-chat-message__timestamp {
13304
- color: var(--chatbubble-color-timestamp);
13305
- font-family: var(--text-body-xs-regular-fontFamily);
13306
- font-weight: var(--text-body-xs-regular-fontWeight);
13307
- font-size: var(--text-body-xs-regular-fontSize);
13308
- line-height: var(--text-body-xs-regular-lineHeight);
13309
- white-space: nowrap;
13349
+ .muka-card {
13350
+ background-color: var(--card-color-default-background);
13351
+ color: var(--card-color-default-foreground);
13352
+ border: var(--border-width-regular) solid var(--card-color-default-border);
13353
+ box-shadow: var(--card-shadow-default);
13354
+ transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
13355
+ overflow: hidden;
13310
13356
  }
13311
13357
 
13312
- /*
13313
- * Pinned to the corner rather than stacked below the message, so a one-line
13314
- * message stays one line tall. The message reserves the width it needs.
13315
- */
13316
- .muka-chat-message__timestamp--inset {
13317
- position: absolute;
13318
- right: var(--spacing-2);
13319
- bottom: var(--spacing-1);
13358
+ /* Padding variants */
13359
+ .muka-card--padding-none {
13360
+ padding: 0;
13320
13361
  }
13321
13362
 
13322
- /*
13323
- * When the last block in the body is media, an embed or an action stack (not
13324
- * trailing text), it runs the full width, so reserve a line below for the inset
13325
- * timestamp. A message that ends in text clears the corner inline instead (see
13326
- * `__message` padding-right above), so it needs no extra bottom space.
13327
- */
13328
- .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
13329
- padding-bottom: var(--text-body-xs-regular-lineHeight);
13363
+ .muka-card--padding-sm {
13364
+ padding: var(--card-padding-sm);
13330
13365
  }
13331
13366
 
13332
- /* ─── Menu affordance ──────────────────────────────────── */
13333
-
13334
- /*
13335
- * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
13336
- * everywhere, and pinned while its menu is open. On touch the equivalent
13337
- * affordance is a long-press on the bubble, which opens an ActionSheet.
13338
- */
13339
- .muka-chat-message__menu {
13340
- position: absolute;
13341
- top: var(--spacing-1);
13342
- right: var(--spacing-1);
13343
- opacity: 0;
13344
- pointer-events: none;
13367
+ .muka-card--padding-md {
13368
+ padding: var(--card-padding-md);
13345
13369
  }
13346
13370
 
13347
- .muka-chat-message__menu:focus-within,
13348
- .muka-chat-message--menu-open .muka-chat-message__menu {
13349
- opacity: 1;
13350
- pointer-events: auto;
13371
+ .muka-card--padding-lg {
13372
+ padding: var(--card-padding-lg);
13351
13373
  }
13352
13374
 
13353
- @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
13354
- .muka-chat-message__bubble:hover .muka-chat-message__menu {
13355
- opacity: 1;
13356
- pointer-events: auto;
13357
- }
13375
+ /* Radius variants */
13376
+ .muka-card--radius-sm {
13377
+ border-radius: var(--card-radius-sm);
13358
13378
  }
13359
13379
 
13360
- /* Suppress iOS Safari's own callout so the long-press sheet can take over */
13361
- @media (pointer: coarse) {
13362
- .muka-chat-message--has-menu .muka-chat-message__bubble {
13363
- -webkit-touch-callout: none;
13364
- }
13380
+ .muka-card--radius-md {
13381
+ border-radius: var(--card-radius-md);
13365
13382
  }
13366
13383
 
13367
- /* ─── Print ────────────────────────────────────────────── */
13368
-
13369
- @media print {
13370
- .muka-chat-message__bubble {
13371
- box-shadow: none;
13372
- break-inside: avoid;
13373
- print-color-adjust: exact;
13374
- -webkit-print-color-adjust: exact;
13375
- }
13376
-
13377
- .muka-chat-message__embed {
13378
- break-inside: avoid;
13379
- print-color-adjust: exact;
13380
- -webkit-print-color-adjust: exact;
13381
- }
13382
-
13383
- .muka-chat-message__menu,
13384
- .muka-chat-message__embed-copy,
13385
- .muka-chat-message__action-stack {
13386
- display: none;
13387
- }
13384
+ .muka-card--radius-lg {
13385
+ border-radius: var(--card-radius-lg);
13388
13386
  }
13389
13387
 
13390
-
13391
- /* ChatComposer */
13392
- /* ChatComposer Component Styles */
13393
-
13394
- /*
13395
- * The composer is a bare, fill-width row: no padding, background, border or
13396
- * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
13397
- * container — see BottomBar's `chat` variant.
13398
- */
13399
- .muka-chat-composer {
13400
- display: flex;
13401
- flex-direction: column;
13402
- gap: var(--spacing-3);
13403
- width: 100%;
13388
+ /* Interactive variant */
13389
+ .muka-card--interactive {
13390
+ cursor: pointer;
13391
+ user-select: none;
13404
13392
  }
13405
13393
 
13406
- .muka-chat-composer--disabled {
13407
- opacity: 0.6;
13408
- pointer-events: none;
13394
+ .muka-card--interactive:hover {
13395
+ background-color: var(--card-color-hover-background);
13396
+ border-color: var(--card-color-hover-border);
13397
+ box-shadow: var(--card-shadow-hover);
13409
13398
  }
13410
13399
 
13411
- /* ─── Input row ────────────────────────────────────────── */
13412
-
13413
- .muka-chat-composer__row {
13414
- display: flex;
13415
- width: 100%;
13416
- align-items: flex-end;
13417
- gap: var(--spacing-3);
13400
+ .muka-card--interactive:active,
13401
+ .muka-card--interactive.muka-card--pressed {
13402
+ background-color: var(--card-color-pressed-background);
13403
+ border-color: var(--card-color-pressed-border);
13404
+ box-shadow: var(--card-shadow-pressed);
13418
13405
  }
13419
13406
 
13420
- /* ─── Text field ───────────────────────────────────────── */
13407
+ .muka-card--interactive:focus-visible {
13408
+ outline: 2px solid var(--color-border-focus);
13409
+ outline-offset: 2px;
13410
+ }
13421
13411
 
13422
- .muka-chat-composer__field {
13423
- display: flex;
13424
- flex: 1 1 auto;
13425
- min-width: 0;
13426
- box-sizing: border-box;
13427
- align-items: center;
13428
- gap: var(--spacing-1);
13429
- min-height: var(--input-field-height-lg, 48px);
13430
- padding: 0 var(--spacing-2);
13431
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
13432
- border-radius: var(--input-field-radius-lg);
13433
- background-color: var(--input-field-color-default-background);
13434
- transition: border-color 0.12s ease;
13412
+ /* Selected variant */
13413
+ .muka-card--selected {
13414
+ background-color: var(--card-color-selected-background);
13415
+ border-color: var(--card-color-selected-border);
13416
+ border-width: var(--border-width-bold);
13417
+ box-shadow: var(--card-shadow-selected);
13435
13418
  }
13436
13419
 
13437
- .muka-chat-composer__field:focus-within {
13438
- border-color: var(--input-field-color-focus-border, var(--color-action-default));
13420
+ /* Optional header (title + description) */
13421
+ .muka-card__header {
13422
+ margin-bottom: var(--spacing-4);
13439
13423
  }
13440
13424
 
13441
- .muka-chat-composer__input {
13442
- flex: 1 1 auto;
13443
- min-width: 0;
13444
- width: 100%;
13445
- box-sizing: border-box;
13446
- resize: none;
13447
- border: none;
13448
- background: transparent;
13449
- outline: none;
13450
- padding: 0 var(--spacing-1);
13425
+ .muka-card__title {
13426
+ margin: 0;
13451
13427
  color: var(--color-text-default-default);
13452
- font-family: var(--text-body-base-regular-fontFamily);
13453
- font-weight: var(--text-body-base-regular-fontWeight);
13454
- font-size: var(--text-body-base-regular-fontSize);
13455
- line-height: var(--text-body-base-regular-lineHeight);
13456
- appearance: none;
13457
- -webkit-appearance: none;
13428
+ font-family: var(--text-heading-xs-fontFamily);
13429
+ font-weight: var(--text-heading-xs-fontWeight);
13430
+ font-size: var(--text-heading-xs-fontSize);
13431
+ line-height: var(--text-heading-xs-lineHeight);
13432
+ letter-spacing: var(--text-heading-xs-letterSpacing);
13458
13433
  }
13459
13434
 
13460
- .muka-chat-composer__input::placeholder {
13435
+ .muka-card__description {
13436
+ margin: var(--spacing-1) 0 0;
13461
13437
  color: var(--color-text-subtle-default);
13438
+ font-family: var(--text-body-sm-regular-fontFamily);
13439
+ font-weight: var(--text-body-sm-regular-fontWeight);
13440
+ font-size: var(--text-body-sm-regular-fontSize);
13441
+ line-height: var(--text-body-sm-regular-lineHeight);
13462
13442
  }
13463
13443
 
13464
- /* Keep the in-field emoji button flush to the bottom-right as the field grows */
13465
- .muka-chat-composer__emoji {
13466
- flex-shrink: 0;
13444
+ /* Hide divider on last list item inside card */
13445
+ .muka-card > .muka-listitem:last-child > .muka-listitem__divider {
13446
+ display: none;
13467
13447
  }
13468
13448
 
13469
- /* ─── Recording bar ────────────────────────────────────── */
13449
+ /* Disabled state */
13450
+ .muka-card--disabled {
13451
+ opacity: 0.5;
13452
+ cursor: not-allowed;
13453
+ pointer-events: none;
13454
+ }
13470
13455
 
13471
- .muka-chat-composer__recording {
13456
+
13457
+ /* ChatMessage */
13458
+ /* ChatMessage Component Styles */
13459
+
13460
+ .muka-chat-message {
13472
13461
  display: flex;
13473
- flex: 1 1 auto;
13474
- min-width: 0;
13475
- box-sizing: border-box;
13476
- align-items: center;
13477
- min-height: var(--input-field-height-lg, 48px);
13478
- padding: var(--card-padding-sm);
13479
- border: var(--border-width-regular) solid var(--card-color-default-border);
13480
- border-radius: var(--radius-lg);
13481
- background-color: var(--card-color-default-background);
13462
+ flex-direction: column;
13463
+ width: 100%;
13464
+ max-width: 100%;
13482
13465
  }
13483
13466
 
13484
- /* ─── Staged attachments strip ─────────────────────────── */
13467
+ /* ─── Row: avatar rail + bubble ────────────────────────── */
13485
13468
 
13486
- .muka-chat-composer__attachments-strip {
13487
- position: relative;
13469
+ .muka-chat-message__row {
13470
+ display: grid;
13471
+ grid-template-columns: minmax(0, 1fr);
13472
+ grid-template-areas: 'bubble';
13473
+ column-gap: var(--chatbubble-row-gap);
13488
13474
  width: 100%;
13489
13475
  }
13490
13476
 
13491
- .muka-chat-composer__attachments {
13492
- display: flex;
13493
- gap: var(--spacing-3);
13494
- overflow-x: auto;
13495
- scroll-behavior: smooth;
13496
- scrollbar-width: none;
13477
+ .muka-chat-message--has-avatar .muka-chat-message__row {
13478
+ grid-template-columns: auto minmax(0, 1fr);
13479
+ grid-template-areas: 'rail bubble';
13497
13480
  }
13498
13481
 
13499
- .muka-chat-composer__attachments::-webkit-scrollbar {
13500
- display: none;
13482
+ .muka-chat-message__rail {
13483
+ grid-area: rail;
13484
+ /* Sits on the bubble's baseline (Figma 5355:44091) */
13485
+ align-self: end;
13486
+ display: flex;
13487
+ justify-content: center;
13488
+ min-width: var(--chatbubble-avatar-size);
13501
13489
  }
13502
13490
 
13503
- .muka-chat-composer__overflow {
13504
- position: absolute;
13505
- top: 50%;
13506
- right: var(--spacing-2);
13507
- transform: translateY(-50%);
13508
- }
13491
+ /*
13492
+ * The Small size in Figma (5373:44702) halves the avatar to 32px and tightens
13493
+ * the gap to the bubble. Size the avatar itself, not just the rail, so the
13494
+ * bubbles keep their alignment. The header row keeps its own gap.
13495
+ */
13496
+ @media (max-width: 1023px) {
13497
+ .muka-chat-message__row {
13498
+ column-gap: var(--chatbubble-row-gap-compact);
13499
+ }
13509
13500
 
13510
- /* ─── Print ────────────────────────────────────────────── */
13501
+ .muka-chat-message__rail {
13502
+ min-width: var(--chatbubble-avatar-size-compact);
13503
+ }
13511
13504
 
13512
- @media print {
13513
- .muka-chat-composer {
13514
- display: none;
13505
+ /* Outweighs the avatar's own size class, which sets width/height directly */
13506
+ .muka-chat-message .muka-chat-message__rail > * {
13507
+ width: var(--chatbubble-avatar-size-compact);
13508
+ height: var(--chatbubble-avatar-size-compact);
13515
13509
  }
13516
13510
  }
13517
13511
 
13512
+ /* ─── Bubble surface ───────────────────────────────────── */
13518
13513
 
13519
- /* ChatAttachmentChip */
13520
- /* ChatAttachmentChip Component Styles */
13521
-
13522
- .muka-chat-attachment-chip {
13514
+ .muka-chat-message__bubble {
13515
+ grid-area: bubble;
13516
+ /*
13517
+ * Width follows the content: a single line hugs, and once the text wraps the
13518
+ * bubble fills to the shared max width. Robust to string or rich children —
13519
+ * no length measuring needed (Figma `Text length` on 5355:44091).
13520
+ */
13521
+ width: fit-content;
13522
+ /*
13523
+ * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
13524
+ * row; above it the fixed cap leaves room for own/peer alignment.
13525
+ */
13526
+ max-width: var(--chatbubble-max-width);
13523
13527
  position: relative;
13524
- display: inline-flex;
13525
- align-items: center;
13526
- gap: var(--spacing-1);
13527
- max-width: 240px;
13528
- padding: var(--spacing-2) var(--spacing-3);
13529
- background-color: var(--color-surface-level1);
13530
- border: var(--border-width-regular) solid var(--color-border-default);
13531
- border-radius: var(--radius-md);
13532
- overflow: hidden;
13533
- }
13534
-
13535
- .muka-chat-attachment-chip--uploading {
13536
- padding-bottom: calc(var(--spacing-2) + 2px);
13528
+ display: flex;
13529
+ flex-direction: column;
13530
+ gap: var(--chatbubble-gap);
13531
+ padding: var(--chatbubble-padding-block) var(--chatbubble-padding-inline);
13532
+ border-radius: var(--chatbubble-radius);
13533
+ border: var(--border-width-regular) solid transparent;
13534
+ box-shadow: var(--shadow-level2);
13535
+ word-break: break-word;
13537
13536
  }
13538
13537
 
13539
- .muka-chat-attachment-chip--error {
13540
- border-color: var(--color-state-error-default, var(--color-text-default-default));
13538
+ /* Media, an embed or an action stack always run the full bubble width. */
13539
+ .muka-chat-message--has-blocks .muka-chat-message__bubble {
13540
+ width: 100%;
13541
13541
  }
13542
13542
 
13543
- .muka-chat-attachment-chip--disabled {
13544
- opacity: 0.5;
13545
- pointer-events: none;
13543
+ .muka-chat-message--own .muka-chat-message__bubble {
13544
+ justify-self: end;
13546
13545
  }
13547
13546
 
13548
- /* ─── Body (icon + text) ───────────────────────────────── */
13549
-
13550
- .muka-chat-attachment-chip__body {
13551
- display: inline-flex;
13552
- align-items: center;
13553
- gap: var(--spacing-2);
13554
- min-width: 0;
13555
- flex: 1 1 auto;
13556
- background: none;
13557
- border: none;
13558
- padding: 0;
13559
- margin: 0;
13560
- text-align: left;
13561
- color: inherit;
13562
- font: inherit;
13563
- cursor: default;
13564
- -webkit-tap-highlight-color: transparent;
13547
+ .muka-chat-message--own .muka-chat-message__bubble {
13548
+ background-color: var(--chatbubble-color-own-background);
13549
+ border-color: var(--chatbubble-color-own-border);
13550
+ color: var(--chatbubble-color-own-foreground);
13565
13551
  }
13566
13552
 
13567
- .muka-chat-attachment-chip--interactive .muka-chat-attachment-chip__body {
13568
- cursor: pointer;
13553
+ .muka-chat-message--peer .muka-chat-message__bubble {
13554
+ background-color: var(--chatbubble-color-peer-background);
13555
+ border-color: var(--chatbubble-color-peer-border);
13556
+ color: var(--chatbubble-color-peer-foreground);
13569
13557
  }
13570
13558
 
13571
- .muka-chat-attachment-chip--interactive .muka-chat-attachment-chip__body:focus-visible {
13572
- outline: 2px solid var(--color-action-default);
13573
- outline-offset: 2px;
13574
- border-radius: var(--radius-sm);
13559
+ .muka-chat-message--agent .muka-chat-message__bubble {
13560
+ background-color: var(--chatbubble-color-agent-background);
13561
+ border-color: var(--chatbubble-color-agent-border);
13562
+ color: var(--chatbubble-color-agent-foreground);
13575
13563
  }
13576
13564
 
13577
- .muka-chat-attachment-chip__icon {
13578
- display: inline-flex;
13579
- align-items: center;
13580
- justify-content: center;
13581
- flex-shrink: 0;
13582
- color: var(--color-text-subtle-default);
13583
- }
13565
+ /* ─── Header row (author · meta · time · badge) ────────── */
13584
13566
 
13585
- .muka-chat-attachment-chip__text {
13567
+ .muka-chat-message__header {
13586
13568
  display: flex;
13587
- flex-direction: column;
13588
- min-width: 0;
13589
- flex: 1 1 auto;
13590
- }
13591
-
13592
- .muka-chat-attachment-chip__name {
13593
- color: var(--color-text-default-default);
13594
- font-family: var(--text-body-sm-regular-fontFamily);
13595
- font-weight: var(--text-body-sm-regular-fontWeight);
13596
- font-size: var(--text-body-sm-regular-fontSize);
13597
- line-height: var(--text-body-sm-regular-lineHeight);
13598
- white-space: nowrap;
13599
- overflow: hidden;
13600
- text-overflow: ellipsis;
13569
+ flex-flow: row wrap;
13570
+ align-items: center;
13571
+ gap: var(--chatbubble-row-gap);
13601
13572
  }
13602
13573
 
13603
- .muka-chat-attachment-chip__meta {
13604
- color: var(--color-text-subtle-default);
13605
- font-family: var(--text-body-sm-regular-fontFamily);
13606
- font-weight: var(--text-body-sm-regular-fontWeight);
13607
- font-size: var(--text-body-sm-regular-fontSize);
13608
- line-height: var(--text-body-sm-regular-lineHeight);
13609
- white-space: nowrap;
13610
- overflow: hidden;
13611
- text-overflow: ellipsis;
13574
+ .muka-chat-message__author {
13575
+ font-family: var(--text-body-base-bold-fontFamily);
13576
+ font-weight: var(--text-body-base-bold-fontWeight);
13577
+ font-size: var(--text-body-base-bold-fontSize);
13578
+ line-height: var(--text-body-base-bold-lineHeight);
13612
13579
  }
13613
13580
 
13614
- .muka-chat-attachment-chip--error .muka-chat-attachment-chip__meta {
13615
- color: var(--color-state-error-default, var(--color-text-default-default));
13581
+ .muka-chat-message__author-meta {
13582
+ /* Inherits the variant's body colour from the bubble */
13583
+ color: inherit;
13584
+ font-family: var(--text-body-base-regular-fontFamily);
13585
+ font-weight: var(--text-body-base-regular-fontWeight);
13586
+ font-size: var(--text-body-base-regular-fontSize);
13587
+ line-height: var(--text-body-base-regular-lineHeight);
13616
13588
  }
13617
13589
 
13618
- /* ─── Remove button ────────────────────────────────────── */
13619
-
13620
- .muka-chat-attachment-chip__remove {
13590
+ .muka-chat-message__badge {
13621
13591
  display: inline-flex;
13622
13592
  align-items: center;
13623
- justify-content: center;
13624
- width: 20px;
13625
- height: 20px;
13626
- border: none;
13627
- background: none;
13628
- padding: 0;
13629
- border-radius: var(--radius-sm);
13630
- cursor: pointer;
13631
- color: var(--color-text-subtle-default);
13632
- flex-shrink: 0;
13633
- -webkit-tap-highlight-color: transparent;
13634
- }
13635
-
13636
- .muka-chat-attachment-chip__remove:hover:not(:disabled) {
13637
- color: var(--color-text-default-default);
13638
- background-color: var(--color-surface-level2);
13639
13593
  }
13640
13594
 
13641
- .muka-chat-attachment-chip__remove:focus-visible {
13642
- outline: 2px solid var(--color-action-default);
13643
- outline-offset: 2px;
13595
+ /*
13596
+ * Keep the first line of content clear of the absolutely positioned menu
13597
+ * button in the bubble's top-right corner.
13598
+ */
13599
+ .muka-chat-message--has-menu .muka-chat-message__header,
13600
+ .muka-chat-message--has-menu.muka-chat-message--no-header .muka-chat-message__message {
13601
+ padding-right: var(--spacing-10);
13644
13602
  }
13645
13603
 
13646
- .muka-chat-attachment-chip__remove:disabled {
13647
- cursor: not-allowed;
13648
- opacity: 0.5;
13604
+ /* …and the last line clear of the inset timestamp in the bottom-right corner */
13605
+ .muka-chat-message--has-timestamp .muka-chat-message__message {
13606
+ padding-right: var(--spacing-10);
13649
13607
  }
13650
13608
 
13651
- /* ─── Progress bar ─────────────────────────────────────── */
13609
+ /* ─── Body ─────────────────────────────────────────────── */
13652
13610
 
13653
- .muka-chat-attachment-chip__progress {
13654
- position: absolute;
13655
- left: 0;
13656
- right: 0;
13657
- bottom: 0;
13658
- height: 2px;
13659
- background-color: var(--color-surface-level2);
13660
- overflow: hidden;
13611
+ .muka-chat-message__body {
13612
+ display: flex;
13613
+ flex-direction: column;
13614
+ gap: var(--chatbubble-gap);
13615
+ min-width: 0;
13661
13616
  }
13662
13617
 
13663
- .muka-chat-attachment-chip__progress-fill {
13664
- display: block;
13665
- height: 100%;
13666
- background-color: var(--color-action-default);
13667
- transition: width 0.16s ease;
13618
+ .muka-chat-message__media {
13619
+ min-width: 0;
13668
13620
  }
13669
13621
 
13670
- .muka-chat-attachment-chip--error .muka-chat-attachment-chip__progress-fill {
13671
- background-color: var(--color-state-error-default, var(--color-text-default-default));
13622
+ .muka-chat-message__message {
13623
+ font-family: var(--text-body-base-regular-fontFamily);
13624
+ font-weight: var(--text-body-base-regular-fontWeight);
13625
+ font-size: var(--text-body-base-regular-fontSize);
13626
+ line-height: var(--text-body-base-regular-lineHeight);
13627
+ white-space: pre-wrap;
13628
+ word-break: break-word;
13672
13629
  }
13673
13630
 
13631
+ /* Empty message block should not add a gap of its own */
13632
+ .muka-chat-message__message:empty {
13633
+ display: none;
13634
+ }
13674
13635
 
13675
- /* Card */
13676
- /* Card Component Styles - Using Muka Design Tokens */
13636
+ /* ─── Embedded card ────────────────────────────────────── */
13677
13637
 
13678
- .muka-card {
13679
- background-color: var(--card-color-default-background);
13680
- color: var(--card-color-default-foreground);
13681
- border: var(--border-width-regular) solid var(--card-color-default-border);
13682
- box-shadow: var(--card-shadow-default);
13683
- transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
13684
- overflow: hidden;
13638
+ .muka-chat-message__embed {
13639
+ position: relative;
13640
+ display: flex;
13641
+ flex-direction: column;
13642
+ gap: var(--chatbubble-embed-gap);
13643
+ /* The card is inset from the blocks above and below it (Figma 5289:40562) */
13644
+ margin-block: var(--chatbubble-embed-margin-block);
13645
+ padding: var(--chatbubble-embed-padding-block) var(--chatbubble-embed-padding-inline);
13646
+ border-radius: var(--chatbubble-embed-radius);
13647
+ border: var(--border-width-regular) solid transparent;
13685
13648
  }
13686
13649
 
13687
- /* Padding variants */
13688
- .muka-card--padding-none {
13689
- padding: 0;
13650
+ /*
13651
+ * The embed sits on the raised surface of its author's role, one step apart
13652
+ * from the bubble it is nested in, and reuses that role's border colour.
13653
+ */
13654
+ .muka-chat-message--own .muka-chat-message__embed {
13655
+ background-color: var(--chatbubble-embed-color-own-background);
13656
+ border-color: var(--chatbubble-embed-color-own-border);
13657
+ color: var(--chatbubble-embed-color-own-foreground);
13690
13658
  }
13691
13659
 
13692
- .muka-card--padding-sm {
13693
- padding: var(--card-padding-sm);
13660
+ .muka-chat-message--peer .muka-chat-message__embed {
13661
+ background-color: var(--chatbubble-embed-color-peer-background);
13662
+ border-color: var(--chatbubble-embed-color-peer-border);
13663
+ color: var(--chatbubble-embed-color-peer-foreground);
13694
13664
  }
13695
13665
 
13696
- .muka-card--padding-md {
13697
- padding: var(--card-padding-md);
13666
+ .muka-chat-message--agent .muka-chat-message__embed {
13667
+ background-color: var(--chatbubble-embed-color-agent-background);
13668
+ border-color: var(--chatbubble-embed-color-agent-border);
13669
+ color: var(--chatbubble-embed-color-agent-foreground);
13698
13670
  }
13699
13671
 
13700
- .muka-card--padding-lg {
13701
- padding: var(--card-padding-lg);
13672
+ .muka-chat-message__embed-content {
13673
+ display: flex;
13674
+ flex-direction: column;
13675
+ gap: var(--chatbubble-embed-gap);
13676
+ min-width: 0;
13702
13677
  }
13703
13678
 
13704
- /* Radius variants */
13705
- .muka-card--radius-sm {
13706
- border-radius: var(--card-radius-sm);
13679
+ .muka-chat-message__embed-copy {
13680
+ position: absolute;
13681
+ top: var(--chatbubble-embed-padding-block);
13682
+ right: var(--chatbubble-embed-padding-inline);
13707
13683
  }
13708
13684
 
13709
- .muka-card--radius-md {
13710
- border-radius: var(--card-radius-md);
13711
- }
13685
+ /* ─── Stacked full-width action buttons ────────────────── */
13712
13686
 
13713
- .muka-card--radius-lg {
13714
- border-radius: var(--card-radius-lg);
13687
+ .muka-chat-message__action-stack {
13688
+ display: flex;
13689
+ flex-direction: column;
13690
+ gap: var(--chatbubble-action-stack-gap);
13715
13691
  }
13716
13692
 
13717
- /* Interactive variant */
13718
- .muka-card--interactive {
13719
- cursor: pointer;
13720
- user-select: none;
13721
- }
13693
+ /* ─── Inset timestamp ──────────────────────────────────── */
13722
13694
 
13723
- .muka-card--interactive:hover {
13724
- background-color: var(--card-color-hover-background);
13725
- border-color: var(--card-color-hover-border);
13726
- box-shadow: var(--card-shadow-hover);
13695
+ /*
13696
+ * Every author puts its timestamp in the bubble's bottom-right corner, below
13697
+ * the message — never in the header row (Figma 5355:44091).
13698
+ */
13699
+
13700
+ .muka-chat-message__timestamp {
13701
+ color: var(--chatbubble-color-timestamp);
13702
+ font-family: var(--text-body-xs-regular-fontFamily);
13703
+ font-weight: var(--text-body-xs-regular-fontWeight);
13704
+ font-size: var(--text-body-xs-regular-fontSize);
13705
+ line-height: var(--text-body-xs-regular-lineHeight);
13706
+ white-space: nowrap;
13727
13707
  }
13728
13708
 
13729
- .muka-card--interactive:active,
13730
- .muka-card--interactive.muka-card--pressed {
13731
- background-color: var(--card-color-pressed-background);
13732
- border-color: var(--card-color-pressed-border);
13733
- box-shadow: var(--card-shadow-pressed);
13709
+ /*
13710
+ * Pinned to the corner rather than stacked below the message, so a one-line
13711
+ * message stays one line tall. The message reserves the width it needs.
13712
+ */
13713
+ .muka-chat-message__timestamp--inset {
13714
+ position: absolute;
13715
+ right: var(--spacing-2);
13716
+ bottom: var(--spacing-1);
13734
13717
  }
13735
13718
 
13736
- .muka-card--interactive:focus-visible {
13737
- outline: 2px solid var(--color-border-focus);
13738
- outline-offset: 2px;
13719
+ /*
13720
+ * When the last block in the body is media, an embed or an action stack (not
13721
+ * trailing text), it runs the full width, so reserve a line below for the inset
13722
+ * timestamp. A message that ends in text clears the corner inline instead (see
13723
+ * `__message` padding-right above), so it needs no extra bottom space.
13724
+ */
13725
+ .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
13726
+ padding-bottom: var(--text-body-xs-regular-lineHeight);
13739
13727
  }
13740
13728
 
13741
- /* Selected variant */
13742
- .muka-card--selected {
13743
- background-color: var(--card-color-selected-background);
13744
- border-color: var(--card-color-selected-border);
13745
- border-width: var(--border-width-bold);
13746
- box-shadow: var(--card-shadow-selected);
13729
+ /* ─── Menu affordance ──────────────────────────────────── */
13730
+
13731
+ /*
13732
+ * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
13733
+ * everywhere, and pinned while its menu is open. On touch the equivalent
13734
+ * affordance is a long-press on the bubble, which opens an ActionSheet.
13735
+ */
13736
+ .muka-chat-message__menu {
13737
+ position: absolute;
13738
+ top: var(--spacing-1);
13739
+ right: var(--spacing-1);
13740
+ opacity: 0;
13741
+ pointer-events: none;
13747
13742
  }
13748
13743
 
13749
- /* Optional header (title + description) */
13750
- .muka-card__header {
13751
- margin-bottom: var(--spacing-4);
13744
+ .muka-chat-message__menu:focus-within,
13745
+ .muka-chat-message--menu-open .muka-chat-message__menu {
13746
+ opacity: 1;
13747
+ pointer-events: auto;
13752
13748
  }
13753
13749
 
13754
- .muka-card__title {
13755
- margin: 0;
13756
- color: var(--color-text-default-default);
13757
- font-family: var(--text-heading-xs-fontFamily);
13758
- font-weight: var(--text-heading-xs-fontWeight);
13759
- font-size: var(--text-heading-xs-fontSize);
13760
- line-height: var(--text-heading-xs-lineHeight);
13761
- letter-spacing: var(--text-heading-xs-letterSpacing);
13750
+ @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
13751
+ .muka-chat-message__bubble:hover .muka-chat-message__menu {
13752
+ opacity: 1;
13753
+ pointer-events: auto;
13754
+ }
13762
13755
  }
13763
13756
 
13764
- .muka-card__description {
13765
- margin: var(--spacing-1) 0 0;
13766
- color: var(--color-text-subtle-default);
13767
- font-family: var(--text-body-sm-regular-fontFamily);
13768
- font-weight: var(--text-body-sm-regular-fontWeight);
13769
- font-size: var(--text-body-sm-regular-fontSize);
13770
- line-height: var(--text-body-sm-regular-lineHeight);
13757
+ /* Suppress iOS Safari's own callout so the long-press sheet can take over */
13758
+ @media (pointer: coarse) {
13759
+ .muka-chat-message--has-menu .muka-chat-message__bubble {
13760
+ -webkit-touch-callout: none;
13761
+ }
13771
13762
  }
13772
13763
 
13773
- /* Hide divider on last list item inside card */
13774
- .muka-card > .muka-listitem:last-child > .muka-listitem__divider {
13775
- display: none;
13776
- }
13764
+ /* ─── Print ────────────────────────────────────────────── */
13777
13765
 
13778
- /* Disabled state */
13779
- .muka-card--disabled {
13780
- opacity: 0.5;
13781
- cursor: not-allowed;
13782
- pointer-events: none;
13766
+ @media print {
13767
+ .muka-chat-message__bubble {
13768
+ box-shadow: none;
13769
+ break-inside: avoid;
13770
+ print-color-adjust: exact;
13771
+ -webkit-print-color-adjust: exact;
13772
+ }
13773
+
13774
+ .muka-chat-message__embed {
13775
+ break-inside: avoid;
13776
+ print-color-adjust: exact;
13777
+ -webkit-print-color-adjust: exact;
13778
+ }
13779
+
13780
+ .muka-chat-message__menu,
13781
+ .muka-chat-message__embed-copy,
13782
+ .muka-chat-message__action-stack {
13783
+ display: none;
13784
+ }
13783
13785
  }
13784
13786
 
13785
13787
 
@@ -14131,120 +14133,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
14131
14133
  }
14132
14134
 
14133
14135
 
14134
- /* Breadcrumb */
14135
- /* Breadcrumb Component Styles */
14136
-
14137
- .muka-breadcrumb__list {
14138
- display: flex;
14139
- align-items: center;
14140
- flex-wrap: wrap;
14141
- list-style: none;
14142
- margin: 0;
14143
- padding: 0;
14144
- gap: var(--spacing-1);
14145
- }
14146
-
14147
- .muka-breadcrumb__item {
14148
- display: inline-flex;
14149
- align-items: center;
14150
- gap: var(--spacing-1);
14151
- }
14152
-
14153
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) {
14154
- padding-left: var(--spacing-1);
14155
- }
14156
-
14157
- .muka-breadcrumb__icon {
14158
- display: inline-flex;
14159
- align-items: center;
14160
- color: var(--color-text-subtle-default);
14161
- }
14162
-
14163
- .muka-breadcrumb__icon .muka-icon {
14164
- color: inherit;
14165
- }
14166
-
14167
- .muka-breadcrumb__item:has(.muka-breadcrumb__current) .muka-breadcrumb__icon {
14168
- color: var(--color-text-default-default);
14169
- }
14170
-
14171
- .muka-breadcrumb__item:has(.muka-breadcrumb__link:hover) .muka-breadcrumb__icon {
14172
- color: var(--color-text-action-default);
14173
- }
14174
-
14175
- /* Link styles */
14176
- .muka-breadcrumb__link {
14177
- color: var(--color-text-subtle-default);
14178
- text-decoration: none;
14179
- border: none;
14180
- background: none;
14181
- padding-inline: var(--spacing-2);
14182
- padding-block: 0;
14183
- cursor: pointer;
14184
- font: inherit;
14185
- transition: color 0.15s ease;
14186
- }
14187
-
14188
- .muka-breadcrumb__link:hover {
14189
- color: var(--color-text-action-default);
14190
- text-decoration: underline;
14191
- }
14192
-
14193
- /* Tighter gap after leading icon */
14194
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__link,
14195
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__current {
14196
- padding-left: var(--spacing-1);
14197
- }
14198
-
14199
- /* Current page (last item, no context switcher) */
14200
- .muka-breadcrumb__current {
14201
- color: var(--color-text-default-default);
14202
- font-weight: 600;
14203
- padding-inline: var(--spacing-2);
14204
- }
14205
-
14206
- /* Separator */
14207
- .muka-breadcrumb__separator {
14208
- color: var(--color-text-subtle-default);
14209
- user-select: none;
14210
- }
14211
-
14212
- .muka-breadcrumb__item--context {
14213
- gap: 0;
14214
- }
14215
-
14216
- .muka-breadcrumb__list:has(.muka-breadcrumb__item--context) {
14217
- gap: 0;
14218
- }
14219
-
14220
- .muka-breadcrumb__item--context .muka-breadcrumb__separator {
14221
- margin: 0;
14222
- padding-inline: var(--spacing-1, 4px);
14223
- }
14224
-
14225
- /* Size variants */
14226
- .muka-breadcrumb--sm {
14227
- font-family: var(--text-label-sm-regular-fontFamily);
14228
- font-weight: var(--text-label-sm-regular-fontWeight);
14229
- font-size: var(--text-label-sm-regular-fontSize);
14230
- line-height: var(--text-label-sm-regular-lineHeight);
14231
- }
14232
-
14233
- .muka-breadcrumb--md {
14234
- font-family: var(--text-label-md-regular-fontFamily);
14235
- font-weight: var(--text-label-md-regular-fontWeight);
14236
- font-size: var(--text-label-md-regular-fontSize);
14237
- line-height: var(--text-label-md-regular-lineHeight);
14238
- }
14239
-
14240
- .muka-breadcrumb--lg {
14241
- font-family: var(--text-label-lg-regular-fontFamily);
14242
- font-weight: var(--text-label-lg-regular-fontWeight);
14243
- font-size: var(--text-label-lg-regular-fontSize);
14244
- line-height: var(--text-label-lg-regular-lineHeight);
14245
- }
14246
-
14247
-
14248
14136
  /* BottomBar */
14249
14137
  /* BottomBar Component Styles */
14250
14138
 
@@ -14638,34 +14526,148 @@ button.muka-chat-photo-grid__tile:focus-visible {
14638
14526
  line-height: normal;
14639
14527
  }
14640
14528
 
14641
- /* Neutral variant */
14642
- .muka-badge-number--neutral {
14643
- background-color: var(--color-surface-level1);
14644
- color: var(--color-text-default-default);
14529
+ /* Neutral variant */
14530
+ .muka-badge-number--neutral {
14531
+ background-color: var(--color-surface-level1);
14532
+ color: var(--color-text-default-default);
14533
+ }
14534
+
14535
+ /* Info variant */
14536
+ .muka-badge-number--info {
14537
+ background-color: var(--color-state-info-contrast);
14538
+ color: var(--color-text-default-inverse);
14539
+ }
14540
+
14541
+ /* Success variant */
14542
+ .muka-badge-number--success {
14543
+ background-color: var(--color-state-success-contrast);
14544
+ color: var(--color-text-default-inverse);
14545
+ }
14546
+
14547
+ /* Warning variant */
14548
+ .muka-badge-number--warning {
14549
+ background-color: var(--color-state-warning-contrast);
14550
+ color: var(--color-text-default-inverse);
14551
+ }
14552
+
14553
+ /* Error variant */
14554
+ .muka-badge-number--error {
14555
+ background-color: var(--color-state-error-contrast);
14556
+ color: var(--color-text-default-inverse);
14557
+ }
14558
+
14559
+
14560
+ /* Breadcrumb */
14561
+ /* Breadcrumb Component Styles */
14562
+
14563
+ .muka-breadcrumb__list {
14564
+ display: flex;
14565
+ align-items: center;
14566
+ flex-wrap: wrap;
14567
+ list-style: none;
14568
+ margin: 0;
14569
+ padding: 0;
14570
+ gap: var(--spacing-1);
14571
+ }
14572
+
14573
+ .muka-breadcrumb__item {
14574
+ display: inline-flex;
14575
+ align-items: center;
14576
+ gap: var(--spacing-1);
14577
+ }
14578
+
14579
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) {
14580
+ padding-left: var(--spacing-1);
14581
+ }
14582
+
14583
+ .muka-breadcrumb__icon {
14584
+ display: inline-flex;
14585
+ align-items: center;
14586
+ color: var(--color-text-subtle-default);
14587
+ }
14588
+
14589
+ .muka-breadcrumb__icon .muka-icon {
14590
+ color: inherit;
14591
+ }
14592
+
14593
+ .muka-breadcrumb__item:has(.muka-breadcrumb__current) .muka-breadcrumb__icon {
14594
+ color: var(--color-text-default-default);
14595
+ }
14596
+
14597
+ .muka-breadcrumb__item:has(.muka-breadcrumb__link:hover) .muka-breadcrumb__icon {
14598
+ color: var(--color-text-action-default);
14599
+ }
14600
+
14601
+ /* Link styles */
14602
+ .muka-breadcrumb__link {
14603
+ color: var(--color-text-subtle-default);
14604
+ text-decoration: none;
14605
+ border: none;
14606
+ background: none;
14607
+ padding-inline: var(--spacing-2);
14608
+ padding-block: 0;
14609
+ cursor: pointer;
14610
+ font: inherit;
14611
+ transition: color 0.15s ease;
14612
+ }
14613
+
14614
+ .muka-breadcrumb__link:hover {
14615
+ color: var(--color-text-action-default);
14616
+ text-decoration: underline;
14617
+ }
14618
+
14619
+ /* Tighter gap after leading icon */
14620
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__link,
14621
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__current {
14622
+ padding-left: var(--spacing-1);
14623
+ }
14624
+
14625
+ /* Current page (last item, no context switcher) */
14626
+ .muka-breadcrumb__current {
14627
+ color: var(--color-text-default-default);
14628
+ font-weight: 600;
14629
+ padding-inline: var(--spacing-2);
14630
+ }
14631
+
14632
+ /* Separator */
14633
+ .muka-breadcrumb__separator {
14634
+ color: var(--color-text-subtle-default);
14635
+ user-select: none;
14636
+ }
14637
+
14638
+ .muka-breadcrumb__item--context {
14639
+ gap: 0;
14640
+ }
14641
+
14642
+ .muka-breadcrumb__list:has(.muka-breadcrumb__item--context) {
14643
+ gap: 0;
14645
14644
  }
14646
14645
 
14647
- /* Info variant */
14648
- .muka-badge-number--info {
14649
- background-color: var(--color-state-info-contrast);
14650
- color: var(--color-text-default-inverse);
14646
+ .muka-breadcrumb__item--context .muka-breadcrumb__separator {
14647
+ margin: 0;
14648
+ padding-inline: var(--spacing-1, 4px);
14651
14649
  }
14652
14650
 
14653
- /* Success variant */
14654
- .muka-badge-number--success {
14655
- background-color: var(--color-state-success-contrast);
14656
- color: var(--color-text-default-inverse);
14651
+ /* Size variants */
14652
+ .muka-breadcrumb--sm {
14653
+ font-family: var(--text-label-sm-regular-fontFamily);
14654
+ font-weight: var(--text-label-sm-regular-fontWeight);
14655
+ font-size: var(--text-label-sm-regular-fontSize);
14656
+ line-height: var(--text-label-sm-regular-lineHeight);
14657
14657
  }
14658
14658
 
14659
- /* Warning variant */
14660
- .muka-badge-number--warning {
14661
- background-color: var(--color-state-warning-contrast);
14662
- color: var(--color-text-default-inverse);
14659
+ .muka-breadcrumb--md {
14660
+ font-family: var(--text-label-md-regular-fontFamily);
14661
+ font-weight: var(--text-label-md-regular-fontWeight);
14662
+ font-size: var(--text-label-md-regular-fontSize);
14663
+ line-height: var(--text-label-md-regular-lineHeight);
14663
14664
  }
14664
14665
 
14665
- /* Error variant */
14666
- .muka-badge-number--error {
14667
- background-color: var(--color-state-error-contrast);
14668
- color: var(--color-text-default-inverse);
14666
+ .muka-breadcrumb--lg {
14667
+ font-family: var(--text-label-lg-regular-fontFamily);
14668
+ font-weight: var(--text-label-lg-regular-fontWeight);
14669
+ font-size: var(--text-label-lg-regular-fontSize);
14670
+ line-height: var(--text-label-lg-regular-lineHeight);
14669
14671
  }
14670
14672
 
14671
14673
 
@@ -14732,6 +14734,33 @@ button.muka-chat-photo-grid__tile:focus-visible {
14732
14734
  padding-left: var(--badge-padding-leading-lg);
14733
14735
  }
14734
14736
 
14737
+ /* Icon-only — square, sized to the badge height (Figma: 24 / 32 / 40).
14738
+ * Padding resets at size+icon-only specificity so `--has-icon` leading padding
14739
+ * cannot win and shift the icon off-center. */
14740
+ .muka-badge--icon-only {
14741
+ justify-content: center;
14742
+ align-items: center;
14743
+ gap: 0;
14744
+ }
14745
+
14746
+ .muka-badge--sm.muka-badge--icon-only,
14747
+ .muka-badge--md.muka-badge--icon-only,
14748
+ .muka-badge--lg.muka-badge--icon-only {
14749
+ padding: 0;
14750
+ }
14751
+
14752
+ .muka-badge--sm.muka-badge--icon-only {
14753
+ width: var(--badge-size-height-sm);
14754
+ }
14755
+
14756
+ .muka-badge--md.muka-badge--icon-only {
14757
+ width: var(--badge-size-height-md);
14758
+ }
14759
+
14760
+ .muka-badge--lg.muka-badge--icon-only {
14761
+ width: var(--badge-size-height-lg);
14762
+ }
14763
+
14735
14764
  /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
14736
14765
  .muka-badge__icon {
14737
14766
  display: inline-flex;
@@ -15271,102 +15300,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
15271
15300
  }
15272
15301
 
15273
15302
 
15274
- /* AppShell */
15275
- /* AppShell Component Styles */
15276
-
15277
- /*
15278
- * Layout wrapper for a persistent left navigation rail + main view area, with an
15279
- * optional full-width top app bar. The rail itself is styled by the BottomBar
15280
- * `desktopAs="sidebar"` rules (fixed 240px left rail at ≥1024px); AppShell shows/
15281
- * hides the sidebar + app-bar slots and offsets the main area to match. Both
15282
- * appear at the large tier — responsively (no `size`, scoped with
15283
- * `:not([data-size])`) or forced via `[data-size="lg"]`.
15284
- */
15285
- .muka-app-shell {
15286
- position: relative;
15287
- /* Reserved width for the rail; matches BottomBar's desktop-sidebar width. */
15288
- --app-shell-sidebar-width: 240px;
15289
- /* Height of the optional top app bar. */
15290
- --app-shell-appbar-height: 64px;
15291
- }
15292
-
15293
- /* Sidebar slot: hidden below the large tier (per-view nav handles small/medium). */
15294
- .muka-app-shell__sidebar {
15295
- display: none;
15296
- }
15297
-
15298
- .muka-app-shell__main {
15299
- min-height: 100dvh;
15300
- }
15301
-
15302
- /*
15303
- * App bar: full-width top strip. Intrinsic styling lives here (harmless while
15304
- * hidden); it is revealed only at the large tier. Sits above the sidebar rail.
15305
- */
15306
- .muka-app-shell__appbar {
15307
- display: none;
15308
- align-items: center;
15309
- justify-content: space-between;
15310
- gap: var(--spacing-4);
15311
- position: fixed;
15312
- top: 0;
15313
- left: 0;
15314
- right: 0;
15315
- height: var(--app-shell-appbar-height);
15316
- padding-inline: var(--spacing-4);
15317
- background-color: var(--color-surface-level3);
15318
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
15319
- z-index: 11; /* above the sidebar rail (z-index 10) */
15320
- }
15321
-
15322
- /* ─── Large tier (responsive) ─── */
15323
- @media (min-width: 1024px) {
15324
- .muka-app-shell:not([data-size]) .muka-app-shell__sidebar {
15325
- display: block;
15326
- }
15327
- .muka-app-shell:not([data-size]) .muka-app-shell__main {
15328
- padding-left: var(--app-shell-sidebar-width);
15329
- }
15330
- .muka-app-shell:not([data-size]) .muka-app-shell__appbar {
15331
- display: flex;
15332
- }
15333
- /* When an app bar is present, drop the rail + content below it so nothing overlaps. */
15334
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-app-shell__main {
15335
- padding-top: var(--app-shell-appbar-height);
15336
- }
15337
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15338
- top: var(--app-shell-appbar-height);
15339
- height: calc(100vh - var(--app-shell-appbar-height));
15340
- }
15341
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-view,
15342
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-nav-transition {
15343
- height: calc(100dvh - var(--app-shell-appbar-height));
15344
- }
15345
- }
15346
-
15347
- /* ─── Large tier (forced via size="lg") ─── */
15348
- .muka-app-shell[data-size='lg'] .muka-app-shell__sidebar {
15349
- display: block;
15350
- }
15351
- .muka-app-shell[data-size='lg'] .muka-app-shell__main {
15352
- padding-left: var(--app-shell-sidebar-width);
15353
- }
15354
- .muka-app-shell[data-size='lg'] .muka-app-shell__appbar {
15355
- display: flex;
15356
- }
15357
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-app-shell__main {
15358
- padding-top: var(--app-shell-appbar-height);
15359
- }
15360
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15361
- top: var(--app-shell-appbar-height);
15362
- height: calc(100vh - var(--app-shell-appbar-height));
15363
- }
15364
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-view,
15365
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-nav-transition {
15366
- height: calc(100dvh - var(--app-shell-appbar-height));
15367
- }
15368
-
15369
-
15370
15303
  /* Alert */
15371
15304
  /* Alert Component Styles - Using Muka Design Tokens */
15372
15305
 
@@ -15528,11 +15461,12 @@ button.muka-chat-photo-grid__tile:focus-visible {
15528
15461
  line-height: var(--text-body-base-regular-lineHeight);
15529
15462
  }
15530
15463
 
15531
- /* Action slot */
15464
+ /* Action slot — TextLink (or similar) below the message, matching Figma */
15532
15465
  .muka-alert__action {
15533
15466
  display: flex;
15534
- align-items: center;
15535
- flex-shrink: 0;
15467
+ flex-direction: column;
15468
+ align-items: flex-start;
15469
+ padding-top: var(--spacing-1);
15536
15470
  }
15537
15471
 
15538
15472
  /* Dismiss button - uses accent color per variant, aligned with icon row */
@@ -15569,6 +15503,102 @@ button.muka-chat-photo-grid__tile:focus-visible {
15569
15503
  }
15570
15504
 
15571
15505
 
15506
+ /* AppShell */
15507
+ /* AppShell Component Styles */
15508
+
15509
+ /*
15510
+ * Layout wrapper for a persistent left navigation rail + main view area, with an
15511
+ * optional full-width top app bar. The rail itself is styled by the BottomBar
15512
+ * `desktopAs="sidebar"` rules (fixed 240px left rail at ≥1024px); AppShell shows/
15513
+ * hides the sidebar + app-bar slots and offsets the main area to match. Both
15514
+ * appear at the large tier — responsively (no `size`, scoped with
15515
+ * `:not([data-size])`) or forced via `[data-size="lg"]`.
15516
+ */
15517
+ .muka-app-shell {
15518
+ position: relative;
15519
+ /* Reserved width for the rail; matches BottomBar's desktop-sidebar width. */
15520
+ --app-shell-sidebar-width: 240px;
15521
+ /* Height of the optional top app bar. */
15522
+ --app-shell-appbar-height: 64px;
15523
+ }
15524
+
15525
+ /* Sidebar slot: hidden below the large tier (per-view nav handles small/medium). */
15526
+ .muka-app-shell__sidebar {
15527
+ display: none;
15528
+ }
15529
+
15530
+ .muka-app-shell__main {
15531
+ min-height: 100dvh;
15532
+ }
15533
+
15534
+ /*
15535
+ * App bar: full-width top strip. Intrinsic styling lives here (harmless while
15536
+ * hidden); it is revealed only at the large tier. Sits above the sidebar rail.
15537
+ */
15538
+ .muka-app-shell__appbar {
15539
+ display: none;
15540
+ align-items: center;
15541
+ justify-content: space-between;
15542
+ gap: var(--spacing-4);
15543
+ position: fixed;
15544
+ top: 0;
15545
+ left: 0;
15546
+ right: 0;
15547
+ height: var(--app-shell-appbar-height);
15548
+ padding-inline: var(--spacing-4);
15549
+ background-color: var(--color-surface-level3);
15550
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
15551
+ z-index: 11; /* above the sidebar rail (z-index 10) */
15552
+ }
15553
+
15554
+ /* ─── Large tier (responsive) ─── */
15555
+ @media (min-width: 1024px) {
15556
+ .muka-app-shell:not([data-size]) .muka-app-shell__sidebar {
15557
+ display: block;
15558
+ }
15559
+ .muka-app-shell:not([data-size]) .muka-app-shell__main {
15560
+ padding-left: var(--app-shell-sidebar-width);
15561
+ }
15562
+ .muka-app-shell:not([data-size]) .muka-app-shell__appbar {
15563
+ display: flex;
15564
+ }
15565
+ /* When an app bar is present, drop the rail + content below it so nothing overlaps. */
15566
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-app-shell__main {
15567
+ padding-top: var(--app-shell-appbar-height);
15568
+ }
15569
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15570
+ top: var(--app-shell-appbar-height);
15571
+ height: calc(100vh - var(--app-shell-appbar-height));
15572
+ }
15573
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-view,
15574
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-nav-transition {
15575
+ height: calc(100dvh - var(--app-shell-appbar-height));
15576
+ }
15577
+ }
15578
+
15579
+ /* ─── Large tier (forced via size="lg") ─── */
15580
+ .muka-app-shell[data-size='lg'] .muka-app-shell__sidebar {
15581
+ display: block;
15582
+ }
15583
+ .muka-app-shell[data-size='lg'] .muka-app-shell__main {
15584
+ padding-left: var(--app-shell-sidebar-width);
15585
+ }
15586
+ .muka-app-shell[data-size='lg'] .muka-app-shell__appbar {
15587
+ display: flex;
15588
+ }
15589
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-app-shell__main {
15590
+ padding-top: var(--app-shell-appbar-height);
15591
+ }
15592
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15593
+ top: var(--app-shell-appbar-height);
15594
+ height: calc(100vh - var(--app-shell-appbar-height));
15595
+ }
15596
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-view,
15597
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-nav-transition {
15598
+ height: calc(100dvh - var(--app-shell-appbar-height));
15599
+ }
15600
+
15601
+
15572
15602
  /* AgentTaskList */
15573
15603
  /* AgentTaskList Component Styles */
15574
15604