@revikornmann/muka-ui 0.28.0 → 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 (51) 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/MediaViewer/MediaViewer.css +4 -1
  8. package/dist/cjs/components/MediaViewer/MediaViewer.js +2 -0
  9. package/dist/cjs/components/MediaViewer/MediaViewer.js.map +1 -1
  10. package/dist/cjs/components/PhotoUploader/PhotoUploader.css +6 -18
  11. package/dist/cjs/components/PhotoUploader/PhotoUploader.js +15 -16
  12. package/dist/cjs/components/PhotoUploader/PhotoUploader.js.map +1 -1
  13. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.css +26 -12
  14. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.js +49 -40
  15. package/dist/cjs/components/ProgressAccordeon/ProgressAccordeon.js.map +1 -1
  16. package/dist/esm/components/Alert/Alert.css +4 -3
  17. package/dist/esm/components/Alert/Alert.js +1 -1
  18. package/dist/esm/components/Alert/Alert.js.map +1 -1
  19. package/dist/esm/components/Badge/Badge.css +27 -0
  20. package/dist/esm/components/Badge/Badge.js +14 -5
  21. package/dist/esm/components/Badge/Badge.js.map +1 -1
  22. package/dist/esm/components/MediaViewer/MediaViewer.css +4 -1
  23. package/dist/esm/components/MediaViewer/MediaViewer.js +2 -0
  24. package/dist/esm/components/MediaViewer/MediaViewer.js.map +1 -1
  25. package/dist/esm/components/PhotoUploader/PhotoUploader.css +6 -18
  26. package/dist/esm/components/PhotoUploader/PhotoUploader.js +15 -16
  27. package/dist/esm/components/PhotoUploader/PhotoUploader.js.map +1 -1
  28. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.css +26 -12
  29. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.js +49 -40
  30. package/dist/esm/components/ProgressAccordeon/ProgressAccordeon.js.map +1 -1
  31. package/dist/styles/components/Alert.css +4 -3
  32. package/dist/styles/components/Badge.css +27 -0
  33. package/dist/styles/components/MediaViewer.css +4 -1
  34. package/dist/styles/components/PhotoUploader.css +6 -18
  35. package/dist/styles/components/ProgressAccordeon.css +26 -12
  36. package/dist/styles/index.css +1549 -1516
  37. package/dist/styles/muka-dark.css +1549 -1516
  38. package/dist/styles/muka-light.css +1549 -1516
  39. package/dist/styles/wireframe-dark.css +1549 -1516
  40. package/dist/styles/wireframe-light.css +1549 -1516
  41. package/dist/types/components/Alert/Alert.d.ts +1 -1
  42. package/dist/types/components/Alert/Alert.d.ts.map +1 -1
  43. package/dist/types/components/Badge/Badge.d.ts +7 -5
  44. package/dist/types/components/Badge/Badge.d.ts.map +1 -1
  45. package/dist/types/components/MediaViewer/MediaViewer.d.ts +2 -0
  46. package/dist/types/components/MediaViewer/MediaViewer.d.ts.map +1 -1
  47. package/dist/types/components/PhotoUploader/PhotoUploader.d.ts +8 -8
  48. package/dist/types/components/PhotoUploader/PhotoUploader.d.ts.map +1 -1
  49. package/dist/types/components/ProgressAccordeon/ProgressAccordeon.d.ts +36 -29
  50. package/dist/types/components/ProgressAccordeon/ProgressAccordeon.d.ts.map +1 -1
  51. package/package.json +1 -1
@@ -5264,81 +5264,6 @@ body {
5264
5264
  }
5265
5265
 
5266
5266
 
5267
- /* Skeleton */
5268
- /* Skeleton Component Styles */
5269
-
5270
- .muka-skeleton {
5271
- background-color: var(--color-surface-level1);
5272
- display: block;
5273
- }
5274
-
5275
- /* Variants */
5276
- .muka-skeleton--text {
5277
- height: 1em;
5278
- border-radius: var(--radius-md);
5279
- width: 100%;
5280
- }
5281
-
5282
- .muka-skeleton--circular {
5283
- width: 2.5rem;
5284
- height: 2.5rem;
5285
- border-radius: var(--radius-full);
5286
- }
5287
-
5288
- .muka-skeleton--rectangular {
5289
- height: 7.5rem;
5290
- border-radius: var(--radius-md);
5291
- width: 100%;
5292
- }
5293
-
5294
- /* Last line in multi-line text is shorter */
5295
- .muka-skeleton--last-line {
5296
- width: 80%;
5297
- }
5298
-
5299
- /* Lines container */
5300
- .muka-skeleton__lines {
5301
- display: flex;
5302
- flex-direction: column;
5303
- gap: var(--spacing-2);
5304
- }
5305
-
5306
- /* Shimmer animation */
5307
- @keyframes muka-skeleton-shimmer {
5308
- 0% {
5309
- background-position: -200% 0;
5310
- }
5311
- 100% {
5312
- background-position: 200% 0;
5313
- }
5314
- }
5315
-
5316
- .muka-skeleton--shimmer {
5317
- background: linear-gradient(
5318
- 90deg,
5319
- var(--color-surface-level1) 25%,
5320
- var(--color-surface-level2) 50%,
5321
- var(--color-surface-level1) 75%
5322
- );
5323
- background-size: 200% 100%;
5324
- animation: muka-skeleton-shimmer 1.5s ease-in-out infinite;
5325
- }
5326
-
5327
- /* Pulse animation */
5328
- @keyframes muka-skeleton-pulse {
5329
- 0%, 100% {
5330
- opacity: 1;
5331
- }
5332
- 50% {
5333
- opacity: 0.4;
5334
- }
5335
- }
5336
-
5337
- .muka-skeleton--pulse {
5338
- animation: muka-skeleton-pulse 1.5s ease-in-out infinite;
5339
- }
5340
-
5341
-
5342
5267
  /* Sheet */
5343
5268
  /* Sheet Component Styles */
5344
5269
 
@@ -5419,6 +5344,81 @@ body {
5419
5344
  }
5420
5345
 
5421
5346
 
5347
+ /* Skeleton */
5348
+ /* Skeleton Component Styles */
5349
+
5350
+ .muka-skeleton {
5351
+ background-color: var(--color-surface-level1);
5352
+ display: block;
5353
+ }
5354
+
5355
+ /* Variants */
5356
+ .muka-skeleton--text {
5357
+ height: 1em;
5358
+ border-radius: var(--radius-md);
5359
+ width: 100%;
5360
+ }
5361
+
5362
+ .muka-skeleton--circular {
5363
+ width: 2.5rem;
5364
+ height: 2.5rem;
5365
+ border-radius: var(--radius-full);
5366
+ }
5367
+
5368
+ .muka-skeleton--rectangular {
5369
+ height: 7.5rem;
5370
+ border-radius: var(--radius-md);
5371
+ width: 100%;
5372
+ }
5373
+
5374
+ /* Last line in multi-line text is shorter */
5375
+ .muka-skeleton--last-line {
5376
+ width: 80%;
5377
+ }
5378
+
5379
+ /* Lines container */
5380
+ .muka-skeleton__lines {
5381
+ display: flex;
5382
+ flex-direction: column;
5383
+ gap: var(--spacing-2);
5384
+ }
5385
+
5386
+ /* Shimmer animation */
5387
+ @keyframes muka-skeleton-shimmer {
5388
+ 0% {
5389
+ background-position: -200% 0;
5390
+ }
5391
+ 100% {
5392
+ background-position: 200% 0;
5393
+ }
5394
+ }
5395
+
5396
+ .muka-skeleton--shimmer {
5397
+ background: linear-gradient(
5398
+ 90deg,
5399
+ var(--color-surface-level1) 25%,
5400
+ var(--color-surface-level2) 50%,
5401
+ var(--color-surface-level1) 75%
5402
+ );
5403
+ background-size: 200% 100%;
5404
+ animation: muka-skeleton-shimmer 1.5s ease-in-out infinite;
5405
+ }
5406
+
5407
+ /* Pulse animation */
5408
+ @keyframes muka-skeleton-pulse {
5409
+ 0%, 100% {
5410
+ opacity: 1;
5411
+ }
5412
+ 50% {
5413
+ opacity: 0.4;
5414
+ }
5415
+ }
5416
+
5417
+ .muka-skeleton--pulse {
5418
+ animation: muka-skeleton-pulse 1.5s ease-in-out infinite;
5419
+ }
5420
+
5421
+
5422
5422
  /* Select */
5423
5423
  /* Select Component Styles - Aligned with Input for consistency */
5424
5424
 
