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