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