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