@revikornmann/muka-ui 0.27.3 → 0.28.1

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 (61) hide show
  1. package/dist/cjs/components/DataPieChart/DataPieChart.css +4 -1
  2. package/dist/cjs/components/DataPieChart/DataPieChart.js +1 -1
  3. package/dist/cjs/components/DataPieChart/DataPieChart.js.map +1 -1
  4. package/dist/cjs/components/Dialog/Dialog.css +3 -0
  5. package/dist/cjs/components/Dialog/Dialog.js +66 -3
  6. package/dist/cjs/components/Dialog/Dialog.js.map +1 -1
  7. package/dist/cjs/components/Input/Input.css +21 -0
  8. package/dist/cjs/components/MediaViewer/MediaViewer.css +183 -0
  9. package/dist/cjs/components/MediaViewer/MediaViewer.js +273 -0
  10. package/dist/cjs/components/MediaViewer/MediaViewer.js.map +1 -0
  11. package/dist/cjs/components/MediaViewer/index.js +6 -0
  12. package/dist/cjs/components/MediaViewer/index.js.map +1 -0
  13. package/dist/cjs/components/MediaViewer/mediaViewerGestures.js +65 -0
  14. package/dist/cjs/components/MediaViewer/mediaViewerGestures.js.map +1 -0
  15. package/dist/cjs/components/Thumbnail/Thumbnail.css +11 -0
  16. package/dist/cjs/components/Thumbnail/Thumbnail.js +6 -2
  17. package/dist/cjs/components/Thumbnail/Thumbnail.js.map +1 -1
  18. package/dist/cjs/components/index.js +3 -1
  19. package/dist/cjs/components/index.js.map +1 -1
  20. package/dist/esm/components/DataPieChart/DataPieChart.css +4 -1
  21. package/dist/esm/components/DataPieChart/DataPieChart.js +1 -1
  22. package/dist/esm/components/DataPieChart/DataPieChart.js.map +1 -1
  23. package/dist/esm/components/Dialog/Dialog.css +3 -0
  24. package/dist/esm/components/Dialog/Dialog.js +66 -3
  25. package/dist/esm/components/Dialog/Dialog.js.map +1 -1
  26. package/dist/esm/components/Input/Input.css +21 -0
  27. package/dist/esm/components/MediaViewer/MediaViewer.css +183 -0
  28. package/dist/esm/components/MediaViewer/MediaViewer.js +269 -0
  29. package/dist/esm/components/MediaViewer/MediaViewer.js.map +1 -0
  30. package/dist/esm/components/MediaViewer/index.js +2 -0
  31. package/dist/esm/components/MediaViewer/index.js.map +1 -0
  32. package/dist/esm/components/MediaViewer/mediaViewerGestures.js +58 -0
  33. package/dist/esm/components/MediaViewer/mediaViewerGestures.js.map +1 -0
  34. package/dist/esm/components/Thumbnail/Thumbnail.css +11 -0
  35. package/dist/esm/components/Thumbnail/Thumbnail.js +6 -2
  36. package/dist/esm/components/Thumbnail/Thumbnail.js.map +1 -1
  37. package/dist/esm/components/index.js +1 -0
  38. package/dist/esm/components/index.js.map +1 -1
  39. package/dist/styles/base.css +2 -0
  40. package/dist/styles/components/DataPieChart.css +4 -1
  41. package/dist/styles/components/Dialog.css +3 -0
  42. package/dist/styles/components/Input.css +21 -0
  43. package/dist/styles/components/MediaViewer.css +183 -0
  44. package/dist/styles/components/Thumbnail.css +11 -0
  45. package/dist/styles/index.css +1693 -1467
  46. package/dist/styles/muka-dark.css +1693 -1467
  47. package/dist/styles/muka-light.css +1693 -1467
  48. package/dist/styles/wireframe-dark.css +1693 -1467
  49. package/dist/styles/wireframe-light.css +1693 -1467
  50. package/dist/types/components/Dialog/Dialog.d.ts.map +1 -1
  51. package/dist/types/components/MediaViewer/MediaViewer.d.ts +88 -0
  52. package/dist/types/components/MediaViewer/MediaViewer.d.ts.map +1 -0
  53. package/dist/types/components/MediaViewer/index.d.ts +2 -0
  54. package/dist/types/components/MediaViewer/index.d.ts.map +1 -0
  55. package/dist/types/components/MediaViewer/mediaViewerGestures.d.ts +35 -0
  56. package/dist/types/components/MediaViewer/mediaViewerGestures.d.ts.map +1 -0
  57. package/dist/types/components/Thumbnail/Thumbnail.d.ts +21 -0
  58. package/dist/types/components/Thumbnail/Thumbnail.d.ts.map +1 -1
  59. package/dist/types/components/index.d.ts +1 -0
  60. package/dist/types/components/index.d.ts.map +1 -1
  61. package/package.json +1 -1
@@ -152,6 +152,8 @@ body {
152
152
  padding: 0;
153
153
  /* Page background uses Muka surface token so it matches theme (e.g. dark for muka-dark, wireframe-dark) */
154
154
  background-color: var(--color-surface-level3);
155
+ /* Default text color so bare text (h1–h6, p, span outside components) follows the theme instead of browser black */
156
+ color: var(--color-text-default-default);
155
157
  }
156
158
 
157
159
 
@@ -3711,6 +3713,17 @@ body {
3711
3713
  height: 120px;
3712
3714
  }
3713
3715
 
3716
+ /* Fluid: fill the parent's width; the shape sets the height via aspect-ratio. */
3717
+ .muka-thumbnail--fluid {
3718
+ width: 100%;
3719
+ height: auto;
3720
+ aspect-ratio: 1 / 1;
3721
+ }
3722
+
3723
+ .muka-thumbnail--fluid.muka-thumbnail--4-3 {
3724
+ aspect-ratio: 4 / 3;
3725
+ }
3726
+
3714
3727
  .muka-thumbnail--ellipse .muka-thumbnail__frame {
3715
3728
  border-radius: var(--border-radius-full);
3716
3729
  }
@@ -6156,195 +6169,267 @@ body {
6156
6169
  }
6157
6170
 
6158
6171
 
6159
- /* Radio */
6160
- /* Radio Component Styles - Using Muka Design Tokens */
6161
-
6162
- /* Wrapper - clickable label container */
6163
- .muka-radio {
6164
- display: inline-flex;
6165
- align-items: center;
6166
- gap: var(--spacing-4);
6167
- cursor: pointer;
6168
- user-select: none;
6169
- }
6170
-
6171
- .muka-radio--disabled {
6172
- cursor: not-allowed;
6173
- opacity: 0.6;
6174
- }
6172
+ /* RangeSlider */
6173
+ /* RangeSlider Component Styles - Using Muka Design Tokens */
6175
6174
 
