@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
@@ -5231,81 +5231,6 @@ body {
5231
5231
  }
5232
5232
 
5233
5233
 
5234
- /* Skeleton */
5235
- /* Skeleton Component Styles */
5236
-
5237
- .muka-skeleton {
5238
- background-color: var(--color-surface-level1);
5239
- display: block;
5240
- }
5241
-
5242
- /* Variants */
5243
- .muka-skeleton--text {
5244
- height: 1em;
5245
- border-radius: var(--radius-md);
5246
- width: 100%;
5247
- }
5248
-
5249
- .muka-skeleton--circular {
5250
- width: 2.5rem;
5251
- height: 2.5rem;
5252
- border-radius: var(--radius-full);
5253
- }
5254
-
5255
- .muka-skeleton--rectangular {
5256
- height: 7.5rem;
5257
- border-radius: var(--radius-md);
5258
- width: 100%;
5259
- }
5260
-
5261
- /* Last line in multi-line text is shorter */
5262
- .muka-skeleton--last-line {
5263
- width: 80%;
5264
- }
5265
-
5266
- /* Lines container */
5267
- .muka-skeleton__lines {
5268
- display: flex;
5269
- flex-direction: column;
5270
- gap: var(--spacing-2);
5271
- }
5272
-
5273
- /* Shimmer animation */
5274
- @keyframes muka-skeleton-shimmer {
5275
- 0% {
5276
- background-position: -200% 0;
5277
- }
5278
- 100% {
5279
- background-position: 200% 0;
5280
- }
5281
- }
5282
-
5283
- .muka-skeleton--shimmer {
5284
- background: linear-gradient(
5285
- 90deg,
5286
- var(--color-surface-level1) 25%,
5287
- var(--color-surface-level2) 50%,
5288
- var(--color-surface-level1) 75%
5289
- );
5290
- background-size: 200% 100%;
5291
- animation: muka-skeleton-shimmer 1.5s ease-in-out infinite;
5292
- }
5293
-
5294
- /* Pulse animation */
5295
- @keyframes muka-skeleton-pulse {
5296
- 0%, 100% {
5297
- opacity: 1;
5298
- }
5299
- 50% {
5300
- opacity: 0.4;
5301
- }
5302
- }
5303
-
5304
- .muka-skeleton--pulse {
5305
- animation: muka-skeleton-pulse 1.5s ease-in-out infinite;
5306
- }
5307
-
5308
-
5309
5234
  /* Sheet */
5310
5235
  /* Sheet Component Styles */
5311
5236
 
@@ -5386,6 +5311,81 @@ body {
5386
5311
  }
5387
5312
 
5388
5313
 
5314
+ /* Skeleton */
5315
+ /* Skeleton Component Styles */
5316
+
5317
+ .muka-skeleton {
5318
+ background-color: var(--color-surface-level1);
5319
+ display: block;
5320
+ }
5321
+
5322
+ /* Variants */
5323
+ .muka-skeleton--text {
5324
+ height: 1em;
5325
+ border-radius: var(--radius-md);
5326
+ width: 100%;
5327
+ }
5328
+
5329
+ .muka-skeleton--circular {
5330
+ width: 2.5rem;
5331
+ height: 2.5rem;
5332
+ border-radius: var(--radius-full);
5333
+ }
5334
+
5335
+ .muka-skeleton--rectangular {
5336
+ height: 7.5rem;
5337
+ border-radius: var(--radius-md);
5338
+ width: 100%;
5339
+ }
5340
+
5341
+ /* Last line in multi-line text is shorter */
5342
+ .muka-skeleton--last-line {
5343
+ width: 80%;
5344
+ }
5345
+
5346
+ /* Lines container */
5347
+ .muka-skeleton__lines {
5348
+ display: flex;
5349
+ flex-direction: column;
5350
+ gap: var(--spacing-2);
5351
+ }
5352
+
5353
+ /* Shimmer animation */
5354
+ @keyframes muka-skeleton-shimmer {
5355
+ 0% {
5356
+ background-position: -200% 0;
5357
+ }
5358
+ 100% {
5359
+ background-position: 200% 0;
5360
+ }
5361
+ }
5362
+
5363
+ .muka-skeleton--shimmer {
5364
+ background: linear-gradient(
5365
+ 90deg,
5366
+ var(--color-surface-level1) 25%,
5367
+ var(--color-surface-level2) 50%,
5368
+ var(--color-surface-level1) 75%
5369
+ );
5370
+ background-size: 200% 100%;
5371
+ animation: muka-skeleton-shimmer 1.5s ease-in-out infinite;
5372
+ }
5373
+
5374
+ /* Pulse animation */
5375
+ @keyframes muka-skeleton-pulse {
5376
+ 0%, 100% {
5377
+ opacity: 1;
5378
+ }
5379
+ 50% {
5380
+ opacity: 0.4;
5381
+ }
5382
+ }
5383
+
5384
+ .muka-skeleton--pulse {
5385
+ animation: muka-skeleton-pulse 1.5s ease-in-out infinite;
5386
+ }
5387
+
5388
+
5389
5389
  /* Select */
5390
5390
  /* Select Component Styles - Aligned with Input for consistency */
5391
5391
 