@@ -7153,6 +7153,7 @@ body {
7153
7153
 
7154
7154
  /* Per-state gap: content-bearing steps are tighter, header-only steps looser */
7155
7155
  .muka-progress-accordeon--current,
7156
+ .muka-progress-accordeon--current.muka-progress-accordeon--expanded,
7156
7157
  .muka-progress-accordeon--past.muka-progress-accordeon--expanded,
7157
7158
  .muka-progress-accordeon--upcoming.muka-progress-accordeon--expanded {
7158
7159
  gap: var(--spacing-6);
@@ -7160,7 +7161,8 @@ body {
7160
7161
 
7161
7162
  .muka-progress-accordeon--upcoming,
7162
7163
  .muka-progress-accordeon--past.muka-progress-accordeon--collapsed,
7163
- .muka-progress-accordeon--upcoming.muka-progress-accordeon--collapsed {
7164
+ .muka-progress-accordeon--upcoming.muka-progress-accordeon--collapsed,
7165
+ .muka-progress-accordeon--current.muka-progress-accordeon--collapsed {
7164
7166
  gap: var(--spacing-8);
7165
7167
  }
7166
7168
 
@@ -7305,32 +7307,44 @@ body {
7305
7307
  width: 100%;
7306
7308
  }
7307
7309
 
7308
- /* ─── Collapse/expand animation (past & upcoming steps) ──────
7309
- The grid-template-rows 1fr → 0fr technique animates the content to/from its
7310
- intrinsic (auto) height with no magic max-height. Under prefers-reduced-motion
7311
- --motion-duration-view resolves to 0ms, so the toggle stays instant. */
7312
- .muka-progress-accordeon__slot-wrapper {
7310
+ /* ─── Collapse/expand animation (any expandable step) ──────
7311
+ Animates grid-template-rows 1fr ↔ 0fr so the panel (slot + actions) grows and
7312
+ shrinks to its intrinsic height. Opacity fades with the same duration.
7313
+ Under prefers-reduced-motion, --motion-duration-view is 0ms. */
7314
+ .muka-progress-accordeon__panel-wrapper {
7313
7315
  display: grid;
7314
7316
  grid-template-rows: 1fr;
7315
- transition: grid-template-rows var(--motion-duration-view) var(--motion-easing-enter);
7317
+ opacity: 1;
7318
+ transition:
7319
+ grid-template-rows var(--motion-duration-view) var(--motion-easing-enter),
7320
+ opacity var(--motion-duration-view) var(--motion-easing-enter);
7316
7321
  }
7317
7322
 
7318
- .muka-progress-accordeon__slot-wrapper--collapsed {
7323
+ .muka-progress-accordeon__panel-wrapper--collapsed {
7319
7324
  grid-template-rows: 0fr;
7325
+ opacity: 0;
7326
+ transition:
7327
+ grid-template-rows var(--motion-duration-view) var(--motion-easing-exit),
7328
+ opacity calc(var(--motion-duration-view) * 0.6) var(--motion-easing-exit);
7320
7329
  }
7321
7330
 
7322
7331
  /* The direct grid child clips and must have NO padding/border of its own —
7323
7332
  min-height:0 lets it shrink, and with no padding the 0fr track reaches a true
7324
7333
  0 height (padding on the item would leave a residual gap when collapsed). */
7325
- .muka-progress-accordeon__slot-clip {
7334
+ .muka-progress-accordeon__panel-clip {
7326
7335
  overflow: hidden;
7327
7336
  min-height: 0;
7328
7337
  }
7329
7338
 
7330
- /* The header↔content spacing lives on the inner slot (inside the clip region)
7331
- so it collapses together with the content. */
7332
- .muka-progress-accordeon__slot-wrapper .muka-progress-accordeon__slot {
7339
+ /* Header↔content spacing + slot/actions gap live inside the clip so they
7340
+ collapse together with the panel. */
7341
+ .muka-progress-accordeon__panel {
7342
+ display: flex;
7343
+ flex-direction: column;
7344
+ align-items: stretch;
7345
+ gap: var(--spacing-6);
7333
7346
  padding-top: var(--spacing-4);
7347
+ width: 100%;
7334
7348
  }
7335
7349
 
7336
7350
  /* ─── Action buttons (current state) ─────────────────────── */
@@ -7381,72 +7395,244 @@ body {
7381
7395
  }
7382
7396
 
7383
7397
 
7384
- /* ProfileBadge */
7385
- /* ProfileBadge Component Styles - Using Muka Design Tokens */
7398
+ /* Progress */
7399
+ /* Progress Component Styles - Using Muka Design Tokens */
7386
7400
 
7387
- .muka-profile-badge {
7388
- display: inline-flex;
7401
+ /* ========================================
7402
+ BAR VARIANT
7403
+ ======================================== */
7404
+
7405
+ .muka-progress--bar {
7406
+ display: flex;
7389
7407
  align-items: center;
7390
- font-family: var(--text-body-base-regular-fontFamily);
7408
+ gap: var(--spacing-2);
7409
+ width: 100%;
7391
7410
  }
7392
7411
 
7393
- /* Size variants */
7394
- .muka-profile-badge--lg {
7395
- gap: var(--spacing-4); /* 16px */
7412
+ .muka-progress--bar .muka-progress__track {
7413
+ flex: 1;
7414
+ background-color: var(--color-surface-level1);
7415
+ border-radius: var(--border-radius-full);
7416
+ overflow: hidden;
7396
7417
  }
7397
7418
 
7398
- .muka-profile-badge--md {
7399
- gap: var(--spacing-3); /* 12px */
7419
+ .muka-progress--bar.muka-progress--sm .muka-progress__track {
7420
+ height: var(--progress-size-bar-height-sm);
7400
7421
  }
7401
7422
 
7402
- .muka-profile-badge__avatar {
7403
- flex-shrink: 0;
7423
+ .muka-progress--bar.muka-progress--md .muka-progress__track {
7424
+ height: var(--progress-size-bar-height-md);
7404
7425
  }
7405
7426
 
7406
- /* Text stack */
7407
- .muka-profile-badge__text {
7408
- display: flex;
7409
- flex-direction: column;
7410
- align-items: flex-start;
7411
- min-width: 0;
7427
+ .muka-progress--bar.muka-progress--lg .muka-progress__track {
7428
+ height: var(--progress-size-bar-height-lg);
7412
7429
  }
7413
7430
 
7414
- .muka-profile-badge__name {
7415
- font-family: var(--text-body-base-regular-fontFamily);
7416
- font-size: var(--text-body-base-regular-fontSize);
7417
- font-weight: var(--text-body-base-regular-fontWeight);
7418
- line-height: var(--text-body-base-regular-lineHeight);
7419
- color: var(--color-text-default-default);
7431
+ .muka-progress--bar .muka-progress__fill {
7432
+ height: 100%;
7433
+ background-color: var(--color-action-default);
7434
+ border-radius: var(--border-radius-full);
7435
+ transition: width 0.3s ease;
7420
7436
  }
7421
7437
 
7422
- .muka-profile-badge__email {
7423
- font-family: var(--text-body-xs-regular-fontFamily);
7424
- font-size: var(--text-body-xs-regular-fontSize);
7425
- font-weight: var(--text-body-xs-regular-fontWeight);
7426
- line-height: var(--text-body-xs-regular-lineHeight);
7427
- color: var(--color-text-subtle-default);
7438
+ .muka-progress--bar .muka-progress__label {
7439
+ flex-shrink: 0;
7440
+ font-family: var(--text-label-sm-semibold-fontFamily);
7441
+ font-weight: var(--text-label-sm-semibold-fontWeight);
7442
+ font-size: var(--text-label-sm-semibold-fontSize);
7443
+ line-height: var(--text-label-sm-semibold-lineHeight);
7444
+ color: var(--color-text-default-default);
7445
+ min-width: 3ch;
7446
+ text-align: right;
7428
7447
  }
7429
7448
 
7430
- /* Clickable state */
7431
- .muka-profile-badge--clickable {
7432
- cursor: pointer;
7433
- border: none;
7434
- background: none;
7435
- padding: 0;
7436
- text-align: left;
7437
- border-radius: var(--radius-md);
7438
- transition: opacity 0.2s ease;
7449
+ /* Indeterminate animation for bar */
7450
+ .muka-progress--bar.muka-progress--indeterminate .muka-progress__fill {
7451
+ width: 40%;
7452
+ animation: muka-progress-bar-indeterminate 1.5s ease-in-out infinite;
7439
7453
  }
7440
7454
 
7441
- .muka-profile-badge--clickable:hover {
7442
- opacity: 0.9;
7455
+ @keyframes muka-progress-bar-indeterminate {
7456
+ 0% {
7457
+ transform: translateX(-100%);
7458
+ }
7459
+ 100% {
7460
+ transform: translateX(250%);
7461
+ }
7443
7462
  }
7444
7463
 
7445
- .muka-profile-badge--clickable:active {
7446
- opacity: 0.8;
7464
+ /* ========================================
7465
+ CIRCLE VARIANT
7466
+ ======================================== */
7467
+
7468
+ .muka-progress--circle {
7469
+ position: relative;
7470
+ display: inline-flex;
7471
+ align-items: center;
7472
+ justify-content: center;
7447
7473
  }
7448
7474
 
7449
- .muka-profile-badge--clickable:focus-visible {
7475
+ .muka-progress--circle.muka-progress--sm {
7476
+ width: var(--progress-size-circle-diameter-sm);
7477
+ height: var(--progress-size-circle-diameter-sm);
7478
+ }
7479
+
7480
+ .muka-progress--circle.muka-progress--md {
7481
+ width: var(--progress-size-circle-diameter-md);
7482
+ height: var(--progress-size-circle-diameter-md);
7483
+ }
7484
+
7485
+ .muka-progress--circle.muka-progress--lg {
7486
+ width: var(--progress-size-circle-diameter-lg);
7487
+ height: var(--progress-size-circle-diameter-lg);
7488
+ }
7489
+
7490
+ .muka-progress__circle {
7491
+ width: 100%;
7492
+ height: 100%;
7493
+ transform: rotate(-90deg);
7494
+ }
7495
+
7496
+ .muka-progress--circle .muka-progress__track {
7497
+ fill: none;
7498
+ stroke: var(--color-surface-level1);
7499
+ }
7500
+
7501
+ .muka-progress--circle.muka-progress--sm .muka-progress__track,
7502
+ .muka-progress--circle.muka-progress--sm .muka-progress__fill {
7503
+ stroke-width: var(--progress-size-circle-strokeWidth-sm);
7504
+ }
7505
+
7506
+ .muka-progress--circle.muka-progress--md .muka-progress__track,
7507
+ .muka-progress--circle.muka-progress--md .muka-progress__fill {
7508
+ stroke-width: var(--progress-size-circle-strokeWidth-md);
7509
+ }
7510
+
7511
+ .muka-progress--circle.muka-progress--lg .muka-progress__track,
7512
+ .muka-progress--circle.muka-progress--lg .muka-progress__fill {
7513
+ stroke-width: var(--progress-size-circle-strokeWidth-lg);
7514
+ }
7515
+
7516
+ .muka-progress--circle .muka-progress__fill {
7517
+ fill: none;
7518
+ stroke: var(--color-action-default);
7519
+ stroke-linecap: round;
7520
+ transition: stroke-dashoffset 0.3s ease;
7521
+ }
7522
+
7523
+ .muka-progress--circle .muka-progress__label {
7524
+ position: absolute;
7525
+ font-family: var(--text-label-sm-semibold-fontFamily);
7526
+ font-weight: var(--text-label-sm-semibold-fontWeight);
7527
+ color: var(--color-text-default-default);
7528
+ }
7529
+
7530
+ .muka-progress--circle.muka-progress--sm .muka-progress__label {
7531
+ font-size: var(--text-label-sm-semibold-fontSize);
7532
+ }
7533
+
7534
+ .muka-progress--circle.muka-progress--md .muka-progress__label {
7535
+ font-size: var(--text-label-md-semibold-fontSize);
7536
+ }
7537
+
7538
+ .muka-progress--circle.muka-progress--lg .muka-progress__label {
7539
+ font-size: var(--text-label-lg-semibold-fontSize);
7540
+ }
7541
+
7542
+ /* Indeterminate animation for circle */
7543
+ .muka-progress--circle.muka-progress--indeterminate .muka-progress__circle {
7544
+ animation: muka-progress-circle-rotate 2s linear infinite;
7545
+ }
7546
+
7547
+ .muka-progress--circle.muka-progress--indeterminate .muka-progress__fill {
7548
+ animation: muka-progress-circle-dash 1.5s ease-in-out infinite;
7549
+ }
7550
+
7551
+ @keyframes muka-progress-circle-rotate {
7552
+ 100% {
7553
+ transform: rotate(270deg);
7554
+ }
7555
+ }
7556
+
7557
+ @keyframes muka-progress-circle-dash {
7558
+ 0% {
7559
+ stroke-dashoffset: 220;
7560
+ }
7561
+ 50% {
7562
+ stroke-dashoffset: 70;
7563
+ }
7564
+ 100% {
7565
+ stroke-dashoffset: 220;
7566
+ }
7567
+ }
7568
+
7569
+
7570
+ /* ProfileBadge */
7571
+ /* ProfileBadge Component Styles - Using Muka Design Tokens */
7572
+
7573
+ .muka-profile-badge {
7574
+ display: inline-flex;
7575
+ align-items: center;
7576
+ font-family: var(--text-body-base-regular-fontFamily);
7577
+ }
7578
+
7579
+ /* Size variants */
7580
+ .muka-profile-badge--lg {
7581
+ gap: var(--spacing-4); /* 16px */
7582
+ }
7583
+
7584
+ .muka-profile-badge--md {
7585
+ gap: var(--spacing-3); /* 12px */
7586
+ }
7587
+
7588
+ .muka-profile-badge__avatar {
7589
+ flex-shrink: 0;
7590
+ }
7591
+
7592
+ /* Text stack */
7593
+ .muka-profile-badge__text {
7594
+ display: flex;
7595
+ flex-direction: column;
7596
+ align-items: flex-start;
7597
+ min-width: 0;
7598
+ }
7599
+
7600
+ .muka-profile-badge__name {
7601
+ font-family: var(--text-body-base-regular-fontFamily);
7602
+ font-size: var(--text-body-base-regular-fontSize);
7603
+ font-weight: var(--text-body-base-regular-fontWeight);
7604
+ line-height: var(--text-body-base-regular-lineHeight);
7605
+ color: var(--color-text-default-default);
7606
+ }
7607
+
7608
+ .muka-profile-badge__email {
7609
+ font-family: var(--text-body-xs-regular-fontFamily);
7610
+ font-size: var(--text-body-xs-regular-fontSize);
7611
+ font-weight: var(--text-body-xs-regular-fontWeight);
7612
+ line-height: var(--text-body-xs-regular-lineHeight);
7613
+ color: var(--color-text-subtle-default);
7614
+ }
7615
+
7616
+ /* Clickable state */
7617
+ .muka-profile-badge--clickable {
7618
+ cursor: pointer;
7619
+ border: none;
7620
+ background: none;
7621
+ padding: 0;
7622
+ text-align: left;
7623
+ border-radius: var(--radius-md);
7624
+ transition: opacity 0.2s ease;
7625
+ }
7626
+
7627
+ .muka-profile-badge--clickable:hover {
7628
+ opacity: 0.9;
7629
+ }
7630
+
7631
+ .muka-profile-badge--clickable:active {
7632
+ opacity: 0.8;
7633
+ }
7634
+
7635
+ .muka-profile-badge--clickable:focus-visible {
7450
7636
  outline: 2px solid var(--color-border-focus);
7451
7637
  outline-offset: 2px;
7452
7638
  }
@@ -7549,37 +7735,6 @@ body {
7549
7735
  }
7550
7736
 
7551
7737
 
7552
- /* Popover */
7553
- /* Popover Component Styles */
7554
-
7555
- .muka-popover__content {
7556
- background-color: var(--color-surface-level3);
7557
- border: var(--border-width-regular) solid var(--color-border-default);
7558
- border-radius: var(--radius-md);
7559
- padding: var(--spacing-4);
7560
- box-shadow: var(--shadow-level3);
7561
- max-width: 20rem;
7562
- z-index: 50;
7563
- animation: muka-popover-fade-in 150ms ease;
7564
- }
7565
-
7566
- @keyframes muka-popover-fade-in {
7567
- from {
7568
- opacity: 0;
7569
- transform: scale(0.96);
7570
- }
7571
- to {
7572
- opacity: 1;
7573
- transform: scale(1);
7574
- }
7575
- }
7576
-
7577
- /* Arrow */
7578
- .muka-popover__arrow {
7579
- fill: var(--color-surface-level3);
7580
- }
7581
-
7582
-
7583
7738
  /* PieChart */
7584
7739
  /* PieChart Component Styles - Using Muka Design Tokens */
7585
7740
 
@@ -7677,6 +7832,37 @@ body {
7677
7832
  }
7678
7833
 
7679
7834
 
7835
+ /* Popover */
7836
+ /* Popover Component Styles */
7837
+
7838
+ .muka-popover__content {
7839
+ background-color: var(--color-surface-level3);
7840
+ border: var(--border-width-regular) solid var(--color-border-default);
7841
+ border-radius: var(--radius-md);
7842
+ padding: var(--spacing-4);
7843
+ box-shadow: var(--shadow-level3);
7844
+ max-width: 20rem;
7845
+ z-index: 50;
7846
+ animation: muka-popover-fade-in 150ms ease;
7847
+ }
7848
+
7849
+ @keyframes muka-popover-fade-in {
7850
+ from {
7851
+ opacity: 0;
7852
+ transform: scale(0.96);
7853
+ }
7854
+ to {
7855
+ opacity: 1;
7856
+ transform: scale(1);
7857
+ }
7858
+ }
7859
+
7860
+ /* Arrow */
7861
+ .muka-popover__arrow {
7862
+ fill: var(--color-surface-level3);
7863
+ }
7864
+
7865
+
7680
7866
  /* PhotoUploader */
7681
7867
  /* PhotoUploader Component Styles - Using Muka Design Tokens */
7682
7868
 
@@ -7722,7 +7908,7 @@ body {
7722
7908
  padding: 0;
7723
7909
  }
7724
7910
 
7725
- /* ─── Drop zone card ──────────────────────────────────── */
7911
+ /* ─── Drop zone card (button + "or drop here") ────────── */
7726
7912
  .muka-photo-uploader__dropzone {
7727
7913
  display: flex;
7728
7914
  flex-direction: column;
@@ -7746,24 +7932,12 @@ body {
7746
7932
  background-color: var(--color-surface-level1);
7747
7933
  }
7748
7934
 
7749
- .muka-photo-uploader__dropzone:focus-visible {
7750
- outline: 2px solid var(--color-border-focus);
7751
- outline-offset: 2px;
7752
- }
7753
-
7754
- .muka-photo-uploader__dropzone-icon {
7755
- display: flex;
7756
- align-items: center;
7757
- justify-content: center;
7758
- color: var(--color-icon-subtle-default);
7759
- }
7760
-
7761
7935
  .muka-photo-uploader__dropzone-text {
7762
- font-family: var(--text-body-base-regular-fontFamily);
7763
- font-size: var(--text-body-base-regular-fontSize);
7764
- font-weight: var(--text-body-base-regular-fontWeight);
7765
- line-height: var(--text-body-base-regular-lineHeight);
7766
- color: var(--color-text-subtle-default);
7936
+ font-family: var(--text-subheading-sm-fontFamily);
7937
+ font-size: var(--text-subheading-sm-fontSize);
7938
+ font-weight: var(--text-subheading-sm-fontWeight);
7939
+ line-height: var(--text-subheading-sm-lineHeight);
7940
+ color: var(--color-text-default-default);
7767
7941
  }
7768
7942
 
7769
7943
  /* ─── Disabled ────────────────────────────────────────── */
@@ -7805,187 +7979,15 @@ body {
7805
7979
  }
7806
7980
 
7807
7981
 
7808
- /* Progress */
7809
- /* Progress Component Styles - Using Muka Design Tokens */
7810
-
7811
- /* ========================================
7812
- BAR VARIANT
7813
- ======================================== */
7982
+ /* PhotoDraftStrip */
7983
+ /* PhotoDraftStrip Component Styles */
7814
7984
 
7815
- .muka-progress--bar {
7985
+ .muka-photo-draft-strip {
7816
7986
  display: flex;
7817
7987
  align-items: center;
7818
- gap: var(--spacing-2);
7988
+ gap: var(--spacing-3);
7819
7989
  width: 100%;
7820
- }
7821
-
7822
- .muka-progress--bar .muka-progress__track {
7823
- flex: 1;
7824
- background-color: var(--color-surface-level1);
7825
- border-radius: var(--border-radius-full);
7826
- overflow: hidden;
7827
- }
7828
-
7829
- .muka-progress--bar.muka-progress--sm .muka-progress__track {
7830
- height: var(--progress-size-bar-height-sm);
7831
- }
7832
-
7833
- .muka-progress--bar.muka-progress--md .muka-progress__track {
7834
- height: var(--progress-size-bar-height-md);
7835
- }
7836
-
7837
- .muka-progress--bar.muka-progress--lg .muka-progress__track {
7838
- height: var(--progress-size-bar-height-lg);
7839
- }
7840
-
7841
- .muka-progress--bar .muka-progress__fill {
7842
- height: 100%;
7843
- background-color: var(--color-action-default);
7844
- border-radius: var(--border-radius-full);
7845
- transition: width 0.3s ease;
7846
- }
7847
-
7848
- .muka-progress--bar .muka-progress__label {
7849
- flex-shrink: 0;
7850
- font-family: var(--text-label-sm-semibold-fontFamily);
7851
- font-weight: var(--text-label-sm-semibold-fontWeight);
7852
- font-size: var(--text-label-sm-semibold-fontSize);
7853
- line-height: var(--text-label-sm-semibold-lineHeight);
7854
- color: var(--color-text-default-default);
7855
- min-width: 3ch;
7856
- text-align: right;
7857
- }
7858
-
7859
- /* Indeterminate animation for bar */
7860
- .muka-progress--bar.muka-progress--indeterminate .muka-progress__fill {
7861
- width: 40%;
7862
- animation: muka-progress-bar-indeterminate 1.5s ease-in-out infinite;
7863
- }
7864
-
7865
- @keyframes muka-progress-bar-indeterminate {
7866
- 0% {
7867
- transform: translateX(-100%);
7868
- }
7869
- 100% {
7870
- transform: translateX(250%);
7871
- }
7872
- }
7873
-
7874
- /* ========================================
7875
- CIRCLE VARIANT
7876
- ======================================== */
7877
-
7878
- .muka-progress--circle {
7879
- position: relative;
7880
- display: inline-flex;
7881
- align-items: center;
7882
- justify-content: center;
7883
- }
7884
-
7885
- .muka-progress--circle.muka-progress--sm {
7886
- width: var(--progress-size-circle-diameter-sm);
7887
- height: var(--progress-size-circle-diameter-sm);
7888
- }
7889
-
7890
- .muka-progress--circle.muka-progress--md {
7891
- width: var(--progress-size-circle-diameter-md);
7892
- height: var(--progress-size-circle-diameter-md);
7893
- }
7894
-
7895
- .muka-progress--circle.muka-progress--lg {
7896
- width: var(--progress-size-circle-diameter-lg);
7897
- height: var(--progress-size-circle-diameter-lg);
7898
- }
7899
-
7900
- .muka-progress__circle {
7901
- width: 100%;
7902
- height: 100%;
7903
- transform: rotate(-90deg);
7904
- }
7905
-
7906
- .muka-progress--circle .muka-progress__track {
7907
- fill: none;
7908
- stroke: var(--color-surface-level1);
7909
- }
7910
-
7911
- .muka-progress--circle.muka-progress--sm .muka-progress__track,
7912
- .muka-progress--circle.muka-progress--sm .muka-progress__fill {
7913
- stroke-width: var(--progress-size-circle-strokeWidth-sm);
7914
- }
7915
-
7916
- .muka-progress--circle.muka-progress--md .muka-progress__track,
7917
- .muka-progress--circle.muka-progress--md .muka-progress__fill {
7918
- stroke-width: var(--progress-size-circle-strokeWidth-md);
7919
- }
7920
-
7921
- .muka-progress--circle.muka-progress--lg .muka-progress__track,
7922
- .muka-progress--circle.muka-progress--lg .muka-progress__fill {
7923
- stroke-width: var(--progress-size-circle-strokeWidth-lg);
7924
- }
7925
-
7926
- .muka-progress--circle .muka-progress__fill {
7927
- fill: none;
7928
- stroke: var(--color-action-default);
7929
- stroke-linecap: round;
7930
- transition: stroke-dashoffset 0.3s ease;
7931
- }
7932
-
7933
- .muka-progress--circle .muka-progress__label {
7934
- position: absolute;
7935
- font-family: var(--text-label-sm-semibold-fontFamily);
7936
- font-weight: var(--text-label-sm-semibold-fontWeight);
7937
- color: var(--color-text-default-default);
7938
- }
7939
-
7940
- .muka-progress--circle.muka-progress--sm .muka-progress__label {
7941
- font-size: var(--text-label-sm-semibold-fontSize);
7942
- }
7943
-
7944
- .muka-progress--circle.muka-progress--md .muka-progress__label {
7945
- font-size: var(--text-label-md-semibold-fontSize);
7946
- }
7947
-
7948
- .muka-progress--circle.muka-progress--lg .muka-progress__label {
7949
- font-size: var(--text-label-lg-semibold-fontSize);
7950
- }
7951
-
7952
- /* Indeterminate animation for circle */
7953
- .muka-progress--circle.muka-progress--indeterminate .muka-progress__circle {
7954
- animation: muka-progress-circle-rotate 2s linear infinite;
7955
- }
7956
-
7957
- .muka-progress--circle.muka-progress--indeterminate .muka-progress__fill {
7958
- animation: muka-progress-circle-dash 1.5s ease-in-out infinite;
7959
- }
7960
-
7961
- @keyframes muka-progress-circle-rotate {
7962
- 100% {
7963
- transform: rotate(270deg);
7964
- }
7965
- }
7966
-
7967
- @keyframes muka-progress-circle-dash {
7968
- 0% {
7969
- stroke-dashoffset: 220;
7970
- }
7971
- 50% {
7972
- stroke-dashoffset: 70;
7973
- }
7974
- 100% {
7975
- stroke-dashoffset: 220;
7976
- }
7977
- }
7978
-
7979
-
7980
- /* PhotoDraftStrip */
7981
- /* PhotoDraftStrip Component Styles */
7982
-
7983
- .muka-photo-draft-strip {
7984
- display: flex;
7985
- align-items: center;
7986
- gap: var(--spacing-3);
7987
- width: 100%;
7988
- padding: var(--spacing-2) 0;
7990
+ padding: var(--spacing-2) 0;
7989
7991
  }
7990
7992
 
7991
7993
  .muka-photo-draft-strip__track {
@@ -8737,7 +8739,10 @@ body {
8737
8739
  max-width: 100%;
8738
8740
  max-height: 100%;
8739
8741
  object-fit: contain;
8740
- pointer-events: none;
8742
+ /* The image takes touches, so a long press opens the OS menu (save, share,
8743
+ copy). The swipe still works: pointer events bubble to the stage, and a
8744
+ long press doesn't move far enough to start a drag. */
8745
+ -webkit-touch-callout: default;
8741
8746
  }
8742
8747
 
8743
8748
  /* ─── Previous / next: devices that can hover ─────────── */
@@ -10193,207 +10198,66 @@ li.muka-listitem {
10193
10198
  }
10194
10199
 
10195
10200
 
10196
- /* EmptyState */
10197
- /* EmptyState Component Styles - Using Muka Design Tokens */
10201
+ /* EmojiPicker */
10202
+ /* EmojiPicker Component Styles */
10198
10203
 
10199
- .muka-emptystate {
10200
- display: flex;
10201
- flex-direction: column;
10202
- align-items: center;
10203
- justify-content: center;
10204
- gap: var(--emptystate-container-gap);
10205
- max-width: var(--emptystate-container-maxWidth);
10206
- margin: 0 auto;
10207
- text-align: center;
10204
+ .muka-emoji-picker {
10205
+ display: grid;
10206
+ grid-template-columns: repeat(8, 1fr);
10207
+ gap: var(--spacing-1);
10208
+ padding: var(--spacing-2);
10209
+ max-height: 12rem;
10210
+ overflow-y: auto;
10211
+ background: var(--color-surface-level2);
10212
+ border: var(--border-width-regular, 1px) solid var(--color-border-default);
10213
+ border-radius: var(--radius-lg);
10214
+ box-shadow: var(--menu-content-shadow, 0 4px 12px rgba(0, 0, 0, 0.12));
10208
10215
  }
10209
10216
 
10210
- /* Alignment variants */
10211
- .muka-emptystate--left {
10212
- align-items: flex-start;
10213
- text-align: left;
10217
+ .muka-emoji-picker__glyph {
10218
+ font-size: 1.25rem;
10219
+ line-height: 1;
10214
10220
  }
10215
10221
 
10216
- /* Size variants */
10217
- .muka-emptystate--sm {
10218
- padding: var(--emptystate-container-padding-sm);
10219
- }
10220
10222
 
10221
- .muka-emptystate--md {
10222
- padding: var(--emptystate-container-padding-md);
10223
- }
10223
+ /* DropdownSelect */
10224
+ /* DropdownSelect — Figma Dropdown Menu form field (Menu + chips) */
10224
10225
 
10225
- .muka-emptystate--lg {
10226
- padding: var(--emptystate-container-padding-lg);
10226
+ .muka-dropdown-select {
10227
+ display: inline-flex;
10228
+ flex-direction: column;
10229
+ gap: var(--spacing-2);
10230
+ min-width: 200px;
10227
10231
  }
10228
10232
 
10229
- /* Visual (icon or illustration) */
10230
- .muka-emptystate__visual {
10231
- display: flex;
10232
- align-items: center;
10233
- justify-content: center;
10234
- color: var(--emptystate-icon-color);
10235
- flex-shrink: 0;
10233
+ .muka-dropdown-select--full-width {
10234
+ width: 100%;
10236
10235
  }
10237
10236
 
10238
- .muka-emptystate--sm .muka-emptystate__visual {
10239
- width: var(--emptystate-icon-size-sm);
10240
- height: var(--emptystate-icon-size-sm);
10237
+ .muka-dropdown-select__label {
10238
+ color: var(--color-text-default-default);
10239
+ cursor: pointer;
10241
10240
  }
10242
10241
 
10243
- .muka-emptystate--md .muka-emptystate__visual {
10244
- width: var(--emptystate-icon-size-md);
10245
- height: var(--emptystate-icon-size-md);
10242
+ .muka-dropdown-select__label--sm {
10243
+ font-family: var(--text-label-sm-semibold-fontFamily);
10244
+ font-weight: var(--text-label-sm-semibold-fontWeight);
10245
+ font-size: var(--text-label-sm-semibold-fontSize);
10246
+ line-height: var(--text-label-sm-semibold-lineHeight);
10246
10247
  }
10247
10248
 
10248
- .muka-emptystate--lg .muka-emptystate__visual {
10249
- width: var(--emptystate-icon-size-lg);
10250
- height: var(--emptystate-icon-size-lg);
10249
+ .muka-dropdown-select__label--md {
10250
+ font-family: var(--text-label-md-semibold-fontFamily);
10251
+ font-weight: var(--text-label-md-semibold-fontWeight);
10252
+ font-size: var(--text-label-md-semibold-fontSize);
10253
+ line-height: var(--text-label-md-semibold-lineHeight);
10251
10254
  }
10252
10255
 
10253
- .muka-emptystate__visual svg {
10254
- width: 100%;
10255
- height: 100%;
10256
- }
10257
-
10258
- .muka-emptystate__visual img {
10259
- width: 100%;
10260
- height: 100%;
10261
- object-fit: contain;
10262
- }
10263
-
10264
- /* Content */
10265
- .muka-emptystate__content {
10266
- display: flex;
10267
- flex-direction: column;
10268
- gap: var(--spacing-2);
10269
- }
10270
-
10271
- .muka-emptystate--left .muka-emptystate__content {
10272
- align-items: flex-start;
10273
- }
10274
-
10275
- /* Title */
10276
- .muka-emptystate__title {
10277
- color: var(--emptystate-title-color);
10278
- margin: 0;
10279
- font-family: var(--text-heading-sm-fontFamily);
10280
- font-weight: var(--text-heading-sm-fontWeight);
10281
- font-size: var(--text-heading-sm-fontSize);
10282
- line-height: var(--text-heading-sm-lineHeight);
10283
- }
10284
-
10285
- .muka-emptystate--sm .muka-emptystate__title {
10286
- font-family: var(--text-label-lg-semibold-fontFamily);
10287
- font-weight: var(--text-label-lg-semibold-fontWeight);
10288
- font-size: var(--text-label-lg-semibold-fontSize);
10289
- line-height: var(--text-label-lg-semibold-lineHeight);
10290
- }
10291
-
10292
- .muka-emptystate--lg .muka-emptystate__title {
10293
- font-family: var(--text-heading-md-fontFamily);
10294
- font-weight: var(--text-heading-md-fontWeight);
10295
- font-size: var(--text-heading-md-fontSize);
10296
- line-height: var(--text-heading-md-lineHeight);
10297
- }
10298
-
10299
- /* Description */
10300
- .muka-emptystate__description {
10301
- color: var(--emptystate-description-color);
10302
- margin: 0;
10303
- font-family: var(--text-body-sm-regular-fontFamily);
10304
- font-weight: var(--text-body-sm-regular-fontWeight);
10305
- font-size: var(--text-body-sm-regular-fontSize);
10306
- line-height: var(--text-body-sm-regular-lineHeight);
10307
- }
10308
-
10309
- .muka-emptystate--md .muka-emptystate__description {
10310
- font-family: var(--text-body-base-regular-fontFamily);
10311
- font-weight: var(--text-body-base-regular-fontWeight);
10312
- font-size: var(--text-body-base-regular-fontSize);
10313
- line-height: var(--text-body-base-regular-lineHeight);
10314
- }
10315
-
10316
- .muka-emptystate--lg .muka-emptystate__description {
10317
- font-family: var(--text-body-lg-regular-fontFamily);
10318
- font-weight: var(--text-body-lg-regular-fontWeight);
10319
- font-size: var(--text-body-lg-regular-fontSize);
10320
- line-height: var(--text-body-lg-regular-lineHeight);
10321
- }
10322
-
10323
- /* Actions */
10324
- .muka-emptystate__actions {
10325
- display: flex;
10326
- gap: var(--emptystate-actions-gap);
10327
- margin-top: var(--emptystate-actions-marginTop);
10328
- flex-wrap: wrap;
10329
- justify-content: center;
10330
- }
10331
-
10332
- .muka-emptystate--left .muka-emptystate__actions {
10333
- justify-content: flex-start;
10334
- }
10335
-
10336
-
10337
- /* EmojiPicker */
10338
- /* EmojiPicker Component Styles */
10339
-
10340
- .muka-emoji-picker {
10341
- display: grid;
10342
- grid-template-columns: repeat(8, 1fr);
10343
- gap: var(--spacing-1);
10344
- padding: var(--spacing-2);
10345
- max-height: 12rem;
10346
- overflow-y: auto;
10347
- background: var(--color-surface-level2);
10348
- border: var(--border-width-regular, 1px) solid var(--color-border-default);
10349
- border-radius: var(--radius-lg);
10350
- box-shadow: var(--menu-content-shadow, 0 4px 12px rgba(0, 0, 0, 0.12));
10351
- }
10352
-
10353
- .muka-emoji-picker__glyph {
10354
- font-size: 1.25rem;
10355
- line-height: 1;
10356
- }
10357
-
10358
-
10359
- /* DropdownSelect */
10360
- /* DropdownSelect — Figma Dropdown Menu form field (Menu + chips) */
10361
-
10362
- .muka-dropdown-select {
10363
- display: inline-flex;
10364
- flex-direction: column;
10365
- gap: var(--spacing-2);
10366
- min-width: 200px;
10367
- }
10368
-
10369
- .muka-dropdown-select--full-width {
10370
- width: 100%;
10371
- }
10372
-
10373
- .muka-dropdown-select__label {
10374
- color: var(--color-text-default-default);
10375
- cursor: pointer;
10376
- }
10377
-
10378
- .muka-dropdown-select__label--sm {
10379
- font-family: var(--text-label-sm-semibold-fontFamily);
10380
- font-weight: var(--text-label-sm-semibold-fontWeight);
10381
- font-size: var(--text-label-sm-semibold-fontSize);
10382
- line-height: var(--text-label-sm-semibold-lineHeight);
10383
- }
10384
-
10385
- .muka-dropdown-select__label--md {
10386
- font-family: var(--text-label-md-semibold-fontFamily);
10387
- font-weight: var(--text-label-md-semibold-fontWeight);
10388
- font-size: var(--text-label-md-semibold-fontSize);
10389
- line-height: var(--text-label-md-semibold-lineHeight);
10390
- }
10391
-
10392
- .muka-dropdown-select__label--lg {
10393
- font-family: var(--text-label-lg-semibold-fontFamily);
10394
- font-weight: var(--text-label-lg-semibold-fontWeight);
10395
- font-size: var(--text-label-lg-semibold-fontSize);
10396
- line-height: var(--text-label-lg-semibold-lineHeight);
10256
+ .muka-dropdown-select__label--lg {
10257
+ font-family: var(--text-label-lg-semibold-fontFamily);
10258
+ font-weight: var(--text-label-lg-semibold-fontWeight);
10259
+ font-size: var(--text-label-lg-semibold-fontSize);
10260
+ line-height: var(--text-label-lg-semibold-lineHeight);
10397
10261
  }
10398
10262
 
10399
10263
  .muka-dropdown-select__required {
@@ -11317,92 +11181,233 @@ li.muka-listitem {
11317
11181
  }
11318
11182
 
11319
11183
 
11320
- /* DatePicker */
11321
- /* DatePicker — compact native date field. */
11322
- /* Field/label/helper styling is inherited from ../Input/Input.css. */
11184
+ /* EmptyState */
11185
+ /* EmptyState Component Styles - Using Muka Design Tokens */
11323
11186
 
11324
- /* Adopt the field typography on the native date input. */
11325
- .muka-datepicker__field .muka-input__native {
11326
- font-family: var(--text-input-md-fontFamily);
11327
- font-size: var(--text-input-md-fontSize);
11328
- line-height: var(--text-input-md-lineHeight);
11187
+ .muka-emptystate {
11188
+ display: flex;
11189
+ flex-direction: column;
11190
+ align-items: center;
11191
+ justify-content: center;
11192
+ gap: var(--emptystate-container-gap);
11193
+ max-width: var(--emptystate-container-maxWidth);
11194
+ margin: 0 auto;
11195
+ text-align: center;
11329
11196
  }
11330
11197
 
11331
- .muka-datepicker__field--sm .muka-input__native {
11332
- font-family: var(--text-input-sm-fontFamily);
11333
- font-size: var(--text-input-sm-fontSize);
11334
- line-height: var(--text-input-sm-lineHeight);
11198
+ /* Alignment variants */
11199
+ .muka-emptystate--left {
11200
+ align-items: flex-start;
11201
+ text-align: left;
11335
11202
  }
11336
11203
 
11337
- /* Tint the browser calendar indicator to match the field foreground. */
11338
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
11339
- cursor: pointer;
11340
- opacity: 0.6;
11204
+ /* Size variants */
11205
+ .muka-emptystate--sm {
11206
+ padding: var(--emptystate-container-padding-sm);
11341
11207
  }
11342
11208
 
11343
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
11344
- opacity: 1;
11209
+ .muka-emptystate--md {
11210
+ padding: var(--emptystate-container-padding-md);
11345
11211
  }
11346
11212
 
11347
- .muka-datepicker__field .muka-input__native:disabled {
11348
- cursor: not-allowed;
11213
+ .muka-emptystate--lg {
11214
+ padding: var(--emptystate-container-padding-lg);
11349
11215
  }
11350
11216
 
11351
-
11352
- /* DataTable */
11353
- /* DataTable Component Styles - Using Muka Design Tokens */
11354
-
11355
- .muka-data-table-wrapper {
11356
- width: 100%;
11357
- overflow-x: auto;
11358
- -webkit-overflow-scrolling: touch;
11217
+ /* Visual (icon or illustration) */
11218
+ .muka-emptystate__visual {
11219
+ display: flex;
11220
+ align-items: center;
11221
+ justify-content: center;
11222
+ color: var(--emptystate-icon-color);
11223
+ flex-shrink: 0;
11359
11224
  }
11360
11225
 
11361
- .muka-data-table {
11362
- /* Density-driven cell padding (overridden per size below). */
11363
- --dt-pad-x: var(--datatable-cell-padding-x-md);
11364
- --dt-pad-y: var(--datatable-cell-padding-y-md);
11226
+ .muka-emptystate--sm .muka-emptystate__visual {
11227
+ width: var(--emptystate-icon-size-sm);
11228
+ height: var(--emptystate-icon-size-sm);
11229
+ }
11365
11230
 
11366
- width: 100%;
11367
- border-collapse: collapse;
11368
- border-spacing: 0;
11369
- /* auto layout so per-column min/max widths are honored and unsized columns flex */
11370
- table-layout: auto;
11371
- background-color: var(--datatable-row-background);
11372
- color: var(--datatable-row-foreground);
11231
+ .muka-emptystate--md .muka-emptystate__visual {
11232
+ width: var(--emptystate-icon-size-md);
11233
+ height: var(--emptystate-icon-size-md);
11373
11234
  }
11374
11235
 
11375
- .muka-data-table--size-sm {
11376
- --dt-pad-x: var(--datatable-cell-padding-x-sm);
11377
- --dt-pad-y: var(--datatable-cell-padding-y-sm);
11236
+ .muka-emptystate--lg .muka-emptystate__visual {
11237
+ width: var(--emptystate-icon-size-lg);
11238
+ height: var(--emptystate-icon-size-lg);
11378
11239
  }
11379
11240
 
11380
- .muka-data-table--size-lg {
11381
- --dt-pad-x: var(--datatable-cell-padding-x-lg);
11382
- --dt-pad-y: var(--datatable-cell-padding-y-lg);
11241
+ .muka-emptystate__visual svg {
11242
+ width: 100%;
11243
+ height: 100%;
11383
11244
  }
11384
11245
 
11385
- .muka-data-table__caption {
11386
- padding: var(--dt-pad-y) var(--dt-pad-x);
11387
- font-family: var(--text-body-base-bold-fontFamily);
11388
- font-weight: var(--text-body-base-bold-fontWeight);
11389
- font-size: var(--text-body-base-bold-fontSize);
11390
- line-height: var(--text-body-base-bold-lineHeight);
11391
- text-align: left;
11392
- caption-side: top;
11246
+ .muka-emptystate__visual img {
11247
+ width: 100%;
11248
+ height: 100%;
11249
+ object-fit: contain;
11393
11250
  }
11394
11251
 
11395
- /* ========================================
11396
- HEADER
11397
- ======================================== */
11252
+ /* Content */
11253
+ .muka-emptystate__content {
11254
+ display: flex;
11255
+ flex-direction: column;
11256
+ gap: var(--spacing-2);
11257
+ }
11398
11258
 
11399
- .muka-data-table__head {
11400
- border-bottom: var(--border-width-regular, 1px) solid var(--datatable-header-border);
11259
+ .muka-emptystate--left .muka-emptystate__content {
11260
+ align-items: flex-start;
11401
11261
  }
11402
11262
 
11403
- .muka-data-table__th {
11404
- background-color: var(--datatable-header-background);
11405
- padding: var(--datatable-cell-padding-y-sm) var(--dt-pad-x);
11263
+ /* Title */
11264
+ .muka-emptystate__title {
11265
+ color: var(--emptystate-title-color);
11266
+ margin: 0;
11267
+ font-family: var(--text-heading-sm-fontFamily);
11268
+ font-weight: var(--text-heading-sm-fontWeight);
11269
+ font-size: var(--text-heading-sm-fontSize);
11270
+ line-height: var(--text-heading-sm-lineHeight);
11271
+ }
11272
+
11273
+ .muka-emptystate--sm .muka-emptystate__title {
11274
+ font-family: var(--text-label-lg-semibold-fontFamily);
11275
+ font-weight: var(--text-label-lg-semibold-fontWeight);
11276
+ font-size: var(--text-label-lg-semibold-fontSize);
11277
+ line-height: var(--text-label-lg-semibold-lineHeight);
11278
+ }
11279
+
11280
+ .muka-emptystate--lg .muka-emptystate__title {
11281
+ font-family: var(--text-heading-md-fontFamily);
11282
+ font-weight: var(--text-heading-md-fontWeight);
11283
+ font-size: var(--text-heading-md-fontSize);
11284
+ line-height: var(--text-heading-md-lineHeight);
11285
+ }
11286
+
11287
+ /* Description */
11288
+ .muka-emptystate__description {
11289
+ color: var(--emptystate-description-color);
11290
+ margin: 0;
11291
+ font-family: var(--text-body-sm-regular-fontFamily);
11292
+ font-weight: var(--text-body-sm-regular-fontWeight);
11293
+ font-size: var(--text-body-sm-regular-fontSize);
11294
+ line-height: var(--text-body-sm-regular-lineHeight);
11295
+ }
11296
+
11297
+ .muka-emptystate--md .muka-emptystate__description {
11298
+ font-family: var(--text-body-base-regular-fontFamily);
11299
+ font-weight: var(--text-body-base-regular-fontWeight);
11300
+ font-size: var(--text-body-base-regular-fontSize);
11301
+ line-height: var(--text-body-base-regular-lineHeight);
11302
+ }
11303
+
11304
+ .muka-emptystate--lg .muka-emptystate__description {
11305
+ font-family: var(--text-body-lg-regular-fontFamily);
11306
+ font-weight: var(--text-body-lg-regular-fontWeight);
11307
+ font-size: var(--text-body-lg-regular-fontSize);
11308
+ line-height: var(--text-body-lg-regular-lineHeight);
11309
+ }
11310
+
11311
+ /* Actions */
11312
+ .muka-emptystate__actions {
11313
+ display: flex;
11314
+ gap: var(--emptystate-actions-gap);
11315
+ margin-top: var(--emptystate-actions-marginTop);
11316
+ flex-wrap: wrap;
11317
+ justify-content: center;
11318
+ }
11319
+
11320
+ .muka-emptystate--left .muka-emptystate__actions {
11321
+ justify-content: flex-start;
11322
+ }
11323
+
11324
+
11325
+ /* DatePicker */
11326
+ /* DatePicker — compact native date field. */
11327
+ /* Field/label/helper styling is inherited from ../Input/Input.css. */
11328
+
11329
+ /* Adopt the field typography on the native date input. */
11330
+ .muka-datepicker__field .muka-input__native {
11331
+ font-family: var(--text-input-md-fontFamily);
11332
+ font-size: var(--text-input-md-fontSize);
11333
+ line-height: var(--text-input-md-lineHeight);
11334
+ }
11335
+
11336
+ .muka-datepicker__field--sm .muka-input__native {
11337
+ font-family: var(--text-input-sm-fontFamily);
11338
+ font-size: var(--text-input-sm-fontSize);
11339
+ line-height: var(--text-input-sm-lineHeight);
11340
+ }
11341
+
11342
+ /* Tint the browser calendar indicator to match the field foreground. */
11343
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
11344
+ cursor: pointer;
11345
+ opacity: 0.6;
11346
+ }
11347
+
11348
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
11349
+ opacity: 1;
11350
+ }
11351
+
11352
+ .muka-datepicker__field .muka-input__native:disabled {
11353
+ cursor: not-allowed;
11354
+ }
11355
+
11356
+
11357
+ /* DataTable */
11358
+ /* DataTable Component Styles - Using Muka Design Tokens */
11359
+
11360
+ .muka-data-table-wrapper {
11361
+ width: 100%;
11362
+ overflow-x: auto;
11363
+ -webkit-overflow-scrolling: touch;
11364
+ }
11365
+
11366
+ .muka-data-table {
11367
+ /* Density-driven cell padding (overridden per size below). */
11368
+ --dt-pad-x: var(--datatable-cell-padding-x-md);
11369
+ --dt-pad-y: var(--datatable-cell-padding-y-md);
11370
+
11371
+ width: 100%;
11372
+ border-collapse: collapse;
11373
+ border-spacing: 0;
11374
+ /* auto layout so per-column min/max widths are honored and unsized columns flex */
11375
+ table-layout: auto;
11376
+ background-color: var(--datatable-row-background);
11377
+ color: var(--datatable-row-foreground);
11378
+ }
11379
+
11380
+ .muka-data-table--size-sm {
11381
+ --dt-pad-x: var(--datatable-cell-padding-x-sm);
11382
+ --dt-pad-y: var(--datatable-cell-padding-y-sm);
11383
+ }
11384
+
11385
+ .muka-data-table--size-lg {
11386
+ --dt-pad-x: var(--datatable-cell-padding-x-lg);
11387
+ --dt-pad-y: var(--datatable-cell-padding-y-lg);
11388
+ }
11389
+
11390
+ .muka-data-table__caption {
11391
+ padding: var(--dt-pad-y) var(--dt-pad-x);
11392
+ font-family: var(--text-body-base-bold-fontFamily);
11393
+ font-weight: var(--text-body-base-bold-fontWeight);
11394
+ font-size: var(--text-body-base-bold-fontSize);
11395
+ line-height: var(--text-body-base-bold-lineHeight);
11396
+ text-align: left;
11397
+ caption-side: top;
11398
+ }
11399
+
11400
+ /* ========================================
11401
+ HEADER
11402
+ ======================================== */
11403
+
11404
+ .muka-data-table__head {
11405
+ border-bottom: var(--border-width-regular, 1px) solid var(--datatable-header-border);
11406
+ }
11407
+
11408
+ .muka-data-table__th {
11409
+ background-color: var(--datatable-header-background);
11410
+ padding: var(--datatable-cell-padding-y-sm) var(--dt-pad-x);
11406
11411
  font-family: var(--text-body-base-bold-fontFamily);
11407
11412
  font-weight: var(--text-body-base-bold-fontWeight);
11408
11413
  font-size: var(--text-body-base-bold-fontSize);
@@ -12669,245 +12674,78 @@ li.muka-listitem {
12669
12674
  }
12670
12675
 
12671
12676
 
12672
- /* Checkbox */
12673
- /* Checkbox Component Styles - Using Muka Design Tokens */
12677
+ /* ChatPhotoGrid */
12678
+ /* ChatPhotoGrid Component Styles */
12674
12679
 
12675
- /* Wrapper - clickable label container */
12676
- .muka-checkbox {
12677
- display: inline-flex;
12678
- align-items: center;
12679
- gap: var(--spacing-4);
12680
- cursor: pointer;
12681
- user-select: none;
12680
+ /*
12681
+ * The grid clips to its own radius and the tiles stay square, so only the four
12682
+ * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12683
+ */
12684
+ .muka-chat-photo-grid {
12685
+ display: grid;
12686
+ gap: var(--chatphotogrid-gap);
12687
+ width: 100%;
12688
+ min-width: 0;
12689
+ overflow: hidden;
12690
+ border-radius: var(--chatphotogrid-radius);
12682
12691
  }
12683
12692
 
12684
- .muka-checkbox--disabled {
12685
- cursor: not-allowed;
12686
- opacity: 0.6;
12687
- }
12693
+ /* ─── Tiles ────────────────────────────────────────────── */
12688
12694
 
12689
- /* Control container */
12690
- .muka-checkbox__control {
12695
+ .muka-chat-photo-grid__tile {
12691
12696
  position: relative;
12692
- display: inline-flex;
12693
- align-items: center;
12694
- justify-content: center;
12695
- flex-shrink: 0;
12697
+ display: block;
12698
+ overflow: hidden;
12699
+ min-width: 0;
12700
+ padding: 0;
12701
+ margin: 0;
12702
+ border: none;
12703
+ background-color: var(--chatphotogrid-color-placeholder);
12704
+ aspect-ratio: 1 / 1;
12696
12705
  }
12697
12706
 
12698
- /* Hidden native input */
12699
- .muka-checkbox__input {
12700
- position: absolute;
12701
- width: 1px;
12702
- height: 1px;
12703
- padding: 0;
12704
- margin: -1px;
12705
- overflow: hidden;
12706
- clip: rect(0, 0, 0, 0);
12707
- white-space: nowrap;
12708
- border: 0;
12707
+ button.muka-chat-photo-grid__tile {
12708
+ cursor: pointer;
12709
+ appearance: none;
12709
12710
  }
12710
12711
 
12711
- /* Visual indicator (square) */
12712
- .muka-checkbox__indicator {
12712
+ button.muka-chat-photo-grid__tile:focus-visible {
12713
+ outline: var(--border-width-bold) solid var(--color-border-focus);
12714
+ /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12715
+ outline-offset: calc(-1 * var(--border-width-bold));
12716
+ }
12717
+
12718
+ .muka-chat-photo-grid__image {
12719
+ display: block;
12720
+ width: 100%;
12721
+ height: 100%;
12722
+ object-fit: cover;
12723
+ }
12724
+
12725
+ /* ─── Overflow tile ────────────────────────────────────── */
12726
+
12727
+ .muka-chat-photo-grid__overflow {
12728
+ position: absolute;
12729
+ inset: 0;
12713
12730
  display: flex;
12714
12731
  align-items: center;
12715
12732
  justify-content: center;
12716
- width: var(--checkbox-size-default);
12717
- height: var(--checkbox-size-default);
12718
- border-radius: var(--checkbox-radius);
12719
- background-color: var(--checkbox-color-default-background);
12720
- border: var(--border-width-regular) solid var(--checkbox-color-default-border);
12721
- transition: all 0.15s ease;
12722
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
12733
+ background-color: var(--chatphotogrid-color-overflow-background);
12734
+ color: var(--chatphotogrid-color-overflow-foreground);
12735
+ font-family: var(--text-body-2xl-regular-fontFamily);
12736
+ font-weight: var(--text-body-2xl-regular-fontWeight);
12737
+ font-size: var(--text-body-2xl-regular-fontSize);
12738
+ line-height: var(--text-body-2xl-regular-lineHeight);
12723
12739
  }
12724
12740
 
12725
- /* Size variants */
12726
- .muka-checkbox--sm .muka-checkbox__indicator {
12727
- width: var(--checkbox-size-sm);
12728
- height: var(--checkbox-size-sm);
12741
+ /* ─── Layouts ──────────────────────────────────────────── */
12742
+
12743
+ .muka-chat-photo-grid--1 {
12744
+ grid-template-columns: 1fr;
12729
12745
  }
12730
12746
 
12731
- .muka-checkbox--lg .muka-checkbox__indicator {
12732
- width: var(--checkbox-size-lg);
12733
- height: var(--checkbox-size-lg);
12734
- }
12735
-
12736
- /* Icon inside checkbox */
12737
- .muka-checkbox__icon {
12738
- width: var(--checkbox-icon-size-default);
12739
- height: var(--checkbox-icon-size-default);
12740
- color: var(--checkbox-color-default-icon);
12741
- opacity: 0;
12742
- transform: scale(0.8);
12743
- transition: opacity 0.15s ease, transform 0.15s ease;
12744
- }
12745
-
12746
- .muka-checkbox--sm .muka-checkbox__icon {
12747
- width: var(--checkbox-icon-size-sm);
12748
- height: var(--checkbox-icon-size-sm);
12749
- }
12750
-
12751
- .muka-checkbox--lg .muka-checkbox__icon {
12752
- width: var(--checkbox-icon-size-lg);
12753
- height: var(--checkbox-icon-size-lg);
12754
- }
12755
-
12756
- /* Hide indeterminate icon by default */
12757
- .muka-checkbox__icon--indeterminate {
12758
- position: absolute;
12759
- }
12760
-
12761
- /* Hover state - removed per design */
12762
-
12763
- /* Focus state */
12764
- .muka-checkbox__input:focus-visible + .muka-checkbox__indicator {
12765
- outline: 2px solid var(--color-border-focus);
12766
- outline-offset: 2px;
12767
- }
12768
-
12769
- /* Checked state */
12770
- .muka-checkbox__input:checked + .muka-checkbox__indicator {
12771
- background-color: var(--checkbox-color-checked-background);
12772
- border-color: var(--checkbox-color-checked-border);
12773
- box-shadow: none;
12774
- }
12775
-
12776
- .muka-checkbox__input:checked + .muka-checkbox__indicator .muka-checkbox__icon--check {
12777
- color: var(--checkbox-color-checked-icon);
12778
- opacity: 1;
12779
- transform: scale(1);
12780
- }
12781
-
12782
- /* Indeterminate state */
12783
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator {
12784
- background-color: var(--checkbox-color-checked-background);
12785
- border-color: var(--checkbox-color-checked-border);
12786
- box-shadow: none;
12787
- }
12788
-
12789
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--check {
12790
- opacity: 0;
12791
- }
12792
-
12793
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12794
- color: var(--checkbox-color-checked-icon);
12795
- opacity: 1;
12796
- transform: scale(1);
12797
- }
12798
-
12799
- /* Disabled state */
12800
- .muka-checkbox--disabled .muka-checkbox__indicator {
12801
- background-color: var(--checkbox-color-disabled-background);
12802
- border-color: var(--checkbox-color-disabled-border);
12803
- box-shadow: none;
12804
- }
12805
-
12806
- .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12807
- .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12808
- color: var(--checkbox-color-disabled-icon);
12809
- }
12810
-
12811
- /* Label text */
12812
- .muka-checkbox__label {
12813
- font-family: var(--text-label-lg-regular-fontFamily);
12814
- font-weight: var(--text-label-lg-regular-fontWeight);
12815
- font-size: var(--text-label-lg-regular-fontSize);
12816
- line-height: var(--text-label-lg-regular-lineHeight);
12817
- color: var(--color-text-default-default);
12818
- }
12819
-
12820
- .muka-checkbox--sm .muka-checkbox__label {
12821
- font-family: var(--text-label-md-regular-fontFamily);
12822
- font-weight: var(--text-label-md-regular-fontWeight);
12823
- font-size: var(--text-label-md-regular-fontSize);
12824
- line-height: var(--text-label-md-regular-lineHeight);
12825
- }
12826
-
12827
- .muka-checkbox--lg .muka-checkbox__label {
12828
- font-family: var(--text-label-xl-regular-fontFamily);
12829
- font-weight: var(--text-label-xl-regular-fontWeight);
12830
- font-size: var(--text-label-xl-regular-fontSize);
12831
- line-height: var(--text-label-xl-regular-lineHeight);
12832
- }
12833
-
12834
- .muka-checkbox--disabled .muka-checkbox__label {
12835
- color: var(--color-text-subtle-default);
12836
- }
12837
-
12838
-
12839
- /* ChatPhotoGrid */
12840
- /* ChatPhotoGrid Component Styles */
12841
-
12842
- /*
12843
- * The grid clips to its own radius and the tiles stay square, so only the four
12844
- * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12845
- */
12846
- .muka-chat-photo-grid {
12847
- display: grid;
12848
- gap: var(--chatphotogrid-gap);
12849
- width: 100%;
12850
- min-width: 0;
12851
- overflow: hidden;
12852
- border-radius: var(--chatphotogrid-radius);
12853
- }
12854
-
12855
- /* ─── Tiles ────────────────────────────────────────────── */
12856
-
12857
- .muka-chat-photo-grid__tile {
12858
- position: relative;
12859
- display: block;
12860
- overflow: hidden;
12861
- min-width: 0;
12862
- padding: 0;
12863
- margin: 0;
12864
- border: none;
12865
- background-color: var(--chatphotogrid-color-placeholder);
12866
- aspect-ratio: 1 / 1;
12867
- }
12868
-
12869
- button.muka-chat-photo-grid__tile {
12870
- cursor: pointer;
12871
- appearance: none;
12872
- }
12873
-
12874
- button.muka-chat-photo-grid__tile:focus-visible {
12875
- outline: var(--border-width-bold) solid var(--color-border-focus);
12876
- /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12877
- outline-offset: calc(-1 * var(--border-width-bold));
12878
- }
12879
-
12880
- .muka-chat-photo-grid__image {
12881
- display: block;
12882
- width: 100%;
12883
- height: 100%;
12884
- object-fit: cover;
12885
- }
12886
-
12887
- /* ─── Overflow tile ────────────────────────────────────── */
12888
-
12889
- .muka-chat-photo-grid__overflow {
12890
- position: absolute;
12891
- inset: 0;
12892
- display: flex;
12893
- align-items: center;
12894
- justify-content: center;
12895
- background-color: var(--chatphotogrid-color-overflow-background);
12896
- color: var(--chatphotogrid-color-overflow-foreground);
12897
- font-family: var(--text-body-2xl-regular-fontFamily);
12898
- font-weight: var(--text-body-2xl-regular-fontWeight);
12899
- font-size: var(--text-body-2xl-regular-fontSize);
12900
- line-height: var(--text-body-2xl-regular-lineHeight);
12901
- }
12902
-
12903
- /* ─── Layouts ──────────────────────────────────────────── */
12904
-
12905
- .muka-chat-photo-grid--1 {
12906
- grid-template-columns: 1fr;
12907
- }
12908
-
12909
- .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12910
- aspect-ratio: 4 / 3;
12747
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12748
+ aspect-ratio: 4 / 3;
12911
12749
  }
12912
12750
 
12913
12751
  .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
@@ -13012,393 +12850,229 @@ button.muka-chat-photo-grid__tile:focus-visible {
13012
12850
  }
13013
12851
 
13014
12852
 
13015
- /* ChatMessageList */
13016
- /* ChatMessageList Component Styles */
12853
+ /* Checkbox */
12854
+ /* Checkbox Component Styles - Using Muka Design Tokens */
13017
12855
 
13018
- .muka-chat-message-list {
13019
- flex: 1 1 auto;
13020
- min-height: 0;
13021
- width: 100%;
13022
- overflow-x: clip;
13023
- overflow-y: auto;
13024
- background-color: var(--color-surface-level3);
13025
- padding: var(--section-padding-vertical-default, var(--spacing-8))
13026
- var(--section-padding-horizontal-default, var(--spacing-4));
13027
- -webkit-overflow-scrolling: touch;
13028
- overscroll-behavior: contain;
12856
+ /* Wrapper - clickable label container */
12857
+ .muka-checkbox {
12858
+ display: inline-flex;
12859
+ align-items: center;
12860
+ gap: var(--spacing-4);
12861
+ cursor: pointer;
12862
+ user-select: none;
13029
12863
  }
13030
12864
 
13031
- .muka-chat-message-list__inner {
13032
- display: flex;
13033
- flex-direction: column;
13034
- align-items: stretch;
13035
- gap: var(--spacing-8);
13036
- width: 100%;
13037
- max-width: var(--chat-column-max-width);
13038
- margin: 0 auto;
12865
+ .muka-checkbox--disabled {
12866
+ cursor: not-allowed;
12867
+ opacity: 0.6;
13039
12868
  }
13040
12869
 
13041
- /* ─── Print ────────────────────────────────────────────── */
13042
-
13043
- @media print {
13044
- .muka-chat-message-list {
13045
- overflow: visible;
13046
- height: auto;
13047
- max-height: none;
13048
- background: none;
13049
- padding: 0;
13050
- }
13051
-
13052
- .muka-chat-message-list__inner {
13053
- max-width: 100%;
13054
- }
12870
+ /* Control container */
12871
+ .muka-checkbox__control {
12872
+ position: relative;
12873
+ display: inline-flex;
12874
+ align-items: center;
12875
+ justify-content: center;
12876
+ flex-shrink: 0;
13055
12877
  }
13056
12878
 
12879
+ /* Hidden native input */
12880
+ .muka-checkbox__input {
12881
+ position: absolute;
12882
+ width: 1px;
12883
+ height: 1px;
12884
+ padding: 0;
12885
+ margin: -1px;
12886
+ overflow: hidden;
12887
+ clip: rect(0, 0, 0, 0);
12888
+ white-space: nowrap;
12889
+ border: 0;
12890
+ }
13057
12891
 
13058
- /* ChatMessage */
13059
- /* ChatMessage Component Styles */
13060
-
13061
- .muka-chat-message {
12892
+ /* Visual indicator (square) */
12893
+ .muka-checkbox__indicator {
13062
12894
  display: flex;
13063
- flex-direction: column;
13064
- width: 100%;
13065
- max-width: 100%;
12895
+ align-items: center;
12896
+ justify-content: center;
12897
+ width: var(--checkbox-size-default);
12898
+ height: var(--checkbox-size-default);
12899
+ border-radius: var(--checkbox-radius);
12900
+ background-color: var(--checkbox-color-default-background);
12901
+ border: var(--border-width-regular) solid var(--checkbox-color-default-border);
12902
+ transition: all 0.15s ease;
12903
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
13066
12904
  }
13067
12905
 
13068
- /* ─── Row: avatar rail + bubble ────────────────────────── */
13069
-
13070
- .muka-chat-message__row {
13071
- display: grid;
13072
- grid-template-columns: minmax(0, 1fr);
13073
- grid-template-areas: 'bubble';
13074
- column-gap: var(--chatbubble-row-gap);
13075
- width: 100%;
12906
+ /* Size variants */
12907
+ .muka-checkbox--sm .muka-checkbox__indicator {
12908
+ width: var(--checkbox-size-sm);
12909
+ height: var(--checkbox-size-sm);
13076
12910
  }
13077
12911
 
13078
- .muka-chat-message--has-avatar .muka-chat-message__row {
13079
- grid-template-columns: auto minmax(0, 1fr);
13080
- grid-template-areas: 'rail bubble';
12912
+ .muka-checkbox--lg .muka-checkbox__indicator {
12913
+ width: var(--checkbox-size-lg);
12914
+ height: var(--checkbox-size-lg);
13081
12915
  }
13082
12916
 
13083
- .muka-chat-message__rail {
13084
- grid-area: rail;
13085
- /* Sits on the bubble's baseline (Figma 5355:44091) */
13086
- align-self: end;
13087
- display: flex;
13088
- justify-content: center;
13089
- min-width: var(--chatbubble-avatar-size);
12917
+ /* Icon inside checkbox */
12918
+ .muka-checkbox__icon {
12919
+ width: var(--checkbox-icon-size-default);
12920
+ height: var(--checkbox-icon-size-default);
12921
+ color: var(--checkbox-color-default-icon);
12922
+ opacity: 0;
12923
+ transform: scale(0.8);
12924
+ transition: opacity 0.15s ease, transform 0.15s ease;
13090
12925
  }
13091
12926
 
13092
- /*
13093
- * The Small size in Figma (5373:44702) halves the avatar to 32px and tightens
13094
- * the gap to the bubble. Size the avatar itself, not just the rail, so the
13095
- * bubbles keep their alignment. The header row keeps its own gap.
13096
- */
13097
- @media (max-width: 1023px) {
13098
- .muka-chat-message__row {
13099
- column-gap: var(--chatbubble-row-gap-compact);
13100
- }
12927
+ .muka-checkbox--sm .muka-checkbox__icon {
12928
+ width: var(--checkbox-icon-size-sm);
12929
+ height: var(--checkbox-icon-size-sm);
12930
+ }
13101
12931
 
13102
- .muka-chat-message__rail {
13103
- min-width: var(--chatbubble-avatar-size-compact);
13104
- }
12932
+ .muka-checkbox--lg .muka-checkbox__icon {
12933
+ width: var(--checkbox-icon-size-lg);
12934
+ height: var(--checkbox-icon-size-lg);
12935
+ }
13105
12936
 
13106
- /* Outweighs the avatar's own size class, which sets width/height directly */
13107
- .muka-chat-message .muka-chat-message__rail > * {
13108
- width: var(--chatbubble-avatar-size-compact);
13109
- height: var(--chatbubble-avatar-size-compact);
13110
- }
12937
+ /* Hide indeterminate icon by default */
12938
+ .muka-checkbox__icon--indeterminate {
12939
+ position: absolute;
13111
12940
  }
13112
12941
 
13113
- /* ─── Bubble surface ───────────────────────────────────── */
12942
+ /* Hover state - removed per design */
13114
12943
 
13115
- .muka-chat-message__bubble {
13116
- grid-area: bubble;
13117
- /*
13118
- * Width follows the content: a single line hugs, and once the text wraps the
13119
- * bubble fills to the shared max width. Robust to string or rich children —
13120
- * no length measuring needed (Figma `Text length` on 5355:44091).
13121
- */
13122
- width: fit-content;
13123
- /*
13124
- * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
13125
- * row; above it the fixed cap leaves room for own/peer alignment.
13126
- */
13127
- max-width: var(--chatbubble-max-width);
13128
- position: relative;
13129
- display: flex;
13130
- flex-direction: column;
13131
- gap: var(--chatbubble-gap);
13132
- padding: var(--chatbubble-padding-block) var(--chatbubble-padding-inline);
13133
- border-radius: var(--chatbubble-radius);
13134
- border: var(--border-width-regular) solid transparent;
13135
- box-shadow: var(--shadow-level2);
13136
- word-break: break-word;
12944
+ /* Focus state */
12945
+ .muka-checkbox__input:focus-visible + .muka-checkbox__indicator {
12946
+ outline: 2px solid var(--color-border-focus);
12947
+ outline-offset: 2px;
13137
12948
  }
13138
12949
 
13139
- /* Media, an embed or an action stack always run the full bubble width. */
13140
- .muka-chat-message--has-blocks .muka-chat-message__bubble {
13141
- width: 100%;
12950
+ /* Checked state */
12951
+ .muka-checkbox__input:checked + .muka-checkbox__indicator {
12952
+ background-color: var(--checkbox-color-checked-background);
12953
+ border-color: var(--checkbox-color-checked-border);
12954
+ box-shadow: none;
13142
12955
  }
13143
12956
 
13144
- .muka-chat-message--own .muka-chat-message__bubble {
13145
- justify-self: end;
12957
+ .muka-checkbox__input:checked + .muka-checkbox__indicator .muka-checkbox__icon--check {
12958
+ color: var(--checkbox-color-checked-icon);
12959
+ opacity: 1;
12960
+ transform: scale(1);
13146
12961
  }
13147
12962
 
13148
- .muka-chat-message--own .muka-chat-message__bubble {
13149
- background-color: var(--chatbubble-color-own-background);
13150
- border-color: var(--chatbubble-color-own-border);
13151
- color: var(--chatbubble-color-own-foreground);
12963
+ /* Indeterminate state */
12964
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator {
12965
+ background-color: var(--checkbox-color-checked-background);
12966
+ border-color: var(--checkbox-color-checked-border);
12967
+ box-shadow: none;
13152
12968
  }
13153
12969
 
13154
- .muka-chat-message--peer .muka-chat-message__bubble {
13155
- background-color: var(--chatbubble-color-peer-background);
13156
- border-color: var(--chatbubble-color-peer-border);
13157
- color: var(--chatbubble-color-peer-foreground);
12970
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--check {
12971
+ opacity: 0;
13158
12972
  }
13159
12973
 
13160
- .muka-chat-message--agent .muka-chat-message__bubble {
13161
- background-color: var(--chatbubble-color-agent-background);
13162
- border-color: var(--chatbubble-color-agent-border);
13163
- color: var(--chatbubble-color-agent-foreground);
12974
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12975
+ color: var(--checkbox-color-checked-icon);
12976
+ opacity: 1;
12977
+ transform: scale(1);
13164
12978
  }
13165
12979
 
13166
- /* ─── Header row (author · meta · time · badge) ────────── */
13167
-
13168
- .muka-chat-message__header {
13169
- display: flex;
13170
- flex-flow: row wrap;
13171
- align-items: center;
13172
- gap: var(--chatbubble-row-gap);
12980
+ /* Disabled state */
12981
+ .muka-checkbox--disabled .muka-checkbox__indicator {
12982
+ background-color: var(--checkbox-color-disabled-background);
12983
+ border-color: var(--checkbox-color-disabled-border);
12984
+ box-shadow: none;
13173
12985
  }
13174
12986
 
13175
- .muka-chat-message__author {
13176
- font-family: var(--text-body-base-bold-fontFamily);
13177
- font-weight: var(--text-body-base-bold-fontWeight);
13178
- font-size: var(--text-body-base-bold-fontSize);
13179
- line-height: var(--text-body-base-bold-lineHeight);
12987
+ .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12988
+ .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12989
+ color: var(--checkbox-color-disabled-icon);
13180
12990
  }
13181
12991
 
13182
- .muka-chat-message__author-meta {
13183
- /* Inherits the variant's body colour from the bubble */
13184
- color: inherit;
13185
- font-family: var(--text-body-base-regular-fontFamily);
13186
- font-weight: var(--text-body-base-regular-fontWeight);
13187
- font-size: var(--text-body-base-regular-fontSize);
13188
- line-height: var(--text-body-base-regular-lineHeight);
12992
+ /* Label text */
12993
+ .muka-checkbox__label {
12994
+ font-family: var(--text-label-lg-regular-fontFamily);
12995
+ font-weight: var(--text-label-lg-regular-fontWeight);
12996
+ font-size: var(--text-label-lg-regular-fontSize);
12997
+ line-height: var(--text-label-lg-regular-lineHeight);
12998
+ color: var(--color-text-default-default);
13189
12999
  }
13190
13000
 
13191
- .muka-chat-message__badge {
13192
- display: inline-flex;
13193
- align-items: center;
13001
+ .muka-checkbox--sm .muka-checkbox__label {
13002
+ font-family: var(--text-label-md-regular-fontFamily);
13003
+ font-weight: var(--text-label-md-regular-fontWeight);
13004
+ font-size: var(--text-label-md-regular-fontSize);
13005
+ line-height: var(--text-label-md-regular-lineHeight);
13194
13006
  }
13195
13007
 
13196
- /*
13197
- * Keep the first line of content clear of the absolutely positioned menu
13198
- * button in the bubble's top-right corner.
13199
- */
13200
- .muka-chat-message--has-menu .muka-chat-message__header,
13201
- .muka-chat-message--has-menu.muka-chat-message--no-header .muka-chat-message__message {
13202
- padding-right: var(--spacing-10);
13008
+ .muka-checkbox--lg .muka-checkbox__label {
13009
+ font-family: var(--text-label-xl-regular-fontFamily);
13010
+ font-weight: var(--text-label-xl-regular-fontWeight);
13011
+ font-size: var(--text-label-xl-regular-fontSize);
13012
+ line-height: var(--text-label-xl-regular-lineHeight);
13203
13013
  }
13204
13014
 
13205
- /* …and the last line clear of the inset timestamp in the bottom-right corner */
13206
- .muka-chat-message--has-timestamp .muka-chat-message__message {
13207
- padding-right: var(--spacing-10);
13015
+ .muka-checkbox--disabled .muka-checkbox__label {
13016
+ color: var(--color-text-subtle-default);
13208
13017
  }
13209
13018
 
13210
- /* ─── Body ─────────────────────────────────────────────── */
13211
13019
 
13212
- .muka-chat-message__body {
13020
+ /* ChatMessageList */
13021
+ /* ChatMessageList Component Styles */
13022
+
13023
+ .muka-chat-message-list {
13024
+ flex: 1 1 auto;
13025
+ min-height: 0;
13026
+ width: 100%;
13027
+ overflow-x: clip;
13028
+ overflow-y: auto;
13029
+ background-color: var(--color-surface-level3);
13030
+ padding: var(--section-padding-vertical-default, var(--spacing-8))
13031
+ var(--section-padding-horizontal-default, var(--spacing-4));
13032
+ -webkit-overflow-scrolling: touch;
13033
+ overscroll-behavior: contain;
13034
+ }
13035
+
13036
+ .muka-chat-message-list__inner {
13213
13037
  display: flex;
13214
13038
  flex-direction: column;
13215
- gap: var(--chatbubble-gap);
13216
- min-width: 0;
13039
+ align-items: stretch;
13040
+ gap: var(--spacing-8);
13041
+ width: 100%;
13042
+ max-width: var(--chat-column-max-width);
13043
+ margin: 0 auto;
13217
13044
  }
13218
13045
 
13219
- .muka-chat-message__media {
13220
- min-width: 0;
13221
- }
13046
+ /* ─── Print ────────────────────────────────────────────── */
13222
13047
 
13223
- .muka-chat-message__message {
13224
- font-family: var(--text-body-base-regular-fontFamily);
13225
- font-weight: var(--text-body-base-regular-fontWeight);
13226
- font-size: var(--text-body-base-regular-fontSize);
13227
- line-height: var(--text-body-base-regular-lineHeight);
13228
- white-space: pre-wrap;
13229
- word-break: break-word;
13230
- }
13048
+ @media print {
13049
+ .muka-chat-message-list {
13050
+ overflow: visible;
13051
+ height: auto;
13052
+ max-height: none;
13053
+ background: none;
13054
+ padding: 0;
13055
+ }
13231
13056
 
13232
- /* Empty message block should not add a gap of its own */
13233
- .muka-chat-message__message:empty {
13234
- display: none;
13057
+ .muka-chat-message-list__inner {
13058
+ max-width: 100%;
13059
+ }
13235
13060
  }
13236
13061
 
13237
- /* ─── Embedded card ────────────────────────────────────── */
13238
13062
 
13239
- .muka-chat-message__embed {
13240
- position: relative;
13063
+ /* ChatComposer */
13064
+ /* ChatComposer Component Styles */
13065
+
13066
+ /*
13067
+ * The composer is a bare, fill-width row: no padding, background, border or
13068
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
13069
+ * container — see BottomBar's `chat` variant.
13070
+ */
13071
+ .muka-chat-composer {
13241
13072
  display: flex;
13242
13073
  flex-direction: column;
13243
- gap: var(--chatbubble-embed-gap);
13244
- /* The card is inset from the blocks above and below it (Figma 5289:40562) */
13245
- margin-block: var(--chatbubble-embed-margin-block);
13246
- padding: var(--chatbubble-embed-padding-block) var(--chatbubble-embed-padding-inline);
13247
- border-radius: var(--chatbubble-embed-radius);
13248
- border: var(--border-width-regular) solid transparent;
13249
- }
13250
-
13251
- /*
13252
- * The embed sits on the raised surface of its author's role, one step apart
13253
- * from the bubble it is nested in, and reuses that role's border colour.
13254
- */
13255
- .muka-chat-message--own .muka-chat-message__embed {
13256
- background-color: var(--chatbubble-embed-color-own-background);
13257
- border-color: var(--chatbubble-embed-color-own-border);
13258
- color: var(--chatbubble-embed-color-own-foreground);
13259
- }
13260
-
13261
- .muka-chat-message--peer .muka-chat-message__embed {
13262
- background-color: var(--chatbubble-embed-color-peer-background);
13263
- border-color: var(--chatbubble-embed-color-peer-border);
13264
- color: var(--chatbubble-embed-color-peer-foreground);
13265
- }
13266
-
13267
- .muka-chat-message--agent .muka-chat-message__embed {
13268
- background-color: var(--chatbubble-embed-color-agent-background);
13269
- border-color: var(--chatbubble-embed-color-agent-border);
13270
- color: var(--chatbubble-embed-color-agent-foreground);
13271
- }
13272
-
13273
- .muka-chat-message__embed-content {
13274
- display: flex;
13275
- flex-direction: column;
13276
- gap: var(--chatbubble-embed-gap);
13277
- min-width: 0;
13278
- }
13279
-
13280
- .muka-chat-message__embed-copy {
13281
- position: absolute;
13282
- top: var(--chatbubble-embed-padding-block);
13283
- right: var(--chatbubble-embed-padding-inline);
13284
- }
13285
-
13286
- /* ─── Stacked full-width action buttons ────────────────── */
13287
-
13288
- .muka-chat-message__action-stack {
13289
- display: flex;
13290
- flex-direction: column;
13291
- gap: var(--chatbubble-action-stack-gap);
13292
- }
13293
-
13294
- /* ─── Inset timestamp ──────────────────────────────────── */
13295
-
13296
- /*
13297
- * Every author puts its timestamp in the bubble's bottom-right corner, below
13298
- * the message — never in the header row (Figma 5355:44091).
13299
- */
13300
-
13301
- .muka-chat-message__timestamp {
13302
- color: var(--chatbubble-color-timestamp);
13303
- font-family: var(--text-body-xs-regular-fontFamily);
13304
- font-weight: var(--text-body-xs-regular-fontWeight);
13305
- font-size: var(--text-body-xs-regular-fontSize);
13306
- line-height: var(--text-body-xs-regular-lineHeight);
13307
- white-space: nowrap;
13308
- }
13309
-
13310
- /*
13311
- * Pinned to the corner rather than stacked below the message, so a one-line
13312
- * message stays one line tall. The message reserves the width it needs.
13313
- */
13314
- .muka-chat-message__timestamp--inset {
13315
- position: absolute;
13316
- right: var(--spacing-2);
13317
- bottom: var(--spacing-1);
13318
- }
13319
-
13320
- /*
13321
- * When the last block in the body is media, an embed or an action stack (not
13322
- * trailing text), it runs the full width, so reserve a line below for the inset
13323
- * timestamp. A message that ends in text clears the corner inline instead (see
13324
- * `__message` padding-right above), so it needs no extra bottom space.
13325
- */
13326
- .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
13327
- padding-bottom: var(--text-body-xs-regular-lineHeight);
13328
- }
13329
-
13330
- /* ─── Menu affordance ──────────────────────────────────── */
13331
-
13332
- /*
13333
- * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
13334
- * everywhere, and pinned while its menu is open. On touch the equivalent
13335
- * affordance is a long-press on the bubble, which opens an ActionSheet.
13336
- */
13337
- .muka-chat-message__menu {
13338
- position: absolute;
13339
- top: var(--spacing-1);
13340
- right: var(--spacing-1);
13341
- opacity: 0;
13342
- pointer-events: none;
13343
- }
13344
-
13345
- .muka-chat-message__menu:focus-within,
13346
- .muka-chat-message--menu-open .muka-chat-message__menu {
13347
- opacity: 1;
13348
- pointer-events: auto;
13349
- }
13350
-
13351
- @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
13352
- .muka-chat-message__bubble:hover .muka-chat-message__menu {
13353
- opacity: 1;
13354
- pointer-events: auto;
13355
- }
13356
- }
13357
-
13358
- /* Suppress iOS Safari's own callout so the long-press sheet can take over */
13359
- @media (pointer: coarse) {
13360
- .muka-chat-message--has-menu .muka-chat-message__bubble {
13361
- -webkit-touch-callout: none;
13362
- }
13363
- }
13364
-
13365
- /* ─── Print ────────────────────────────────────────────── */
13366
-
13367
- @media print {
13368
- .muka-chat-message__bubble {
13369
- box-shadow: none;
13370
- break-inside: avoid;
13371
- print-color-adjust: exact;
13372
- -webkit-print-color-adjust: exact;
13373
- }
13374
-
13375
- .muka-chat-message__embed {
13376
- break-inside: avoid;
13377
- print-color-adjust: exact;
13378
- -webkit-print-color-adjust: exact;
13379
- }
13380
-
13381
- .muka-chat-message__menu,
13382
- .muka-chat-message__embed-copy,
13383
- .muka-chat-message__action-stack {
13384
- display: none;
13385
- }
13386
- }
13387
-
13388
-
13389
- /* ChatComposer */
13390
- /* ChatComposer Component Styles */
13391
-
13392
- /*
13393
- * The composer is a bare, fill-width row: no padding, background, border or
13394
- * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
13395
- * container — see BottomBar's `chat` variant.
13396
- */
13397
- .muka-chat-composer {
13398
- display: flex;
13399
- flex-direction: column;
13400
- gap: var(--spacing-3);
13401
- width: 100%;
13074
+ gap: var(--spacing-3);
13075
+ width: 100%;
13402
13076
  }
13403
13077
 
13404
13078
  .muka-chat-composer--disabled {
@@ -13598,186 +13272,517 @@ button.muka-chat-photo-grid__tile:focus-visible {
13598
13272
  text-overflow: ellipsis;
13599
13273
  }
13600
13274
 
13601
- .muka-chat-attachment-chip__meta {
13602
- color: var(--color-text-subtle-default);
13603
- font-family: var(--text-body-sm-regular-fontFamily);
13604
- font-weight: var(--text-body-sm-regular-fontWeight);
13605
- font-size: var(--text-body-sm-regular-fontSize);
13606
- line-height: var(--text-body-sm-regular-lineHeight);
13607
- white-space: nowrap;
13608
- overflow: hidden;
13609
- text-overflow: ellipsis;
13275
+ .muka-chat-attachment-chip__meta {
13276
+ color: var(--color-text-subtle-default);
13277
+ font-family: var(--text-body-sm-regular-fontFamily);
13278
+ font-weight: var(--text-body-sm-regular-fontWeight);
13279
+ font-size: var(--text-body-sm-regular-fontSize);
13280
+ line-height: var(--text-body-sm-regular-lineHeight);
13281
+ white-space: nowrap;
13282
+ overflow: hidden;
13283
+ text-overflow: ellipsis;
13284
+ }
13285
+
13286
+ .muka-chat-attachment-chip--error .muka-chat-attachment-chip__meta {
13287
+ color: var(--color-state-error-default, var(--color-text-default-default));
13288
+ }
13289
+
13290
+ /* ─── Remove button ────────────────────────────────────── */
13291
+
13292
+ .muka-chat-attachment-chip__remove {
13293
+ display: inline-flex;
13294
+ align-items: center;
13295
+ justify-content: center;
13296
+ width: 20px;
13297
+ height: 20px;
13298
+ border: none;
13299
+ background: none;
13300
+ padding: 0;
13301
+ border-radius: var(--radius-sm);
13302
+ cursor: pointer;
13303
+ color: var(--color-text-subtle-default);
13304
+ flex-shrink: 0;
13305
+ -webkit-tap-highlight-color: transparent;
13306
+ }
13307
+
13308
+ .muka-chat-attachment-chip__remove:hover:not(:disabled) {
13309
+ color: var(--color-text-default-default);
13310
+ background-color: var(--color-surface-level2);
13311
+ }
13312
+
13313
+ .muka-chat-attachment-chip__remove:focus-visible {
13314
+ outline: 2px solid var(--color-action-default);
13315
+ outline-offset: 2px;
13316
+ }
13317
+
13318
+ .muka-chat-attachment-chip__remove:disabled {
13319
+ cursor: not-allowed;
13320
+ opacity: 0.5;
13321
+ }
13322
+
13323
+ /* ─── Progress bar ─────────────────────────────────────── */
13324
+
13325
+ .muka-chat-attachment-chip__progress {
13326
+ position: absolute;
13327
+ left: 0;
13328
+ right: 0;
13329
+ bottom: 0;
13330
+ height: 2px;
13331
+ background-color: var(--color-surface-level2);
13332
+ overflow: hidden;
13333
+ }
13334
+
13335
+ .muka-chat-attachment-chip__progress-fill {
13336
+ display: block;
13337
+ height: 100%;
13338
+ background-color: var(--color-action-default);
13339
+ transition: width 0.16s ease;
13340
+ }
13341
+
13342
+ .muka-chat-attachment-chip--error .muka-chat-attachment-chip__progress-fill {
13343
+ background-color: var(--color-state-error-default, var(--color-text-default-default));
13344
+ }
13345
+
13346
+
13347
+ /* Card */
13348
+ /* Card Component Styles - Using Muka Design Tokens */
13349
+
13350
+ .muka-card {
13351
+ background-color: var(--card-color-default-background);
13352
+ color: var(--card-color-default-foreground);
13353
+ border: var(--border-width-regular) solid var(--card-color-default-border);
13354
+ box-shadow: var(--card-shadow-default);
13355
+ transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
13356
+ overflow: hidden;
13357
+ }
13358
+
13359
+ /* Padding variants */
13360
+ .muka-card--padding-none {
13361
+ padding: 0;
13362
+ }
13363
+
13364
+ .muka-card--padding-sm {
13365
+ padding: var(--card-padding-sm);
13366
+ }
13367
+
13368
+ .muka-card--padding-md {
13369
+ padding: var(--card-padding-md);
13370
+ }
13371
+
13372
+ .muka-card--padding-lg {
13373
+ padding: var(--card-padding-lg);
13374
+ }
13375
+
13376
+ /* Radius variants */
13377
+ .muka-card--radius-sm {
13378
+ border-radius: var(--card-radius-sm);
13379
+ }
13380
+
13381
+ .muka-card--radius-md {
13382
+ border-radius: var(--card-radius-md);
13383
+ }
13384
+
13385
+ .muka-card--radius-lg {
13386
+ border-radius: var(--card-radius-lg);
13387
+ }
13388
+
13389
+ /* Interactive variant */
13390
+ .muka-card--interactive {
13391
+ cursor: pointer;
13392
+ user-select: none;
13393
+ }
13394
+
13395
+ .muka-card--interactive:hover {
13396
+ background-color: var(--card-color-hover-background);
13397
+ border-color: var(--card-color-hover-border);
13398
+ box-shadow: var(--card-shadow-hover);
13399
+ }
13400
+
13401
+ .muka-card--interactive:active,
13402
+ .muka-card--interactive.muka-card--pressed {
13403
+ background-color: var(--card-color-pressed-background);
13404
+ border-color: var(--card-color-pressed-border);
13405
+ box-shadow: var(--card-shadow-pressed);
13406
+ }
13407
+
13408
+ .muka-card--interactive:focus-visible {
13409
+ outline: 2px solid var(--color-border-focus);
13410
+ outline-offset: 2px;
13411
+ }
13412
+
13413
+ /* Selected variant */
13414
+ .muka-card--selected {
13415
+ background-color: var(--card-color-selected-background);
13416
+ border-color: var(--card-color-selected-border);
13417
+ border-width: var(--border-width-bold);
13418
+ box-shadow: var(--card-shadow-selected);
13419
+ }
13420
+
13421
+ /* Optional header (title + description) */
13422
+ .muka-card__header {
13423
+ margin-bottom: var(--spacing-4);
13424
+ }
13425
+
13426
+ .muka-card__title {
13427
+ margin: 0;
13428
+ color: var(--color-text-default-default);
13429
+ font-family: var(--text-heading-xs-fontFamily);
13430
+ font-weight: var(--text-heading-xs-fontWeight);
13431
+ font-size: var(--text-heading-xs-fontSize);
13432
+ line-height: var(--text-heading-xs-lineHeight);
13433
+ letter-spacing: var(--text-heading-xs-letterSpacing);
13434
+ }
13435
+
13436
+ .muka-card__description {
13437
+ margin: var(--spacing-1) 0 0;
13438
+ color: var(--color-text-subtle-default);
13439
+ font-family: var(--text-body-sm-regular-fontFamily);
13440
+ font-weight: var(--text-body-sm-regular-fontWeight);
13441
+ font-size: var(--text-body-sm-regular-fontSize);
13442
+ line-height: var(--text-body-sm-regular-lineHeight);
13443
+ }
13444
+
13445
+ /* Hide divider on last list item inside card */
13446
+ .muka-card > .muka-listitem:last-child > .muka-listitem__divider {
13447
+ display: none;
13448
+ }
13449
+
13450
+ /* Disabled state */
13451
+ .muka-card--disabled {
13452
+ opacity: 0.5;
13453
+ cursor: not-allowed;
13454
+ pointer-events: none;
13455
+ }
13456
+
13457
+
13458
+ /* ChatMessage */
13459
+ /* ChatMessage Component Styles */
13460
+
13461
+ .muka-chat-message {
13462
+ display: flex;
13463
+ flex-direction: column;
13464
+ width: 100%;
13465
+ max-width: 100%;
13466
+ }
13467
+
13468
+ /* ─── Row: avatar rail + bubble ────────────────────────── */
13469
+
13470
+ .muka-chat-message__row {
13471
+ display: grid;
13472
+ grid-template-columns: minmax(0, 1fr);
13473
+ grid-template-areas: 'bubble';
13474
+ column-gap: var(--chatbubble-row-gap);
13475
+ width: 100%;
13476
+ }
13477
+
13478
+ .muka-chat-message--has-avatar .muka-chat-message__row {
13479
+ grid-template-columns: auto minmax(0, 1fr);
13480
+ grid-template-areas: 'rail bubble';
13481
+ }
13482
+
13483
+ .muka-chat-message__rail {
13484
+ grid-area: rail;
13485
+ /* Sits on the bubble's baseline (Figma 5355:44091) */
13486
+ align-self: end;
13487
+ display: flex;
13488
+ justify-content: center;
13489
+ min-width: var(--chatbubble-avatar-size);
13490
+ }
13491
+
13492
+ /*
13493
+ * The Small size in Figma (5373:44702) halves the avatar to 32px and tightens
13494
+ * the gap to the bubble. Size the avatar itself, not just the rail, so the
13495
+ * bubbles keep their alignment. The header row keeps its own gap.
13496
+ */
13497
+ @media (max-width: 1023px) {
13498
+ .muka-chat-message__row {
13499
+ column-gap: var(--chatbubble-row-gap-compact);
13500
+ }
13501
+
13502
+ .muka-chat-message__rail {
13503
+ min-width: var(--chatbubble-avatar-size-compact);
13504
+ }
13505
+
13506
+ /* Outweighs the avatar's own size class, which sets width/height directly */
13507
+ .muka-chat-message .muka-chat-message__rail > * {
13508
+ width: var(--chatbubble-avatar-size-compact);
13509
+ height: var(--chatbubble-avatar-size-compact);
13510
+ }
13511
+ }
13512
+
13513
+ /* ─── Bubble surface ───────────────────────────────────── */
13514
+
13515
+ .muka-chat-message__bubble {
13516
+ grid-area: bubble;
13517
+ /*
13518
+ * Width follows the content: a single line hugs, and once the text wraps the
13519
+ * bubble fills to the shared max width. Robust to string or rich children —
13520
+ * no length measuring needed (Figma `Text length` on 5355:44091).
13521
+ */
13522
+ width: fit-content;
13523
+ /*
13524
+ * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
13525
+ * row; above it the fixed cap leaves room for own/peer alignment.
13526
+ */
13527
+ max-width: var(--chatbubble-max-width);
13528
+ position: relative;
13529
+ display: flex;
13530
+ flex-direction: column;
13531
+ gap: var(--chatbubble-gap);
13532
+ padding: var(--chatbubble-padding-block) var(--chatbubble-padding-inline);
13533
+ border-radius: var(--chatbubble-radius);
13534
+ border: var(--border-width-regular) solid transparent;
13535
+ box-shadow: var(--shadow-level2);
13536
+ word-break: break-word;
13537
+ }
13538
+
13539
+ /* Media, an embed or an action stack always run the full bubble width. */
13540
+ .muka-chat-message--has-blocks .muka-chat-message__bubble {
13541
+ width: 100%;
13542
+ }
13543
+
13544
+ .muka-chat-message--own .muka-chat-message__bubble {
13545
+ justify-self: end;
13546
+ }
13547
+
13548
+ .muka-chat-message--own .muka-chat-message__bubble {
13549
+ background-color: var(--chatbubble-color-own-background);
13550
+ border-color: var(--chatbubble-color-own-border);
13551
+ color: var(--chatbubble-color-own-foreground);
13552
+ }
13553
+
13554
+ .muka-chat-message--peer .muka-chat-message__bubble {
13555
+ background-color: var(--chatbubble-color-peer-background);
13556
+ border-color: var(--chatbubble-color-peer-border);
13557
+ color: var(--chatbubble-color-peer-foreground);
13558
+ }
13559
+
13560
+ .muka-chat-message--agent .muka-chat-message__bubble {
13561
+ background-color: var(--chatbubble-color-agent-background);
13562
+ border-color: var(--chatbubble-color-agent-border);
13563
+ color: var(--chatbubble-color-agent-foreground);
13564
+ }
13565
+
13566
+ /* ─── Header row (author · meta · time · badge) ────────── */
13567
+
13568
+ .muka-chat-message__header {
13569
+ display: flex;
13570
+ flex-flow: row wrap;
13571
+ align-items: center;
13572
+ gap: var(--chatbubble-row-gap);
13573
+ }
13574
+
13575
+ .muka-chat-message__author {
13576
+ font-family: var(--text-body-base-bold-fontFamily);
13577
+ font-weight: var(--text-body-base-bold-fontWeight);
13578
+ font-size: var(--text-body-base-bold-fontSize);
13579
+ line-height: var(--text-body-base-bold-lineHeight);
13610
13580
  }
13611
13581
 
13612
- .muka-chat-attachment-chip--error .muka-chat-attachment-chip__meta {
13613
- color: var(--color-state-error-default, var(--color-text-default-default));
13582
+ .muka-chat-message__author-meta {
13583
+ /* Inherits the variant's body colour from the bubble */
13584
+ color: inherit;
13585
+ font-family: var(--text-body-base-regular-fontFamily);
13586
+ font-weight: var(--text-body-base-regular-fontWeight);
13587
+ font-size: var(--text-body-base-regular-fontSize);
13588
+ line-height: var(--text-body-base-regular-lineHeight);
13614
13589
  }
13615
13590
 
13616
- /* ─── Remove button ────────────────────────────────────── */
13617
-
13618
- .muka-chat-attachment-chip__remove {
13591
+ .muka-chat-message__badge {
13619
13592
  display: inline-flex;
13620
13593
  align-items: center;
13621
- justify-content: center;
13622
- width: 20px;
13623
- height: 20px;
13624
- border: none;
13625
- background: none;
13626
- padding: 0;
13627
- border-radius: var(--radius-sm);
13628
- cursor: pointer;
13629
- color: var(--color-text-subtle-default);
13630
- flex-shrink: 0;
13631
- -webkit-tap-highlight-color: transparent;
13632
- }
13633
-
13634
- .muka-chat-attachment-chip__remove:hover:not(:disabled) {
13635
- color: var(--color-text-default-default);
13636
- background-color: var(--color-surface-level2);
13637
13594
  }
13638
13595
 
13639
- .muka-chat-attachment-chip__remove:focus-visible {
13640
- outline: 2px solid var(--color-action-default);
13641
- outline-offset: 2px;
13596
+ /*
13597
+ * Keep the first line of content clear of the absolutely positioned menu
13598
+ * button in the bubble's top-right corner.
13599
+ */
13600
+ .muka-chat-message--has-menu .muka-chat-message__header,
13601
+ .muka-chat-message--has-menu.muka-chat-message--no-header .muka-chat-message__message {
13602
+ padding-right: var(--spacing-10);
13642
13603
  }
13643
13604
 
13644
- .muka-chat-attachment-chip__remove:disabled {
13645
- cursor: not-allowed;
13646
- opacity: 0.5;
13605
+ /* …and the last line clear of the inset timestamp in the bottom-right corner */
13606
+ .muka-chat-message--has-timestamp .muka-chat-message__message {
13607
+ padding-right: var(--spacing-10);
13647
13608
  }
13648
13609
 
13649
- /* ─── Progress bar ─────────────────────────────────────── */
13610
+ /* ─── Body ─────────────────────────────────────────────── */
13650
13611
 
13651
- .muka-chat-attachment-chip__progress {
13652
- position: absolute;
13653
- left: 0;
13654
- right: 0;
13655
- bottom: 0;
13656
- height: 2px;
13657
- background-color: var(--color-surface-level2);
13658
- overflow: hidden;
13612
+ .muka-chat-message__body {
13613
+ display: flex;
13614
+ flex-direction: column;
13615
+ gap: var(--chatbubble-gap);
13616
+ min-width: 0;
13659
13617
  }
13660
13618
 
13661
- .muka-chat-attachment-chip__progress-fill {
13662
- display: block;
13663
- height: 100%;
13664
- background-color: var(--color-action-default);
13665
- transition: width 0.16s ease;
13619
+ .muka-chat-message__media {
13620
+ min-width: 0;
13666
13621
  }
13667
13622
 
13668
- .muka-chat-attachment-chip--error .muka-chat-attachment-chip__progress-fill {
13669
- background-color: var(--color-state-error-default, var(--color-text-default-default));
13623
+ .muka-chat-message__message {
13624
+ font-family: var(--text-body-base-regular-fontFamily);
13625
+ font-weight: var(--text-body-base-regular-fontWeight);
13626
+ font-size: var(--text-body-base-regular-fontSize);
13627
+ line-height: var(--text-body-base-regular-lineHeight);
13628
+ white-space: pre-wrap;
13629
+ word-break: break-word;
13670
13630
  }
13671
13631
 
13632
+ /* Empty message block should not add a gap of its own */
13633
+ .muka-chat-message__message:empty {
13634
+ display: none;
13635
+ }
13672
13636
 
13673
- /* Card */
13674
- /* Card Component Styles - Using Muka Design Tokens */
13637
+ /* ─── Embedded card ────────────────────────────────────── */
13675
13638
 
13676
- .muka-card {
13677
- background-color: var(--card-color-default-background);
13678
- color: var(--card-color-default-foreground);
13679
- border: var(--border-width-regular) solid var(--card-color-default-border);
13680
- box-shadow: var(--card-shadow-default);
13681
- transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
13682
- overflow: hidden;
13639
+ .muka-chat-message__embed {
13640
+ position: relative;
13641
+ display: flex;
13642
+ flex-direction: column;
13643
+ gap: var(--chatbubble-embed-gap);
13644
+ /* The card is inset from the blocks above and below it (Figma 5289:40562) */
13645
+ margin-block: var(--chatbubble-embed-margin-block);
13646
+ padding: var(--chatbubble-embed-padding-block) var(--chatbubble-embed-padding-inline);
13647
+ border-radius: var(--chatbubble-embed-radius);
13648
+ border: var(--border-width-regular) solid transparent;
13683
13649
  }
13684
13650
 
13685
- /* Padding variants */
13686
- .muka-card--padding-none {
13687
- padding: 0;
13651
+ /*
13652
+ * The embed sits on the raised surface of its author's role, one step apart
13653
+ * from the bubble it is nested in, and reuses that role's border colour.
13654
+ */
13655
+ .muka-chat-message--own .muka-chat-message__embed {
13656
+ background-color: var(--chatbubble-embed-color-own-background);
13657
+ border-color: var(--chatbubble-embed-color-own-border);
13658
+ color: var(--chatbubble-embed-color-own-foreground);
13688
13659
  }
13689
13660
 
13690
- .muka-card--padding-sm {
13691
- padding: var(--card-padding-sm);
13661
+ .muka-chat-message--peer .muka-chat-message__embed {
13662
+ background-color: var(--chatbubble-embed-color-peer-background);
13663
+ border-color: var(--chatbubble-embed-color-peer-border);
13664
+ color: var(--chatbubble-embed-color-peer-foreground);
13692
13665
  }
13693
13666
 
13694
- .muka-card--padding-md {
13695
- padding: var(--card-padding-md);
13667
+ .muka-chat-message--agent .muka-chat-message__embed {
13668
+ background-color: var(--chatbubble-embed-color-agent-background);
13669
+ border-color: var(--chatbubble-embed-color-agent-border);
13670
+ color: var(--chatbubble-embed-color-agent-foreground);
13696
13671
  }
13697
13672
 
13698
- .muka-card--padding-lg {
13699
- padding: var(--card-padding-lg);
13673
+ .muka-chat-message__embed-content {
13674
+ display: flex;
13675
+ flex-direction: column;
13676
+ gap: var(--chatbubble-embed-gap);
13677
+ min-width: 0;
13700
13678
  }
13701
13679
 
13702
- /* Radius variants */
13703
- .muka-card--radius-sm {
13704
- border-radius: var(--card-radius-sm);
13680
+ .muka-chat-message__embed-copy {
13681
+ position: absolute;
13682
+ top: var(--chatbubble-embed-padding-block);
13683
+ right: var(--chatbubble-embed-padding-inline);
13705
13684
  }
13706
13685
 
13707
- .muka-card--radius-md {
13708
- border-radius: var(--card-radius-md);
13709
- }
13686
+ /* ─── Stacked full-width action buttons ────────────────── */
13710
13687
 
13711
- .muka-card--radius-lg {
13712
- border-radius: var(--card-radius-lg);
13688
+ .muka-chat-message__action-stack {
13689
+ display: flex;
13690
+ flex-direction: column;
13691
+ gap: var(--chatbubble-action-stack-gap);
13713
13692
  }
13714
13693
 
13715
- /* Interactive variant */
13716
- .muka-card--interactive {
13717
- cursor: pointer;
13718
- user-select: none;
13719
- }
13694
+ /* ─── Inset timestamp ──────────────────────────────────── */
13720
13695
 
13721
- .muka-card--interactive:hover {
13722
- background-color: var(--card-color-hover-background);
13723
- border-color: var(--card-color-hover-border);
13724
- box-shadow: var(--card-shadow-hover);
13696
+ /*
13697
+ * Every author puts its timestamp in the bubble's bottom-right corner, below
13698
+ * the message — never in the header row (Figma 5355:44091).
13699
+ */
13700
+
13701
+ .muka-chat-message__timestamp {
13702
+ color: var(--chatbubble-color-timestamp);
13703
+ font-family: var(--text-body-xs-regular-fontFamily);
13704
+ font-weight: var(--text-body-xs-regular-fontWeight);
13705
+ font-size: var(--text-body-xs-regular-fontSize);
13706
+ line-height: var(--text-body-xs-regular-lineHeight);
13707
+ white-space: nowrap;
13725
13708
  }
13726
13709
 
13727
- .muka-card--interactive:active,
13728
- .muka-card--interactive.muka-card--pressed {
13729
- background-color: var(--card-color-pressed-background);
13730
- border-color: var(--card-color-pressed-border);
13731
- box-shadow: var(--card-shadow-pressed);
13710
+ /*
13711
+ * Pinned to the corner rather than stacked below the message, so a one-line
13712
+ * message stays one line tall. The message reserves the width it needs.
13713
+ */
13714
+ .muka-chat-message__timestamp--inset {
13715
+ position: absolute;
13716
+ right: var(--spacing-2);
13717
+ bottom: var(--spacing-1);
13732
13718
  }
13733
13719
 
13734
- .muka-card--interactive:focus-visible {
13735
- outline: 2px solid var(--color-border-focus);
13736
- outline-offset: 2px;
13720
+ /*
13721
+ * When the last block in the body is media, an embed or an action stack (not
13722
+ * trailing text), it runs the full width, so reserve a line below for the inset
13723
+ * timestamp. A message that ends in text clears the corner inline instead (see
13724
+ * `__message` padding-right above), so it needs no extra bottom space.
13725
+ */
13726
+ .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
13727
+ padding-bottom: var(--text-body-xs-regular-lineHeight);
13737
13728
  }
13738
13729
 
13739
- /* Selected variant */
13740
- .muka-card--selected {
13741
- background-color: var(--card-color-selected-background);
13742
- border-color: var(--card-color-selected-border);
13743
- border-width: var(--border-width-bold);
13744
- box-shadow: var(--card-shadow-selected);
13730
+ /* ─── Menu affordance ──────────────────────────────────── */
13731
+
13732
+ /*
13733
+ * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
13734
+ * everywhere, and pinned while its menu is open. On touch the equivalent
13735
+ * affordance is a long-press on the bubble, which opens an ActionSheet.
13736
+ */
13737
+ .muka-chat-message__menu {
13738
+ position: absolute;
13739
+ top: var(--spacing-1);
13740
+ right: var(--spacing-1);
13741
+ opacity: 0;
13742
+ pointer-events: none;
13745
13743
  }
13746
13744
 
13747
- /* Optional header (title + description) */
13748
- .muka-card__header {
13749
- margin-bottom: var(--spacing-4);
13745
+ .muka-chat-message__menu:focus-within,
13746
+ .muka-chat-message--menu-open .muka-chat-message__menu {
13747
+ opacity: 1;
13748
+ pointer-events: auto;
13750
13749
  }
13751
13750
 
13752
- .muka-card__title {
13753
- margin: 0;
13754
- color: var(--color-text-default-default);
13755
- font-family: var(--text-heading-xs-fontFamily);
13756
- font-weight: var(--text-heading-xs-fontWeight);
13757
- font-size: var(--text-heading-xs-fontSize);
13758
- line-height: var(--text-heading-xs-lineHeight);
13759
- letter-spacing: var(--text-heading-xs-letterSpacing);
13751
+ @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
13752
+ .muka-chat-message__bubble:hover .muka-chat-message__menu {
13753
+ opacity: 1;
13754
+ pointer-events: auto;
13755
+ }
13760
13756
  }
13761
13757
 
13762
- .muka-card__description {
13763
- margin: var(--spacing-1) 0 0;
13764
- color: var(--color-text-subtle-default);
13765
- font-family: var(--text-body-sm-regular-fontFamily);
13766
- font-weight: var(--text-body-sm-regular-fontWeight);
13767
- font-size: var(--text-body-sm-regular-fontSize);
13768
- line-height: var(--text-body-sm-regular-lineHeight);
13758
+ /* Suppress iOS Safari's own callout so the long-press sheet can take over */
13759
+ @media (pointer: coarse) {
13760
+ .muka-chat-message--has-menu .muka-chat-message__bubble {
13761
+ -webkit-touch-callout: none;
13762
+ }
13769
13763
  }
13770
13764
 
13771
- /* Hide divider on last list item inside card */
13772
- .muka-card > .muka-listitem:last-child > .muka-listitem__divider {
13773
- display: none;
13774
- }
13765
+ /* ─── Print ────────────────────────────────────────────── */
13775
13766
 
13776
- /* Disabled state */
13777
- .muka-card--disabled {
13778
- opacity: 0.5;
13779
- cursor: not-allowed;
13780
- pointer-events: none;
13767
+ @media print {
13768
+ .muka-chat-message__bubble {
13769
+ box-shadow: none;
13770
+ break-inside: avoid;
13771
+ print-color-adjust: exact;
13772
+ -webkit-print-color-adjust: exact;
13773
+ }
13774
+
13775
+ .muka-chat-message__embed {
13776
+ break-inside: avoid;
13777
+ print-color-adjust: exact;
13778
+ -webkit-print-color-adjust: exact;
13779
+ }
13780
+
13781
+ .muka-chat-message__menu,
13782
+ .muka-chat-message__embed-copy,
13783
+ .muka-chat-message__action-stack {
13784
+ display: none;
13785
+ }
13781
13786
  }
13782
13787
 
13783
13788
 
@@ -14129,120 +14134,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
14129
14134
  }
14130
14135
 
14131
14136
 
14132
- /* Breadcrumb */
14133
- /* Breadcrumb Component Styles */
14134
-
14135
- .muka-breadcrumb__list {
14136
- display: flex;
14137
- align-items: center;
14138
- flex-wrap: wrap;
14139
- list-style: none;
14140
- margin: 0;
14141
- padding: 0;
14142
- gap: var(--spacing-1);
14143
- }
14144
-
14145
- .muka-breadcrumb__item {
14146
- display: inline-flex;
14147
- align-items: center;
14148
- gap: var(--spacing-1);
14149
- }
14150
-
14151
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) {
14152
- padding-left: var(--spacing-1);
14153
- }
14154
-
14155
- .muka-breadcrumb__icon {
14156
- display: inline-flex;
14157
- align-items: center;
14158
- color: var(--color-text-subtle-default);
14159
- }
14160
-
14161
- .muka-breadcrumb__icon .muka-icon {
14162
- color: inherit;
14163
- }
14164
-
14165
- .muka-breadcrumb__item:has(.muka-breadcrumb__current) .muka-breadcrumb__icon {
14166
- color: var(--color-text-default-default);
14167
- }
14168
-
14169
- .muka-breadcrumb__item:has(.muka-breadcrumb__link:hover) .muka-breadcrumb__icon {
14170
- color: var(--color-text-action-default);
14171
- }
14172
-
14173
- /* Link styles */
14174
- .muka-breadcrumb__link {
14175
- color: var(--color-text-subtle-default);
14176
- text-decoration: none;
14177
- border: none;
14178
- background: none;
14179
- padding-inline: var(--spacing-2);
14180
- padding-block: 0;
14181
- cursor: pointer;
14182
- font: inherit;
14183
- transition: color 0.15s ease;
14184
- }
14185
-
14186
- .muka-breadcrumb__link:hover {
14187
- color: var(--color-text-action-default);
14188
- text-decoration: underline;
14189
- }
14190
-
14191
- /* Tighter gap after leading icon */
14192
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__link,
14193
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__current {
14194
- padding-left: var(--spacing-1);
14195
- }
14196
-
14197
- /* Current page (last item, no context switcher) */
14198
- .muka-breadcrumb__current {
14199
- color: var(--color-text-default-default);
14200
- font-weight: 600;
14201
- padding-inline: var(--spacing-2);
14202
- }
14203
-
14204
- /* Separator */
14205
- .muka-breadcrumb__separator {
14206
- color: var(--color-text-subtle-default);
14207
- user-select: none;
14208
- }
14209
-
14210
- .muka-breadcrumb__item--context {
14211
- gap: 0;
14212
- }
14213
-
14214
- .muka-breadcrumb__list:has(.muka-breadcrumb__item--context) {
14215
- gap: 0;
14216
- }
14217
-
14218
- .muka-breadcrumb__item--context .muka-breadcrumb__separator {
14219
- margin: 0;
14220
- padding-inline: var(--spacing-1, 4px);
14221
- }
14222
-
14223
- /* Size variants */
14224
- .muka-breadcrumb--sm {
14225
- font-family: var(--text-label-sm-regular-fontFamily);
14226
- font-weight: var(--text-label-sm-regular-fontWeight);
14227
- font-size: var(--text-label-sm-regular-fontSize);
14228
- line-height: var(--text-label-sm-regular-lineHeight);
14229
- }
14230
-
14231
- .muka-breadcrumb--md {
14232
- font-family: var(--text-label-md-regular-fontFamily);
14233
- font-weight: var(--text-label-md-regular-fontWeight);
14234
- font-size: var(--text-label-md-regular-fontSize);
14235
- line-height: var(--text-label-md-regular-lineHeight);
14236
- }
14237
-
14238
- .muka-breadcrumb--lg {
14239
- font-family: var(--text-label-lg-regular-fontFamily);
14240
- font-weight: var(--text-label-lg-regular-fontWeight);
14241
- font-size: var(--text-label-lg-regular-fontSize);
14242
- line-height: var(--text-label-lg-regular-lineHeight);
14243
- }
14244
-
14245
-
14246
14137
  /* BottomBar */
14247
14138
  /* BottomBar Component Styles */
14248
14139
 
@@ -14636,34 +14527,148 @@ button.muka-chat-photo-grid__tile:focus-visible {
14636
14527
  line-height: normal;
14637
14528
  }
14638
14529
 
14639
- /* Neutral variant */
14640
- .muka-badge-number--neutral {
14641
- background-color: var(--color-surface-level1);
14642
- color: var(--color-text-default-default);
14530
+ /* Neutral variant */
14531
+ .muka-badge-number--neutral {
14532
+ background-color: var(--color-surface-level1);
14533
+ color: var(--color-text-default-default);
14534
+ }
14535
+
14536
+ /* Info variant */
14537
+ .muka-badge-number--info {
14538
+ background-color: var(--color-state-info-contrast);
14539
+ color: var(--color-text-default-inverse);
14540
+ }
14541
+
14542
+ /* Success variant */
14543
+ .muka-badge-number--success {
14544
+ background-color: var(--color-state-success-contrast);
14545
+ color: var(--color-text-default-inverse);
14546
+ }
14547
+
14548
+ /* Warning variant */
14549
+ .muka-badge-number--warning {
14550
+ background-color: var(--color-state-warning-contrast);
14551
+ color: var(--color-text-default-inverse);
14552
+ }
14553
+
14554
+ /* Error variant */
14555
+ .muka-badge-number--error {
14556
+ background-color: var(--color-state-error-contrast);
14557
+ color: var(--color-text-default-inverse);
14558
+ }
14559
+
14560
+
14561
+ /* Breadcrumb */
14562
+ /* Breadcrumb Component Styles */
14563
+
14564
+ .muka-breadcrumb__list {
14565
+ display: flex;
14566
+ align-items: center;
14567
+ flex-wrap: wrap;
14568
+ list-style: none;
14569
+ margin: 0;
14570
+ padding: 0;
14571
+ gap: var(--spacing-1);
14572
+ }
14573
+
14574
+ .muka-breadcrumb__item {
14575
+ display: inline-flex;
14576
+ align-items: center;
14577
+ gap: var(--spacing-1);
14578
+ }
14579
+
14580
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) {
14581
+ padding-left: var(--spacing-1);
14582
+ }
14583
+
14584
+ .muka-breadcrumb__icon {
14585
+ display: inline-flex;
14586
+ align-items: center;
14587
+ color: var(--color-text-subtle-default);
14588
+ }
14589
+
14590
+ .muka-breadcrumb__icon .muka-icon {
14591
+ color: inherit;
14592
+ }
14593
+
14594
+ .muka-breadcrumb__item:has(.muka-breadcrumb__current) .muka-breadcrumb__icon {
14595
+ color: var(--color-text-default-default);
14596
+ }
14597
+
14598
+ .muka-breadcrumb__item:has(.muka-breadcrumb__link:hover) .muka-breadcrumb__icon {
14599
+ color: var(--color-text-action-default);
14600
+ }
14601
+
14602
+ /* Link styles */
14603
+ .muka-breadcrumb__link {
14604
+ color: var(--color-text-subtle-default);
14605
+ text-decoration: none;
14606
+ border: none;
14607
+ background: none;
14608
+ padding-inline: var(--spacing-2);
14609
+ padding-block: 0;
14610
+ cursor: pointer;
14611
+ font: inherit;
14612
+ transition: color 0.15s ease;
14613
+ }
14614
+
14615
+ .muka-breadcrumb__link:hover {
14616
+ color: var(--color-text-action-default);
14617
+ text-decoration: underline;
14618
+ }
14619
+
14620
+ /* Tighter gap after leading icon */
14621
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__link,
14622
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__current {
14623
+ padding-left: var(--spacing-1);
14624
+ }
14625
+
14626
+ /* Current page (last item, no context switcher) */
14627
+ .muka-breadcrumb__current {
14628
+ color: var(--color-text-default-default);
14629
+ font-weight: 600;
14630
+ padding-inline: var(--spacing-2);
14631
+ }
14632
+
14633
+ /* Separator */
14634
+ .muka-breadcrumb__separator {
14635
+ color: var(--color-text-subtle-default);
14636
+ user-select: none;
14637
+ }
14638
+
14639
+ .muka-breadcrumb__item--context {
14640
+ gap: 0;
14641
+ }
14642
+
14643
+ .muka-breadcrumb__list:has(.muka-breadcrumb__item--context) {
14644
+ gap: 0;
14643
14645
  }
14644
14646
 
14645
- /* Info variant */
14646
- .muka-badge-number--info {
14647
- background-color: var(--color-state-info-contrast);
14648
- color: var(--color-text-default-inverse);
14647
+ .muka-breadcrumb__item--context .muka-breadcrumb__separator {
14648
+ margin: 0;
14649
+ padding-inline: var(--spacing-1, 4px);
14649
14650
  }
14650
14651
 
14651
- /* Success variant */
14652
- .muka-badge-number--success {
14653
- background-color: var(--color-state-success-contrast);
14654
- color: var(--color-text-default-inverse);
14652
+ /* Size variants */
14653
+ .muka-breadcrumb--sm {
14654
+ font-family: var(--text-label-sm-regular-fontFamily);
14655
+ font-weight: var(--text-label-sm-regular-fontWeight);
14656
+ font-size: var(--text-label-sm-regular-fontSize);
14657
+ line-height: var(--text-label-sm-regular-lineHeight);
14655
14658
  }
14656
14659
 
14657
- /* Warning variant */
14658
- .muka-badge-number--warning {
14659
- background-color: var(--color-state-warning-contrast);
14660
- color: var(--color-text-default-inverse);
14660
+ .muka-breadcrumb--md {
14661
+ font-family: var(--text-label-md-regular-fontFamily);
14662
+ font-weight: var(--text-label-md-regular-fontWeight);
14663
+ font-size: var(--text-label-md-regular-fontSize);
14664
+ line-height: var(--text-label-md-regular-lineHeight);
14661
14665
  }
14662
14666
 
14663
- /* Error variant */
14664
- .muka-badge-number--error {
14665
- background-color: var(--color-state-error-contrast);
14666
- color: var(--color-text-default-inverse);
14667
+ .muka-breadcrumb--lg {
14668
+ font-family: var(--text-label-lg-regular-fontFamily);
14669
+ font-weight: var(--text-label-lg-regular-fontWeight);
14670
+ font-size: var(--text-label-lg-regular-fontSize);
14671
+ line-height: var(--text-label-lg-regular-lineHeight);
14667
14672
  }
14668
14673
 
14669
14674
 
@@ -14730,6 +14735,33 @@ button.muka-chat-photo-grid__tile:focus-visible {
14730
14735
  padding-left: var(--badge-padding-leading-lg);
14731
14736
  }
14732
14737
 
14738
+ /* Icon-only — square, sized to the badge height (Figma: 24 / 32 / 40).
14739
+ * Padding resets at size+icon-only specificity so `--has-icon` leading padding
14740
+ * cannot win and shift the icon off-center. */
14741
+ .muka-badge--icon-only {
14742
+ justify-content: center;
14743
+ align-items: center;
14744
+ gap: 0;
14745
+ }
14746
+
14747
+ .muka-badge--sm.muka-badge--icon-only,
14748
+ .muka-badge--md.muka-badge--icon-only,
14749
+ .muka-badge--lg.muka-badge--icon-only {
14750
+ padding: 0;
14751
+ }
14752
+
14753
+ .muka-badge--sm.muka-badge--icon-only {
14754
+ width: var(--badge-size-height-sm);
14755
+ }
14756
+
14757
+ .muka-badge--md.muka-badge--icon-only {
14758
+ width: var(--badge-size-height-md);
14759
+ }
14760
+
14761
+ .muka-badge--lg.muka-badge--icon-only {
14762
+ width: var(--badge-size-height-lg);
14763
+ }
14764
+
14733
14765
  /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
14734
14766
  .muka-badge__icon {
14735
14767
  display: inline-flex;
@@ -15269,102 +15301,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
15269
15301
  }
15270
15302
 
15271
15303
 
15272
- /* AppShell */
15273
- /* AppShell Component Styles */
15274
-
15275
- /*
15276
- * Layout wrapper for a persistent left navigation rail + main view area, with an
15277
- * optional full-width top app bar. The rail itself is styled by the BottomBar
15278
- * `desktopAs="sidebar"` rules (fixed 240px left rail at ≥1024px); AppShell shows/
15279
- * hides the sidebar + app-bar slots and offsets the main area to match. Both
15280
- * appear at the large tier — responsively (no `size`, scoped with
15281
- * `:not([data-size])`) or forced via `[data-size="lg"]`.
15282
- */
15283
- .muka-app-shell {
15284
- position: relative;
15285
- /* Reserved width for the rail; matches BottomBar's desktop-sidebar width. */
15286
- --app-shell-sidebar-width: 240px;
15287
- /* Height of the optional top app bar. */
15288
- --app-shell-appbar-height: 64px;
15289
- }
15290
-
15291
- /* Sidebar slot: hidden below the large tier (per-view nav handles small/medium). */
15292
- .muka-app-shell__sidebar {
15293
- display: none;
15294
- }
15295
-
15296
- .muka-app-shell__main {
15297
- min-height: 100dvh;
15298
- }
15299
-
15300
- /*
15301
- * App bar: full-width top strip. Intrinsic styling lives here (harmless while
15302
- * hidden); it is revealed only at the large tier. Sits above the sidebar rail.
15303
- */
15304
- .muka-app-shell__appbar {
15305
- display: none;
15306
- align-items: center;
15307
- justify-content: space-between;
15308
- gap: var(--spacing-4);
15309
- position: fixed;
15310
- top: 0;
15311
- left: 0;
15312
- right: 0;
15313
- height: var(--app-shell-appbar-height);
15314
- padding-inline: var(--spacing-4);
15315
- background-color: var(--color-surface-level3);
15316
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
15317
- z-index: 11; /* above the sidebar rail (z-index 10) */
15318
- }
15319
-
15320
- /* ─── Large tier (responsive) ─── */
15321
- @media (min-width: 1024px) {
15322
- .muka-app-shell:not([data-size]) .muka-app-shell__sidebar {
15323
- display: block;
15324
- }
15325
- .muka-app-shell:not([data-size]) .muka-app-shell__main {
15326
- padding-left: var(--app-shell-sidebar-width);
15327
- }
15328
- .muka-app-shell:not([data-size]) .muka-app-shell__appbar {
15329
- display: flex;
15330
- }
15331
- /* When an app bar is present, drop the rail + content below it so nothing overlaps. */
15332
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-app-shell__main {
15333
- padding-top: var(--app-shell-appbar-height);
15334
- }
15335
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15336
- top: var(--app-shell-appbar-height);
15337
- height: calc(100vh - var(--app-shell-appbar-height));
15338
- }
15339
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-view,
15340
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-nav-transition {
15341
- height: calc(100dvh - var(--app-shell-appbar-height));
15342
- }
15343
- }
15344
-
15345
- /* ─── Large tier (forced via size="lg") ─── */
15346
- .muka-app-shell[data-size='lg'] .muka-app-shell__sidebar {
15347
- display: block;
15348
- }
15349
- .muka-app-shell[data-size='lg'] .muka-app-shell__main {
15350
- padding-left: var(--app-shell-sidebar-width);
15351
- }
15352
- .muka-app-shell[data-size='lg'] .muka-app-shell__appbar {
15353
- display: flex;
15354
- }
15355
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-app-shell__main {
15356
- padding-top: var(--app-shell-appbar-height);
15357
- }
15358
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15359
- top: var(--app-shell-appbar-height);
15360
- height: calc(100vh - var(--app-shell-appbar-height));
15361
- }
15362
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-view,
15363
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-nav-transition {
15364
- height: calc(100dvh - var(--app-shell-appbar-height));
15365
- }
15366
-
15367
-
15368
15304
  /* Alert */
15369
15305
  /* Alert Component Styles - Using Muka Design Tokens */
15370
15306
 
@@ -15526,11 +15462,12 @@ button.muka-chat-photo-grid__tile:focus-visible {
15526
15462
  line-height: var(--text-body-base-regular-lineHeight);
15527
15463
  }
15528
15464
 
15529
- /* Action slot */
15465
+ /* Action slot — TextLink (or similar) below the message, matching Figma */
15530
15466
  .muka-alert__action {
15531
15467
  display: flex;
15532
- align-items: center;
15533
- flex-shrink: 0;
15468
+ flex-direction: column;
15469
+ align-items: flex-start;
15470
+ padding-top: var(--spacing-1);
15534
15471
  }
15535
15472
 
15536
15473
  /* Dismiss button - uses accent color per variant, aligned with icon row */
@@ -15567,6 +15504,102 @@ button.muka-chat-photo-grid__tile:focus-visible {
15567
15504
  }
15568
15505
 
15569
15506
 
15507
+ /* AppShell */
15508
+ /* AppShell Component Styles */
15509
+
15510
+ /*
15511
+ * Layout wrapper for a persistent left navigation rail + main view area, with an
15512
+ * optional full-width top app bar. The rail itself is styled by the BottomBar
15513
+ * `desktopAs="sidebar"` rules (fixed 240px left rail at ≥1024px); AppShell shows/
15514
+ * hides the sidebar + app-bar slots and offsets the main area to match. Both
15515
+ * appear at the large tier — responsively (no `size`, scoped with
15516
+ * `:not([data-size])`) or forced via `[data-size="lg"]`.
15517
+ */
15518
+ .muka-app-shell {
15519
+ position: relative;
15520
+ /* Reserved width for the rail; matches BottomBar's desktop-sidebar width. */
15521
+ --app-shell-sidebar-width: 240px;
15522
+ /* Height of the optional top app bar. */
15523
+ --app-shell-appbar-height: 64px;
15524
+ }
15525
+
15526
+ /* Sidebar slot: hidden below the large tier (per-view nav handles small/medium). */
15527
+ .muka-app-shell__sidebar {
15528
+ display: none;
15529
+ }
15530
+
15531
+ .muka-app-shell__main {
15532
+ min-height: 100dvh;
15533
+ }
15534
+
15535
+ /*
15536
+ * App bar: full-width top strip. Intrinsic styling lives here (harmless while
15537
+ * hidden); it is revealed only at the large tier. Sits above the sidebar rail.
15538
+ */
15539
+ .muka-app-shell__appbar {
15540
+ display: none;
15541
+ align-items: center;
15542
+ justify-content: space-between;
15543
+ gap: var(--spacing-4);
15544
+ position: fixed;
15545
+ top: 0;
15546
+ left: 0;
15547
+ right: 0;
15548
+ height: var(--app-shell-appbar-height);
15549
+ padding-inline: var(--spacing-4);
15550
+ background-color: var(--color-surface-level3);
15551
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
15552
+ z-index: 11; /* above the sidebar rail (z-index 10) */
15553
+ }
15554
+
15555
+ /* ─── Large tier (responsive) ─── */
15556
+ @media (min-width: 1024px) {
15557
+ .muka-app-shell:not([data-size]) .muka-app-shell__sidebar {
15558
+ display: block;
15559
+ }
15560
+ .muka-app-shell:not([data-size]) .muka-app-shell__main {
15561
+ padding-left: var(--app-shell-sidebar-width);
15562
+ }
15563
+ .muka-app-shell:not([data-size]) .muka-app-shell__appbar {
15564
+ display: flex;
15565
+ }
15566
+ /* When an app bar is present, drop the rail + content below it so nothing overlaps. */
15567
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-app-shell__main {
15568
+ padding-top: var(--app-shell-appbar-height);
15569
+ }
15570
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15571
+ top: var(--app-shell-appbar-height);
15572
+ height: calc(100vh - var(--app-shell-appbar-height));
15573
+ }
15574
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-view,
15575
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-nav-transition {
15576
+ height: calc(100dvh - var(--app-shell-appbar-height));
15577
+ }
15578
+ }
15579
+
15580
+ /* ─── Large tier (forced via size="lg") ─── */
15581
+ .muka-app-shell[data-size='lg'] .muka-app-shell__sidebar {
15582
+ display: block;
15583
+ }
15584
+ .muka-app-shell[data-size='lg'] .muka-app-shell__main {
15585
+ padding-left: var(--app-shell-sidebar-width);
15586
+ }
15587
+ .muka-app-shell[data-size='lg'] .muka-app-shell__appbar {
15588
+ display: flex;
15589
+ }
15590
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-app-shell__main {
15591
+ padding-top: var(--app-shell-appbar-height);
15592
+ }
15593
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15594
+ top: var(--app-shell-appbar-height);
15595
+ height: calc(100vh - var(--app-shell-appbar-height));
15596
+ }
15597
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-view,
15598
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-nav-transition {
15599
+ height: calc(100dvh - var(--app-shell-appbar-height));
15600
+ }
15601
+
15602
+
15570
15603
  /* AgentTaskList */
15571
15604
  /* AgentTaskList Component Styles */
15572
15605