6176
- /* Control container */
6177
- .muka-radio__control {
6178
- position: relative;
6179
- display: inline-flex;
6180
- align-items: center;
6181
- justify-content: center;
6182
- flex-shrink: 0;
6175
+ .muka-range-slider {
6176
+ display: flex;
6177
+ flex-direction: column;
6178
+ gap: var(--spacing-1);
6179
+ width: 100%;
6183
6180
  }
6184
6181
 
6185
- /* Hidden native input */
6186
- .muka-radio__input {
6187
- position: absolute;
6188
- width: 1px;
6189
- height: 1px;
6190
- padding: 0;
6191
- margin: -1px;
6192
- overflow: hidden;
6193
- clip: rect(0, 0, 0, 0);
6194
- white-space: nowrap;
6195
- border: 0;
6196
- }
6182
+ /* ========================================
6183
+ HEADER: label group (label + info + optional) and value readout
6184
+ ======================================== */
6197
6185
 
6198
- /* Visual indicator (circle) */
6199
- .muka-radio__indicator {
6186
+ .muka-range-slider__header {
6200
6187
  display: flex;
6201
6188
  align-items: center;
6202
- justify-content: center;
6203
- width: var(--radio-size-default);
6204
- height: var(--radio-size-default);
6205
- border-radius: var(--border-radius-full);
6206
- background-color: var(--radio-color-default-background);
6207
- border: var(--border-width-regular) solid var(--radio-color-default-border);
6208
- transition: all 0.15s ease;
6209
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
6210
- }
6211
-
6212
- /* Size variants */
6213
- .muka-radio--sm .muka-radio__indicator {
6214
- width: var(--radio-size-sm);
6215
- height: var(--radio-size-sm);
6216
- }
6217
-
6218
- .muka-radio--lg .muka-radio__indicator {
6219
- width: var(--radio-size-lg);
6220
- height: var(--radio-size-lg);
6221
- }
6222
-
6223
- /* Inner dot (shown when checked) */
6224
- .muka-radio__dot {
6225
- width: var(--radio-dot-size-default);
6226
- height: var(--radio-dot-size-default);
6227
- border-radius: var(--border-radius-full);
6228
- background-color: var(--radio-color-default-dot);
6229
- transform: scale(0);
6230
- transition: transform 0.15s ease;
6231
- }
6232
-
6233
- .muka-radio--sm .muka-radio__dot {
6234
- width: var(--radio-dot-size-sm);
6235
- height: var(--radio-dot-size-sm);
6236
- }
6237
-
6238
- .muka-radio--lg .muka-radio__dot {
6239
- width: var(--radio-dot-size-lg);
6240
- height: var(--radio-dot-size-lg);
6241
- }
6242
-
6243
- /* Hover state - removed per design */
6244
-
6245
- /* Focus state */
6246
- .muka-radio__input:focus-visible + .muka-radio__indicator {
6247
- outline: 2px solid var(--color-border-focus);
6248
- outline-offset: 2px;
6249
- }
6250
-
6251
- /* Checked state */
6252
- .muka-radio__input:checked + .muka-radio__indicator {
6253
- background-color: var(--radio-color-checked-background);
6254
- border-width: var(--border-width-bold);
6255
- border-color: var(--radio-color-checked-border);
6256
- box-shadow: none;
6189
+ justify-content: space-between;
6190
+ gap: var(--spacing-2);
6191
+ min-height: 24px;
6257
6192
  }
6258
6193
 
6259
- .muka-radio__input:checked + .muka-radio__indicator .muka-radio__dot {
6260
- background-color: var(--radio-color-checked-dot);
6261
- transform: scale(1);
6194
+ .muka-range-slider__label-group {
6195
+ display: inline-flex;
6196
+ align-items: center;
6197
+ gap: var(--spacing-2);
6262
6198
  }
6263
6199
 
6264
- /* Disabled state */
6265
- .muka-radio--disabled .muka-radio__indicator {
6266
- background-color: var(--radio-color-disabled-background);
6267
- border-color: var(--radio-color-disabled-border);
6268
- box-shadow: none;
6200
+ .muka-range-slider__label {
6201
+ font-family: var(--text-label-md-semibold-fontFamily);
6202
+ font-weight: var(--text-label-md-semibold-fontWeight);
6203
+ font-size: var(--text-label-md-semibold-fontSize);
6204
+ line-height: var(--text-label-md-semibold-lineHeight);
6205
+ color: var(--color-text-default-default);
6269
6206
  }
6270
6207
 
6271
- .muka-radio__input:disabled:checked + .muka-radio__indicator .muka-radio__dot {
6272
- background-color: var(--radio-color-disabled-dot);
6208
+ .muka-range-slider__info {
6209
+ color: var(--color-text-subtle-default);
6273
6210
  }
6274
6211
 
6275
- /* Label text */
6276
- .muka-radio__label {
6277
- font-family: var(--text-label-lg-regular-fontFamily);
6278
- font-weight: var(--text-label-lg-regular-fontWeight);
6279
- font-size: var(--text-label-lg-regular-fontSize);
6280
- line-height: var(--text-label-lg-regular-lineHeight);
6281
- color: var(--color-text-default-default);
6212
+ .muka-range-slider__optional {
6213
+ font-family: var(--text-label-sm-regular-fontFamily);
6214
+ font-weight: var(--text-label-sm-regular-fontWeight);
6215
+ font-size: var(--text-label-sm-regular-fontSize);
6216
+ line-height: var(--text-label-sm-regular-lineHeight);
6217
+ color: var(--color-text-subtle-default);
6282
6218
  }
6283
6219
 
6284
- .muka-radio--sm .muka-radio__label {
6220
+ .muka-range-slider__value {
6285
6221
  font-family: var(--text-label-md-regular-fontFamily);
6286
6222
  font-weight: var(--text-label-md-regular-fontWeight);
6287
6223
  font-size: var(--text-label-md-regular-fontSize);
6288
6224
  line-height: var(--text-label-md-regular-lineHeight);
6225
+ color: var(--color-text-default-default);
6226
+ font-variant-numeric: tabular-nums;
6289
6227
  }
6290
6228
 
6291
- .muka-radio--lg .muka-radio__label {
6292
- font-family: var(--text-label-xl-regular-fontFamily);
6293
- font-weight: var(--text-label-xl-regular-fontWeight);
6294
- font-size: var(--text-label-xl-regular-fontSize);
6295
- line-height: var(--text-label-xl-regular-lineHeight);
6296
- }
6297
-
6298
- .muka-radio--disabled .muka-radio__label {
6229
+ .muka-range-slider__helper {
6230
+ margin: 0;
6231
+ font-family: var(--text-body-sm-regular-fontFamily);
6232
+ font-weight: var(--text-body-sm-regular-fontWeight);
6233
+ font-size: var(--text-body-sm-regular-fontSize);
6234
+ line-height: var(--text-body-sm-regular-lineHeight);
6299
6235
  color: var(--color-text-subtle-default);
6300
6236
  }
6301
6237
 
6238
+ /* ========================================
6239
+ TRACK + THUMB
6240
+ Native range input, restyled. A thick sunken track holds an accent fill up to
6241
+ the current value, with a circular grip handle. The filled portion is driven
6242
+ by the inline --muka-range-fill custom property (set from the component value).
6243
+ ======================================== */
6302
6244
 
6303
- /* RadioTile */
6304
- /* RadioTile Component Styles - Using Muka Design Tokens */
6245
+ /* Size variants: track height, thumb diameter and grip geometry */
6246
+ .muka-range-slider--sm {
6247
+ --muka-range-track-h: 12px;
6248
+ --muka-range-thumb: 24px;
6249
+ --muka-range-grip-h: 9px;
6250
+ }
6251
+ .muka-range-slider--md {
6252
+ --muka-range-track-h: 16px;
6253
+ --muka-range-thumb: 32px;
6254
+ --muka-range-grip-h: 12px;
6255
+ }
6256
+ .muka-range-slider--lg {
6257
+ --muka-range-track-h: 20px;
6258
+ --muka-range-thumb: 40px;
6259
+ --muka-range-grip-h: 15px;
6260
+ }
6305
6261
 
6306
- /* Base tile styles - horizontal */
6307
- .muka-radio-tile {
6262
+ .muka-range-slider__bar {
6263
+ /* Reserve the full thumb height so the handle never clips the layout. */
6308
6264
  display: flex;
6309
6265
  align-items: center;
6310
- gap: var(--spacing-4);
6311
- padding: var(--spacing-4);
6312
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
6313
- border-radius: var(--input-field-radius-lg);
6314
- background-color: var(--color-surface-level3);
6315
- cursor: pointer;
6316
- transition: border-color 0.15s ease, border-width 0.15s ease;
6317
- overflow: hidden;
6318
- box-sizing: border-box;
6266
+ height: var(--muka-range-thumb);
6319
6267
  }
6320
6268
 
6321
- .muka-radio-tile--disabled {
6322
- cursor: not-allowed;
6323
- opacity: 0.6;
6324
- }
6269
+ .muka-range-slider__input {
6270
+ -webkit-appearance: none;
6271
+ appearance: none;
6272
+ width: 100%;
6273
+ height: var(--muka-range-thumb);
6274
+ margin: 0;
6275
+ background: transparent;
6276
+ cursor: pointer;
6325
6277
 
6326
- /* Selected state */
6327
- .muka-radio-tile[data-checked] {
6328
- border-width: var(--border-width-bold);
6329
- border-color: var(--color-action-default);
6278
+ /* Grip handle fill + two vertical grip bars, all theme-aware. */
6279
+ --muka-range-grip-color: var(--color-text-subtle-default);
6280
+ --muka-range-grip-w: 2px;
6281
+ --muka-range-grip-gap: 3px;
6282
+
6283
+ /* The track fill: action colour up to the value, sunken surface beyond it. */
6284
+ --muka-range-track-fill: linear-gradient(
6285
+ to right,
6286
+ var(--color-action-default) 0,
6287
+ var(--color-action-default) var(--muka-range-fill, 0%),
6288
+ var(--color-surface-sunken) var(--muka-range-fill, 0%),
6289
+ var(--color-surface-sunken) 100%
6290
+ );
6330
6291
  }
6331
6292
 
6332
- /* Vertical layout */
6333
- .muka-radio-tile--vertical {
6334
- flex-direction: column;
6335
- align-items: center;
6336
- gap: var(--spacing-2);
6337
- position: relative;
6338
- width: 160px;
6293
+ .muka-range-slider__input:focus {
6294
+ outline: none;
6339
6295
  }
6340
6296
 
6341
- /* Radio container */
6342
- .muka-radio-tile__radio {
6343
- flex-shrink: 0;
6297
+ /* WebKit / Blink track */
6298
+ .muka-range-slider__input::-webkit-slider-runnable-track {
6299
+ height: var(--muka-range-track-h);
6300
+ border-radius: var(--border-radius-full);
6301
+ background-image: var(--muka-range-track-fill);
6302
+ border: 1px solid var(--color-border-contrast);
6303
+ box-shadow: var(--shadow-sunken);
6344
6304
  }
6345
6305
 
6346
- /* Corner-positioned radio for vertical */
6347
- .muka-radio-tile__radio--corner {
6306
+ /* Firefox track + progress */
6307
+ .muka-range-slider__input::-moz-range-track {
6308
+ height: var(--muka-range-track-h);
6309
+ border-radius: var(--border-radius-full);
6310
+ background: var(--color-surface-sunken);
6311
+ border: 1px solid var(--color-border-contrast);
6312
+ box-shadow: var(--shadow-sunken);
6313
+ }
6314
+ .muka-range-slider__input::-moz-range-progress {
6315
+ height: var(--muka-range-track-h);
6316
+ border-radius: var(--border-radius-full);
6317
+ background: var(--color-action-default);
6318
+ }
6319
+
6320
+ /* WebKit / Blink thumb (vertically centred over the track) */
6321
+ .muka-range-slider__input::-webkit-slider-thumb {
6322
+ -webkit-appearance: none;
6323
+ appearance: none;
6324
+ width: var(--muka-range-thumb);
6325
+ height: var(--muka-range-thumb);
6326
+ margin-top: calc((var(--muka-range-track-h) - var(--muka-range-thumb)) / 2);
6327
+ border-radius: var(--border-radius-full);
6328
+ border: 1px solid var(--color-border-contrast);
6329
+ box-shadow: var(--shadow-level2);
6330
+ background-color: var(--color-surface-level1);
6331
+ background-image:
6332
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
6333
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
6334
+ background-repeat: no-repeat;
6335
+ background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
6336
+ background-position:
6337
+ calc(50% - var(--muka-range-grip-gap)) center,
6338
+ calc(50% + var(--muka-range-grip-gap)) center;
6339
+ transition: box-shadow 0.15s ease, background-color 0.15s ease;
6340
+ }
6341
+
6342
+ /* Firefox thumb */
6343
+ .muka-range-slider__input::-moz-range-thumb {
6344
+ width: var(--muka-range-thumb);
6345
+ height: var(--muka-range-thumb);
6346
+ border-radius: var(--border-radius-full);
6347
+ border: 1px solid var(--color-border-contrast);
6348
+ box-shadow: var(--shadow-level2);
6349
+ background-color: var(--color-surface-level1);
6350
+ background-image:
6351
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
6352
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
6353
+ background-repeat: no-repeat;
6354
+ background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
6355
+ background-position:
6356
+ calc(50% - var(--muka-range-grip-gap)) center,
6357
+ calc(50% + var(--muka-range-grip-gap)) center;
6358
+ transition: box-shadow 0.15s ease, background-color 0.15s ease;
6359
+ }
6360
+
6361
+ /* Hover */
6362
+ .muka-range-slider__input:hover::-webkit-slider-thumb {
6363
+ background-color: var(--color-surface-level1);
6364
+ box-shadow: var(--shadow-level3);
6365
+ }
6366
+ .muka-range-slider__input:hover::-moz-range-thumb {
6367
+ background-color: var(--color-surface-level1);
6368
+ box-shadow: var(--shadow-level3);
6369
+ }
6370
+
6371
+ /* Focus ring */
6372
+ .muka-range-slider__input:focus-visible::-webkit-slider-thumb {
6373
+ box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
6374
+ }
6375
+ .muka-range-slider__input:focus-visible::-moz-range-thumb {
6376
+ box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
6377
+ }
6378
+
6379
+ /* Disabled */
6380
+ .muka-range-slider--disabled {
6381
+ opacity: 0.5;
6382
+ }
6383
+ .muka-range-slider--disabled .muka-range-slider__input {
6384
+ cursor: not-allowed;
6385
+ }
6386
+
6387
+
6388
+ /* RadioTile */
6389
+ /* RadioTile Component Styles - Using Muka Design Tokens */
6390
+
6391
+ /* Base tile styles - horizontal */
6392
+ .muka-radio-tile {
6393
+ display: flex;
6394
+ align-items: center;
6395
+ gap: var(--spacing-4);
6396
+ padding: var(--spacing-4);
6397
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
6398
+ border-radius: var(--input-field-radius-lg);
6399
+ background-color: var(--color-surface-level3);
6400
+ cursor: pointer;
6401
+ transition: border-color 0.15s ease, border-width 0.15s ease;
6402
+ overflow: hidden;
6403
+ box-sizing: border-box;
6404
+ }
6405
+
6406
+ .muka-radio-tile--disabled {
6407
+ cursor: not-allowed;
6408
+ opacity: 0.6;
6409
+ }
6410
+
6411
+ /* Selected state */
6412
+ .muka-radio-tile[data-checked] {
6413
+ border-width: var(--border-width-bold);
6414
+ border-color: var(--color-action-default);
6415
+ }
6416
+
6417
+ /* Vertical layout */
6418
+ .muka-radio-tile--vertical {
6419
+ flex-direction: column;
6420
+ align-items: center;
6421
+ gap: var(--spacing-2);
6422
+ position: relative;
6423
+ width: 160px;
6424
+ }
6425
+
6426
+ /* Radio container */
6427
+ .muka-radio-tile__radio {
6428
+ flex-shrink: 0;
6429
+ }
6430
+
6431
+ /* Corner-positioned radio for vertical */
6432
+ .muka-radio-tile__radio--corner {
6348
6433
  position: absolute;
6349
6434
  top: var(--spacing-4);
6350
6435
  left: var(--spacing-4);
@@ -6443,81 +6528,225 @@ body {
6443
6528
  }
6444
6529
 
6445
6530
 
6446
- /* PullToRefresh */
6447
- /* PullToRefresh Component Styles */
6531
+ /* Radio */
6532
+ /* Radio Component Styles - Using Muka Design Tokens */
6448
6533
 
6449
- .muka-pull-to-refresh {
6534
+ /* Wrapper - clickable label container */
6535
+ .muka-radio {
6536
+ display: inline-flex;
6537
+ align-items: center;
6538
+ gap: var(--spacing-4);
6539
+ cursor: pointer;
6540
+ user-select: none;
6541
+ }
6542
+
6543
+ .muka-radio--disabled {
6544
+ cursor: not-allowed;
6545
+ opacity: 0.6;
6546
+ }
6547
+
6548
+ /* Control container */
6549
+ .muka-radio__control {
6450
6550
  position: relative;
6451
- display: flex;
6452
- flex-direction: column;
6453
- width: 100%;
6454
- height: 100%;
6455
- overflow: hidden;
6551
+ display: inline-flex;
6552
+ align-items: center;
6553
+ justify-content: center;
6554
+ flex-shrink: 0;
6456
6555
  }
6457
6556
 
6458
- .muka-pull-to-refresh__indicator {
6557
+ /* Hidden native input */
6558
+ .muka-radio__input {
6459
6559
  position: absolute;
6460
- top: 0;
6461
- left: 0;
6462
- right: 0;
6463
- display: flex;
6464
- align-items: flex-end;
6465
- justify-content: center;
6466
- padding-bottom: var(--spacing-2);
6467
- color: var(--color-text-subtle-default);
6560
+ width: 1px;
6561
+ height: 1px;
6562
+ padding: 0;
6563
+ margin: -1px;
6468
6564
  overflow: hidden;
6469
- pointer-events: none;
6470
- z-index: 1;
6565
+ clip: rect(0, 0, 0, 0);
6566
+ white-space: nowrap;
6567
+ border: 0;
6471
6568
  }
6472
6569
 
6473
- .muka-pull-to-refresh__chevron {
6474
- display: inline-flex;
6570
+ /* Visual indicator (circle) */
6571
+ .muka-radio__indicator {
6572
+ display: flex;
6475
6573
  align-items: center;
6476
6574
  justify-content: center;
6477
- transition: transform 0.16s ease;
6575
+ width: var(--radio-size-default);
6576
+ height: var(--radio-size-default);
6577
+ border-radius: var(--border-radius-full);
6578
+ background-color: var(--radio-color-default-background);
6579
+ border: var(--border-width-regular) solid var(--radio-color-default-border);
6580
+ transition: all 0.15s ease;
6581
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
6478
6582
  }
6479
6583
 
6480
- .muka-pull-to-refresh__scroller {
6481
- flex: 1 1 auto;
6482
- min-height: 0;
6483
- width: 100%;
6484
- overflow-x: clip;
6485
- overflow-y: auto;
6486
- -webkit-overflow-scrolling: touch;
6487
- overscroll-behavior-y: contain;
6488
- touch-action: pan-y;
6489
- will-change: transform;
6584
+ /* Size variants */
6585
+ .muka-radio--sm .muka-radio__indicator {
6586
+ width: var(--radio-size-sm);
6587
+ height: var(--radio-size-sm);
6490
6588
  }
6491
6589
 
6590
+ .muka-radio--lg .muka-radio__indicator {
6591
+ width: var(--radio-size-lg);
6592
+ height: var(--radio-size-lg);
6593
+ }
6492
6594
 
6493
- /* ProgressTracker */
6494
- /* ProgressTracker Component Styles — Using Muka Design Tokens */
6595
+ /* Inner dot (shown when checked) */
6596
+ .muka-radio__dot {
6597
+ width: var(--radio-dot-size-default);
6598
+ height: var(--radio-dot-size-default);
6599
+ border-radius: var(--border-radius-full);
6600
+ background-color: var(--radio-color-default-dot);
6601
+ transform: scale(0);
6602
+ transition: transform 0.15s ease;
6603
+ }
6495
6604
 
6496
- /* ─── Root ──────────────────────────────────────────────── */
6497
- .muka-progress-tracker {
6498
- width: 100%;
6605
+ .muka-radio--sm .muka-radio__dot {
6606
+ width: var(--radio-dot-size-sm);
6607
+ height: var(--radio-dot-size-sm);
6499
6608
  }
6500
6609
 
6501
- .muka-progress-tracker--horizontal {
6502
- padding-bottom: var(--spacing-7);
6610
+ .muka-radio--lg .muka-radio__dot {
6611
+ width: var(--radio-dot-size-lg);
6612
+ height: var(--radio-dot-size-lg);
6503
6613
  }
6504
6614
 
6505
- /* ─── Track (layered container) ─────────────────────────── */
6506
- .muka-progress-tracker--horizontal .muka-progress-tracker__track {
6507
- position: relative;
6508
- /* Vertical padding = (indicator size - connector height) / 2 = (32 - 4) / 2 = 14px */
6509
- padding-top: 14px;
6510
- padding-bottom: 14px;
6615
+ /* Hover state - removed per design */
6616
+
6617
+ /* Focus state */
6618
+ .muka-radio__input:focus-visible + .muka-radio__indicator {
6619
+ outline: 2px solid var(--color-border-focus);
6620
+ outline-offset: 2px;
6511
6621
  }
6512
6622
 
6513
- /* ─── Steps layer (on top) — horizontal ─────────────────── */
6514
- .muka-progress-tracker--horizontal .muka-progress-tracker__steps {
6515
- position: absolute;
6516
- inset: 0;
6517
- display: flex;
6518
- align-items: flex-start;
6519
- justify-content: space-between;
6520
- z-index: 2;
6623
+ /* Checked state */
6624
+ .muka-radio__input:checked + .muka-radio__indicator {
6625
+ background-color: var(--radio-color-checked-background);
6626
+ border-width: var(--border-width-bold);
6627
+ border-color: var(--radio-color-checked-border);
6628
+ box-shadow: none;
6629
+ }
6630
+
6631
+ .muka-radio__input:checked + .muka-radio__indicator .muka-radio__dot {
6632
+ background-color: var(--radio-color-checked-dot);
6633
+ transform: scale(1);
6634
+ }
6635
+
6636
+ /* Disabled state */
6637
+ .muka-radio--disabled .muka-radio__indicator {
6638
+ background-color: var(--radio-color-disabled-background);
6639
+ border-color: var(--radio-color-disabled-border);
6640
+ box-shadow: none;
6641
+ }
6642
+
6643
+ .muka-radio__input:disabled:checked + .muka-radio__indicator .muka-radio__dot {
6644
+ background-color: var(--radio-color-disabled-dot);
6645
+ }
6646
+
6647
+ /* Label text */
6648
+ .muka-radio__label {
6649
+ font-family: var(--text-label-lg-regular-fontFamily);
6650
+ font-weight: var(--text-label-lg-regular-fontWeight);
6651
+ font-size: var(--text-label-lg-regular-fontSize);
6652
+ line-height: var(--text-label-lg-regular-lineHeight);
6653
+ color: var(--color-text-default-default);
6654
+ }
6655
+
6656
+ .muka-radio--sm .muka-radio__label {
6657
+ font-family: var(--text-label-md-regular-fontFamily);
6658
+ font-weight: var(--text-label-md-regular-fontWeight);
6659
+ font-size: var(--text-label-md-regular-fontSize);
6660
+ line-height: var(--text-label-md-regular-lineHeight);
6661
+ }
6662
+
6663
+ .muka-radio--lg .muka-radio__label {
6664
+ font-family: var(--text-label-xl-regular-fontFamily);
6665
+ font-weight: var(--text-label-xl-regular-fontWeight);
6666
+ font-size: var(--text-label-xl-regular-fontSize);
6667
+ line-height: var(--text-label-xl-regular-lineHeight);
6668
+ }
6669
+
6670
+ .muka-radio--disabled .muka-radio__label {
6671
+ color: var(--color-text-subtle-default);
6672
+ }
6673
+
6674
+
6675
+ /* PullToRefresh */
6676
+ /* PullToRefresh Component Styles */
6677
+
6678
+ .muka-pull-to-refresh {
6679
+ position: relative;
6680
+ display: flex;
6681
+ flex-direction: column;
6682
+ width: 100%;
6683
+ height: 100%;
6684
+ overflow: hidden;
6685
+ }
6686
+
6687
+ .muka-pull-to-refresh__indicator {
6688
+ position: absolute;
6689
+ top: 0;
6690
+ left: 0;
6691
+ right: 0;
6692
+ display: flex;
6693
+ align-items: flex-end;
6694
+ justify-content: center;
6695
+ padding-bottom: var(--spacing-2);
6696
+ color: var(--color-text-subtle-default);
6697
+ overflow: hidden;
6698
+ pointer-events: none;
6699
+ z-index: 1;
6700
+ }
6701
+
6702
+ .muka-pull-to-refresh__chevron {
6703
+ display: inline-flex;
6704
+ align-items: center;
6705
+ justify-content: center;
6706
+ transition: transform 0.16s ease;
6707
+ }
6708
+
6709
+ .muka-pull-to-refresh__scroller {
6710
+ flex: 1 1 auto;
6711
+ min-height: 0;
6712
+ width: 100%;
6713
+ overflow-x: clip;
6714
+ overflow-y: auto;
6715
+ -webkit-overflow-scrolling: touch;
6716
+ overscroll-behavior-y: contain;
6717
+ touch-action: pan-y;
6718
+ will-change: transform;
6719
+ }
6720
+
6721
+
6722
+ /* ProgressTracker */
6723
+ /* ProgressTracker Component Styles — Using Muka Design Tokens */
6724
+
6725
+ /* ─── Root ──────────────────────────────────────────────── */
6726
+ .muka-progress-tracker {
6727
+ width: 100%;
6728
+ }
6729
+
6730
+ .muka-progress-tracker--horizontal {
6731
+ padding-bottom: var(--spacing-7);
6732
+ }
6733
+
6734
+ /* ─── Track (layered container) ─────────────────────────── */
6735
+ .muka-progress-tracker--horizontal .muka-progress-tracker__track {
6736
+ position: relative;
6737
+ /* Vertical padding = (indicator size - connector height) / 2 = (32 - 4) / 2 = 14px */
6738
+ padding-top: 14px;
6739
+ padding-bottom: 14px;
6740
+ }
6741
+
6742
+ /* ─── Steps layer (on top) — horizontal ─────────────────── */
6743
+ .muka-progress-tracker--horizontal .muka-progress-tracker__steps {
6744
+ position: absolute;
6745
+ inset: 0;
6746
+ display: flex;
6747
+ align-items: flex-start;
6748
+ justify-content: space-between;
6749
+ z-index: 2;
6521
6750
  }
6522
6751
 
6523
6752
  /* ─── Individual step — horizontal ──────────────────────── */
@@ -7151,315 +7380,99 @@ body {
7151
7380
  }
7152
7381
 
7153
7382
 
7154
- /* RangeSlider */
7155
- /* RangeSlider Component Styles - Using Muka Design Tokens */
7156
-
7157
- .muka-range-slider {
7158
- display: flex;
7159
- flex-direction: column;
7160
- gap: var(--spacing-1);
7161
- width: 100%;
7162
- }
7383
+ /* Progress */
7384
+ /* Progress Component Styles - Using Muka Design Tokens */
7163
7385
 
7164
7386
  /* ========================================
7165
- HEADER: label group (label + info + optional) and value readout
7387
+ BAR VARIANT
7166
7388
  ======================================== */
7167
7389
 
7168
- .muka-range-slider__header {
7390
+ .muka-progress--bar {
7169
7391
  display: flex;
7170
7392
  align-items: center;
7171
- justify-content: space-between;
7172
7393
  gap: var(--spacing-2);
7173
- min-height: 24px;
7394
+ width: 100%;
7174
7395
  }
7175
7396
 
7176
- .muka-range-slider__label-group {
7177
- display: inline-flex;
7178
- align-items: center;
7179
- gap: var(--spacing-2);
7397
+ .muka-progress--bar .muka-progress__track {
7398
+ flex: 1;
7399
+ background-color: var(--color-surface-level1);
7400
+ border-radius: var(--border-radius-full);
7401
+ overflow: hidden;
7180
7402
  }
7181
7403
 
7182
- .muka-range-slider__label {
7183
- font-family: var(--text-label-md-semibold-fontFamily);
7184
- font-weight: var(--text-label-md-semibold-fontWeight);
7185
- font-size: var(--text-label-md-semibold-fontSize);
7186
- line-height: var(--text-label-md-semibold-lineHeight);
7187
- color: var(--color-text-default-default);
7404
+ .muka-progress--bar.muka-progress--sm .muka-progress__track {
7405
+ height: var(--progress-size-bar-height-sm);
7188
7406
  }
7189
7407
 
7190
- .muka-range-slider__info {
7191
- color: var(--color-text-subtle-default);
7408
+ .muka-progress--bar.muka-progress--md .muka-progress__track {
7409
+ height: var(--progress-size-bar-height-md);
7192
7410
  }
7193
7411
 
7194
- .muka-range-slider__optional {
7195
- font-family: var(--text-label-sm-regular-fontFamily);
7196
- font-weight: var(--text-label-sm-regular-fontWeight);
7197
- font-size: var(--text-label-sm-regular-fontSize);
7198
- line-height: var(--text-label-sm-regular-lineHeight);
7199
- color: var(--color-text-subtle-default);
7412
+ .muka-progress--bar.muka-progress--lg .muka-progress__track {
7413
+ height: var(--progress-size-bar-height-lg);
7200
7414
  }
7201
7415
 
7202
- .muka-range-slider__value {
7203
- font-family: var(--text-label-md-regular-fontFamily);
7204
- font-weight: var(--text-label-md-regular-fontWeight);
7205
- font-size: var(--text-label-md-regular-fontSize);
7206
- line-height: var(--text-label-md-regular-lineHeight);
7416
+ .muka-progress--bar .muka-progress__fill {
7417
+ height: 100%;
7418
+ background-color: var(--color-action-default);
7419
+ border-radius: var(--border-radius-full);
7420
+ transition: width 0.3s ease;
7421
+ }
7422
+
7423
+ .muka-progress--bar .muka-progress__label {
7424
+ flex-shrink: 0;
7425
+ font-family: var(--text-label-sm-semibold-fontFamily);
7426
+ font-weight: var(--text-label-sm-semibold-fontWeight);
7427
+ font-size: var(--text-label-sm-semibold-fontSize);
7428
+ line-height: var(--text-label-sm-semibold-lineHeight);
7207
7429
  color: var(--color-text-default-default);
7208
- font-variant-numeric: tabular-nums;
7430
+ min-width: 3ch;
7431
+ text-align: right;
7209
7432
  }
7210
7433
 
7211
- .muka-range-slider__helper {
7212
- margin: 0;
7213
- font-family: var(--text-body-sm-regular-fontFamily);
7214
- font-weight: var(--text-body-sm-regular-fontWeight);
7215
- font-size: var(--text-body-sm-regular-fontSize);
7216
- line-height: var(--text-body-sm-regular-lineHeight);
7217
- color: var(--color-text-subtle-default);
7434
+ /* Indeterminate animation for bar */
7435
+ .muka-progress--bar.muka-progress--indeterminate .muka-progress__fill {
7436
+ width: 40%;
7437
+ animation: muka-progress-bar-indeterminate 1.5s ease-in-out infinite;
7438
+ }
7439
+
7440
+ @keyframes muka-progress-bar-indeterminate {
7441
+ 0% {
7442
+ transform: translateX(-100%);
7443
+ }
7444
+ 100% {
7445
+ transform: translateX(250%);
7446
+ }
7218
7447
  }
7219
7448
 
7220
7449
  /* ========================================
7221
- TRACK + THUMB
7222
- Native range input, restyled. A thick sunken track holds an accent fill up to
7223
- the current value, with a circular grip handle. The filled portion is driven
7224
- by the inline --muka-range-fill custom property (set from the component value).
7450
+ CIRCLE VARIANT
7225
7451
  ======================================== */
7226
7452
 
7227
- /* Size variants: track height, thumb diameter and grip geometry */
7228
- .muka-range-slider--sm {
7229
- --muka-range-track-h: 12px;
7230
- --muka-range-thumb: 24px;
7231
- --muka-range-grip-h: 9px;
7453
+ .muka-progress--circle {
7454
+ position: relative;
7455
+ display: inline-flex;
7456
+ align-items: center;
7457
+ justify-content: center;
7232
7458
  }
7233
- .muka-range-slider--md {
7234
- --muka-range-track-h: 16px;
7235
- --muka-range-thumb: 32px;
7236
- --muka-range-grip-h: 12px;
7459
+
7460
+ .muka-progress--circle.muka-progress--sm {
7461
+ width: var(--progress-size-circle-diameter-sm);
7462
+ height: var(--progress-size-circle-diameter-sm);
7237
7463
  }
7238
- .muka-range-slider--lg {
7239
- --muka-range-track-h: 20px;
7240
- --muka-range-thumb: 40px;
7241
- --muka-range-grip-h: 15px;
7464
+
7465
+ .muka-progress--circle.muka-progress--md {
7466
+ width: var(--progress-size-circle-diameter-md);
7467
+ height: var(--progress-size-circle-diameter-md);
7242
7468
  }
7243
7469
 
7244
- .muka-range-slider__bar {
7245
- /* Reserve the full thumb height so the handle never clips the layout. */
7246
- display: flex;
7247
- align-items: center;
7248
- height: var(--muka-range-thumb);
7470
+ .muka-progress--circle.muka-progress--lg {
7471
+ width: var(--progress-size-circle-diameter-lg);
7472
+ height: var(--progress-size-circle-diameter-lg);
7249
7473
  }
7250
7474
 
7251
- .muka-range-slider__input {
7252
- -webkit-appearance: none;
7253
- appearance: none;
7254
- width: 100%;
7255
- height: var(--muka-range-thumb);
7256
- margin: 0;
7257
- background: transparent;
7258
- cursor: pointer;
7259
-
7260
- /* Grip handle fill + two vertical grip bars, all theme-aware. */
7261
- --muka-range-grip-color: var(--color-text-subtle-default);
7262
- --muka-range-grip-w: 2px;
7263
- --muka-range-grip-gap: 3px;
7264
-
7265
- /* The track fill: action colour up to the value, sunken surface beyond it. */
7266
- --muka-range-track-fill: linear-gradient(
7267
- to right,
7268
- var(--color-action-default) 0,
7269
- var(--color-action-default) var(--muka-range-fill, 0%),
7270
- var(--color-surface-sunken) var(--muka-range-fill, 0%),
7271
- var(--color-surface-sunken) 100%
7272
- );
7273
- }
7274
-
7275
- .muka-range-slider__input:focus {
7276
- outline: none;
7277
- }
7278
-
7279
- /* WebKit / Blink track */
7280
- .muka-range-slider__input::-webkit-slider-runnable-track {
7281
- height: var(--muka-range-track-h);
7282
- border-radius: var(--border-radius-full);
7283
- background-image: var(--muka-range-track-fill);
7284
- border: 1px solid var(--color-border-contrast);
7285
- box-shadow: var(--shadow-sunken);
7286
- }
7287
-
7288
- /* Firefox track + progress */
7289
- .muka-range-slider__input::-moz-range-track {
7290
- height: var(--muka-range-track-h);
7291
- border-radius: var(--border-radius-full);
7292
- background: var(--color-surface-sunken);
7293
- border: 1px solid var(--color-border-contrast);
7294
- box-shadow: var(--shadow-sunken);
7295
- }
7296
- .muka-range-slider__input::-moz-range-progress {
7297
- height: var(--muka-range-track-h);
7298
- border-radius: var(--border-radius-full);
7299
- background: var(--color-action-default);
7300
- }
7301
-
7302
- /* WebKit / Blink thumb (vertically centred over the track) */
7303
- .muka-range-slider__input::-webkit-slider-thumb {
7304
- -webkit-appearance: none;
7305
- appearance: none;
7306
- width: var(--muka-range-thumb);
7307
- height: var(--muka-range-thumb);
7308
- margin-top: calc((var(--muka-range-track-h) - var(--muka-range-thumb)) / 2);
7309
- border-radius: var(--border-radius-full);
7310
- border: 1px solid var(--color-border-contrast);
7311
- box-shadow: var(--shadow-level2);
7312
- background-color: var(--color-surface-level1);
7313
- background-image:
7314
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
7315
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
7316
- background-repeat: no-repeat;
7317
- background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
7318
- background-position:
7319
- calc(50% - var(--muka-range-grip-gap)) center,
7320
- calc(50% + var(--muka-range-grip-gap)) center;
7321
- transition: box-shadow 0.15s ease, background-color 0.15s ease;
7322
- }
7323
-
7324
- /* Firefox thumb */
7325
- .muka-range-slider__input::-moz-range-thumb {
7326
- width: var(--muka-range-thumb);
7327
- height: var(--muka-range-thumb);
7328
- border-radius: var(--border-radius-full);
7329
- border: 1px solid var(--color-border-contrast);
7330
- box-shadow: var(--shadow-level2);
7331
- background-color: var(--color-surface-level1);
7332
- background-image:
7333
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
7334
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
7335
- background-repeat: no-repeat;
7336
- background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
7337
- background-position:
7338
- calc(50% - var(--muka-range-grip-gap)) center,
7339
- calc(50% + var(--muka-range-grip-gap)) center;
7340
- transition: box-shadow 0.15s ease, background-color 0.15s ease;
7341
- }
7342
-
7343
- /* Hover */
7344
- .muka-range-slider__input:hover::-webkit-slider-thumb {
7345
- background-color: var(--color-surface-level1);
7346
- box-shadow: var(--shadow-level3);
7347
- }
7348
- .muka-range-slider__input:hover::-moz-range-thumb {
7349
- background-color: var(--color-surface-level1);
7350
- box-shadow: var(--shadow-level3);
7351
- }
7352
-
7353
- /* Focus ring */
7354
- .muka-range-slider__input:focus-visible::-webkit-slider-thumb {
7355
- box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
7356
- }
7357
- .muka-range-slider__input:focus-visible::-moz-range-thumb {
7358
- box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
7359
- }
7360
-
7361
- /* Disabled */
7362
- .muka-range-slider--disabled {
7363
- opacity: 0.5;
7364
- }
7365
- .muka-range-slider--disabled .muka-range-slider__input {
7366
- cursor: not-allowed;
7367
- }
7368
-
7369
-
7370
- /* Progress */
7371
- /* Progress Component Styles - Using Muka Design Tokens */
7372
-
7373
- /* ========================================
7374
- BAR VARIANT
7375
- ======================================== */
7376
-
7377
- .muka-progress--bar {
7378
- display: flex;
7379
- align-items: center;
7380
- gap: var(--spacing-2);
7381
- width: 100%;
7382
- }
7383
-
7384
- .muka-progress--bar .muka-progress__track {
7385
- flex: 1;
7386
- background-color: var(--color-surface-level1);
7387
- border-radius: var(--border-radius-full);
7388
- overflow: hidden;
7389
- }
7390
-
7391
- .muka-progress--bar.muka-progress--sm .muka-progress__track {
7392
- height: var(--progress-size-bar-height-sm);
7393
- }
7394
-
7395
- .muka-progress--bar.muka-progress--md .muka-progress__track {
7396
- height: var(--progress-size-bar-height-md);
7397
- }
7398
-
7399
- .muka-progress--bar.muka-progress--lg .muka-progress__track {
7400
- height: var(--progress-size-bar-height-lg);
7401
- }
7402
-
7403
- .muka-progress--bar .muka-progress__fill {
7404
- height: 100%;
7405
- background-color: var(--color-action-default);
7406
- border-radius: var(--border-radius-full);
7407
- transition: width 0.3s ease;
7408
- }
7409
-
7410
- .muka-progress--bar .muka-progress__label {
7411
- flex-shrink: 0;
7412
- font-family: var(--text-label-sm-semibold-fontFamily);
7413
- font-weight: var(--text-label-sm-semibold-fontWeight);
7414
- font-size: var(--text-label-sm-semibold-fontSize);
7415
- line-height: var(--text-label-sm-semibold-lineHeight);
7416
- color: var(--color-text-default-default);
7417
- min-width: 3ch;
7418
- text-align: right;
7419
- }
7420
-
7421
- /* Indeterminate animation for bar */
7422
- .muka-progress--bar.muka-progress--indeterminate .muka-progress__fill {
7423
- width: 40%;
7424
- animation: muka-progress-bar-indeterminate 1.5s ease-in-out infinite;
7425
- }
7426
-
7427
- @keyframes muka-progress-bar-indeterminate {
7428
- 0% {
7429
- transform: translateX(-100%);
7430
- }
7431
- 100% {
7432
- transform: translateX(250%);
7433
- }
7434
- }
7435
-
7436
- /* ========================================
7437
- CIRCLE VARIANT
7438
- ======================================== */
7439
-
7440
- .muka-progress--circle {
7441
- position: relative;
7442
- display: inline-flex;
7443
- align-items: center;
7444
- justify-content: center;
7445
- }
7446
-
7447
- .muka-progress--circle.muka-progress--sm {
7448
- width: var(--progress-size-circle-diameter-sm);
7449
- height: var(--progress-size-circle-diameter-sm);
7450
- }
7451
-
7452
- .muka-progress--circle.muka-progress--md {
7453
- width: var(--progress-size-circle-diameter-md);
7454
- height: var(--progress-size-circle-diameter-md);
7455
- }
7456
-
7457
- .muka-progress--circle.muka-progress--lg {
7458
- width: var(--progress-size-circle-diameter-lg);
7459
- height: var(--progress-size-circle-diameter-lg);
7460
- }
7461
-
7462
- .muka-progress__circle {
7475
+ .muka-progress__circle {
7463
7476
  width: 100%;
7464
7477
  height: 100%;
7465
7478
  transform: rotate(-90deg);
@@ -7610,141 +7623,44 @@ body {
7610
7623
  }
7611
7624
 
7612
7625
 
7613
- /* PriceTag */
7614
- /* PriceTag Component Styles - Using Muka Design Tokens */
7626
+ /* Popover */
7627
+ /* Popover Component Styles */
7615
7628
 
7616
- .muka-price-tag {
7617
- display: flex;
7618
- flex-shrink: 0;
7629
+ .muka-popover__content {
7630
+ background-color: var(--color-surface-level3);
7631
+ border: var(--border-width-regular) solid var(--color-border-default);
7632
+ border-radius: var(--radius-md);
7633
+ padding: var(--spacing-4);
7634
+ box-shadow: var(--shadow-level3);
7635
+ max-width: 20rem;
7636
+ z-index: 50;
7637
+ animation: muka-popover-fade-in 150ms ease;
7619
7638
  }
7620
7639
 
7621
- /* Medium: stacked layout (price on top, unit below) */
7622
- .muka-price-tag--md {
7623
- flex-direction: column;
7624
- align-items: flex-end;
7625
- justify-content: center;
7640
+ @keyframes muka-popover-fade-in {
7641
+ from {
7642
+ opacity: 0;
7643
+ transform: scale(0.96);
7644
+ }
7645
+ to {
7646
+ opacity: 1;
7647
+ transform: scale(1);
7648
+ }
7626
7649
  }
7627
7650
 
7628
- /* Small: inline layout */
7629
- .muka-price-tag--sm {
7630
- flex-direction: row;
7631
- align-items: center;
7632
- gap: 3px;
7651
+ /* Arrow */
7652
+ .muka-popover__arrow {
7653
+ fill: var(--color-surface-level3);
7633
7654
  }
7634
7655
 
7635
- /* Amount row: currency + numbers */
7636
- .muka-price-tag__amount {
7637
- display: flex;
7638
- align-items: flex-start;
7639
- gap: var(--spacing-1);
7640
- }
7641
7656
 
7642
- .muka-price-tag--sm .muka-price-tag__amount {
7657
+ /* PieChart */
7658
+ /* PieChart Component Styles - Using Muka Design Tokens */
7659
+
7660
+ .muka-piechart {
7661
+ display: inline-flex;
7643
7662
  align-items: center;
7644
- }
7645
-
7646
- /* Numbers group: whole + decimal + cents */
7647
- .muka-price-tag__numbers {
7648
- display: flex;
7649
- align-items: baseline;
7650
- }
7651
-
7652
- /* ─── Medium size typography ──────────────────────────── */
7653
-
7654
- .muka-price-tag--md .muka-price-tag__currency {
7655
- font-family: var(--text-subheading-md-fontFamily);
7656
- font-weight: var(--text-subheading-md-fontWeight);
7657
- font-size: var(--text-subheading-md-fontSize);
7658
- line-height: var(--text-label-2xl-bold-lineHeight);
7659
- color: var(--color-text-subtle-default);
7660
- }
7661
-
7662
- .muka-price-tag--md .muka-price-tag__whole {
7663
- font-family: var(--text-label-2xl-bold-fontFamily);
7664
- font-weight: var(--text-label-2xl-bold-fontWeight);
7665
- font-size: var(--text-label-2xl-bold-fontSize);
7666
- line-height: var(--text-label-2xl-bold-lineHeight);
7667
- color: var(--color-text-default-default);
7668
- }
7669
-
7670
- .muka-price-tag--md .muka-price-tag__decimal,
7671
- .muka-price-tag--md .muka-price-tag__cents {
7672
- font-family: var(--text-label-md-bold-fontFamily);
7673
- font-weight: var(--text-label-md-bold-fontWeight);
7674
- font-size: var(--text-label-md-bold-fontSize);
7675
- line-height: var(--text-label-md-bold-lineHeight);
7676
- color: var(--color-text-default-default);
7677
- }
7678
-
7679
- /* ─── Small size typography ───────────────────────────── */
7680
-
7681
- .muka-price-tag--sm .muka-price-tag__currency {
7682
- font-family: var(--text-body-base-regular-fontFamily);
7683
- font-weight: var(--text-body-base-regular-fontWeight);
7684
- font-size: var(--text-body-base-regular-fontSize);
7685
- line-height: var(--text-label-md-bold-lineHeight);
7686
- color: var(--color-text-subtle-default);
7687
- }
7688
-
7689
- .muka-price-tag--sm .muka-price-tag__whole,
7690
- .muka-price-tag--sm .muka-price-tag__decimal,
7691
- .muka-price-tag--sm .muka-price-tag__cents {
7692
- font-family: var(--text-label-md-bold-fontFamily);
7693
- font-weight: var(--text-label-md-bold-fontWeight);
7694
- font-size: var(--text-label-md-bold-fontSize);
7695
- line-height: var(--text-label-md-bold-lineHeight);
7696
- color: var(--color-text-default-default);
7697
- }
7698
-
7699
- /* ─── Unit label (same for both sizes) ────────────────── */
7700
-
7701
- .muka-price-tag__unit {
7702
- font-family: var(--text-body-sm-regular-fontFamily);
7703
- font-weight: var(--text-body-sm-regular-fontWeight);
7704
- font-size: var(--text-body-sm-regular-fontSize);
7705
- line-height: var(--text-body-sm-regular-lineHeight);
7706
- color: var(--color-text-subtle-default);
7707
- }
7708
-
7709
-
7710
- /* Popover */
7711
- /* Popover Component Styles */
7712
-
7713
- .muka-popover__content {
7714
- background-color: var(--color-surface-level3);
7715
- border: var(--border-width-regular) solid var(--color-border-default);
7716
- border-radius: var(--radius-md);
7717
- padding: var(--spacing-4);
7718
- box-shadow: var(--shadow-level3);
7719
- max-width: 20rem;
7720
- z-index: 50;
7721
- animation: muka-popover-fade-in 150ms ease;
7722
- }
7723
-
7724
- @keyframes muka-popover-fade-in {
7725
- from {
7726
- opacity: 0;
7727
- transform: scale(0.96);
7728
- }
7729
- to {
7730
- opacity: 1;
7731
- transform: scale(1);
7732
- }
7733
- }
7734
-
7735
- /* Arrow */
7736
- .muka-popover__arrow {
7737
- fill: var(--color-surface-level3);
7738
- }
7739
-
7740
-
7741
- /* PieChart */
7742
- /* PieChart Component Styles - Using Muka Design Tokens */
7743
-
7744
- .muka-piechart {
7745
- display: inline-flex;
7746
- align-items: center;
7747
- gap: var(--spacing-4);
7663
+ gap: var(--spacing-4);
7748
7664
  }
7749
7665
 
7750
7666
  /* Legend layout */
@@ -7963,6 +7879,133 @@ body {
7963
7879
  }
7964
7880
 
7965
7881
 
7882
+ /* PriceTag */
7883
+ /* PriceTag Component Styles - Using Muka Design Tokens */
7884
+
7885
+ .muka-price-tag {
7886
+ display: flex;
7887
+ flex-shrink: 0;
7888
+ }
7889
+
7890
+ /* Medium: stacked layout (price on top, unit below) */
7891
+ .muka-price-tag--md {
7892
+ flex-direction: column;
7893
+ align-items: flex-end;
7894
+ justify-content: center;
7895
+ }
7896
+
7897
+ /* Small: inline layout */
7898
+ .muka-price-tag--sm {
7899
+ flex-direction: row;
7900
+ align-items: center;
7901
+ gap: 3px;
7902
+ }
7903
+
7904
+ /* Amount row: currency + numbers */
7905
+ .muka-price-tag__amount {
7906
+ display: flex;
7907
+ align-items: flex-start;
7908
+ gap: var(--spacing-1);
7909
+ }
7910
+
7911
+ .muka-price-tag--sm .muka-price-tag__amount {
7912
+ align-items: center;
7913
+ }
7914
+
7915
+ /* Numbers group: whole + decimal + cents */
7916
+ .muka-price-tag__numbers {
7917
+ display: flex;
7918
+ align-items: baseline;
7919
+ }
7920
+
7921
+ /* ─── Medium size typography ──────────────────────────── */
7922
+
7923
+ .muka-price-tag--md .muka-price-tag__currency {
7924
+ font-family: var(--text-subheading-md-fontFamily);
7925
+ font-weight: var(--text-subheading-md-fontWeight);
7926
+ font-size: var(--text-subheading-md-fontSize);
7927
+ line-height: var(--text-label-2xl-bold-lineHeight);
7928
+ color: var(--color-text-subtle-default);
7929
+ }
7930
+
7931
+ .muka-price-tag--md .muka-price-tag__whole {
7932
+ font-family: var(--text-label-2xl-bold-fontFamily);
7933
+ font-weight: var(--text-label-2xl-bold-fontWeight);
7934
+ font-size: var(--text-label-2xl-bold-fontSize);
7935
+ line-height: var(--text-label-2xl-bold-lineHeight);
7936
+ color: var(--color-text-default-default);
7937
+ }
7938
+
7939
+ .muka-price-tag--md .muka-price-tag__decimal,
7940
+ .muka-price-tag--md .muka-price-tag__cents {
7941
+ font-family: var(--text-label-md-bold-fontFamily);
7942
+ font-weight: var(--text-label-md-bold-fontWeight);
7943
+ font-size: var(--text-label-md-bold-fontSize);
7944
+ line-height: var(--text-label-md-bold-lineHeight);
7945
+ color: var(--color-text-default-default);
7946
+ }
7947
+
7948
+ /* ─── Small size typography ───────────────────────────── */
7949
+
7950
+ .muka-price-tag--sm .muka-price-tag__currency {
7951
+ font-family: var(--text-body-base-regular-fontFamily);
7952
+ font-weight: var(--text-body-base-regular-fontWeight);
7953
+ font-size: var(--text-body-base-regular-fontSize);
7954
+ line-height: var(--text-label-md-bold-lineHeight);
7955
+ color: var(--color-text-subtle-default);
7956
+ }
7957
+
7958
+ .muka-price-tag--sm .muka-price-tag__whole,
7959
+ .muka-price-tag--sm .muka-price-tag__decimal,
7960
+ .muka-price-tag--sm .muka-price-tag__cents {
7961
+ font-family: var(--text-label-md-bold-fontFamily);
7962
+ font-weight: var(--text-label-md-bold-fontWeight);
7963
+ font-size: var(--text-label-md-bold-fontSize);
7964
+ line-height: var(--text-label-md-bold-lineHeight);
7965
+ color: var(--color-text-default-default);
7966
+ }
7967
+
7968
+ /* ─── Unit label (same for both sizes) ────────────────── */
7969
+
7970
+ .muka-price-tag__unit {
7971
+ font-family: var(--text-body-sm-regular-fontFamily);
7972
+ font-weight: var(--text-body-sm-regular-fontWeight);
7973
+ font-size: var(--text-body-sm-regular-fontSize);
7974
+ line-height: var(--text-body-sm-regular-lineHeight);
7975
+ color: var(--color-text-subtle-default);
7976
+ }
7977
+
7978
+
7979
+ /* PhotoDraftStrip */
7980
+ /* PhotoDraftStrip Component Styles */
7981
+
7982
+ .muka-photo-draft-strip {
7983
+ display: flex;
7984
+ align-items: center;
7985
+ gap: var(--spacing-3);
7986
+ width: 100%;
7987
+ padding: var(--spacing-2) 0;
7988
+ }
7989
+
7990
+ .muka-photo-draft-strip__track {
7991
+ display: flex;
7992
+ gap: var(--spacing-2);
7993
+ flex: 1 1 auto;
7994
+ min-width: 0;
7995
+ overflow-x: auto;
7996
+ scroll-behavior: smooth;
7997
+ scrollbar-width: none;
7998
+ }
7999
+
8000
+ .muka-photo-draft-strip__track::-webkit-scrollbar {
8001
+ display: none;
8002
+ }
8003
+
8004
+ .muka-photo-draft-strip__item {
8005
+ flex: 0 0 auto;
8006
+ }
8007
+
8008
+
7966
8009
  /* Pagination */
7967
8010
  /* Pagination Component Styles */
7968
8011
 
@@ -8065,51 +8108,21 @@ body {
8065
8108
  }
8066
8109
 
8067
8110
 
8068
- /* PhotoDraftStrip */
8069
- /* PhotoDraftStrip Component Styles */
8111
+ /* NumberInput */
8112
+ /* NumberInput — reuses Input field styles (../Input/Input.css). */
8113
+ /* Only the prefix/suffix affixes are NumberInput-specific. */
8070
8114
 
8071
- .muka-photo-draft-strip {
8072
- display: flex;
8115
+ .muka-numberinput__addon {
8116
+ display: inline-flex;
8073
8117
  align-items: center;
8074
- gap: var(--spacing-3);
8075
- width: 100%;
8076
- padding: var(--spacing-2) 0;
8077
- }
8078
-
8079
- .muka-photo-draft-strip__track {
8080
- display: flex;
8081
- gap: var(--spacing-2);
8082
- flex: 1 1 auto;
8083
- min-width: 0;
8084
- overflow-x: auto;
8085
- scroll-behavior: smooth;
8086
- scrollbar-width: none;
8087
- }
8088
-
8089
- .muka-photo-draft-strip__track::-webkit-scrollbar {
8090
- display: none;
8091
- }
8092
-
8093
- .muka-photo-draft-strip__item {
8094
- flex: 0 0 auto;
8095
- }
8096
-
8097
-
8098
- /* NumberInput */
8099
- /* NumberInput — reuses Input field styles (../Input/Input.css). */
8100
- /* Only the prefix/suffix affixes are NumberInput-specific. */
8101
-
8102
- .muka-numberinput__addon {
8103
- display: inline-flex;
8104
- align-items: center;
8105
- flex: none;
8106
- color: var(--color-text-subtle-default);
8107
- font-family: var(--text-input-md-fontFamily);
8108
- font-size: var(--text-input-md-fontSize);
8109
- line-height: var(--text-input-md-lineHeight);
8110
- user-select: none;
8111
- pointer-events: none;
8112
- white-space: nowrap;
8118
+ flex: none;
8119
+ color: var(--color-text-subtle-default);
8120
+ font-family: var(--text-input-md-fontFamily);
8121
+ font-size: var(--text-input-md-fontSize);
8122
+ line-height: var(--text-input-md-lineHeight);
8123
+ user-select: none;
8124
+ pointer-events: none;
8125
+ white-space: nowrap;
8113
8126
  }
8114
8127
 
8115
8128
  /* Hide the native number spinners — affixes/step API replace them. */
@@ -8125,34 +8138,6 @@ body {
8125
8138
  }
8126
8139
 
8127
8140
 
8128
- /* NavigationTransition */
8129
- /* NavigationTransition Component Styles */
8130
-
8131
- /* ─── Wrapper ────────────────────────────────────────── */
8132
-
8133
- .muka-nav-transition {
8134
- position: relative;
8135
- height: 100vh;
8136
- overflow: hidden;
8137
- }
8138
-
8139
- /* Disable interaction during animation */
8140
- .muka-nav-transition--active {
8141
- pointer-events: none;
8142
- }
8143
-
8144
- /* ─── View slots ─────────────────────────────────────── */
8145
-
8146
- .muka-nav-transition--active .muka-nav-transition__view {
8147
- position: absolute;
8148
- inset: 0;
8149
- }
8150
-
8151
- /* Z-index layering */
8152
- .muka-nav-transition__view--bottom { z-index: 1; }
8153
- .muka-nav-transition__view--top { z-index: 2; }
8154
-
8155
-
8156
8141
  /* Menu */
8157
8142
  /* Menu Component Styles */
8158
8143
 
@@ -8632,6 +8617,220 @@ body {
8632
8617
  }
8633
8618
 
8634
8619
 
8620
+ /* MediaViewer */
8621
+ /* MediaViewer Component Styles - Using Muka Design Tokens */
8622
+
8623
+ /* ─── Native dialog: full viewport ────────────────────── */
8624
+ .muka-media-viewer {
8625
+ position: fixed;
8626
+ inset: 0;
8627
+ width: 100%;
8628
+ height: 100%;
8629
+ max-width: none;
8630
+ max-height: none;
8631
+ margin: 0;
8632
+ padding: 0;
8633
+ border: none;
8634
+ display: flex;
8635
+ flex-direction: column;
8636
+ overflow: hidden;
8637
+ overscroll-behavior: contain;
8638
+ color: var(--color-text-default-default);
8639
+ background-color: var(--color-black-alpha-12);
8640
+ animation: muka-media-viewer-in var(--motion-duration-component) var(--motion-easing-enter);
8641
+ }
8642
+
8643
+ .muka-media-viewer:not([open]) {
8644
+ display: none;
8645
+ }
8646
+
8647
+ .muka-media-viewer::backdrop {
8648
+ background-color: var(--color-black-alpha-12);
8649
+ }
8650
+
8651
+ @keyframes muka-media-viewer-in {
8652
+ from {
8653
+ opacity: 0;
8654
+ }
8655
+ to {
8656
+ opacity: 1;
8657
+ }
8658
+ }
8659
+
8660
+ /* ─── Chrome: TopBar and footer sit on a surface ──────── */
8661
+ .muka-media-viewer__topbar {
8662
+ flex-shrink: 0;
8663
+ background-color: var(--color-surface-level3);
8664
+ }
8665
+
8666
+ .muka-media-viewer__live {
8667
+ position: absolute;
8668
+ width: 1px;
8669
+ height: 1px;
8670
+ padding: 0;
8671
+ margin: -1px;
8672
+ overflow: hidden;
8673
+ clip: rect(0, 0, 0, 0);
8674
+ white-space: nowrap;
8675
+ border: 0;
8676
+ }
8677
+
8678
+ /* ─── Stage: the dark area the images slide across ────── */
8679
+ .muka-media-viewer__stage {
8680
+ position: relative;
8681
+ flex: 1 1 auto;
8682
+ min-height: 0;
8683
+ overflow: hidden;
8684
+ /* Gestures are handled in JS: no browser panning or pinch on the stage. */
8685
+ touch-action: none;
8686
+ user-select: none;
8687
+ -webkit-user-select: none;
8688
+ }
8689
+
8690
+ .muka-media-viewer__slide {
8691
+ position: absolute;
8692
+ inset: 0;
8693
+ display: flex;
8694
+ align-items: center;
8695
+ justify-content: center;
8696
+ padding: var(--spacing-4);
8697
+ transition: transform var(--motion-duration-component) var(--motion-easing-default);
8698
+ will-change: transform;
8699
+ }
8700
+
8701
+ /* While a finger drags, the image follows it without easing. */
8702
+ .muka-media-viewer--dragging .muka-media-viewer__slide {
8703
+ transition: none;
8704
+ }
8705
+
8706
+ .muka-media-viewer__image {
8707
+ display: block;
8708
+ max-width: 100%;
8709
+ max-height: 100%;
8710
+ object-fit: contain;
8711
+ /* The image takes touches, so a long press opens the OS menu (save, share,
8712
+ copy). The swipe still works: pointer events bubble to the stage, and a
8713
+ long press doesn't move far enough to start a drag. */
8714
+ -webkit-touch-callout: default;
8715
+ }
8716
+
8717
+ /* ─── Previous / next: devices that can hover ─────────── */
8718
+ .muka-media-viewer__nav {
8719
+ position: absolute;
8720
+ top: 50%;
8721
+ display: none;
8722
+ transform: translateY(-50%);
8723
+ opacity: 0;
8724
+ transition: opacity var(--motion-duration-micro) var(--motion-easing-enter);
8725
+ }
8726
+
8727
+ .muka-media-viewer__nav--previous {
8728
+ left: var(--spacing-4);
8729
+ }
8730
+
8731
+ .muka-media-viewer__nav--next {
8732
+ right: var(--spacing-4);
8733
+ }
8734
+
8735
+ @media (hover: hover) and (pointer: fine) {
8736
+ .muka-media-viewer__nav {
8737
+ display: block;
8738
+ }
8739
+
8740
+ .muka-media-viewer__stage:hover .muka-media-viewer__nav,
8741
+ .muka-media-viewer__nav:focus-within {
8742
+ opacity: 1;
8743
+ }
8744
+ }
8745
+
8746
+ /* ─── Footer: caption, meta and actions ───────────────── */
8747
+ .muka-media-viewer__footer {
8748
+ flex-shrink: 0;
8749
+ display: flex;
8750
+ flex-direction: column;
8751
+ gap: var(--spacing-3);
8752
+ padding: var(--spacing-4);
8753
+ padding-bottom: calc(var(--spacing-4) + env(safe-area-inset-bottom, 0px));
8754
+ background-color: var(--color-surface-level3);
8755
+ }
8756
+
8757
+ .muka-media-viewer__details {
8758
+ display: flex;
8759
+ align-items: flex-start;
8760
+ justify-content: space-between;
8761
+ gap: var(--spacing-3);
8762
+ }
8763
+
8764
+ .muka-media-viewer__caption {
8765
+ min-width: 0;
8766
+ color: var(--color-text-subtle-default);
8767
+ font-family: var(--text-body-sm-regular-fontFamily);
8768
+ font-size: var(--text-body-sm-regular-fontSize);
8769
+ font-weight: var(--text-body-sm-regular-fontWeight);
8770
+ line-height: var(--text-body-sm-regular-lineHeight);
8771
+ overflow-wrap: anywhere;
8772
+ }
8773
+
8774
+ .muka-media-viewer__meta {
8775
+ flex-shrink: 0;
8776
+ }
8777
+
8778
+ .muka-media-viewer__actions {
8779
+ display: flex;
8780
+ flex-wrap: wrap;
8781
+ gap: var(--spacing-2);
8782
+ }
8783
+
8784
+ /* Mobile: actions stack full width, like Dialog footers. */
8785
+ @media (max-width: 1023px) {
8786
+ .muka-media-viewer__actions {
8787
+ flex-direction: column;
8788
+ }
8789
+
8790
+ .muka-media-viewer__actions > * {
8791
+ width: 100%;
8792
+ }
8793
+ }
8794
+
8795
+ /* ─── Reduced motion ──────────────────────────────────── */
8796
+ @media (prefers-reduced-motion: reduce) {
8797
+ .muka-media-viewer,
8798
+ .muka-media-viewer__slide,
8799
+ .muka-media-viewer__nav {
8800
+ animation: none;
8801
+ transition: none;
8802
+ }
8803
+ }
8804
+
8805
+
8806
+ /* NavigationTransition */
8807
+ /* NavigationTransition Component Styles */
8808
+
8809
+ /* ─── Wrapper ────────────────────────────────────────── */
8810
+
8811
+ .muka-nav-transition {
8812
+ position: relative;
8813
+ height: 100vh;
8814
+ overflow: hidden;
8815
+ }
8816
+
8817
+ /* Disable interaction during animation */
8818
+ .muka-nav-transition--active {
8819
+ pointer-events: none;
8820
+ }
8821
+
8822
+ /* ─── View slots ─────────────────────────────────────── */
8823
+
8824
+ .muka-nav-transition--active .muka-nav-transition__view {
8825
+ position: absolute;
8826
+ inset: 0;
8827
+ }
8828
+
8829
+ /* Z-index layering */
8830
+ .muka-nav-transition__view--bottom { z-index: 1; }
8831
+ .muka-nav-transition__view--top { z-index: 2; }
8832
+
8833
+
8635
8834
  /* ListItem */
8636
8835
  /* ListItem Component Styles - Using Muka Design Tokens */
8637
8836
 
@@ -8826,207 +9025,14 @@ li.muka-listitem {
8826
9025
  }
8827
9026
 
8828
9027
 
8829
- /* LicensePlateInput */
8830
- /* LicensePlateInput — Dutch RDW-style plate input
8831
- *
8832
- * Plate body colors are regulatory (EU/NL) and intentionally fixed:
8833
- * - Plate yellow: #F0CE3D
8834
- * - EU strip blue: #003399
8835
- * - EU stars yellow: #FFCC00
8836
- * - Plate text: #1A1A1A
8837
- *
8838
- * All surrounding UI (label, helper, focus ring, error border) uses Muka tokens.
8839
- */
8840
-
8841
- .muka-license-plate-input {
8842
- --plate-yellow: #f0ce3d;
8843
- --plate-blue: #003399;
8844
- --plate-text: #1a1a1a;
8845
- --plate-stars: #ffcc00;
9028
+ /* Label */
9029
+ /* Label Component Styles - Using Muka Design Tokens */
8846
9030
 
9031
+ .muka-label {
8847
9032
  display: inline-flex;
8848
- flex-direction: column;
8849
- gap: var(--spacing-2);
8850
- }
8851
-
8852
- /* Plate body */
8853
- .muka-license-plate-input__plate {
8854
- display: inline-flex;
8855
- align-items: stretch;
8856
- background-color: var(--plate-yellow);
8857
- border-radius: var(--input-field-radius-md);
8858
- cursor: text;
8859
- position: relative;
8860
- overflow: hidden;
8861
- box-sizing: border-box;
8862
- /* Subtle outline to lift the plate from light backgrounds */
8863
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
8864
- /* Reserve space for the focus / error solid ring without shifting layout */
8865
- outline: 3px solid transparent;
8866
- outline-offset: 2px;
8867
- transition: outline-color 0.15s ease, opacity 0.15s ease;
8868
- }
8869
-
8870
- /* Size variants — plate aspect echoes the real RDW plate (~5:1) */
8871
- .muka-license-plate-input__plate--sm {
8872
- height: 44px;
8873
- min-width: 220px;
8874
- border-radius: var(--input-field-radius-sm);
8875
- }
8876
-
8877
- .muka-license-plate-input__plate--md {
8878
- height: 60px;
8879
- min-width: 300px;
8880
- border-radius: var(--input-field-radius-md);
8881
- }
8882
-
8883
- .muka-license-plate-input__plate--lg {
8884
- height: 80px;
8885
- min-width: 400px;
8886
- border-radius: var(--input-field-radius-lg);
8887
- }
8888
-
8889
- /* Focus — solid outline ring */
8890
- .muka-license-plate-input__plate--focused:not(.muka-license-plate-input__plate--disabled) {
8891
- outline-color: var(--input-field-color-focus-border);
8892
- }
8893
-
8894
- /* Error — solid outline ring in error color */
8895
- .muka-license-plate-input__plate--error:not(.muka-license-plate-input__plate--disabled) {
8896
- outline-color: var(--input-field-color-error-border);
8897
- }
8898
-
8899
- /* Disabled */
8900
- .muka-license-plate-input__plate--disabled {
8901
- cursor: not-allowed;
8902
- opacity: 0.55;
8903
- }
8904
-
8905
- /* EU strip */
8906
- .muka-license-plate-input__eu-strip {
8907
- display: inline-flex;
8908
- flex-direction: column;
8909
- align-items: center;
8910
- justify-content: center;
8911
- background-color: var(--plate-blue);
8912
- color: #ffffff;
8913
- flex-shrink: 0;
8914
- padding: 0 0.4em;
8915
- gap: 0.15em;
8916
- /* Strip width scales with plate height for a consistent ratio */
8917
- width: 14%;
8918
- min-width: 36px;
8919
- }
8920
-
8921
- .muka-license-plate-input__eu-stars {
8922
- width: 60%;
8923
- max-width: 28px;
8924
- aspect-ratio: 1 / 1;
8925
- display: block;
8926
- }
8927
-
8928
- .muka-license-plate-input__plate--sm .muka-license-plate-input__eu-stars {
8929
- max-width: 20px;
8930
- }
8931
-
8932
- .muka-license-plate-input__plate--lg .muka-license-plate-input__eu-stars {
8933
- max-width: 36px;
8934
- }
8935
-
8936
- .muka-license-plate-input__country-code {
8937
- font-family:
8938
- 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
8939
- font-weight: 700;
8940
- letter-spacing: 0.04em;
8941
- line-height: 1;
8942
- color: #ffffff;
8943
- }
8944
-
8945
- .muka-license-plate-input__plate--sm .muka-license-plate-input__country-code {
8946
- font-size: 10px;
8947
- }
8948
-
8949
- .muka-license-plate-input__plate--md .muka-license-plate-input__country-code {
8950
- font-size: 13px;
8951
- }
8952
-
8953
- .muka-license-plate-input__plate--lg .muka-license-plate-input__country-code {
8954
- font-size: 16px;
8955
- }
8956
-
8957
- /* Native input */
8958
- .muka-license-plate-input__native {
8959
- flex: 1;
8960
- min-width: 0;
8961
- border: none;
8962
- outline: none;
8963
- background: transparent;
8964
- color: var(--plate-text);
8965
- text-align: center;
8966
- text-transform: uppercase;
8967
- letter-spacing: 0.06em;
8968
- /* Plate font — bold condensed sans is closest to the FE-Schrift look without
8969
- shipping a custom font. JetBrains Mono is the system mono brand font. */
8970
- font-family:
8971
- 'Arial Narrow', 'Helvetica Neue', Helvetica, Arial, sans-serif;
8972
- font-weight: 800;
8973
- padding: 0 0.5em;
8974
- width: 100%;
8975
- caret-color: var(--plate-text);
8976
- }
8977
-
8978
- .muka-license-plate-input__plate--sm .muka-license-plate-input__native {
8979
- font-size: 22px;
8980
- }
8981
-
8982
- .muka-license-plate-input__plate--md .muka-license-plate-input__native {
8983
- font-size: 30px;
8984
- }
8985
-
8986
- .muka-license-plate-input__plate--lg .muka-license-plate-input__native {
8987
- font-size: 42px;
8988
- }
8989
-
8990
- .muka-license-plate-input__native::placeholder {
8991
- color: var(--plate-text);
8992
- opacity: 0.55;
8993
- font-weight: 700;
8994
- letter-spacing: 0.08em;
8995
- }
8996
-
8997
- .muka-license-plate-input__plate--disabled .muka-license-plate-input__native {
8998
- cursor: not-allowed;
8999
- }
9000
-
9001
- /* Helper text */
9002
- .muka-license-plate-input__helper {
9003
- font-family: var(--text-label-sm-regular-fontFamily);
9004
- font-weight: var(--text-label-sm-regular-fontWeight);
9005
- font-size: var(--text-label-sm-regular-fontSize);
9006
- line-height: var(--text-label-sm-regular-lineHeight);
9007
- color: var(--color-text-subtle-default);
9008
- margin: 0;
9009
- }
9010
-
9011
- /* Error message */
9012
- .muka-license-plate-input__error {
9013
- font-family: var(--text-label-sm-regular-fontFamily);
9014
- font-weight: var(--text-label-sm-regular-fontWeight);
9015
- font-size: var(--text-label-sm-regular-fontSize);
9016
- line-height: var(--text-label-sm-regular-lineHeight);
9017
- color: var(--color-state-error-default);
9018
- margin: 0;
9019
- }
9020
-
9021
-
9022
- /* Label */
9023
- /* Label Component Styles - Using Muka Design Tokens */
9024
-
9025
- .muka-label {
9026
- display: inline-flex;
9027
- align-items: center;
9028
- color: var(--color-text-default-default);
9029
- cursor: pointer;
9033
+ align-items: center;
9034
+ color: var(--color-text-default-default);
9035
+ cursor: pointer;
9030
9036
  }
9031
9037
 
9032
9038
  .muka-label--sm {
@@ -9238,55 +9244,248 @@ li.muka-listitem {
9238
9244
  }
9239
9245
 
9240
9246
 
9241
- /* Input */
9242
- /* Input Component Styles - Using Muka Design Tokens */
9247
+ /* LicensePlateInput */
9248
+ /* LicensePlateInput — Dutch RDW-style plate input
9249
+ *
9250
+ * Plate body colors are regulatory (EU/NL) and intentionally fixed:
9251
+ * - Plate yellow: #F0CE3D
9252
+ * - EU strip blue: #003399
9253
+ * - EU stars yellow: #FFCC00
9254
+ * - Plate text: #1A1A1A
9255
+ *
9256
+ * All surrounding UI (label, helper, focus ring, error border) uses Muka tokens.
9257
+ */
9258
+
9259
+ .muka-license-plate-input {
9260
+ --plate-yellow: #f0ce3d;
9261
+ --plate-blue: #003399;
9262
+ --plate-text: #1a1a1a;
9263
+ --plate-stars: #ffcc00;
9243
9264
 
9244
- /* Wrapper — label, field, helper spacing per Figma */
9245
- .muka-input {
9246
9265
  display: inline-flex;
9247
9266
  flex-direction: column;
9248
9267
  gap: var(--spacing-2);
9249
9268
  }
9250
9269
 
9251
- .muka-input--full-width {
9252
- width: 100%;
9270
+ /* Plate body */
9271
+ .muka-license-plate-input__plate {
9272
+ display: inline-flex;
9273
+ align-items: stretch;
9274
+ background-color: var(--plate-yellow);
9275
+ border-radius: var(--input-field-radius-md);
9276
+ cursor: text;
9277
+ position: relative;
9278
+ overflow: hidden;
9279
+ box-sizing: border-box;
9280
+ /* Subtle outline to lift the plate from light backgrounds */
9281
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
9282
+ /* Reserve space for the focus / error solid ring without shifting layout */
9283
+ outline: 3px solid transparent;
9284
+ outline-offset: 2px;
9285
+ transition: outline-color 0.15s ease, opacity 0.15s ease;
9253
9286
  }
9254
9287
 
9255
- /* Label */
9256
- .muka-input__label {
9257
- color: var(--color-text-default-default);
9258
- cursor: pointer;
9288
+ /* Size variants — plate aspect echoes the real RDW plate (~5:1) */
9289
+ .muka-license-plate-input__plate--sm {
9290
+ height: 44px;
9291
+ min-width: 220px;
9292
+ border-radius: var(--input-field-radius-sm);
9259
9293
  }
9260
9294
 
9261
- .muka-input__label--sm {
9262
- font-family: var(--text-label-sm-semibold-fontFamily);
9263
- font-weight: var(--text-label-sm-semibold-fontWeight);
9264
- font-size: var(--text-label-sm-semibold-fontSize);
9265
- line-height: var(--text-label-sm-semibold-lineHeight);
9295
+ .muka-license-plate-input__plate--md {
9296
+ height: 60px;
9297
+ min-width: 300px;
9298
+ border-radius: var(--input-field-radius-md);
9266
9299
  }
9267
9300
 
9268
- .muka-input__label--md {
9269
- font-family: var(--text-label-md-semibold-fontFamily);
9270
- font-weight: var(--text-label-md-semibold-fontWeight);
9271
- font-size: var(--text-label-md-semibold-fontSize);
9272
- line-height: var(--text-label-md-semibold-lineHeight);
9301
+ .muka-license-plate-input__plate--lg {
9302
+ height: 80px;
9303
+ min-width: 400px;
9304
+ border-radius: var(--input-field-radius-lg);
9273
9305
  }
9274
9306
 
9275
- .muka-input__label--lg {
9276
- font-family: var(--text-label-lg-semibold-fontFamily);
9277
- font-weight: var(--text-label-lg-semibold-fontWeight);
9278
- font-size: var(--text-label-lg-semibold-fontSize);
9279
- line-height: var(--text-label-lg-semibold-lineHeight);
9307
+ /* Focus — solid outline ring */
9308
+ .muka-license-plate-input__plate--focused:not(.muka-license-plate-input__plate--disabled) {
9309
+ outline-color: var(--input-field-color-focus-border);
9280
9310
  }
9281
9311
 
9282
- .muka-input__required {
9283
- color: var(--color-state-error-default);
9312
+ /* Error — solid outline ring in error color */
9313
+ .muka-license-plate-input__plate--error:not(.muka-license-plate-input__plate--disabled) {
9314
+ outline-color: var(--input-field-color-error-border);
9284
9315
  }
9285
9316
 
9286
- .muka-input__label--sm + .muka-input__field--disabled,
9287
- .muka-input__label--md + .muka-input__field--disabled,
9288
- .muka-input__label--lg + .muka-input__field--disabled {
9289
- cursor: not-allowed;
9317
+ /* Disabled */
9318
+ .muka-license-plate-input__plate--disabled {
9319
+ cursor: not-allowed;
9320
+ opacity: 0.55;
9321
+ }
9322
+
9323
+ /* EU strip */
9324
+ .muka-license-plate-input__eu-strip {
9325
+ display: inline-flex;
9326
+ flex-direction: column;
9327
+ align-items: center;
9328
+ justify-content: center;
9329
+ background-color: var(--plate-blue);
9330
+ color: #ffffff;
9331
+ flex-shrink: 0;
9332
+ padding: 0 0.4em;
9333
+ gap: 0.15em;
9334
+ /* Strip width scales with plate height for a consistent ratio */
9335
+ width: 14%;
9336
+ min-width: 36px;
9337
+ }
9338
+
9339
+ .muka-license-plate-input__eu-stars {
9340
+ width: 60%;
9341
+ max-width: 28px;
9342
+ aspect-ratio: 1 / 1;
9343
+ display: block;
9344
+ }
9345
+
9346
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__eu-stars {
9347
+ max-width: 20px;
9348
+ }
9349
+
9350
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__eu-stars {
9351
+ max-width: 36px;
9352
+ }
9353
+
9354
+ .muka-license-plate-input__country-code {
9355
+ font-family:
9356
+ 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
9357
+ font-weight: 700;
9358
+ letter-spacing: 0.04em;
9359
+ line-height: 1;
9360
+ color: #ffffff;
9361
+ }
9362
+
9363
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__country-code {
9364
+ font-size: 10px;
9365
+ }
9366
+
9367
+ .muka-license-plate-input__plate--md .muka-license-plate-input__country-code {
9368
+ font-size: 13px;
9369
+ }
9370
+
9371
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__country-code {
9372
+ font-size: 16px;
9373
+ }
9374
+
9375
+ /* Native input */
9376
+ .muka-license-plate-input__native {
9377
+ flex: 1;
9378
+ min-width: 0;
9379
+ border: none;
9380
+ outline: none;
9381
+ background: transparent;
9382
+ color: var(--plate-text);
9383
+ text-align: center;
9384
+ text-transform: uppercase;
9385
+ letter-spacing: 0.06em;
9386
+ /* Plate font — bold condensed sans is closest to the FE-Schrift look without
9387
+ shipping a custom font. JetBrains Mono is the system mono brand font. */
9388
+ font-family:
9389
+ 'Arial Narrow', 'Helvetica Neue', Helvetica, Arial, sans-serif;
9390
+ font-weight: 800;
9391
+ padding: 0 0.5em;
9392
+ width: 100%;
9393
+ caret-color: var(--plate-text);
9394
+ }
9395
+
9396
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__native {
9397
+ font-size: 22px;
9398
+ }
9399
+
9400
+ .muka-license-plate-input__plate--md .muka-license-plate-input__native {
9401
+ font-size: 30px;
9402
+ }
9403
+
9404
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__native {
9405
+ font-size: 42px;
9406
+ }
9407
+
9408
+ .muka-license-plate-input__native::placeholder {
9409
+ color: var(--plate-text);
9410
+ opacity: 0.55;
9411
+ font-weight: 700;
9412
+ letter-spacing: 0.08em;
9413
+ }
9414
+
9415
+ .muka-license-plate-input__plate--disabled .muka-license-plate-input__native {
9416
+ cursor: not-allowed;
9417
+ }
9418
+
9419
+ /* Helper text */
9420
+ .muka-license-plate-input__helper {
9421
+ font-family: var(--text-label-sm-regular-fontFamily);
9422
+ font-weight: var(--text-label-sm-regular-fontWeight);
9423
+ font-size: var(--text-label-sm-regular-fontSize);
9424
+ line-height: var(--text-label-sm-regular-lineHeight);
9425
+ color: var(--color-text-subtle-default);
9426
+ margin: 0;
9427
+ }
9428
+
9429
+ /* Error message */
9430
+ .muka-license-plate-input__error {
9431
+ font-family: var(--text-label-sm-regular-fontFamily);
9432
+ font-weight: var(--text-label-sm-regular-fontWeight);
9433
+ font-size: var(--text-label-sm-regular-fontSize);
9434
+ line-height: var(--text-label-sm-regular-lineHeight);
9435
+ color: var(--color-state-error-default);
9436
+ margin: 0;
9437
+ }
9438
+
9439
+
9440
+ /* Input */
9441
+ /* Input Component Styles - Using Muka Design Tokens */
9442
+
9443
+ /* Wrapper — label, field, helper spacing per Figma */
9444
+ .muka-input {
9445
+ display: inline-flex;
9446
+ flex-direction: column;
9447
+ gap: var(--spacing-2);
9448
+ }
9449
+
9450
+ .muka-input--full-width {
9451
+ width: 100%;
9452
+ }
9453
+
9454
+ /* Label */
9455
+ .muka-input__label {
9456
+ color: var(--color-text-default-default);
9457
+ cursor: pointer;
9458
+ }
9459
+
9460
+ .muka-input__label--sm {
9461
+ font-family: var(--text-label-sm-semibold-fontFamily);
9462
+ font-weight: var(--text-label-sm-semibold-fontWeight);
9463
+ font-size: var(--text-label-sm-semibold-fontSize);
9464
+ line-height: var(--text-label-sm-semibold-lineHeight);
9465
+ }
9466
+
9467
+ .muka-input__label--md {
9468
+ font-family: var(--text-label-md-semibold-fontFamily);
9469
+ font-weight: var(--text-label-md-semibold-fontWeight);
9470
+ font-size: var(--text-label-md-semibold-fontSize);
9471
+ line-height: var(--text-label-md-semibold-lineHeight);
9472
+ }
9473
+
9474
+ .muka-input__label--lg {
9475
+ font-family: var(--text-label-lg-semibold-fontFamily);
9476
+ font-weight: var(--text-label-lg-semibold-fontWeight);
9477
+ font-size: var(--text-label-lg-semibold-fontSize);
9478
+ line-height: var(--text-label-lg-semibold-lineHeight);
9479
+ }
9480
+
9481
+ .muka-input__required {
9482
+ color: var(--color-state-error-default);
9483
+ }
9484
+
9485
+ .muka-input__label--sm + .muka-input__field--disabled,
9486
+ .muka-input__label--md + .muka-input__field--disabled,
9487
+ .muka-input__label--lg + .muka-input__field--disabled {
9488
+ cursor: not-allowed;
9290
9489
  }
9291
9490
 
9292
9491
  /* Field container — default/hover: 1px border. Radius per Figma (812-10825): input field tokens. */
@@ -9433,6 +9632,9 @@ li.muka-listitem {
9433
9632
  flex-shrink: 0;
9434
9633
  width: var(--size-2xl, 2rem);
9435
9634
  height: var(--size-2xl, 2rem);
9635
+ /* Bleed into the field's vertical padding: keeps the full hit area without
9636
+ making a password or clearable field taller than a plain one. */
9637
+ margin-block: calc(var(--input-field-padding-y) * -1);
9436
9638
  padding: 0;
9437
9639
  border: none;
9438
9640
  background: transparent;
@@ -9440,6 +9642,24 @@ li.muka-listitem {
9440
9642
  cursor: pointer;
9441
9643
  }
9442
9644
 
9645
+ /* The outermost button bleeds into the right padding by the same amount, so
9646
+ its glyph sits as close to the edge as it does to the top and bottom. */
9647
+ .muka-input__clear:last-child,
9648
+ .muka-input__reveal:last-child {
9649
+ margin-inline-end: calc(var(--input-field-padding-y) * -1);
9650
+ }
9651
+
9652
+ /* md: match the right gap to the gap above and below the vertically centred
9653
+ button exactly, i.e. (field height − borders − button) / 2. Holds in the
9654
+ focus/error state too, where border and padding trade 1px. */
9655
+ .muka-input__field--md .muka-input__clear:last-child,
9656
+ .muka-input__field--md .muka-input__reveal:last-child {
9657
+ margin-inline-end: calc(
9658
+ (var(--input-field-height-default) - 2 * var(--border-width-regular) - var(--size-2xl, 2rem)) / 2
9659
+ - var(--input-field-padding-x)
9660
+ );
9661
+ }
9662
+
9443
9663
  .muka-input__field--sm .muka-input__clear,
9444
9664
  .muka-input__field--sm .muka-input__reveal {
9445
9665
  width: var(--size-xl, 1.5rem);
@@ -9498,60 +9718,6 @@ li.muka-listitem {
9498
9718
  }
9499
9719
 
9500
9720
 
9501
- /* Icon */
9502
- /* Icon Component Styles - Using Muka Design Tokens */
9503
-
9504
- .muka-icon {
9505
- display: inline-flex;
9506
- align-items: center;
9507
- justify-content: center;
9508
- flex-shrink: 0;
9509
- color: var(--color-icon-default-default, currentColor);
9510
- }
9511
-
9512
- /* Icons inside buttons should inherit from button's foreground color */
9513
- .muka-button .muka-icon {
9514
- color: inherit;
9515
- }
9516
-
9517
- .muka-icon--subtle {
9518
- color: var(--color-icon-subtle-default);
9519
- }
9520
-
9521
- .muka-icon--muted {
9522
- color: var(--color-icon-muted-default);
9523
- }
9524
-
9525
- .muka-icon--inverse {
9526
- color: var(--color-icon-default-inverse);
9527
- }
9528
-
9529
- .muka-icon--xs {
9530
- width: var(--icon-size-xs);
9531
- height: var(--icon-size-xs);
9532
- }
9533
-
9534
- .muka-icon--sm {
9535
- width: var(--icon-size-sm);
9536
- height: var(--icon-size-sm);
9537
- }
9538
-
9539
- .muka-icon--md {
9540
- width: var(--icon-size-default);
9541
- height: var(--icon-size-default);
9542
- }
9543
-
9544
- .muka-icon--lg {
9545
- width: var(--icon-size-lg);
9546
- height: var(--icon-size-lg);
9547
- }
9548
-
9549
- .muka-icon svg {
9550
- width: 100%;
9551
- height: 100%;
9552
- }
9553
-
9554
-
9555
9721
  /* Form */
9556
9722
  .muka-form {
9557
9723
  display: flex;
@@ -9834,146 +10000,59 @@ li.muka-listitem {
9834
10000
  }
9835
10001
 
9836
10002
 
9837
- /* FAB */
9838
- /* FAB (Floating Action Button) Component Styles */
9839
-
9840
- .muka-fab {
9841
- position: fixed;
9842
- z-index: 40;
10003
+ /* Icon */
10004
+ /* Icon Component Styles - Using Muka Design Tokens */
9843
10005
 
10006
+ .muka-icon {
9844
10007
  display: inline-flex;
9845
10008
  align-items: center;
9846
10009
  justify-content: center;
9847
- gap: var(--spacing-2);
10010
+ flex-shrink: 0;
10011
+ color: var(--color-icon-default-default, currentColor);
10012
+ }
9848
10013
 
9849
- border: none;
9850
- cursor: pointer;
9851
- font-family: inherit;
9852
- box-shadow: var(--shadow-level4);
10014
+ /* Icons inside buttons should inherit from button's foreground color */
10015
+ .muka-button .muka-icon {
10016
+ color: inherit;
10017
+ }
9853
10018
 
9854
- transition: transform 0.12s ease, box-shadow 0.12s ease, background-color 0.12s ease;
9855
- -webkit-tap-highlight-color: transparent;
10019
+ .muka-icon--subtle {
10020
+ color: var(--color-icon-subtle-default);
9856
10021
  }
9857
10022
 
9858
- .muka-fab:active {
9859
- transform: scale(0.96);
9860
- box-shadow: var(--shadow-level3);
9861
- }
9862
-
9863
- .muka-fab:focus-visible {
9864
- outline: 2px solid var(--color-action-default);
9865
- outline-offset: 2px;
9866
- }
9867
-
9868
- .muka-fab:disabled {
9869
- opacity: 0.5;
9870
- cursor: not-allowed;
9871
- box-shadow: none;
9872
- }
9873
-
9874
- /* ─── Variants ────────────────────────────────────────── */
9875
-
9876
- .muka-fab--primary {
9877
- background-color: var(--color-action-default);
9878
- color: var(--color-text-default-inverse);
9879
- }
9880
-
9881
- .muka-fab--primary:hover:not(:disabled) {
9882
- background-color: var(--color-action-hover);
9883
- }
9884
-
9885
- .muka-fab--secondary {
9886
- background-color: var(--color-surface-level3);
9887
- color: var(--color-text-default-default);
9888
- }
9889
-
9890
- .muka-fab--secondary:hover:not(:disabled) {
9891
- background-color: var(--color-surface-level2);
10023
+ .muka-icon--muted {
10024
+ color: var(--color-icon-muted-default);
9892
10025
  }
9893
10026
 
9894
- /* ─── Sizes (circular by default) ─────────────────────── */
9895
-
9896
- .muka-fab--md {
9897
- width: 56px;
9898
- height: 56px;
9899
- border-radius: 50%;
10027
+ .muka-icon--inverse {
10028
+ color: var(--color-icon-default-inverse);
9900
10029
  }
9901
10030
 
9902
- .muka-fab--lg {
9903
- width: 64px;
9904
- height: 64px;
9905
- border-radius: 50%;
10031
+ .muka-icon--xs {
10032
+ width: var(--icon-size-xs);
10033
+ height: var(--icon-size-xs);
9906
10034
  }
9907
10035
 
9908
- /* ─── Extended (pill shape with label) ────────────────── */
9909
-
9910
- .muka-fab--extended {
9911
- width: auto;
9912
- height: auto;
9913
- padding: var(--spacing-3) var(--spacing-4);
9914
- border-radius: var(--radius-full);
10036
+ .muka-icon--sm {
10037
+ width: var(--icon-size-sm);
10038
+ height: var(--icon-size-sm);
9915
10039
  }
9916
10040
 
9917
- .muka-fab--extended.muka-fab--lg {
9918
- padding: var(--spacing-4) var(--spacing-5);
10041
+ .muka-icon--md {
10042
+ width: var(--icon-size-default);
10043
+ height: var(--icon-size-default);
9919
10044
  }
9920
10045
 
9921
- .muka-fab__icon {
9922
- display: inline-flex;
9923
- align-items: center;
9924
- justify-content: center;
9925
- width: 24px;
9926
- height: 24px;
10046
+ .muka-icon--lg {
10047
+ width: var(--icon-size-lg);
10048
+ height: var(--icon-size-lg);
9927
10049
  }
9928
10050
 
9929
- .muka-fab__icon svg {
10051
+ .muka-icon svg {
9930
10052
  width: 100%;
9931
10053
  height: 100%;
9932
10054
  }
9933
10055
 
9934
- .muka-fab__label {
9935
- font-family: var(--text-label-md-semibold-fontFamily);
9936
- font-weight: var(--text-label-md-semibold-fontWeight);
9937
- font-size: var(--text-label-md-semibold-fontSize);
9938
- line-height: var(--text-label-md-semibold-lineHeight);
9939
- }
9940
-
9941
- /* ─── Positioning ─────────────────────────────────────── */
9942
-
9943
- .muka-fab--bottom-right {
9944
- right: var(--spacing-4);
9945
- bottom: var(--spacing-4);
9946
- }
9947
-
9948
- .muka-fab--bottom-left {
9949
- left: var(--spacing-4);
9950
- bottom: var(--spacing-4);
9951
- }
9952
-
9953
- .muka-fab--bottom-center {
9954
- left: 50%;
9955
- bottom: var(--spacing-4);
9956
- transform: translateX(-50%);
9957
- }
9958
-
9959
- .muka-fab--bottom-center:active {
9960
- transform: translateX(-50%) scale(0.96);
9961
- }
9962
-
9963
- /* Add the iOS home-indicator inset to the bottom offset. */
9964
- .muka-fab:not(.muka-fab--no-safe-area) {
9965
- bottom: calc(var(--spacing-4) + env(safe-area-inset-bottom));
9966
- }
9967
-
9968
- /* Lateral safe-area for landscape iPhone with notch. */
9969
- .muka-fab--bottom-right:not(.muka-fab--no-safe-area) {
9970
- right: max(var(--spacing-4), env(safe-area-inset-right));
9971
- }
9972
-
9973
- .muka-fab--bottom-left:not(.muka-fab--no-safe-area) {
9974
- left: max(var(--spacing-4), env(safe-area-inset-left));
9975
- }
9976
-
9977
10056
 
9978
10057
  /* EmptyState */
9979
10058
  /* EmptyState Component Styles - Using Muka Design Tokens */
@@ -10116,125 +10195,266 @@ li.muka-listitem {
10116
10195
  }
10117
10196
 
10118
10197
 
10119
- /* EmojiPicker */
10120
- /* EmojiPicker Component Styles */
10121
-
10122
- .muka-emoji-picker {
10123
- display: grid;
10124
- grid-template-columns: repeat(8, 1fr);
10125
- gap: var(--spacing-1);
10126
- padding: var(--spacing-2);
10127
- max-height: 12rem;
10128
- overflow-y: auto;
10129
- background: var(--color-surface-level2);
10130
- border: var(--border-width-regular, 1px) solid var(--color-border-default);
10131
- border-radius: var(--radius-lg);
10132
- box-shadow: var(--menu-content-shadow, 0 4px 12px rgba(0, 0, 0, 0.12));
10133
- }
10134
-
10135
- .muka-emoji-picker__glyph {
10136
- font-size: 1.25rem;
10137
- line-height: 1;
10138
- }
10139
-
10198
+ /* FAB */
10199
+ /* FAB (Floating Action Button) Component Styles */
10140
10200
 
10141
- /* DropdownSelect */
10142
- /* DropdownSelect — Figma Dropdown Menu form field (Menu + chips) */
10201
+ .muka-fab {
10202
+ position: fixed;
10203
+ z-index: 40;
10143
10204
 
10144
- .muka-dropdown-select {
10145
10205
  display: inline-flex;
10146
- flex-direction: column;
10206
+ align-items: center;
10207
+ justify-content: center;
10147
10208
  gap: var(--spacing-2);
10148
- min-width: 200px;
10149
- }
10150
10209
 
10151
- .muka-dropdown-select--full-width {
10152
- width: 100%;
10210
+ border: none;
10211
+ cursor: pointer;
10212
+ font-family: inherit;
10213
+ box-shadow: var(--shadow-level4);
10214
+
10215
+ transition: transform 0.12s ease, box-shadow 0.12s ease, background-color 0.12s ease;
10216
+ -webkit-tap-highlight-color: transparent;
10153
10217
  }
10154
10218
 
10155
- .muka-dropdown-select__label {
10156
- color: var(--color-text-default-default);
10157
- cursor: pointer;
10219
+ .muka-fab:active {
10220
+ transform: scale(0.96);
10221
+ box-shadow: var(--shadow-level3);
10158
10222
  }
10159
10223
 
10160
- .muka-dropdown-select__label--sm {
10161
- font-family: var(--text-label-sm-semibold-fontFamily);
10162
- font-weight: var(--text-label-sm-semibold-fontWeight);
10163
- font-size: var(--text-label-sm-semibold-fontSize);
10164
- line-height: var(--text-label-sm-semibold-lineHeight);
10224
+ .muka-fab:focus-visible {
10225
+ outline: 2px solid var(--color-action-default);
10226
+ outline-offset: 2px;
10165
10227
  }
10166
10228
 
10167
- .muka-dropdown-select__label--md {
10168
- font-family: var(--text-label-md-semibold-fontFamily);
10169
- font-weight: var(--text-label-md-semibold-fontWeight);
10170
- font-size: var(--text-label-md-semibold-fontSize);
10171
- line-height: var(--text-label-md-semibold-lineHeight);
10229
+ .muka-fab:disabled {
10230
+ opacity: 0.5;
10231
+ cursor: not-allowed;
10232
+ box-shadow: none;
10172
10233
  }
10173
10234
 
10174
- .muka-dropdown-select__label--lg {
10175
- font-family: var(--text-label-lg-semibold-fontFamily);
10176
- font-weight: var(--text-label-lg-semibold-fontWeight);
10177
- font-size: var(--text-label-lg-semibold-fontSize);
10178
- line-height: var(--text-label-lg-semibold-lineHeight);
10235
+ /* ─── Variants ────────────────────────────────────────── */
10236
+
10237
+ .muka-fab--primary {
10238
+ background-color: var(--color-action-default);
10239
+ color: var(--color-text-default-inverse);
10179
10240
  }
10180
10241
 
10181
- .muka-dropdown-select__required {
10182
- color: var(--color-state-error-default);
10242
+ .muka-fab--primary:hover:not(:disabled) {
10243
+ background-color: var(--color-action-hover);
10183
10244
  }
10184
10245
 
10185
- .muka-dropdown-select__field {
10186
- display: flex;
10187
- align-items: center;
10188
- gap: var(--spacing-1);
10189
- width: 100%;
10190
- position: relative;
10191
- box-sizing: border-box;
10192
- background-color: var(--input-field-color-default-background);
10193
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
10194
- border-radius: var(--input-field-radius-lg);
10195
- padding: var(--spacing-2);
10196
- padding-right: calc(var(--spacing-2) + var(--size-2xl, 2rem));
10197
- text-align: left;
10198
- cursor: pointer;
10246
+ .muka-fab--secondary {
10247
+ background-color: var(--color-surface-level3);
10199
10248
  color: var(--color-text-default-default);
10200
- transition: border-color 0.12s ease, background-color 0.12s ease;
10201
- -webkit-tap-highlight-color: transparent;
10202
10249
  }
10203
10250
 
10204
- .muka-dropdown-select__field::after {
10205
- content: '';
10206
- position: absolute;
10207
- inset: 0;
10208
- border-radius: inherit;
10209
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.08);
10210
- pointer-events: none;
10251
+ .muka-fab--secondary:hover:not(:disabled) {
10252
+ background-color: var(--color-surface-level2);
10211
10253
  }
10212
10254
 
10213
- .muka-dropdown-select__field--sm {
10214
- min-height: var(--input-field-height-sm);
10215
- border-radius: var(--input-field-radius-sm);
10216
- padding-right: calc(var(--spacing-2) + var(--size-xl, 1.5rem));
10217
- }
10255
+ /* ─── Sizes (circular by default) ─────────────────────── */
10218
10256
 
10219
- .muka-dropdown-select__field--md {
10220
- min-height: var(--input-field-height-default);
10221
- border-radius: var(--input-field-radius-md);
10257
+ .muka-fab--md {
10258
+ width: 56px;
10259
+ height: 56px;
10260
+ border-radius: 50%;
10222
10261
  }
10223
10262
 
10224
- .muka-dropdown-select__field--lg {
10225
- min-height: var(--input-field-height-lg);
10226
- border-radius: var(--input-field-radius-lg);
10263
+ .muka-fab--lg {
10264
+ width: 64px;
10265
+ height: 64px;
10266
+ border-radius: 50%;
10227
10267
  }
10228
10268
 
10229
- .muka-dropdown-select__field--focused:not(.muka-dropdown-select__field--disabled) {
10230
- border-width: var(--border-width-bold);
10231
- border-color: var(--input-field-color-focus-border);
10232
- background-color: var(--input-field-color-focus-background);
10233
- padding: calc(var(--spacing-2) - 1px);
10234
- padding-right: calc(var(--spacing-2) + var(--size-2xl, 2rem) - 1px);
10235
- }
10269
+ /* ─── Extended (pill shape with label) ────────────────── */
10236
10270
 
10237
- .muka-dropdown-select__field--sm.muka-dropdown-select__field--focused:not(.muka-dropdown-select__field--disabled) {
10271
+ .muka-fab--extended {
10272
+ width: auto;
10273
+ height: auto;
10274
+ padding: var(--spacing-3) var(--spacing-4);
10275
+ border-radius: var(--radius-full);
10276
+ }
10277
+
10278
+ .muka-fab--extended.muka-fab--lg {
10279
+ padding: var(--spacing-4) var(--spacing-5);
10280
+ }
10281
+
10282
+ .muka-fab__icon {
10283
+ display: inline-flex;
10284
+ align-items: center;
10285
+ justify-content: center;
10286
+ width: 24px;
10287
+ height: 24px;
10288
+ }
10289
+
10290
+ .muka-fab__icon svg {
10291
+ width: 100%;
10292
+ height: 100%;
10293
+ }
10294
+
10295
+ .muka-fab__label {
10296
+ font-family: var(--text-label-md-semibold-fontFamily);
10297
+ font-weight: var(--text-label-md-semibold-fontWeight);
10298
+ font-size: var(--text-label-md-semibold-fontSize);
10299
+ line-height: var(--text-label-md-semibold-lineHeight);
10300
+ }
10301
+
10302
+ /* ─── Positioning ─────────────────────────────────────── */
10303
+
10304
+ .muka-fab--bottom-right {
10305
+ right: var(--spacing-4);
10306
+ bottom: var(--spacing-4);
10307
+ }
10308
+
10309
+ .muka-fab--bottom-left {
10310
+ left: var(--spacing-4);
10311
+ bottom: var(--spacing-4);
10312
+ }
10313
+
10314
+ .muka-fab--bottom-center {
10315
+ left: 50%;
10316
+ bottom: var(--spacing-4);
10317
+ transform: translateX(-50%);
10318
+ }
10319
+
10320
+ .muka-fab--bottom-center:active {
10321
+ transform: translateX(-50%) scale(0.96);
10322
+ }
10323
+
10324
+ /* Add the iOS home-indicator inset to the bottom offset. */
10325
+ .muka-fab:not(.muka-fab--no-safe-area) {
10326
+ bottom: calc(var(--spacing-4) + env(safe-area-inset-bottom));
10327
+ }
10328
+
10329
+ /* Lateral safe-area for landscape iPhone with notch. */
10330
+ .muka-fab--bottom-right:not(.muka-fab--no-safe-area) {
10331
+ right: max(var(--spacing-4), env(safe-area-inset-right));
10332
+ }
10333
+
10334
+ .muka-fab--bottom-left:not(.muka-fab--no-safe-area) {
10335
+ left: max(var(--spacing-4), env(safe-area-inset-left));
10336
+ }
10337
+
10338
+
10339
+ /* EmojiPicker */
10340
+ /* EmojiPicker Component Styles */
10341
+
10342
+ .muka-emoji-picker {
10343
+ display: grid;
10344
+ grid-template-columns: repeat(8, 1fr);
10345
+ gap: var(--spacing-1);
10346
+ padding: var(--spacing-2);
10347
+ max-height: 12rem;
10348
+ overflow-y: auto;
10349
+ background: var(--color-surface-level2);
10350
+ border: var(--border-width-regular, 1px) solid var(--color-border-default);
10351
+ border-radius: var(--radius-lg);
10352
+ box-shadow: var(--menu-content-shadow, 0 4px 12px rgba(0, 0, 0, 0.12));
10353
+ }
10354
+
10355
+ .muka-emoji-picker__glyph {
10356
+ font-size: 1.25rem;
10357
+ line-height: 1;
10358
+ }
10359
+
10360
+
10361
+ /* DropdownSelect */
10362
+ /* DropdownSelect — Figma Dropdown Menu form field (Menu + chips) */
10363
+
10364
+ .muka-dropdown-select {
10365
+ display: inline-flex;
10366
+ flex-direction: column;
10367
+ gap: var(--spacing-2);
10368
+ min-width: 200px;
10369
+ }
10370
+
10371
+ .muka-dropdown-select--full-width {
10372
+ width: 100%;
10373
+ }
10374
+
10375
+ .muka-dropdown-select__label {
10376
+ color: var(--color-text-default-default);
10377
+ cursor: pointer;
10378
+ }
10379
+
10380
+ .muka-dropdown-select__label--sm {
10381
+ font-family: var(--text-label-sm-semibold-fontFamily);
10382
+ font-weight: var(--text-label-sm-semibold-fontWeight);
10383
+ font-size: var(--text-label-sm-semibold-fontSize);
10384
+ line-height: var(--text-label-sm-semibold-lineHeight);
10385
+ }
10386
+
10387
+ .muka-dropdown-select__label--md {
10388
+ font-family: var(--text-label-md-semibold-fontFamily);
10389
+ font-weight: var(--text-label-md-semibold-fontWeight);
10390
+ font-size: var(--text-label-md-semibold-fontSize);
10391
+ line-height: var(--text-label-md-semibold-lineHeight);
10392
+ }
10393
+
10394
+ .muka-dropdown-select__label--lg {
10395
+ font-family: var(--text-label-lg-semibold-fontFamily);
10396
+ font-weight: var(--text-label-lg-semibold-fontWeight);
10397
+ font-size: var(--text-label-lg-semibold-fontSize);
10398
+ line-height: var(--text-label-lg-semibold-lineHeight);
10399
+ }
10400
+
10401
+ .muka-dropdown-select__required {
10402
+ color: var(--color-state-error-default);
10403
+ }
10404
+
10405
+ .muka-dropdown-select__field {
10406
+ display: flex;
10407
+ align-items: center;
10408
+ gap: var(--spacing-1);
10409
+ width: 100%;
10410
+ position: relative;
10411
+ box-sizing: border-box;
10412
+ background-color: var(--input-field-color-default-background);
10413
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
10414
+ border-radius: var(--input-field-radius-lg);
10415
+ padding: var(--spacing-2);
10416
+ padding-right: calc(var(--spacing-2) + var(--size-2xl, 2rem));
10417
+ text-align: left;
10418
+ cursor: pointer;
10419
+ color: var(--color-text-default-default);
10420
+ transition: border-color 0.12s ease, background-color 0.12s ease;
10421
+ -webkit-tap-highlight-color: transparent;
10422
+ }
10423
+
10424
+ .muka-dropdown-select__field::after {
10425
+ content: '';
10426
+ position: absolute;
10427
+ inset: 0;
10428
+ border-radius: inherit;
10429
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.08);
10430
+ pointer-events: none;
10431
+ }
10432
+
10433
+ .muka-dropdown-select__field--sm {
10434
+ min-height: var(--input-field-height-sm);
10435
+ border-radius: var(--input-field-radius-sm);
10436
+ padding-right: calc(var(--spacing-2) + var(--size-xl, 1.5rem));
10437
+ }
10438
+
10439
+ .muka-dropdown-select__field--md {
10440
+ min-height: var(--input-field-height-default);
10441
+ border-radius: var(--input-field-radius-md);
10442
+ }
10443
+
10444
+ .muka-dropdown-select__field--lg {
10445
+ min-height: var(--input-field-height-lg);
10446
+ border-radius: var(--input-field-radius-lg);
10447
+ }
10448
+
10449
+ .muka-dropdown-select__field--focused:not(.muka-dropdown-select__field--disabled) {
10450
+ border-width: var(--border-width-bold);
10451
+ border-color: var(--input-field-color-focus-border);
10452
+ background-color: var(--input-field-color-focus-background);
10453
+ padding: calc(var(--spacing-2) - 1px);
10454
+ padding-right: calc(var(--spacing-2) + var(--size-2xl, 2rem) - 1px);
10455
+ }
10456
+
10457
+ .muka-dropdown-select__field--sm.muka-dropdown-select__field--focused:not(.muka-dropdown-select__field--disabled) {
10238
10458
  padding-right: calc(var(--spacing-2) + var(--size-xl, 1.5rem) - 1px);
10239
10459
  }
10240
10460
 
@@ -10522,314 +10742,35 @@ li.muka-listitem {
10522
10742
  }
10523
10743
 
10524
10744
 
10525
- /* DocumentViewer */
10526
- /* DocumentViewer Component Styles - Using Muka Design Tokens */
10745
+ /* Divider */
10746
+ /* Divider Component Styles - Using Muka Design Tokens */
10527
10747
 
10528
- .muka-documentviewer {
10529
- display: flex;
10530
- flex-direction: column;
10531
- background-color: var(--documentviewer-container-background);
10532
- border-radius: var(--documentviewer-container-borderRadius);
10533
- overflow: hidden;
10534
- position: relative;
10748
+ .muka-divider {
10749
+ flex-shrink: 0;
10535
10750
  }
10536
10751
 
10537
- .muka-documentviewer--fullscreen {
10538
- position: fixed;
10539
- top: 0;
10540
- left: 0;
10541
- right: 0;
10542
- bottom: 0;
10543
- width: 100vw;
10544
- height: 100vh;
10545
- z-index: 9999;
10546
- border-radius: 0;
10752
+ .muka-divider--horizontal {
10753
+ width: 100%;
10754
+ height: var(--separator-width);
10547
10755
  }
10548
10756
 
10549
- /* Toolbar */
10550
- .muka-documentviewer__toolbar {
10551
- display: flex;
10552
- align-items: center;
10553
- justify-content: space-between;
10554
- height: var(--documentviewer-toolbar-height);
10555
- padding: var(--documentviewer-toolbar-padding-y) var(--documentviewer-toolbar-padding-x);
10556
- background-color: var(--documentviewer-toolbar-background);
10557
- border-bottom: 1px solid var(--documentviewer-toolbar-border);
10558
- gap: var(--documentviewer-toolbar-gap);
10559
- flex-shrink: 0;
10757
+ .muka-divider--vertical {
10758
+ height: 100%;
10759
+ width: var(--separator-width);
10760
+ align-self: stretch;
10560
10761
  }
10561
10762
 
10562
- .muka-documentviewer__toolbar-section {
10563
- display: flex;
10564
- align-items: center;
10565
- gap: var(--documentviewer-toolbar-gap);
10763
+ .muka-divider--default {
10764
+ background-color: var(--separator-color-default);
10566
10765
  }
10567
10766
 
10568
- .muka-documentviewer__toolbar-section--center {
10569
- flex: 1;
10570
- justify-content: center;
10767
+ .muka-divider--contrast {
10768
+ background-color: var(--separator-color-contrast);
10571
10769
  }
10572
10770
 
10573
- .muka-documentviewer__toolbar-section--end {
10574
- justify-content: flex-end;
10575
- }
10576
10771
 
10577
- /* Page navigation */
10578
- .muka-documentviewer__page-input {
10579
- display: flex;
10580
- align-items: center;
10581
- gap: var(--spacing-1);
10582
- }
10583
-
10584
- .muka-documentviewer__page-number {
10585
- width: 3rem;
10586
- padding: var(--spacing-1) var(--spacing-2);
10587
- text-align: center;
10588
- font-family: var(--alias-font-brand-family);
10589
- font-size: var(--text-label-sm-fontSize);
10590
- line-height: var(--text-label-sm-lineHeight);
10591
- border: 1px solid var(--color-border-default);
10592
- border-radius: var(--border-radius-md);
10593
- background-color: var(--color-surface-level0);
10594
- color: var(--color-text-default-default);
10595
- }
10596
-
10597
- .muka-documentviewer__page-number:focus {
10598
- outline: 2px solid var(--color-border-focus);
10599
- outline-offset: 0;
10600
- border-color: var(--color-border-focus);
10601
- }
10602
-
10603
- .muka-documentviewer__page-total {
10604
- font-family: var(--alias-font-brand-family);
10605
- font-size: var(--text-label-sm-fontSize);
10606
- color: var(--color-text-subtle-default);
10607
- }
10608
-
10609
- /* Zoom controls */
10610
- .muka-documentviewer__zoom-display {
10611
- min-width: var(--documentviewer-zoom-button-width);
10612
- padding: var(--spacing-1) var(--spacing-2);
10613
- font-family: var(--alias-font-brand-family);
10614
- font-size: var(--text-label-sm-fontSize);
10615
- font-weight: var(--alias-font-brand-weight-semibold);
10616
- color: var(--color-text-default-default);
10617
- background: transparent;
10618
- border: none;
10619
- border-radius: var(--border-radius-md);
10620
- cursor: pointer;
10621
- transition: background-color 0.2s ease;
10622
- }
10623
-
10624
- .muka-documentviewer__zoom-display:hover {
10625
- background-color: var(--color-surface-level2);
10626
- }
10627
-
10628
- .muka-documentviewer__zoom-display:focus {
10629
- outline: 2px solid var(--color-border-focus);
10630
- outline-offset: 0;
10631
- }
10632
-
10633
- /* Content area */
10634
- .muka-documentviewer__content {
10635
- display: flex;
10636
- flex: 1;
10637
- overflow: hidden;
10638
- }
10639
-
10640
- .muka-documentviewer__main {
10641
- flex: 1;
10642
- display: flex;
10643
- flex-direction: column;
10644
- overflow: hidden;
10645
- position: relative;
10646
- }
10647
-
10648
- /* Canvas */
10649
- .muka-documentviewer__canvas {
10650
- flex: 1;
10651
- background-color: var(--documentviewer-canvas-background);
10652
- padding: var(--documentviewer-canvas-padding);
10653
- overflow: auto;
10654
- display: flex;
10655
- align-items: flex-start;
10656
- justify-content: center;
10657
- }
10658
-
10659
- .muka-documentviewer__page {
10660
- background-color: var(--documentviewer-page-background);
10661
- box-shadow: var(--documentviewer-page-shadow);
10662
- border-radius: var(--documentviewer-page-borderRadius);
10663
- overflow: hidden;
10664
- }
10665
-
10666
- .muka-documentviewer__page canvas {
10667
- display: block;
10668
- max-width: 100%;
10669
- height: auto;
10670
- }
10671
-
10672
- .muka-documentviewer__page-number {
10673
- text-align: center;
10674
- padding: var(--spacing-2);
10675
- font-family: var(--alias-font-brand-family);
10676
- font-size: var(--text-label-sm-fontSize);
10677
- color: var(--color-text-subtle-default);
10678
- }
10679
-
10680
- /* Thumbnails */
10681
- .muka-documentviewer__thumbnails {
10682
- width: var(--documentviewer-thumbnails-width);
10683
- background-color: var(--documentviewer-thumbnails-background);
10684
- border-right: 1px solid var(--documentviewer-thumbnails-border);
10685
- overflow-y: auto;
10686
- flex-shrink: 0;
10687
- }
10688
-
10689
- .muka-documentviewer__thumbnails-list {
10690
- display: flex;
10691
- flex-direction: column;
10692
- gap: var(--documentviewer-thumbnails-item-gap);
10693
- padding: var(--spacing-2);
10694
- }
10695
-
10696
- .muka-documentviewer__thumbnail-item {
10697
- display: flex;
10698
- flex-direction: column;
10699
- align-items: center;
10700
- gap: var(--spacing-1);
10701
- padding: var(--documentviewer-thumbnails-item-padding);
10702
- border-radius: var(--documentviewer-thumbnails-item-borderRadius);
10703
- border: 2px solid var(--documentviewer-thumbnails-item-border-default);
10704
- background-color: var(--documentviewer-thumbnails-item-background-default);
10705
- cursor: pointer;
10706
- transition: all 0.2s ease;
10707
- width: 100%;
10708
- }
10709
-
10710
- .muka-documentviewer__thumbnail-item:hover {
10711
- background-color: var(--documentviewer-thumbnails-item-background-hover);
10712
- }
10713
-
10714
- .muka-documentviewer__thumbnail-item--selected {
10715
- background-color: var(--documentviewer-thumbnails-item-background-selected);
10716
- border-color: var(--documentviewer-thumbnails-item-border-selected);
10717
- }
10718
-
10719
- .muka-documentviewer__thumbnail-item:focus {
10720
- outline: 2px solid var(--color-border-focus);
10721
- outline-offset: 2px;
10722
- }
10723
-
10724
- .muka-documentviewer__thumbnail-preview {
10725
- width: 100%;
10726
- overflow: hidden;
10727
- border-radius: var(--border-radius-sm);
10728
- }
10729
-
10730
- .muka-documentviewer__thumbnail-preview canvas {
10731
- display: block;
10732
- width: 100%;
10733
- height: auto;
10734
- }
10735
-
10736
- .muka-documentviewer__thumbnail-label {
10737
- font-family: var(--alias-font-brand-family);
10738
- font-size: var(--text-label-xs-regular-fontSize);
10739
- color: var(--color-text-default-default);
10740
- font-weight: var(--alias-font-brand-weight-medium);
10741
- }
10742
-
10743
- /* Loading state */
10744
- .muka-documentviewer__loading {
10745
- display: flex;
10746
- align-items: center;
10747
- justify-content: center;
10748
- flex: 1;
10749
- background-color: var(--documentviewer-loading-overlay-background);
10750
- }
10751
-
10752
- /* Error state */
10753
- .muka-documentviewer__error {
10754
- display: flex;
10755
- align-items: center;
10756
- justify-content: center;
10757
- flex: 1;
10758
- padding: var(--spacing-4);
10759
- background-color: var(--documentviewer-error-background);
10760
- }
10761
-
10762
- /* Accessibility - visually hidden */
10763
- .visually-hidden {
10764
- position: absolute;
10765
- width: 1px;
10766
- height: 1px;
10767
- margin: -1px;
10768
- padding: 0;
10769
- overflow: hidden;
10770
- clip: rect(0, 0, 0, 0);
10771
- white-space: nowrap;
10772
- border-width: 0;
10773
- }
10774
-
10775
- /* React-PDF specific styles */
10776
- .react-pdf__Document {
10777
- display: flex;
10778
- flex-direction: column;
10779
- align-items: center;
10780
- }
10781
-
10782
- .react-pdf__Page {
10783
- max-width: 100%;
10784
- box-shadow: var(--documentviewer-page-shadow);
10785
- border-radius: var(--documentviewer-page-borderRadius);
10786
- overflow: hidden;
10787
- }
10788
-
10789
- .react-pdf__Page__canvas {
10790
- max-width: 100%;
10791
- height: auto !important;
10792
- display: block;
10793
- }
10794
-
10795
- .react-pdf__Page__textContent {
10796
- max-width: 100%;
10797
- }
10798
-
10799
- .react-pdf__Page__annotations {
10800
- max-width: 100%;
10801
- }
10802
-
10803
-
10804
- /* Divider */
10805
- /* Divider Component Styles - Using Muka Design Tokens */
10806
-
10807
- .muka-divider {
10808
- flex-shrink: 0;
10809
- }
10810
-
10811
- .muka-divider--horizontal {
10812
- width: 100%;
10813
- height: var(--separator-width);
10814
- }
10815
-
10816
- .muka-divider--vertical {
10817
- height: 100%;
10818
- width: var(--separator-width);
10819
- align-self: stretch;
10820
- }
10821
-
10822
- .muka-divider--default {
10823
- background-color: var(--separator-color-default);
10824
- }
10825
-
10826
- .muka-divider--contrast {
10827
- background-color: var(--separator-color-contrast);
10828
- }
10829
-
10830
-
10831
- /* Dialog */
10832
- /* Dialog Component Styles */
10772
+ /* Dialog */
10773
+ /* Dialog Component Styles */
10833
10774
 
10834
10775
  /* ─── Native dialog reset ─────────────────────────────── */
10835
10776
 
@@ -10869,6 +10810,7 @@ li.muka-listitem {
10869
10810
  height: 100%;
10870
10811
  max-width: 100vw;
10871
10812
  max-height: 100vh;
10813
+ max-height: 100dvh;
10872
10814
  margin: 0;
10873
10815
  display: flex;
10874
10816
  flex-direction: column;
@@ -10903,6 +10845,8 @@ li.muka-listitem {
10903
10845
 
10904
10846
  .muka-dialog--lg .muka-dialog__surface {
10905
10847
  height: calc(100vh - var(--dialog-margin-top-mobile));
10848
+ /* dvh tracks the visible area as mobile toolbars show and hide */
10849
+ height: calc(100dvh - var(--dialog-margin-top-mobile));
10906
10850
  }
10907
10851
 
10908
10852
  /* Body */
@@ -11096,6 +11040,285 @@ li.muka-listitem {
11096
11040
  }
11097
11041
 
11098
11042
 
11043
+ /* DocumentViewer */
11044
+ /* DocumentViewer Component Styles - Using Muka Design Tokens */
11045
+
11046
+ .muka-documentviewer {
11047
+ display: flex;
11048
+ flex-direction: column;
11049
+ background-color: var(--documentviewer-container-background);
11050
+ border-radius: var(--documentviewer-container-borderRadius);
11051
+ overflow: hidden;
11052
+ position: relative;
11053
+ }
11054
+
11055
+ .muka-documentviewer--fullscreen {
11056
+ position: fixed;
11057
+ top: 0;
11058
+ left: 0;
11059
+ right: 0;
11060
+ bottom: 0;
11061
+ width: 100vw;
11062
+ height: 100vh;
11063
+ z-index: 9999;
11064
+ border-radius: 0;
11065
+ }
11066
+
11067
+ /* Toolbar */
11068
+ .muka-documentviewer__toolbar {
11069
+ display: flex;
11070
+ align-items: center;
11071
+ justify-content: space-between;
11072
+ height: var(--documentviewer-toolbar-height);
11073
+ padding: var(--documentviewer-toolbar-padding-y) var(--documentviewer-toolbar-padding-x);
11074
+ background-color: var(--documentviewer-toolbar-background);
11075
+ border-bottom: 1px solid var(--documentviewer-toolbar-border);
11076
+ gap: var(--documentviewer-toolbar-gap);
11077
+ flex-shrink: 0;
11078
+ }
11079
+
11080
+ .muka-documentviewer__toolbar-section {
11081
+ display: flex;
11082
+ align-items: center;
11083
+ gap: var(--documentviewer-toolbar-gap);
11084
+ }
11085
+
11086
+ .muka-documentviewer__toolbar-section--center {
11087
+ flex: 1;
11088
+ justify-content: center;
11089
+ }
11090
+
11091
+ .muka-documentviewer__toolbar-section--end {
11092
+ justify-content: flex-end;
11093
+ }
11094
+
11095
+ /* Page navigation */
11096
+ .muka-documentviewer__page-input {
11097
+ display: flex;
11098
+ align-items: center;
11099
+ gap: var(--spacing-1);
11100
+ }
11101
+
11102
+ .muka-documentviewer__page-number {
11103
+ width: 3rem;
11104
+ padding: var(--spacing-1) var(--spacing-2);
11105
+ text-align: center;
11106
+ font-family: var(--alias-font-brand-family);
11107
+ font-size: var(--text-label-sm-fontSize);
11108
+ line-height: var(--text-label-sm-lineHeight);
11109
+ border: 1px solid var(--color-border-default);
11110
+ border-radius: var(--border-radius-md);
11111
+ background-color: var(--color-surface-level0);
11112
+ color: var(--color-text-default-default);
11113
+ }
11114
+
11115
+ .muka-documentviewer__page-number:focus {
11116
+ outline: 2px solid var(--color-border-focus);
11117
+ outline-offset: 0;
11118
+ border-color: var(--color-border-focus);
11119
+ }
11120
+
11121
+ .muka-documentviewer__page-total {
11122
+ font-family: var(--alias-font-brand-family);
11123
+ font-size: var(--text-label-sm-fontSize);
11124
+ color: var(--color-text-subtle-default);
11125
+ }
11126
+
11127
+ /* Zoom controls */
11128
+ .muka-documentviewer__zoom-display {
11129
+ min-width: var(--documentviewer-zoom-button-width);
11130
+ padding: var(--spacing-1) var(--spacing-2);
11131
+ font-family: var(--alias-font-brand-family);
11132
+ font-size: var(--text-label-sm-fontSize);
11133
+ font-weight: var(--alias-font-brand-weight-semibold);
11134
+ color: var(--color-text-default-default);
11135
+ background: transparent;
11136
+ border: none;
11137
+ border-radius: var(--border-radius-md);
11138
+ cursor: pointer;
11139
+ transition: background-color 0.2s ease;
11140
+ }
11141
+
11142
+ .muka-documentviewer__zoom-display:hover {
11143
+ background-color: var(--color-surface-level2);
11144
+ }
11145
+
11146
+ .muka-documentviewer__zoom-display:focus {
11147
+ outline: 2px solid var(--color-border-focus);
11148
+ outline-offset: 0;
11149
+ }
11150
+
11151
+ /* Content area */
11152
+ .muka-documentviewer__content {
11153
+ display: flex;
11154
+ flex: 1;
11155
+ overflow: hidden;
11156
+ }
11157
+
11158
+ .muka-documentviewer__main {
11159
+ flex: 1;
11160
+ display: flex;
11161
+ flex-direction: column;
11162
+ overflow: hidden;
11163
+ position: relative;
11164
+ }
11165
+
11166
+ /* Canvas */
11167
+ .muka-documentviewer__canvas {
11168
+ flex: 1;
11169
+ background-color: var(--documentviewer-canvas-background);
11170
+ padding: var(--documentviewer-canvas-padding);
11171
+ overflow: auto;
11172
+ display: flex;
11173
+ align-items: flex-start;
11174
+ justify-content: center;
11175
+ }
11176
+
11177
+ .muka-documentviewer__page {
11178
+ background-color: var(--documentviewer-page-background);
11179
+ box-shadow: var(--documentviewer-page-shadow);
11180
+ border-radius: var(--documentviewer-page-borderRadius);
11181
+ overflow: hidden;
11182
+ }
11183
+
11184
+ .muka-documentviewer__page canvas {
11185
+ display: block;
11186
+ max-width: 100%;
11187
+ height: auto;
11188
+ }
11189
+
11190
+ .muka-documentviewer__page-number {
11191
+ text-align: center;
11192
+ padding: var(--spacing-2);
11193
+ font-family: var(--alias-font-brand-family);
11194
+ font-size: var(--text-label-sm-fontSize);
11195
+ color: var(--color-text-subtle-default);
11196
+ }
11197
+
11198
+ /* Thumbnails */
11199
+ .muka-documentviewer__thumbnails {
11200
+ width: var(--documentviewer-thumbnails-width);
11201
+ background-color: var(--documentviewer-thumbnails-background);
11202
+ border-right: 1px solid var(--documentviewer-thumbnails-border);
11203
+ overflow-y: auto;
11204
+ flex-shrink: 0;
11205
+ }
11206
+
11207
+ .muka-documentviewer__thumbnails-list {
11208
+ display: flex;
11209
+ flex-direction: column;
11210
+ gap: var(--documentviewer-thumbnails-item-gap);
11211
+ padding: var(--spacing-2);
11212
+ }
11213
+
11214
+ .muka-documentviewer__thumbnail-item {
11215
+ display: flex;
11216
+ flex-direction: column;
11217
+ align-items: center;
11218
+ gap: var(--spacing-1);
11219
+ padding: var(--documentviewer-thumbnails-item-padding);
11220
+ border-radius: var(--documentviewer-thumbnails-item-borderRadius);
11221
+ border: 2px solid var(--documentviewer-thumbnails-item-border-default);
11222
+ background-color: var(--documentviewer-thumbnails-item-background-default);
11223
+ cursor: pointer;
11224
+ transition: all 0.2s ease;
11225
+ width: 100%;
11226
+ }
11227
+
11228
+ .muka-documentviewer__thumbnail-item:hover {
11229
+ background-color: var(--documentviewer-thumbnails-item-background-hover);
11230
+ }
11231
+
11232
+ .muka-documentviewer__thumbnail-item--selected {
11233
+ background-color: var(--documentviewer-thumbnails-item-background-selected);
11234
+ border-color: var(--documentviewer-thumbnails-item-border-selected);
11235
+ }
11236
+
11237
+ .muka-documentviewer__thumbnail-item:focus {
11238
+ outline: 2px solid var(--color-border-focus);
11239
+ outline-offset: 2px;
11240
+ }
11241
+
11242
+ .muka-documentviewer__thumbnail-preview {
11243
+ width: 100%;
11244
+ overflow: hidden;
11245
+ border-radius: var(--border-radius-sm);
11246
+ }
11247
+
11248
+ .muka-documentviewer__thumbnail-preview canvas {
11249
+ display: block;
11250
+ width: 100%;
11251
+ height: auto;
11252
+ }
11253
+
11254
+ .muka-documentviewer__thumbnail-label {
11255
+ font-family: var(--alias-font-brand-family);
11256
+ font-size: var(--text-label-xs-regular-fontSize);
11257
+ color: var(--color-text-default-default);
11258
+ font-weight: var(--alias-font-brand-weight-medium);
11259
+ }
11260
+
11261
+ /* Loading state */
11262
+ .muka-documentviewer__loading {
11263
+ display: flex;
11264
+ align-items: center;
11265
+ justify-content: center;
11266
+ flex: 1;
11267
+ background-color: var(--documentviewer-loading-overlay-background);
11268
+ }
11269
+
11270
+ /* Error state */
11271
+ .muka-documentviewer__error {
11272
+ display: flex;
11273
+ align-items: center;
11274
+ justify-content: center;
11275
+ flex: 1;
11276
+ padding: var(--spacing-4);
11277
+ background-color: var(--documentviewer-error-background);
11278
+ }
11279
+
11280
+ /* Accessibility - visually hidden */
11281
+ .visually-hidden {
11282
+ position: absolute;
11283
+ width: 1px;
11284
+ height: 1px;
11285
+ margin: -1px;
11286
+ padding: 0;
11287
+ overflow: hidden;
11288
+ clip: rect(0, 0, 0, 0);
11289
+ white-space: nowrap;
11290
+ border-width: 0;
11291
+ }
11292
+
11293
+ /* React-PDF specific styles */
11294
+ .react-pdf__Document {
11295
+ display: flex;
11296
+ flex-direction: column;
11297
+ align-items: center;
11298
+ }
11299
+
11300
+ .react-pdf__Page {
11301
+ max-width: 100%;
11302
+ box-shadow: var(--documentviewer-page-shadow);
11303
+ border-radius: var(--documentviewer-page-borderRadius);
11304
+ overflow: hidden;
11305
+ }
11306
+
11307
+ .react-pdf__Page__canvas {
11308
+ max-width: 100%;
11309
+ height: auto !important;
11310
+ display: block;
11311
+ }
11312
+
11313
+ .react-pdf__Page__textContent {
11314
+ max-width: 100%;
11315
+ }
11316
+
11317
+ .react-pdf__Page__annotations {
11318
+ max-width: 100%;
11319
+ }
11320
+
11321
+
11099
11322
  /* DatePicker */
11100
11323
  /* DatePicker — compact native date field. */
11101
11324
  /* Field/label/helper styling is inherited from ../Input/Input.css. */
@@ -11648,7 +11871,10 @@ li.muka-listitem {
11648
11871
  fill: none;
11649
11872
  /* Subtle lift on the filled segment, matching the Figma elevation */
11650
11873
  filter: drop-shadow(0 2px 4px var(--color-black-alpha-5, rgba(0, 0, 0, 0.05)));
11651
- transition: stroke-dasharray 0.3s ease;
11874
+ /* Butt caps keep the always-rendered 0% arc invisible (round caps would draw a dot) */
11875
+ stroke-linecap: butt;
11876
+ /* view duration (300ms) reads at the 24px size; tokens zero it for reduced motion */
11877
+ transition: stroke-dasharray var(--motion-duration-view) var(--motion-easing-default);
11652
11878
  }
11653
11879
 
11654
11880
  /* ─── Indeterminate (spinner) ─────────────────────────── */