@@ -7120,6 +7120,7 @@ body {
7120
7120
 
7121
7121
  /* Per-state gap: content-bearing steps are tighter, header-only steps looser */
7122
7122
  .muka-progress-accordeon--current,
7123
+ .muka-progress-accordeon--current.muka-progress-accordeon--expanded,
7123
7124
  .muka-progress-accordeon--past.muka-progress-accordeon--expanded,
7124
7125
  .muka-progress-accordeon--upcoming.muka-progress-accordeon--expanded {
7125
7126
  gap: var(--spacing-6);
@@ -7127,7 +7128,8 @@ body {
7127
7128
 
7128
7129
  .muka-progress-accordeon--upcoming,
7129
7130
  .muka-progress-accordeon--past.muka-progress-accordeon--collapsed,
7130
- .muka-progress-accordeon--upcoming.muka-progress-accordeon--collapsed {
7131
+ .muka-progress-accordeon--upcoming.muka-progress-accordeon--collapsed,
7132
+ .muka-progress-accordeon--current.muka-progress-accordeon--collapsed {
7131
7133
  gap: var(--spacing-8);
7132
7134
  }
7133
7135
 
@@ -7272,32 +7274,44 @@ body {
7272
7274
  width: 100%;
7273
7275
  }
7274
7276
 
7275
- /* ─── Collapse/expand animation (past & upcoming steps) ──────
7276
- The grid-template-rows 1fr → 0fr technique animates the content to/from its
7277
- intrinsic (auto) height with no magic max-height. Under prefers-reduced-motion
7278
- --motion-duration-view resolves to 0ms, so the toggle stays instant. */
7279
- .muka-progress-accordeon__slot-wrapper {
7277
+ /* ─── Collapse/expand animation (any expandable step) ──────
7278
+ Animates grid-template-rows 1fr ↔ 0fr so the panel (slot + actions) grows and
7279
+ shrinks to its intrinsic height. Opacity fades with the same duration.
7280
+ Under prefers-reduced-motion, --motion-duration-view is 0ms. */
7281
+ .muka-progress-accordeon__panel-wrapper {
7280
7282
  display: grid;
7281
7283
  grid-template-rows: 1fr;
7282
- transition: grid-template-rows var(--motion-duration-view) var(--motion-easing-enter);
7284
+ opacity: 1;
7285
+ transition:
7286
+ grid-template-rows var(--motion-duration-view) var(--motion-easing-enter),
7287
+ opacity var(--motion-duration-view) var(--motion-easing-enter);
7283
7288
  }
7284
7289
 
7285
- .muka-progress-accordeon__slot-wrapper--collapsed {
7290
+ .muka-progress-accordeon__panel-wrapper--collapsed {
7286
7291
  grid-template-rows: 0fr;
7292
+ opacity: 0;
7293
+ transition:
7294
+ grid-template-rows var(--motion-duration-view) var(--motion-easing-exit),
7295
+ opacity calc(var(--motion-duration-view) * 0.6) var(--motion-easing-exit);
7287
7296
  }
7288
7297
 
7289
7298
  /* The direct grid child clips and must have NO padding/border of its own —
7290
7299
  min-height:0 lets it shrink, and with no padding the 0fr track reaches a true
7291
7300
  0 height (padding on the item would leave a residual gap when collapsed). */
7292
- .muka-progress-accordeon__slot-clip {
7301
+ .muka-progress-accordeon__panel-clip {
7293
7302
  overflow: hidden;
7294
7303
  min-height: 0;
7295
7304
  }
7296
7305
 
7297
- /* The header↔content spacing lives on the inner slot (inside the clip region)
7298
- so it collapses together with the content. */
7299
- .muka-progress-accordeon__slot-wrapper .muka-progress-accordeon__slot {
7306
+ /* Header↔content spacing + slot/actions gap live inside the clip so they
7307
+ collapse together with the panel. */
7308
+ .muka-progress-accordeon__panel {
7309
+ display: flex;
7310
+ flex-direction: column;
7311
+ align-items: stretch;
7312
+ gap: var(--spacing-6);
7300
7313
  padding-top: var(--spacing-4);
7314
+ width: 100%;
7301
7315
  }
7302
7316
 
7303
7317
  /* ─── Action buttons (current state) ─────────────────────── */
@@ -7348,72 +7362,244 @@ body {
7348
7362
  }
7349
7363
 
7350
7364
 
7351
- /* ProfileBadge */
7352
- /* ProfileBadge Component Styles - Using Muka Design Tokens */
7365
+ /* Progress */
7366
+ /* Progress Component Styles - Using Muka Design Tokens */
7353
7367
 
7354
- .muka-profile-badge {
7355
- display: inline-flex;
7368
+ /* ========================================
7369
+ BAR VARIANT
7370
+ ======================================== */
7371
+
7372
+ .muka-progress--bar {
7373
+ display: flex;
7356
7374
  align-items: center;
7357
- font-family: var(--text-body-base-regular-fontFamily);
7375
+ gap: var(--spacing-2);
7376
+ width: 100%;
7358
7377
  }
7359
7378
 
7360
- /* Size variants */
7361
- .muka-profile-badge--lg {
7362
- gap: var(--spacing-4); /* 16px */
7379
+ .muka-progress--bar .muka-progress__track {
7380
+ flex: 1;
7381
+ background-color: var(--color-surface-level1);
7382
+ border-radius: var(--border-radius-full);
7383
+ overflow: hidden;
7363
7384
  }
7364
7385
 
7365
- .muka-profile-badge--md {
7366
- gap: var(--spacing-3); /* 12px */
7386
+ .muka-progress--bar.muka-progress--sm .muka-progress__track {
7387
+ height: var(--progress-size-bar-height-sm);
7367
7388
  }
7368
7389
 
7369
- .muka-profile-badge__avatar {
7370
- flex-shrink: 0;
7390
+ .muka-progress--bar.muka-progress--md .muka-progress__track {
7391
+ height: var(--progress-size-bar-height-md);
7371
7392
  }
7372
7393
 
7373
- /* Text stack */
7374
- .muka-profile-badge__text {
7375
- display: flex;
7376
- flex-direction: column;
7377
- align-items: flex-start;
7378
- min-width: 0;
7394
+ .muka-progress--bar.muka-progress--lg .muka-progress__track {
7395
+ height: var(--progress-size-bar-height-lg);
7379
7396
  }
7380
7397
 
7381
- .muka-profile-badge__name {
7382
- font-family: var(--text-body-base-regular-fontFamily);
7383
- font-size: var(--text-body-base-regular-fontSize);
7384
- font-weight: var(--text-body-base-regular-fontWeight);
7385
- line-height: var(--text-body-base-regular-lineHeight);
7386
- color: var(--color-text-default-default);
7398
+ .muka-progress--bar .muka-progress__fill {
7399
+ height: 100%;
7400
+ background-color: var(--color-action-default);
7401
+ border-radius: var(--border-radius-full);
7402
+ transition: width 0.3s ease;
7387
7403
  }
7388
7404
 
7389
- .muka-profile-badge__email {
7390
- font-family: var(--text-body-xs-regular-fontFamily);
7391
- font-size: var(--text-body-xs-regular-fontSize);
7392
- font-weight: var(--text-body-xs-regular-fontWeight);
7393
- line-height: var(--text-body-xs-regular-lineHeight);
7394
- color: var(--color-text-subtle-default);
7405
+ .muka-progress--bar .muka-progress__label {
7406
+ flex-shrink: 0;
7407
+ font-family: var(--text-label-sm-semibold-fontFamily);
7408
+ font-weight: var(--text-label-sm-semibold-fontWeight);
7409
+ font-size: var(--text-label-sm-semibold-fontSize);
7410
+ line-height: var(--text-label-sm-semibold-lineHeight);
7411
+ color: var(--color-text-default-default);
7412
+ min-width: 3ch;
7413
+ text-align: right;
7395
7414
  }
7396
7415
 
7397
- /* Clickable state */
7398
- .muka-profile-badge--clickable {
7399
- cursor: pointer;
7400
- border: none;
7401
- background: none;
7402
- padding: 0;
7403
- text-align: left;
7404
- border-radius: var(--radius-md);
7405
- transition: opacity 0.2s ease;
7416
+ /* Indeterminate animation for bar */
7417
+ .muka-progress--bar.muka-progress--indeterminate .muka-progress__fill {
7418
+ width: 40%;
7419
+ animation: muka-progress-bar-indeterminate 1.5s ease-in-out infinite;
7406
7420
  }
7407
7421
 
7408
- .muka-profile-badge--clickable:hover {
7409
- opacity: 0.9;
7422
+ @keyframes muka-progress-bar-indeterminate {
7423
+ 0% {
7424
+ transform: translateX(-100%);
7425
+ }
7426
+ 100% {
7427
+ transform: translateX(250%);
7428
+ }
7410
7429
  }
7411
7430
 
7412
- .muka-profile-badge--clickable:active {
7413
- opacity: 0.8;
7431
+ /* ========================================
7432
+ CIRCLE VARIANT
7433
+ ======================================== */
7434
+
7435
+ .muka-progress--circle {
7436
+ position: relative;
7437
+ display: inline-flex;
7438
+ align-items: center;
7439
+ justify-content: center;
7414
7440
  }
7415
7441
 
7416
- .muka-profile-badge--clickable:focus-visible {
7442
+ .muka-progress--circle.muka-progress--sm {
7443
+ width: var(--progress-size-circle-diameter-sm);
7444
+ height: var(--progress-size-circle-diameter-sm);
7445
+ }
7446
+
7447
+ .muka-progress--circle.muka-progress--md {
7448
+ width: var(--progress-size-circle-diameter-md);
7449
+ height: var(--progress-size-circle-diameter-md);
7450
+ }
7451
+
7452
+ .muka-progress--circle.muka-progress--lg {
7453
+ width: var(--progress-size-circle-diameter-lg);
7454
+ height: var(--progress-size-circle-diameter-lg);
7455
+ }
7456
+
7457
+ .muka-progress__circle {
7458
+ width: 100%;
7459
+ height: 100%;
7460
+ transform: rotate(-90deg);
7461
+ }
7462
+
7463
+ .muka-progress--circle .muka-progress__track {
7464
+ fill: none;
7465
+ stroke: var(--color-surface-level1);
7466
+ }
7467
+
7468
+ .muka-progress--circle.muka-progress--sm .muka-progress__track,
7469
+ .muka-progress--circle.muka-progress--sm .muka-progress__fill {
7470
+ stroke-width: var(--progress-size-circle-strokeWidth-sm);
7471
+ }
7472
+
7473
+ .muka-progress--circle.muka-progress--md .muka-progress__track,
7474
+ .muka-progress--circle.muka-progress--md .muka-progress__fill {
7475
+ stroke-width: var(--progress-size-circle-strokeWidth-md);
7476
+ }
7477
+
7478
+ .muka-progress--circle.muka-progress--lg .muka-progress__track,
7479
+ .muka-progress--circle.muka-progress--lg .muka-progress__fill {
7480
+ stroke-width: var(--progress-size-circle-strokeWidth-lg);
7481
+ }
7482
+
7483
+ .muka-progress--circle .muka-progress__fill {
7484
+ fill: none;
7485
+ stroke: var(--color-action-default);
7486
+ stroke-linecap: round;
7487
+ transition: stroke-dashoffset 0.3s ease;
7488
+ }
7489
+
7490
+ .muka-progress--circle .muka-progress__label {
7491
+ position: absolute;
7492
+ font-family: var(--text-label-sm-semibold-fontFamily);
7493
+ font-weight: var(--text-label-sm-semibold-fontWeight);
7494
+ color: var(--color-text-default-default);
7495
+ }
7496
+
7497
+ .muka-progress--circle.muka-progress--sm .muka-progress__label {
7498
+ font-size: var(--text-label-sm-semibold-fontSize);
7499
+ }
7500
+
7501
+ .muka-progress--circle.muka-progress--md .muka-progress__label {
7502
+ font-size: var(--text-label-md-semibold-fontSize);
7503
+ }
7504
+
7505
+ .muka-progress--circle.muka-progress--lg .muka-progress__label {
7506
+ font-size: var(--text-label-lg-semibold-fontSize);
7507
+ }
7508
+
7509
+ /* Indeterminate animation for circle */
7510
+ .muka-progress--circle.muka-progress--indeterminate .muka-progress__circle {
7511
+ animation: muka-progress-circle-rotate 2s linear infinite;
7512
+ }
7513
+
7514
+ .muka-progress--circle.muka-progress--indeterminate .muka-progress__fill {
7515
+ animation: muka-progress-circle-dash 1.5s ease-in-out infinite;
7516
+ }
7517
+
7518
+ @keyframes muka-progress-circle-rotate {
7519
+ 100% {
7520
+ transform: rotate(270deg);
7521
+ }
7522
+ }
7523
+
7524
+ @keyframes muka-progress-circle-dash {
7525
+ 0% {
7526
+ stroke-dashoffset: 220;
7527
+ }
7528
+ 50% {
7529
+ stroke-dashoffset: 70;
7530
+ }
7531
+ 100% {
7532
+ stroke-dashoffset: 220;
7533
+ }
7534
+ }
7535
+
7536
+
7537
+ /* ProfileBadge */
7538
+ /* ProfileBadge Component Styles - Using Muka Design Tokens */
7539
+
7540
+ .muka-profile-badge {
7541
+ display: inline-flex;
7542
+ align-items: center;
7543
+ font-family: var(--text-body-base-regular-fontFamily);
7544
+ }
7545
+
7546
+ /* Size variants */
7547
+ .muka-profile-badge--lg {
7548
+ gap: var(--spacing-4); /* 16px */
7549
+ }
7550
+
7551
+ .muka-profile-badge--md {
7552
+ gap: var(--spacing-3); /* 12px */
7553
+ }
7554
+
7555
+ .muka-profile-badge__avatar {
7556
+ flex-shrink: 0;
7557
+ }
7558
+
7559
+ /* Text stack */
7560
+ .muka-profile-badge__text {
7561
+ display: flex;
7562
+ flex-direction: column;
7563
+ align-items: flex-start;
7564
+ min-width: 0;
7565
+ }
7566
+
7567
+ .muka-profile-badge__name {
7568
+ font-family: var(--text-body-base-regular-fontFamily);
7569
+ font-size: var(--text-body-base-regular-fontSize);
7570
+ font-weight: var(--text-body-base-regular-fontWeight);
7571
+ line-height: var(--text-body-base-regular-lineHeight);
7572
+ color: var(--color-text-default-default);
7573
+ }
7574
+
7575
+ .muka-profile-badge__email {
7576
+ font-family: var(--text-body-xs-regular-fontFamily);
7577
+ font-size: var(--text-body-xs-regular-fontSize);
7578
+ font-weight: var(--text-body-xs-regular-fontWeight);
7579
+ line-height: var(--text-body-xs-regular-lineHeight);
7580
+ color: var(--color-text-subtle-default);
7581
+ }
7582
+
7583
+ /* Clickable state */
7584
+ .muka-profile-badge--clickable {
7585
+ cursor: pointer;
7586
+ border: none;
7587
+ background: none;
7588
+ padding: 0;
7589
+ text-align: left;
7590
+ border-radius: var(--radius-md);
7591
+ transition: opacity 0.2s ease;
7592
+ }
7593
+
7594
+ .muka-profile-badge--clickable:hover {
7595
+ opacity: 0.9;
7596
+ }
7597
+
7598
+ .muka-profile-badge--clickable:active {
7599
+ opacity: 0.8;
7600
+ }
7601
+
7602
+ .muka-profile-badge--clickable:focus-visible {
7417
7603
  outline: 2px solid var(--color-border-focus);
7418
7604
  outline-offset: 2px;
7419
7605
  }
@@ -7516,37 +7702,6 @@ body {
7516
7702
  }
7517
7703
 
7518
7704
 
7519
- /* Popover */
7520
- /* Popover Component Styles */
7521
-
7522
- .muka-popover__content {
7523
- background-color: var(--color-surface-level3);
7524
- border: var(--border-width-regular) solid var(--color-border-default);
7525
- border-radius: var(--radius-md);
7526
- padding: var(--spacing-4);
7527
- box-shadow: var(--shadow-level3);
7528
- max-width: 20rem;
7529
- z-index: 50;
7530
- animation: muka-popover-fade-in 150ms ease;
7531
- }
7532
-
7533
- @keyframes muka-popover-fade-in {
7534
- from {
7535
- opacity: 0;
7536
- transform: scale(0.96);
7537
- }
7538
- to {
7539
- opacity: 1;
7540
- transform: scale(1);
7541
- }
7542
- }
7543
-
7544
- /* Arrow */
7545
- .muka-popover__arrow {
7546
- fill: var(--color-surface-level3);
7547
- }
7548
-
7549
-
7550
7705
  /* PieChart */
7551
7706
  /* PieChart Component Styles - Using Muka Design Tokens */
7552
7707
 
@@ -7644,6 +7799,37 @@ body {
7644
7799
  }
7645
7800
 
7646
7801
 
7802
+ /* Popover */
7803
+ /* Popover Component Styles */
7804
+
7805
+ .muka-popover__content {
7806
+ background-color: var(--color-surface-level3);
7807
+ border: var(--border-width-regular) solid var(--color-border-default);
7808
+ border-radius: var(--radius-md);
7809
+ padding: var(--spacing-4);
7810
+ box-shadow: var(--shadow-level3);
7811
+ max-width: 20rem;
7812
+ z-index: 50;
7813
+ animation: muka-popover-fade-in 150ms ease;
7814
+ }
7815
+
7816
+ @keyframes muka-popover-fade-in {
7817
+ from {
7818
+ opacity: 0;
7819
+ transform: scale(0.96);
7820
+ }
7821
+ to {
7822
+ opacity: 1;
7823
+ transform: scale(1);
7824
+ }
7825
+ }
7826
+
7827
+ /* Arrow */
7828
+ .muka-popover__arrow {
7829
+ fill: var(--color-surface-level3);
7830
+ }
7831
+
7832
+
7647
7833
  /* PhotoUploader */
7648
7834
  /* PhotoUploader Component Styles - Using Muka Design Tokens */
7649
7835
 
@@ -7689,7 +7875,7 @@ body {
7689
7875
  padding: 0;
7690
7876
  }
7691
7877
 
7692
- /* ─── Drop zone card ──────────────────────────────────── */
7878
+ /* ─── Drop zone card (button + "or drop here") ────────── */
7693
7879
  .muka-photo-uploader__dropzone {
7694
7880
  display: flex;
7695
7881
  flex-direction: column;
@@ -7713,24 +7899,12 @@ body {
7713
7899
  background-color: var(--color-surface-level1);
7714
7900
  }
7715
7901
 
7716
- .muka-photo-uploader__dropzone:focus-visible {
7717
- outline: 2px solid var(--color-border-focus);
7718
- outline-offset: 2px;
7719
- }
7720
-
7721
- .muka-photo-uploader__dropzone-icon {
7722
- display: flex;
7723
- align-items: center;
7724
- justify-content: center;
7725
- color: var(--color-icon-subtle-default);
7726
- }
7727
-
7728
7902
  .muka-photo-uploader__dropzone-text {
7729
- font-family: var(--text-body-base-regular-fontFamily);
7730
- font-size: var(--text-body-base-regular-fontSize);
7731
- font-weight: var(--text-body-base-regular-fontWeight);
7732
- line-height: var(--text-body-base-regular-lineHeight);
7733
- color: var(--color-text-subtle-default);
7903
+ font-family: var(--text-subheading-sm-fontFamily);
7904
+ font-size: var(--text-subheading-sm-fontSize);
7905
+ font-weight: var(--text-subheading-sm-fontWeight);
7906
+ line-height: var(--text-subheading-sm-lineHeight);
7907
+ color: var(--color-text-default-default);
7734
7908
  }
7735
7909
 
7736
7910
  /* ─── Disabled ────────────────────────────────────────── */
@@ -7772,187 +7946,15 @@ body {
7772
7946
  }
7773
7947
 
7774
7948
 
7775
- /* Progress */
7776
- /* Progress Component Styles - Using Muka Design Tokens */
7777
-
7778
- /* ========================================
7779
- BAR VARIANT
7780
- ======================================== */
7949
+ /* PhotoDraftStrip */
7950
+ /* PhotoDraftStrip Component Styles */
7781
7951
 
7782
- .muka-progress--bar {
7952
+ .muka-photo-draft-strip {
7783
7953
  display: flex;
7784
7954
  align-items: center;
7785
- gap: var(--spacing-2);
7955
+ gap: var(--spacing-3);
7786
7956
  width: 100%;
7787
- }
7788
-
7789
- .muka-progress--bar .muka-progress__track {
7790
- flex: 1;
7791
- background-color: var(--color-surface-level1);
7792
- border-radius: var(--border-radius-full);
7793
- overflow: hidden;
7794
- }
7795
-
7796
- .muka-progress--bar.muka-progress--sm .muka-progress__track {
7797
- height: var(--progress-size-bar-height-sm);
7798
- }
7799
-
7800
- .muka-progress--bar.muka-progress--md .muka-progress__track {
7801
- height: var(--progress-size-bar-height-md);
7802
- }
7803
-
7804
- .muka-progress--bar.muka-progress--lg .muka-progress__track {
7805
- height: var(--progress-size-bar-height-lg);
7806
- }
7807
-
7808
- .muka-progress--bar .muka-progress__fill {
7809
- height: 100%;
7810
- background-color: var(--color-action-default);
7811
- border-radius: var(--border-radius-full);
7812
- transition: width 0.3s ease;
7813
- }
7814
-
7815
- .muka-progress--bar .muka-progress__label {
7816
- flex-shrink: 0;
7817
- font-family: var(--text-label-sm-semibold-fontFamily);
7818
- font-weight: var(--text-label-sm-semibold-fontWeight);
7819
- font-size: var(--text-label-sm-semibold-fontSize);
7820
- line-height: var(--text-label-sm-semibold-lineHeight);
7821
- color: var(--color-text-default-default);
7822
- min-width: 3ch;
7823
- text-align: right;
7824
- }
7825
-
7826
- /* Indeterminate animation for bar */
7827
- .muka-progress--bar.muka-progress--indeterminate .muka-progress__fill {
7828
- width: 40%;
7829
- animation: muka-progress-bar-indeterminate 1.5s ease-in-out infinite;
7830
- }
7831
-
7832
- @keyframes muka-progress-bar-indeterminate {
7833
- 0% {
7834
- transform: translateX(-100%);
7835
- }
7836
- 100% {
7837
- transform: translateX(250%);
7838
- }
7839
- }
7840
-
7841
- /* ========================================
7842
- CIRCLE VARIANT
7843
- ======================================== */
7844
-
7845
- .muka-progress--circle {
7846
- position: relative;
7847
- display: inline-flex;
7848
- align-items: center;
7849
- justify-content: center;
7850
- }
7851
-
7852
- .muka-progress--circle.muka-progress--sm {
7853
- width: var(--progress-size-circle-diameter-sm);
7854
- height: var(--progress-size-circle-diameter-sm);
7855
- }
7856
-
7857
- .muka-progress--circle.muka-progress--md {
7858
- width: var(--progress-size-circle-diameter-md);
7859
- height: var(--progress-size-circle-diameter-md);
7860
- }
7861
-
7862
- .muka-progress--circle.muka-progress--lg {
7863
- width: var(--progress-size-circle-diameter-lg);
7864
- height: var(--progress-size-circle-diameter-lg);
7865
- }
7866
-
7867
- .muka-progress__circle {
7868
- width: 100%;
7869
- height: 100%;
7870
- transform: rotate(-90deg);
7871
- }
7872
-
7873
- .muka-progress--circle .muka-progress__track {
7874
- fill: none;
7875
- stroke: var(--color-surface-level1);
7876
- }
7877
-
7878
- .muka-progress--circle.muka-progress--sm .muka-progress__track,
7879
- .muka-progress--circle.muka-progress--sm .muka-progress__fill {
7880
- stroke-width: var(--progress-size-circle-strokeWidth-sm);
7881
- }
7882
-
7883
- .muka-progress--circle.muka-progress--md .muka-progress__track,
7884
- .muka-progress--circle.muka-progress--md .muka-progress__fill {
7885
- stroke-width: var(--progress-size-circle-strokeWidth-md);
7886
- }
7887
-
7888
- .muka-progress--circle.muka-progress--lg .muka-progress__track,
7889
- .muka-progress--circle.muka-progress--lg .muka-progress__fill {
7890
- stroke-width: var(--progress-size-circle-strokeWidth-lg);
7891
- }
7892
-
7893
- .muka-progress--circle .muka-progress__fill {
7894
- fill: none;
7895
- stroke: var(--color-action-default);
7896
- stroke-linecap: round;
7897
- transition: stroke-dashoffset 0.3s ease;
7898
- }
7899
-
7900
- .muka-progress--circle .muka-progress__label {
7901
- position: absolute;
7902
- font-family: var(--text-label-sm-semibold-fontFamily);
7903
- font-weight: var(--text-label-sm-semibold-fontWeight);
7904
- color: var(--color-text-default-default);
7905
- }
7906
-
7907
- .muka-progress--circle.muka-progress--sm .muka-progress__label {
7908
- font-size: var(--text-label-sm-semibold-fontSize);
7909
- }
7910
-
7911
- .muka-progress--circle.muka-progress--md .muka-progress__label {
7912
- font-size: var(--text-label-md-semibold-fontSize);
7913
- }
7914
-
7915
- .muka-progress--circle.muka-progress--lg .muka-progress__label {
7916
- font-size: var(--text-label-lg-semibold-fontSize);
7917
- }
7918
-
7919
- /* Indeterminate animation for circle */
7920
- .muka-progress--circle.muka-progress--indeterminate .muka-progress__circle {
7921
- animation: muka-progress-circle-rotate 2s linear infinite;
7922
- }
7923
-
7924
- .muka-progress--circle.muka-progress--indeterminate .muka-progress__fill {
7925
- animation: muka-progress-circle-dash 1.5s ease-in-out infinite;
7926
- }
7927
-
7928
- @keyframes muka-progress-circle-rotate {
7929
- 100% {
7930
- transform: rotate(270deg);
7931
- }
7932
- }
7933
-
7934
- @keyframes muka-progress-circle-dash {
7935
- 0% {
7936
- stroke-dashoffset: 220;
7937
- }
7938
- 50% {
7939
- stroke-dashoffset: 70;
7940
- }
7941
- 100% {
7942
- stroke-dashoffset: 220;
7943
- }
7944
- }
7945
-
7946
-
7947
- /* PhotoDraftStrip */
7948
- /* PhotoDraftStrip Component Styles */
7949
-
7950
- .muka-photo-draft-strip {
7951
- display: flex;
7952
- align-items: center;
7953
- gap: var(--spacing-3);
7954
- width: 100%;
7955
- padding: var(--spacing-2) 0;
7957
+ padding: var(--spacing-2) 0;
7956
7958
  }
7957
7959
 
7958
7960
  .muka-photo-draft-strip__track {
@@ -8704,7 +8706,10 @@ body {
8704
8706
  max-width: 100%;
8705
8707
  max-height: 100%;
8706
8708
  object-fit: contain;
8707
- pointer-events: none;
8709
+ /* The image takes touches, so a long press opens the OS menu (save, share,
8710
+ copy). The swipe still works: pointer events bubble to the stage, and a
8711
+ long press doesn't move far enough to start a drag. */
8712
+ -webkit-touch-callout: default;
8708
8713
  }
8709
8714
 
8710
8715
  /* ─── Previous / next: devices that can hover ─────────── */
@@ -10160,207 +10165,66 @@ li.muka-listitem {
10160
10165
  }
10161
10166
 
10162
10167
 
10163
- /* EmptyState */
10164
- /* EmptyState Component Styles - Using Muka Design Tokens */
10168
+ /* EmojiPicker */
10169
+ /* EmojiPicker Component Styles */
10165
10170
 
10166
- .muka-emptystate {
10167
- display: flex;
10168
- flex-direction: column;
10169
- align-items: center;
10170
- justify-content: center;
10171
- gap: var(--emptystate-container-gap);
10172
- max-width: var(--emptystate-container-maxWidth);
10173
- margin: 0 auto;
10174
- text-align: center;
10171
+ .muka-emoji-picker {
10172
+ display: grid;
10173
+ grid-template-columns: repeat(8, 1fr);
10174
+ gap: var(--spacing-1);
10175
+ padding: var(--spacing-2);
10176
+ max-height: 12rem;
10177
+ overflow-y: auto;
10178
+ background: var(--color-surface-level2);
10179
+ border: var(--border-width-regular, 1px) solid var(--color-border-default);
10180
+ border-radius: var(--radius-lg);
10181
+ box-shadow: var(--menu-content-shadow, 0 4px 12px rgba(0, 0, 0, 0.12));
10175
10182
  }
10176
10183
 
10177
- /* Alignment variants */
10178
- .muka-emptystate--left {
10179
- align-items: flex-start;
10180
- text-align: left;
10184
+ .muka-emoji-picker__glyph {
10185
+ font-size: 1.25rem;
10186
+ line-height: 1;
10181
10187
  }
10182
10188
 
10183
- /* Size variants */
10184
- .muka-emptystate--sm {
10185
- padding: var(--emptystate-container-padding-sm);
10186
- }
10187
10189
 
10188
- .muka-emptystate--md {
10189
- padding: var(--emptystate-container-padding-md);
10190
- }
10190
+ /* DropdownSelect */
10191
+ /* DropdownSelect — Figma Dropdown Menu form field (Menu + chips) */
10191
10192
 
10192
- .muka-emptystate--lg {
10193
- padding: var(--emptystate-container-padding-lg);
10193
+ .muka-dropdown-select {
10194
+ display: inline-flex;
10195
+ flex-direction: column;
10196
+ gap: var(--spacing-2);
10197
+ min-width: 200px;
10194
10198
  }
10195
10199
 
10196
- /* Visual (icon or illustration) */
10197
- .muka-emptystate__visual {
10198
- display: flex;
10199
- align-items: center;
10200
- justify-content: center;
10201
- color: var(--emptystate-icon-color);
10202
- flex-shrink: 0;
10200
+ .muka-dropdown-select--full-width {
10201
+ width: 100%;
10203
10202
  }
10204
10203
 
10205
- .muka-emptystate--sm .muka-emptystate__visual {
10206
- width: var(--emptystate-icon-size-sm);
10207
- height: var(--emptystate-icon-size-sm);
10204
+ .muka-dropdown-select__label {
10205
+ color: var(--color-text-default-default);
10206
+ cursor: pointer;
10208
10207
  }
10209
10208
 
10210
- .muka-emptystate--md .muka-emptystate__visual {
10211
- width: var(--emptystate-icon-size-md);
10212
- height: var(--emptystate-icon-size-md);
10209
+ .muka-dropdown-select__label--sm {
10210
+ font-family: var(--text-label-sm-semibold-fontFamily);
10211
+ font-weight: var(--text-label-sm-semibold-fontWeight);
10212
+ font-size: var(--text-label-sm-semibold-fontSize);
10213
+ line-height: var(--text-label-sm-semibold-lineHeight);
10213
10214
  }
10214
10215
 
10215
- .muka-emptystate--lg .muka-emptystate__visual {
10216
- width: var(--emptystate-icon-size-lg);
10217
- height: var(--emptystate-icon-size-lg);
10216
+ .muka-dropdown-select__label--md {
10217
+ font-family: var(--text-label-md-semibold-fontFamily);
10218
+ font-weight: var(--text-label-md-semibold-fontWeight);
10219
+ font-size: var(--text-label-md-semibold-fontSize);
10220
+ line-height: var(--text-label-md-semibold-lineHeight);
10218
10221
  }
10219
10222
 
10220
- .muka-emptystate__visual svg {
10221
- width: 100%;
10222
- height: 100%;
10223
- }
10224
-
10225
- .muka-emptystate__visual img {
10226
- width: 100%;
10227
- height: 100%;
10228
- object-fit: contain;
10229
- }
10230
-
10231
- /* Content */
10232
- .muka-emptystate__content {
10233
- display: flex;
10234
- flex-direction: column;
10235
- gap: var(--spacing-2);
10236
- }
10237
-
10238
- .muka-emptystate--left .muka-emptystate__content {
10239
- align-items: flex-start;
10240
- }
10241
-
10242
- /* Title */
10243
- .muka-emptystate__title {
10244
- color: var(--emptystate-title-color);
10245
- margin: 0;
10246
- font-family: var(--text-heading-sm-fontFamily);
10247
- font-weight: var(--text-heading-sm-fontWeight);
10248
- font-size: var(--text-heading-sm-fontSize);
10249
- line-height: var(--text-heading-sm-lineHeight);
10250
- }
10251
-
10252
- .muka-emptystate--sm .muka-emptystate__title {
10253
- font-family: var(--text-label-lg-semibold-fontFamily);
10254
- font-weight: var(--text-label-lg-semibold-fontWeight);
10255
- font-size: var(--text-label-lg-semibold-fontSize);
10256
- line-height: var(--text-label-lg-semibold-lineHeight);
10257
- }
10258
-
10259
- .muka-emptystate--lg .muka-emptystate__title {
10260
- font-family: var(--text-heading-md-fontFamily);
10261
- font-weight: var(--text-heading-md-fontWeight);
10262
- font-size: var(--text-heading-md-fontSize);
10263
- line-height: var(--text-heading-md-lineHeight);
10264
- }
10265
-
10266
- /* Description */
10267
- .muka-emptystate__description {
10268
- color: var(--emptystate-description-color);
10269
- margin: 0;
10270
- font-family: var(--text-body-sm-regular-fontFamily);
10271
- font-weight: var(--text-body-sm-regular-fontWeight);
10272
- font-size: var(--text-body-sm-regular-fontSize);
10273
- line-height: var(--text-body-sm-regular-lineHeight);
10274
- }
10275
-
10276
- .muka-emptystate--md .muka-emptystate__description {
10277
- font-family: var(--text-body-base-regular-fontFamily);
10278
- font-weight: var(--text-body-base-regular-fontWeight);
10279
- font-size: var(--text-body-base-regular-fontSize);
10280
- line-height: var(--text-body-base-regular-lineHeight);
10281
- }
10282
-
10283
- .muka-emptystate--lg .muka-emptystate__description {
10284
- font-family: var(--text-body-lg-regular-fontFamily);
10285
- font-weight: var(--text-body-lg-regular-fontWeight);
10286
- font-size: var(--text-body-lg-regular-fontSize);
10287
- line-height: var(--text-body-lg-regular-lineHeight);
10288
- }
10289
-
10290
- /* Actions */
10291
- .muka-emptystate__actions {
10292
- display: flex;
10293
- gap: var(--emptystate-actions-gap);
10294
- margin-top: var(--emptystate-actions-marginTop);
10295
- flex-wrap: wrap;
10296
- justify-content: center;
10297
- }
10298
-
10299
- .muka-emptystate--left .muka-emptystate__actions {
10300
- justify-content: flex-start;
10301
- }
10302
-
10303
-
10304
- /* EmojiPicker */
10305
- /* EmojiPicker Component Styles */
10306
-
10307
- .muka-emoji-picker {
10308
- display: grid;
10309
- grid-template-columns: repeat(8, 1fr);
10310
- gap: var(--spacing-1);
10311
- padding: var(--spacing-2);
10312
- max-height: 12rem;
10313
- overflow-y: auto;
10314
- background: var(--color-surface-level2);
10315
- border: var(--border-width-regular, 1px) solid var(--color-border-default);
10316
- border-radius: var(--radius-lg);
10317
- box-shadow: var(--menu-content-shadow, 0 4px 12px rgba(0, 0, 0, 0.12));
10318
- }
10319
-
10320
- .muka-emoji-picker__glyph {
10321
- font-size: 1.25rem;
10322
- line-height: 1;
10323
- }
10324
-
10325
-
10326
- /* DropdownSelect */
10327
- /* DropdownSelect — Figma Dropdown Menu form field (Menu + chips) */
10328
-
10329
- .muka-dropdown-select {
10330
- display: inline-flex;
10331
- flex-direction: column;
10332
- gap: var(--spacing-2);
10333
- min-width: 200px;
10334
- }
10335
-
10336
- .muka-dropdown-select--full-width {
10337
- width: 100%;
10338
- }
10339
-
10340
- .muka-dropdown-select__label {
10341
- color: var(--color-text-default-default);
10342
- cursor: pointer;
10343
- }
10344
-
10345
- .muka-dropdown-select__label--sm {
10346
- font-family: var(--text-label-sm-semibold-fontFamily);
10347
- font-weight: var(--text-label-sm-semibold-fontWeight);
10348
- font-size: var(--text-label-sm-semibold-fontSize);
10349
- line-height: var(--text-label-sm-semibold-lineHeight);
10350
- }
10351
-
10352
- .muka-dropdown-select__label--md {
10353
- font-family: var(--text-label-md-semibold-fontFamily);
10354
- font-weight: var(--text-label-md-semibold-fontWeight);
10355
- font-size: var(--text-label-md-semibold-fontSize);
10356
- line-height: var(--text-label-md-semibold-lineHeight);
10357
- }
10358
-
10359
- .muka-dropdown-select__label--lg {
10360
- font-family: var(--text-label-lg-semibold-fontFamily);
10361
- font-weight: var(--text-label-lg-semibold-fontWeight);
10362
- font-size: var(--text-label-lg-semibold-fontSize);
10363
- line-height: var(--text-label-lg-semibold-lineHeight);
10223
+ .muka-dropdown-select__label--lg {
10224
+ font-family: var(--text-label-lg-semibold-fontFamily);
10225
+ font-weight: var(--text-label-lg-semibold-fontWeight);
10226
+ font-size: var(--text-label-lg-semibold-fontSize);
10227
+ line-height: var(--text-label-lg-semibold-lineHeight);
10364
10228
  }
10365
10229
 
10366
10230
  .muka-dropdown-select__required {
@@ -11284,92 +11148,233 @@ li.muka-listitem {
11284
11148
  }
11285
11149
 
11286
11150
 
11287
- /* DatePicker */
11288
- /* DatePicker — compact native date field. */
11289
- /* Field/label/helper styling is inherited from ../Input/Input.css. */
11151
+ /* EmptyState */
11152
+ /* EmptyState Component Styles - Using Muka Design Tokens */
11290
11153
 
11291
- /* Adopt the field typography on the native date input. */
11292
- .muka-datepicker__field .muka-input__native {
11293
- font-family: var(--text-input-md-fontFamily);
11294
- font-size: var(--text-input-md-fontSize);
11295
- line-height: var(--text-input-md-lineHeight);
11154
+ .muka-emptystate {
11155
+ display: flex;
11156
+ flex-direction: column;
11157
+ align-items: center;
11158
+ justify-content: center;
11159
+ gap: var(--emptystate-container-gap);
11160
+ max-width: var(--emptystate-container-maxWidth);
11161
+ margin: 0 auto;
11162
+ text-align: center;
11296
11163
  }
11297
11164
 
11298
- .muka-datepicker__field--sm .muka-input__native {
11299
- font-family: var(--text-input-sm-fontFamily);
11300
- font-size: var(--text-input-sm-fontSize);
11301
- line-height: var(--text-input-sm-lineHeight);
11165
+ /* Alignment variants */
11166
+ .muka-emptystate--left {
11167
+ align-items: flex-start;
11168
+ text-align: left;
11302
11169
  }
11303
11170
 
11304
- /* Tint the browser calendar indicator to match the field foreground. */
11305
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
11306
- cursor: pointer;
11307
- opacity: 0.6;
11171
+ /* Size variants */
11172
+ .muka-emptystate--sm {
11173
+ padding: var(--emptystate-container-padding-sm);
11308
11174
  }
11309
11175
 
11310
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
11311
- opacity: 1;
11176
+ .muka-emptystate--md {
11177
+ padding: var(--emptystate-container-padding-md);
11312
11178
  }
11313
11179
 
11314
- .muka-datepicker__field .muka-input__native:disabled {
11315
- cursor: not-allowed;
11180
+ .muka-emptystate--lg {
11181
+ padding: var(--emptystate-container-padding-lg);
11316
11182
  }
11317
11183
 
11318
-
11319
- /* DataTable */
11320
- /* DataTable Component Styles - Using Muka Design Tokens */
11321
-
11322
- .muka-data-table-wrapper {
11323
- width: 100%;
11324
- overflow-x: auto;
11325
- -webkit-overflow-scrolling: touch;
11184
+ /* Visual (icon or illustration) */
11185
+ .muka-emptystate__visual {
11186
+ display: flex;
11187
+ align-items: center;
11188
+ justify-content: center;
11189
+ color: var(--emptystate-icon-color);
11190
+ flex-shrink: 0;
11326
11191
  }
11327
11192
 
11328
- .muka-data-table {
11329
- /* Density-driven cell padding (overridden per size below). */
11330
- --dt-pad-x: var(--datatable-cell-padding-x-md);
11331
- --dt-pad-y: var(--datatable-cell-padding-y-md);
11193
+ .muka-emptystate--sm .muka-emptystate__visual {
11194
+ width: var(--emptystate-icon-size-sm);
11195
+ height: var(--emptystate-icon-size-sm);
11196
+ }
11332
11197
 
11333
- width: 100%;
11334
- border-collapse: collapse;
11335
- border-spacing: 0;
11336
- /* auto layout so per-column min/max widths are honored and unsized columns flex */
11337
- table-layout: auto;
11338
- background-color: var(--datatable-row-background);
11339
- color: var(--datatable-row-foreground);
11198
+ .muka-emptystate--md .muka-emptystate__visual {
11199
+ width: var(--emptystate-icon-size-md);
11200
+ height: var(--emptystate-icon-size-md);
11340
11201
  }
11341
11202
 
11342
- .muka-data-table--size-sm {
11343
- --dt-pad-x: var(--datatable-cell-padding-x-sm);
11344
- --dt-pad-y: var(--datatable-cell-padding-y-sm);
11203
+ .muka-emptystate--lg .muka-emptystate__visual {
11204
+ width: var(--emptystate-icon-size-lg);
11205
+ height: var(--emptystate-icon-size-lg);
11345
11206
  }
11346
11207
 
11347
- .muka-data-table--size-lg {
11348
- --dt-pad-x: var(--datatable-cell-padding-x-lg);
11349
- --dt-pad-y: var(--datatable-cell-padding-y-lg);
11208
+ .muka-emptystate__visual svg {
11209
+ width: 100%;
11210
+ height: 100%;
11350
11211
  }
11351
11212
 
11352
- .muka-data-table__caption {
11353
- padding: var(--dt-pad-y) var(--dt-pad-x);
11354
- font-family: var(--text-body-base-bold-fontFamily);
11355
- font-weight: var(--text-body-base-bold-fontWeight);
11356
- font-size: var(--text-body-base-bold-fontSize);
11357
- line-height: var(--text-body-base-bold-lineHeight);
11358
- text-align: left;
11359
- caption-side: top;
11213
+ .muka-emptystate__visual img {
11214
+ width: 100%;
11215
+ height: 100%;
11216
+ object-fit: contain;
11360
11217
  }
11361
11218
 
11362
- /* ========================================
11363
- HEADER
11364
- ======================================== */
11219
+ /* Content */
11220
+ .muka-emptystate__content {
11221
+ display: flex;
11222
+ flex-direction: column;
11223
+ gap: var(--spacing-2);
11224
+ }
11365
11225
 
11366
- .muka-data-table__head {
11367
- border-bottom: var(--border-width-regular, 1px) solid var(--datatable-header-border);
11226
+ .muka-emptystate--left .muka-emptystate__content {
11227
+ align-items: flex-start;
11368
11228
  }
11369
11229
 
11370
- .muka-data-table__th {
11371
- background-color: var(--datatable-header-background);
11372
- padding: var(--datatable-cell-padding-y-sm) var(--dt-pad-x);
11230
+ /* Title */
11231
+ .muka-emptystate__title {
11232
+ color: var(--emptystate-title-color);
11233
+ margin: 0;
11234
+ font-family: var(--text-heading-sm-fontFamily);
11235
+ font-weight: var(--text-heading-sm-fontWeight);
11236
+ font-size: var(--text-heading-sm-fontSize);
11237
+ line-height: var(--text-heading-sm-lineHeight);
11238
+ }
11239
+
11240
+ .muka-emptystate--sm .muka-emptystate__title {
11241
+ font-family: var(--text-label-lg-semibold-fontFamily);
11242
+ font-weight: var(--text-label-lg-semibold-fontWeight);
11243
+ font-size: var(--text-label-lg-semibold-fontSize);
11244
+ line-height: var(--text-label-lg-semibold-lineHeight);
11245
+ }
11246
+
11247
+ .muka-emptystate--lg .muka-emptystate__title {
11248
+ font-family: var(--text-heading-md-fontFamily);
11249
+ font-weight: var(--text-heading-md-fontWeight);
11250
+ font-size: var(--text-heading-md-fontSize);
11251
+ line-height: var(--text-heading-md-lineHeight);
11252
+ }
11253
+
11254
+ /* Description */
11255
+ .muka-emptystate__description {
11256
+ color: var(--emptystate-description-color);
11257
+ margin: 0;
11258
+ font-family: var(--text-body-sm-regular-fontFamily);
11259
+ font-weight: var(--text-body-sm-regular-fontWeight);
11260
+ font-size: var(--text-body-sm-regular-fontSize);
11261
+ line-height: var(--text-body-sm-regular-lineHeight);
11262
+ }
11263
+
11264
+ .muka-emptystate--md .muka-emptystate__description {
11265
+ font-family: var(--text-body-base-regular-fontFamily);
11266
+ font-weight: var(--text-body-base-regular-fontWeight);
11267
+ font-size: var(--text-body-base-regular-fontSize);
11268
+ line-height: var(--text-body-base-regular-lineHeight);
11269
+ }
11270
+
11271
+ .muka-emptystate--lg .muka-emptystate__description {
11272
+ font-family: var(--text-body-lg-regular-fontFamily);
11273
+ font-weight: var(--text-body-lg-regular-fontWeight);
11274
+ font-size: var(--text-body-lg-regular-fontSize);
11275
+ line-height: var(--text-body-lg-regular-lineHeight);
11276
+ }
11277
+
11278
+ /* Actions */
11279
+ .muka-emptystate__actions {
11280
+ display: flex;
11281
+ gap: var(--emptystate-actions-gap);
11282
+ margin-top: var(--emptystate-actions-marginTop);
11283
+ flex-wrap: wrap;
11284
+ justify-content: center;
11285
+ }
11286
+
11287
+ .muka-emptystate--left .muka-emptystate__actions {
11288
+ justify-content: flex-start;
11289
+ }
11290
+
11291
+
11292
+ /* DatePicker */
11293
+ /* DatePicker — compact native date field. */
11294
+ /* Field/label/helper styling is inherited from ../Input/Input.css. */
11295
+
11296
+ /* Adopt the field typography on the native date input. */
11297
+ .muka-datepicker__field .muka-input__native {
11298
+ font-family: var(--text-input-md-fontFamily);
11299
+ font-size: var(--text-input-md-fontSize);
11300
+ line-height: var(--text-input-md-lineHeight);
11301
+ }
11302
+
11303
+ .muka-datepicker__field--sm .muka-input__native {
11304
+ font-family: var(--text-input-sm-fontFamily);
11305
+ font-size: var(--text-input-sm-fontSize);
11306
+ line-height: var(--text-input-sm-lineHeight);
11307
+ }
11308
+
11309
+ /* Tint the browser calendar indicator to match the field foreground. */
11310
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
11311
+ cursor: pointer;
11312
+ opacity: 0.6;
11313
+ }
11314
+
11315
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
11316
+ opacity: 1;
11317
+ }
11318
+
11319
+ .muka-datepicker__field .muka-input__native:disabled {
11320
+ cursor: not-allowed;
11321
+ }
11322
+
11323
+
11324
+ /* DataTable */
11325
+ /* DataTable Component Styles - Using Muka Design Tokens */
11326
+
11327
+ .muka-data-table-wrapper {
11328
+ width: 100%;
11329
+ overflow-x: auto;
11330
+ -webkit-overflow-scrolling: touch;
11331
+ }
11332
+
11333
+ .muka-data-table {
11334
+ /* Density-driven cell padding (overridden per size below). */
11335
+ --dt-pad-x: var(--datatable-cell-padding-x-md);
11336
+ --dt-pad-y: var(--datatable-cell-padding-y-md);
11337
+
11338
+ width: 100%;
11339
+ border-collapse: collapse;
11340
+ border-spacing: 0;
11341
+ /* auto layout so per-column min/max widths are honored and unsized columns flex */
11342
+ table-layout: auto;
11343
+ background-color: var(--datatable-row-background);
11344
+ color: var(--datatable-row-foreground);
11345
+ }
11346
+
11347
+ .muka-data-table--size-sm {
11348
+ --dt-pad-x: var(--datatable-cell-padding-x-sm);
11349
+ --dt-pad-y: var(--datatable-cell-padding-y-sm);
11350
+ }
11351
+
11352
+ .muka-data-table--size-lg {
11353
+ --dt-pad-x: var(--datatable-cell-padding-x-lg);
11354
+ --dt-pad-y: var(--datatable-cell-padding-y-lg);
11355
+ }
11356
+
11357
+ .muka-data-table__caption {
11358
+ padding: var(--dt-pad-y) var(--dt-pad-x);
11359
+ font-family: var(--text-body-base-bold-fontFamily);
11360
+ font-weight: var(--text-body-base-bold-fontWeight);
11361
+ font-size: var(--text-body-base-bold-fontSize);
11362
+ line-height: var(--text-body-base-bold-lineHeight);
11363
+ text-align: left;
11364
+ caption-side: top;
11365
+ }
11366
+
11367
+ /* ========================================
11368
+ HEADER
11369
+ ======================================== */
11370
+
11371
+ .muka-data-table__head {
11372
+ border-bottom: var(--border-width-regular, 1px) solid var(--datatable-header-border);
11373
+ }
11374
+
11375
+ .muka-data-table__th {
11376
+ background-color: var(--datatable-header-background);
11377
+ padding: var(--datatable-cell-padding-y-sm) var(--dt-pad-x);
11373
11378
  font-family: var(--text-body-base-bold-fontFamily);
11374
11379
  font-weight: var(--text-body-base-bold-fontWeight);
11375
11380
  font-size: var(--text-body-base-bold-fontSize);
@@ -12636,245 +12641,78 @@ li.muka-listitem {
12636
12641
  }
12637
12642
 
12638
12643
 
12639
- /* Checkbox */
12640
- /* Checkbox Component Styles - Using Muka Design Tokens */
12644
+ /* ChatPhotoGrid */
12645
+ /* ChatPhotoGrid Component Styles */
12641
12646
 
12642
- /* Wrapper - clickable label container */
12643
- .muka-checkbox {
12644
- display: inline-flex;
12645
- align-items: center;
12646
- gap: var(--spacing-4);
12647
- cursor: pointer;
12648
- user-select: none;
12647
+ /*
12648
+ * The grid clips to its own radius and the tiles stay square, so only the four
12649
+ * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12650
+ */
12651
+ .muka-chat-photo-grid {
12652
+ display: grid;
12653
+ gap: var(--chatphotogrid-gap);
12654
+ width: 100%;
12655
+ min-width: 0;
12656
+ overflow: hidden;
12657
+ border-radius: var(--chatphotogrid-radius);
12649
12658
  }
12650
12659
 
12651
- .muka-checkbox--disabled {
12652
- cursor: not-allowed;
12653
- opacity: 0.6;
12654
- }
12660
+ /* ─── Tiles ────────────────────────────────────────────── */
12655
12661
 
12656
- /* Control container */
12657
- .muka-checkbox__control {
12662
+ .muka-chat-photo-grid__tile {
12658
12663
  position: relative;
12659
- display: inline-flex;
12660
- align-items: center;
12661
- justify-content: center;
12662
- flex-shrink: 0;
12664
+ display: block;
12665
+ overflow: hidden;
12666
+ min-width: 0;
12667
+ padding: 0;
12668
+ margin: 0;
12669
+ border: none;
12670
+ background-color: var(--chatphotogrid-color-placeholder);
12671
+ aspect-ratio: 1 / 1;
12663
12672
  }
12664
12673
 
12665
- /* Hidden native input */
12666
- .muka-checkbox__input {
12667
- position: absolute;
12668
- width: 1px;
12669
- height: 1px;
12670
- padding: 0;
12671
- margin: -1px;
12672
- overflow: hidden;
12673
- clip: rect(0, 0, 0, 0);
12674
- white-space: nowrap;
12675
- border: 0;
12674
+ button.muka-chat-photo-grid__tile {
12675
+ cursor: pointer;
12676
+ appearance: none;
12676
12677
  }
12677
12678
 
12678
- /* Visual indicator (square) */
12679
- .muka-checkbox__indicator {
12679
+ button.muka-chat-photo-grid__tile:focus-visible {
12680
+ outline: var(--border-width-bold) solid var(--color-border-focus);
12681
+ /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12682
+ outline-offset: calc(-1 * var(--border-width-bold));
12683
+ }
12684
+
12685
+ .muka-chat-photo-grid__image {
12686
+ display: block;
12687
+ width: 100%;
12688
+ height: 100%;
12689
+ object-fit: cover;
12690
+ }
12691
+
12692
+ /* ─── Overflow tile ────────────────────────────────────── */
12693
+
12694
+ .muka-chat-photo-grid__overflow {
12695
+ position: absolute;
12696
+ inset: 0;
12680
12697
  display: flex;
12681
12698
  align-items: center;
12682
12699
  justify-content: center;
12683
- width: var(--checkbox-size-default);
12684
- height: var(--checkbox-size-default);
12685
- border-radius: var(--checkbox-radius);
12686
- background-color: var(--checkbox-color-default-background);
12687
- border: var(--border-width-regular) solid var(--checkbox-color-default-border);
12688
- transition: all 0.15s ease;
12689
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
12700
+ background-color: var(--chatphotogrid-color-overflow-background);
12701
+ color: var(--chatphotogrid-color-overflow-foreground);
12702
+ font-family: var(--text-body-2xl-regular-fontFamily);
12703
+ font-weight: var(--text-body-2xl-regular-fontWeight);
12704
+ font-size: var(--text-body-2xl-regular-fontSize);
12705
+ line-height: var(--text-body-2xl-regular-lineHeight);
12690
12706
  }
12691
12707
 
12692
- /* Size variants */
12693
- .muka-checkbox--sm .muka-checkbox__indicator {
12694
- width: var(--checkbox-size-sm);
12695
- height: var(--checkbox-size-sm);
12708
+ /* ─── Layouts ──────────────────────────────────────────── */
12709
+
12710
+ .muka-chat-photo-grid--1 {
12711
+ grid-template-columns: 1fr;
12696
12712
  }
12697
12713
 
12698
- .muka-checkbox--lg .muka-checkbox__indicator {
12699
- width: var(--checkbox-size-lg);
12700
- height: var(--checkbox-size-lg);
12701
- }
12702
-
12703
- /* Icon inside checkbox */
12704
- .muka-checkbox__icon {
12705
- width: var(--checkbox-icon-size-default);
12706
- height: var(--checkbox-icon-size-default);
12707
- color: var(--checkbox-color-default-icon);
12708
- opacity: 0;
12709
- transform: scale(0.8);
12710
- transition: opacity 0.15s ease, transform 0.15s ease;
12711
- }
12712
-
12713
- .muka-checkbox--sm .muka-checkbox__icon {
12714
- width: var(--checkbox-icon-size-sm);
12715
- height: var(--checkbox-icon-size-sm);
12716
- }
12717
-
12718
- .muka-checkbox--lg .muka-checkbox__icon {
12719
- width: var(--checkbox-icon-size-lg);
12720
- height: var(--checkbox-icon-size-lg);
12721
- }
12722
-
12723
- /* Hide indeterminate icon by default */
12724
- .muka-checkbox__icon--indeterminate {
12725
- position: absolute;
12726
- }
12727
-
12728
- /* Hover state - removed per design */
12729
-
12730
- /* Focus state */
12731
- .muka-checkbox__input:focus-visible + .muka-checkbox__indicator {
12732
- outline: 2px solid var(--color-border-focus);
12733
- outline-offset: 2px;
12734
- }
12735
-
12736
- /* Checked state */
12737
- .muka-checkbox__input:checked + .muka-checkbox__indicator {
12738
- background-color: var(--checkbox-color-checked-background);
12739
- border-color: var(--checkbox-color-checked-border);
12740
- box-shadow: none;
12741
- }
12742
-
12743
- .muka-checkbox__input:checked + .muka-checkbox__indicator .muka-checkbox__icon--check {
12744
- color: var(--checkbox-color-checked-icon);
12745
- opacity: 1;
12746
- transform: scale(1);
12747
- }
12748
-
12749
- /* Indeterminate state */
12750
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator {
12751
- background-color: var(--checkbox-color-checked-background);
12752
- border-color: var(--checkbox-color-checked-border);
12753
- box-shadow: none;
12754
- }
12755
-
12756
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--check {
12757
- opacity: 0;
12758
- }
12759
-
12760
- .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12761
- color: var(--checkbox-color-checked-icon);
12762
- opacity: 1;
12763
- transform: scale(1);
12764
- }
12765
-
12766
- /* Disabled state */
12767
- .muka-checkbox--disabled .muka-checkbox__indicator {
12768
- background-color: var(--checkbox-color-disabled-background);
12769
- border-color: var(--checkbox-color-disabled-border);
12770
- box-shadow: none;
12771
- }
12772
-
12773
- .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12774
- .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12775
- color: var(--checkbox-color-disabled-icon);
12776
- }
12777
-
12778
- /* Label text */
12779
- .muka-checkbox__label {
12780
- font-family: var(--text-label-lg-regular-fontFamily);
12781
- font-weight: var(--text-label-lg-regular-fontWeight);
12782
- font-size: var(--text-label-lg-regular-fontSize);
12783
- line-height: var(--text-label-lg-regular-lineHeight);
12784
- color: var(--color-text-default-default);
12785
- }
12786
-
12787
- .muka-checkbox--sm .muka-checkbox__label {
12788
- font-family: var(--text-label-md-regular-fontFamily);
12789
- font-weight: var(--text-label-md-regular-fontWeight);
12790
- font-size: var(--text-label-md-regular-fontSize);
12791
- line-height: var(--text-label-md-regular-lineHeight);
12792
- }
12793
-
12794
- .muka-checkbox--lg .muka-checkbox__label {
12795
- font-family: var(--text-label-xl-regular-fontFamily);
12796
- font-weight: var(--text-label-xl-regular-fontWeight);
12797
- font-size: var(--text-label-xl-regular-fontSize);
12798
- line-height: var(--text-label-xl-regular-lineHeight);
12799
- }
12800
-
12801
- .muka-checkbox--disabled .muka-checkbox__label {
12802
- color: var(--color-text-subtle-default);
12803
- }
12804
-
12805
-
12806
- /* ChatPhotoGrid */
12807
- /* ChatPhotoGrid Component Styles */
12808
-
12809
- /*
12810
- * The grid clips to its own radius and the tiles stay square, so only the four
12811
- * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12812
- */
12813
- .muka-chat-photo-grid {
12814
- display: grid;
12815
- gap: var(--chatphotogrid-gap);
12816
- width: 100%;
12817
- min-width: 0;
12818
- overflow: hidden;
12819
- border-radius: var(--chatphotogrid-radius);
12820
- }
12821
-
12822
- /* ─── Tiles ────────────────────────────────────────────── */
12823
-
12824
- .muka-chat-photo-grid__tile {
12825
- position: relative;
12826
- display: block;
12827
- overflow: hidden;
12828
- min-width: 0;
12829
- padding: 0;
12830
- margin: 0;
12831
- border: none;
12832
- background-color: var(--chatphotogrid-color-placeholder);
12833
- aspect-ratio: 1 / 1;
12834
- }
12835
-
12836
- button.muka-chat-photo-grid__tile {
12837
- cursor: pointer;
12838
- appearance: none;
12839
- }
12840
-
12841
- button.muka-chat-photo-grid__tile:focus-visible {
12842
- outline: var(--border-width-bold) solid var(--color-border-focus);
12843
- /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12844
- outline-offset: calc(-1 * var(--border-width-bold));
12845
- }
12846
-
12847
- .muka-chat-photo-grid__image {
12848
- display: block;
12849
- width: 100%;
12850
- height: 100%;
12851
- object-fit: cover;
12852
- }
12853
-
12854
- /* ─── Overflow tile ────────────────────────────────────── */
12855
-
12856
- .muka-chat-photo-grid__overflow {
12857
- position: absolute;
12858
- inset: 0;
12859
- display: flex;
12860
- align-items: center;
12861
- justify-content: center;
12862
- background-color: var(--chatphotogrid-color-overflow-background);
12863
- color: var(--chatphotogrid-color-overflow-foreground);
12864
- font-family: var(--text-body-2xl-regular-fontFamily);
12865
- font-weight: var(--text-body-2xl-regular-fontWeight);
12866
- font-size: var(--text-body-2xl-regular-fontSize);
12867
- line-height: var(--text-body-2xl-regular-lineHeight);
12868
- }
12869
-
12870
- /* ─── Layouts ──────────────────────────────────────────── */
12871
-
12872
- .muka-chat-photo-grid--1 {
12873
- grid-template-columns: 1fr;
12874
- }
12875
-
12876
- .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12877
- aspect-ratio: 4 / 3;
12714
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12715
+ aspect-ratio: 4 / 3;
12878
12716
  }
12879
12717
 
12880
12718
  .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
@@ -12979,393 +12817,229 @@ button.muka-chat-photo-grid__tile:focus-visible {
12979
12817
  }
12980
12818
 
12981
12819
 
12982
- /* ChatMessageList */
12983
- /* ChatMessageList Component Styles */
12820
+ /* Checkbox */
12821
+ /* Checkbox Component Styles - Using Muka Design Tokens */
12984
12822
 
12985
- .muka-chat-message-list {
12986
- flex: 1 1 auto;
12987
- min-height: 0;
12988
- width: 100%;
12989
- overflow-x: clip;
12990
- overflow-y: auto;
12991
- background-color: var(--color-surface-level3);
12992
- padding: var(--section-padding-vertical-default, var(--spacing-8))
12993
- var(--section-padding-horizontal-default, var(--spacing-4));
12994
- -webkit-overflow-scrolling: touch;
12995
- overscroll-behavior: contain;
12823
+ /* Wrapper - clickable label container */
12824
+ .muka-checkbox {
12825
+ display: inline-flex;
12826
+ align-items: center;
12827
+ gap: var(--spacing-4);
12828
+ cursor: pointer;
12829
+ user-select: none;
12996
12830
  }
12997
12831
 
12998
- .muka-chat-message-list__inner {
12999
- display: flex;
13000
- flex-direction: column;
13001
- align-items: stretch;
13002
- gap: var(--spacing-8);
13003
- width: 100%;
13004
- max-width: var(--chat-column-max-width);
13005
- margin: 0 auto;
12832
+ .muka-checkbox--disabled {
12833
+ cursor: not-allowed;
12834
+ opacity: 0.6;
13006
12835
  }
13007
12836
 
13008
- /* ─── Print ────────────────────────────────────────────── */
13009
-
13010
- @media print {
13011
- .muka-chat-message-list {
13012
- overflow: visible;
13013
- height: auto;
13014
- max-height: none;
13015
- background: none;
13016
- padding: 0;
13017
- }
13018
-
13019
- .muka-chat-message-list__inner {
13020
- max-width: 100%;
13021
- }
12837
+ /* Control container */
12838
+ .muka-checkbox__control {
12839
+ position: relative;
12840
+ display: inline-flex;
12841
+ align-items: center;
12842
+ justify-content: center;
12843
+ flex-shrink: 0;
13022
12844
  }
13023
12845
 
12846
+ /* Hidden native input */
12847
+ .muka-checkbox__input {
12848
+ position: absolute;
12849
+ width: 1px;
12850
+ height: 1px;
12851
+ padding: 0;
12852
+ margin: -1px;
12853
+ overflow: hidden;
12854
+ clip: rect(0, 0, 0, 0);
12855
+ white-space: nowrap;
12856
+ border: 0;
12857
+ }
13024
12858
 
13025
- /* ChatMessage */
13026
- /* ChatMessage Component Styles */
13027
-
13028
- .muka-chat-message {
12859
+ /* Visual indicator (square) */
12860
+ .muka-checkbox__indicator {
13029
12861
  display: flex;
13030
- flex-direction: column;
13031
- width: 100%;
13032
- max-width: 100%;
12862
+ align-items: center;
12863
+ justify-content: center;
12864
+ width: var(--checkbox-size-default);
12865
+ height: var(--checkbox-size-default);
12866
+ border-radius: var(--checkbox-radius);
12867
+ background-color: var(--checkbox-color-default-background);
12868
+ border: var(--border-width-regular) solid var(--checkbox-color-default-border);
12869
+ transition: all 0.15s ease;
12870
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
13033
12871
  }
13034
12872
 
13035
- /* ─── Row: avatar rail + bubble ────────────────────────── */
13036
-
13037
- .muka-chat-message__row {
13038
- display: grid;
13039
- grid-template-columns: minmax(0, 1fr);
13040
- grid-template-areas: 'bubble';
13041
- column-gap: var(--chatbubble-row-gap);
13042
- width: 100%;
12873
+ /* Size variants */
12874
+ .muka-checkbox--sm .muka-checkbox__indicator {
12875
+ width: var(--checkbox-size-sm);
12876
+ height: var(--checkbox-size-sm);
13043
12877
  }
13044
12878
 
13045
- .muka-chat-message--has-avatar .muka-chat-message__row {
13046
- grid-template-columns: auto minmax(0, 1fr);
13047
- grid-template-areas: 'rail bubble';
12879
+ .muka-checkbox--lg .muka-checkbox__indicator {
12880
+ width: var(--checkbox-size-lg);
12881
+ height: var(--checkbox-size-lg);
13048
12882
  }
13049
12883
 
13050
- .muka-chat-message__rail {
13051
- grid-area: rail;
13052
- /* Sits on the bubble's baseline (Figma 5355:44091) */
13053
- align-self: end;
13054
- display: flex;
13055
- justify-content: center;
13056
- min-width: var(--chatbubble-avatar-size);
12884
+ /* Icon inside checkbox */
12885
+ .muka-checkbox__icon {
12886
+ width: var(--checkbox-icon-size-default);
12887
+ height: var(--checkbox-icon-size-default);
12888
+ color: var(--checkbox-color-default-icon);
12889
+ opacity: 0;
12890
+ transform: scale(0.8);
12891
+ transition: opacity 0.15s ease, transform 0.15s ease;
13057
12892
  }
13058
12893
 
13059
- /*
13060
- * The Small size in Figma (5373:44702) halves the avatar to 32px and tightens
13061
- * the gap to the bubble. Size the avatar itself, not just the rail, so the
13062
- * bubbles keep their alignment. The header row keeps its own gap.
13063
- */
13064
- @media (max-width: 1023px) {
13065
- .muka-chat-message__row {
13066
- column-gap: var(--chatbubble-row-gap-compact);
13067
- }
12894
+ .muka-checkbox--sm .muka-checkbox__icon {
12895
+ width: var(--checkbox-icon-size-sm);
12896
+ height: var(--checkbox-icon-size-sm);
12897
+ }
13068
12898
 
13069
- .muka-chat-message__rail {
13070
- min-width: var(--chatbubble-avatar-size-compact);
13071
- }
12899
+ .muka-checkbox--lg .muka-checkbox__icon {
12900
+ width: var(--checkbox-icon-size-lg);
12901
+ height: var(--checkbox-icon-size-lg);
12902
+ }
13072
12903
 
13073
- /* Outweighs the avatar's own size class, which sets width/height directly */
13074
- .muka-chat-message .muka-chat-message__rail > * {
13075
- width: var(--chatbubble-avatar-size-compact);
13076
- height: var(--chatbubble-avatar-size-compact);
13077
- }
12904
+ /* Hide indeterminate icon by default */
12905
+ .muka-checkbox__icon--indeterminate {
12906
+ position: absolute;
13078
12907
  }
13079
12908
 
13080
- /* ─── Bubble surface ───────────────────────────────────── */
12909
+ /* Hover state - removed per design */
13081
12910
 
13082
- .muka-chat-message__bubble {
13083
- grid-area: bubble;
13084
- /*
13085
- * Width follows the content: a single line hugs, and once the text wraps the
13086
- * bubble fills to the shared max width. Robust to string or rich children —
13087
- * no length measuring needed (Figma `Text length` on 5355:44091).
13088
- */
13089
- width: fit-content;
13090
- /*
13091
- * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
13092
- * row; above it the fixed cap leaves room for own/peer alignment.
13093
- */
13094
- max-width: var(--chatbubble-max-width);
13095
- position: relative;
13096
- display: flex;
13097
- flex-direction: column;
13098
- gap: var(--chatbubble-gap);
13099
- padding: var(--chatbubble-padding-block) var(--chatbubble-padding-inline);
13100
- border-radius: var(--chatbubble-radius);
13101
- border: var(--border-width-regular) solid transparent;
13102
- box-shadow: var(--shadow-level2);
13103
- word-break: break-word;
12911
+ /* Focus state */
12912
+ .muka-checkbox__input:focus-visible + .muka-checkbox__indicator {
12913
+ outline: 2px solid var(--color-border-focus);
12914
+ outline-offset: 2px;
13104
12915
  }
13105
12916
 
13106
- /* Media, an embed or an action stack always run the full bubble width. */
13107
- .muka-chat-message--has-blocks .muka-chat-message__bubble {
13108
- width: 100%;
12917
+ /* Checked state */
12918
+ .muka-checkbox__input:checked + .muka-checkbox__indicator {
12919
+ background-color: var(--checkbox-color-checked-background);
12920
+ border-color: var(--checkbox-color-checked-border);
12921
+ box-shadow: none;
13109
12922
  }
13110
12923
 
13111
- .muka-chat-message--own .muka-chat-message__bubble {
13112
- justify-self: end;
12924
+ .muka-checkbox__input:checked + .muka-checkbox__indicator .muka-checkbox__icon--check {
12925
+ color: var(--checkbox-color-checked-icon);
12926
+ opacity: 1;
12927
+ transform: scale(1);
13113
12928
  }
13114
12929
 
13115
- .muka-chat-message--own .muka-chat-message__bubble {
13116
- background-color: var(--chatbubble-color-own-background);
13117
- border-color: var(--chatbubble-color-own-border);
13118
- color: var(--chatbubble-color-own-foreground);
12930
+ /* Indeterminate state */
12931
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator {
12932
+ background-color: var(--checkbox-color-checked-background);
12933
+ border-color: var(--checkbox-color-checked-border);
12934
+ box-shadow: none;
13119
12935
  }
13120
12936
 
13121
- .muka-chat-message--peer .muka-chat-message__bubble {
13122
- background-color: var(--chatbubble-color-peer-background);
13123
- border-color: var(--chatbubble-color-peer-border);
13124
- color: var(--chatbubble-color-peer-foreground);
12937
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--check {
12938
+ opacity: 0;
13125
12939
  }
13126
12940
 
13127
- .muka-chat-message--agent .muka-chat-message__bubble {
13128
- background-color: var(--chatbubble-color-agent-background);
13129
- border-color: var(--chatbubble-color-agent-border);
13130
- color: var(--chatbubble-color-agent-foreground);
12941
+ .muka-checkbox__input:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12942
+ color: var(--checkbox-color-checked-icon);
12943
+ opacity: 1;
12944
+ transform: scale(1);
13131
12945
  }
13132
12946
 
13133
- /* ─── Header row (author · meta · time · badge) ────────── */
13134
-
13135
- .muka-chat-message__header {
13136
- display: flex;
13137
- flex-flow: row wrap;
13138
- align-items: center;
13139
- gap: var(--chatbubble-row-gap);
12947
+ /* Disabled state */
12948
+ .muka-checkbox--disabled .muka-checkbox__indicator {
12949
+ background-color: var(--checkbox-color-disabled-background);
12950
+ border-color: var(--checkbox-color-disabled-border);
12951
+ box-shadow: none;
13140
12952
  }
13141
12953
 
13142
- .muka-chat-message__author {
13143
- font-family: var(--text-body-base-bold-fontFamily);
13144
- font-weight: var(--text-body-base-bold-fontWeight);
13145
- font-size: var(--text-body-base-bold-fontSize);
13146
- line-height: var(--text-body-base-bold-lineHeight);
12954
+ .muka-checkbox__input:disabled:checked + .muka-checkbox__indicator .muka-checkbox__icon--check,
12955
+ .muka-checkbox__input:disabled:indeterminate + .muka-checkbox__indicator .muka-checkbox__icon--indeterminate {
12956
+ color: var(--checkbox-color-disabled-icon);
13147
12957
  }
13148
12958
 
13149
- .muka-chat-message__author-meta {
13150
- /* Inherits the variant's body colour from the bubble */
13151
- color: inherit;
13152
- font-family: var(--text-body-base-regular-fontFamily);
13153
- font-weight: var(--text-body-base-regular-fontWeight);
13154
- font-size: var(--text-body-base-regular-fontSize);
13155
- line-height: var(--text-body-base-regular-lineHeight);
12959
+ /* Label text */
12960
+ .muka-checkbox__label {
12961
+ font-family: var(--text-label-lg-regular-fontFamily);
12962
+ font-weight: var(--text-label-lg-regular-fontWeight);
12963
+ font-size: var(--text-label-lg-regular-fontSize);
12964
+ line-height: var(--text-label-lg-regular-lineHeight);
12965
+ color: var(--color-text-default-default);
13156
12966
  }
13157
12967
 
13158
- .muka-chat-message__badge {
13159
- display: inline-flex;
13160
- align-items: center;
12968
+ .muka-checkbox--sm .muka-checkbox__label {
12969
+ font-family: var(--text-label-md-regular-fontFamily);
12970
+ font-weight: var(--text-label-md-regular-fontWeight);
12971
+ font-size: var(--text-label-md-regular-fontSize);
12972
+ line-height: var(--text-label-md-regular-lineHeight);
13161
12973
  }
13162
12974
 
13163
- /*
13164
- * Keep the first line of content clear of the absolutely positioned menu
13165
- * button in the bubble's top-right corner.
13166
- */
13167
- .muka-chat-message--has-menu .muka-chat-message__header,
13168
- .muka-chat-message--has-menu.muka-chat-message--no-header .muka-chat-message__message {
13169
- padding-right: var(--spacing-10);
12975
+ .muka-checkbox--lg .muka-checkbox__label {
12976
+ font-family: var(--text-label-xl-regular-fontFamily);
12977
+ font-weight: var(--text-label-xl-regular-fontWeight);
12978
+ font-size: var(--text-label-xl-regular-fontSize);
12979
+ line-height: var(--text-label-xl-regular-lineHeight);
13170
12980
  }
13171
12981
 
13172
- /* …and the last line clear of the inset timestamp in the bottom-right corner */
13173
- .muka-chat-message--has-timestamp .muka-chat-message__message {
13174
- padding-right: var(--spacing-10);
12982
+ .muka-checkbox--disabled .muka-checkbox__label {
12983
+ color: var(--color-text-subtle-default);
13175
12984
  }
13176
12985
 
13177
- /* ─── Body ─────────────────────────────────────────────── */
13178
12986
 
13179
- .muka-chat-message__body {
12987
+ /* ChatMessageList */
12988
+ /* ChatMessageList Component Styles */
12989
+
12990
+ .muka-chat-message-list {
12991
+ flex: 1 1 auto;
12992
+ min-height: 0;
12993
+ width: 100%;
12994
+ overflow-x: clip;
12995
+ overflow-y: auto;
12996
+ background-color: var(--color-surface-level3);
12997
+ padding: var(--section-padding-vertical-default, var(--spacing-8))
12998
+ var(--section-padding-horizontal-default, var(--spacing-4));
12999
+ -webkit-overflow-scrolling: touch;
13000
+ overscroll-behavior: contain;
13001
+ }
13002
+
13003
+ .muka-chat-message-list__inner {
13180
13004
  display: flex;
13181
13005
  flex-direction: column;
13182
- gap: var(--chatbubble-gap);
13183
- min-width: 0;
13006
+ align-items: stretch;
13007
+ gap: var(--spacing-8);
13008
+ width: 100%;
13009
+ max-width: var(--chat-column-max-width);
13010
+ margin: 0 auto;
13184
13011
  }
13185
13012
 
13186
- .muka-chat-message__media {
13187
- min-width: 0;
13188
- }
13013
+ /* ─── Print ────────────────────────────────────────────── */
13189
13014
 
13190
- .muka-chat-message__message {
13191
- font-family: var(--text-body-base-regular-fontFamily);
13192
- font-weight: var(--text-body-base-regular-fontWeight);
13193
- font-size: var(--text-body-base-regular-fontSize);
13194
- line-height: var(--text-body-base-regular-lineHeight);
13195
- white-space: pre-wrap;
13196
- word-break: break-word;
13197
- }
13015
+ @media print {
13016
+ .muka-chat-message-list {
13017
+ overflow: visible;
13018
+ height: auto;
13019
+ max-height: none;
13020
+ background: none;
13021
+ padding: 0;
13022
+ }
13198
13023
 
13199
- /* Empty message block should not add a gap of its own */
13200
- .muka-chat-message__message:empty {
13201
- display: none;
13024
+ .muka-chat-message-list__inner {
13025
+ max-width: 100%;
13026
+ }
13202
13027
  }
13203
13028
 
13204
- /* ─── Embedded card ────────────────────────────────────── */
13205
13029
 
13206
- .muka-chat-message__embed {
13207
- position: relative;
13030
+ /* ChatComposer */
13031
+ /* ChatComposer Component Styles */
13032
+
13033
+ /*
13034
+ * The composer is a bare, fill-width row: no padding, background, border or
13035
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
13036
+ * container — see BottomBar's `chat` variant.
13037
+ */
13038
+ .muka-chat-composer {
13208
13039
  display: flex;
13209
13040
  flex-direction: column;
13210
- gap: var(--chatbubble-embed-gap);
13211
- /* The card is inset from the blocks above and below it (Figma 5289:40562) */
13212
- margin-block: var(--chatbubble-embed-margin-block);
13213
- padding: var(--chatbubble-embed-padding-block) var(--chatbubble-embed-padding-inline);
13214
- border-radius: var(--chatbubble-embed-radius);
13215
- border: var(--border-width-regular) solid transparent;
13216
- }
13217
-
13218
- /*
13219
- * The embed sits on the raised surface of its author's role, one step apart
13220
- * from the bubble it is nested in, and reuses that role's border colour.
13221
- */
13222
- .muka-chat-message--own .muka-chat-message__embed {
13223
- background-color: var(--chatbubble-embed-color-own-background);
13224
- border-color: var(--chatbubble-embed-color-own-border);
13225
- color: var(--chatbubble-embed-color-own-foreground);
13226
- }
13227
-
13228
- .muka-chat-message--peer .muka-chat-message__embed {
13229
- background-color: var(--chatbubble-embed-color-peer-background);
13230
- border-color: var(--chatbubble-embed-color-peer-border);
13231
- color: var(--chatbubble-embed-color-peer-foreground);
13232
- }
13233
-
13234
- .muka-chat-message--agent .muka-chat-message__embed {
13235
- background-color: var(--chatbubble-embed-color-agent-background);
13236
- border-color: var(--chatbubble-embed-color-agent-border);
13237
- color: var(--chatbubble-embed-color-agent-foreground);
13238
- }
13239
-
13240
- .muka-chat-message__embed-content {
13241
- display: flex;
13242
- flex-direction: column;
13243
- gap: var(--chatbubble-embed-gap);
13244
- min-width: 0;
13245
- }
13246
-
13247
- .muka-chat-message__embed-copy {
13248
- position: absolute;
13249
- top: var(--chatbubble-embed-padding-block);
13250
- right: var(--chatbubble-embed-padding-inline);
13251
- }
13252
-
13253
- /* ─── Stacked full-width action buttons ────────────────── */
13254
-
13255
- .muka-chat-message__action-stack {
13256
- display: flex;
13257
- flex-direction: column;
13258
- gap: var(--chatbubble-action-stack-gap);
13259
- }
13260
-
13261
- /* ─── Inset timestamp ──────────────────────────────────── */
13262
-
13263
- /*
13264
- * Every author puts its timestamp in the bubble's bottom-right corner, below
13265
- * the message — never in the header row (Figma 5355:44091).
13266
- */
13267
-
13268
- .muka-chat-message__timestamp {
13269
- color: var(--chatbubble-color-timestamp);
13270
- font-family: var(--text-body-xs-regular-fontFamily);
13271
- font-weight: var(--text-body-xs-regular-fontWeight);
13272
- font-size: var(--text-body-xs-regular-fontSize);
13273
- line-height: var(--text-body-xs-regular-lineHeight);
13274
- white-space: nowrap;
13275
- }
13276
-
13277
- /*
13278
- * Pinned to the corner rather than stacked below the message, so a one-line
13279
- * message stays one line tall. The message reserves the width it needs.
13280
- */
13281
- .muka-chat-message__timestamp--inset {
13282
- position: absolute;
13283
- right: var(--spacing-2);
13284
- bottom: var(--spacing-1);
13285
- }
13286
-
13287
- /*
13288
- * When the last block in the body is media, an embed or an action stack (not
13289
- * trailing text), it runs the full width, so reserve a line below for the inset
13290
- * timestamp. A message that ends in text clears the corner inline instead (see
13291
- * `__message` padding-right above), so it needs no extra bottom space.
13292
- */
13293
- .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
13294
- padding-bottom: var(--text-body-xs-regular-lineHeight);
13295
- }
13296
-
13297
- /* ─── Menu affordance ──────────────────────────────────── */
13298
-
13299
- /*
13300
- * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
13301
- * everywhere, and pinned while its menu is open. On touch the equivalent
13302
- * affordance is a long-press on the bubble, which opens an ActionSheet.
13303
- */
13304
- .muka-chat-message__menu {
13305
- position: absolute;
13306
- top: var(--spacing-1);
13307
- right: var(--spacing-1);
13308
- opacity: 0;
13309
- pointer-events: none;
13310
- }
13311
-
13312
- .muka-chat-message__menu:focus-within,
13313
- .muka-chat-message--menu-open .muka-chat-message__menu {
13314
- opacity: 1;
13315
- pointer-events: auto;
13316
- }
13317
-
13318
- @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
13319
- .muka-chat-message__bubble:hover .muka-chat-message__menu {
13320
- opacity: 1;
13321
- pointer-events: auto;
13322
- }
13323
- }
13324
-
13325
- /* Suppress iOS Safari's own callout so the long-press sheet can take over */
13326
- @media (pointer: coarse) {
13327
- .muka-chat-message--has-menu .muka-chat-message__bubble {
13328
- -webkit-touch-callout: none;
13329
- }
13330
- }
13331
-
13332
- /* ─── Print ────────────────────────────────────────────── */
13333
-
13334
- @media print {
13335
- .muka-chat-message__bubble {
13336
- box-shadow: none;
13337
- break-inside: avoid;
13338
- print-color-adjust: exact;
13339
- -webkit-print-color-adjust: exact;
13340
- }
13341
-
13342
- .muka-chat-message__embed {
13343
- break-inside: avoid;
13344
- print-color-adjust: exact;
13345
- -webkit-print-color-adjust: exact;
13346
- }
13347
-
13348
- .muka-chat-message__menu,
13349
- .muka-chat-message__embed-copy,
13350
- .muka-chat-message__action-stack {
13351
- display: none;
13352
- }
13353
- }
13354
-
13355
-
13356
- /* ChatComposer */
13357
- /* ChatComposer Component Styles */
13358
-
13359
- /*
13360
- * The composer is a bare, fill-width row: no padding, background, border or
13361
- * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
13362
- * container — see BottomBar's `chat` variant.
13363
- */
13364
- .muka-chat-composer {
13365
- display: flex;
13366
- flex-direction: column;
13367
- gap: var(--spacing-3);
13368
- width: 100%;
13041
+ gap: var(--spacing-3);
13042
+ width: 100%;
13369
13043
  }
13370
13044
 
13371
13045
  .muka-chat-composer--disabled {
@@ -13565,186 +13239,517 @@ button.muka-chat-photo-grid__tile:focus-visible {
13565
13239
  text-overflow: ellipsis;
13566
13240
  }
13567
13241
 
13568
- .muka-chat-attachment-chip__meta {
13569
- color: var(--color-text-subtle-default);
13570
- font-family: var(--text-body-sm-regular-fontFamily);
13571
- font-weight: var(--text-body-sm-regular-fontWeight);
13572
- font-size: var(--text-body-sm-regular-fontSize);
13573
- line-height: var(--text-body-sm-regular-lineHeight);
13574
- white-space: nowrap;
13575
- overflow: hidden;
13576
- text-overflow: ellipsis;
13242
+ .muka-chat-attachment-chip__meta {
13243
+ color: var(--color-text-subtle-default);
13244
+ font-family: var(--text-body-sm-regular-fontFamily);
13245
+ font-weight: var(--text-body-sm-regular-fontWeight);
13246
+ font-size: var(--text-body-sm-regular-fontSize);
13247
+ line-height: var(--text-body-sm-regular-lineHeight);
13248
+ white-space: nowrap;
13249
+ overflow: hidden;
13250
+ text-overflow: ellipsis;
13251
+ }
13252
+
13253
+ .muka-chat-attachment-chip--error .muka-chat-attachment-chip__meta {
13254
+ color: var(--color-state-error-default, var(--color-text-default-default));
13255
+ }
13256
+
13257
+ /* ─── Remove button ────────────────────────────────────── */
13258
+
13259
+ .muka-chat-attachment-chip__remove {
13260
+ display: inline-flex;
13261
+ align-items: center;
13262
+ justify-content: center;
13263
+ width: 20px;
13264
+ height: 20px;
13265
+ border: none;
13266
+ background: none;
13267
+ padding: 0;
13268
+ border-radius: var(--radius-sm);
13269
+ cursor: pointer;
13270
+ color: var(--color-text-subtle-default);
13271
+ flex-shrink: 0;
13272
+ -webkit-tap-highlight-color: transparent;
13273
+ }
13274
+
13275
+ .muka-chat-attachment-chip__remove:hover:not(:disabled) {
13276
+ color: var(--color-text-default-default);
13277
+ background-color: var(--color-surface-level2);
13278
+ }
13279
+
13280
+ .muka-chat-attachment-chip__remove:focus-visible {
13281
+ outline: 2px solid var(--color-action-default);
13282
+ outline-offset: 2px;
13283
+ }
13284
+
13285
+ .muka-chat-attachment-chip__remove:disabled {
13286
+ cursor: not-allowed;
13287
+ opacity: 0.5;
13288
+ }
13289
+
13290
+ /* ─── Progress bar ─────────────────────────────────────── */
13291
+
13292
+ .muka-chat-attachment-chip__progress {
13293
+ position: absolute;
13294
+ left: 0;
13295
+ right: 0;
13296
+ bottom: 0;
13297
+ height: 2px;
13298
+ background-color: var(--color-surface-level2);
13299
+ overflow: hidden;
13300
+ }
13301
+
13302
+ .muka-chat-attachment-chip__progress-fill {
13303
+ display: block;
13304
+ height: 100%;
13305
+ background-color: var(--color-action-default);
13306
+ transition: width 0.16s ease;
13307
+ }
13308
+
13309
+ .muka-chat-attachment-chip--error .muka-chat-attachment-chip__progress-fill {
13310
+ background-color: var(--color-state-error-default, var(--color-text-default-default));
13311
+ }
13312
+
13313
+
13314
+ /* Card */
13315
+ /* Card Component Styles - Using Muka Design Tokens */
13316
+
13317
+ .muka-card {
13318
+ background-color: var(--card-color-default-background);
13319
+ color: var(--card-color-default-foreground);
13320
+ border: var(--border-width-regular) solid var(--card-color-default-border);
13321
+ box-shadow: var(--card-shadow-default);
13322
+ transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
13323
+ overflow: hidden;
13324
+ }
13325
+
13326
+ /* Padding variants */
13327
+ .muka-card--padding-none {
13328
+ padding: 0;
13329
+ }
13330
+
13331
+ .muka-card--padding-sm {
13332
+ padding: var(--card-padding-sm);
13333
+ }
13334
+
13335
+ .muka-card--padding-md {
13336
+ padding: var(--card-padding-md);
13337
+ }
13338
+
13339
+ .muka-card--padding-lg {
13340
+ padding: var(--card-padding-lg);
13341
+ }
13342
+
13343
+ /* Radius variants */
13344
+ .muka-card--radius-sm {
13345
+ border-radius: var(--card-radius-sm);
13346
+ }
13347
+
13348
+ .muka-card--radius-md {
13349
+ border-radius: var(--card-radius-md);
13350
+ }
13351
+
13352
+ .muka-card--radius-lg {
13353
+ border-radius: var(--card-radius-lg);
13354
+ }
13355
+
13356
+ /* Interactive variant */
13357
+ .muka-card--interactive {
13358
+ cursor: pointer;
13359
+ user-select: none;
13360
+ }
13361
+
13362
+ .muka-card--interactive:hover {
13363
+ background-color: var(--card-color-hover-background);
13364
+ border-color: var(--card-color-hover-border);
13365
+ box-shadow: var(--card-shadow-hover);
13366
+ }
13367
+
13368
+ .muka-card--interactive:active,
13369
+ .muka-card--interactive.muka-card--pressed {
13370
+ background-color: var(--card-color-pressed-background);
13371
+ border-color: var(--card-color-pressed-border);
13372
+ box-shadow: var(--card-shadow-pressed);
13373
+ }
13374
+
13375
+ .muka-card--interactive:focus-visible {
13376
+ outline: 2px solid var(--color-border-focus);
13377
+ outline-offset: 2px;
13378
+ }
13379
+
13380
+ /* Selected variant */
13381
+ .muka-card--selected {
13382
+ background-color: var(--card-color-selected-background);
13383
+ border-color: var(--card-color-selected-border);
13384
+ border-width: var(--border-width-bold);
13385
+ box-shadow: var(--card-shadow-selected);
13386
+ }
13387
+
13388
+ /* Optional header (title + description) */
13389
+ .muka-card__header {
13390
+ margin-bottom: var(--spacing-4);
13391
+ }
13392
+
13393
+ .muka-card__title {
13394
+ margin: 0;
13395
+ color: var(--color-text-default-default);
13396
+ font-family: var(--text-heading-xs-fontFamily);
13397
+ font-weight: var(--text-heading-xs-fontWeight);
13398
+ font-size: var(--text-heading-xs-fontSize);
13399
+ line-height: var(--text-heading-xs-lineHeight);
13400
+ letter-spacing: var(--text-heading-xs-letterSpacing);
13401
+ }
13402
+
13403
+ .muka-card__description {
13404
+ margin: var(--spacing-1) 0 0;
13405
+ color: var(--color-text-subtle-default);
13406
+ font-family: var(--text-body-sm-regular-fontFamily);
13407
+ font-weight: var(--text-body-sm-regular-fontWeight);
13408
+ font-size: var(--text-body-sm-regular-fontSize);
13409
+ line-height: var(--text-body-sm-regular-lineHeight);
13410
+ }
13411
+
13412
+ /* Hide divider on last list item inside card */
13413
+ .muka-card > .muka-listitem:last-child > .muka-listitem__divider {
13414
+ display: none;
13415
+ }
13416
+
13417
+ /* Disabled state */
13418
+ .muka-card--disabled {
13419
+ opacity: 0.5;
13420
+ cursor: not-allowed;
13421
+ pointer-events: none;
13422
+ }
13423
+
13424
+
13425
+ /* ChatMessage */
13426
+ /* ChatMessage Component Styles */
13427
+
13428
+ .muka-chat-message {
13429
+ display: flex;
13430
+ flex-direction: column;
13431
+ width: 100%;
13432
+ max-width: 100%;
13433
+ }
13434
+
13435
+ /* ─── Row: avatar rail + bubble ────────────────────────── */
13436
+
13437
+ .muka-chat-message__row {
13438
+ display: grid;
13439
+ grid-template-columns: minmax(0, 1fr);
13440
+ grid-template-areas: 'bubble';
13441
+ column-gap: var(--chatbubble-row-gap);
13442
+ width: 100%;
13443
+ }
13444
+
13445
+ .muka-chat-message--has-avatar .muka-chat-message__row {
13446
+ grid-template-columns: auto minmax(0, 1fr);
13447
+ grid-template-areas: 'rail bubble';
13448
+ }
13449
+
13450
+ .muka-chat-message__rail {
13451
+ grid-area: rail;
13452
+ /* Sits on the bubble's baseline (Figma 5355:44091) */
13453
+ align-self: end;
13454
+ display: flex;
13455
+ justify-content: center;
13456
+ min-width: var(--chatbubble-avatar-size);
13457
+ }
13458
+
13459
+ /*
13460
+ * The Small size in Figma (5373:44702) halves the avatar to 32px and tightens
13461
+ * the gap to the bubble. Size the avatar itself, not just the rail, so the
13462
+ * bubbles keep their alignment. The header row keeps its own gap.
13463
+ */
13464
+ @media (max-width: 1023px) {
13465
+ .muka-chat-message__row {
13466
+ column-gap: var(--chatbubble-row-gap-compact);
13467
+ }
13468
+
13469
+ .muka-chat-message__rail {
13470
+ min-width: var(--chatbubble-avatar-size-compact);
13471
+ }
13472
+
13473
+ /* Outweighs the avatar's own size class, which sets width/height directly */
13474
+ .muka-chat-message .muka-chat-message__rail > * {
13475
+ width: var(--chatbubble-avatar-size-compact);
13476
+ height: var(--chatbubble-avatar-size-compact);
13477
+ }
13478
+ }
13479
+
13480
+ /* ─── Bubble surface ───────────────────────────────────── */
13481
+
13482
+ .muka-chat-message__bubble {
13483
+ grid-area: bubble;
13484
+ /*
13485
+ * Width follows the content: a single line hugs, and once the text wraps the
13486
+ * bubble fills to the shared max width. Robust to string or rich children —
13487
+ * no length measuring needed (Figma `Text length` on 5355:44091).
13488
+ */
13489
+ width: fit-content;
13490
+ /*
13491
+ * Ceiling from design (Figma 5355:44091). Below it, wrapping text fills the
13492
+ * row; above it the fixed cap leaves room for own/peer alignment.
13493
+ */
13494
+ max-width: var(--chatbubble-max-width);
13495
+ position: relative;
13496
+ display: flex;
13497
+ flex-direction: column;
13498
+ gap: var(--chatbubble-gap);
13499
+ padding: var(--chatbubble-padding-block) var(--chatbubble-padding-inline);
13500
+ border-radius: var(--chatbubble-radius);
13501
+ border: var(--border-width-regular) solid transparent;
13502
+ box-shadow: var(--shadow-level2);
13503
+ word-break: break-word;
13504
+ }
13505
+
13506
+ /* Media, an embed or an action stack always run the full bubble width. */
13507
+ .muka-chat-message--has-blocks .muka-chat-message__bubble {
13508
+ width: 100%;
13509
+ }
13510
+
13511
+ .muka-chat-message--own .muka-chat-message__bubble {
13512
+ justify-self: end;
13513
+ }
13514
+
13515
+ .muka-chat-message--own .muka-chat-message__bubble {
13516
+ background-color: var(--chatbubble-color-own-background);
13517
+ border-color: var(--chatbubble-color-own-border);
13518
+ color: var(--chatbubble-color-own-foreground);
13519
+ }
13520
+
13521
+ .muka-chat-message--peer .muka-chat-message__bubble {
13522
+ background-color: var(--chatbubble-color-peer-background);
13523
+ border-color: var(--chatbubble-color-peer-border);
13524
+ color: var(--chatbubble-color-peer-foreground);
13525
+ }
13526
+
13527
+ .muka-chat-message--agent .muka-chat-message__bubble {
13528
+ background-color: var(--chatbubble-color-agent-background);
13529
+ border-color: var(--chatbubble-color-agent-border);
13530
+ color: var(--chatbubble-color-agent-foreground);
13531
+ }
13532
+
13533
+ /* ─── Header row (author · meta · time · badge) ────────── */
13534
+
13535
+ .muka-chat-message__header {
13536
+ display: flex;
13537
+ flex-flow: row wrap;
13538
+ align-items: center;
13539
+ gap: var(--chatbubble-row-gap);
13540
+ }
13541
+
13542
+ .muka-chat-message__author {
13543
+ font-family: var(--text-body-base-bold-fontFamily);
13544
+ font-weight: var(--text-body-base-bold-fontWeight);
13545
+ font-size: var(--text-body-base-bold-fontSize);
13546
+ line-height: var(--text-body-base-bold-lineHeight);
13577
13547
  }
13578
13548
 
13579
- .muka-chat-attachment-chip--error .muka-chat-attachment-chip__meta {
13580
- color: var(--color-state-error-default, var(--color-text-default-default));
13549
+ .muka-chat-message__author-meta {
13550
+ /* Inherits the variant's body colour from the bubble */
13551
+ color: inherit;
13552
+ font-family: var(--text-body-base-regular-fontFamily);
13553
+ font-weight: var(--text-body-base-regular-fontWeight);
13554
+ font-size: var(--text-body-base-regular-fontSize);
13555
+ line-height: var(--text-body-base-regular-lineHeight);
13581
13556
  }
13582
13557
 
13583
- /* ─── Remove button ────────────────────────────────────── */
13584
-
13585
- .muka-chat-attachment-chip__remove {
13558
+ .muka-chat-message__badge {
13586
13559
  display: inline-flex;
13587
13560
  align-items: center;
13588
- justify-content: center;
13589
- width: 20px;
13590
- height: 20px;
13591
- border: none;
13592
- background: none;
13593
- padding: 0;
13594
- border-radius: var(--radius-sm);
13595
- cursor: pointer;
13596
- color: var(--color-text-subtle-default);
13597
- flex-shrink: 0;
13598
- -webkit-tap-highlight-color: transparent;
13599
- }
13600
-
13601
- .muka-chat-attachment-chip__remove:hover:not(:disabled) {
13602
- color: var(--color-text-default-default);
13603
- background-color: var(--color-surface-level2);
13604
13561
  }
13605
13562
 
13606
- .muka-chat-attachment-chip__remove:focus-visible {
13607
- outline: 2px solid var(--color-action-default);
13608
- outline-offset: 2px;
13563
+ /*
13564
+ * Keep the first line of content clear of the absolutely positioned menu
13565
+ * button in the bubble's top-right corner.
13566
+ */
13567
+ .muka-chat-message--has-menu .muka-chat-message__header,
13568
+ .muka-chat-message--has-menu.muka-chat-message--no-header .muka-chat-message__message {
13569
+ padding-right: var(--spacing-10);
13609
13570
  }
13610
13571
 
13611
- .muka-chat-attachment-chip__remove:disabled {
13612
- cursor: not-allowed;
13613
- opacity: 0.5;
13572
+ /* …and the last line clear of the inset timestamp in the bottom-right corner */
13573
+ .muka-chat-message--has-timestamp .muka-chat-message__message {
13574
+ padding-right: var(--spacing-10);
13614
13575
  }
13615
13576
 
13616
- /* ─── Progress bar ─────────────────────────────────────── */
13577
+ /* ─── Body ─────────────────────────────────────────────── */
13617
13578
 
13618
- .muka-chat-attachment-chip__progress {
13619
- position: absolute;
13620
- left: 0;
13621
- right: 0;
13622
- bottom: 0;
13623
- height: 2px;
13624
- background-color: var(--color-surface-level2);
13625
- overflow: hidden;
13579
+ .muka-chat-message__body {
13580
+ display: flex;
13581
+ flex-direction: column;
13582
+ gap: var(--chatbubble-gap);
13583
+ min-width: 0;
13626
13584
  }
13627
13585
 
13628
- .muka-chat-attachment-chip__progress-fill {
13629
- display: block;
13630
- height: 100%;
13631
- background-color: var(--color-action-default);
13632
- transition: width 0.16s ease;
13586
+ .muka-chat-message__media {
13587
+ min-width: 0;
13633
13588
  }
13634
13589
 
13635
- .muka-chat-attachment-chip--error .muka-chat-attachment-chip__progress-fill {
13636
- background-color: var(--color-state-error-default, var(--color-text-default-default));
13590
+ .muka-chat-message__message {
13591
+ font-family: var(--text-body-base-regular-fontFamily);
13592
+ font-weight: var(--text-body-base-regular-fontWeight);
13593
+ font-size: var(--text-body-base-regular-fontSize);
13594
+ line-height: var(--text-body-base-regular-lineHeight);
13595
+ white-space: pre-wrap;
13596
+ word-break: break-word;
13637
13597
  }
13638
13598
 
13599
+ /* Empty message block should not add a gap of its own */
13600
+ .muka-chat-message__message:empty {
13601
+ display: none;
13602
+ }
13639
13603
 
13640
- /* Card */
13641
- /* Card Component Styles - Using Muka Design Tokens */
13604
+ /* ─── Embedded card ────────────────────────────────────── */
13642
13605
 
13643
- .muka-card {
13644
- background-color: var(--card-color-default-background);
13645
- color: var(--card-color-default-foreground);
13646
- border: var(--border-width-regular) solid var(--card-color-default-border);
13647
- box-shadow: var(--card-shadow-default);
13648
- transition: background-color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease;
13649
- overflow: hidden;
13606
+ .muka-chat-message__embed {
13607
+ position: relative;
13608
+ display: flex;
13609
+ flex-direction: column;
13610
+ gap: var(--chatbubble-embed-gap);
13611
+ /* The card is inset from the blocks above and below it (Figma 5289:40562) */
13612
+ margin-block: var(--chatbubble-embed-margin-block);
13613
+ padding: var(--chatbubble-embed-padding-block) var(--chatbubble-embed-padding-inline);
13614
+ border-radius: var(--chatbubble-embed-radius);
13615
+ border: var(--border-width-regular) solid transparent;
13650
13616
  }
13651
13617
 
13652
- /* Padding variants */
13653
- .muka-card--padding-none {
13654
- padding: 0;
13618
+ /*
13619
+ * The embed sits on the raised surface of its author's role, one step apart
13620
+ * from the bubble it is nested in, and reuses that role's border colour.
13621
+ */
13622
+ .muka-chat-message--own .muka-chat-message__embed {
13623
+ background-color: var(--chatbubble-embed-color-own-background);
13624
+ border-color: var(--chatbubble-embed-color-own-border);
13625
+ color: var(--chatbubble-embed-color-own-foreground);
13655
13626
  }
13656
13627
 
13657
- .muka-card--padding-sm {
13658
- padding: var(--card-padding-sm);
13628
+ .muka-chat-message--peer .muka-chat-message__embed {
13629
+ background-color: var(--chatbubble-embed-color-peer-background);
13630
+ border-color: var(--chatbubble-embed-color-peer-border);
13631
+ color: var(--chatbubble-embed-color-peer-foreground);
13659
13632
  }
13660
13633
 
13661
- .muka-card--padding-md {
13662
- padding: var(--card-padding-md);
13634
+ .muka-chat-message--agent .muka-chat-message__embed {
13635
+ background-color: var(--chatbubble-embed-color-agent-background);
13636
+ border-color: var(--chatbubble-embed-color-agent-border);
13637
+ color: var(--chatbubble-embed-color-agent-foreground);
13663
13638
  }
13664
13639
 
13665
- .muka-card--padding-lg {
13666
- padding: var(--card-padding-lg);
13640
+ .muka-chat-message__embed-content {
13641
+ display: flex;
13642
+ flex-direction: column;
13643
+ gap: var(--chatbubble-embed-gap);
13644
+ min-width: 0;
13667
13645
  }
13668
13646
 
13669
- /* Radius variants */
13670
- .muka-card--radius-sm {
13671
- border-radius: var(--card-radius-sm);
13647
+ .muka-chat-message__embed-copy {
13648
+ position: absolute;
13649
+ top: var(--chatbubble-embed-padding-block);
13650
+ right: var(--chatbubble-embed-padding-inline);
13672
13651
  }
13673
13652
 
13674
- .muka-card--radius-md {
13675
- border-radius: var(--card-radius-md);
13676
- }
13653
+ /* ─── Stacked full-width action buttons ────────────────── */
13677
13654
 
13678
- .muka-card--radius-lg {
13679
- border-radius: var(--card-radius-lg);
13655
+ .muka-chat-message__action-stack {
13656
+ display: flex;
13657
+ flex-direction: column;
13658
+ gap: var(--chatbubble-action-stack-gap);
13680
13659
  }
13681
13660
 
13682
- /* Interactive variant */
13683
- .muka-card--interactive {
13684
- cursor: pointer;
13685
- user-select: none;
13686
- }
13661
+ /* ─── Inset timestamp ──────────────────────────────────── */
13687
13662
 
13688
- .muka-card--interactive:hover {
13689
- background-color: var(--card-color-hover-background);
13690
- border-color: var(--card-color-hover-border);
13691
- box-shadow: var(--card-shadow-hover);
13663
+ /*
13664
+ * Every author puts its timestamp in the bubble's bottom-right corner, below
13665
+ * the message — never in the header row (Figma 5355:44091).
13666
+ */
13667
+
13668
+ .muka-chat-message__timestamp {
13669
+ color: var(--chatbubble-color-timestamp);
13670
+ font-family: var(--text-body-xs-regular-fontFamily);
13671
+ font-weight: var(--text-body-xs-regular-fontWeight);
13672
+ font-size: var(--text-body-xs-regular-fontSize);
13673
+ line-height: var(--text-body-xs-regular-lineHeight);
13674
+ white-space: nowrap;
13692
13675
  }
13693
13676
 
13694
- .muka-card--interactive:active,
13695
- .muka-card--interactive.muka-card--pressed {
13696
- background-color: var(--card-color-pressed-background);
13697
- border-color: var(--card-color-pressed-border);
13698
- box-shadow: var(--card-shadow-pressed);
13677
+ /*
13678
+ * Pinned to the corner rather than stacked below the message, so a one-line
13679
+ * message stays one line tall. The message reserves the width it needs.
13680
+ */
13681
+ .muka-chat-message__timestamp--inset {
13682
+ position: absolute;
13683
+ right: var(--spacing-2);
13684
+ bottom: var(--spacing-1);
13699
13685
  }
13700
13686
 
13701
- .muka-card--interactive:focus-visible {
13702
- outline: 2px solid var(--color-border-focus);
13703
- outline-offset: 2px;
13687
+ /*
13688
+ * When the last block in the body is media, an embed or an action stack (not
13689
+ * trailing text), it runs the full width, so reserve a line below for the inset
13690
+ * timestamp. A message that ends in text clears the corner inline instead (see
13691
+ * `__message` padding-right above), so it needs no extra bottom space.
13692
+ */
13693
+ .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
13694
+ padding-bottom: var(--text-body-xs-regular-lineHeight);
13704
13695
  }
13705
13696
 
13706
- /* Selected variant */
13707
- .muka-card--selected {
13708
- background-color: var(--card-color-selected-background);
13709
- border-color: var(--card-color-selected-border);
13710
- border-width: var(--border-width-bold);
13711
- box-shadow: var(--card-shadow-selected);
13697
+ /* ─── Menu affordance ──────────────────────────────────── */
13698
+
13699
+ /*
13700
+ * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
13701
+ * everywhere, and pinned while its menu is open. On touch the equivalent
13702
+ * affordance is a long-press on the bubble, which opens an ActionSheet.
13703
+ */
13704
+ .muka-chat-message__menu {
13705
+ position: absolute;
13706
+ top: var(--spacing-1);
13707
+ right: var(--spacing-1);
13708
+ opacity: 0;
13709
+ pointer-events: none;
13712
13710
  }
13713
13711
 
13714
- /* Optional header (title + description) */
13715
- .muka-card__header {
13716
- margin-bottom: var(--spacing-4);
13712
+ .muka-chat-message__menu:focus-within,
13713
+ .muka-chat-message--menu-open .muka-chat-message__menu {
13714
+ opacity: 1;
13715
+ pointer-events: auto;
13717
13716
  }
13718
13717
 
13719
- .muka-card__title {
13720
- margin: 0;
13721
- color: var(--color-text-default-default);
13722
- font-family: var(--text-heading-xs-fontFamily);
13723
- font-weight: var(--text-heading-xs-fontWeight);
13724
- font-size: var(--text-heading-xs-fontSize);
13725
- line-height: var(--text-heading-xs-lineHeight);
13726
- letter-spacing: var(--text-heading-xs-letterSpacing);
13718
+ @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
13719
+ .muka-chat-message__bubble:hover .muka-chat-message__menu {
13720
+ opacity: 1;
13721
+ pointer-events: auto;
13722
+ }
13727
13723
  }
13728
13724
 
13729
- .muka-card__description {
13730
- margin: var(--spacing-1) 0 0;
13731
- color: var(--color-text-subtle-default);
13732
- font-family: var(--text-body-sm-regular-fontFamily);
13733
- font-weight: var(--text-body-sm-regular-fontWeight);
13734
- font-size: var(--text-body-sm-regular-fontSize);
13735
- line-height: var(--text-body-sm-regular-lineHeight);
13725
+ /* Suppress iOS Safari's own callout so the long-press sheet can take over */
13726
+ @media (pointer: coarse) {
13727
+ .muka-chat-message--has-menu .muka-chat-message__bubble {
13728
+ -webkit-touch-callout: none;
13729
+ }
13736
13730
  }
13737
13731
 
13738
- /* Hide divider on last list item inside card */
13739
- .muka-card > .muka-listitem:last-child > .muka-listitem__divider {
13740
- display: none;
13741
- }
13732
+ /* ─── Print ────────────────────────────────────────────── */
13742
13733
 
13743
- /* Disabled state */
13744
- .muka-card--disabled {
13745
- opacity: 0.5;
13746
- cursor: not-allowed;
13747
- pointer-events: none;
13734
+ @media print {
13735
+ .muka-chat-message__bubble {
13736
+ box-shadow: none;
13737
+ break-inside: avoid;
13738
+ print-color-adjust: exact;
13739
+ -webkit-print-color-adjust: exact;
13740
+ }
13741
+
13742
+ .muka-chat-message__embed {
13743
+ break-inside: avoid;
13744
+ print-color-adjust: exact;
13745
+ -webkit-print-color-adjust: exact;
13746
+ }
13747
+
13748
+ .muka-chat-message__menu,
13749
+ .muka-chat-message__embed-copy,
13750
+ .muka-chat-message__action-stack {
13751
+ display: none;
13752
+ }
13748
13753
  }
13749
13754
 
13750
13755
 
@@ -14096,120 +14101,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
14096
14101
  }
14097
14102
 
14098
14103
 
14099
- /* Breadcrumb */
14100
- /* Breadcrumb Component Styles */
14101
-
14102
- .muka-breadcrumb__list {
14103
- display: flex;
14104
- align-items: center;
14105
- flex-wrap: wrap;
14106
- list-style: none;
14107
- margin: 0;
14108
- padding: 0;
14109
- gap: var(--spacing-1);
14110
- }
14111
-
14112
- .muka-breadcrumb__item {
14113
- display: inline-flex;
14114
- align-items: center;
14115
- gap: var(--spacing-1);
14116
- }
14117
-
14118
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) {
14119
- padding-left: var(--spacing-1);
14120
- }
14121
-
14122
- .muka-breadcrumb__icon {
14123
- display: inline-flex;
14124
- align-items: center;
14125
- color: var(--color-text-subtle-default);
14126
- }
14127
-
14128
- .muka-breadcrumb__icon .muka-icon {
14129
- color: inherit;
14130
- }
14131
-
14132
- .muka-breadcrumb__item:has(.muka-breadcrumb__current) .muka-breadcrumb__icon {
14133
- color: var(--color-text-default-default);
14134
- }
14135
-
14136
- .muka-breadcrumb__item:has(.muka-breadcrumb__link:hover) .muka-breadcrumb__icon {
14137
- color: var(--color-text-action-default);
14138
- }
14139
-
14140
- /* Link styles */
14141
- .muka-breadcrumb__link {
14142
- color: var(--color-text-subtle-default);
14143
- text-decoration: none;
14144
- border: none;
14145
- background: none;
14146
- padding-inline: var(--spacing-2);
14147
- padding-block: 0;
14148
- cursor: pointer;
14149
- font: inherit;
14150
- transition: color 0.15s ease;
14151
- }
14152
-
14153
- .muka-breadcrumb__link:hover {
14154
- color: var(--color-text-action-default);
14155
- text-decoration: underline;
14156
- }
14157
-
14158
- /* Tighter gap after leading icon */
14159
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__link,
14160
- .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__current {
14161
- padding-left: var(--spacing-1);
14162
- }
14163
-
14164
- /* Current page (last item, no context switcher) */
14165
- .muka-breadcrumb__current {
14166
- color: var(--color-text-default-default);
14167
- font-weight: 600;
14168
- padding-inline: var(--spacing-2);
14169
- }
14170
-
14171
- /* Separator */
14172
- .muka-breadcrumb__separator {
14173
- color: var(--color-text-subtle-default);
14174
- user-select: none;
14175
- }
14176
-
14177
- .muka-breadcrumb__item--context {
14178
- gap: 0;
14179
- }
14180
-
14181
- .muka-breadcrumb__list:has(.muka-breadcrumb__item--context) {
14182
- gap: 0;
14183
- }
14184
-
14185
- .muka-breadcrumb__item--context .muka-breadcrumb__separator {
14186
- margin: 0;
14187
- padding-inline: var(--spacing-1, 4px);
14188
- }
14189
-
14190
- /* Size variants */
14191
- .muka-breadcrumb--sm {
14192
- font-family: var(--text-label-sm-regular-fontFamily);
14193
- font-weight: var(--text-label-sm-regular-fontWeight);
14194
- font-size: var(--text-label-sm-regular-fontSize);
14195
- line-height: var(--text-label-sm-regular-lineHeight);
14196
- }
14197
-
14198
- .muka-breadcrumb--md {
14199
- font-family: var(--text-label-md-regular-fontFamily);
14200
- font-weight: var(--text-label-md-regular-fontWeight);
14201
- font-size: var(--text-label-md-regular-fontSize);
14202
- line-height: var(--text-label-md-regular-lineHeight);
14203
- }
14204
-
14205
- .muka-breadcrumb--lg {
14206
- font-family: var(--text-label-lg-regular-fontFamily);
14207
- font-weight: var(--text-label-lg-regular-fontWeight);
14208
- font-size: var(--text-label-lg-regular-fontSize);
14209
- line-height: var(--text-label-lg-regular-lineHeight);
14210
- }
14211
-
14212
-
14213
14104
  /* BottomBar */
14214
14105
  /* BottomBar Component Styles */
14215
14106
 
@@ -14603,34 +14494,148 @@ button.muka-chat-photo-grid__tile:focus-visible {
14603
14494
  line-height: normal;
14604
14495
  }
14605
14496
 
14606
- /* Neutral variant */
14607
- .muka-badge-number--neutral {
14608
- background-color: var(--color-surface-level1);
14609
- color: var(--color-text-default-default);
14497
+ /* Neutral variant */
14498
+ .muka-badge-number--neutral {
14499
+ background-color: var(--color-surface-level1);
14500
+ color: var(--color-text-default-default);
14501
+ }
14502
+
14503
+ /* Info variant */
14504
+ .muka-badge-number--info {
14505
+ background-color: var(--color-state-info-contrast);
14506
+ color: var(--color-text-default-inverse);
14507
+ }
14508
+
14509
+ /* Success variant */
14510
+ .muka-badge-number--success {
14511
+ background-color: var(--color-state-success-contrast);
14512
+ color: var(--color-text-default-inverse);
14513
+ }
14514
+
14515
+ /* Warning variant */
14516
+ .muka-badge-number--warning {
14517
+ background-color: var(--color-state-warning-contrast);
14518
+ color: var(--color-text-default-inverse);
14519
+ }
14520
+
14521
+ /* Error variant */
14522
+ .muka-badge-number--error {
14523
+ background-color: var(--color-state-error-contrast);
14524
+ color: var(--color-text-default-inverse);
14525
+ }
14526
+
14527
+
14528
+ /* Breadcrumb */
14529
+ /* Breadcrumb Component Styles */
14530
+
14531
+ .muka-breadcrumb__list {
14532
+ display: flex;
14533
+ align-items: center;
14534
+ flex-wrap: wrap;
14535
+ list-style: none;
14536
+ margin: 0;
14537
+ padding: 0;
14538
+ gap: var(--spacing-1);
14539
+ }
14540
+
14541
+ .muka-breadcrumb__item {
14542
+ display: inline-flex;
14543
+ align-items: center;
14544
+ gap: var(--spacing-1);
14545
+ }
14546
+
14547
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) {
14548
+ padding-left: var(--spacing-1);
14549
+ }
14550
+
14551
+ .muka-breadcrumb__icon {
14552
+ display: inline-flex;
14553
+ align-items: center;
14554
+ color: var(--color-text-subtle-default);
14555
+ }
14556
+
14557
+ .muka-breadcrumb__icon .muka-icon {
14558
+ color: inherit;
14559
+ }
14560
+
14561
+ .muka-breadcrumb__item:has(.muka-breadcrumb__current) .muka-breadcrumb__icon {
14562
+ color: var(--color-text-default-default);
14563
+ }
14564
+
14565
+ .muka-breadcrumb__item:has(.muka-breadcrumb__link:hover) .muka-breadcrumb__icon {
14566
+ color: var(--color-text-action-default);
14567
+ }
14568
+
14569
+ /* Link styles */
14570
+ .muka-breadcrumb__link {
14571
+ color: var(--color-text-subtle-default);
14572
+ text-decoration: none;
14573
+ border: none;
14574
+ background: none;
14575
+ padding-inline: var(--spacing-2);
14576
+ padding-block: 0;
14577
+ cursor: pointer;
14578
+ font: inherit;
14579
+ transition: color 0.15s ease;
14580
+ }
14581
+
14582
+ .muka-breadcrumb__link:hover {
14583
+ color: var(--color-text-action-default);
14584
+ text-decoration: underline;
14585
+ }
14586
+
14587
+ /* Tighter gap after leading icon */
14588
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__link,
14589
+ .muka-breadcrumb__item:has(.muka-breadcrumb__icon) .muka-breadcrumb__current {
14590
+ padding-left: var(--spacing-1);
14591
+ }
14592
+
14593
+ /* Current page (last item, no context switcher) */
14594
+ .muka-breadcrumb__current {
14595
+ color: var(--color-text-default-default);
14596
+ font-weight: 600;
14597
+ padding-inline: var(--spacing-2);
14598
+ }
14599
+
14600
+ /* Separator */
14601
+ .muka-breadcrumb__separator {
14602
+ color: var(--color-text-subtle-default);
14603
+ user-select: none;
14604
+ }
14605
+
14606
+ .muka-breadcrumb__item--context {
14607
+ gap: 0;
14608
+ }
14609
+
14610
+ .muka-breadcrumb__list:has(.muka-breadcrumb__item--context) {
14611
+ gap: 0;
14610
14612
  }
14611
14613
 
14612
- /* Info variant */
14613
- .muka-badge-number--info {
14614
- background-color: var(--color-state-info-contrast);
14615
- color: var(--color-text-default-inverse);
14614
+ .muka-breadcrumb__item--context .muka-breadcrumb__separator {
14615
+ margin: 0;
14616
+ padding-inline: var(--spacing-1, 4px);
14616
14617
  }
14617
14618
 
14618
- /* Success variant */
14619
- .muka-badge-number--success {
14620
- background-color: var(--color-state-success-contrast);
14621
- color: var(--color-text-default-inverse);
14619
+ /* Size variants */
14620
+ .muka-breadcrumb--sm {
14621
+ font-family: var(--text-label-sm-regular-fontFamily);
14622
+ font-weight: var(--text-label-sm-regular-fontWeight);
14623
+ font-size: var(--text-label-sm-regular-fontSize);
14624
+ line-height: var(--text-label-sm-regular-lineHeight);
14622
14625
  }
14623
14626
 
14624
- /* Warning variant */
14625
- .muka-badge-number--warning {
14626
- background-color: var(--color-state-warning-contrast);
14627
- color: var(--color-text-default-inverse);
14627
+ .muka-breadcrumb--md {
14628
+ font-family: var(--text-label-md-regular-fontFamily);
14629
+ font-weight: var(--text-label-md-regular-fontWeight);
14630
+ font-size: var(--text-label-md-regular-fontSize);
14631
+ line-height: var(--text-label-md-regular-lineHeight);
14628
14632
  }
14629
14633
 
14630
- /* Error variant */
14631
- .muka-badge-number--error {
14632
- background-color: var(--color-state-error-contrast);
14633
- color: var(--color-text-default-inverse);
14634
+ .muka-breadcrumb--lg {
14635
+ font-family: var(--text-label-lg-regular-fontFamily);
14636
+ font-weight: var(--text-label-lg-regular-fontWeight);
14637
+ font-size: var(--text-label-lg-regular-fontSize);
14638
+ line-height: var(--text-label-lg-regular-lineHeight);
14634
14639
  }
14635
14640
 
14636
14641
 
@@ -14697,6 +14702,33 @@ button.muka-chat-photo-grid__tile:focus-visible {
14697
14702
  padding-left: var(--badge-padding-leading-lg);
14698
14703
  }
14699
14704
 
14705
+ /* Icon-only — square, sized to the badge height (Figma: 24 / 32 / 40).
14706
+ * Padding resets at size+icon-only specificity so `--has-icon` leading padding
14707
+ * cannot win and shift the icon off-center. */
14708
+ .muka-badge--icon-only {
14709
+ justify-content: center;
14710
+ align-items: center;
14711
+ gap: 0;
14712
+ }
14713
+
14714
+ .muka-badge--sm.muka-badge--icon-only,
14715
+ .muka-badge--md.muka-badge--icon-only,
14716
+ .muka-badge--lg.muka-badge--icon-only {
14717
+ padding: 0;
14718
+ }
14719
+
14720
+ .muka-badge--sm.muka-badge--icon-only {
14721
+ width: var(--badge-size-height-sm);
14722
+ }
14723
+
14724
+ .muka-badge--md.muka-badge--icon-only {
14725
+ width: var(--badge-size-height-md);
14726
+ }
14727
+
14728
+ .muka-badge--lg.muka-badge--icon-only {
14729
+ width: var(--badge-size-height-lg);
14730
+ }
14731
+
14700
14732
  /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
14701
14733
  .muka-badge__icon {
14702
14734
  display: inline-flex;
@@ -15236,102 +15268,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
15236
15268
  }
15237
15269
 
15238
15270
 
15239
- /* AppShell */
15240
- /* AppShell Component Styles */
15241
-
15242
- /*
15243
- * Layout wrapper for a persistent left navigation rail + main view area, with an
15244
- * optional full-width top app bar. The rail itself is styled by the BottomBar
15245
- * `desktopAs="sidebar"` rules (fixed 240px left rail at ≥1024px); AppShell shows/
15246
- * hides the sidebar + app-bar slots and offsets the main area to match. Both
15247
- * appear at the large tier — responsively (no `size`, scoped with
15248
- * `:not([data-size])`) or forced via `[data-size="lg"]`.
15249
- */
15250
- .muka-app-shell {
15251
- position: relative;
15252
- /* Reserved width for the rail; matches BottomBar's desktop-sidebar width. */
15253
- --app-shell-sidebar-width: 240px;
15254
- /* Height of the optional top app bar. */
15255
- --app-shell-appbar-height: 64px;
15256
- }
15257
-
15258
- /* Sidebar slot: hidden below the large tier (per-view nav handles small/medium). */
15259
- .muka-app-shell__sidebar {
15260
- display: none;
15261
- }
15262
-
15263
- .muka-app-shell__main {
15264
- min-height: 100dvh;
15265
- }
15266
-
15267
- /*
15268
- * App bar: full-width top strip. Intrinsic styling lives here (harmless while
15269
- * hidden); it is revealed only at the large tier. Sits above the sidebar rail.
15270
- */
15271
- .muka-app-shell__appbar {
15272
- display: none;
15273
- align-items: center;
15274
- justify-content: space-between;
15275
- gap: var(--spacing-4);
15276
- position: fixed;
15277
- top: 0;
15278
- left: 0;
15279
- right: 0;
15280
- height: var(--app-shell-appbar-height);
15281
- padding-inline: var(--spacing-4);
15282
- background-color: var(--color-surface-level3);
15283
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
15284
- z-index: 11; /* above the sidebar rail (z-index 10) */
15285
- }
15286
-
15287
- /* ─── Large tier (responsive) ─── */
15288
- @media (min-width: 1024px) {
15289
- .muka-app-shell:not([data-size]) .muka-app-shell__sidebar {
15290
- display: block;
15291
- }
15292
- .muka-app-shell:not([data-size]) .muka-app-shell__main {
15293
- padding-left: var(--app-shell-sidebar-width);
15294
- }
15295
- .muka-app-shell:not([data-size]) .muka-app-shell__appbar {
15296
- display: flex;
15297
- }
15298
- /* When an app bar is present, drop the rail + content below it so nothing overlaps. */
15299
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-app-shell__main {
15300
- padding-top: var(--app-shell-appbar-height);
15301
- }
15302
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15303
- top: var(--app-shell-appbar-height);
15304
- height: calc(100vh - var(--app-shell-appbar-height));
15305
- }
15306
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-view,
15307
- .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-nav-transition {
15308
- height: calc(100dvh - var(--app-shell-appbar-height));
15309
- }
15310
- }
15311
-
15312
- /* ─── Large tier (forced via size="lg") ─── */
15313
- .muka-app-shell[data-size='lg'] .muka-app-shell__sidebar {
15314
- display: block;
15315
- }
15316
- .muka-app-shell[data-size='lg'] .muka-app-shell__main {
15317
- padding-left: var(--app-shell-sidebar-width);
15318
- }
15319
- .muka-app-shell[data-size='lg'] .muka-app-shell__appbar {
15320
- display: flex;
15321
- }
15322
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-app-shell__main {
15323
- padding-top: var(--app-shell-appbar-height);
15324
- }
15325
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15326
- top: var(--app-shell-appbar-height);
15327
- height: calc(100vh - var(--app-shell-appbar-height));
15328
- }
15329
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-view,
15330
- .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-nav-transition {
15331
- height: calc(100dvh - var(--app-shell-appbar-height));
15332
- }
15333
-
15334
-
15335
15271
  /* Alert */
15336
15272
  /* Alert Component Styles - Using Muka Design Tokens */
15337
15273
 
@@ -15493,11 +15429,12 @@ button.muka-chat-photo-grid__tile:focus-visible {
15493
15429
  line-height: var(--text-body-base-regular-lineHeight);
15494
15430
  }
15495
15431
 
15496
- /* Action slot */
15432
+ /* Action slot — TextLink (or similar) below the message, matching Figma */
15497
15433
  .muka-alert__action {
15498
15434
  display: flex;
15499
- align-items: center;
15500
- flex-shrink: 0;
15435
+ flex-direction: column;
15436
+ align-items: flex-start;
15437
+ padding-top: var(--spacing-1);
15501
15438
  }
15502
15439
 
15503
15440
  /* Dismiss button - uses accent color per variant, aligned with icon row */
@@ -15534,6 +15471,102 @@ button.muka-chat-photo-grid__tile:focus-visible {
15534
15471
  }
15535
15472
 
15536
15473
 
15474
+ /* AppShell */
15475
+ /* AppShell Component Styles */
15476
+
15477
+ /*
15478
+ * Layout wrapper for a persistent left navigation rail + main view area, with an
15479
+ * optional full-width top app bar. The rail itself is styled by the BottomBar
15480
+ * `desktopAs="sidebar"` rules (fixed 240px left rail at ≥1024px); AppShell shows/
15481
+ * hides the sidebar + app-bar slots and offsets the main area to match. Both
15482
+ * appear at the large tier — responsively (no `size`, scoped with
15483
+ * `:not([data-size])`) or forced via `[data-size="lg"]`.
15484
+ */
15485
+ .muka-app-shell {
15486
+ position: relative;
15487
+ /* Reserved width for the rail; matches BottomBar's desktop-sidebar width. */
15488
+ --app-shell-sidebar-width: 240px;
15489
+ /* Height of the optional top app bar. */
15490
+ --app-shell-appbar-height: 64px;
15491
+ }
15492
+
15493
+ /* Sidebar slot: hidden below the large tier (per-view nav handles small/medium). */
15494
+ .muka-app-shell__sidebar {
15495
+ display: none;
15496
+ }
15497
+
15498
+ .muka-app-shell__main {
15499
+ min-height: 100dvh;
15500
+ }
15501
+
15502
+ /*
15503
+ * App bar: full-width top strip. Intrinsic styling lives here (harmless while
15504
+ * hidden); it is revealed only at the large tier. Sits above the sidebar rail.
15505
+ */
15506
+ .muka-app-shell__appbar {
15507
+ display: none;
15508
+ align-items: center;
15509
+ justify-content: space-between;
15510
+ gap: var(--spacing-4);
15511
+ position: fixed;
15512
+ top: 0;
15513
+ left: 0;
15514
+ right: 0;
15515
+ height: var(--app-shell-appbar-height);
15516
+ padding-inline: var(--spacing-4);
15517
+ background-color: var(--color-surface-level3);
15518
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
15519
+ z-index: 11; /* above the sidebar rail (z-index 10) */
15520
+ }
15521
+
15522
+ /* ─── Large tier (responsive) ─── */
15523
+ @media (min-width: 1024px) {
15524
+ .muka-app-shell:not([data-size]) .muka-app-shell__sidebar {
15525
+ display: block;
15526
+ }
15527
+ .muka-app-shell:not([data-size]) .muka-app-shell__main {
15528
+ padding-left: var(--app-shell-sidebar-width);
15529
+ }
15530
+ .muka-app-shell:not([data-size]) .muka-app-shell__appbar {
15531
+ display: flex;
15532
+ }
15533
+ /* When an app bar is present, drop the rail + content below it so nothing overlaps. */
15534
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-app-shell__main {
15535
+ padding-top: var(--app-shell-appbar-height);
15536
+ }
15537
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15538
+ top: var(--app-shell-appbar-height);
15539
+ height: calc(100vh - var(--app-shell-appbar-height));
15540
+ }
15541
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-view,
15542
+ .muka-app-shell:not([data-size]):has(.muka-app-shell__appbar) .muka-nav-transition {
15543
+ height: calc(100dvh - var(--app-shell-appbar-height));
15544
+ }
15545
+ }
15546
+
15547
+ /* ─── Large tier (forced via size="lg") ─── */
15548
+ .muka-app-shell[data-size='lg'] .muka-app-shell__sidebar {
15549
+ display: block;
15550
+ }
15551
+ .muka-app-shell[data-size='lg'] .muka-app-shell__main {
15552
+ padding-left: var(--app-shell-sidebar-width);
15553
+ }
15554
+ .muka-app-shell[data-size='lg'] .muka-app-shell__appbar {
15555
+ display: flex;
15556
+ }
15557
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-app-shell__main {
15558
+ padding-top: var(--app-shell-appbar-height);
15559
+ }
15560
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-bottombar--desktop-sidebar {
15561
+ top: var(--app-shell-appbar-height);
15562
+ height: calc(100vh - var(--app-shell-appbar-height));
15563
+ }
15564
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-view,
15565
+ .muka-app-shell[data-size='lg']:has(.muka-app-shell__appbar) .muka-nav-transition {
15566
+ height: calc(100dvh - var(--app-shell-appbar-height));
15567
+ }
15568
+
15569
+
15537
15570
  /* AgentTaskList */
15538
15571
  /* AgentTaskList Component Styles */
15539
15572