@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
@@ -2439,6 +2439,38 @@ body {
2439
2439
  }
2440
2440
 
2441
2441
 
2442
+ /* VoiceMessage */
2443
+ /* VoiceMessage Component Styles */
2444
+
2445
+ .muka-voice-message {
2446
+ display: flex;
2447
+ align-items: center;
2448
+ gap: var(--spacing-3);
2449
+ width: 100%;
2450
+ min-width: min(16rem, 60vw);
2451
+ }
2452
+
2453
+ .muka-voice-message__wave {
2454
+ flex: 1 1 auto;
2455
+ min-width: 0;
2456
+ }
2457
+
2458
+ .muka-voice-message__time {
2459
+ flex: 0 0 auto;
2460
+ white-space: nowrap;
2461
+ font-size: var(--text-label-sm-fontSize, 0.75rem);
2462
+ line-height: var(--text-label-sm-lineHeight, 1);
2463
+ font-variant-numeric: tabular-nums;
2464
+ color: var(--color-text-subtle-default);
2465
+ }
2466
+
2467
+ /* On the tinted own bubble the surface is the action color, so the timer flips
2468
+ * to the inverse text token for contrast. */
2469
+ .muka-voice-message--own .muka-voice-message__time {
2470
+ color: var(--color-text-default-inverse);
2471
+ }
2472
+
2473
+
2442
2474
  /* View */
2443
2475
  /* View Component Styles */
2444
2476
 
@@ -2549,38 +2581,6 @@ body {
2549
2581
  }
2550
2582
 
2551
2583
 
2552
- /* VoiceMessage */
2553
- /* VoiceMessage Component Styles */
2554
-
2555
- .muka-voice-message {
2556
- display: flex;
2557
- align-items: center;
2558
- gap: var(--spacing-3);
2559
- width: 100%;
2560
- min-width: min(16rem, 60vw);
2561
- }
2562
-
2563
- .muka-voice-message__wave {
2564
- flex: 1 1 auto;
2565
- min-width: 0;
2566
- }
2567
-
2568
- .muka-voice-message__time {
2569
- flex: 0 0 auto;
2570
- white-space: nowrap;
2571
- font-size: var(--text-label-sm-fontSize, 0.75rem);
2572
- line-height: var(--text-label-sm-lineHeight, 1);
2573
- font-variant-numeric: tabular-nums;
2574
- color: var(--color-text-subtle-default);
2575
- }
2576
-
2577
- /* On the tinted own bubble the surface is the action color, so the timer flips
2578
- * to the inverse text token for contrast. */
2579
- .muka-voice-message--own .muka-voice-message__time {
2580
- color: var(--color-text-default-inverse);
2581
- }
2582
-
2583
-
2584
2584
  /* Typography */
2585
2585
  .muka-typography-catalog {
2586
2586
  display: flex;
@@ -5231,81 +5231,6 @@ body {
5231
5231
  }
5232
5232
 
5233
5233
 
5234
- /* Skeleton */
5235
- /* Skeleton Component Styles */
5236
-
5237
- .muka-skeleton {
5238
- background-color: var(--color-surface-level1);
5239
- display: block;
5240
- }
5241
-
5242
- /* Variants */
5243
- .muka-skeleton--text {
5244
- height: 1em;
5245
- border-radius: var(--radius-md);
5246
- width: 100%;
5247
- }
5248
-
5249
- .muka-skeleton--circular {
5250
- width: 2.5rem;
5251
- height: 2.5rem;
5252
- border-radius: var(--radius-full);
5253
- }
5254
-
5255
- .muka-skeleton--rectangular {
5256
- height: 7.5rem;
5257
- border-radius: var(--radius-md);
5258
- width: 100%;
5259
- }
5260
-
5261
- /* Last line in multi-line text is shorter */
5262
- .muka-skeleton--last-line {
5263
- width: 80%;
5264
- }
5265
-
5266
- /* Lines container */
5267
- .muka-skeleton__lines {
5268
- display: flex;
5269
- flex-direction: column;
5270
- gap: var(--spacing-2);
5271
- }
5272
-
5273
- /* Shimmer animation */
5274
- @keyframes muka-skeleton-shimmer {
5275
- 0% {
5276
- background-position: -200% 0;
5277
- }
5278
- 100% {
5279
- background-position: 200% 0;
5280
- }
5281
- }
5282
-
5283
- .muka-skeleton--shimmer {
5284
- background: linear-gradient(
5285
- 90deg,
5286
- var(--color-surface-level1) 25%,
5287
- var(--color-surface-level2) 50%,
5288
- var(--color-surface-level1) 75%
5289
- );
5290
- background-size: 200% 100%;
5291
- animation: muka-skeleton-shimmer 1.5s ease-in-out infinite;
5292
- }
5293
-
5294
- /* Pulse animation */
5295
- @keyframes muka-skeleton-pulse {
5296
- 0%, 100% {
5297
- opacity: 1;
5298
- }
5299
- 50% {
5300
- opacity: 0.4;
5301
- }
5302
- }
5303
-
5304
- .muka-skeleton--pulse {
5305
- animation: muka-skeleton-pulse 1.5s ease-in-out infinite;
5306
- }
5307
-
5308
-
5309
5234
  /* Sheet */
5310
5235
  /* Sheet Component Styles */
5311
5236
 
@@ -5386,6 +5311,81 @@ body {
5386
5311
  }
5387
5312
 
5388
5313
 
5314
+ /* Skeleton */
5315
+ /* Skeleton Component Styles */
5316
+
5317
+ .muka-skeleton {
5318
+ background-color: var(--color-surface-level1);
5319
+ display: block;
5320
+ }
5321
+
5322
+ /* Variants */
5323
+ .muka-skeleton--text {
5324
+ height: 1em;
5325
+ border-radius: var(--radius-md);
5326
+ width: 100%;
5327
+ }
5328
+
5329
+ .muka-skeleton--circular {
5330
+ width: 2.5rem;
5331
+ height: 2.5rem;
5332
+ border-radius: var(--radius-full);
5333
+ }
5334
+
5335
+ .muka-skeleton--rectangular {
5336
+ height: 7.5rem;
5337
+ border-radius: var(--radius-md);
5338
+ width: 100%;
5339
+ }
5340
+
5341
+ /* Last line in multi-line text is shorter */
5342
+ .muka-skeleton--last-line {
5343
+ width: 80%;
5344
+ }
5345
+
5346
+ /* Lines container */
5347
+ .muka-skeleton__lines {
5348
+ display: flex;
5349
+ flex-direction: column;
5350
+ gap: var(--spacing-2);
5351
+ }
5352
+
5353
+ /* Shimmer animation */
5354
+ @keyframes muka-skeleton-shimmer {
5355
+ 0% {
5356
+ background-position: -200% 0;
5357
+ }
5358
+ 100% {
5359
+ background-position: 200% 0;
5360
+ }
5361
+ }
5362
+
5363
+ .muka-skeleton--shimmer {
5364
+ background: linear-gradient(
5365
+ 90deg,
5366
+ var(--color-surface-level1) 25%,
5367
+ var(--color-surface-level2) 50%,
5368
+ var(--color-surface-level1) 75%
5369
+ );
5370
+ background-size: 200% 100%;
5371
+ animation: muka-skeleton-shimmer 1.5s ease-in-out infinite;
5372
+ }
5373
+
5374
+ /* Pulse animation */
5375
+ @keyframes muka-skeleton-pulse {
5376
+ 0%, 100% {
5377
+ opacity: 1;
5378
+ }
5379
+ 50% {
5380
+ opacity: 0.4;
5381
+ }
5382
+ }
5383
+
5384
+ .muka-skeleton--pulse {
5385
+ animation: muka-skeleton-pulse 1.5s ease-in-out infinite;
5386
+ }
5387
+
5388
+
5389
5389
  /* Select */
5390
5390
  /* Select Component Styles - Aligned with Input for consistency */
5391
5391
 
@@ -7120,6 +7120,7 @@ body {
7120
7120
 
7121
7121
  /* Per-state gap: content-bearing steps are tighter, header-only steps looser */
7122
7122
  .muka-progress-accordeon--current,
7123
+ .muka-progress-accordeon--current.muka-progress-accordeon--expanded,
7123
7124
  .muka-progress-accordeon--past.muka-progress-accordeon--expanded,
7124
7125
  .muka-progress-accordeon--upcoming.muka-progress-accordeon--expanded {
7125
7126
  gap: var(--spacing-6);
@@ -7127,7 +7128,8 @@ body {
7127
7128
 
7128
7129
  .muka-progress-accordeon--upcoming,
7129
7130
  .muka-progress-accordeon--past.muka-progress-accordeon--collapsed,
7130
- .muka-progress-accordeon--upcoming.muka-progress-accordeon--collapsed {
7131
+ .muka-progress-accordeon--upcoming.muka-progress-accordeon--collapsed,
7132
+ .muka-progress-accordeon--current.muka-progress-accordeon--collapsed {
7131
7133
  gap: var(--spacing-8);
7132
7134
  }
7133
7135
 
@@ -7272,32 +7274,44 @@ body {
7272
7274
  width: 100%;
7273
7275
  }
7274
7276
 
7275
- /* ─── Collapse/expand animation (past & upcoming steps) ──────
7276
- The grid-template-rows 1fr → 0fr technique animates the content to/from its
7277
- intrinsic (auto) height with no magic max-height. Under prefers-reduced-motion
7278
- --motion-duration-view resolves to 0ms, so the toggle stays instant. */
7279
- .muka-progress-accordeon__slot-wrapper {
7277
+ /* ─── Collapse/expand animation (any expandable step) ──────
7278
+ Animates grid-template-rows 1fr ↔ 0fr so the panel (slot + actions) grows and
7279
+ shrinks to its intrinsic height. Opacity fades with the same duration.
7280
+ Under prefers-reduced-motion, --motion-duration-view is 0ms. */
7281
+ .muka-progress-accordeon__panel-wrapper {
7280
7282
  display: grid;
7281
7283
  grid-template-rows: 1fr;
7282
- transition: grid-template-rows var(--motion-duration-view) var(--motion-easing-enter);
7284
+ opacity: 1;
7285
+ transition:
7286
+ grid-template-rows var(--motion-duration-view) var(--motion-easing-enter),
7287
+ opacity var(--motion-duration-view) var(--motion-easing-enter);
7283
7288
  }
7284
7289
 
7285
- .muka-progress-accordeon__slot-wrapper--collapsed {
7290
+ .muka-progress-accordeon__panel-wrapper--collapsed {
7286
7291
  grid-template-rows: 0fr;
7292
+ opacity: 0;
7293
+ transition:
7294
+ grid-template-rows var(--motion-duration-view) var(--motion-easing-exit),
7295
+ opacity calc(var(--motion-duration-view) * 0.6) var(--motion-easing-exit);
7287
7296
  }
7288
7297
 
7289
7298
  /* The direct grid child clips and must have NO padding/border of its own —
7290
7299
  min-height:0 lets it shrink, and with no padding the 0fr track reaches a true
7291
7300
  0 height (padding on the item would leave a residual gap when collapsed). */
7292
- .muka-progress-accordeon__slot-clip {
7301
+ .muka-progress-accordeon__panel-clip {
7293
7302
  overflow: hidden;
7294
7303
  min-height: 0;
7295
7304
  }
7296
7305
 
7297
- /* The header↔content spacing lives on the inner slot (inside the clip region)
7298
- so it collapses together with the content. */
7299
- .muka-progress-accordeon__slot-wrapper .muka-progress-accordeon__slot {
7306
+ /* Header↔content spacing + slot/actions gap live inside the clip so they
7307
+ collapse together with the panel. */
7308
+ .muka-progress-accordeon__panel {
7309
+ display: flex;
7310
+ flex-direction: column;
7311
+ align-items: stretch;
7312
+ gap: var(--spacing-6);
7300
7313
  padding-top: var(--spacing-4);
7314
+ width: 100%;
7301
7315
  }
7302
7316
 
7303
7317
  /* ─── Action buttons (current state) ─────────────────────── */
@@ -7591,34 +7605,100 @@ body {
7591
7605
  }
7592
7606
 
7593
7607
 
7594
- /* Popover */
7595
- /* Popover Component Styles */
7596
-
7597
- .muka-popover__content {
7598
- background-color: var(--color-surface-level3);
7599
- border: var(--border-width-regular) solid var(--color-border-default);
7600
- border-radius: var(--radius-md);
7601
- padding: var(--spacing-4);
7602
- box-shadow: var(--shadow-level3);
7603
- max-width: 20rem;
7604
- z-index: 50;
7605
- animation: muka-popover-fade-in 150ms ease;
7606
- }
7608
+ /* PriceTag */
7609
+ /* PriceTag Component Styles - Using Muka Design Tokens */
7607
7610
 
7608
- @keyframes muka-popover-fade-in {
7609
- from {
7610
- opacity: 0;
7611
- transform: scale(0.96);
7612
- }
7613
- to {
7614
- opacity: 1;
7615
- transform: scale(1);
7616
- }
7611
+ .muka-price-tag {
7612
+ display: flex;
7613
+ flex-shrink: 0;
7617
7614
  }
7618
7615
 
7619
- /* Arrow */
7620
- .muka-popover__arrow {
7621
- fill: var(--color-surface-level3);
7616
+ /* Medium: stacked layout (price on top, unit below) */
7617
+ .muka-price-tag--md {
7618
+ flex-direction: column;
7619
+ align-items: flex-end;
7620
+ justify-content: center;
7621
+ }
7622
+
7623
+ /* Small: inline layout */
7624
+ .muka-price-tag--sm {
7625
+ flex-direction: row;
7626
+ align-items: center;
7627
+ gap: 3px;
7628
+ }
7629
+
7630
+ /* Amount row: currency + numbers */
7631
+ .muka-price-tag__amount {
7632
+ display: flex;
7633
+ align-items: flex-start;
7634
+ gap: var(--spacing-1);
7635
+ }
7636
+
7637
+ .muka-price-tag--sm .muka-price-tag__amount {
7638
+ align-items: center;
7639
+ }
7640
+
7641
+ /* Numbers group: whole + decimal + cents */
7642
+ .muka-price-tag__numbers {
7643
+ display: flex;
7644
+ align-items: baseline;
7645
+ }
7646
+
7647
+ /* ─── Medium size typography ──────────────────────────── */
7648
+
7649
+ .muka-price-tag--md .muka-price-tag__currency {
7650
+ font-family: var(--text-subheading-md-fontFamily);
7651
+ font-weight: var(--text-subheading-md-fontWeight);
7652
+ font-size: var(--text-subheading-md-fontSize);
7653
+ line-height: var(--text-label-2xl-bold-lineHeight);
7654
+ color: var(--color-text-subtle-default);
7655
+ }
7656
+
7657
+ .muka-price-tag--md .muka-price-tag__whole {
7658
+ font-family: var(--text-label-2xl-bold-fontFamily);
7659
+ font-weight: var(--text-label-2xl-bold-fontWeight);
7660
+ font-size: var(--text-label-2xl-bold-fontSize);
7661
+ line-height: var(--text-label-2xl-bold-lineHeight);
7662
+ color: var(--color-text-default-default);
7663
+ }
7664
+
7665
+ .muka-price-tag--md .muka-price-tag__decimal,
7666
+ .muka-price-tag--md .muka-price-tag__cents {
7667
+ font-family: var(--text-label-md-bold-fontFamily);
7668
+ font-weight: var(--text-label-md-bold-fontWeight);
7669
+ font-size: var(--text-label-md-bold-fontSize);
7670
+ line-height: var(--text-label-md-bold-lineHeight);
7671
+ color: var(--color-text-default-default);
7672
+ }
7673
+
7674
+ /* ─── Small size typography ───────────────────────────── */
7675
+
7676
+ .muka-price-tag--sm .muka-price-tag__currency {
7677
+ font-family: var(--text-body-base-regular-fontFamily);
7678
+ font-weight: var(--text-body-base-regular-fontWeight);
7679
+ font-size: var(--text-body-base-regular-fontSize);
7680
+ line-height: var(--text-label-md-bold-lineHeight);
7681
+ color: var(--color-text-subtle-default);
7682
+ }
7683
+
7684
+ .muka-price-tag--sm .muka-price-tag__whole,
7685
+ .muka-price-tag--sm .muka-price-tag__decimal,
7686
+ .muka-price-tag--sm .muka-price-tag__cents {
7687
+ font-family: var(--text-label-md-bold-fontFamily);
7688
+ font-weight: var(--text-label-md-bold-fontWeight);
7689
+ font-size: var(--text-label-md-bold-fontSize);
7690
+ line-height: var(--text-label-md-bold-lineHeight);
7691
+ color: var(--color-text-default-default);
7692
+ }
7693
+
7694
+ /* ─── Unit label (same for both sizes) ────────────────── */
7695
+
7696
+ .muka-price-tag__unit {
7697
+ font-family: var(--text-body-sm-regular-fontFamily);
7698
+ font-weight: var(--text-body-sm-regular-fontWeight);
7699
+ font-size: var(--text-body-sm-regular-fontSize);
7700
+ line-height: var(--text-body-sm-regular-lineHeight);
7701
+ color: var(--color-text-subtle-default);
7622
7702
  }
7623
7703
 
7624
7704
 
@@ -7719,6 +7799,37 @@ body {
7719
7799
  }
7720
7800
 
7721
7801
 
7802
+ /* Popover */
7803
+ /* Popover Component Styles */
7804
+
7805
+ .muka-popover__content {
7806
+ background-color: var(--color-surface-level3);
7807
+ border: var(--border-width-regular) solid var(--color-border-default);
7808
+ border-radius: var(--radius-md);
7809
+ padding: var(--spacing-4);
7810
+ box-shadow: var(--shadow-level3);
7811
+ max-width: 20rem;
7812
+ z-index: 50;
7813
+ animation: muka-popover-fade-in 150ms ease;
7814
+ }
7815
+
7816
+ @keyframes muka-popover-fade-in {
7817
+ from {
7818
+ opacity: 0;
7819
+ transform: scale(0.96);
7820
+ }
7821
+ to {
7822
+ opacity: 1;
7823
+ transform: scale(1);
7824
+ }
7825
+ }
7826
+
7827
+ /* Arrow */
7828
+ .muka-popover__arrow {
7829
+ fill: var(--color-surface-level3);
7830
+ }
7831
+
7832
+
7722
7833
  /* PhotoUploader */
7723
7834
  /* PhotoUploader Component Styles - Using Muka Design Tokens */
7724
7835
 
@@ -7764,7 +7875,7 @@ body {
7764
7875
  padding: 0;
7765
7876
  }
7766
7877
 
7767
- /* ─── Drop zone card ──────────────────────────────────── */
7878
+ /* ─── Drop zone card (button + "or drop here") ────────── */
7768
7879
  .muka-photo-uploader__dropzone {
7769
7880
  display: flex;
7770
7881
  flex-direction: column;
@@ -7788,24 +7899,12 @@ body {
7788
7899
  background-color: var(--color-surface-level1);
7789
7900
  }
7790
7901
 
7791
- .muka-photo-uploader__dropzone:focus-visible {
7792
- outline: 2px solid var(--color-border-focus);
7793
- outline-offset: 2px;
7794
- }
7795
-
7796
- .muka-photo-uploader__dropzone-icon {
7797
- display: flex;
7798
- align-items: center;
7799
- justify-content: center;
7800
- color: var(--color-icon-subtle-default);
7801
- }
7802
-
7803
7902
  .muka-photo-uploader__dropzone-text {
7804
- font-family: var(--text-body-base-regular-fontFamily);
7805
- font-size: var(--text-body-base-regular-fontSize);
7806
- font-weight: var(--text-body-base-regular-fontWeight);
7807
- line-height: var(--text-body-base-regular-lineHeight);
7808
- color: var(--color-text-subtle-default);
7903
+ font-family: var(--text-subheading-sm-fontFamily);
7904
+ font-size: var(--text-subheading-sm-fontSize);
7905
+ font-weight: var(--text-subheading-sm-fontWeight);
7906
+ line-height: var(--text-subheading-sm-lineHeight);
7907
+ color: var(--color-text-default-default);
7809
7908
  }
7810
7909
 
7811
7910
  /* ─── Disabled ────────────────────────────────────────── */
@@ -7847,103 +7946,6 @@ body {
7847
7946
  }
7848
7947
 
7849
7948
 
7850
- /* PriceTag */
7851
- /* PriceTag Component Styles - Using Muka Design Tokens */
7852
-
7853
- .muka-price-tag {
7854
- display: flex;
7855
- flex-shrink: 0;
7856
- }
7857
-
7858
- /* Medium: stacked layout (price on top, unit below) */
7859
- .muka-price-tag--md {
7860
- flex-direction: column;
7861
- align-items: flex-end;
7862
- justify-content: center;
7863
- }
7864
-
7865
- /* Small: inline layout */
7866
- .muka-price-tag--sm {
7867
- flex-direction: row;
7868
- align-items: center;
7869
- gap: 3px;
7870
- }
7871
-
7872
- /* Amount row: currency + numbers */
7873
- .muka-price-tag__amount {
7874
- display: flex;
7875
- align-items: flex-start;
7876
- gap: var(--spacing-1);
7877
- }
7878
-
7879
- .muka-price-tag--sm .muka-price-tag__amount {
7880
- align-items: center;
7881
- }
7882
-
7883
- /* Numbers group: whole + decimal + cents */
7884
- .muka-price-tag__numbers {
7885
- display: flex;
7886
- align-items: baseline;
7887
- }
7888
-
7889
- /* ─── Medium size typography ──────────────────────────── */
7890
-
7891
- .muka-price-tag--md .muka-price-tag__currency {
7892
- font-family: var(--text-subheading-md-fontFamily);
7893
- font-weight: var(--text-subheading-md-fontWeight);
7894
- font-size: var(--text-subheading-md-fontSize);
7895
- line-height: var(--text-label-2xl-bold-lineHeight);
7896
- color: var(--color-text-subtle-default);
7897
- }
7898
-
7899
- .muka-price-tag--md .muka-price-tag__whole {
7900
- font-family: var(--text-label-2xl-bold-fontFamily);
7901
- font-weight: var(--text-label-2xl-bold-fontWeight);
7902
- font-size: var(--text-label-2xl-bold-fontSize);
7903
- line-height: var(--text-label-2xl-bold-lineHeight);
7904
- color: var(--color-text-default-default);
7905
- }
7906
-
7907
- .muka-price-tag--md .muka-price-tag__decimal,
7908
- .muka-price-tag--md .muka-price-tag__cents {
7909
- font-family: var(--text-label-md-bold-fontFamily);
7910
- font-weight: var(--text-label-md-bold-fontWeight);
7911
- font-size: var(--text-label-md-bold-fontSize);
7912
- line-height: var(--text-label-md-bold-lineHeight);
7913
- color: var(--color-text-default-default);
7914
- }
7915
-
7916
- /* ─── Small size typography ───────────────────────────── */
7917
-
7918
- .muka-price-tag--sm .muka-price-tag__currency {
7919
- font-family: var(--text-body-base-regular-fontFamily);
7920
- font-weight: var(--text-body-base-regular-fontWeight);
7921
- font-size: var(--text-body-base-regular-fontSize);
7922
- line-height: var(--text-label-md-bold-lineHeight);
7923
- color: var(--color-text-subtle-default);
7924
- }
7925
-
7926
- .muka-price-tag--sm .muka-price-tag__whole,
7927
- .muka-price-tag--sm .muka-price-tag__decimal,
7928
- .muka-price-tag--sm .muka-price-tag__cents {
7929
- font-family: var(--text-label-md-bold-fontFamily);
7930
- font-weight: var(--text-label-md-bold-fontWeight);
7931
- font-size: var(--text-label-md-bold-fontSize);
7932
- line-height: var(--text-label-md-bold-lineHeight);
7933
- color: var(--color-text-default-default);
7934
- }
7935
-
7936
- /* ─── Unit label (same for both sizes) ────────────────── */
7937
-
7938
- .muka-price-tag__unit {
7939
- font-family: var(--text-body-sm-regular-fontFamily);
7940
- font-weight: var(--text-body-sm-regular-fontWeight);
7941
- font-size: var(--text-body-sm-regular-fontSize);
7942
- line-height: var(--text-body-sm-regular-lineHeight);
7943
- color: var(--color-text-subtle-default);
7944
- }
7945
-
7946
-
7947
7949
  /* PhotoDraftStrip */
7948
7950
  /* PhotoDraftStrip Component Styles */
7949
7951
 
@@ -8106,27 +8108,55 @@ body {
8106
8108
  }
8107
8109
 
8108
8110
 
8109
- /* Menu */
8110
- /* Menu Component Styles */
8111
+ /* NavigationTransition */
8112
+ /* NavigationTransition Component Styles */
8111
8113
 
8112
- /* ─── Content Container ──────────────────────────────────────────────────── */
8114
+ /* ─── Wrapper ────────────────────────────────────────── */
8113
8115
 
8114
- .muka-menu__content {
8115
- display: flex;
8116
- flex-direction: column;
8117
- min-width: var(--menu-content-min-width);
8118
- max-height: var(--menu-content-max-height);
8116
+ .muka-nav-transition {
8117
+ position: relative;
8118
+ height: 100vh;
8119
8119
  overflow: hidden;
8120
- background-color: var(--menu-content-color-background);
8121
- border: var(--menu-content-border-width) solid var(--menu-content-color-border);
8122
- border-radius: var(--menu-content-border-radius);
8123
- box-shadow: var(--menu-content-shadow);
8124
- padding: 0;
8125
- z-index: 50;
8120
+ }
8126
8121
 
8127
- /* Animation */
8128
- animation-duration: 150ms;
8129
- animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
8122
+ /* Disable interaction during animation */
8123
+ .muka-nav-transition--active {
8124
+ pointer-events: none;
8125
+ }
8126
+
8127
+ /* ─── View slots ─────────────────────────────────────── */
8128
+
8129
+ .muka-nav-transition--active .muka-nav-transition__view {
8130
+ position: absolute;
8131
+ inset: 0;
8132
+ }
8133
+
8134
+ /* Z-index layering */
8135
+ .muka-nav-transition__view--bottom { z-index: 1; }
8136
+ .muka-nav-transition__view--top { z-index: 2; }
8137
+
8138
+
8139
+ /* Menu */
8140
+ /* Menu Component Styles */
8141
+
8142
+ /* ─── Content Container ──────────────────────────────────────────────────── */
8143
+
8144
+ .muka-menu__content {
8145
+ display: flex;
8146
+ flex-direction: column;
8147
+ min-width: var(--menu-content-min-width);
8148
+ max-height: var(--menu-content-max-height);
8149
+ overflow: hidden;
8150
+ background-color: var(--menu-content-color-background);
8151
+ border: var(--menu-content-border-width) solid var(--menu-content-color-border);
8152
+ border-radius: var(--menu-content-border-radius);
8153
+ box-shadow: var(--menu-content-shadow);
8154
+ padding: 0;
8155
+ z-index: 50;
8156
+
8157
+ /* Animation */
8158
+ animation-duration: 150ms;
8159
+ animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
8130
8160
  }
8131
8161
 
8132
8162
  .muka-menu__body {
@@ -8771,34 +8801,6 @@ body {
8771
8801
  }
8772
8802
 
8773
8803
 
8774
- /* NavigationTransition */
8775
- /* NavigationTransition Component Styles */
8776
-
8777
- /* ─── Wrapper ────────────────────────────────────────── */
8778
-
8779
- .muka-nav-transition {
8780
- position: relative;
8781
- height: 100vh;
8782
- overflow: hidden;
8783
- }
8784
-
8785
- /* Disable interaction during animation */
8786
- .muka-nav-transition--active {
8787
- pointer-events: none;
8788
- }
8789
-
8790
- /* ─── View slots ─────────────────────────────────────── */
8791
-
8792
- .muka-nav-transition--active .muka-nav-transition__view {
8793
- position: absolute;
8794
- inset: 0;
8795
- }
8796
-
8797
- /* Z-index layering */
8798
- .muka-nav-transition__view--bottom { z-index: 1; }
8799
- .muka-nav-transition__view--top { z-index: 2; }
8800
-
8801
-
8802
8804
  /* ListItem */
8803
8805
  /* ListItem Component Styles - Using Muka Design Tokens */
8804
8806
 
@@ -8993,6 +8995,199 @@ li.muka-listitem {
8993
8995
  }
8994
8996
 
8995
8997
 
8998
+ /* LicensePlateInput */
8999
+ /* LicensePlateInput — Dutch RDW-style plate input
9000
+ *
9001
+ * Plate body colors are regulatory (EU/NL) and intentionally fixed:
9002
+ * - Plate yellow: #F0CE3D
9003
+ * - EU strip blue: #003399
9004
+ * - EU stars yellow: #FFCC00
9005
+ * - Plate text: #1A1A1A
9006
+ *
9007
+ * All surrounding UI (label, helper, focus ring, error border) uses Muka tokens.
9008
+ */
9009
+
9010
+ .muka-license-plate-input {
9011
+ --plate-yellow: #f0ce3d;
9012
+ --plate-blue: #003399;
9013
+ --plate-text: #1a1a1a;
9014
+ --plate-stars: #ffcc00;
9015
+
9016
+ display: inline-flex;
9017
+ flex-direction: column;
9018
+ gap: var(--spacing-2);
9019
+ }
9020
+
9021
+ /* Plate body */
9022
+ .muka-license-plate-input__plate {
9023
+ display: inline-flex;
9024
+ align-items: stretch;
9025
+ background-color: var(--plate-yellow);
9026
+ border-radius: var(--input-field-radius-md);
9027
+ cursor: text;
9028
+ position: relative;
9029
+ overflow: hidden;
9030
+ box-sizing: border-box;
9031
+ /* Subtle outline to lift the plate from light backgrounds */
9032
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
9033
+ /* Reserve space for the focus / error solid ring without shifting layout */
9034
+ outline: 3px solid transparent;
9035
+ outline-offset: 2px;
9036
+ transition: outline-color 0.15s ease, opacity 0.15s ease;
9037
+ }
9038
+
9039
+ /* Size variants — plate aspect echoes the real RDW plate (~5:1) */
9040
+ .muka-license-plate-input__plate--sm {
9041
+ height: 44px;
9042
+ min-width: 220px;
9043
+ border-radius: var(--input-field-radius-sm);
9044
+ }
9045
+
9046
+ .muka-license-plate-input__plate--md {
9047
+ height: 60px;
9048
+ min-width: 300px;
9049
+ border-radius: var(--input-field-radius-md);
9050
+ }
9051
+
9052
+ .muka-license-plate-input__plate--lg {
9053
+ height: 80px;
9054
+ min-width: 400px;
9055
+ border-radius: var(--input-field-radius-lg);
9056
+ }
9057
+
9058
+ /* Focus — solid outline ring */
9059
+ .muka-license-plate-input__plate--focused:not(.muka-license-plate-input__plate--disabled) {
9060
+ outline-color: var(--input-field-color-focus-border);
9061
+ }
9062
+
9063
+ /* Error — solid outline ring in error color */
9064
+ .muka-license-plate-input__plate--error:not(.muka-license-plate-input__plate--disabled) {
9065
+ outline-color: var(--input-field-color-error-border);
9066
+ }
9067
+
9068
+ /* Disabled */
9069
+ .muka-license-plate-input__plate--disabled {
9070
+ cursor: not-allowed;
9071
+ opacity: 0.55;
9072
+ }
9073
+
9074
+ /* EU strip */
9075
+ .muka-license-plate-input__eu-strip {
9076
+ display: inline-flex;
9077
+ flex-direction: column;
9078
+ align-items: center;
9079
+ justify-content: center;
9080
+ background-color: var(--plate-blue);
9081
+ color: #ffffff;
9082
+ flex-shrink: 0;
9083
+ padding: 0 0.4em;
9084
+ gap: 0.15em;
9085
+ /* Strip width scales with plate height for a consistent ratio */
9086
+ width: 14%;
9087
+ min-width: 36px;
9088
+ }
9089
+
9090
+ .muka-license-plate-input__eu-stars {
9091
+ width: 60%;
9092
+ max-width: 28px;
9093
+ aspect-ratio: 1 / 1;
9094
+ display: block;
9095
+ }
9096
+
9097
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__eu-stars {
9098
+ max-width: 20px;
9099
+ }
9100
+
9101
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__eu-stars {
9102
+ max-width: 36px;
9103
+ }
9104
+
9105
+ .muka-license-plate-input__country-code {
9106
+ font-family:
9107
+ 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
9108
+ font-weight: 700;
9109
+ letter-spacing: 0.04em;
9110
+ line-height: 1;
9111
+ color: #ffffff;
9112
+ }
9113
+
9114
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__country-code {
9115
+ font-size: 10px;
9116
+ }
9117
+
9118
+ .muka-license-plate-input__plate--md .muka-license-plate-input__country-code {
9119
+ font-size: 13px;
9120
+ }
9121
+
9122
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__country-code {
9123
+ font-size: 16px;
9124
+ }
9125
+
9126
+ /* Native input */
9127
+ .muka-license-plate-input__native {
9128
+ flex: 1;
9129
+ min-width: 0;
9130
+ border: none;
9131
+ outline: none;
9132
+ background: transparent;
9133
+ color: var(--plate-text);
9134
+ text-align: center;
9135
+ text-transform: uppercase;
9136
+ letter-spacing: 0.06em;
9137
+ /* Plate font — bold condensed sans is closest to the FE-Schrift look without
9138
+ shipping a custom font. JetBrains Mono is the system mono brand font. */
9139
+ font-family:
9140
+ 'Arial Narrow', 'Helvetica Neue', Helvetica, Arial, sans-serif;
9141
+ font-weight: 800;
9142
+ padding: 0 0.5em;
9143
+ width: 100%;
9144
+ caret-color: var(--plate-text);
9145
+ }
9146
+
9147
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__native {
9148
+ font-size: 22px;
9149
+ }
9150
+
9151
+ .muka-license-plate-input__plate--md .muka-license-plate-input__native {
9152
+ font-size: 30px;
9153
+ }
9154
+
9155
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__native {
9156
+ font-size: 42px;
9157
+ }
9158
+
9159
+ .muka-license-plate-input__native::placeholder {
9160
+ color: var(--plate-text);
9161
+ opacity: 0.55;
9162
+ font-weight: 700;
9163
+ letter-spacing: 0.08em;
9164
+ }
9165
+
9166
+ .muka-license-plate-input__plate--disabled .muka-license-plate-input__native {
9167
+ cursor: not-allowed;
9168
+ }
9169
+
9170
+ /* Helper text */
9171
+ .muka-license-plate-input__helper {
9172
+ font-family: var(--text-label-sm-regular-fontFamily);
9173
+ font-weight: var(--text-label-sm-regular-fontWeight);
9174
+ font-size: var(--text-label-sm-regular-fontSize);
9175
+ line-height: var(--text-label-sm-regular-lineHeight);
9176
+ color: var(--color-text-subtle-default);
9177
+ margin: 0;
9178
+ }
9179
+
9180
+ /* Error message */
9181
+ .muka-license-plate-input__error {
9182
+ font-family: var(--text-label-sm-regular-fontFamily);
9183
+ font-weight: var(--text-label-sm-regular-fontWeight);
9184
+ font-size: var(--text-label-sm-regular-fontSize);
9185
+ line-height: var(--text-label-sm-regular-lineHeight);
9186
+ color: var(--color-state-error-default);
9187
+ margin: 0;
9188
+ }
9189
+
9190
+
8996
9191
  /* Label */
8997
9192
  /* Label Component Styles - Using Muka Design Tokens */
8998
9193
 
@@ -9212,199 +9407,6 @@ li.muka-listitem {
9212
9407
  }
9213
9408
 
9214
9409
 
9215
- /* LicensePlateInput */
9216
- /* LicensePlateInput — Dutch RDW-style plate input
9217
- *
9218
- * Plate body colors are regulatory (EU/NL) and intentionally fixed:
9219
- * - Plate yellow: #F0CE3D
9220
- * - EU strip blue: #003399
9221
- * - EU stars yellow: #FFCC00
9222
- * - Plate text: #1A1A1A
9223
- *
9224
- * All surrounding UI (label, helper, focus ring, error border) uses Muka tokens.
9225
- */
9226
-
9227
- .muka-license-plate-input {
9228
- --plate-yellow: #f0ce3d;
9229
- --plate-blue: #003399;
9230
- --plate-text: #1a1a1a;
9231
- --plate-stars: #ffcc00;
9232
-
9233
- display: inline-flex;
9234
- flex-direction: column;
9235
- gap: var(--spacing-2);
9236
- }
9237
-
9238
- /* Plate body */
9239
- .muka-license-plate-input__plate {
9240
- display: inline-flex;
9241
- align-items: stretch;
9242
- background-color: var(--plate-yellow);
9243
- border-radius: var(--input-field-radius-md);
9244
- cursor: text;
9245
- position: relative;
9246
- overflow: hidden;
9247
- box-sizing: border-box;
9248
- /* Subtle outline to lift the plate from light backgrounds */
9249
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
9250
- /* Reserve space for the focus / error solid ring without shifting layout */
9251
- outline: 3px solid transparent;
9252
- outline-offset: 2px;
9253
- transition: outline-color 0.15s ease, opacity 0.15s ease;
9254
- }
9255
-
9256
- /* Size variants — plate aspect echoes the real RDW plate (~5:1) */
9257
- .muka-license-plate-input__plate--sm {
9258
- height: 44px;
9259
- min-width: 220px;
9260
- border-radius: var(--input-field-radius-sm);
9261
- }
9262
-
9263
- .muka-license-plate-input__plate--md {
9264
- height: 60px;
9265
- min-width: 300px;
9266
- border-radius: var(--input-field-radius-md);
9267
- }
9268
-
9269
- .muka-license-plate-input__plate--lg {
9270
- height: 80px;
9271
- min-width: 400px;
9272
- border-radius: var(--input-field-radius-lg);
9273
- }
9274
-
9275
- /* Focus — solid outline ring */
9276
- .muka-license-plate-input__plate--focused:not(.muka-license-plate-input__plate--disabled) {
9277
- outline-color: var(--input-field-color-focus-border);
9278
- }
9279
-
9280
- /* Error — solid outline ring in error color */
9281
- .muka-license-plate-input__plate--error:not(.muka-license-plate-input__plate--disabled) {
9282
- outline-color: var(--input-field-color-error-border);
9283
- }
9284
-
9285
- /* Disabled */
9286
- .muka-license-plate-input__plate--disabled {
9287
- cursor: not-allowed;
9288
- opacity: 0.55;
9289
- }
9290
-
9291
- /* EU strip */
9292
- .muka-license-plate-input__eu-strip {
9293
- display: inline-flex;
9294
- flex-direction: column;
9295
- align-items: center;
9296
- justify-content: center;
9297
- background-color: var(--plate-blue);
9298
- color: #ffffff;
9299
- flex-shrink: 0;
9300
- padding: 0 0.4em;
9301
- gap: 0.15em;
9302
- /* Strip width scales with plate height for a consistent ratio */
9303
- width: 14%;
9304
- min-width: 36px;
9305
- }
9306
-
9307
- .muka-license-plate-input__eu-stars {
9308
- width: 60%;
9309
- max-width: 28px;
9310
- aspect-ratio: 1 / 1;
9311
- display: block;
9312
- }
9313
-
9314
- .muka-license-plate-input__plate--sm .muka-license-plate-input__eu-stars {
9315
- max-width: 20px;
9316
- }
9317
-
9318
- .muka-license-plate-input__plate--lg .muka-license-plate-input__eu-stars {
9319
- max-width: 36px;
9320
- }
9321
-
9322
- .muka-license-plate-input__country-code {
9323
- font-family:
9324
- 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
9325
- font-weight: 700;
9326
- letter-spacing: 0.04em;
9327
- line-height: 1;
9328
- color: #ffffff;
9329
- }
9330
-
9331
- .muka-license-plate-input__plate--sm .muka-license-plate-input__country-code {
9332
- font-size: 10px;
9333
- }
9334
-
9335
- .muka-license-plate-input__plate--md .muka-license-plate-input__country-code {
9336
- font-size: 13px;
9337
- }
9338
-
9339
- .muka-license-plate-input__plate--lg .muka-license-plate-input__country-code {
9340
- font-size: 16px;
9341
- }
9342
-
9343
- /* Native input */
9344
- .muka-license-plate-input__native {
9345
- flex: 1;
9346
- min-width: 0;
9347
- border: none;
9348
- outline: none;
9349
- background: transparent;
9350
- color: var(--plate-text);
9351
- text-align: center;
9352
- text-transform: uppercase;
9353
- letter-spacing: 0.06em;
9354
- /* Plate font — bold condensed sans is closest to the FE-Schrift look without
9355
- shipping a custom font. JetBrains Mono is the system mono brand font. */
9356
- font-family:
9357
- 'Arial Narrow', 'Helvetica Neue', Helvetica, Arial, sans-serif;
9358
- font-weight: 800;
9359
- padding: 0 0.5em;
9360
- width: 100%;
9361
- caret-color: var(--plate-text);
9362
- }
9363
-
9364
- .muka-license-plate-input__plate--sm .muka-license-plate-input__native {
9365
- font-size: 22px;
9366
- }
9367
-
9368
- .muka-license-plate-input__plate--md .muka-license-plate-input__native {
9369
- font-size: 30px;
9370
- }
9371
-
9372
- .muka-license-plate-input__plate--lg .muka-license-plate-input__native {
9373
- font-size: 42px;
9374
- }
9375
-
9376
- .muka-license-plate-input__native::placeholder {
9377
- color: var(--plate-text);
9378
- opacity: 0.55;
9379
- font-weight: 700;
9380
- letter-spacing: 0.08em;
9381
- }
9382
-
9383
- .muka-license-plate-input__plate--disabled .muka-license-plate-input__native {
9384
- cursor: not-allowed;
9385
- }
9386
-
9387
- /* Helper text */
9388
- .muka-license-plate-input__helper {
9389
- font-family: var(--text-label-sm-regular-fontFamily);
9390
- font-weight: var(--text-label-sm-regular-fontWeight);
9391
- font-size: var(--text-label-sm-regular-fontSize);
9392
- line-height: var(--text-label-sm-regular-lineHeight);
9393
- color: var(--color-text-subtle-default);
9394
- margin: 0;
9395
- }
9396
-
9397
- /* Error message */
9398
- .muka-license-plate-input__error {
9399
- font-family: var(--text-label-sm-regular-fontFamily);
9400
- font-weight: var(--text-label-sm-regular-fontWeight);
9401
- font-size: var(--text-label-sm-regular-fontSize);
9402
- line-height: var(--text-label-sm-regular-lineHeight);
9403
- color: var(--color-state-error-default);
9404
- margin: 0;
9405
- }
9406
-
9407
-
9408
9410
  /* Input */
9409
9411
  /* Input Component Styles - Using Muka Design Tokens */
9410
9412
 
@@ -9686,6 +9688,60 @@ li.muka-listitem {
9686
9688
  }
9687
9689
 
9688
9690
 
9691
+ /* Icon */
9692
+ /* Icon Component Styles - Using Muka Design Tokens */
9693
+
9694
+ .muka-icon {
9695
+ display: inline-flex;
9696
+ align-items: center;
9697
+ justify-content: center;
9698
+ flex-shrink: 0;
9699
+ color: var(--color-icon-default-default, currentColor);
9700
+ }
9701
+
9702
+ /* Icons inside buttons should inherit from button's foreground color */
9703
+ .muka-button .muka-icon {
9704
+ color: inherit;
9705
+ }
9706
+
9707
+ .muka-icon--subtle {
9708
+ color: var(--color-icon-subtle-default);
9709
+ }
9710
+
9711
+ .muka-icon--muted {
9712
+ color: var(--color-icon-muted-default);
9713
+ }
9714
+
9715
+ .muka-icon--inverse {
9716
+ color: var(--color-icon-default-inverse);
9717
+ }
9718
+
9719
+ .muka-icon--xs {
9720
+ width: var(--icon-size-xs);
9721
+ height: var(--icon-size-xs);
9722
+ }
9723
+
9724
+ .muka-icon--sm {
9725
+ width: var(--icon-size-sm);
9726
+ height: var(--icon-size-sm);
9727
+ }
9728
+
9729
+ .muka-icon--md {
9730
+ width: var(--icon-size-default);
9731
+ height: var(--icon-size-default);
9732
+ }
9733
+
9734
+ .muka-icon--lg {
9735
+ width: var(--icon-size-lg);
9736
+ height: var(--icon-size-lg);
9737
+ }
9738
+
9739
+ .muka-icon svg {
9740
+ width: 100%;
9741
+ height: 100%;
9742
+ }
9743
+
9744
+
9689
9745
  /* Form */
9690
9746
  .muka-form {
9691
9747
  display: flex;
@@ -9968,207 +10024,12 @@ li.muka-listitem {
9968
10024
  }
9969
10025
 
9970
10026
 
9971
- /* Icon */
9972
- /* Icon Component Styles - Using Muka Design Tokens */
9973
-
9974
- .muka-icon {
9975
- display: inline-flex;
9976
- align-items: center;
9977
- justify-content: center;
9978
- flex-shrink: 0;
9979
- color: var(--color-icon-default-default, currentColor);
9980
- }
9981
-
9982
- /* Icons inside buttons should inherit from button's foreground color */
9983
- .muka-button .muka-icon {
9984
- color: inherit;
9985
- }
9986
-
9987
- .muka-icon--subtle {
9988
- color: var(--color-icon-subtle-default);
9989
- }
9990
-
9991
- .muka-icon--muted {
9992
- color: var(--color-icon-muted-default);
9993
- }
9994
-
9995
- .muka-icon--inverse {
9996
- color: var(--color-icon-default-inverse);
9997
- }
9998
-
9999
- .muka-icon--xs {
10000
- width: var(--icon-size-xs);
10001
- height: var(--icon-size-xs);
10002
- }
10003
-
10004
- .muka-icon--sm {
10005
- width: var(--icon-size-sm);
10006
- height: var(--icon-size-sm);
10007
- }
10008
-
10009
- .muka-icon--md {
10010
- width: var(--icon-size-default);
10011
- height: var(--icon-size-default);
10012
- }
10013
-
10014
- .muka-icon--lg {
10015
- width: var(--icon-size-lg);
10016
- height: var(--icon-size-lg);
10017
- }
10018
-
10019
- .muka-icon svg {
10020
- width: 100%;
10021
- height: 100%;
10022
- }
10023
-
10024
-
10025
- /* EmptyState */
10026
- /* EmptyState Component Styles - Using Muka Design Tokens */
10027
-
10028
- .muka-emptystate {
10029
- display: flex;
10030
- flex-direction: column;
10031
- align-items: center;
10032
- justify-content: center;
10033
- gap: var(--emptystate-container-gap);
10034
- max-width: var(--emptystate-container-maxWidth);
10035
- margin: 0 auto;
10036
- text-align: center;
10037
- }
10038
-
10039
- /* Alignment variants */
10040
- .muka-emptystate--left {
10041
- align-items: flex-start;
10042
- text-align: left;
10043
- }
10044
-
10045
- /* Size variants */
10046
- .muka-emptystate--sm {
10047
- padding: var(--emptystate-container-padding-sm);
10048
- }
10049
-
10050
- .muka-emptystate--md {
10051
- padding: var(--emptystate-container-padding-md);
10052
- }
10053
-
10054
- .muka-emptystate--lg {
10055
- padding: var(--emptystate-container-padding-lg);
10056
- }
10057
-
10058
- /* Visual (icon or illustration) */
10059
- .muka-emptystate__visual {
10060
- display: flex;
10061
- align-items: center;
10062
- justify-content: center;
10063
- color: var(--emptystate-icon-color);
10064
- flex-shrink: 0;
10065
- }
10066
-
10067
- .muka-emptystate--sm .muka-emptystate__visual {
10068
- width: var(--emptystate-icon-size-sm);
10069
- height: var(--emptystate-icon-size-sm);
10070
- }
10071
-
10072
- .muka-emptystate--md .muka-emptystate__visual {
10073
- width: var(--emptystate-icon-size-md);
10074
- height: var(--emptystate-icon-size-md);
10075
- }
10076
-
10077
- .muka-emptystate--lg .muka-emptystate__visual {
10078
- width: var(--emptystate-icon-size-lg);
10079
- height: var(--emptystate-icon-size-lg);
10080
- }
10081
-
10082
- .muka-emptystate__visual svg {
10083
- width: 100%;
10084
- height: 100%;
10085
- }
10086
-
10087
- .muka-emptystate__visual img {
10088
- width: 100%;
10089
- height: 100%;
10090
- object-fit: contain;
10091
- }
10092
-
10093
- /* Content */
10094
- .muka-emptystate__content {
10095
- display: flex;
10096
- flex-direction: column;
10097
- gap: var(--spacing-2);
10098
- }
10099
-
10100
- .muka-emptystate--left .muka-emptystate__content {
10101
- align-items: flex-start;
10102
- }
10103
-
10104
- /* Title */
10105
- .muka-emptystate__title {
10106
- color: var(--emptystate-title-color);
10107
- margin: 0;
10108
- font-family: var(--text-heading-sm-fontFamily);
10109
- font-weight: var(--text-heading-sm-fontWeight);
10110
- font-size: var(--text-heading-sm-fontSize);
10111
- line-height: var(--text-heading-sm-lineHeight);
10112
- }
10113
-
10114
- .muka-emptystate--sm .muka-emptystate__title {
10115
- font-family: var(--text-label-lg-semibold-fontFamily);
10116
- font-weight: var(--text-label-lg-semibold-fontWeight);
10117
- font-size: var(--text-label-lg-semibold-fontSize);
10118
- line-height: var(--text-label-lg-semibold-lineHeight);
10119
- }
10120
-
10121
- .muka-emptystate--lg .muka-emptystate__title {
10122
- font-family: var(--text-heading-md-fontFamily);
10123
- font-weight: var(--text-heading-md-fontWeight);
10124
- font-size: var(--text-heading-md-fontSize);
10125
- line-height: var(--text-heading-md-lineHeight);
10126
- }
10127
-
10128
- /* Description */
10129
- .muka-emptystate__description {
10130
- color: var(--emptystate-description-color);
10131
- margin: 0;
10132
- font-family: var(--text-body-sm-regular-fontFamily);
10133
- font-weight: var(--text-body-sm-regular-fontWeight);
10134
- font-size: var(--text-body-sm-regular-fontSize);
10135
- line-height: var(--text-body-sm-regular-lineHeight);
10136
- }
10137
-
10138
- .muka-emptystate--md .muka-emptystate__description {
10139
- font-family: var(--text-body-base-regular-fontFamily);
10140
- font-weight: var(--text-body-base-regular-fontWeight);
10141
- font-size: var(--text-body-base-regular-fontSize);
10142
- line-height: var(--text-body-base-regular-lineHeight);
10143
- }
10144
-
10145
- .muka-emptystate--lg .muka-emptystate__description {
10146
- font-family: var(--text-body-lg-regular-fontFamily);
10147
- font-weight: var(--text-body-lg-regular-fontWeight);
10148
- font-size: var(--text-body-lg-regular-fontSize);
10149
- line-height: var(--text-body-lg-regular-lineHeight);
10150
- }
10151
-
10152
- /* Actions */
10153
- .muka-emptystate__actions {
10154
- display: flex;
10155
- gap: var(--emptystate-actions-gap);
10156
- margin-top: var(--emptystate-actions-marginTop);
10157
- flex-wrap: wrap;
10158
- justify-content: center;
10159
- }
10160
-
10161
- .muka-emptystate--left .muka-emptystate__actions {
10162
- justify-content: flex-start;
10163
- }
10164
-
10165
-
10166
- /* FAB */
10167
- /* FAB (Floating Action Button) Component Styles */
10168
-
10169
- .muka-fab {
10170
- position: fixed;
10171
- z-index: 40;
10027
+ /* FAB */
10028
+ /* FAB (Floating Action Button) Component Styles */
10029
+
10030
+ .muka-fab {
10031
+ position: fixed;
10032
+ z-index: 40;
10172
10033
 
10173
10034
  display: inline-flex;
10174
10035
  align-items: center;
@@ -10710,36 +10571,315 @@ li.muka-listitem {
10710
10571
  }
10711
10572
 
10712
10573
 
10713
- /* Divider */
10714
- /* Divider Component Styles - Using Muka Design Tokens */
10574
+ /* DocumentViewer */
10575
+ /* DocumentViewer Component Styles - Using Muka Design Tokens */
10715
10576
 
10716
- .muka-divider {
10717
- flex-shrink: 0;
10577
+ .muka-documentviewer {
10578
+ display: flex;
10579
+ flex-direction: column;
10580
+ background-color: var(--documentviewer-container-background);
10581
+ border-radius: var(--documentviewer-container-borderRadius);
10582
+ overflow: hidden;
10583
+ position: relative;
10718
10584
  }
10719
10585
 
10720
- .muka-divider--horizontal {
10721
- width: 100%;
10722
- height: var(--separator-width);
10586
+ .muka-documentviewer--fullscreen {
10587
+ position: fixed;
10588
+ top: 0;
10589
+ left: 0;
10590
+ right: 0;
10591
+ bottom: 0;
10592
+ width: 100vw;
10593
+ height: 100vh;
10594
+ z-index: 9999;
10595
+ border-radius: 0;
10723
10596
  }
10724
10597
 
10725
- .muka-divider--vertical {
10726
- height: 100%;
10727
- width: var(--separator-width);
10728
- align-self: stretch;
10598
+ /* Toolbar */
10599
+ .muka-documentviewer__toolbar {
10600
+ display: flex;
10601
+ align-items: center;
10602
+ justify-content: space-between;
10603
+ height: var(--documentviewer-toolbar-height);
10604
+ padding: var(--documentviewer-toolbar-padding-y) var(--documentviewer-toolbar-padding-x);
10605
+ background-color: var(--documentviewer-toolbar-background);
10606
+ border-bottom: 1px solid var(--documentviewer-toolbar-border);
10607
+ gap: var(--documentviewer-toolbar-gap);
10608
+ flex-shrink: 0;
10729
10609
  }
10730
10610
 
10731
- .muka-divider--default {
10732
- background-color: var(--separator-color-default);
10611
+ .muka-documentviewer__toolbar-section {
10612
+ display: flex;
10613
+ align-items: center;
10614
+ gap: var(--documentviewer-toolbar-gap);
10733
10615
  }
10734
10616
 
10735
- .muka-divider--contrast {
10736
- background-color: var(--separator-color-contrast);
10617
+ .muka-documentviewer__toolbar-section--center {
10618
+ flex: 1;
10619
+ justify-content: center;
10737
10620
  }
10738
10621
 
10622
+ .muka-documentviewer__toolbar-section--end {
10623
+ justify-content: flex-end;
10624
+ }
10625
+
10626
+ /* Page navigation */
10627
+ .muka-documentviewer__page-input {
10628
+ display: flex;
10629
+ align-items: center;
10630
+ gap: var(--spacing-1);
10631
+ }
10632
+
10633
+ .muka-documentviewer__page-number {
10634
+ width: 3rem;
10635
+ padding: var(--spacing-1) var(--spacing-2);
10636
+ text-align: center;
10637
+ font-family: var(--alias-font-brand-family);
10638
+ font-size: var(--text-label-sm-fontSize);
10639
+ line-height: var(--text-label-sm-lineHeight);
10640
+ border: 1px solid var(--color-border-default);
10641
+ border-radius: var(--border-radius-md);
10642
+ background-color: var(--color-surface-level0);
10643
+ color: var(--color-text-default-default);
10644
+ }
10645
+
10646
+ .muka-documentviewer__page-number:focus {
10647
+ outline: 2px solid var(--color-border-focus);
10648
+ outline-offset: 0;
10649
+ border-color: var(--color-border-focus);
10650
+ }
10651
+
10652
+ .muka-documentviewer__page-total {
10653
+ font-family: var(--alias-font-brand-family);
10654
+ font-size: var(--text-label-sm-fontSize);
10655
+ color: var(--color-text-subtle-default);
10656
+ }
10657
+
10658
+ /* Zoom controls */
10659
+ .muka-documentviewer__zoom-display {
10660
+ min-width: var(--documentviewer-zoom-button-width);
10661
+ padding: var(--spacing-1) var(--spacing-2);
10662
+ font-family: var(--alias-font-brand-family);
10663
+ font-size: var(--text-label-sm-fontSize);
10664
+ font-weight: var(--alias-font-brand-weight-semibold);
10665
+ color: var(--color-text-default-default);
10666
+ background: transparent;
10667
+ border: none;
10668
+ border-radius: var(--border-radius-md);
10669
+ cursor: pointer;
10670
+ transition: background-color 0.2s ease;
10671
+ }
10672
+
10673
+ .muka-documentviewer__zoom-display:hover {
10674
+ background-color: var(--color-surface-level2);
10675
+ }
10676
+
10677
+ .muka-documentviewer__zoom-display:focus {
10678
+ outline: 2px solid var(--color-border-focus);
10679
+ outline-offset: 0;
10680
+ }
10681
+
10682
+ /* Content area */
10683
+ .muka-documentviewer__content {
10684
+ display: flex;
10685
+ flex: 1;
10686
+ overflow: hidden;
10687
+ }
10688
+
10689
+ .muka-documentviewer__main {
10690
+ flex: 1;
10691
+ display: flex;
10692
+ flex-direction: column;
10693
+ overflow: hidden;
10694
+ position: relative;
10695
+ }
10696
+
10697
+ /* Canvas */
10698
+ .muka-documentviewer__canvas {
10699
+ flex: 1;
10700
+ background-color: var(--documentviewer-canvas-background);
10701
+ padding: var(--documentviewer-canvas-padding);
10702
+ overflow: auto;
10703
+ display: flex;
10704
+ align-items: flex-start;
10705
+ justify-content: center;
10706
+ }
10707
+
10708
+ .muka-documentviewer__page {
10709
+ background-color: var(--documentviewer-page-background);
10710
+ box-shadow: var(--documentviewer-page-shadow);
10711
+ border-radius: var(--documentviewer-page-borderRadius);
10712
+ overflow: hidden;
10713
+ }
10714
+
10715
+ .muka-documentviewer__page canvas {
10716
+ display: block;
10717
+ max-width: 100%;
10718
+ height: auto;
10719
+ }
10720
+
10721
+ .muka-documentviewer__page-number {
10722
+ text-align: center;
10723
+ padding: var(--spacing-2);
10724
+ font-family: var(--alias-font-brand-family);
10725
+ font-size: var(--text-label-sm-fontSize);
10726
+ color: var(--color-text-subtle-default);
10727
+ }
10728
+
10729
+ /* Thumbnails */
10730
+ .muka-documentviewer__thumbnails {
10731
+ width: var(--documentviewer-thumbnails-width);
10732
+ background-color: var(--documentviewer-thumbnails-background);
10733
+ border-right: 1px solid var(--documentviewer-thumbnails-border);
10734
+ overflow-y: auto;
10735
+ flex-shrink: 0;
10736
+ }
10737
+
10738
+ .muka-documentviewer__thumbnails-list {
10739
+ display: flex;
10740
+ flex-direction: column;
10741
+ gap: var(--documentviewer-thumbnails-item-gap);
10742
+ padding: var(--spacing-2);
10743
+ }
10744
+
10745
+ .muka-documentviewer__thumbnail-item {
10746
+ display: flex;
10747
+ flex-direction: column;
10748
+ align-items: center;
10749
+ gap: var(--spacing-1);
10750
+ padding: var(--documentviewer-thumbnails-item-padding);
10751
+ border-radius: var(--documentviewer-thumbnails-item-borderRadius);
10752
+ border: 2px solid var(--documentviewer-thumbnails-item-border-default);
10753
+ background-color: var(--documentviewer-thumbnails-item-background-default);
10754
+ cursor: pointer;
10755
+ transition: all 0.2s ease;
10756
+ width: 100%;
10757
+ }
10758
+
10759
+ .muka-documentviewer__thumbnail-item:hover {
10760
+ background-color: var(--documentviewer-thumbnails-item-background-hover);
10761
+ }
10762
+
10763
+ .muka-documentviewer__thumbnail-item--selected {
10764
+ background-color: var(--documentviewer-thumbnails-item-background-selected);
10765
+ border-color: var(--documentviewer-thumbnails-item-border-selected);
10766
+ }
10767
+
10768
+ .muka-documentviewer__thumbnail-item:focus {
10769
+ outline: 2px solid var(--color-border-focus);
10770
+ outline-offset: 2px;
10771
+ }
10772
+
10773
+ .muka-documentviewer__thumbnail-preview {
10774
+ width: 100%;
10775
+ overflow: hidden;
10776
+ border-radius: var(--border-radius-sm);
10777
+ }
10778
+
10779
+ .muka-documentviewer__thumbnail-preview canvas {
10780
+ display: block;
10781
+ width: 100%;
10782
+ height: auto;
10783
+ }
10784
+
10785
+ .muka-documentviewer__thumbnail-label {
10786
+ font-family: var(--alias-font-brand-family);
10787
+ font-size: var(--text-label-xs-regular-fontSize);
10788
+ color: var(--color-text-default-default);
10789
+ font-weight: var(--alias-font-brand-weight-medium);
10790
+ }
10791
+
10792
+ /* Loading state */
10793
+ .muka-documentviewer__loading {
10794
+ display: flex;
10795
+ align-items: center;
10796
+ justify-content: center;
10797
+ flex: 1;
10798
+ background-color: var(--documentviewer-loading-overlay-background);
10799
+ }
10800
+
10801
+ /* Error state */
10802
+ .muka-documentviewer__error {
10803
+ display: flex;
10804
+ align-items: center;
10805
+ justify-content: center;
10806
+ flex: 1;
10807
+ padding: var(--spacing-4);
10808
+ background-color: var(--documentviewer-error-background);
10809
+ }
10810
+
10811
+ /* Accessibility - visually hidden */
10812
+ .visually-hidden {
10813
+ position: absolute;
10814
+ width: 1px;
10815
+ height: 1px;
10816
+ margin: -1px;
10817
+ padding: 0;
10818
+ overflow: hidden;
10819
+ clip: rect(0, 0, 0, 0);
10820
+ white-space: nowrap;
10821
+ border-width: 0;
10822
+ }
10823
+
10824
+ /* React-PDF specific styles */
10825
+ .react-pdf__Document {
10826
+ display: flex;
10827
+ flex-direction: column;
10828
+ align-items: center;
10829
+ }
10830
+
10831
+ .react-pdf__Page {
10832
+ max-width: 100%;
10833
+ box-shadow: var(--documentviewer-page-shadow);
10834
+ border-radius: var(--documentviewer-page-borderRadius);
10835
+ overflow: hidden;
10836
+ }
10837
+
10838
+ .react-pdf__Page__canvas {
10839
+ max-width: 100%;
10840
+ height: auto !important;
10841
+ display: block;
10842
+ }
10843
+
10844
+ .react-pdf__Page__textContent {
10845
+ max-width: 100%;
10846
+ }
10847
+
10848
+ .react-pdf__Page__annotations {
10849
+ max-width: 100%;
10850
+ }
10851
+
10852
+
10853
+ /* Divider */
10854
+ /* Divider Component Styles - Using Muka Design Tokens */
10855
+
10856
+ .muka-divider {
10857
+ flex-shrink: 0;
10858
+ }
10859
+
10860
+ .muka-divider--horizontal {
10861
+ width: 100%;
10862
+ height: var(--separator-width);
10863
+ }
10864
+
10865
+ .muka-divider--vertical {
10866
+ height: 100%;
10867
+ width: var(--separator-width);
10868
+ align-self: stretch;
10869
+ }
10870
+
10871
+ .muka-divider--default {
10872
+ background-color: var(--separator-color-default);
10873
+ }
10874
+
10875
+ .muka-divider--contrast {
10876
+ background-color: var(--separator-color-contrast);
10877
+ }
10878
+
10879
+
10880
+ /* Dialog */
10881
+ /* Dialog Component Styles */
10739
10882
 
10740
- /* Dialog */
10741
- /* Dialog Component Styles */
10742
-
10743
10883
  /* ─── Native dialog reset ─────────────────────────────── */
10744
10884
 
10745
10885
  .muka-dialog {
@@ -11008,282 +11148,144 @@ li.muka-listitem {
11008
11148
  }
11009
11149
 
11010
11150
 
11011
- /* DocumentViewer */
11012
- /* DocumentViewer Component Styles - Using Muka Design Tokens */
11151
+ /* EmptyState */
11152
+ /* EmptyState Component Styles - Using Muka Design Tokens */
11013
11153
 
11014
- .muka-documentviewer {
11154
+ .muka-emptystate {
11015
11155
  display: flex;
11016
11156
  flex-direction: column;
11017
- background-color: var(--documentviewer-container-background);
11018
- border-radius: var(--documentviewer-container-borderRadius);
11019
- overflow: hidden;
11020
- position: relative;
11021
- }
11022
-
11023
- .muka-documentviewer--fullscreen {
11024
- position: fixed;
11025
- top: 0;
11026
- left: 0;
11027
- right: 0;
11028
- bottom: 0;
11029
- width: 100vw;
11030
- height: 100vh;
11031
- z-index: 9999;
11032
- border-radius: 0;
11033
- }
11034
-
11035
- /* Toolbar */
11036
- .muka-documentviewer__toolbar {
11037
- display: flex;
11038
- align-items: center;
11039
- justify-content: space-between;
11040
- height: var(--documentviewer-toolbar-height);
11041
- padding: var(--documentviewer-toolbar-padding-y) var(--documentviewer-toolbar-padding-x);
11042
- background-color: var(--documentviewer-toolbar-background);
11043
- border-bottom: 1px solid var(--documentviewer-toolbar-border);
11044
- gap: var(--documentviewer-toolbar-gap);
11045
- flex-shrink: 0;
11046
- }
11047
-
11048
- .muka-documentviewer__toolbar-section {
11049
- display: flex;
11050
11157
  align-items: center;
11051
- gap: var(--documentviewer-toolbar-gap);
11052
- }
11053
-
11054
- .muka-documentviewer__toolbar-section--center {
11055
- flex: 1;
11056
11158
  justify-content: center;
11057
- }
11058
-
11059
- .muka-documentviewer__toolbar-section--end {
11060
- justify-content: flex-end;
11061
- }
11062
-
11063
- /* Page navigation */
11064
- .muka-documentviewer__page-input {
11065
- display: flex;
11066
- align-items: center;
11067
- gap: var(--spacing-1);
11068
- }
11069
-
11070
- .muka-documentviewer__page-number {
11071
- width: 3rem;
11072
- padding: var(--spacing-1) var(--spacing-2);
11159
+ gap: var(--emptystate-container-gap);
11160
+ max-width: var(--emptystate-container-maxWidth);
11161
+ margin: 0 auto;
11073
11162
  text-align: center;
11074
- font-family: var(--alias-font-brand-family);
11075
- font-size: var(--text-label-sm-fontSize);
11076
- line-height: var(--text-label-sm-lineHeight);
11077
- border: 1px solid var(--color-border-default);
11078
- border-radius: var(--border-radius-md);
11079
- background-color: var(--color-surface-level0);
11080
- color: var(--color-text-default-default);
11081
11163
  }
11082
11164
 
11083
- .muka-documentviewer__page-number:focus {
11084
- outline: 2px solid var(--color-border-focus);
11085
- outline-offset: 0;
11086
- border-color: var(--color-border-focus);
11087
- }
11088
-
11089
- .muka-documentviewer__page-total {
11090
- font-family: var(--alias-font-brand-family);
11091
- font-size: var(--text-label-sm-fontSize);
11092
- color: var(--color-text-subtle-default);
11093
- }
11094
-
11095
- /* Zoom controls */
11096
- .muka-documentviewer__zoom-display {
11097
- min-width: var(--documentviewer-zoom-button-width);
11098
- padding: var(--spacing-1) var(--spacing-2);
11099
- font-family: var(--alias-font-brand-family);
11100
- font-size: var(--text-label-sm-fontSize);
11101
- font-weight: var(--alias-font-brand-weight-semibold);
11102
- color: var(--color-text-default-default);
11103
- background: transparent;
11104
- border: none;
11105
- border-radius: var(--border-radius-md);
11106
- cursor: pointer;
11107
- transition: background-color 0.2s ease;
11108
- }
11109
-
11110
- .muka-documentviewer__zoom-display:hover {
11111
- background-color: var(--color-surface-level2);
11112
- }
11113
-
11114
- .muka-documentviewer__zoom-display:focus {
11115
- outline: 2px solid var(--color-border-focus);
11116
- outline-offset: 0;
11117
- }
11118
-
11119
- /* Content area */
11120
- .muka-documentviewer__content {
11121
- display: flex;
11122
- flex: 1;
11123
- overflow: hidden;
11124
- }
11125
-
11126
- .muka-documentviewer__main {
11127
- flex: 1;
11128
- display: flex;
11129
- flex-direction: column;
11130
- overflow: hidden;
11131
- position: relative;
11132
- }
11133
-
11134
- /* Canvas */
11135
- .muka-documentviewer__canvas {
11136
- flex: 1;
11137
- background-color: var(--documentviewer-canvas-background);
11138
- padding: var(--documentviewer-canvas-padding);
11139
- overflow: auto;
11140
- display: flex;
11165
+ /* Alignment variants */
11166
+ .muka-emptystate--left {
11141
11167
  align-items: flex-start;
11142
- justify-content: center;
11143
- }
11144
-
11145
- .muka-documentviewer__page {
11146
- background-color: var(--documentviewer-page-background);
11147
- box-shadow: var(--documentviewer-page-shadow);
11148
- border-radius: var(--documentviewer-page-borderRadius);
11149
- overflow: hidden;
11150
- }
11151
-
11152
- .muka-documentviewer__page canvas {
11153
- display: block;
11154
- max-width: 100%;
11155
- height: auto;
11168
+ text-align: left;
11156
11169
  }
11157
11170
 
11158
- .muka-documentviewer__page-number {
11159
- text-align: center;
11160
- padding: var(--spacing-2);
11161
- font-family: var(--alias-font-brand-family);
11162
- font-size: var(--text-label-sm-fontSize);
11163
- color: var(--color-text-subtle-default);
11171
+ /* Size variants */
11172
+ .muka-emptystate--sm {
11173
+ padding: var(--emptystate-container-padding-sm);
11164
11174
  }
11165
11175
 
11166
- /* Thumbnails */
11167
- .muka-documentviewer__thumbnails {
11168
- width: var(--documentviewer-thumbnails-width);
11169
- background-color: var(--documentviewer-thumbnails-background);
11170
- border-right: 1px solid var(--documentviewer-thumbnails-border);
11171
- overflow-y: auto;
11172
- flex-shrink: 0;
11176
+ .muka-emptystate--md {
11177
+ padding: var(--emptystate-container-padding-md);
11173
11178
  }
11174
11179
 
11175
- .muka-documentviewer__thumbnails-list {
11176
- display: flex;
11177
- flex-direction: column;
11178
- gap: var(--documentviewer-thumbnails-item-gap);
11179
- padding: var(--spacing-2);
11180
+ .muka-emptystate--lg {
11181
+ padding: var(--emptystate-container-padding-lg);
11180
11182
  }
11181
11183
 
11182
- .muka-documentviewer__thumbnail-item {
11184
+ /* Visual (icon or illustration) */
11185
+ .muka-emptystate__visual {
11183
11186
  display: flex;
11184
- flex-direction: column;
11185
11187
  align-items: center;
11186
- gap: var(--spacing-1);
11187
- padding: var(--documentviewer-thumbnails-item-padding);
11188
- border-radius: var(--documentviewer-thumbnails-item-borderRadius);
11189
- border: 2px solid var(--documentviewer-thumbnails-item-border-default);
11190
- background-color: var(--documentviewer-thumbnails-item-background-default);
11191
- cursor: pointer;
11192
- transition: all 0.2s ease;
11193
- width: 100%;
11188
+ justify-content: center;
11189
+ color: var(--emptystate-icon-color);
11190
+ flex-shrink: 0;
11194
11191
  }
11195
11192
 
11196
- .muka-documentviewer__thumbnail-item:hover {
11197
- background-color: var(--documentviewer-thumbnails-item-background-hover);
11193
+ .muka-emptystate--sm .muka-emptystate__visual {
11194
+ width: var(--emptystate-icon-size-sm);
11195
+ height: var(--emptystate-icon-size-sm);
11198
11196
  }
11199
11197
 
11200
- .muka-documentviewer__thumbnail-item--selected {
11201
- background-color: var(--documentviewer-thumbnails-item-background-selected);
11202
- border-color: var(--documentviewer-thumbnails-item-border-selected);
11198
+ .muka-emptystate--md .muka-emptystate__visual {
11199
+ width: var(--emptystate-icon-size-md);
11200
+ height: var(--emptystate-icon-size-md);
11203
11201
  }
11204
11202
 
11205
- .muka-documentviewer__thumbnail-item:focus {
11206
- outline: 2px solid var(--color-border-focus);
11207
- outline-offset: 2px;
11203
+ .muka-emptystate--lg .muka-emptystate__visual {
11204
+ width: var(--emptystate-icon-size-lg);
11205
+ height: var(--emptystate-icon-size-lg);
11208
11206
  }
11209
11207
 
11210
- .muka-documentviewer__thumbnail-preview {
11208
+ .muka-emptystate__visual svg {
11211
11209
  width: 100%;
11212
- overflow: hidden;
11213
- border-radius: var(--border-radius-sm);
11210
+ height: 100%;
11214
11211
  }
11215
11212
 
11216
- .muka-documentviewer__thumbnail-preview canvas {
11217
- display: block;
11213
+ .muka-emptystate__visual img {
11218
11214
  width: 100%;
11219
- height: auto;
11215
+ height: 100%;
11216
+ object-fit: contain;
11220
11217
  }
11221
11218
 
11222
- .muka-documentviewer__thumbnail-label {
11223
- font-family: var(--alias-font-brand-family);
11224
- font-size: var(--text-label-xs-regular-fontSize);
11225
- color: var(--color-text-default-default);
11226
- font-weight: var(--alias-font-brand-weight-medium);
11219
+ /* Content */
11220
+ .muka-emptystate__content {
11221
+ display: flex;
11222
+ flex-direction: column;
11223
+ gap: var(--spacing-2);
11227
11224
  }
11228
11225
 
11229
- /* Loading state */
11230
- .muka-documentviewer__loading {
11231
- display: flex;
11232
- align-items: center;
11233
- justify-content: center;
11234
- flex: 1;
11235
- background-color: var(--documentviewer-loading-overlay-background);
11226
+ .muka-emptystate--left .muka-emptystate__content {
11227
+ align-items: flex-start;
11236
11228
  }
11237
11229
 
11238
- /* Error state */
11239
- .muka-documentviewer__error {
11240
- display: flex;
11241
- align-items: center;
11242
- justify-content: center;
11243
- flex: 1;
11244
- padding: var(--spacing-4);
11245
- background-color: var(--documentviewer-error-background);
11230
+ /* Title */
11231
+ .muka-emptystate__title {
11232
+ color: var(--emptystate-title-color);
11233
+ margin: 0;
11234
+ font-family: var(--text-heading-sm-fontFamily);
11235
+ font-weight: var(--text-heading-sm-fontWeight);
11236
+ font-size: var(--text-heading-sm-fontSize);
11237
+ line-height: var(--text-heading-sm-lineHeight);
11246
11238
  }
11247
11239
 
11248
- /* Accessibility - visually hidden */
11249
- .visually-hidden {
11250
- position: absolute;
11251
- width: 1px;
11252
- height: 1px;
11253
- margin: -1px;
11254
- padding: 0;
11255
- overflow: hidden;
11256
- clip: rect(0, 0, 0, 0);
11257
- white-space: nowrap;
11258
- border-width: 0;
11240
+ .muka-emptystate--sm .muka-emptystate__title {
11241
+ font-family: var(--text-label-lg-semibold-fontFamily);
11242
+ font-weight: var(--text-label-lg-semibold-fontWeight);
11243
+ font-size: var(--text-label-lg-semibold-fontSize);
11244
+ line-height: var(--text-label-lg-semibold-lineHeight);
11259
11245
  }
11260
11246
 
11261
- /* React-PDF specific styles */
11262
- .react-pdf__Document {
11263
- display: flex;
11264
- flex-direction: column;
11265
- align-items: center;
11247
+ .muka-emptystate--lg .muka-emptystate__title {
11248
+ font-family: var(--text-heading-md-fontFamily);
11249
+ font-weight: var(--text-heading-md-fontWeight);
11250
+ font-size: var(--text-heading-md-fontSize);
11251
+ line-height: var(--text-heading-md-lineHeight);
11266
11252
  }
11267
11253
 
11268
- .react-pdf__Page {
11269
- max-width: 100%;
11270
- box-shadow: var(--documentviewer-page-shadow);
11271
- border-radius: var(--documentviewer-page-borderRadius);
11272
- overflow: hidden;
11254
+ /* Description */
11255
+ .muka-emptystate__description {
11256
+ color: var(--emptystate-description-color);
11257
+ margin: 0;
11258
+ font-family: var(--text-body-sm-regular-fontFamily);
11259
+ font-weight: var(--text-body-sm-regular-fontWeight);
11260
+ font-size: var(--text-body-sm-regular-fontSize);
11261
+ line-height: var(--text-body-sm-regular-lineHeight);
11273
11262
  }
11274
11263
 
11275
- .react-pdf__Page__canvas {
11276
- max-width: 100%;
11277
- height: auto !important;
11278
- display: block;
11264
+ .muka-emptystate--md .muka-emptystate__description {
11265
+ font-family: var(--text-body-base-regular-fontFamily);
11266
+ font-weight: var(--text-body-base-regular-fontWeight);
11267
+ font-size: var(--text-body-base-regular-fontSize);
11268
+ line-height: var(--text-body-base-regular-lineHeight);
11279
11269
  }
11280
11270
 
11281
- .react-pdf__Page__textContent {
11282
- max-width: 100%;
11271
+ .muka-emptystate--lg .muka-emptystate__description {
11272
+ font-family: var(--text-body-lg-regular-fontFamily);
11273
+ font-weight: var(--text-body-lg-regular-fontWeight);
11274
+ font-size: var(--text-body-lg-regular-fontSize);
11275
+ line-height: var(--text-body-lg-regular-lineHeight);
11283
11276
  }
11284
11277
 
11285
- .react-pdf__Page__annotations {
11286
- max-width: 100%;
11278
+ /* Actions */
11279
+ .muka-emptystate__actions {
11280
+ display: flex;
11281
+ gap: var(--emptystate-actions-gap);
11282
+ margin-top: var(--emptystate-actions-marginTop);
11283
+ flex-wrap: wrap;
11284
+ justify-content: center;
11285
+ }
11286
+
11287
+ .muka-emptystate--left .muka-emptystate__actions {
11288
+ justify-content: flex-start;
11287
11289
  }
11288
11290
 
11289
11291
 
@@ -12573,235 +12575,68 @@ li.muka-listitem {
12573
12575
  height: 40px;
12574
12576
  }
12575
12577
 
12576
- /* Vertical image sizing */
12577
- .muka-checkbox-tile--vertical .muka-checkbox-tile__image {
12578
- width: 100%;
12579
- aspect-ratio: 4/3;
12580
- }
12581
-
12582
- /* Content container */
12583
- .muka-checkbox-tile__content {
12584
- display: flex;
12585
- flex-direction: column;
12586
- flex: 1;
12587
- min-width: 0;
12588
- gap: var(--spacing-2);
12589
- }
12590
-
12591
- .muka-checkbox-tile__content-inner {
12592
- display: flex;
12593
- flex-direction: column;
12594
- gap: var(--spacing-1);
12595
- }
12596
-
12597
- /* Chip slot (replaces badge; use Chip component) */
12598
- .muka-checkbox-tile__chip {
12599
- flex-shrink: 0;
12600
- }
12601
-
12602
- .muka-checkbox-tile__chip--vertical {
12603
- margin-top: var(--spacing-1);
12604
- }
12605
-
12606
- /* Label */
12607
- .muka-checkbox-tile__label {
12608
- font-family: var(--text-body-lg-regular-fontFamily);
12609
- font-weight: var(--text-body-lg-regular-fontWeight);
12610
- font-size: var(--text-body-lg-regular-fontSize);
12611
- line-height: var(--text-body-lg-regular-lineHeight);
12612
- color: var(--color-text-default-default);
12613
- }
12614
-
12615
- .muka-checkbox-tile__label--bold {
12616
- font-family: var(--text-label-lg-semibold-fontFamily);
12617
- font-weight: var(--text-label-lg-semibold-fontWeight);
12618
- font-size: var(--text-label-lg-semibold-fontSize);
12619
- line-height: var(--text-label-lg-semibold-lineHeight);
12620
- }
12621
-
12622
- .muka-checkbox-tile__label--center {
12623
- text-align: center;
12624
- }
12625
-
12626
- /* Caption */
12627
- .muka-checkbox-tile__caption {
12628
- font-family: var(--text-body-base-regular-fontFamily);
12629
- font-weight: var(--text-body-base-regular-fontWeight);
12630
- font-size: var(--text-body-base-regular-fontSize);
12631
- line-height: var(--text-body-base-regular-lineHeight);
12632
- color: var(--color-text-subtle-default);
12633
- }
12634
-
12635
- /* Disabled states */
12636
- .muka-checkbox-tile--disabled .muka-checkbox-tile__label,
12637
- .muka-checkbox-tile--disabled .muka-checkbox-tile__icon {
12638
- color: var(--color-text-subtle-default);
12639
- }
12640
-
12641
-
12642
- /* Checkbox */
12643
- /* Checkbox Component Styles - Using Muka Design Tokens */
12644
-
12645
- /* Wrapper - clickable label container */
12646
- .muka-checkbox {
12647
- display: inline-flex;
12648
- align-items: center;
12649
- gap: var(--spacing-4);
12650
- cursor: pointer;
12651
- user-select: none;
12652
- }
12653
-
12654
- .muka-checkbox--disabled {
12655
- cursor: not-allowed;
12656
- opacity: 0.6;
12657
- }
12658
-
12659
- /* Control container */
12660
- .muka-checkbox__control {
12661
- position: relative;
12662
- display: inline-flex;
12663
- align-items: center;
12664
- justify-content: center;
12665
- flex-shrink: 0;
12666
- }
12667
-
12668
- /* Hidden native input */
12669
- .muka-checkbox__input {
12670
- position: absolute;
12671
- width: 1px;
12672
- height: 1px;
12673
- padding: 0;
12674
- margin: -1px;
12675
- overflow: hidden;
12676
- clip: rect(0, 0, 0, 0);
12677
- white-space: nowrap;
12678
- border: 0;
12679
- }
12680
-
12681
- /* Visual indicator (square) */
12682
- .muka-checkbox__indicator {
12683
- display: flex;
12684
- align-items: center;
12685
- justify-content: center;
12686
- width: var(--checkbox-size-default);
12687
- height: var(--checkbox-size-default);
12688
- border-radius: var(--checkbox-radius);
12689
- background-color: var(--checkbox-color-default-background);
12690
- border: var(--border-width-regular) solid var(--checkbox-color-default-border);
12691
- transition: all 0.15s ease;
12692
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
12693
- }
12694
-
12695
- /* Size variants */
12696
- .muka-checkbox--sm .muka-checkbox__indicator {
12697
- width: var(--checkbox-size-sm);
12698
- height: var(--checkbox-size-sm);
12699
- }
12700
-
12701
- .muka-checkbox--lg .muka-checkbox__indicator {
12702
- width: var(--checkbox-size-lg);
12703
- height: var(--checkbox-size-lg);
12704
- }
12705
-
12706
- /* Icon inside checkbox */
12707
- .muka-checkbox__icon {
12708
- width: var(--checkbox-icon-size-default);
12709
- height: var(--checkbox-icon-size-default);
12710
- color: var(--checkbox-color-default-icon);
12711
- opacity: 0;
12712
- transform: scale(0.8);
12713
- transition: opacity 0.15s ease, transform 0.15s ease;
12714
- }
12715
-
12716
- .muka-checkbox--sm .muka-checkbox__icon {
12717
- width: var(--checkbox-icon-size-sm);
12718
- height: var(--checkbox-icon-size-sm);
12719
- }
12720
-
12721
- .muka-checkbox--lg .muka-checkbox__icon {
12722
- width: var(--checkbox-icon-size-lg);
12723
- height: var(--checkbox-icon-size-lg);
12724
- }
12725
-
12726
- /* Hide indeterminate icon by default */
12727
- .muka-checkbox__icon--indeterminate {
12728
- position: absolute;
12729
- }
12730
-
12731
- /* Hover state - removed per design */
12732
-
12733
- /* Focus state */
12734
- .muka-checkbox__input:focus-visible + .muka-checkbox__indicator {
12735
- outline: 2px solid var(--color-border-focus);
12736
- outline-offset: 2px;
12737
- }
12738
-
12739
- /* Checked state */
12740
- .muka-checkbox__input:checked + .muka-checkbox__indicator {
12741
- background-color: var(--checkbox-color-checked-background);
12742
- border-color: var(--checkbox-color-checked-border);
12743
- box-shadow: none;
12744
- }
12745
-
12746
- .muka-checkbox__input:checked + .muka-checkbox__indicator .muka-checkbox__icon--check {
12747
- color: var(--checkbox-color-checked-icon);
12748
- opacity: 1;
12749
- transform: scale(1);
12578
+ /* Vertical image sizing */
12579
+ .muka-checkbox-tile--vertical .muka-checkbox-tile__image {
12580
+ width: 100%;
12581
+ aspect-ratio: 4/3;
12750
12582
  }
12751
12583
 
12752
- /* Indeterminate state */
12753
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator {
12754
- background-color: var(--checkbox-color-checked-background);
12755
- border-color: var(--checkbox-color-checked-border);
12756
- box-shadow: none;
12584
+ /* Content container */
12585
+ .muka-checkbox-tile__content {
12586
+ display: flex;
12587
+ flex-direction: column;
12588
+ flex: 1;
12589
+ min-width: 0;
12590
+ gap: var(--spacing-2);
12757
12591
  }
12758
12592
 
12759
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--check {
12760
- opacity: 0;
12593
+ .muka-checkbox-tile__content-inner {
12594
+ display: flex;
12595
+ flex-direction: column;
12596
+ gap: var(--spacing-1);
12761
12597
  }
12762
12598
 
12763
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12764
- color: var(--checkbox-color-checked-icon);
12765
- opacity: 1;
12766
- transform: scale(1);
12599
+ /* Chip slot (replaces badge; use Chip component) */
12600
+ .muka-checkbox-tile__chip {
12601
+ flex-shrink: 0;
12767
12602
  }
12768
12603
 
12769
- /* Disabled state */
12770
- .muka-checkbox--disabled .muka-checkbox__indicator {
12771
- background-color: var(--checkbox-color-disabled-background);
12772
- border-color: var(--checkbox-color-disabled-border);
12773
- box-shadow: none;
12604
+ .muka-checkbox-tile__chip--vertical {
12605
+ margin-top: var(--spacing-1);
12774
12606
  }
12775
12607
 
12776
- .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12777
- .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12778
- color: var(--checkbox-color-disabled-icon);
12608
+ /* Label */
12609
+ .muka-checkbox-tile__label {
12610
+ font-family: var(--text-body-lg-regular-fontFamily);
12611
+ font-weight: var(--text-body-lg-regular-fontWeight);
12612
+ font-size: var(--text-body-lg-regular-fontSize);
12613
+ line-height: var(--text-body-lg-regular-lineHeight);
12614
+ color: var(--color-text-default-default);
12779
12615
  }
12780
12616
 
12781
- /* Label text */
12782
- .muka-checkbox__label {
12783
- font-family: var(--text-label-lg-regular-fontFamily);
12784
- font-weight: var(--text-label-lg-regular-fontWeight);
12785
- font-size: var(--text-label-lg-regular-fontSize);
12786
- line-height: var(--text-label-lg-regular-lineHeight);
12787
- color: var(--color-text-default-default);
12617
+ .muka-checkbox-tile__label--bold {
12618
+ font-family: var(--text-label-lg-semibold-fontFamily);
12619
+ font-weight: var(--text-label-lg-semibold-fontWeight);
12620
+ font-size: var(--text-label-lg-semibold-fontSize);
12621
+ line-height: var(--text-label-lg-semibold-lineHeight);
12788
12622
  }
12789
12623
 
12790
- .muka-checkbox--sm .muka-checkbox__label {
12791
- font-family: var(--text-label-md-regular-fontFamily);
12792
- font-weight: var(--text-label-md-regular-fontWeight);
12793
- font-size: var(--text-label-md-regular-fontSize);
12794
- line-height: var(--text-label-md-regular-lineHeight);
12624
+ .muka-checkbox-tile__label--center {
12625
+ text-align: center;
12795
12626
  }
12796
12627
 
12797
- .muka-checkbox--lg .muka-checkbox__label {
12798
- font-family: var(--text-label-xl-regular-fontFamily);
12799
- font-weight: var(--text-label-xl-regular-fontWeight);
12800
- font-size: var(--text-label-xl-regular-fontSize);
12801
- line-height: var(--text-label-xl-regular-lineHeight);
12628
+ /* Caption */
12629
+ .muka-checkbox-tile__caption {
12630
+ font-family: var(--text-body-base-regular-fontFamily);
12631
+ font-weight: var(--text-body-base-regular-fontWeight);
12632
+ font-size: var(--text-body-base-regular-fontSize);
12633
+ line-height: var(--text-body-base-regular-lineHeight);
12634
+ color: var(--color-text-subtle-default);
12802
12635
  }
12803
12636
 
12804
- .muka-checkbox--disabled .muka-checkbox__label {
12637
+ /* Disabled states */
12638
+ .muka-checkbox-tile--disabled .muka-checkbox-tile__label,
12639
+ .muka-checkbox-tile--disabled .muka-checkbox-tile__icon {
12805
12640
  color: var(--color-text-subtle-default);
12806
12641
  }
12807
12642
 
@@ -12972,13 +12807,180 @@ button.muka-chat-photo-grid__tile:focus-visible {
12972
12807
  );
12973
12808
  }
12974
12809
 
12975
- .muka-chat-message-stack--own.muka-chat-message-stack--has-avatar
12976
- .muka-chat-message-stack__reasoning {
12977
- padding-left: 0;
12978
- padding-right: calc(
12979
- var(--chatbubble-avatar-size-compact) + var(--chatbubble-row-gap-compact)
12980
- );
12981
- }
12810
+ .muka-chat-message-stack--own.muka-chat-message-stack--has-avatar
12811
+ .muka-chat-message-stack__reasoning {
12812
+ padding-left: 0;
12813
+ padding-right: calc(
12814
+ var(--chatbubble-avatar-size-compact) + var(--chatbubble-row-gap-compact)
12815
+ );
12816
+ }
12817
+ }
12818
+
12819
+
12820
+ /* Checkbox */
12821
+ /* Checkbox Component Styles - Using Muka Design Tokens */
12822
+
12823
+ /* Wrapper - clickable label container */
12824
+ .muka-checkbox {
12825
+ display: inline-flex;
12826
+ align-items: center;
12827
+ gap: var(--spacing-4);
12828
+ cursor: pointer;
12829
+ user-select: none;
12830
+ }
12831
+
12832
+ .muka-checkbox--disabled {
12833
+ cursor: not-allowed;
12834
+ opacity: 0.6;
12835
+ }
12836
+
12837
+ /* Control container */
12838
+ .muka-checkbox__control {
12839
+ position: relative;
12840
+ display: inline-flex;
12841
+ align-items: center;
12842
+ justify-content: center;
12843
+ flex-shrink: 0;
12844
+ }
12845
+
12846
+ /* Hidden native input */
12847
+ .muka-checkbox__input {
12848
+ position: absolute;
12849
+ width: 1px;
12850
+ height: 1px;
12851
+ padding: 0;
12852
+ margin: -1px;
12853
+ overflow: hidden;
12854
+ clip: rect(0, 0, 0, 0);
12855
+ white-space: nowrap;
12856
+ border: 0;
12857
+ }
12858
+
12859
+ /* Visual indicator (square) */
12860
+ .muka-checkbox__indicator {
12861
+ display: flex;
12862
+ align-items: center;
12863
+ justify-content: center;
12864
+ width: var(--checkbox-size-default);
12865
+ height: var(--checkbox-size-default);
12866
+ border-radius: var(--checkbox-radius);
12867
+ background-color: var(--checkbox-color-default-background);
12868
+ border: var(--border-width-regular) solid var(--checkbox-color-default-border);
12869
+ transition: all 0.15s ease;
12870
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
12871
+ }
12872
+
12873
+ /* Size variants */
12874
+ .muka-checkbox--sm .muka-checkbox__indicator {
12875
+ width: var(--checkbox-size-sm);
12876
+ height: var(--checkbox-size-sm);
12877
+ }
12878
+
12879
+ .muka-checkbox--lg .muka-checkbox__indicator {
12880
+ width: var(--checkbox-size-lg);
12881
+ height: var(--checkbox-size-lg);
12882
+ }
12883
+
12884
+ /* Icon inside checkbox */
12885
+ .muka-checkbox__icon {
12886
+ width: var(--checkbox-icon-size-default);
12887
+ height: var(--checkbox-icon-size-default);
12888
+ color: var(--checkbox-color-default-icon);
12889
+ opacity: 0;
12890
+ transform: scale(0.8);
12891
+ transition: opacity 0.15s ease, transform 0.15s ease;
12892
+ }
12893
+
12894
+ .muka-checkbox--sm .muka-checkbox__icon {
12895
+ width: var(--checkbox-icon-size-sm);
12896
+ height: var(--checkbox-icon-size-sm);
12897
+ }
12898
+
12899
+ .muka-checkbox--lg .muka-checkbox__icon {
12900
+ width: var(--checkbox-icon-size-lg);
12901
+ height: var(--checkbox-icon-size-lg);
12902
+ }
12903
+
12904
+ /* Hide indeterminate icon by default */
12905
+ .muka-checkbox__icon--indeterminate {
12906
+ position: absolute;
12907
+ }
12908
+
12909
+ /* Hover state - removed per design */
12910
+
12911
+ /* Focus state */
12912
+ .muka-checkbox__input:focus-visible + .muka-checkbox__indicator {
12913
+ outline: 2px solid var(--color-border-focus);
12914
+ outline-offset: 2px;
12915
+ }
12916
+
12917
+ /* Checked state */
12918
+ .muka-checkbox__input:checked + .muka-checkbox__indicator {
12919
+ background-color: var(--checkbox-color-checked-background);
12920
+ border-color: var(--checkbox-color-checked-border);
12921
+ box-shadow: none;
12922
+ }
12923
+
12924
+ .muka-checkbox__input:checked + .muka-checkbox__indicator .muka-checkbox__icon--check {
12925
+ color: var(--checkbox-color-checked-icon);
12926
+ opacity: 1;
12927
+ transform: scale(1);
12928
+ }
12929
+
12930
+ /* Indeterminate state */
12931
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator {
12932
+ background-color: var(--checkbox-color-checked-background);
12933
+ border-color: var(--checkbox-color-checked-border);
12934
+ box-shadow: none;
12935
+ }
12936
+
12937
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--check {
12938
+ opacity: 0;
12939
+ }
12940
+
12941
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12942
+ color: var(--checkbox-color-checked-icon);
12943
+ opacity: 1;
12944
+ transform: scale(1);
12945
+ }
12946
+
12947
+ /* Disabled state */
12948
+ .muka-checkbox--disabled .muka-checkbox__indicator {
12949
+ background-color: var(--checkbox-color-disabled-background);
12950
+ border-color: var(--checkbox-color-disabled-border);
12951
+ box-shadow: none;
12952
+ }
12953
+
12954
+ .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12955
+ .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12956
+ color: var(--checkbox-color-disabled-icon);
12957
+ }
12958
+
12959
+ /* Label text */
12960
+ .muka-checkbox__label {
12961
+ font-family: var(--text-label-lg-regular-fontFamily);
12962
+ font-weight: var(--text-label-lg-regular-fontWeight);
12963
+ font-size: var(--text-label-lg-regular-fontSize);
12964
+ line-height: var(--text-label-lg-regular-lineHeight);
12965
+ color: var(--color-text-default-default);
12966
+ }
12967
+
12968
+ .muka-checkbox--sm .muka-checkbox__label {
12969
+ font-family: var(--text-label-md-regular-fontFamily);
12970
+ font-weight: var(--text-label-md-regular-fontWeight);
12971
+ font-size: var(--text-label-md-regular-fontSize);
12972
+ line-height: var(--text-label-md-regular-lineHeight);
12973
+ }
12974
+
12975
+ .muka-checkbox--lg .muka-checkbox__label {
12976
+ font-family: var(--text-label-xl-regular-fontFamily);
12977
+ font-weight: var(--text-label-xl-regular-fontWeight);
12978
+ font-size: var(--text-label-xl-regular-fontSize);
12979
+ line-height: var(--text-label-xl-regular-lineHeight);
12980
+ }
12981
+
12982
+ .muka-checkbox--disabled .muka-checkbox__label {
12983
+ color: var(--color-text-subtle-default);
12982
12984
  }
12983
12985
 
12984
12986
 
@@ -13025,729 +13027,729 @@ button.muka-chat-photo-grid__tile:focus-visible {
13025
13027
  }
13026
13028
 
13027
13029
 
13028
- /* ChatMessage */
13029
- /* ChatMessage Component Styles */
13030
+ /* ChatComposer */
13031
+ /* ChatComposer Component Styles */
13030
13032
 
13031
- .muka-chat-message {
13033
+ /*
13034
+ * The composer is a bare, fill-width row: no padding, background, border or
13035
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
13036
+ * container — see BottomBar's `chat` variant.
13037
+ */
13038
+ .muka-chat-composer {
13032
13039
  display: flex;
13033
13040
  flex-direction: column;
13041
+ gap: var(--spacing-3);
13034
13042
  width: 100%;
13035
- max-width: 100%;
13036
13043
  }
13037
13044
 
13038
- /* ─── Row: avatar rail + bubble ────────────────────────── */
13045
+ .muka-chat-composer--disabled {
13046
+ opacity: 0.6;
13047
+ pointer-events: none;
13048
+ }
13039
13049
 
13040
- .muka-chat-message__row {
13041
- display: grid;
13042
- grid-template-columns: minmax(0, 1fr);
13043
- grid-template-areas: 'bubble';
13044
- column-gap: var(--chatbubble-row-gap);
13050
+ /* ─── Input row ────────────────────────────────────────── */
13051
+
13052
+ .muka-chat-composer__row {
13053
+ display: flex;
13045
13054
  width: 100%;
13055
+ align-items: flex-end;
13056
+ gap: var(--spacing-3);
13046
13057
  }
13047
13058
 
13048
- .muka-chat-message--has-avatar .muka-chat-message__row {
13049
- grid-template-columns: auto minmax(0, 1fr);
13050
- grid-template-areas: 'rail bubble';
13051
- }
13059
+ /* ─── Text field ───────────────────────────────────────── */
13052
13060
 
13053
- .muka-chat-message__rail {
13054
- grid-area: rail;
13055
- /* Sits on the bubble's baseline (Figma 5355:44091) */
13056
- align-self: end;
13061
+ .muka-chat-composer__field {
13057
13062
  display: flex;
13058
- justify-content: center;
13059
- min-width: var(--chatbubble-avatar-size);
13063
+ flex: 1 1 auto;
13064
+ min-width: 0;
13065
+ box-sizing: border-box;
13066
+ align-items: center;
13067
+ gap: var(--spacing-1);
13068
+ min-height: var(--input-field-height-lg, 48px);
13069
+ padding: 0 var(--spacing-2);
13070
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
13071
+ border-radius: var(--input-field-radius-lg);
13072
+ background-color: var(--input-field-color-default-background);
13073
+ transition: border-color 0.12s ease;
13060
13074
  }
13061
13075
 
13062
- /*
13063
- * The Small size in Figma (5373:44702) halves the avatar to 32px and tightens
13064
- * the gap to the bubble. Size the avatar itself, not just the rail, so the
13065
- * bubbles keep their alignment. The header row keeps its own gap.
13066
- */
13067
- @media (max-width: 1023px) {
13068
- .muka-chat-message__row {
13069
- column-gap: var(--chatbubble-row-gap-compact);
13070
- }
13076
+ .muka-chat-composer__field:focus-within {
13077
+ border-color: var(--input-field-color-focus-border, var(--color-action-default));
13078
+ }
13071
13079
 
13072
- .muka-chat-message__rail {
13073
- min-width: var(--chatbubble-avatar-size-compact);
13074
- }
13080
+ .muka-chat-composer__input {
13081
+ flex: 1 1 auto;
13082
+ min-width: 0;
13083
+ width: 100%;
13084
+ box-sizing: border-box;
13085
+ resize: none;
13086
+ border: none;
13087
+ background: transparent;
13088
+ outline: none;
13089
+ padding: 0 var(--spacing-1);
13090
+ color: var(--color-text-default-default);
13091
+ font-family: var(--text-body-base-regular-fontFamily);
13092
+ font-weight: var(--text-body-base-regular-fontWeight);
13093
+ font-size: var(--text-body-base-regular-fontSize);
13094
+ line-height: var(--text-body-base-regular-lineHeight);
13095
+ appearance: none;
13096
+ -webkit-appearance: none;
13097
+ }
13075
13098
 
13076
- /* Outweighs the avatar's own size class, which sets width/height directly */
13077
- .muka-chat-message .muka-chat-message__rail > * {
13078
- width: var(--chatbubble-avatar-size-compact);
13079
- height: var(--chatbubble-avatar-size-compact);
13080
- }
13099
+ .muka-chat-composer__input::placeholder {
13100
+ color: var(--color-text-subtle-default);
13081
13101
  }
13082
13102
 
13083
- /* ─── Bubble surface ───────────────────────────────────── */
13103
+ /* Keep the in-field emoji button flush to the bottom-right as the field grows */
13104
+ .muka-chat-composer__emoji {
13105
+ flex-shrink: 0;
13106
+ }
13084
13107
 
13085
- .muka-chat-message__bubble {
13086
- grid-area: bubble;
13087
- /*
13088
- * Width follows the content: a single line hugs, and once the text wraps the
13089
- * bubble fills to the shared max width. Robust to string or rich children —
13090
- * no length measuring needed (Figma `Text length` on 5355:44091).
13091
- */
13092
- width: fit-content;
13093
- /*
13094
- * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
13095
- * row; above it the fixed cap leaves room for own/peer alignment.
13096
- */
13097
- max-width: var(--chatbubble-max-width);
13098
- position: relative;
13108
+ /* ─── Recording bar ────────────────────────────────────── */
13109
+
13110
+ .muka-chat-composer__recording {
13099
13111
  display: flex;
13100
- flex-direction: column;
13101
- gap: var(--chatbubble-gap);
13102
- padding: var(--chatbubble-padding-block) var(--chatbubble-padding-inline);
13103
- border-radius: var(--chatbubble-radius);
13104
- border: var(--border-width-regular) solid transparent;
13105
- box-shadow: var(--shadow-level2);
13106
- word-break: break-word;
13112
+ flex: 1 1 auto;
13113
+ min-width: 0;
13114
+ box-sizing: border-box;
13115
+ align-items: center;
13116
+ min-height: var(--input-field-height-lg, 48px);
13117
+ padding: var(--card-padding-sm);
13118
+ border: var(--border-width-regular) solid var(--card-color-default-border);
13119
+ border-radius: var(--radius-lg);
13120
+ background-color: var(--card-color-default-background);
13107
13121
  }
13108
13122
 
13109
- /* Media, an embed or an action stack always run the full bubble width. */
13110
- .muka-chat-message--has-blocks .muka-chat-message__bubble {
13123
+ /* ─── Staged attachments strip ─────────────────────────── */
13124
+
13125
+ .muka-chat-composer__attachments-strip {
13126
+ position: relative;
13111
13127
  width: 100%;
13112
13128
  }
13113
13129
 
13114
- .muka-chat-message--own .muka-chat-message__bubble {
13115
- justify-self: end;
13130
+ .muka-chat-composer__attachments {
13131
+ display: flex;
13132
+ gap: var(--spacing-3);
13133
+ overflow-x: auto;
13134
+ scroll-behavior: smooth;
13135
+ scrollbar-width: none;
13116
13136
  }
13117
13137
 
13118
- .muka-chat-message--own .muka-chat-message__bubble {
13119
- background-color: var(--chatbubble-color-own-background);
13120
- border-color: var(--chatbubble-color-own-border);
13121
- color: var(--chatbubble-color-own-foreground);
13138
+ .muka-chat-composer__attachments::-webkit-scrollbar {
13139
+ display: none;
13122
13140
  }
13123
13141
 
13124
- .muka-chat-message--peer .muka-chat-message__bubble {
13125
- background-color: var(--chatbubble-color-peer-background);
13126
- border-color: var(--chatbubble-color-peer-border);
13127
- color: var(--chatbubble-color-peer-foreground);
13142
+ .muka-chat-composer__overflow {
13143
+ position: absolute;
13144
+ top: 50%;
13145
+ right: var(--spacing-2);
13146
+ transform: translateY(-50%);
13128
13147
  }
13129
13148
 
13130
- .muka-chat-message--agent .muka-chat-message__bubble {
13131
- background-color: var(--chatbubble-color-agent-background);
13132
- border-color: var(--chatbubble-color-agent-border);
13133
- color: var(--chatbubble-color-agent-foreground);
13149
+ /* ─── Print ────────────────────────────────────────────── */
13150
+
13151
+ @media print {
13152
+ .muka-chat-composer {
13153
+ display: none;
13154
+ }
13134
13155
  }
13135
13156
 
13136
- /* ─── Header row (author · meta · time · badge) ────────── */
13137
13157
 
13138
- .muka-chat-message__header {
13139
- display: flex;
13140
- flex-flow: row wrap;
13158
+ /* ChatAttachmentChip */
13159
+ /* ChatAttachmentChip Component Styles */
13160
+
13161
+ .muka-chat-attachment-chip {
13162
+ position: relative;
13163
+ display: inline-flex;
13141
13164
  align-items: center;
13142
- gap: var(--chatbubble-row-gap);
13165
+ gap: var(--spacing-1);
13166
+ max-width: 240px;
13167
+ padding: var(--spacing-2) var(--spacing-3);
13168
+ background-color: var(--color-surface-level1);
13169
+ border: var(--border-width-regular) solid var(--color-border-default);
13170
+ border-radius: var(--radius-md);
13171
+ overflow: hidden;
13143
13172
  }
13144
13173
 
13145
- .muka-chat-message__author {
13146
- font-family: var(--text-body-base-bold-fontFamily);
13147
- font-weight: var(--text-body-base-bold-fontWeight);
13148
- font-size: var(--text-body-base-bold-fontSize);
13149
- line-height: var(--text-body-base-bold-lineHeight);
13174
+ .muka-chat-attachment-chip--uploading {
13175
+ padding-bottom: calc(var(--spacing-2) + 2px);
13150
13176
  }
13151
13177
 
13152
- .muka-chat-message__author-meta {
13153
- /* Inherits the variant's body colour from the bubble */
13154
- color: inherit;
13155
- font-family: var(--text-body-base-regular-fontFamily);
13156
- font-weight: var(--text-body-base-regular-fontWeight);
13157
- font-size: var(--text-body-base-regular-fontSize);
13158
- line-height: var(--text-body-base-regular-lineHeight);
13178
+ .muka-chat-attachment-chip--error {
13179
+ border-color: var(--color-state-error-default, var(--color-text-default-default));
13159
13180
  }
13160
13181
 
13161
- .muka-chat-message__badge {
13182
+ .muka-chat-attachment-chip--disabled {
13183
+ opacity: 0.5;
13184
+ pointer-events: none;
13185
+ }
13186
+
13187
+ /* ─── Body (icon + text) ───────────────────────────────── */
13188
+
13189
+ .muka-chat-attachment-chip__body {
13162
13190
  display: inline-flex;
13163
13191
  align-items: center;
13192
+ gap: var(--spacing-2);
13193
+ min-width: 0;
13194
+ flex: 1 1 auto;
13195
+ background: none;
13196
+ border: none;
13197
+ padding: 0;
13198
+ margin: 0;
13199
+ text-align: left;
13200
+ color: inherit;
13201
+ font: inherit;
13202
+ cursor: default;
13203
+ -webkit-tap-highlight-color: transparent;
13164
13204
  }
13165
13205
 
13166
- /*
13167
- * Keep the first line of content clear of the absolutely positioned menu
13168
- * button in the bubble's top-right corner.
13169
- */
13170
- .muka-chat-message--has-menu .muka-chat-message__header,
13171
- .muka-chat-message--has-menu.muka-chat-message--no-header .muka-chat-message__message {
13172
- padding-right: var(--spacing-10);
13206
+ .muka-chat-attachment-chip--interactive .muka-chat-attachment-chip__body {
13207
+ cursor: pointer;
13173
13208
  }
13174
13209
 
13175
- /* …and the last line clear of the inset timestamp in the bottom-right corner */
13176
- .muka-chat-message--has-timestamp .muka-chat-message__message {
13177
- padding-right: var(--spacing-10);
13210
+ .muka-chat-attachment-chip--interactive .muka-chat-attachment-chip__body:focus-visible {
13211
+ outline: 2px solid var(--color-action-default);
13212
+ outline-offset: 2px;
13213
+ border-radius: var(--radius-sm);
13214
+ }
13215
+
13216
+ .muka-chat-attachment-chip__icon {
13217
+ display: inline-flex;
13218
+ align-items: center;
13219
+ justify-content: center;
13220
+ flex-shrink: 0;
13221
+ color: var(--color-text-subtle-default);
13178
13222
  }
13179
13223
 
13180
- /* ─── Body ─────────────────────────────────────────────── */
13181
-
13182
- .muka-chat-message__body {
13224
+ .muka-chat-attachment-chip__text {
13183
13225
  display: flex;
13184
13226
  flex-direction: column;
13185
- gap: var(--chatbubble-gap);
13186
13227
  min-width: 0;
13228
+ flex: 1 1 auto;
13187
13229
  }
13188
13230
 
13189
- .muka-chat-message__media {
13190
- min-width: 0;
13231
+ .muka-chat-attachment-chip__name {
13232
+ color: var(--color-text-default-default);
13233
+ font-family: var(--text-body-sm-regular-fontFamily);
13234
+ font-weight: var(--text-body-sm-regular-fontWeight);
13235
+ font-size: var(--text-body-sm-regular-fontSize);
13236
+ line-height: var(--text-body-sm-regular-lineHeight);
13237
+ white-space: nowrap;
13238
+ overflow: hidden;
13239
+ text-overflow: ellipsis;
13191
13240
  }
13192
13241
 
13193
- .muka-chat-message__message {
13194
- font-family: var(--text-body-base-regular-fontFamily);
13195
- font-weight: var(--text-body-base-regular-fontWeight);
13196
- font-size: var(--text-body-base-regular-fontSize);
13197
- line-height: var(--text-body-base-regular-lineHeight);
13198
- white-space: pre-wrap;
13199
- word-break: break-word;
13242
+ .muka-chat-attachment-chip__meta {
13243
+ color: var(--color-text-subtle-default);
13244
+ font-family: var(--text-body-sm-regular-fontFamily);
13245
+ font-weight: var(--text-body-sm-regular-fontWeight);
13246
+ font-size: var(--text-body-sm-regular-fontSize);
13247
+ line-height: var(--text-body-sm-regular-lineHeight);
13248
+ white-space: nowrap;
13249
+ overflow: hidden;
13250
+ text-overflow: ellipsis;
13200
13251
  }
13201
13252
 
13202
- /* Empty message block should not add a gap of its own */
13203
- .muka-chat-message__message:empty {
13204
- display: none;
13253
+ .muka-chat-attachment-chip--error .muka-chat-attachment-chip__meta {
13254
+ color: var(--color-state-error-default, var(--color-text-default-default));
13205
13255
  }
13206
13256
 
13207
- /* ─── Embedded card ────────────────────────────────────── */
13257
+ /* ─── Remove button ────────────────────────────────────── */
13208
13258
 
13209
- .muka-chat-message__embed {
13210
- position: relative;
13211
- display: flex;
13212
- flex-direction: column;
13213
- gap: var(--chatbubble-embed-gap);
13214
- /* The card is inset from the blocks above and below it (Figma 5289:40562) */
13215
- margin-block: var(--chatbubble-embed-margin-block);
13216
- padding: var(--chatbubble-embed-padding-block) var(--chatbubble-embed-padding-inline);
13217
- border-radius: var(--chatbubble-embed-radius);
13218
- border: var(--border-width-regular) solid transparent;
13259
+ .muka-chat-attachment-chip__remove {
13260
+ display: inline-flex;
13261
+ align-items: center;
13262
+ justify-content: center;
13263
+ width: 20px;
13264
+ height: 20px;
13265
+ border: none;
13266
+ background: none;
13267
+ padding: 0;
13268
+ border-radius: var(--radius-sm);
13269
+ cursor: pointer;
13270
+ color: var(--color-text-subtle-default);
13271
+ flex-shrink: 0;
13272
+ -webkit-tap-highlight-color: transparent;
13219
13273
  }
13220
13274
 
13221
- /*
13222
- * The embed sits on the raised surface of its author's role, one step apart
13223
- * from the bubble it is nested in, and reuses that role's border colour.
13224
- */
13225
- .muka-chat-message--own .muka-chat-message__embed {
13226
- background-color: var(--chatbubble-embed-color-own-background);
13227
- border-color: var(--chatbubble-embed-color-own-border);
13228
- color: var(--chatbubble-embed-color-own-foreground);
13275
+ .muka-chat-attachment-chip__remove:hover:not(:disabled) {
13276
+ color: var(--color-text-default-default);
13277
+ background-color: var(--color-surface-level2);
13229
13278
  }
13230
13279
 
13231
- .muka-chat-message--peer .muka-chat-message__embed {
13232
- background-color: var(--chatbubble-embed-color-peer-background);
13233
- border-color: var(--chatbubble-embed-color-peer-border);
13234
- color: var(--chatbubble-embed-color-peer-foreground);
13280
+ .muka-chat-attachment-chip__remove:focus-visible {
13281
+ outline: 2px solid var(--color-action-default);
13282
+ outline-offset: 2px;
13235
13283
  }
13236
13284
 
13237
- .muka-chat-message--agent .muka-chat-message__embed {
13238
- background-color: var(--chatbubble-embed-color-agent-background);
13239
- border-color: var(--chatbubble-embed-color-agent-border);
13240
- color: var(--chatbubble-embed-color-agent-foreground);
13285
+ .muka-chat-attachment-chip__remove:disabled {
13286
+ cursor: not-allowed;
13287
+ opacity: 0.5;
13241
13288
  }
13242
13289
 
13243
- .muka-chat-message__embed-content {
13244
- display: flex;
13245
- flex-direction: column;
13246
- gap: var(--chatbubble-embed-gap);
13247
- min-width: 0;
13248
- }
13290
+ /* ─── Progress bar ─────────────────────────────────────── */
13249
13291
 
13250
- .muka-chat-message__embed-copy {
13292
+ .muka-chat-attachment-chip__progress {
13251
13293
  position: absolute;
13252
- top: var(--chatbubble-embed-padding-block);
13253
- right: var(--chatbubble-embed-padding-inline);
13294
+ left: 0;
13295
+ right: 0;
13296
+ bottom: 0;
13297
+ height: 2px;
13298
+ background-color: var(--color-surface-level2);
13299
+ overflow: hidden;
13254
13300
  }
13255
13301
 
13256
- /* ─── Stacked full-width action buttons ────────────────── */
13302
+ .muka-chat-attachment-chip__progress-fill {
13303
+ display: block;
13304
+ height: 100%;
13305
+ background-color: var(--color-action-default);
13306
+ transition: width 0.16s ease;
13307
+ }
13257
13308
 
13258
- .muka-chat-message__action-stack {
13259
- display: flex;
13260
- flex-direction: column;
13261
- gap: var(--chatbubble-action-stack-gap);
13309
+ .muka-chat-attachment-chip--error .muka-chat-attachment-chip__progress-fill {
13310
+ background-color: var(--color-state-error-default, var(--color-text-default-default));
13262
13311
  }
13263
13312
 
13264
- /* ─── Inset timestamp ──────────────────────────────────── */
13265
13313
 
13266
- /*
13267
- * Every author puts its timestamp in the bubble's bottom-right corner, below
13268
- * the message — never in the header row (Figma 5355:44091).
13269
- */
13314
+ /* Card */
13315
+ /* Card Component Styles - Using Muka Design Tokens */
13270
13316
 
13271
- .muka-chat-message__timestamp {
13272
- color: var(--chatbubble-color-timestamp);
13273
- font-family: var(--text-body-xs-regular-fontFamily);
13274
- font-weight: var(--text-body-xs-regular-fontWeight);
13275
- font-size: var(--text-body-xs-regular-fontSize);
13276
- line-height: var(--text-body-xs-regular-lineHeight);
13277
- white-space: nowrap;
13317
+ .muka-card {
13318
+ background-color: var(--card-color-default-background);
13319
+ color: var(--card-color-default-foreground);
13320
+ border: var(--border-width-regular) solid var(--card-color-default-border);
13321
+ box-shadow: var(--card-shadow-default);
13322
+ transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
13323
+ overflow: hidden;
13278
13324
  }
13279
13325
 
13280
- /*
13281
- * Pinned to the corner rather than stacked below the message, so a one-line
13282
- * message stays one line tall. The message reserves the width it needs.
13283
- */
13284
- .muka-chat-message__timestamp--inset {
13285
- position: absolute;
13286
- right: var(--spacing-2);
13287
- bottom: var(--spacing-1);
13326
+ /* Padding variants */
13327
+ .muka-card--padding-none {
13328
+ padding: 0;
13288
13329
  }
13289
13330
 
13290
- /*
13291
- * When the last block in the body is media, an embed or an action stack (not
13292
- * trailing text), it runs the full width, so reserve a line below for the inset
13293
- * timestamp. A message that ends in text clears the corner inline instead (see
13294
- * `__message` padding-right above), so it needs no extra bottom space.
13295
- */
13296
- .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
13297
- padding-bottom: var(--text-body-xs-regular-lineHeight);
13331
+ .muka-card--padding-sm {
13332
+ padding: var(--card-padding-sm);
13298
13333
  }
13299
13334
 
13300
- /* ─── Menu affordance ──────────────────────────────────── */
13301
-
13302
- /*
13303
- * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
13304
- * everywhere, and pinned while its menu is open. On touch the equivalent
13305
- * affordance is a long-press on the bubble, which opens an ActionSheet.
13306
- */
13307
- .muka-chat-message__menu {
13308
- position: absolute;
13309
- top: var(--spacing-1);
13310
- right: var(--spacing-1);
13311
- opacity: 0;
13312
- pointer-events: none;
13335
+ .muka-card--padding-md {
13336
+ padding: var(--card-padding-md);
13313
13337
  }
13314
13338
 
13315
- .muka-chat-message__menu:focus-within,
13316
- .muka-chat-message--menu-open .muka-chat-message__menu {
13317
- opacity: 1;
13318
- pointer-events: auto;
13339
+ .muka-card--padding-lg {
13340
+ padding: var(--card-padding-lg);
13319
13341
  }
13320
13342
 
13321
- @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
13322
- .muka-chat-message__bubble:hover .muka-chat-message__menu {
13323
- opacity: 1;
13324
- pointer-events: auto;
13325
- }
13343
+ /* Radius variants */
13344
+ .muka-card--radius-sm {
13345
+ border-radius: var(--card-radius-sm);
13326
13346
  }
13327
13347
 
13328
- /* Suppress iOS Safari's own callout so the long-press sheet can take over */
13329
- @media (pointer: coarse) {
13330
- .muka-chat-message--has-menu .muka-chat-message__bubble {
13331
- -webkit-touch-callout: none;
13332
- }
13348
+ .muka-card--radius-md {
13349
+ border-radius: var(--card-radius-md);
13333
13350
  }
13334
13351
 
13335
- /* ─── Print ────────────────────────────────────────────── */
13336
-
13337
- @media print {
13338
- .muka-chat-message__bubble {
13339
- box-shadow: none;
13340
- break-inside: avoid;
13341
- print-color-adjust: exact;
13342
- -webkit-print-color-adjust: exact;
13343
- }
13344
-
13345
- .muka-chat-message__embed {
13346
- break-inside: avoid;
13347
- print-color-adjust: exact;
13348
- -webkit-print-color-adjust: exact;
13349
- }
13350
-
13351
- .muka-chat-message__menu,
13352
- .muka-chat-message__embed-copy,
13353
- .muka-chat-message__action-stack {
13354
- display: none;
13355
- }
13352
+ .muka-card--radius-lg {
13353
+ border-radius: var(--card-radius-lg);
13356
13354
  }
13357
13355
 
13358
-
13359
- /* ChatComposer */
13360
- /* ChatComposer Component Styles */
13361
-
13362
- /*
13363
- * The composer is a bare, fill-width row: no padding, background, border or
13364
- * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
13365
- * container — see BottomBar's `chat` variant.
13366
- */
13367
- .muka-chat-composer {
13368
- display: flex;
13369
- flex-direction: column;
13370
- gap: var(--spacing-3);
13371
- width: 100%;
13356
+ /* Interactive variant */
13357
+ .muka-card--interactive {
13358
+ cursor: pointer;
13359
+ user-select: none;
13372
13360
  }
13373
13361
 
13374
- .muka-chat-composer--disabled {
13375
- opacity: 0.6;
13376
- pointer-events: none;
13362
+ .muka-card--interactive:hover {
13363
+ background-color: var(--card-color-hover-background);
13364
+ border-color: var(--card-color-hover-border);
13365
+ box-shadow: var(--card-shadow-hover);
13377
13366
  }
13378
13367
 
13379
- /* ─── Input row ────────────────────────────────────────── */
13380
-
13381
- .muka-chat-composer__row {
13382
- display: flex;
13383
- width: 100%;
13384
- align-items: flex-end;
13385
- gap: var(--spacing-3);
13368
+ .muka-card--interactive:active,
13369
+ .muka-card--interactive.muka-card--pressed {
13370
+ background-color: var(--card-color-pressed-background);
13371
+ border-color: var(--card-color-pressed-border);
13372
+ box-shadow: var(--card-shadow-pressed);
13386
13373
  }
13387
13374
 
13388
- /* ─── Text field ───────────────────────────────────────── */
13375
+ .muka-card--interactive:focus-visible {
13376
+ outline: 2px solid var(--color-border-focus);
13377
+ outline-offset: 2px;
13378
+ }
13389
13379
 
13390
- .muka-chat-composer__field {
13391
- display: flex;
13392
- flex: 1 1 auto;
13393
- min-width: 0;
13394
- box-sizing: border-box;
13395
- align-items: center;
13396
- gap: var(--spacing-1);
13397
- min-height: var(--input-field-height-lg, 48px);
13398
- padding: 0 var(--spacing-2);
13399
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
13400
- border-radius: var(--input-field-radius-lg);
13401
- background-color: var(--input-field-color-default-background);
13402
- transition: border-color 0.12s ease;
13380
+ /* Selected variant */
13381
+ .muka-card--selected {
13382
+ background-color: var(--card-color-selected-background);
13383
+ border-color: var(--card-color-selected-border);
13384
+ border-width: var(--border-width-bold);
13385
+ box-shadow: var(--card-shadow-selected);
13403
13386
  }
13404
13387
 
13405
- .muka-chat-composer__field:focus-within {
13406
- border-color: var(--input-field-color-focus-border, var(--color-action-default));
13388
+ /* Optional header (title + description) */
13389
+ .muka-card__header {
13390
+ margin-bottom: var(--spacing-4);
13407
13391
  }
13408
13392
 
13409
- .muka-chat-composer__input {
13410
- flex: 1 1 auto;
13411
- min-width: 0;
13412
- width: 100%;
13413
- box-sizing: border-box;
13414
- resize: none;
13415
- border: none;
13416
- background: transparent;
13417
- outline: none;
13418
- padding: 0 var(--spacing-1);
13393
+ .muka-card__title {
13394
+ margin: 0;
13419
13395
  color: var(--color-text-default-default);
13420
- font-family: var(--text-body-base-regular-fontFamily);
13421
- font-weight: var(--text-body-base-regular-fontWeight);
13422
- font-size: var(--text-body-base-regular-fontSize);
13423
- line-height: var(--text-body-base-regular-lineHeight);
13424
- appearance: none;
13425
- -webkit-appearance: none;
13396
+ font-family: var(--text-heading-xs-fontFamily);
13397
+ font-weight: var(--text-heading-xs-fontWeight);
13398
+ font-size: var(--text-heading-xs-fontSize);
13399
+ line-height: var(--text-heading-xs-lineHeight);
13400
+ letter-spacing: var(--text-heading-xs-letterSpacing);
13426
13401
  }
13427
13402
 
13428
- .muka-chat-composer__input::placeholder {
13403
+ .muka-card__description {
13404
+ margin: var(--spacing-1) 0 0;
13429
13405
  color: var(--color-text-subtle-default);
13406
+ font-family: var(--text-body-sm-regular-fontFamily);
13407
+ font-weight: var(--text-body-sm-regular-fontWeight);
13408
+ font-size: var(--text-body-sm-regular-fontSize);
13409
+ line-height: var(--text-body-sm-regular-lineHeight);
13430
13410
  }
13431
13411
 
13432
- /* Keep the in-field emoji button flush to the bottom-right as the field grows */
13433
- .muka-chat-composer__emoji {
13434
- flex-shrink: 0;
13412
+ /* Hide divider on last list item inside card */
13413
+ .muka-card > .muka-listitem:last-child > .muka-listitem__divider {
13414
+ display: none;
13435
13415
  }
13436
13416
 
13437
- /* ─── Recording bar ────────────────────────────────────── */
13417
+ /* Disabled state */
13418
+ .muka-card--disabled {
13419
+ opacity: 0.5;
13420
+ cursor: not-allowed;
13421
+ pointer-events: none;
13422
+ }
13438
13423
 
13439
- .muka-chat-composer__recording {
13424
+
13425
+ /* ChatMessage */
13426
+ /* ChatMessage Component Styles */
13427
+
13428
+ .muka-chat-message {
13440
13429
  display: flex;
13441
- flex: 1 1 auto;
13442
- min-width: 0;
13443
- box-sizing: border-box;
13444
- align-items: center;
13445
- min-height: var(--input-field-height-lg, 48px);
13446
- padding: var(--card-padding-sm);
13447
- border: var(--border-width-regular) solid var(--card-color-default-border);
13448
- border-radius: var(--radius-lg);
13449
- background-color: var(--card-color-default-background);
13430
+ flex-direction: column;
13431
+ width: 100%;
13432
+ max-width: 100%;
13450
13433
  }
13451
13434
 
13452
- /* ─── Staged attachments strip ─────────────────────────── */
13435
+ /* ─── Row: avatar rail + bubble ────────────────────────── */
13453
13436
 
13454
- .muka-chat-composer__attachments-strip {
13455
- position: relative;
13437
+ .muka-chat-message__row {
13438
+ display: grid;
13439
+ grid-template-columns: minmax(0, 1fr);
13440
+ grid-template-areas: 'bubble';
13441
+ column-gap: var(--chatbubble-row-gap);
13456
13442
  width: 100%;
13457
13443
  }
13458
13444
 
13459
- .muka-chat-composer__attachments {
13460
- display: flex;
13461
- gap: var(--spacing-3);
13462
- overflow-x: auto;
13463
- scroll-behavior: smooth;
13464
- scrollbar-width: none;
13445
+ .muka-chat-message--has-avatar .muka-chat-message__row {
13446
+ grid-template-columns: auto minmax(0, 1fr);
13447
+ grid-template-areas: 'rail bubble';
13465
13448
  }
13466
13449
 
13467
- .muka-chat-composer__attachments::-webkit-scrollbar {
13468
- display: none;
13450
+ .muka-chat-message__rail {
13451
+ grid-area: rail;
13452
+ /* Sits on the bubble's baseline (Figma 5355:44091) */
13453
+ align-self: end;
13454
+ display: flex;
13455
+ justify-content: center;
13456
+ min-width: var(--chatbubble-avatar-size);
13469
13457
  }
13470
13458
 
13471
- .muka-chat-composer__overflow {
13472
- position: absolute;
13473
- top: 50%;
13474
- right: var(--spacing-2);
13475
- transform: translateY(-50%);
13476
- }
13459
+ /*
13460
+ * The Small size in Figma (5373:44702) halves the avatar to 32px and tightens
13461
+ * the gap to the bubble. Size the avatar itself, not just the rail, so the
13462
+ * bubbles keep their alignment. The header row keeps its own gap.
13463
+ */
13464
+ @media (max-width: 1023px) {
13465
+ .muka-chat-message__row {
13466
+ column-gap: var(--chatbubble-row-gap-compact);
13467
+ }
13477
13468
 
13478
- /* ─── Print ────────────────────────────────────────────── */
13469
+ .muka-chat-message__rail {
13470
+ min-width: var(--chatbubble-avatar-size-compact);
13471
+ }
13479
13472
 
13480
- @media print {
13481
- .muka-chat-composer {
13482
- display: none;
13473
+ /* Outweighs the avatar's own size class, which sets width/height directly */
13474
+ .muka-chat-message .muka-chat-message__rail > * {
13475
+ width: var(--chatbubble-avatar-size-compact);
13476
+ height: var(--chatbubble-avatar-size-compact);
13483
13477
  }
13484
13478
  }
13485
13479
 
13480
+ /* ─── Bubble surface ───────────────────────────────────── */
13486
13481
 
13487
- /* ChatAttachmentChip */
13488
- /* ChatAttachmentChip Component Styles */
13489
-
13490
- .muka-chat-attachment-chip {
13482
+ .muka-chat-message__bubble {
13483
+ grid-area: bubble;
13484
+ /*
13485
+ * Width follows the content: a single line hugs, and once the text wraps the
13486
+ * bubble fills to the shared max width. Robust to string or rich children —
13487
+ * no length measuring needed (Figma `Text length` on 5355:44091).
13488
+ */
13489
+ width: fit-content;
13490
+ /*
13491
+ * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
13492
+ * row; above it the fixed cap leaves room for own/peer alignment.
13493
+ */
13494
+ max-width: var(--chatbubble-max-width);
13491
13495
  position: relative;
13492
- display: inline-flex;
13493
- align-items: center;
13494
- gap: var(--spacing-1);
13495
- max-width: 240px;
13496
- padding: var(--spacing-2) var(--spacing-3);
13497
- background-color: var(--color-surface-level1);
13498
- border: var(--border-width-regular) solid var(--color-border-default);
13499
- border-radius: var(--radius-md);
13500
- overflow: hidden;
13501
- }
13502
-
13503
- .muka-chat-attachment-chip--uploading {
13504
- padding-bottom: calc(var(--spacing-2) + 2px);
13496
+ display: flex;
13497
+ flex-direction: column;
13498
+ gap: var(--chatbubble-gap);
13499
+ padding: var(--chatbubble-padding-block) var(--chatbubble-padding-inline);
13500
+ border-radius: var(--chatbubble-radius);
13501
+ border: var(--border-width-regular) solid transparent;
13502
+ box-shadow: var(--shadow-level2);
13503
+ word-break: break-word;
13505
13504
  }
13506
13505
 
13507
- .muka-chat-attachment-chip--error {
13508
- border-color: var(--color-state-error-default, var(--color-text-default-default));
13506
+ /* Media, an embed or an action stack always run the full bubble width. */
13507
+ .muka-chat-message--has-blocks .muka-chat-message__bubble {
13508
+ width: 100%;
13509
13509
  }
13510
13510
 
13511
- .muka-chat-attachment-chip--disabled {
13512
- opacity: 0.5;
13513
- pointer-events: none;
13511
+ .muka-chat-message--own .muka-chat-message__bubble {
13512
+ justify-self: end;
13514
13513
  }
13515
13514
 
13516
- /* ─── Body (icon + text) ───────────────────────────────── */
13517
-
13518
- .muka-chat-attachment-chip__body {
13519
- display: inline-flex;
13520
- align-items: center;
13521
- gap: var(--spacing-2);
13522
- min-width: 0;
13523
- flex: 1 1 auto;
13524
- background: none;
13525
- border: none;
13526
- padding: 0;
13527
- margin: 0;
13528
- text-align: left;
13529
- color: inherit;
13530
- font: inherit;
13531
- cursor: default;
13532
- -webkit-tap-highlight-color: transparent;
13515
+ .muka-chat-message--own .muka-chat-message__bubble {
13516
+ background-color: var(--chatbubble-color-own-background);
13517
+ border-color: var(--chatbubble-color-own-border);
13518
+ color: var(--chatbubble-color-own-foreground);
13533
13519
  }
13534
13520
 
13535
- .muka-chat-attachment-chip--interactive .muka-chat-attachment-chip__body {
13536
- cursor: pointer;
13521
+ .muka-chat-message--peer .muka-chat-message__bubble {
13522
+ background-color: var(--chatbubble-color-peer-background);
13523
+ border-color: var(--chatbubble-color-peer-border);
13524
+ color: var(--chatbubble-color-peer-foreground);
13537
13525
  }
13538
13526
 
13539
- .muka-chat-attachment-chip--interactive .muka-chat-attachment-chip__body:focus-visible {
13540
- outline: 2px solid var(--color-action-default);
13541
- outline-offset: 2px;
13542
- border-radius: var(--radius-sm);
13527
+ .muka-chat-message--agent .muka-chat-message__bubble {
13528
+ background-color: var(--chatbubble-color-agent-background);
13529
+ border-color: var(--chatbubble-color-agent-border);
13530
+ color: var(--chatbubble-color-agent-foreground);
13543
13531
  }
13544
13532
 
13545
- .muka-chat-attachment-chip__icon {
13546
- display: inline-flex;
13547
- align-items: center;
13548
- justify-content: center;
13549
- flex-shrink: 0;
13550
- color: var(--color-text-subtle-default);
13551
- }
13533
+ /* ─── Header row (author · meta · time · badge) ────────── */
13552
13534
 
13553
- .muka-chat-attachment-chip__text {
13535
+ .muka-chat-message__header {
13554
13536
  display: flex;
13555
- flex-direction: column;
13556
- min-width: 0;
13557
- flex: 1 1 auto;
13558
- }
13559
-
13560
- .muka-chat-attachment-chip__name {
13561
- color: var(--color-text-default-default);
13562
- font-family: var(--text-body-sm-regular-fontFamily);
13563
- font-weight: var(--text-body-sm-regular-fontWeight);
13564
- font-size: var(--text-body-sm-regular-fontSize);
13565
- line-height: var(--text-body-sm-regular-lineHeight);
13566
- white-space: nowrap;
13567
- overflow: hidden;
13568
- text-overflow: ellipsis;
13537
+ flex-flow: row wrap;
13538
+ align-items: center;
13539
+ gap: var(--chatbubble-row-gap);
13569
13540
  }
13570
13541
 
13571
- .muka-chat-attachment-chip__meta {
13572
- color: var(--color-text-subtle-default);
13573
- font-family: var(--text-body-sm-regular-fontFamily);
13574
- font-weight: var(--text-body-sm-regular-fontWeight);
13575
- font-size: var(--text-body-sm-regular-fontSize);
13576
- line-height: var(--text-body-sm-regular-lineHeight);
13577
- white-space: nowrap;
13578
- overflow: hidden;
13579
- text-overflow: ellipsis;
13542
+ .muka-chat-message__author {
13543
+ font-family: var(--text-body-base-bold-fontFamily);
13544
+ font-weight: var(--text-body-base-bold-fontWeight);
13545
+ font-size: var(--text-body-base-bold-fontSize);
13546
+ line-height: var(--text-body-base-bold-lineHeight);
13580
13547
  }
13581
13548
 
13582
- .muka-chat-attachment-chip--error .muka-chat-attachment-chip__meta {
13583
- color: var(--color-state-error-default, var(--color-text-default-default));
13549
+ .muka-chat-message__author-meta {
13550
+ /* Inherits the variant's body colour from the bubble */
13551
+ color: inherit;
13552
+ font-family: var(--text-body-base-regular-fontFamily);
13553
+ font-weight: var(--text-body-base-regular-fontWeight);
13554
+ font-size: var(--text-body-base-regular-fontSize);
13555
+ line-height: var(--text-body-base-regular-lineHeight);
13584
13556
  }
13585
13557
 
13586
- /* ─── Remove button ────────────────────────────────────── */
13587
-
13588
- .muka-chat-attachment-chip__remove {
13558
+ .muka-chat-message__badge {
13589
13559
  display: inline-flex;
13590
13560
  align-items: center;
13591
- justify-content: center;
13592
- width: 20px;
13593
- height: 20px;
13594
- border: none;
13595
- background: none;
13596
- padding: 0;
13597
- border-radius: var(--radius-sm);
13598
- cursor: pointer;
13599
- color: var(--color-text-subtle-default);
13600
- flex-shrink: 0;
13601
- -webkit-tap-highlight-color: transparent;
13602
- }
13603
-
13604
- .muka-chat-attachment-chip__remove:hover:not(:disabled) {
13605
- color: var(--color-text-default-default);
13606
- background-color: var(--color-surface-level2);
13607
13561
  }
13608
13562
 
13609
- .muka-chat-attachment-chip__remove:focus-visible {
13610
- outline: 2px solid var(--color-action-default);
13611
- outline-offset: 2px;
13563
+ /*
13564
+ * Keep the first line of content clear of the absolutely positioned menu
13565
+ * button in the bubble's top-right corner.
13566
+ */
13567
+ .muka-chat-message--has-menu .muka-chat-message__header,
13568
+ .muka-chat-message--has-menu.muka-chat-message--no-header .muka-chat-message__message {
13569
+ padding-right: var(--spacing-10);
13612
13570
  }
13613
13571
 
13614
- .muka-chat-attachment-chip__remove:disabled {
13615
- cursor: not-allowed;
13616
- opacity: 0.5;
13572
+ /* …and the last line clear of the inset timestamp in the bottom-right corner */
13573
+ .muka-chat-message--has-timestamp .muka-chat-message__message {
13574
+ padding-right: var(--spacing-10);
13617
13575
  }
13618
13576
 
13619
- /* ─── Progress bar ─────────────────────────────────────── */
13577
+ /* ─── Body ─────────────────────────────────────────────── */
13620
13578
 
13621
- .muka-chat-attachment-chip__progress {
13622
- position: absolute;
13623
- left: 0;
13624
- right: 0;
13625
- bottom: 0;
13626
- height: 2px;
13627
- background-color: var(--color-surface-level2);
13628
- overflow: hidden;
13579
+ .muka-chat-message__body {
13580
+ display: flex;
13581
+ flex-direction: column;
13582
+ gap: var(--chatbubble-gap);
13583
+ min-width: 0;
13629
13584
  }
13630
13585
 
13631
- .muka-chat-attachment-chip__progress-fill {
13632
- display: block;
13633
- height: 100%;
13634
- background-color: var(--color-action-default);
13635
- transition: width 0.16s ease;
13586
+ .muka-chat-message__media {
13587
+ min-width: 0;
13636
13588
  }
13637
13589
 
13638
- .muka-chat-attachment-chip--error .muka-chat-attachment-chip__progress-fill {
13639
- background-color: var(--color-state-error-default, var(--color-text-default-default));
13590
+ .muka-chat-message__message {
13591
+ font-family: var(--text-body-base-regular-fontFamily);
13592
+ font-weight: var(--text-body-base-regular-fontWeight);
13593
+ font-size: var(--text-body-base-regular-fontSize);
13594
+ line-height: var(--text-body-base-regular-lineHeight);
13595
+ white-space: pre-wrap;
13596
+ word-break: break-word;
13640
13597
  }
13641
13598
 
13599
+ /* Empty message block should not add a gap of its own */
13600
+ .muka-chat-message__message:empty {
13601
+ display: none;
13602
+ }
13642
13603
 
13643
- /* Card */
13644
- /* Card Component Styles - Using Muka Design Tokens */
13604
+ /* ─── Embedded card ────────────────────────────────────── */
13645
13605
 
13646
- .muka-card {
13647
- background-color: var(--card-color-default-background);
13648
- color: var(--card-color-default-foreground);
13649
- border: var(--border-width-regular) solid var(--card-color-default-border);
13650
- box-shadow: var(--card-shadow-default);
13651
- transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
13652
- overflow: hidden;
13606
+ .muka-chat-message__embed {
13607
+ position: relative;
13608
+ display: flex;
13609
+ flex-direction: column;
13610
+ gap: var(--chatbubble-embed-gap);
13611
+ /* The card is inset from the blocks above and below it (Figma 5289:40562) */
13612
+ margin-block: var(--chatbubble-embed-margin-block);
13613
+ padding: var(--chatbubble-embed-padding-block) var(--chatbubble-embed-padding-inline);
13614
+ border-radius: var(--chatbubble-embed-radius);
13615
+ border: var(--border-width-regular) solid transparent;
13653
13616
  }
13654
13617
 
13655
- /* Padding variants */
13656
- .muka-card--padding-none {
13657
- padding: 0;
13618
+ /*
13619
+ * The embed sits on the raised surface of its author's role, one step apart
13620
+ * from the bubble it is nested in, and reuses that role's border colour.
13621
+ */
13622
+ .muka-chat-message--own .muka-chat-message__embed {
13623
+ background-color: var(--chatbubble-embed-color-own-background);
13624
+ border-color: var(--chatbubble-embed-color-own-border);
13625
+ color: var(--chatbubble-embed-color-own-foreground);
13658
13626
  }
13659
13627
 
13660
- .muka-card--padding-sm {
13661
- padding: var(--card-padding-sm);
13628
+ .muka-chat-message--peer .muka-chat-message__embed {
13629
+ background-color: var(--chatbubble-embed-color-peer-background);
13630
+ border-color: var(--chatbubble-embed-color-peer-border);
13631
+ color: var(--chatbubble-embed-color-peer-foreground);
13662
13632
  }
13663
13633
 
13664
- .muka-card--padding-md {
13665
- padding: var(--card-padding-md);
13634
+ .muka-chat-message--agent .muka-chat-message__embed {
13635
+ background-color: var(--chatbubble-embed-color-agent-background);
13636
+ border-color: var(--chatbubble-embed-color-agent-border);
13637
+ color: var(--chatbubble-embed-color-agent-foreground);
13666
13638
  }
13667
13639
 
13668
- .muka-card--padding-lg {
13669
- padding: var(--card-padding-lg);
13640
+ .muka-chat-message__embed-content {
13641
+ display: flex;
13642
+ flex-direction: column;
13643
+ gap: var(--chatbubble-embed-gap);
13644
+ min-width: 0;
13670
13645
  }
13671
13646
 
13672
- /* Radius variants */
13673
- .muka-card--radius-sm {
13674
- border-radius: var(--card-radius-sm);
13647
+ .muka-chat-message__embed-copy {
13648
+ position: absolute;
13649
+ top: var(--chatbubble-embed-padding-block);
13650
+ right: var(--chatbubble-embed-padding-inline);
13675
13651
  }
13676
13652
 
13677
- .muka-card--radius-md {
13678
- border-radius: var(--card-radius-md);
13679
- }
13653
+ /* ─── Stacked full-width action buttons ────────────────── */
13680
13654
 
13681
- .muka-card--radius-lg {
13682
- border-radius: var(--card-radius-lg);
13655
+ .muka-chat-message__action-stack {
13656
+ display: flex;
13657
+ flex-direction: column;
13658
+ gap: var(--chatbubble-action-stack-gap);
13683
13659
  }
13684
13660
 
13685
- /* Interactive variant */
13686
- .muka-card--interactive {
13687
- cursor: pointer;
13688
- user-select: none;
13689
- }
13661
+ /* ─── Inset timestamp ──────────────────────────────────── */
13690
13662
 
13691
- .muka-card--interactive:hover {
13692
- background-color: var(--card-color-hover-background);
13693
- border-color: var(--card-color-hover-border);
13694
- box-shadow: var(--card-shadow-hover);
13663
+ /*
13664
+ * Every author puts its timestamp in the bubble's bottom-right corner, below
13665
+ * the message — never in the header row (Figma 5355:44091).
13666
+ */
13667
+
13668
+ .muka-chat-message__timestamp {
13669
+ color: var(--chatbubble-color-timestamp);
13670
+ font-family: var(--text-body-xs-regular-fontFamily);
13671
+ font-weight: var(--text-body-xs-regular-fontWeight);
13672
+ font-size: var(--text-body-xs-regular-fontSize);
13673
+ line-height: var(--text-body-xs-regular-lineHeight);
13674
+ white-space: nowrap;
13695
13675
  }
13696
13676
 
13697
- .muka-card--interactive:active,
13698
- .muka-card--interactive.muka-card--pressed {
13699
- background-color: var(--card-color-pressed-background);
13700
- border-color: var(--card-color-pressed-border);
13701
- box-shadow: var(--card-shadow-pressed);
13677
+ /*
13678
+ * Pinned to the corner rather than stacked below the message, so a one-line
13679
+ * message stays one line tall. The message reserves the width it needs.
13680
+ */
13681
+ .muka-chat-message__timestamp--inset {
13682
+ position: absolute;
13683
+ right: var(--spacing-2);
13684
+ bottom: var(--spacing-1);
13702
13685
  }
13703
13686
 
13704
- .muka-card--interactive:focus-visible {
13705
- outline: 2px solid var(--color-border-focus);
13706
- outline-offset: 2px;
13687
+ /*
13688
+ * When the last block in the body is media, an embed or an action stack (not
13689
+ * trailing text), it runs the full width, so reserve a line below for the inset
13690
+ * timestamp. A message that ends in text clears the corner inline instead (see
13691
+ * `__message` padding-right above), so it needs no extra bottom space.
13692
+ */
13693
+ .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
13694
+ padding-bottom: var(--text-body-xs-regular-lineHeight);
13707
13695
  }
13708
13696
 
13709
- /* Selected variant */
13710
- .muka-card--selected {
13711
- background-color: var(--card-color-selected-background);
13712
- border-color: var(--card-color-selected-border);
13713
- border-width: var(--border-width-bold);
13714
- box-shadow: var(--card-shadow-selected);
13697
+ /* ─── Menu affordance ──────────────────────────────────── */
13698
+
13699
+ /*
13700
+ * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
13701
+ * everywhere, and pinned while its menu is open. On touch the equivalent
13702
+ * affordance is a long-press on the bubble, which opens an ActionSheet.
13703
+ */
13704
+ .muka-chat-message__menu {
13705
+ position: absolute;
13706
+ top: var(--spacing-1);
13707
+ right: var(--spacing-1);
13708
+ opacity: 0;
13709
+ pointer-events: none;
13715
13710
  }
13716
13711
 
13717
- /* Optional header (title + description) */
13718
- .muka-card__header {
13719
- margin-bottom: var(--spacing-4);
13712
+ .muka-chat-message__menu:focus-within,
13713
+ .muka-chat-message--menu-open .muka-chat-message__menu {
13714
+ opacity: 1;
13715
+ pointer-events: auto;
13720
13716
  }
13721
13717
 
13722
- .muka-card__title {
13723
- margin: 0;
13724
- color: var(--color-text-default-default);
13725
- font-family: var(--text-heading-xs-fontFamily);
13726
- font-weight: var(--text-heading-xs-fontWeight);
13727
- font-size: var(--text-heading-xs-fontSize);
13728
- line-height: var(--text-heading-xs-lineHeight);
13729
- letter-spacing: var(--text-heading-xs-letterSpacing);
13718
+ @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
13719
+ .muka-chat-message__bubble:hover .muka-chat-message__menu {
13720
+ opacity: 1;
13721
+ pointer-events: auto;
13722
+ }
13730
13723
  }
13731
13724
 
13732
- .muka-card__description {
13733
- margin: var(--spacing-1) 0 0;
13734
- color: var(--color-text-subtle-default);
13735
- font-family: var(--text-body-sm-regular-fontFamily);
13736
- font-weight: var(--text-body-sm-regular-fontWeight);
13737
- font-size: var(--text-body-sm-regular-fontSize);
13738
- line-height: var(--text-body-sm-regular-lineHeight);
13725
+ /* Suppress iOS Safari's own callout so the long-press sheet can take over */
13726
+ @media (pointer: coarse) {
13727
+ .muka-chat-message--has-menu .muka-chat-message__bubble {
13728
+ -webkit-touch-callout: none;
13729
+ }
13739
13730
  }
13740
13731
 
13741
- /* Hide divider on last list item inside card */
13742
- .muka-card > .muka-listitem:last-child > .muka-listitem__divider {
13743
- display: none;
13744
- }
13732
+ /* ─── Print ────────────────────────────────────────────── */
13745
13733
 
13746
- /* Disabled state */
13747
- .muka-card--disabled {
13748
- opacity: 0.5;
13749
- cursor: not-allowed;
13750
- pointer-events: none;
13734
+ @media print {
13735
+ .muka-chat-message__bubble {
13736
+ box-shadow: none;
13737
+ break-inside: avoid;
13738
+ print-color-adjust: exact;
13739
+ -webkit-print-color-adjust: exact;
13740
+ }
13741
+
13742
+ .muka-chat-message__embed {
13743
+ break-inside: avoid;
13744
+ print-color-adjust: exact;
13745
+ -webkit-print-color-adjust: exact;
13746
+ }
13747
+
13748
+ .muka-chat-message__menu,
13749
+ .muka-chat-message__embed-copy,
13750
+ .muka-chat-message__action-stack {
13751
+ display: none;
13752
+ }
13751
13753
  }
13752
13754
 
13753
13755
 
@@ -14099,120 +14101,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
14099
14101
  }
14100
14102
 
14101
14103
 
14102
- /* Breadcrumb */
14103
- /* Breadcrumb Component Styles */
14104
-
14105
- .muka-breadcrumb__list {
14106
- display: flex;
14107
- align-items: center;
14108
- flex-wrap: wrap;
14109
- list-style: none;
14110
- margin: 0;
14111
- padding: 0;
14112
- gap: var(--spacing-1);
14113
- }
14114
-
14115
- .muka-breadcrumb__item {
14116
- display: inline-flex;
14117
- align-items: center;
14118
- gap: var(--spacing-1);
14119
- }
14120
-
14121
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) {
14122
- padding-left: var(--spacing-1);
14123
- }
14124
-
14125
- .muka-breadcrumb__icon {
14126
- display: inline-flex;
14127
- align-items: center;
14128
- color: var(--color-text-subtle-default);
14129
- }
14130
-
14131
- .muka-breadcrumb__icon .muka-icon {
14132
- color: inherit;
14133
- }
14134
-
14135
- .muka-breadcrumb__item:has(.muka-breadcrumb__current) .muka-breadcrumb__icon {
14136
- color: var(--color-text-default-default);
14137
- }
14138
-
14139
- .muka-breadcrumb__item:has(.muka-breadcrumb__link:hover) .muka-breadcrumb__icon {
14140
- color: var(--color-text-action-default);
14141
- }
14142
-
14143
- /* Link styles */
14144
- .muka-breadcrumb__link {
14145
- color: var(--color-text-subtle-default);
14146
- text-decoration: none;
14147
- border: none;
14148
- background: none;
14149
- padding-inline: var(--spacing-2);
14150
- padding-block: 0;
14151
- cursor: pointer;
14152
- font: inherit;
14153
- transition: color 0.15s ease;
14154
- }
14155
-
14156
- .muka-breadcrumb__link:hover {
14157
- color: var(--color-text-action-default);
14158
- text-decoration: underline;
14159
- }
14160
-
14161
- /* Tighter gap after leading icon */
14162
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__link,
14163
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__current {
14164
- padding-left: var(--spacing-1);
14165
- }
14166
-
14167
- /* Current page (last item, no context switcher) */
14168
- .muka-breadcrumb__current {
14169
- color: var(--color-text-default-default);
14170
- font-weight: 600;
14171
- padding-inline: var(--spacing-2);
14172
- }
14173
-
14174
- /* Separator */
14175
- .muka-breadcrumb__separator {
14176
- color: var(--color-text-subtle-default);
14177
- user-select: none;
14178
- }
14179
-
14180
- .muka-breadcrumb__item--context {
14181
- gap: 0;
14182
- }
14183
-
14184
- .muka-breadcrumb__list:has(.muka-breadcrumb__item--context) {
14185
- gap: 0;
14186
- }
14187
-
14188
- .muka-breadcrumb__item--context .muka-breadcrumb__separator {
14189
- margin: 0;
14190
- padding-inline: var(--spacing-1, 4px);
14191
- }
14192
-
14193
- /* Size variants */
14194
- .muka-breadcrumb--sm {
14195
- font-family: var(--text-label-sm-regular-fontFamily);
14196
- font-weight: var(--text-label-sm-regular-fontWeight);
14197
- font-size: var(--text-label-sm-regular-fontSize);
14198
- line-height: var(--text-label-sm-regular-lineHeight);
14199
- }
14200
-
14201
- .muka-breadcrumb--md {
14202
- font-family: var(--text-label-md-regular-fontFamily);
14203
- font-weight: var(--text-label-md-regular-fontWeight);
14204
- font-size: var(--text-label-md-regular-fontSize);
14205
- line-height: var(--text-label-md-regular-lineHeight);
14206
- }
14207
-
14208
- .muka-breadcrumb--lg {
14209
- font-family: var(--text-label-lg-regular-fontFamily);
14210
- font-weight: var(--text-label-lg-regular-fontWeight);
14211
- font-size: var(--text-label-lg-regular-fontSize);
14212
- line-height: var(--text-label-lg-regular-lineHeight);
14213
- }
14214
-
14215
-
14216
14104
  /* BottomBar */
14217
14105
  /* BottomBar Component Styles */
14218
14106
 
@@ -14606,34 +14494,148 @@ button.muka-chat-photo-grid__tile:focus-visible {
14606
14494
  line-height: normal;
14607
14495
  }
14608
14496
 
14609
- /* Neutral variant */
14610
- .muka-badge-number--neutral {
14611
- background-color: var(--color-surface-level1);
14612
- color: var(--color-text-default-default);
14497
+ /* Neutral variant */
14498
+ .muka-badge-number--neutral {
14499
+ background-color: var(--color-surface-level1);
14500
+ color: var(--color-text-default-default);
14501
+ }
14502
+
14503
+ /* Info variant */
14504
+ .muka-badge-number--info {
14505
+ background-color: var(--color-state-info-contrast);
14506
+ color: var(--color-text-default-inverse);
14507
+ }
14508
+
14509
+ /* Success variant */
14510
+ .muka-badge-number--success {
14511
+ background-color: var(--color-state-success-contrast);
14512
+ color: var(--color-text-default-inverse);
14513
+ }
14514
+
14515
+ /* Warning variant */
14516
+ .muka-badge-number--warning {
14517
+ background-color: var(--color-state-warning-contrast);
14518
+ color: var(--color-text-default-inverse);
14519
+ }
14520
+
14521
+ /* Error variant */
14522
+ .muka-badge-number--error {
14523
+ background-color: var(--color-state-error-contrast);
14524
+ color: var(--color-text-default-inverse);
14525
+ }
14526
+
14527
+
14528
+ /* Breadcrumb */
14529
+ /* Breadcrumb Component Styles */
14530
+
14531
+ .muka-breadcrumb__list {
14532
+ display: flex;
14533
+ align-items: center;
14534
+ flex-wrap: wrap;
14535
+ list-style: none;
14536
+ margin: 0;
14537
+ padding: 0;
14538
+ gap: var(--spacing-1);
14539
+ }
14540
+
14541
+ .muka-breadcrumb__item {
14542
+ display: inline-flex;
14543
+ align-items: center;
14544
+ gap: var(--spacing-1);
14545
+ }
14546
+
14547
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) {
14548
+ padding-left: var(--spacing-1);
14549
+ }
14550
+
14551
+ .muka-breadcrumb__icon {
14552
+ display: inline-flex;
14553
+ align-items: center;
14554
+ color: var(--color-text-subtle-default);
14555
+ }
14556
+
14557
+ .muka-breadcrumb__icon .muka-icon {
14558
+ color: inherit;
14559
+ }
14560
+
14561
+ .muka-breadcrumb__item:has(.muka-breadcrumb__current) .muka-breadcrumb__icon {
14562
+ color: var(--color-text-default-default);
14563
+ }
14564
+
14565
+ .muka-breadcrumb__item:has(.muka-breadcrumb__link:hover) .muka-breadcrumb__icon {
14566
+ color: var(--color-text-action-default);
14567
+ }
14568
+
14569
+ /* Link styles */
14570
+ .muka-breadcrumb__link {
14571
+ color: var(--color-text-subtle-default);
14572
+ text-decoration: none;
14573
+ border: none;
14574
+ background: none;
14575
+ padding-inline: var(--spacing-2);
14576
+ padding-block: 0;
14577
+ cursor: pointer;
14578
+ font: inherit;
14579
+ transition: color 0.15s ease;
14580
+ }
14581
+
14582
+ .muka-breadcrumb__link:hover {
14583
+ color: var(--color-text-action-default);
14584
+ text-decoration: underline;
14585
+ }
14586
+
14587
+ /* Tighter gap after leading icon */
14588
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__link,
14589
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__current {
14590
+ padding-left: var(--spacing-1);
14591
+ }
14592
+
14593
+ /* Current page (last item, no context switcher) */
14594
+ .muka-breadcrumb__current {
14595
+ color: var(--color-text-default-default);
14596
+ font-weight: 600;
14597
+ padding-inline: var(--spacing-2);
14598
+ }
14599
+
14600
+ /* Separator */
14601
+ .muka-breadcrumb__separator {
14602
+ color: var(--color-text-subtle-default);
14603
+ user-select: none;
14604
+ }
14605
+
14606
+ .muka-breadcrumb__item--context {
14607
+ gap: 0;
14608
+ }
14609
+
14610
+ .muka-breadcrumb__list:has(.muka-breadcrumb__item--context) {
14611
+ gap: 0;
14613
14612
  }
14614
14613
 
14615
- /* Info variant */
14616
- .muka-badge-number--info {
14617
- background-color: var(--color-state-info-contrast);
14618
- color: var(--color-text-default-inverse);
14614
+ .muka-breadcrumb__item--context .muka-breadcrumb__separator {
14615
+ margin: 0;
14616
+ padding-inline: var(--spacing-1, 4px);
14619
14617
  }
14620
14618
 
14621
- /* Success variant */
14622
- .muka-badge-number--success {
14623
- background-color: var(--color-state-success-contrast);
14624
- color: var(--color-text-default-inverse);
14619
+ /* Size variants */
14620
+ .muka-breadcrumb--sm {
14621
+ font-family: var(--text-label-sm-regular-fontFamily);
14622
+ font-weight: var(--text-label-sm-regular-fontWeight);
14623
+ font-size: var(--text-label-sm-regular-fontSize);
14624
+ line-height: var(--text-label-sm-regular-lineHeight);
14625
14625
  }
14626
14626
 
14627
- /* Warning variant */
14628
- .muka-badge-number--warning {
14629
- background-color: var(--color-state-warning-contrast);
14630
- color: var(--color-text-default-inverse);
14627
+ .muka-breadcrumb--md {
14628
+ font-family: var(--text-label-md-regular-fontFamily);
14629
+ font-weight: var(--text-label-md-regular-fontWeight);
14630
+ font-size: var(--text-label-md-regular-fontSize);
14631
+ line-height: var(--text-label-md-regular-lineHeight);
14631
14632
  }
14632
14633
 
14633
- /* Error variant */
14634
- .muka-badge-number--error {
14635
- background-color: var(--color-state-error-contrast);
14636
- color: var(--color-text-default-inverse);
14634
+ .muka-breadcrumb--lg {
14635
+ font-family: var(--text-label-lg-regular-fontFamily);
14636
+ font-weight: var(--text-label-lg-regular-fontWeight);
14637
+ font-size: var(--text-label-lg-regular-fontSize);
14638
+ line-height: var(--text-label-lg-regular-lineHeight);
14637
14639
  }
14638
14640
 
14639
14641
 
@@ -14700,6 +14702,33 @@ button.muka-chat-photo-grid__tile:focus-visible {
14700
14702
  padding-left: var(--badge-padding-leading-lg);
14701
14703
  }
14702
14704
 
14705
+ /* Icon-only — square, sized to the badge height (Figma: 24 / 32 / 40).
14706
+ * Padding resets at size+icon-only specificity so `--has-icon` leading padding
14707
+ * cannot win and shift the icon off-center. */
14708
+ .muka-badge--icon-only {
14709
+ justify-content: center;
14710
+ align-items: center;
14711
+ gap: 0;
14712
+ }
14713
+
14714
+ .muka-badge--sm.muka-badge--icon-only,
14715
+ .muka-badge--md.muka-badge--icon-only,
14716
+ .muka-badge--lg.muka-badge--icon-only {
14717
+ padding: 0;
14718
+ }
14719
+
14720
+ .muka-badge--sm.muka-badge--icon-only {
14721
+ width: var(--badge-size-height-sm);
14722
+ }
14723
+
14724
+ .muka-badge--md.muka-badge--icon-only {
14725
+ width: var(--badge-size-height-md);
14726
+ }
14727
+
14728
+ .muka-badge--lg.muka-badge--icon-only {
14729
+ width: var(--badge-size-height-lg);
14730
+ }
14731
+
14703
14732
  /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
14704
14733
  .muka-badge__icon {
14705
14734
  display: inline-flex;
@@ -15239,102 +15268,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
15239
15268
  }
15240
15269
 
15241
15270
 
15242
- /* AppShell */
15243
- /* AppShell Component Styles */
15244
-
15245
- /*
15246
- * Layout wrapper for a persistent left navigation rail + main view area, with an
15247
- * optional full-width top app bar. The rail itself is styled by the BottomBar
15248
- * `desktopAs="sidebar"` rules (fixed 240px left rail at ≥1024px); AppShell shows/
15249
- * hides the sidebar + app-bar slots and offsets the main area to match. Both
15250
- * appear at the large tier — responsively (no `size`, scoped with
15251
- * `:not([data-size])`) or forced via `[data-size="lg"]`.
15252
- */
15253
- .muka-app-shell {
15254
- position: relative;
15255
- /* Reserved width for the rail; matches BottomBar's desktop-sidebar width. */
15256
- --app-shell-sidebar-width: 240px;
15257
- /* Height of the optional top app bar. */
15258
- --app-shell-appbar-height: 64px;
15259
- }
15260
-
15261
- /* Sidebar slot: hidden below the large tier (per-view nav handles small/medium). */
15262
- .muka-app-shell__sidebar {
15263
- display: none;
15264
- }
15265
-
15266
- .muka-app-shell__main {
15267
- min-height: 100dvh;
15268
- }
15269
-
15270
- /*
15271
- * App bar: full-width top strip. Intrinsic styling lives here (harmless while
15272
- * hidden); it is revealed only at the large tier. Sits above the sidebar rail.
15273
- */
15274
- .muka-app-shell__appbar {
15275
- display: none;
15276
- align-items: center;
15277
- justify-content: space-between;
15278
- gap: var(--spacing-4);
15279
- position: fixed;
15280
- top: 0;
15281
- left: 0;
15282
- right: 0;
15283
- height: var(--app-shell-appbar-height);
15284
- padding-inline: var(--spacing-4);
15285
- background-color: var(--color-surface-level3);
15286
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
15287
- z-index: 11; /* above the sidebar rail (z-index 10) */
15288
- }
15289
-
15290
- /* ─── Large tier (responsive) ─── */
15291
- @media (min-width: 1024px) {
15292
- .muka-app-shell:not([data-size]) .muka-app-shell__sidebar {
15293
- display: block;
15294
- }
15295
- .muka-app-shell:not([data-size]) .muka-app-shell__main {
15296
- padding-left: var(--app-shell-sidebar-width);
15297
- }
15298
- .muka-app-shell:not([data-size]) .muka-app-shell__appbar {
15299
- display: flex;
15300
- }
15301
- /* When an app bar is present, drop the rail + content below it so nothing overlaps. */
15302
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-app-shell__main {
15303
- padding-top: var(--app-shell-appbar-height);
15304
- }
15305
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15306
- top: var(--app-shell-appbar-height);
15307
- height: calc(100vh - var(--app-shell-appbar-height));
15308
- }
15309
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-view,
15310
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-nav-transition {
15311
- height: calc(100dvh - var(--app-shell-appbar-height));
15312
- }
15313
- }
15314
-
15315
- /* ─── Large tier (forced via size="lg") ─── */
15316
- .muka-app-shell[data-size='lg'] .muka-app-shell__sidebar {
15317
- display: block;
15318
- }
15319
- .muka-app-shell[data-size='lg'] .muka-app-shell__main {
15320
- padding-left: var(--app-shell-sidebar-width);
15321
- }
15322
- .muka-app-shell[data-size='lg'] .muka-app-shell__appbar {
15323
- display: flex;
15324
- }
15325
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-app-shell__main {
15326
- padding-top: var(--app-shell-appbar-height);
15327
- }
15328
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15329
- top: var(--app-shell-appbar-height);
15330
- height: calc(100vh - var(--app-shell-appbar-height));
15331
- }
15332
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-view,
15333
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-nav-transition {
15334
- height: calc(100dvh - var(--app-shell-appbar-height));
15335
- }
15336
-
15337
-
15338
15271
  /* Alert */
15339
15272
  /* Alert Component Styles - Using Muka Design Tokens */
15340
15273
 
@@ -15496,11 +15429,12 @@ button.muka-chat-photo-grid__tile:focus-visible {
15496
15429
  line-height: var(--text-body-base-regular-lineHeight);
15497
15430
  }
15498
15431
 
15499
- /* Action slot */
15432
+ /* Action slot — TextLink (or similar) below the message, matching Figma */
15500
15433
  .muka-alert__action {
15501
15434
  display: flex;
15502
- align-items: center;
15503
- flex-shrink: 0;
15435
+ flex-direction: column;
15436
+ align-items: flex-start;
15437
+ padding-top: var(--spacing-1);
15504
15438
  }
15505
15439
 
15506
15440
  /* Dismiss button - uses accent color per variant, aligned with icon row */
@@ -15537,6 +15471,102 @@ button.muka-chat-photo-grid__tile:focus-visible {
15537
15471
  }
15538
15472
 
15539
15473
 
15474
+ /* AppShell */
15475
+ /* AppShell Component Styles */
15476
+
15477
+ /*
15478
+ * Layout wrapper for a persistent left navigation rail + main view area, with an
15479
+ * optional full-width top app bar. The rail itself is styled by the BottomBar
15480
+ * `desktopAs="sidebar"` rules (fixed 240px left rail at ≥1024px); AppShell shows/
15481
+ * hides the sidebar + app-bar slots and offsets the main area to match. Both
15482
+ * appear at the large tier — responsively (no `size`, scoped with
15483
+ * `:not([data-size])`) or forced via `[data-size="lg"]`.
15484
+ */
15485
+ .muka-app-shell {
15486
+ position: relative;
15487
+ /* Reserved width for the rail; matches BottomBar's desktop-sidebar width. */
15488
+ --app-shell-sidebar-width: 240px;
15489
+ /* Height of the optional top app bar. */
15490
+ --app-shell-appbar-height: 64px;
15491
+ }
15492
+
15493
+ /* Sidebar slot: hidden below the large tier (per-view nav handles small/medium). */
15494
+ .muka-app-shell__sidebar {
15495
+ display: none;
15496
+ }
15497
+
15498
+ .muka-app-shell__main {
15499
+ min-height: 100dvh;
15500
+ }
15501
+
15502
+ /*
15503
+ * App bar: full-width top strip. Intrinsic styling lives here (harmless while
15504
+ * hidden); it is revealed only at the large tier. Sits above the sidebar rail.
15505
+ */
15506
+ .muka-app-shell__appbar {
15507
+ display: none;
15508
+ align-items: center;
15509
+ justify-content: space-between;
15510
+ gap: var(--spacing-4);
15511
+ position: fixed;
15512
+ top: 0;
15513
+ left: 0;
15514
+ right: 0;
15515
+ height: var(--app-shell-appbar-height);
15516
+ padding-inline: var(--spacing-4);
15517
+ background-color: var(--color-surface-level3);
15518
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
15519
+ z-index: 11; /* above the sidebar rail (z-index 10) */
15520
+ }
15521
+
15522
+ /* ─── Large tier (responsive) ─── */
15523
+ @media (min-width: 1024px) {
15524
+ .muka-app-shell:not([data-size]) .muka-app-shell__sidebar {
15525
+ display: block;
15526
+ }
15527
+ .muka-app-shell:not([data-size]) .muka-app-shell__main {
15528
+ padding-left: var(--app-shell-sidebar-width);
15529
+ }
15530
+ .muka-app-shell:not([data-size]) .muka-app-shell__appbar {
15531
+ display: flex;
15532
+ }
15533
+ /* When an app bar is present, drop the rail + content below it so nothing overlaps. */
15534
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-app-shell__main {
15535
+ padding-top: var(--app-shell-appbar-height);
15536
+ }
15537
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15538
+ top: var(--app-shell-appbar-height);
15539
+ height: calc(100vh - var(--app-shell-appbar-height));
15540
+ }
15541
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-view,
15542
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-nav-transition {
15543
+ height: calc(100dvh - var(--app-shell-appbar-height));
15544
+ }
15545
+ }
15546
+
15547
+ /* ─── Large tier (forced via size="lg") ─── */
15548
+ .muka-app-shell[data-size='lg'] .muka-app-shell__sidebar {
15549
+ display: block;
15550
+ }
15551
+ .muka-app-shell[data-size='lg'] .muka-app-shell__main {
15552
+ padding-left: var(--app-shell-sidebar-width);
15553
+ }
15554
+ .muka-app-shell[data-size='lg'] .muka-app-shell__appbar {
15555
+ display: flex;
15556
+ }
15557
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-app-shell__main {
15558
+ padding-top: var(--app-shell-appbar-height);
15559
+ }
15560
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15561
+ top: var(--app-shell-appbar-height);
15562
+ height: calc(100vh - var(--app-shell-appbar-height));
15563
+ }
15564
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-view,
15565
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-nav-transition {
15566
+ height: calc(100dvh - var(--app-shell-appbar-height));
15567
+ }
15568
+
15569
+
15540
15570
  /* AgentTaskList */
15541
15571
  /* AgentTaskList Component Styles */
15542
15572