@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
@@ -120,6 +120,8 @@ body {
120
120
  padding: 0;
121
121
  /* Page background uses Muka surface token so it matches theme (e.g. dark for muka-dark, wireframe-dark) */
122
122
  background-color: var(--color-surface-level3);
123
+ /* Default text color so bare text (h1–h6, p, span outside components) follows the theme instead of browser black */
124
+ color: var(--color-text-default-default);
123
125
  }
124
126
 
125
127
 
@@ -3679,6 +3681,17 @@ body {
3679
3681
  height: 120px;
3680
3682
  }
3681
3683
 
3684
+ /* Fluid: fill the parent's width; the shape sets the height via aspect-ratio. */
3685
+ .muka-thumbnail--fluid {
3686
+ width: 100%;
3687
+ height: auto;
3688
+ aspect-ratio: 1 / 1;
3689
+ }
3690
+
3691
+ .muka-thumbnail--fluid.muka-thumbnail--4-3 {
3692
+ aspect-ratio: 4 / 3;
3693
+ }
3694
+
3682
3695
  .muka-thumbnail--ellipse .muka-thumbnail__frame {
3683
3696
  border-radius: var(--border-radius-full);
3684
3697
  }
@@ -6124,195 +6137,267 @@ body {
6124
6137
  }
6125
6138
 
6126
6139
 
6127
- /* Radio */
6128
- /* Radio Component Styles - Using Muka Design Tokens */
6129
-
6130
- /* Wrapper - clickable label container */
6131
- .muka-radio {
6132
- display: inline-flex;
6133
- align-items: center;
6134
- gap: var(--spacing-4);
6135
- cursor: pointer;
6136
- user-select: none;
6137
- }
6138
-
6139
- .muka-radio--disabled {
6140
- cursor: not-allowed;
6141
- opacity: 0.6;
6142
- }
6140
+ /* RangeSlider */
6141
+ /* RangeSlider Component Styles - Using Muka Design Tokens */
6143
6142
 
6144
- /* Control container */
6145
- .muka-radio__control {
6146
- position: relative;
6147
- display: inline-flex;
6148
- align-items: center;
6149
- justify-content: center;
6150
- flex-shrink: 0;
6143
+ .muka-range-slider {
6144
+ display: flex;
6145
+ flex-direction: column;
6146
+ gap: var(--spacing-1);
6147
+ width: 100%;
6151
6148
  }
6152
6149
 
6153
- /* Hidden native input */
6154
- .muka-radio__input {
6155
- position: absolute;
6156
- width: 1px;
6157
- height: 1px;
6158
- padding: 0;
6159
- margin: -1px;
6160
- overflow: hidden;
6161
- clip: rect(0, 0, 0, 0);
6162
- white-space: nowrap;
6163
- border: 0;
6164
- }
6150
+ /* ========================================
6151
+ HEADER: label group (label + info + optional) and value readout
6152
+ ======================================== */
6165
6153
 
6166
- /* Visual indicator (circle) */
6167
- .muka-radio__indicator {
6154
+ .muka-range-slider__header {
6168
6155
  display: flex;
6169
6156
  align-items: center;
6170
- justify-content: center;
6171
- width: var(--radio-size-default);
6172
- height: var(--radio-size-default);
6173
- border-radius: var(--border-radius-full);
6174
- background-color: var(--radio-color-default-background);
6175
- border: var(--border-width-regular) solid var(--radio-color-default-border);
6176
- transition: all 0.15s ease;
6177
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
6178
- }
6179
-
6180
- /* Size variants */
6181
- .muka-radio--sm .muka-radio__indicator {
6182
- width: var(--radio-size-sm);
6183
- height: var(--radio-size-sm);
6184
- }
6185
-
6186
- .muka-radio--lg .muka-radio__indicator {
6187
- width: var(--radio-size-lg);
6188
- height: var(--radio-size-lg);
6189
- }
6190
-
6191
- /* Inner dot (shown when checked) */
6192
- .muka-radio__dot {
6193
- width: var(--radio-dot-size-default);
6194
- height: var(--radio-dot-size-default);
6195
- border-radius: var(--border-radius-full);
6196
- background-color: var(--radio-color-default-dot);
6197
- transform: scale(0);
6198
- transition: transform 0.15s ease;
6199
- }
6200
-
6201
- .muka-radio--sm .muka-radio__dot {
6202
- width: var(--radio-dot-size-sm);
6203
- height: var(--radio-dot-size-sm);
6204
- }
6205
-
6206
- .muka-radio--lg .muka-radio__dot {
6207
- width: var(--radio-dot-size-lg);
6208
- height: var(--radio-dot-size-lg);
6209
- }
6210
-
6211
- /* Hover state - removed per design */
6212
-
6213
- /* Focus state */
6214
- .muka-radio__input:focus-visible + .muka-radio__indicator {
6215
- outline: 2px solid var(--color-border-focus);
6216
- outline-offset: 2px;
6217
- }
6218
-
6219
- /* Checked state */
6220
- .muka-radio__input:checked + .muka-radio__indicator {
6221
- background-color: var(--radio-color-checked-background);
6222
- border-width: var(--border-width-bold);
6223
- border-color: var(--radio-color-checked-border);
6224
- box-shadow: none;
6157
+ justify-content: space-between;
6158
+ gap: var(--spacing-2);
6159
+ min-height: 24px;
6225
6160
  }
6226
6161
 
6227
- .muka-radio__input:checked + .muka-radio__indicator .muka-radio__dot {
6228
- background-color: var(--radio-color-checked-dot);
6229
- transform: scale(1);
6162
+ .muka-range-slider__label-group {
6163
+ display: inline-flex;
6164
+ align-items: center;
6165
+ gap: var(--spacing-2);
6230
6166
  }
6231
6167
 
6232
- /* Disabled state */
6233
- .muka-radio--disabled .muka-radio__indicator {
6234
- background-color: var(--radio-color-disabled-background);
6235
- border-color: var(--radio-color-disabled-border);
6236
- box-shadow: none;
6168
+ .muka-range-slider__label {
6169
+ font-family: var(--text-label-md-semibold-fontFamily);
6170
+ font-weight: var(--text-label-md-semibold-fontWeight);
6171
+ font-size: var(--text-label-md-semibold-fontSize);
6172
+ line-height: var(--text-label-md-semibold-lineHeight);
6173
+ color: var(--color-text-default-default);
6237
6174
  }
6238
6175
 
6239
- .muka-radio__input:disabled:checked + .muka-radio__indicator .muka-radio__dot {
6240
- background-color: var(--radio-color-disabled-dot);
6176
+ .muka-range-slider__info {
6177
+ color: var(--color-text-subtle-default);
6241
6178
  }
6242
6179
 
6243
- /* Label text */
6244
- .muka-radio__label {
6245
- font-family: var(--text-label-lg-regular-fontFamily);
6246
- font-weight: var(--text-label-lg-regular-fontWeight);
6247
- font-size: var(--text-label-lg-regular-fontSize);
6248
- line-height: var(--text-label-lg-regular-lineHeight);
6249
- color: var(--color-text-default-default);
6180
+ .muka-range-slider__optional {
6181
+ font-family: var(--text-label-sm-regular-fontFamily);
6182
+ font-weight: var(--text-label-sm-regular-fontWeight);
6183
+ font-size: var(--text-label-sm-regular-fontSize);
6184
+ line-height: var(--text-label-sm-regular-lineHeight);
6185
+ color: var(--color-text-subtle-default);
6250
6186
  }
6251
6187
 
6252
- .muka-radio--sm .muka-radio__label {
6188
+ .muka-range-slider__value {
6253
6189
  font-family: var(--text-label-md-regular-fontFamily);
6254
6190
  font-weight: var(--text-label-md-regular-fontWeight);
6255
6191
  font-size: var(--text-label-md-regular-fontSize);
6256
6192
  line-height: var(--text-label-md-regular-lineHeight);
6193
+ color: var(--color-text-default-default);
6194
+ font-variant-numeric: tabular-nums;
6257
6195
  }
6258
6196
 
6259
- .muka-radio--lg .muka-radio__label {
6260
- font-family: var(--text-label-xl-regular-fontFamily);
6261
- font-weight: var(--text-label-xl-regular-fontWeight);
6262
- font-size: var(--text-label-xl-regular-fontSize);
6263
- line-height: var(--text-label-xl-regular-lineHeight);
6264
- }
6265
-
6266
- .muka-radio--disabled .muka-radio__label {
6197
+ .muka-range-slider__helper {
6198
+ margin: 0;
6199
+ font-family: var(--text-body-sm-regular-fontFamily);
6200
+ font-weight: var(--text-body-sm-regular-fontWeight);
6201
+ font-size: var(--text-body-sm-regular-fontSize);
6202
+ line-height: var(--text-body-sm-regular-lineHeight);
6267
6203
  color: var(--color-text-subtle-default);
6268
6204
  }
6269
6205
 
6206
+ /* ========================================
6207
+ TRACK + THUMB
6208
+ Native range input, restyled. A thick sunken track holds an accent fill up to
6209
+ the current value, with a circular grip handle. The filled portion is driven
6210
+ by the inline --muka-range-fill custom property (set from the component value).
6211
+ ======================================== */
6270
6212
 
6271
- /* RadioTile */
6272
- /* RadioTile Component Styles - Using Muka Design Tokens */
6213
+ /* Size variants: track height, thumb diameter and grip geometry */
6214
+ .muka-range-slider--sm {
6215
+ --muka-range-track-h: 12px;
6216
+ --muka-range-thumb: 24px;
6217
+ --muka-range-grip-h: 9px;
6218
+ }
6219
+ .muka-range-slider--md {
6220
+ --muka-range-track-h: 16px;
6221
+ --muka-range-thumb: 32px;
6222
+ --muka-range-grip-h: 12px;
6223
+ }
6224
+ .muka-range-slider--lg {
6225
+ --muka-range-track-h: 20px;
6226
+ --muka-range-thumb: 40px;
6227
+ --muka-range-grip-h: 15px;
6228
+ }
6273
6229
 
6274
- /* Base tile styles - horizontal */
6275
- .muka-radio-tile {
6230
+ .muka-range-slider__bar {
6231
+ /* Reserve the full thumb height so the handle never clips the layout. */
6276
6232
  display: flex;
6277
6233
  align-items: center;
6278
- gap: var(--spacing-4);
6279
- padding: var(--spacing-4);
6280
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
6281
- border-radius: var(--input-field-radius-lg);
6282
- background-color: var(--color-surface-level3);
6283
- cursor: pointer;
6284
- transition: border-color 0.15s ease, border-width 0.15s ease;
6285
- overflow: hidden;
6286
- box-sizing: border-box;
6234
+ height: var(--muka-range-thumb);
6287
6235
  }
6288
6236
 
6289
- .muka-radio-tile--disabled {
6290
- cursor: not-allowed;
6291
- opacity: 0.6;
6292
- }
6237
+ .muka-range-slider__input {
6238
+ -webkit-appearance: none;
6239
+ appearance: none;
6240
+ width: 100%;
6241
+ height: var(--muka-range-thumb);
6242
+ margin: 0;
6243
+ background: transparent;
6244
+ cursor: pointer;
6293
6245
 
6294
- /* Selected state */
6295
- .muka-radio-tile[data-checked] {
6296
- border-width: var(--border-width-bold);
6297
- border-color: var(--color-action-default);
6246
+ /* Grip handle fill + two vertical grip bars, all theme-aware. */
6247
+ --muka-range-grip-color: var(--color-text-subtle-default);
6248
+ --muka-range-grip-w: 2px;
6249
+ --muka-range-grip-gap: 3px;
6250
+
6251
+ /* The track fill: action colour up to the value, sunken surface beyond it. */
6252
+ --muka-range-track-fill: linear-gradient(
6253
+ to right,
6254
+ var(--color-action-default) 0,
6255
+ var(--color-action-default) var(--muka-range-fill, 0%),
6256
+ var(--color-surface-sunken) var(--muka-range-fill, 0%),
6257
+ var(--color-surface-sunken) 100%
6258
+ );
6298
6259
  }
6299
6260
 
6300
- /* Vertical layout */
6301
- .muka-radio-tile--vertical {
6302
- flex-direction: column;
6303
- align-items: center;
6304
- gap: var(--spacing-2);
6305
- position: relative;
6306
- width: 160px;
6261
+ .muka-range-slider__input:focus {
6262
+ outline: none;
6307
6263
  }
6308
6264
 
6309
- /* Radio container */
6310
- .muka-radio-tile__radio {
6311
- flex-shrink: 0;
6265
+ /* WebKit / Blink track */
6266
+ .muka-range-slider__input::-webkit-slider-runnable-track {
6267
+ height: var(--muka-range-track-h);
6268
+ border-radius: var(--border-radius-full);
6269
+ background-image: var(--muka-range-track-fill);
6270
+ border: 1px solid var(--color-border-contrast);
6271
+ box-shadow: var(--shadow-sunken);
6312
6272
  }
6313
6273
 
6314
- /* Corner-positioned radio for vertical */
6315
- .muka-radio-tile__radio--corner {
6274
+ /* Firefox track + progress */
6275
+ .muka-range-slider__input::-moz-range-track {
6276
+ height: var(--muka-range-track-h);
6277
+ border-radius: var(--border-radius-full);
6278
+ background: var(--color-surface-sunken);
6279
+ border: 1px solid var(--color-border-contrast);
6280
+ box-shadow: var(--shadow-sunken);
6281
+ }
6282
+ .muka-range-slider__input::-moz-range-progress {
6283
+ height: var(--muka-range-track-h);
6284
+ border-radius: var(--border-radius-full);
6285
+ background: var(--color-action-default);
6286
+ }
6287
+
6288
+ /* WebKit / Blink thumb (vertically centred over the track) */
6289
+ .muka-range-slider__input::-webkit-slider-thumb {
6290
+ -webkit-appearance: none;
6291
+ appearance: none;
6292
+ width: var(--muka-range-thumb);
6293
+ height: var(--muka-range-thumb);
6294
+ margin-top: calc((var(--muka-range-track-h) - var(--muka-range-thumb)) / 2);
6295
+ border-radius: var(--border-radius-full);
6296
+ border: 1px solid var(--color-border-contrast);
6297
+ box-shadow: var(--shadow-level2);
6298
+ background-color: var(--color-surface-level1);
6299
+ background-image:
6300
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
6301
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
6302
+ background-repeat: no-repeat;
6303
+ background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
6304
+ background-position:
6305
+ calc(50% - var(--muka-range-grip-gap)) center,
6306
+ calc(50% + var(--muka-range-grip-gap)) center;
6307
+ transition: box-shadow 0.15s ease, background-color 0.15s ease;
6308
+ }
6309
+
6310
+ /* Firefox thumb */
6311
+ .muka-range-slider__input::-moz-range-thumb {
6312
+ width: var(--muka-range-thumb);
6313
+ height: var(--muka-range-thumb);
6314
+ border-radius: var(--border-radius-full);
6315
+ border: 1px solid var(--color-border-contrast);
6316
+ box-shadow: var(--shadow-level2);
6317
+ background-color: var(--color-surface-level1);
6318
+ background-image:
6319
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
6320
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
6321
+ background-repeat: no-repeat;
6322
+ background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
6323
+ background-position:
6324
+ calc(50% - var(--muka-range-grip-gap)) center,
6325
+ calc(50% + var(--muka-range-grip-gap)) center;
6326
+ transition: box-shadow 0.15s ease, background-color 0.15s ease;
6327
+ }
6328
+
6329
+ /* Hover */
6330
+ .muka-range-slider__input:hover::-webkit-slider-thumb {
6331
+ background-color: var(--color-surface-level1);
6332
+ box-shadow: var(--shadow-level3);
6333
+ }
6334
+ .muka-range-slider__input:hover::-moz-range-thumb {
6335
+ background-color: var(--color-surface-level1);
6336
+ box-shadow: var(--shadow-level3);
6337
+ }
6338
+
6339
+ /* Focus ring */
6340
+ .muka-range-slider__input:focus-visible::-webkit-slider-thumb {
6341
+ box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
6342
+ }
6343
+ .muka-range-slider__input:focus-visible::-moz-range-thumb {
6344
+ box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
6345
+ }
6346
+
6347
+ /* Disabled */
6348
+ .muka-range-slider--disabled {
6349
+ opacity: 0.5;
6350
+ }
6351
+ .muka-range-slider--disabled .muka-range-slider__input {
6352
+ cursor: not-allowed;
6353
+ }
6354
+
6355
+
6356
+ /* RadioTile */
6357
+ /* RadioTile Component Styles - Using Muka Design Tokens */
6358
+
6359
+ /* Base tile styles - horizontal */
6360
+ .muka-radio-tile {
6361
+ display: flex;
6362
+ align-items: center;
6363
+ gap: var(--spacing-4);
6364
+ padding: var(--spacing-4);
6365
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
6366
+ border-radius: var(--input-field-radius-lg);
6367
+ background-color: var(--color-surface-level3);
6368
+ cursor: pointer;
6369
+ transition: border-color 0.15s ease, border-width 0.15s ease;
6370
+ overflow: hidden;
6371
+ box-sizing: border-box;
6372
+ }
6373
+
6374
+ .muka-radio-tile--disabled {
6375
+ cursor: not-allowed;
6376
+ opacity: 0.6;
6377
+ }
6378
+
6379
+ /* Selected state */
6380
+ .muka-radio-tile[data-checked] {
6381
+ border-width: var(--border-width-bold);
6382
+ border-color: var(--color-action-default);
6383
+ }
6384
+
6385
+ /* Vertical layout */
6386
+ .muka-radio-tile--vertical {
6387
+ flex-direction: column;
6388
+ align-items: center;
6389
+ gap: var(--spacing-2);
6390
+ position: relative;
6391
+ width: 160px;
6392
+ }
6393
+
6394
+ /* Radio container */
6395
+ .muka-radio-tile__radio {
6396
+ flex-shrink: 0;
6397
+ }
6398
+
6399
+ /* Corner-positioned radio for vertical */
6400
+ .muka-radio-tile__radio--corner {
6316
6401
  position: absolute;
6317
6402
  top: var(--spacing-4);
6318
6403
  left: var(--spacing-4);
@@ -6411,81 +6496,225 @@ body {
6411
6496
  }
6412
6497
 
6413
6498
 
6414
- /* PullToRefresh */
6415
- /* PullToRefresh Component Styles */
6499
+ /* Radio */
6500
+ /* Radio Component Styles - Using Muka Design Tokens */
6416
6501
 
6417
- .muka-pull-to-refresh {
6502
+ /* Wrapper - clickable label container */
6503
+ .muka-radio {
6504
+ display: inline-flex;
6505
+ align-items: center;
6506
+ gap: var(--spacing-4);
6507
+ cursor: pointer;
6508
+ user-select: none;
6509
+ }
6510
+
6511
+ .muka-radio--disabled {
6512
+ cursor: not-allowed;
6513
+ opacity: 0.6;
6514
+ }
6515
+
6516
+ /* Control container */
6517
+ .muka-radio__control {
6418
6518
  position: relative;
6419
- display: flex;
6420
- flex-direction: column;
6421
- width: 100%;
6422
- height: 100%;
6423
- overflow: hidden;
6519
+ display: inline-flex;
6520
+ align-items: center;
6521
+ justify-content: center;
6522
+ flex-shrink: 0;
6424
6523
  }
6425
6524
 
6426
- .muka-pull-to-refresh__indicator {
6525
+ /* Hidden native input */
6526
+ .muka-radio__input {
6427
6527
  position: absolute;
6428
- top: 0;
6429
- left: 0;
6430
- right: 0;
6431
- display: flex;
6432
- align-items: flex-end;
6433
- justify-content: center;
6434
- padding-bottom: var(--spacing-2);
6435
- color: var(--color-text-subtle-default);
6528
+ width: 1px;
6529
+ height: 1px;
6530
+ padding: 0;
6531
+ margin: -1px;
6436
6532
  overflow: hidden;
6437
- pointer-events: none;
6438
- z-index: 1;
6533
+ clip: rect(0, 0, 0, 0);
6534
+ white-space: nowrap;
6535
+ border: 0;
6439
6536
  }
6440
6537
 
6441
- .muka-pull-to-refresh__chevron {
6442
- display: inline-flex;
6538
+ /* Visual indicator (circle) */
6539
+ .muka-radio__indicator {
6540
+ display: flex;
6443
6541
  align-items: center;
6444
6542
  justify-content: center;
6445
- transition: transform 0.16s ease;
6543
+ width: var(--radio-size-default);
6544
+ height: var(--radio-size-default);
6545
+ border-radius: var(--border-radius-full);
6546
+ background-color: var(--radio-color-default-background);
6547
+ border: var(--border-width-regular) solid var(--radio-color-default-border);
6548
+ transition: all 0.15s ease;
6549
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
6446
6550
  }
6447
6551
 
6448
- .muka-pull-to-refresh__scroller {
6449
- flex: 1 1 auto;
6450
- min-height: 0;
6451
- width: 100%;
6452
- overflow-x: clip;
6453
- overflow-y: auto;
6454
- -webkit-overflow-scrolling: touch;
6455
- overscroll-behavior-y: contain;
6456
- touch-action: pan-y;
6457
- will-change: transform;
6552
+ /* Size variants */
6553
+ .muka-radio--sm .muka-radio__indicator {
6554
+ width: var(--radio-size-sm);
6555
+ height: var(--radio-size-sm);
6458
6556
  }
6459
6557
 
6558
+ .muka-radio--lg .muka-radio__indicator {
6559
+ width: var(--radio-size-lg);
6560
+ height: var(--radio-size-lg);
6561
+ }
6460
6562
 
6461
- /* ProgressTracker */
6462
- /* ProgressTracker Component Styles — Using Muka Design Tokens */
6563
+ /* Inner dot (shown when checked) */
6564
+ .muka-radio__dot {
6565
+ width: var(--radio-dot-size-default);
6566
+ height: var(--radio-dot-size-default);
6567
+ border-radius: var(--border-radius-full);
6568
+ background-color: var(--radio-color-default-dot);
6569
+ transform: scale(0);
6570
+ transition: transform 0.15s ease;
6571
+ }
6463
6572
 
6464
- /* ─── Root ──────────────────────────────────────────────── */
6465
- .muka-progress-tracker {
6466
- width: 100%;
6573
+ .muka-radio--sm .muka-radio__dot {
6574
+ width: var(--radio-dot-size-sm);
6575
+ height: var(--radio-dot-size-sm);
6467
6576
  }
6468
6577
 
6469
- .muka-progress-tracker--horizontal {
6470
- padding-bottom: var(--spacing-7);
6578
+ .muka-radio--lg .muka-radio__dot {
6579
+ width: var(--radio-dot-size-lg);
6580
+ height: var(--radio-dot-size-lg);
6471
6581
  }
6472
6582
 
6473
- /* ─── Track (layered container) ─────────────────────────── */
6474
- .muka-progress-tracker--horizontal .muka-progress-tracker__track {
6475
- position: relative;
6476
- /* Vertical padding = (indicator size - connector height) / 2 = (32 - 4) / 2 = 14px */
6477
- padding-top: 14px;
6478
- padding-bottom: 14px;
6583
+ /* Hover state - removed per design */
6584
+
6585
+ /* Focus state */
6586
+ .muka-radio__input:focus-visible + .muka-radio__indicator {
6587
+ outline: 2px solid var(--color-border-focus);
6588
+ outline-offset: 2px;
6479
6589
  }
6480
6590
 
6481
- /* ─── Steps layer (on top) — horizontal ─────────────────── */
6482
- .muka-progress-tracker--horizontal .muka-progress-tracker__steps {
6483
- position: absolute;
6484
- inset: 0;
6485
- display: flex;
6486
- align-items: flex-start;
6487
- justify-content: space-between;
6488
- z-index: 2;
6591
+ /* Checked state */
6592
+ .muka-radio__input:checked + .muka-radio__indicator {
6593
+ background-color: var(--radio-color-checked-background);
6594
+ border-width: var(--border-width-bold);
6595
+ border-color: var(--radio-color-checked-border);
6596
+ box-shadow: none;
6597
+ }
6598
+
6599
+ .muka-radio__input:checked + .muka-radio__indicator .muka-radio__dot {
6600
+ background-color: var(--radio-color-checked-dot);
6601
+ transform: scale(1);
6602
+ }
6603
+
6604
+ /* Disabled state */
6605
+ .muka-radio--disabled .muka-radio__indicator {
6606
+ background-color: var(--radio-color-disabled-background);
6607
+ border-color: var(--radio-color-disabled-border);
6608
+ box-shadow: none;
6609
+ }
6610
+
6611
+ .muka-radio__input:disabled:checked + .muka-radio__indicator .muka-radio__dot {
6612
+ background-color: var(--radio-color-disabled-dot);
6613
+ }
6614
+
6615
+ /* Label text */
6616
+ .muka-radio__label {
6617
+ font-family: var(--text-label-lg-regular-fontFamily);
6618
+ font-weight: var(--text-label-lg-regular-fontWeight);
6619
+ font-size: var(--text-label-lg-regular-fontSize);
6620
+ line-height: var(--text-label-lg-regular-lineHeight);
6621
+ color: var(--color-text-default-default);
6622
+ }
6623
+
6624
+ .muka-radio--sm .muka-radio__label {
6625
+ font-family: var(--text-label-md-regular-fontFamily);
6626
+ font-weight: var(--text-label-md-regular-fontWeight);
6627
+ font-size: var(--text-label-md-regular-fontSize);
6628
+ line-height: var(--text-label-md-regular-lineHeight);
6629
+ }
6630
+
6631
+ .muka-radio--lg .muka-radio__label {
6632
+ font-family: var(--text-label-xl-regular-fontFamily);
6633
+ font-weight: var(--text-label-xl-regular-fontWeight);
6634
+ font-size: var(--text-label-xl-regular-fontSize);
6635
+ line-height: var(--text-label-xl-regular-lineHeight);
6636
+ }
6637
+
6638
+ .muka-radio--disabled .muka-radio__label {
6639
+ color: var(--color-text-subtle-default);
6640
+ }
6641
+
6642
+
6643
+ /* PullToRefresh */
6644
+ /* PullToRefresh Component Styles */
6645
+
6646
+ .muka-pull-to-refresh {
6647
+ position: relative;
6648
+ display: flex;
6649
+ flex-direction: column;
6650
+ width: 100%;
6651
+ height: 100%;
6652
+ overflow: hidden;
6653
+ }
6654
+
6655
+ .muka-pull-to-refresh__indicator {
6656
+ position: absolute;
6657
+ top: 0;
6658
+ left: 0;
6659
+ right: 0;
6660
+ display: flex;
6661
+ align-items: flex-end;
6662
+ justify-content: center;
6663
+ padding-bottom: var(--spacing-2);
6664
+ color: var(--color-text-subtle-default);
6665
+ overflow: hidden;
6666
+ pointer-events: none;
6667
+ z-index: 1;
6668
+ }
6669
+
6670
+ .muka-pull-to-refresh__chevron {
6671
+ display: inline-flex;
6672
+ align-items: center;
6673
+ justify-content: center;
6674
+ transition: transform 0.16s ease;
6675
+ }
6676
+
6677
+ .muka-pull-to-refresh__scroller {
6678
+ flex: 1 1 auto;
6679
+ min-height: 0;
6680
+ width: 100%;
6681
+ overflow-x: clip;
6682
+ overflow-y: auto;
6683
+ -webkit-overflow-scrolling: touch;
6684
+ overscroll-behavior-y: contain;
6685
+ touch-action: pan-y;
6686
+ will-change: transform;
6687
+ }
6688
+
6689
+
6690
+ /* ProgressTracker */
6691
+ /* ProgressTracker Component Styles — Using Muka Design Tokens */
6692
+
6693
+ /* ─── Root ──────────────────────────────────────────────── */
6694
+ .muka-progress-tracker {
6695
+ width: 100%;
6696
+ }
6697
+
6698
+ .muka-progress-tracker--horizontal {
6699
+ padding-bottom: var(--spacing-7);
6700
+ }
6701
+
6702
+ /* ─── Track (layered container) ─────────────────────────── */
6703
+ .muka-progress-tracker--horizontal .muka-progress-tracker__track {
6704
+ position: relative;
6705
+ /* Vertical padding = (indicator size - connector height) / 2 = (32 - 4) / 2 = 14px */
6706
+ padding-top: 14px;
6707
+ padding-bottom: 14px;
6708
+ }
6709
+
6710
+ /* ─── Steps layer (on top) — horizontal ─────────────────── */
6711
+ .muka-progress-tracker--horizontal .muka-progress-tracker__steps {
6712
+ position: absolute;
6713
+ inset: 0;
6714
+ display: flex;
6715
+ align-items: flex-start;
6716
+ justify-content: space-between;
6717
+ z-index: 2;
6489
6718
  }
6490
6719
 
6491
6720
  /* ─── Individual step — horizontal ──────────────────────── */
@@ -7119,315 +7348,99 @@ body {
7119
7348
  }
7120
7349
 
7121
7350
 
7122
- /* RangeSlider */
7123
- /* RangeSlider Component Styles - Using Muka Design Tokens */
7124
-
7125
- .muka-range-slider {
7126
- display: flex;
7127
- flex-direction: column;
7128
- gap: var(--spacing-1);
7129
- width: 100%;
7130
- }
7351
+ /* Progress */
7352
+ /* Progress Component Styles - Using Muka Design Tokens */
7131
7353
 
7132
7354
  /* ========================================
7133
- HEADER: label group (label + info + optional) and value readout
7355
+ BAR VARIANT
7134
7356
  ======================================== */
7135
7357
 
7136
- .muka-range-slider__header {
7358
+ .muka-progress--bar {
7137
7359
  display: flex;
7138
7360
  align-items: center;
7139
- justify-content: space-between;
7140
7361
  gap: var(--spacing-2);
7141
- min-height: 24px;
7362
+ width: 100%;
7142
7363
  }
7143
7364
 
7144
- .muka-range-slider__label-group {
7145
- display: inline-flex;
7146
- align-items: center;
7147
- gap: var(--spacing-2);
7365
+ .muka-progress--bar .muka-progress__track {
7366
+ flex: 1;
7367
+ background-color: var(--color-surface-level1);
7368
+ border-radius: var(--border-radius-full);
7369
+ overflow: hidden;
7148
7370
  }
7149
7371
 
7150
- .muka-range-slider__label {
7151
- font-family: var(--text-label-md-semibold-fontFamily);
7152
- font-weight: var(--text-label-md-semibold-fontWeight);
7153
- font-size: var(--text-label-md-semibold-fontSize);
7154
- line-height: var(--text-label-md-semibold-lineHeight);
7155
- color: var(--color-text-default-default);
7372
+ .muka-progress--bar.muka-progress--sm .muka-progress__track {
7373
+ height: var(--progress-size-bar-height-sm);
7156
7374
  }
7157
7375
 
7158
- .muka-range-slider__info {
7159
- color: var(--color-text-subtle-default);
7376
+ .muka-progress--bar.muka-progress--md .muka-progress__track {
7377
+ height: var(--progress-size-bar-height-md);
7160
7378
  }
7161
7379
 
7162
- .muka-range-slider__optional {
7163
- font-family: var(--text-label-sm-regular-fontFamily);
7164
- font-weight: var(--text-label-sm-regular-fontWeight);
7165
- font-size: var(--text-label-sm-regular-fontSize);
7166
- line-height: var(--text-label-sm-regular-lineHeight);
7167
- color: var(--color-text-subtle-default);
7380
+ .muka-progress--bar.muka-progress--lg .muka-progress__track {
7381
+ height: var(--progress-size-bar-height-lg);
7168
7382
  }
7169
7383
 
7170
- .muka-range-slider__value {
7171
- font-family: var(--text-label-md-regular-fontFamily);
7172
- font-weight: var(--text-label-md-regular-fontWeight);
7173
- font-size: var(--text-label-md-regular-fontSize);
7174
- line-height: var(--text-label-md-regular-lineHeight);
7384
+ .muka-progress--bar .muka-progress__fill {
7385
+ height: 100%;
7386
+ background-color: var(--color-action-default);
7387
+ border-radius: var(--border-radius-full);
7388
+ transition: width 0.3s ease;
7389
+ }
7390
+
7391
+ .muka-progress--bar .muka-progress__label {
7392
+ flex-shrink: 0;
7393
+ font-family: var(--text-label-sm-semibold-fontFamily);
7394
+ font-weight: var(--text-label-sm-semibold-fontWeight);
7395
+ font-size: var(--text-label-sm-semibold-fontSize);
7396
+ line-height: var(--text-label-sm-semibold-lineHeight);
7175
7397
  color: var(--color-text-default-default);
7176
- font-variant-numeric: tabular-nums;
7398
+ min-width: 3ch;
7399
+ text-align: right;
7177
7400
  }
7178
7401
 
7179
- .muka-range-slider__helper {
7180
- margin: 0;
7181
- font-family: var(--text-body-sm-regular-fontFamily);
7182
- font-weight: var(--text-body-sm-regular-fontWeight);
7183
- font-size: var(--text-body-sm-regular-fontSize);
7184
- line-height: var(--text-body-sm-regular-lineHeight);
7185
- color: var(--color-text-subtle-default);
7402
+ /* Indeterminate animation for bar */
7403
+ .muka-progress--bar.muka-progress--indeterminate .muka-progress__fill {
7404
+ width: 40%;
7405
+ animation: muka-progress-bar-indeterminate 1.5s ease-in-out infinite;
7406
+ }
7407
+
7408
+ @keyframes muka-progress-bar-indeterminate {
7409
+ 0% {
7410
+ transform: translateX(-100%);
7411
+ }
7412
+ 100% {
7413
+ transform: translateX(250%);
7414
+ }
7186
7415
  }
7187
7416
 
7188
7417
  /* ========================================
7189
- TRACK + THUMB
7190
- Native range input, restyled. A thick sunken track holds an accent fill up to
7191
- the current value, with a circular grip handle. The filled portion is driven
7192
- by the inline --muka-range-fill custom property (set from the component value).
7418
+ CIRCLE VARIANT
7193
7419
  ======================================== */
7194
7420
 
7195
- /* Size variants: track height, thumb diameter and grip geometry */
7196
- .muka-range-slider--sm {
7197
- --muka-range-track-h: 12px;
7198
- --muka-range-thumb: 24px;
7199
- --muka-range-grip-h: 9px;
7421
+ .muka-progress--circle {
7422
+ position: relative;
7423
+ display: inline-flex;
7424
+ align-items: center;
7425
+ justify-content: center;
7200
7426
  }
7201
- .muka-range-slider--md {
7202
- --muka-range-track-h: 16px;
7203
- --muka-range-thumb: 32px;
7204
- --muka-range-grip-h: 12px;
7427
+
7428
+ .muka-progress--circle.muka-progress--sm {
7429
+ width: var(--progress-size-circle-diameter-sm);
7430
+ height: var(--progress-size-circle-diameter-sm);
7205
7431
  }
7206
- .muka-range-slider--lg {
7207
- --muka-range-track-h: 20px;
7208
- --muka-range-thumb: 40px;
7209
- --muka-range-grip-h: 15px;
7432
+
7433
+ .muka-progress--circle.muka-progress--md {
7434
+ width: var(--progress-size-circle-diameter-md);
7435
+ height: var(--progress-size-circle-diameter-md);
7210
7436
  }
7211
7437
 
7212
- .muka-range-slider__bar {
7213
- /* Reserve the full thumb height so the handle never clips the layout. */
7214
- display: flex;
7215
- align-items: center;
7216
- height: var(--muka-range-thumb);
7438
+ .muka-progress--circle.muka-progress--lg {
7439
+ width: var(--progress-size-circle-diameter-lg);
7440
+ height: var(--progress-size-circle-diameter-lg);
7217
7441
  }
7218
7442
 
7219
- .muka-range-slider__input {
7220
- -webkit-appearance: none;
7221
- appearance: none;
7222
- width: 100%;
7223
- height: var(--muka-range-thumb);
7224
- margin: 0;
7225
- background: transparent;
7226
- cursor: pointer;
7227
-
7228
- /* Grip handle fill + two vertical grip bars, all theme-aware. */
7229
- --muka-range-grip-color: var(--color-text-subtle-default);
7230
- --muka-range-grip-w: 2px;
7231
- --muka-range-grip-gap: 3px;
7232
-
7233
- /* The track fill: action colour up to the value, sunken surface beyond it. */
7234
- --muka-range-track-fill: linear-gradient(
7235
- to right,
7236
- var(--color-action-default) 0,
7237
- var(--color-action-default) var(--muka-range-fill, 0%),
7238
- var(--color-surface-sunken) var(--muka-range-fill, 0%),
7239
- var(--color-surface-sunken) 100%
7240
- );
7241
- }
7242
-
7243
- .muka-range-slider__input:focus {
7244
- outline: none;
7245
- }
7246
-
7247
- /* WebKit / Blink track */
7248
- .muka-range-slider__input::-webkit-slider-runnable-track {
7249
- height: var(--muka-range-track-h);
7250
- border-radius: var(--border-radius-full);
7251
- background-image: var(--muka-range-track-fill);
7252
- border: 1px solid var(--color-border-contrast);
7253
- box-shadow: var(--shadow-sunken);
7254
- }
7255
-
7256
- /* Firefox track + progress */
7257
- .muka-range-slider__input::-moz-range-track {
7258
- height: var(--muka-range-track-h);
7259
- border-radius: var(--border-radius-full);
7260
- background: var(--color-surface-sunken);
7261
- border: 1px solid var(--color-border-contrast);
7262
- box-shadow: var(--shadow-sunken);
7263
- }
7264
- .muka-range-slider__input::-moz-range-progress {
7265
- height: var(--muka-range-track-h);
7266
- border-radius: var(--border-radius-full);
7267
- background: var(--color-action-default);
7268
- }
7269
-
7270
- /* WebKit / Blink thumb (vertically centred over the track) */
7271
- .muka-range-slider__input::-webkit-slider-thumb {
7272
- -webkit-appearance: none;
7273
- appearance: none;
7274
- width: var(--muka-range-thumb);
7275
- height: var(--muka-range-thumb);
7276
- margin-top: calc((var(--muka-range-track-h) - var(--muka-range-thumb)) / 2);
7277
- border-radius: var(--border-radius-full);
7278
- border: 1px solid var(--color-border-contrast);
7279
- box-shadow: var(--shadow-level2);
7280
- background-color: var(--color-surface-level1);
7281
- background-image:
7282
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
7283
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
7284
- background-repeat: no-repeat;
7285
- background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
7286
- background-position:
7287
- calc(50% - var(--muka-range-grip-gap)) center,
7288
- calc(50% + var(--muka-range-grip-gap)) center;
7289
- transition: box-shadow 0.15s ease, background-color 0.15s ease;
7290
- }
7291
-
7292
- /* Firefox thumb */
7293
- .muka-range-slider__input::-moz-range-thumb {
7294
- width: var(--muka-range-thumb);
7295
- height: var(--muka-range-thumb);
7296
- border-radius: var(--border-radius-full);
7297
- border: 1px solid var(--color-border-contrast);
7298
- box-shadow: var(--shadow-level2);
7299
- background-color: var(--color-surface-level1);
7300
- background-image:
7301
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
7302
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
7303
- background-repeat: no-repeat;
7304
- background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
7305
- background-position:
7306
- calc(50% - var(--muka-range-grip-gap)) center,
7307
- calc(50% + var(--muka-range-grip-gap)) center;
7308
- transition: box-shadow 0.15s ease, background-color 0.15s ease;
7309
- }
7310
-
7311
- /* Hover */
7312
- .muka-range-slider__input:hover::-webkit-slider-thumb {
7313
- background-color: var(--color-surface-level1);
7314
- box-shadow: var(--shadow-level3);
7315
- }
7316
- .muka-range-slider__input:hover::-moz-range-thumb {
7317
- background-color: var(--color-surface-level1);
7318
- box-shadow: var(--shadow-level3);
7319
- }
7320
-
7321
- /* Focus ring */
7322
- .muka-range-slider__input:focus-visible::-webkit-slider-thumb {
7323
- box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
7324
- }
7325
- .muka-range-slider__input:focus-visible::-moz-range-thumb {
7326
- box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
7327
- }
7328
-
7329
- /* Disabled */
7330
- .muka-range-slider--disabled {
7331
- opacity: 0.5;
7332
- }
7333
- .muka-range-slider--disabled .muka-range-slider__input {
7334
- cursor: not-allowed;
7335
- }
7336
-
7337
-
7338
- /* Progress */
7339
- /* Progress Component Styles - Using Muka Design Tokens */
7340
-
7341
- /* ========================================
7342
- BAR VARIANT
7343
- ======================================== */
7344
-
7345
- .muka-progress--bar {
7346
- display: flex;
7347
- align-items: center;
7348
- gap: var(--spacing-2);
7349
- width: 100%;
7350
- }
7351
-
7352
- .muka-progress--bar .muka-progress__track {
7353
- flex: 1;
7354
- background-color: var(--color-surface-level1);
7355
- border-radius: var(--border-radius-full);
7356
- overflow: hidden;
7357
- }
7358
-
7359
- .muka-progress--bar.muka-progress--sm .muka-progress__track {
7360
- height: var(--progress-size-bar-height-sm);
7361
- }
7362
-
7363
- .muka-progress--bar.muka-progress--md .muka-progress__track {
7364
- height: var(--progress-size-bar-height-md);
7365
- }
7366
-
7367
- .muka-progress--bar.muka-progress--lg .muka-progress__track {
7368
- height: var(--progress-size-bar-height-lg);
7369
- }
7370
-
7371
- .muka-progress--bar .muka-progress__fill {
7372
- height: 100%;
7373
- background-color: var(--color-action-default);
7374
- border-radius: var(--border-radius-full);
7375
- transition: width 0.3s ease;
7376
- }
7377
-
7378
- .muka-progress--bar .muka-progress__label {
7379
- flex-shrink: 0;
7380
- font-family: var(--text-label-sm-semibold-fontFamily);
7381
- font-weight: var(--text-label-sm-semibold-fontWeight);
7382
- font-size: var(--text-label-sm-semibold-fontSize);
7383
- line-height: var(--text-label-sm-semibold-lineHeight);
7384
- color: var(--color-text-default-default);
7385
- min-width: 3ch;
7386
- text-align: right;
7387
- }
7388
-
7389
- /* Indeterminate animation for bar */
7390
- .muka-progress--bar.muka-progress--indeterminate .muka-progress__fill {
7391
- width: 40%;
7392
- animation: muka-progress-bar-indeterminate 1.5s ease-in-out infinite;
7393
- }
7394
-
7395
- @keyframes muka-progress-bar-indeterminate {
7396
- 0% {
7397
- transform: translateX(-100%);
7398
- }
7399
- 100% {
7400
- transform: translateX(250%);
7401
- }
7402
- }
7403
-
7404
- /* ========================================
7405
- CIRCLE VARIANT
7406
- ======================================== */
7407
-
7408
- .muka-progress--circle {
7409
- position: relative;
7410
- display: inline-flex;
7411
- align-items: center;
7412
- justify-content: center;
7413
- }
7414
-
7415
- .muka-progress--circle.muka-progress--sm {
7416
- width: var(--progress-size-circle-diameter-sm);
7417
- height: var(--progress-size-circle-diameter-sm);
7418
- }
7419
-
7420
- .muka-progress--circle.muka-progress--md {
7421
- width: var(--progress-size-circle-diameter-md);
7422
- height: var(--progress-size-circle-diameter-md);
7423
- }
7424
-
7425
- .muka-progress--circle.muka-progress--lg {
7426
- width: var(--progress-size-circle-diameter-lg);
7427
- height: var(--progress-size-circle-diameter-lg);
7428
- }
7429
-
7430
- .muka-progress__circle {
7443
+ .muka-progress__circle {
7431
7444
  width: 100%;
7432
7445
  height: 100%;
7433
7446
  transform: rotate(-90deg);
@@ -7578,141 +7591,44 @@ body {
7578
7591
  }
7579
7592
 
7580
7593
 
7581
- /* PriceTag */
7582
- /* PriceTag Component Styles - Using Muka Design Tokens */
7594
+ /* Popover */
7595
+ /* Popover Component Styles */
7583
7596
 
7584
- .muka-price-tag {
7585
- display: flex;
7586
- flex-shrink: 0;
7597
+ .muka-popover__content {
7598
+ background-color: var(--color-surface-level3);
7599
+ border: var(--border-width-regular) solid var(--color-border-default);
7600
+ border-radius: var(--radius-md);
7601
+ padding: var(--spacing-4);
7602
+ box-shadow: var(--shadow-level3);
7603
+ max-width: 20rem;
7604
+ z-index: 50;
7605
+ animation: muka-popover-fade-in 150ms ease;
7587
7606
  }
7588
7607
 
7589
- /* Medium: stacked layout (price on top, unit below) */
7590
- .muka-price-tag--md {
7591
- flex-direction: column;
7592
- align-items: flex-end;
7593
- justify-content: center;
7608
+ @keyframes muka-popover-fade-in {
7609
+ from {
7610
+ opacity: 0;
7611
+ transform: scale(0.96);
7612
+ }
7613
+ to {
7614
+ opacity: 1;
7615
+ transform: scale(1);
7616
+ }
7594
7617
  }
7595
7618
 
7596
- /* Small: inline layout */
7597
- .muka-price-tag--sm {
7598
- flex-direction: row;
7599
- align-items: center;
7600
- gap: 3px;
7619
+ /* Arrow */
7620
+ .muka-popover__arrow {
7621
+ fill: var(--color-surface-level3);
7601
7622
  }
7602
7623
 
7603
- /* Amount row: currency + numbers */
7604
- .muka-price-tag__amount {
7605
- display: flex;
7606
- align-items: flex-start;
7607
- gap: var(--spacing-1);
7608
- }
7609
7624
 
7610
- .muka-price-tag--sm .muka-price-tag__amount {
7625
+ /* PieChart */
7626
+ /* PieChart Component Styles - Using Muka Design Tokens */
7627
+
7628
+ .muka-piechart {
7629
+ display: inline-flex;
7611
7630
  align-items: center;
7612
- }
7613
-
7614
- /* Numbers group: whole + decimal + cents */
7615
- .muka-price-tag__numbers {
7616
- display: flex;
7617
- align-items: baseline;
7618
- }
7619
-
7620
- /* ─── Medium size typography ──────────────────────────── */
7621
-
7622
- .muka-price-tag--md .muka-price-tag__currency {
7623
- font-family: var(--text-subheading-md-fontFamily);
7624
- font-weight: var(--text-subheading-md-fontWeight);
7625
- font-size: var(--text-subheading-md-fontSize);
7626
- line-height: var(--text-label-2xl-bold-lineHeight);
7627
- color: var(--color-text-subtle-default);
7628
- }
7629
-
7630
- .muka-price-tag--md .muka-price-tag__whole {
7631
- font-family: var(--text-label-2xl-bold-fontFamily);
7632
- font-weight: var(--text-label-2xl-bold-fontWeight);
7633
- font-size: var(--text-label-2xl-bold-fontSize);
7634
- line-height: var(--text-label-2xl-bold-lineHeight);
7635
- color: var(--color-text-default-default);
7636
- }
7637
-
7638
- .muka-price-tag--md .muka-price-tag__decimal,
7639
- .muka-price-tag--md .muka-price-tag__cents {
7640
- font-family: var(--text-label-md-bold-fontFamily);
7641
- font-weight: var(--text-label-md-bold-fontWeight);
7642
- font-size: var(--text-label-md-bold-fontSize);
7643
- line-height: var(--text-label-md-bold-lineHeight);
7644
- color: var(--color-text-default-default);
7645
- }
7646
-
7647
- /* ─── Small size typography ───────────────────────────── */
7648
-
7649
- .muka-price-tag--sm .muka-price-tag__currency {
7650
- font-family: var(--text-body-base-regular-fontFamily);
7651
- font-weight: var(--text-body-base-regular-fontWeight);
7652
- font-size: var(--text-body-base-regular-fontSize);
7653
- line-height: var(--text-label-md-bold-lineHeight);
7654
- color: var(--color-text-subtle-default);
7655
- }
7656
-
7657
- .muka-price-tag--sm .muka-price-tag__whole,
7658
- .muka-price-tag--sm .muka-price-tag__decimal,
7659
- .muka-price-tag--sm .muka-price-tag__cents {
7660
- font-family: var(--text-label-md-bold-fontFamily);
7661
- font-weight: var(--text-label-md-bold-fontWeight);
7662
- font-size: var(--text-label-md-bold-fontSize);
7663
- line-height: var(--text-label-md-bold-lineHeight);
7664
- color: var(--color-text-default-default);
7665
- }
7666
-
7667
- /* ─── Unit label (same for both sizes) ────────────────── */
7668
-
7669
- .muka-price-tag__unit {
7670
- font-family: var(--text-body-sm-regular-fontFamily);
7671
- font-weight: var(--text-body-sm-regular-fontWeight);
7672
- font-size: var(--text-body-sm-regular-fontSize);
7673
- line-height: var(--text-body-sm-regular-lineHeight);
7674
- color: var(--color-text-subtle-default);
7675
- }
7676
-
7677
-
7678
- /* Popover */
7679
- /* Popover Component Styles */
7680
-
7681
- .muka-popover__content {
7682
- background-color: var(--color-surface-level3);
7683
- border: var(--border-width-regular) solid var(--color-border-default);
7684
- border-radius: var(--radius-md);
7685
- padding: var(--spacing-4);
7686
- box-shadow: var(--shadow-level3);
7687
- max-width: 20rem;
7688
- z-index: 50;
7689
- animation: muka-popover-fade-in 150ms ease;
7690
- }
7691
-
7692
- @keyframes muka-popover-fade-in {
7693
- from {
7694
- opacity: 0;
7695
- transform: scale(0.96);
7696
- }
7697
- to {
7698
- opacity: 1;
7699
- transform: scale(1);
7700
- }
7701
- }
7702
-
7703
- /* Arrow */
7704
- .muka-popover__arrow {
7705
- fill: var(--color-surface-level3);
7706
- }
7707
-
7708
-
7709
- /* PieChart */
7710
- /* PieChart Component Styles - Using Muka Design Tokens */
7711
-
7712
- .muka-piechart {
7713
- display: inline-flex;
7714
- align-items: center;
7715
- gap: var(--spacing-4);
7631
+ gap: var(--spacing-4);
7716
7632
  }
7717
7633
 
7718
7634
  /* Legend layout */
@@ -7931,6 +7847,133 @@ body {
7931
7847
  }
7932
7848
 
7933
7849
 
7850
+ /* PriceTag */
7851
+ /* PriceTag Component Styles - Using Muka Design Tokens */
7852
+
7853
+ .muka-price-tag {
7854
+ display: flex;
7855
+ flex-shrink: 0;
7856
+ }
7857
+
7858
+ /* Medium: stacked layout (price on top, unit below) */
7859
+ .muka-price-tag--md {
7860
+ flex-direction: column;
7861
+ align-items: flex-end;
7862
+ justify-content: center;
7863
+ }
7864
+
7865
+ /* Small: inline layout */
7866
+ .muka-price-tag--sm {
7867
+ flex-direction: row;
7868
+ align-items: center;
7869
+ gap: 3px;
7870
+ }
7871
+
7872
+ /* Amount row: currency + numbers */
7873
+ .muka-price-tag__amount {
7874
+ display: flex;
7875
+ align-items: flex-start;
7876
+ gap: var(--spacing-1);
7877
+ }
7878
+
7879
+ .muka-price-tag--sm .muka-price-tag__amount {
7880
+ align-items: center;
7881
+ }
7882
+
7883
+ /* Numbers group: whole + decimal + cents */
7884
+ .muka-price-tag__numbers {
7885
+ display: flex;
7886
+ align-items: baseline;
7887
+ }
7888
+
7889
+ /* ─── Medium size typography ──────────────────────────── */
7890
+
7891
+ .muka-price-tag--md .muka-price-tag__currency {
7892
+ font-family: var(--text-subheading-md-fontFamily);
7893
+ font-weight: var(--text-subheading-md-fontWeight);
7894
+ font-size: var(--text-subheading-md-fontSize);
7895
+ line-height: var(--text-label-2xl-bold-lineHeight);
7896
+ color: var(--color-text-subtle-default);
7897
+ }
7898
+
7899
+ .muka-price-tag--md .muka-price-tag__whole {
7900
+ font-family: var(--text-label-2xl-bold-fontFamily);
7901
+ font-weight: var(--text-label-2xl-bold-fontWeight);
7902
+ font-size: var(--text-label-2xl-bold-fontSize);
7903
+ line-height: var(--text-label-2xl-bold-lineHeight);
7904
+ color: var(--color-text-default-default);
7905
+ }
7906
+
7907
+ .muka-price-tag--md .muka-price-tag__decimal,
7908
+ .muka-price-tag--md .muka-price-tag__cents {
7909
+ font-family: var(--text-label-md-bold-fontFamily);
7910
+ font-weight: var(--text-label-md-bold-fontWeight);
7911
+ font-size: var(--text-label-md-bold-fontSize);
7912
+ line-height: var(--text-label-md-bold-lineHeight);
7913
+ color: var(--color-text-default-default);
7914
+ }
7915
+
7916
+ /* ─── Small size typography ───────────────────────────── */
7917
+
7918
+ .muka-price-tag--sm .muka-price-tag__currency {
7919
+ font-family: var(--text-body-base-regular-fontFamily);
7920
+ font-weight: var(--text-body-base-regular-fontWeight);
7921
+ font-size: var(--text-body-base-regular-fontSize);
7922
+ line-height: var(--text-label-md-bold-lineHeight);
7923
+ color: var(--color-text-subtle-default);
7924
+ }
7925
+
7926
+ .muka-price-tag--sm .muka-price-tag__whole,
7927
+ .muka-price-tag--sm .muka-price-tag__decimal,
7928
+ .muka-price-tag--sm .muka-price-tag__cents {
7929
+ font-family: var(--text-label-md-bold-fontFamily);
7930
+ font-weight: var(--text-label-md-bold-fontWeight);
7931
+ font-size: var(--text-label-md-bold-fontSize);
7932
+ line-height: var(--text-label-md-bold-lineHeight);
7933
+ color: var(--color-text-default-default);
7934
+ }
7935
+
7936
+ /* ─── Unit label (same for both sizes) ────────────────── */
7937
+
7938
+ .muka-price-tag__unit {
7939
+ font-family: var(--text-body-sm-regular-fontFamily);
7940
+ font-weight: var(--text-body-sm-regular-fontWeight);
7941
+ font-size: var(--text-body-sm-regular-fontSize);
7942
+ line-height: var(--text-body-sm-regular-lineHeight);
7943
+ color: var(--color-text-subtle-default);
7944
+ }
7945
+
7946
+
7947
+ /* PhotoDraftStrip */
7948
+ /* PhotoDraftStrip Component Styles */
7949
+
7950
+ .muka-photo-draft-strip {
7951
+ display: flex;
7952
+ align-items: center;
7953
+ gap: var(--spacing-3);
7954
+ width: 100%;
7955
+ padding: var(--spacing-2) 0;
7956
+ }
7957
+
7958
+ .muka-photo-draft-strip__track {
7959
+ display: flex;
7960
+ gap: var(--spacing-2);
7961
+ flex: 1 1 auto;
7962
+ min-width: 0;
7963
+ overflow-x: auto;
7964
+ scroll-behavior: smooth;
7965
+ scrollbar-width: none;
7966
+ }
7967
+
7968
+ .muka-photo-draft-strip__track::-webkit-scrollbar {
7969
+ display: none;
7970
+ }
7971
+
7972
+ .muka-photo-draft-strip__item {
7973
+ flex: 0 0 auto;
7974
+ }
7975
+
7976
+
7934
7977
  /* Pagination */
7935
7978
  /* Pagination Component Styles */
7936
7979
 
@@ -8033,51 +8076,21 @@ body {
8033
8076
  }
8034
8077
 
8035
8078
 
8036
- /* PhotoDraftStrip */
8037
- /* PhotoDraftStrip Component Styles */
8079
+ /* NumberInput */
8080
+ /* NumberInput — reuses Input field styles (../Input/Input.css). */
8081
+ /* Only the prefix/suffix affixes are NumberInput-specific. */
8038
8082
 
8039
- .muka-photo-draft-strip {
8040
- display: flex;
8083
+ .muka-numberinput__addon {
8084
+ display: inline-flex;
8041
8085
  align-items: center;
8042
- gap: var(--spacing-3);
8043
- width: 100%;
8044
- padding: var(--spacing-2) 0;
8045
- }
8046
-
8047
- .muka-photo-draft-strip__track {
8048
- display: flex;
8049
- gap: var(--spacing-2);
8050
- flex: 1 1 auto;
8051
- min-width: 0;
8052
- overflow-x: auto;
8053
- scroll-behavior: smooth;
8054
- scrollbar-width: none;
8055
- }
8056
-
8057
- .muka-photo-draft-strip__track::-webkit-scrollbar {
8058
- display: none;
8059
- }
8060
-
8061
- .muka-photo-draft-strip__item {
8062
- flex: 0 0 auto;
8063
- }
8064
-
8065
-
8066
- /* NumberInput */
8067
- /* NumberInput — reuses Input field styles (../Input/Input.css). */
8068
- /* Only the prefix/suffix affixes are NumberInput-specific. */
8069
-
8070
- .muka-numberinput__addon {
8071
- display: inline-flex;
8072
- align-items: center;
8073
- flex: none;
8074
- color: var(--color-text-subtle-default);
8075
- font-family: var(--text-input-md-fontFamily);
8076
- font-size: var(--text-input-md-fontSize);
8077
- line-height: var(--text-input-md-lineHeight);
8078
- user-select: none;
8079
- pointer-events: none;
8080
- white-space: nowrap;
8086
+ flex: none;
8087
+ color: var(--color-text-subtle-default);
8088
+ font-family: var(--text-input-md-fontFamily);
8089
+ font-size: var(--text-input-md-fontSize);
8090
+ line-height: var(--text-input-md-lineHeight);
8091
+ user-select: none;
8092
+ pointer-events: none;
8093
+ white-space: nowrap;
8081
8094
  }
8082
8095
 
8083
8096
  /* Hide the native number spinners — affixes/step API replace them. */
@@ -8093,34 +8106,6 @@ body {
8093
8106
  }
8094
8107
 
8095
8108
 
8096
- /* NavigationTransition */
8097
- /* NavigationTransition Component Styles */
8098
-
8099
- /* ─── Wrapper ────────────────────────────────────────── */
8100
-
8101
- .muka-nav-transition {
8102
- position: relative;
8103
- height: 100vh;
8104
- overflow: hidden;
8105
- }
8106
-
8107
- /* Disable interaction during animation */
8108
- .muka-nav-transition--active {
8109
- pointer-events: none;
8110
- }
8111
-
8112
- /* ─── View slots ─────────────────────────────────────── */
8113
-
8114
- .muka-nav-transition--active .muka-nav-transition__view {
8115
- position: absolute;
8116
- inset: 0;
8117
- }
8118
-
8119
- /* Z-index layering */
8120
- .muka-nav-transition__view--bottom { z-index: 1; }
8121
- .muka-nav-transition__view--top { z-index: 2; }
8122
-
8123
-
8124
8109
  /* Menu */
8125
8110
  /* Menu Component Styles */
8126
8111
 
@@ -8600,6 +8585,220 @@ body {
8600
8585
  }
8601
8586
 
8602
8587
 
8588
+ /* MediaViewer */
8589
+ /* MediaViewer Component Styles - Using Muka Design Tokens */
8590
+
8591
+ /* ─── Native dialog: full viewport ────────────────────── */
8592
+ .muka-media-viewer {
8593
+ position: fixed;
8594
+ inset: 0;
8595
+ width: 100%;
8596
+ height: 100%;
8597
+ max-width: none;
8598
+ max-height: none;
8599
+ margin: 0;
8600
+ padding: 0;
8601
+ border: none;
8602
+ display: flex;
8603
+ flex-direction: column;
8604
+ overflow: hidden;
8605
+ overscroll-behavior: contain;
8606
+ color: var(--color-text-default-default);
8607
+ background-color: var(--color-black-alpha-12);
8608
+ animation: muka-media-viewer-in var(--motion-duration-component) var(--motion-easing-enter);
8609
+ }
8610
+
8611
+ .muka-media-viewer:not([open]) {
8612
+ display: none;
8613
+ }
8614
+
8615
+ .muka-media-viewer::backdrop {
8616
+ background-color: var(--color-black-alpha-12);
8617
+ }
8618
+
8619
+ @keyframes muka-media-viewer-in {
8620
+ from {
8621
+ opacity: 0;
8622
+ }
8623
+ to {
8624
+ opacity: 1;
8625
+ }
8626
+ }
8627
+
8628
+ /* ─── Chrome: TopBar and footer sit on a surface ──────── */
8629
+ .muka-media-viewer__topbar {
8630
+ flex-shrink: 0;
8631
+ background-color: var(--color-surface-level3);
8632
+ }
8633
+
8634
+ .muka-media-viewer__live {
8635
+ position: absolute;
8636
+ width: 1px;
8637
+ height: 1px;
8638
+ padding: 0;
8639
+ margin: -1px;
8640
+ overflow: hidden;
8641
+ clip: rect(0, 0, 0, 0);
8642
+ white-space: nowrap;
8643
+ border: 0;
8644
+ }
8645
+
8646
+ /* ─── Stage: the dark area the images slide across ────── */
8647
+ .muka-media-viewer__stage {
8648
+ position: relative;
8649
+ flex: 1 1 auto;
8650
+ min-height: 0;
8651
+ overflow: hidden;
8652
+ /* Gestures are handled in JS: no browser panning or pinch on the stage. */
8653
+ touch-action: none;
8654
+ user-select: none;
8655
+ -webkit-user-select: none;
8656
+ }
8657
+
8658
+ .muka-media-viewer__slide {
8659
+ position: absolute;
8660
+ inset: 0;
8661
+ display: flex;
8662
+ align-items: center;
8663
+ justify-content: center;
8664
+ padding: var(--spacing-4);
8665
+ transition: transform var(--motion-duration-component) var(--motion-easing-default);
8666
+ will-change: transform;
8667
+ }
8668
+
8669
+ /* While a finger drags, the image follows it without easing. */
8670
+ .muka-media-viewer--dragging .muka-media-viewer__slide {
8671
+ transition: none;
8672
+ }
8673
+
8674
+ .muka-media-viewer__image {
8675
+ display: block;
8676
+ max-width: 100%;
8677
+ max-height: 100%;
8678
+ object-fit: contain;
8679
+ /* The image takes touches, so a long press opens the OS menu (save, share,
8680
+ copy). The swipe still works: pointer events bubble to the stage, and a
8681
+ long press doesn't move far enough to start a drag. */
8682
+ -webkit-touch-callout: default;
8683
+ }
8684
+
8685
+ /* ─── Previous / next: devices that can hover ─────────── */
8686
+ .muka-media-viewer__nav {
8687
+ position: absolute;
8688
+ top: 50%;
8689
+ display: none;
8690
+ transform: translateY(-50%);
8691
+ opacity: 0;
8692
+ transition: opacity var(--motion-duration-micro) var(--motion-easing-enter);
8693
+ }
8694
+
8695
+ .muka-media-viewer__nav--previous {
8696
+ left: var(--spacing-4);
8697
+ }
8698
+
8699
+ .muka-media-viewer__nav--next {
8700
+ right: var(--spacing-4);
8701
+ }
8702
+
8703
+ @media (hover: hover) and (pointer: fine) {
8704
+ .muka-media-viewer__nav {
8705
+ display: block;
8706
+ }
8707
+
8708
+ .muka-media-viewer__stage:hover .muka-media-viewer__nav,
8709
+ .muka-media-viewer__nav:focus-within {
8710
+ opacity: 1;
8711
+ }
8712
+ }
8713
+
8714
+ /* ─── Footer: caption, meta and actions ───────────────── */
8715
+ .muka-media-viewer__footer {
8716
+ flex-shrink: 0;
8717
+ display: flex;
8718
+ flex-direction: column;
8719
+ gap: var(--spacing-3);
8720
+ padding: var(--spacing-4);
8721
+ padding-bottom: calc(var(--spacing-4) + env(safe-area-inset-bottom, 0px));
8722
+ background-color: var(--color-surface-level3);
8723
+ }
8724
+
8725
+ .muka-media-viewer__details {
8726
+ display: flex;
8727
+ align-items: flex-start;
8728
+ justify-content: space-between;
8729
+ gap: var(--spacing-3);
8730
+ }
8731
+
8732
+ .muka-media-viewer__caption {
8733
+ min-width: 0;
8734
+ color: var(--color-text-subtle-default);
8735
+ font-family: var(--text-body-sm-regular-fontFamily);
8736
+ font-size: var(--text-body-sm-regular-fontSize);
8737
+ font-weight: var(--text-body-sm-regular-fontWeight);
8738
+ line-height: var(--text-body-sm-regular-lineHeight);
8739
+ overflow-wrap: anywhere;
8740
+ }
8741
+
8742
+ .muka-media-viewer__meta {
8743
+ flex-shrink: 0;
8744
+ }
8745
+
8746
+ .muka-media-viewer__actions {
8747
+ display: flex;
8748
+ flex-wrap: wrap;
8749
+ gap: var(--spacing-2);
8750
+ }
8751
+
8752
+ /* Mobile: actions stack full width, like Dialog footers. */
8753
+ @media (max-width: 1023px) {
8754
+ .muka-media-viewer__actions {
8755
+ flex-direction: column;
8756
+ }
8757
+
8758
+ .muka-media-viewer__actions > * {
8759
+ width: 100%;
8760
+ }
8761
+ }
8762
+
8763
+ /* ─── Reduced motion ──────────────────────────────────── */
8764
+ @media (prefers-reduced-motion: reduce) {
8765
+ .muka-media-viewer,
8766
+ .muka-media-viewer__slide,
8767
+ .muka-media-viewer__nav {
8768
+ animation: none;
8769
+ transition: none;
8770
+ }
8771
+ }
8772
+
8773
+
8774
+ /* NavigationTransition */
8775
+ /* NavigationTransition Component Styles */
8776
+
8777
+ /* ─── Wrapper ────────────────────────────────────────── */
8778
+
8779
+ .muka-nav-transition {
8780
+ position: relative;
8781
+ height: 100vh;
8782
+ overflow: hidden;
8783
+ }
8784
+
8785
+ /* Disable interaction during animation */
8786
+ .muka-nav-transition--active {
8787
+ pointer-events: none;
8788
+ }
8789
+
8790
+ /* ─── View slots ─────────────────────────────────────── */
8791
+
8792
+ .muka-nav-transition--active .muka-nav-transition__view {
8793
+ position: absolute;
8794
+ inset: 0;
8795
+ }
8796
+
8797
+ /* Z-index layering */
8798
+ .muka-nav-transition__view--bottom { z-index: 1; }
8799
+ .muka-nav-transition__view--top { z-index: 2; }
8800
+
8801
+
8603
8802
  /* ListItem */
8604
8803
  /* ListItem Component Styles - Using Muka Design Tokens */
8605
8804
 
@@ -8794,207 +8993,14 @@ li.muka-listitem {
8794
8993
  }
8795
8994
 
8796
8995
 
8797
- /* LicensePlateInput */
8798
- /* LicensePlateInput — Dutch RDW-style plate input
8799
- *
8800
- * Plate body colors are regulatory (EU/NL) and intentionally fixed:
8801
- * - Plate yellow: #F0CE3D
8802
- * - EU strip blue: #003399
8803
- * - EU stars yellow: #FFCC00
8804
- * - Plate text: #1A1A1A
8805
- *
8806
- * All surrounding UI (label, helper, focus ring, error border) uses Muka tokens.
8807
- */
8808
-
8809
- .muka-license-plate-input {
8810
- --plate-yellow: #f0ce3d;
8811
- --plate-blue: #003399;
8812
- --plate-text: #1a1a1a;
8813
- --plate-stars: #ffcc00;
8996
+ /* Label */
8997
+ /* Label Component Styles - Using Muka Design Tokens */
8814
8998
 
8999
+ .muka-label {
8815
9000
  display: inline-flex;
8816
- flex-direction: column;
8817
- gap: var(--spacing-2);
8818
- }
8819
-
8820
- /* Plate body */
8821
- .muka-license-plate-input__plate {
8822
- display: inline-flex;
8823
- align-items: stretch;
8824
- background-color: var(--plate-yellow);
8825
- border-radius: var(--input-field-radius-md);
8826
- cursor: text;
8827
- position: relative;
8828
- overflow: hidden;
8829
- box-sizing: border-box;
8830
- /* Subtle outline to lift the plate from light backgrounds */
8831
- box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
8832
- /* Reserve space for the focus / error solid ring without shifting layout */
8833
- outline: 3px solid transparent;
8834
- outline-offset: 2px;
8835
- transition: outline-color 0.15s ease, opacity 0.15s ease;
8836
- }
8837
-
8838
- /* Size variants — plate aspect echoes the real RDW plate (~5:1) */
8839
- .muka-license-plate-input__plate--sm {
8840
- height: 44px;
8841
- min-width: 220px;
8842
- border-radius: var(--input-field-radius-sm);
8843
- }
8844
-
8845
- .muka-license-plate-input__plate--md {
8846
- height: 60px;
8847
- min-width: 300px;
8848
- border-radius: var(--input-field-radius-md);
8849
- }
8850
-
8851
- .muka-license-plate-input__plate--lg {
8852
- height: 80px;
8853
- min-width: 400px;
8854
- border-radius: var(--input-field-radius-lg);
8855
- }
8856
-
8857
- /* Focus — solid outline ring */
8858
- .muka-license-plate-input__plate--focused:not(.muka-license-plate-input__plate--disabled) {
8859
- outline-color: var(--input-field-color-focus-border);
8860
- }
8861
-
8862
- /* Error — solid outline ring in error color */
8863
- .muka-license-plate-input__plate--error:not(.muka-license-plate-input__plate--disabled) {
8864
- outline-color: var(--input-field-color-error-border);
8865
- }
8866
-
8867
- /* Disabled */
8868
- .muka-license-plate-input__plate--disabled {
8869
- cursor: not-allowed;
8870
- opacity: 0.55;
8871
- }
8872
-
8873
- /* EU strip */
8874
- .muka-license-plate-input__eu-strip {
8875
- display: inline-flex;
8876
- flex-direction: column;
8877
- align-items: center;
8878
- justify-content: center;
8879
- background-color: var(--plate-blue);
8880
- color: #ffffff;
8881
- flex-shrink: 0;
8882
- padding: 0 0.4em;
8883
- gap: 0.15em;
8884
- /* Strip width scales with plate height for a consistent ratio */
8885
- width: 14%;
8886
- min-width: 36px;
8887
- }
8888
-
8889
- .muka-license-plate-input__eu-stars {
8890
- width: 60%;
8891
- max-width: 28px;
8892
- aspect-ratio: 1 / 1;
8893
- display: block;
8894
- }
8895
-
8896
- .muka-license-plate-input__plate--sm .muka-license-plate-input__eu-stars {
8897
- max-width: 20px;
8898
- }
8899
-
8900
- .muka-license-plate-input__plate--lg .muka-license-plate-input__eu-stars {
8901
- max-width: 36px;
8902
- }
8903
-
8904
- .muka-license-plate-input__country-code {
8905
- font-family:
8906
- 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
8907
- font-weight: 700;
8908
- letter-spacing: 0.04em;
8909
- line-height: 1;
8910
- color: #ffffff;
8911
- }
8912
-
8913
- .muka-license-plate-input__plate--sm .muka-license-plate-input__country-code {
8914
- font-size: 10px;
8915
- }
8916
-
8917
- .muka-license-plate-input__plate--md .muka-license-plate-input__country-code {
8918
- font-size: 13px;
8919
- }
8920
-
8921
- .muka-license-plate-input__plate--lg .muka-license-plate-input__country-code {
8922
- font-size: 16px;
8923
- }
8924
-
8925
- /* Native input */
8926
- .muka-license-plate-input__native {
8927
- flex: 1;
8928
- min-width: 0;
8929
- border: none;
8930
- outline: none;
8931
- background: transparent;
8932
- color: var(--plate-text);
8933
- text-align: center;
8934
- text-transform: uppercase;
8935
- letter-spacing: 0.06em;
8936
- /* Plate font — bold condensed sans is closest to the FE-Schrift look without
8937
- shipping a custom font. JetBrains Mono is the system mono brand font. */
8938
- font-family:
8939
- 'Arial Narrow', 'Helvetica Neue', Helvetica, Arial, sans-serif;
8940
- font-weight: 800;
8941
- padding: 0 0.5em;
8942
- width: 100%;
8943
- caret-color: var(--plate-text);
8944
- }
8945
-
8946
- .muka-license-plate-input__plate--sm .muka-license-plate-input__native {
8947
- font-size: 22px;
8948
- }
8949
-
8950
- .muka-license-plate-input__plate--md .muka-license-plate-input__native {
8951
- font-size: 30px;
8952
- }
8953
-
8954
- .muka-license-plate-input__plate--lg .muka-license-plate-input__native {
8955
- font-size: 42px;
8956
- }
8957
-
8958
- .muka-license-plate-input__native::placeholder {
8959
- color: var(--plate-text);
8960
- opacity: 0.55;
8961
- font-weight: 700;
8962
- letter-spacing: 0.08em;
8963
- }
8964
-
8965
- .muka-license-plate-input__plate--disabled .muka-license-plate-input__native {
8966
- cursor: not-allowed;
8967
- }
8968
-
8969
- /* Helper text */
8970
- .muka-license-plate-input__helper {
8971
- font-family: var(--text-label-sm-regular-fontFamily);
8972
- font-weight: var(--text-label-sm-regular-fontWeight);
8973
- font-size: var(--text-label-sm-regular-fontSize);
8974
- line-height: var(--text-label-sm-regular-lineHeight);
8975
- color: var(--color-text-subtle-default);
8976
- margin: 0;
8977
- }
8978
-
8979
- /* Error message */
8980
- .muka-license-plate-input__error {
8981
- font-family: var(--text-label-sm-regular-fontFamily);
8982
- font-weight: var(--text-label-sm-regular-fontWeight);
8983
- font-size: var(--text-label-sm-regular-fontSize);
8984
- line-height: var(--text-label-sm-regular-lineHeight);
8985
- color: var(--color-state-error-default);
8986
- margin: 0;
8987
- }
8988
-
8989
-
8990
- /* Label */
8991
- /* Label Component Styles - Using Muka Design Tokens */
8992
-
8993
- .muka-label {
8994
- display: inline-flex;
8995
- align-items: center;
8996
- color: var(--color-text-default-default);
8997
- cursor: pointer;
9001
+ align-items: center;
9002
+ color: var(--color-text-default-default);
9003
+ cursor: pointer;
8998
9004
  }
8999
9005
 
9000
9006
  .muka-label--sm {
@@ -9206,55 +9212,248 @@ li.muka-listitem {
9206
9212
  }
9207
9213
 
9208
9214
 
9209
- /* Input */
9210
- /* Input Component Styles - Using Muka Design Tokens */
9215
+ /* LicensePlateInput */
9216
+ /* LicensePlateInput — Dutch RDW-style plate input
9217
+ *
9218
+ * Plate body colors are regulatory (EU/NL) and intentionally fixed:
9219
+ * - Plate yellow: #F0CE3D
9220
+ * - EU strip blue: #003399
9221
+ * - EU stars yellow: #FFCC00
9222
+ * - Plate text: #1A1A1A
9223
+ *
9224
+ * All surrounding UI (label, helper, focus ring, error border) uses Muka tokens.
9225
+ */
9226
+
9227
+ .muka-license-plate-input {
9228
+ --plate-yellow: #f0ce3d;
9229
+ --plate-blue: #003399;
9230
+ --plate-text: #1a1a1a;
9231
+ --plate-stars: #ffcc00;
9211
9232
 
9212
- /* Wrapper — label, field, helper spacing per Figma */
9213
- .muka-input {
9214
9233
  display: inline-flex;
9215
9234
  flex-direction: column;
9216
9235
  gap: var(--spacing-2);
9217
9236
  }
9218
9237
 
9219
- .muka-input--full-width {
9220
- width: 100%;
9238
+ /* Plate body */
9239
+ .muka-license-plate-input__plate {
9240
+ display: inline-flex;
9241
+ align-items: stretch;
9242
+ background-color: var(--plate-yellow);
9243
+ border-radius: var(--input-field-radius-md);
9244
+ cursor: text;
9245
+ position: relative;
9246
+ overflow: hidden;
9247
+ box-sizing: border-box;
9248
+ /* Subtle outline to lift the plate from light backgrounds */
9249
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
9250
+ /* Reserve space for the focus / error solid ring without shifting layout */
9251
+ outline: 3px solid transparent;
9252
+ outline-offset: 2px;
9253
+ transition: outline-color 0.15s ease, opacity 0.15s ease;
9221
9254
  }
9222
9255
 
9223
- /* Label */
9224
- .muka-input__label {
9225
- color: var(--color-text-default-default);
9226
- cursor: pointer;
9256
+ /* Size variants — plate aspect echoes the real RDW plate (~5:1) */
9257
+ .muka-license-plate-input__plate--sm {
9258
+ height: 44px;
9259
+ min-width: 220px;
9260
+ border-radius: var(--input-field-radius-sm);
9227
9261
  }
9228
9262
 
9229
- .muka-input__label--sm {
9230
- font-family: var(--text-label-sm-semibold-fontFamily);
9231
- font-weight: var(--text-label-sm-semibold-fontWeight);
9232
- font-size: var(--text-label-sm-semibold-fontSize);
9233
- line-height: var(--text-label-sm-semibold-lineHeight);
9263
+ .muka-license-plate-input__plate--md {
9264
+ height: 60px;
9265
+ min-width: 300px;
9266
+ border-radius: var(--input-field-radius-md);
9234
9267
  }
9235
9268
 
9236
- .muka-input__label--md {
9237
- font-family: var(--text-label-md-semibold-fontFamily);
9238
- font-weight: var(--text-label-md-semibold-fontWeight);
9239
- font-size: var(--text-label-md-semibold-fontSize);
9240
- line-height: var(--text-label-md-semibold-lineHeight);
9269
+ .muka-license-plate-input__plate--lg {
9270
+ height: 80px;
9271
+ min-width: 400px;
9272
+ border-radius: var(--input-field-radius-lg);
9241
9273
  }
9242
9274
 
9243
- .muka-input__label--lg {
9244
- font-family: var(--text-label-lg-semibold-fontFamily);
9245
- font-weight: var(--text-label-lg-semibold-fontWeight);
9246
- font-size: var(--text-label-lg-semibold-fontSize);
9247
- line-height: var(--text-label-lg-semibold-lineHeight);
9275
+ /* Focus — solid outline ring */
9276
+ .muka-license-plate-input__plate--focused:not(.muka-license-plate-input__plate--disabled) {
9277
+ outline-color: var(--input-field-color-focus-border);
9248
9278
  }
9249
9279
 
9250
- .muka-input__required {
9251
- color: var(--color-state-error-default);
9280
+ /* Error — solid outline ring in error color */
9281
+ .muka-license-plate-input__plate--error:not(.muka-license-plate-input__plate--disabled) {
9282
+ outline-color: var(--input-field-color-error-border);
9252
9283
  }
9253
9284
 
9254
- .muka-input__label--sm + .muka-input__field--disabled,
9255
- .muka-input__label--md + .muka-input__field--disabled,
9256
- .muka-input__label--lg + .muka-input__field--disabled {
9257
- cursor: not-allowed;
9285
+ /* Disabled */
9286
+ .muka-license-plate-input__plate--disabled {
9287
+ cursor: not-allowed;
9288
+ opacity: 0.55;
9289
+ }
9290
+
9291
+ /* EU strip */
9292
+ .muka-license-plate-input__eu-strip {
9293
+ display: inline-flex;
9294
+ flex-direction: column;
9295
+ align-items: center;
9296
+ justify-content: center;
9297
+ background-color: var(--plate-blue);
9298
+ color: #ffffff;
9299
+ flex-shrink: 0;
9300
+ padding: 0 0.4em;
9301
+ gap: 0.15em;
9302
+ /* Strip width scales with plate height for a consistent ratio */
9303
+ width: 14%;
9304
+ min-width: 36px;
9305
+ }
9306
+
9307
+ .muka-license-plate-input__eu-stars {
9308
+ width: 60%;
9309
+ max-width: 28px;
9310
+ aspect-ratio: 1 / 1;
9311
+ display: block;
9312
+ }
9313
+
9314
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__eu-stars {
9315
+ max-width: 20px;
9316
+ }
9317
+
9318
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__eu-stars {
9319
+ max-width: 36px;
9320
+ }
9321
+
9322
+ .muka-license-plate-input__country-code {
9323
+ font-family:
9324
+ 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
9325
+ font-weight: 700;
9326
+ letter-spacing: 0.04em;
9327
+ line-height: 1;
9328
+ color: #ffffff;
9329
+ }
9330
+
9331
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__country-code {
9332
+ font-size: 10px;
9333
+ }
9334
+
9335
+ .muka-license-plate-input__plate--md .muka-license-plate-input__country-code {
9336
+ font-size: 13px;
9337
+ }
9338
+
9339
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__country-code {
9340
+ font-size: 16px;
9341
+ }
9342
+
9343
+ /* Native input */
9344
+ .muka-license-plate-input__native {
9345
+ flex: 1;
9346
+ min-width: 0;
9347
+ border: none;
9348
+ outline: none;
9349
+ background: transparent;
9350
+ color: var(--plate-text);
9351
+ text-align: center;
9352
+ text-transform: uppercase;
9353
+ letter-spacing: 0.06em;
9354
+ /* Plate font — bold condensed sans is closest to the FE-Schrift look without
9355
+ shipping a custom font. JetBrains Mono is the system mono brand font. */
9356
+ font-family:
9357
+ 'Arial Narrow', 'Helvetica Neue', Helvetica, Arial, sans-serif;
9358
+ font-weight: 800;
9359
+ padding: 0 0.5em;
9360
+ width: 100%;
9361
+ caret-color: var(--plate-text);
9362
+ }
9363
+
9364
+ .muka-license-plate-input__plate--sm .muka-license-plate-input__native {
9365
+ font-size: 22px;
9366
+ }
9367
+
9368
+ .muka-license-plate-input__plate--md .muka-license-plate-input__native {
9369
+ font-size: 30px;
9370
+ }
9371
+
9372
+ .muka-license-plate-input__plate--lg .muka-license-plate-input__native {
9373
+ font-size: 42px;
9374
+ }
9375
+
9376
+ .muka-license-plate-input__native::placeholder {
9377
+ color: var(--plate-text);
9378
+ opacity: 0.55;
9379
+ font-weight: 700;
9380
+ letter-spacing: 0.08em;
9381
+ }
9382
+
9383
+ .muka-license-plate-input__plate--disabled .muka-license-plate-input__native {
9384
+ cursor: not-allowed;
9385
+ }
9386
+
9387
+ /* Helper text */
9388
+ .muka-license-plate-input__helper {
9389
+ font-family: var(--text-label-sm-regular-fontFamily);
9390
+ font-weight: var(--text-label-sm-regular-fontWeight);
9391
+ font-size: var(--text-label-sm-regular-fontSize);
9392
+ line-height: var(--text-label-sm-regular-lineHeight);
9393
+ color: var(--color-text-subtle-default);
9394
+ margin: 0;
9395
+ }
9396
+
9397
+ /* Error message */
9398
+ .muka-license-plate-input__error {
9399
+ font-family: var(--text-label-sm-regular-fontFamily);
9400
+ font-weight: var(--text-label-sm-regular-fontWeight);
9401
+ font-size: var(--text-label-sm-regular-fontSize);
9402
+ line-height: var(--text-label-sm-regular-lineHeight);
9403
+ color: var(--color-state-error-default);
9404
+ margin: 0;
9405
+ }
9406
+
9407
+
9408
+ /* Input */
9409
+ /* Input Component Styles - Using Muka Design Tokens */
9410
+
9411
+ /* Wrapper — label, field, helper spacing per Figma */
9412
+ .muka-input {
9413
+ display: inline-flex;
9414
+ flex-direction: column;
9415
+ gap: var(--spacing-2);
9416
+ }
9417
+
9418
+ .muka-input--full-width {
9419
+ width: 100%;
9420
+ }
9421
+
9422
+ /* Label */
9423
+ .muka-input__label {
9424
+ color: var(--color-text-default-default);
9425
+ cursor: pointer;
9426
+ }
9427
+
9428
+ .muka-input__label--sm {
9429
+ font-family: var(--text-label-sm-semibold-fontFamily);
9430
+ font-weight: var(--text-label-sm-semibold-fontWeight);
9431
+ font-size: var(--text-label-sm-semibold-fontSize);
9432
+ line-height: var(--text-label-sm-semibold-lineHeight);
9433
+ }
9434
+
9435
+ .muka-input__label--md {
9436
+ font-family: var(--text-label-md-semibold-fontFamily);
9437
+ font-weight: var(--text-label-md-semibold-fontWeight);
9438
+ font-size: var(--text-label-md-semibold-fontSize);
9439
+ line-height: var(--text-label-md-semibold-lineHeight);
9440
+ }
9441
+
9442
+ .muka-input__label--lg {
9443
+ font-family: var(--text-label-lg-semibold-fontFamily);
9444
+ font-weight: var(--text-label-lg-semibold-fontWeight);
9445
+ font-size: var(--text-label-lg-semibold-fontSize);
9446
+ line-height: var(--text-label-lg-semibold-lineHeight);
9447
+ }
9448
+
9449
+ .muka-input__required {
9450
+ color: var(--color-state-error-default);
9451
+ }
9452
+
9453
+ .muka-input__label--sm + .muka-input__field--disabled,
9454
+ .muka-input__label--md + .muka-input__field--disabled,
9455
+ .muka-input__label--lg + .muka-input__field--disabled {
9456
+ cursor: not-allowed;
9258
9457
  }
9259
9458
 
9260
9459
  /* Field container — default/hover: 1px border. Radius per Figma (812-10825): input field tokens. */
@@ -9401,6 +9600,9 @@ li.muka-listitem {
9401
9600
  flex-shrink: 0;
9402
9601
  width: var(--size-2xl, 2rem);
9403
9602
  height: var(--size-2xl, 2rem);
9603
+ /* Bleed into the field's vertical padding: keeps the full hit area without
9604
+ making a password or clearable field taller than a plain one. */
9605
+ margin-block: calc(var(--input-field-padding-y) * -1);
9404
9606
  padding: 0;
9405
9607
  border: none;
9406
9608
  background: transparent;
@@ -9408,6 +9610,24 @@ li.muka-listitem {
9408
9610
  cursor: pointer;
9409
9611
  }
9410
9612
 
9613
+ /* The outermost button bleeds into the right padding by the same amount, so
9614
+ its glyph sits as close to the edge as it does to the top and bottom. */
9615
+ .muka-input__clear:last-child,
9616
+ .muka-input__reveal:last-child {
9617
+ margin-inline-end: calc(var(--input-field-padding-y) * -1);
9618
+ }
9619
+
9620
+ /* md: match the right gap to the gap above and below the vertically centred
9621
+ button exactly, i.e. (field height − borders − button) / 2. Holds in the
9622
+ focus/error state too, where border and padding trade 1px. */
9623
+ .muka-input__field--md .muka-input__clear:last-child,
9624
+ .muka-input__field--md .muka-input__reveal:last-child {
9625
+ margin-inline-end: calc(
9626
+ (var(--input-field-height-default) - 2 * var(--border-width-regular) - var(--size-2xl, 2rem)) / 2
9627
+ - var(--input-field-padding-x)
9628
+ );
9629
+ }
9630
+
9411
9631
  .muka-input__field--sm .muka-input__clear,
9412
9632
  .muka-input__field--sm .muka-input__reveal {
9413
9633
  width: var(--size-xl, 1.5rem);
@@ -9466,60 +9686,6 @@ li.muka-listitem {
9466
9686
  }
9467
9687
 
9468
9688
 
9469
- /* Icon */
9470
- /* Icon Component Styles - Using Muka Design Tokens */
9471
-
9472
- .muka-icon {
9473
- display: inline-flex;
9474
- align-items: center;
9475
- justify-content: center;
9476
- flex-shrink: 0;
9477
- color: var(--color-icon-default-default, currentColor);
9478
- }
9479
-
9480
- /* Icons inside buttons should inherit from button's foreground color */
9481
- .muka-button .muka-icon {
9482
- color: inherit;
9483
- }
9484
-
9485
- .muka-icon--subtle {
9486
- color: var(--color-icon-subtle-default);
9487
- }
9488
-
9489
- .muka-icon--muted {
9490
- color: var(--color-icon-muted-default);
9491
- }
9492
-
9493
- .muka-icon--inverse {
9494
- color: var(--color-icon-default-inverse);
9495
- }
9496
-
9497
- .muka-icon--xs {
9498
- width: var(--icon-size-xs);
9499
- height: var(--icon-size-xs);
9500
- }
9501
-
9502
- .muka-icon--sm {
9503
- width: var(--icon-size-sm);
9504
- height: var(--icon-size-sm);
9505
- }
9506
-
9507
- .muka-icon--md {
9508
- width: var(--icon-size-default);
9509
- height: var(--icon-size-default);
9510
- }
9511
-
9512
- .muka-icon--lg {
9513
- width: var(--icon-size-lg);
9514
- height: var(--icon-size-lg);
9515
- }
9516
-
9517
- .muka-icon svg {
9518
- width: 100%;
9519
- height: 100%;
9520
- }
9521
-
9522
-
9523
9689
  /* Form */
9524
9690
  .muka-form {
9525
9691
  display: flex;
@@ -9802,146 +9968,59 @@ li.muka-listitem {
9802
9968
  }
9803
9969
 
9804
9970
 
9805
- /* FAB */
9806
- /* FAB (Floating Action Button) Component Styles */
9807
-
9808
- .muka-fab {
9809
- position: fixed;
9810
- z-index: 40;
9971
+ /* Icon */
9972
+ /* Icon Component Styles - Using Muka Design Tokens */
9811
9973
 
9974
+ .muka-icon {
9812
9975
  display: inline-flex;
9813
9976
  align-items: center;
9814
9977
  justify-content: center;
9815
- gap: var(--spacing-2);
9978
+ flex-shrink: 0;
9979
+ color: var(--color-icon-default-default, currentColor);
9980
+ }
9816
9981
 
9817
- border: none;
9818
- cursor: pointer;
9819
- font-family: inherit;
9820
- box-shadow: var(--shadow-level4);
9982
+ /* Icons inside buttons should inherit from button's foreground color */
9983
+ .muka-button .muka-icon {
9984
+ color: inherit;
9985
+ }
9821
9986
 
9822
- transition: transform 0.12s ease, box-shadow 0.12s ease, background-color 0.12s ease;
9823
- -webkit-tap-highlight-color: transparent;
9987
+ .muka-icon--subtle {
9988
+ color: var(--color-icon-subtle-default);
9824
9989
  }
9825
9990
 
9826
- .muka-fab:active {
9827
- transform: scale(0.96);
9828
- box-shadow: var(--shadow-level3);
9829
- }
9830
-
9831
- .muka-fab:focus-visible {
9832
- outline: 2px solid var(--color-action-default);
9833
- outline-offset: 2px;
9834
- }
9835
-
9836
- .muka-fab:disabled {
9837
- opacity: 0.5;
9838
- cursor: not-allowed;
9839
- box-shadow: none;
9840
- }
9841
-
9842
- /* ─── Variants ────────────────────────────────────────── */
9843
-
9844
- .muka-fab--primary {
9845
- background-color: var(--color-action-default);
9846
- color: var(--color-text-default-inverse);
9847
- }
9848
-
9849
- .muka-fab--primary:hover:not(:disabled) {
9850
- background-color: var(--color-action-hover);
9851
- }
9852
-
9853
- .muka-fab--secondary {
9854
- background-color: var(--color-surface-level3);
9855
- color: var(--color-text-default-default);
9856
- }
9857
-
9858
- .muka-fab--secondary:hover:not(:disabled) {
9859
- background-color: var(--color-surface-level2);
9991
+ .muka-icon--muted {
9992
+ color: var(--color-icon-muted-default);
9860
9993
  }
9861
9994
 
9862
- /* ─── Sizes (circular by default) ─────────────────────── */
9863
-
9864
- .muka-fab--md {
9865
- width: 56px;
9866
- height: 56px;
9867
- border-radius: 50%;
9995
+ .muka-icon--inverse {
9996
+ color: var(--color-icon-default-inverse);
9868
9997
  }
9869
9998
 
9870
- .muka-fab--lg {
9871
- width: 64px;
9872
- height: 64px;
9873
- border-radius: 50%;
9999
+ .muka-icon--xs {
10000
+ width: var(--icon-size-xs);
10001
+ height: var(--icon-size-xs);
9874
10002
  }
9875
10003
 
9876
- /* ─── Extended (pill shape with label) ────────────────── */
9877
-
9878
- .muka-fab--extended {
9879
- width: auto;
9880
- height: auto;
9881
- padding: var(--spacing-3) var(--spacing-4);
9882
- border-radius: var(--radius-full);
10004
+ .muka-icon--sm {
10005
+ width: var(--icon-size-sm);
10006
+ height: var(--icon-size-sm);
9883
10007
  }
9884
10008
 
9885
- .muka-fab--extended.muka-fab--lg {
9886
- padding: var(--spacing-4) var(--spacing-5);
10009
+ .muka-icon--md {
10010
+ width: var(--icon-size-default);
10011
+ height: var(--icon-size-default);
9887
10012
  }
9888
10013
 
9889
- .muka-fab__icon {
9890
- display: inline-flex;
9891
- align-items: center;
9892
- justify-content: center;
9893
- width: 24px;
9894
- height: 24px;
10014
+ .muka-icon--lg {
10015
+ width: var(--icon-size-lg);
10016
+ height: var(--icon-size-lg);
9895
10017
  }
9896
10018
 
9897
- .muka-fab__icon svg {
10019
+ .muka-icon svg {
9898
10020
  width: 100%;
9899
10021
  height: 100%;
9900
10022
  }
9901
10023
 
9902
- .muka-fab__label {
9903
- font-family: var(--text-label-md-semibold-fontFamily);
9904
- font-weight: var(--text-label-md-semibold-fontWeight);
9905
- font-size: var(--text-label-md-semibold-fontSize);
9906
- line-height: var(--text-label-md-semibold-lineHeight);
9907
- }
9908
-
9909
- /* ─── Positioning ─────────────────────────────────────── */
9910
-
9911
- .muka-fab--bottom-right {
9912
- right: var(--spacing-4);
9913
- bottom: var(--spacing-4);
9914
- }
9915
-
9916
- .muka-fab--bottom-left {
9917
- left: var(--spacing-4);
9918
- bottom: var(--spacing-4);
9919
- }
9920
-
9921
- .muka-fab--bottom-center {
9922
- left: 50%;
9923
- bottom: var(--spacing-4);
9924
- transform: translateX(-50%);
9925
- }
9926
-
9927
- .muka-fab--bottom-center:active {
9928
- transform: translateX(-50%) scale(0.96);
9929
- }
9930
-
9931
- /* Add the iOS home-indicator inset to the bottom offset. */
9932
- .muka-fab:not(.muka-fab--no-safe-area) {
9933
- bottom: calc(var(--spacing-4) + env(safe-area-inset-bottom));
9934
- }
9935
-
9936
- /* Lateral safe-area for landscape iPhone with notch. */
9937
- .muka-fab--bottom-right:not(.muka-fab--no-safe-area) {
9938
- right: max(var(--spacing-4), env(safe-area-inset-right));
9939
- }
9940
-
9941
- .muka-fab--bottom-left:not(.muka-fab--no-safe-area) {
9942
- left: max(var(--spacing-4), env(safe-area-inset-left));
9943
- }
9944
-
9945
10024
 
9946
10025
  /* EmptyState */
9947
10026
  /* EmptyState Component Styles - Using Muka Design Tokens */
@@ -10084,125 +10163,266 @@ li.muka-listitem {
10084
10163
  }
10085
10164
 
10086
10165
 
10087
- /* EmojiPicker */
10088
- /* EmojiPicker Component Styles */
10089
-
10090
- .muka-emoji-picker {
10091
- display: grid;
10092
- grid-template-columns: repeat(8, 1fr);
10093
- gap: var(--spacing-1);
10094
- padding: var(--spacing-2);
10095
- max-height: 12rem;
10096
- overflow-y: auto;
10097
- background: var(--color-surface-level2);
10098
- border: var(--border-width-regular, 1px) solid var(--color-border-default);
10099
- border-radius: var(--radius-lg);
10100
- box-shadow: var(--menu-content-shadow, 0 4px 12px rgba(0, 0, 0, 0.12));
10101
- }
10102
-
10103
- .muka-emoji-picker__glyph {
10104
- font-size: 1.25rem;
10105
- line-height: 1;
10106
- }
10107
-
10166
+ /* FAB */
10167
+ /* FAB (Floating Action Button) Component Styles */
10108
10168
 
10109
- /* DropdownSelect */
10110
- /* DropdownSelect — Figma Dropdown Menu form field (Menu + chips) */
10169
+ .muka-fab {
10170
+ position: fixed;
10171
+ z-index: 40;
10111
10172
 
10112
- .muka-dropdown-select {
10113
10173
  display: inline-flex;
10114
- flex-direction: column;
10174
+ align-items: center;
10175
+ justify-content: center;
10115
10176
  gap: var(--spacing-2);
10116
- min-width: 200px;
10117
- }
10118
10177
 
10119
- .muka-dropdown-select--full-width {
10120
- width: 100%;
10178
+ border: none;
10179
+ cursor: pointer;
10180
+ font-family: inherit;
10181
+ box-shadow: var(--shadow-level4);
10182
+
10183
+ transition: transform 0.12s ease, box-shadow 0.12s ease, background-color 0.12s ease;
10184
+ -webkit-tap-highlight-color: transparent;
10121
10185
  }
10122
10186
 
10123
- .muka-dropdown-select__label {
10124
- color: var(--color-text-default-default);
10125
- cursor: pointer;
10187
+ .muka-fab:active {
10188
+ transform: scale(0.96);
10189
+ box-shadow: var(--shadow-level3);
10126
10190
  }
10127
10191
 
10128
- .muka-dropdown-select__label--sm {
10129
- font-family: var(--text-label-sm-semibold-fontFamily);
10130
- font-weight: var(--text-label-sm-semibold-fontWeight);
10131
- font-size: var(--text-label-sm-semibold-fontSize);
10132
- line-height: var(--text-label-sm-semibold-lineHeight);
10192
+ .muka-fab:focus-visible {
10193
+ outline: 2px solid var(--color-action-default);
10194
+ outline-offset: 2px;
10133
10195
  }
10134
10196
 
10135
- .muka-dropdown-select__label--md {
10136
- font-family: var(--text-label-md-semibold-fontFamily);
10137
- font-weight: var(--text-label-md-semibold-fontWeight);
10138
- font-size: var(--text-label-md-semibold-fontSize);
10139
- line-height: var(--text-label-md-semibold-lineHeight);
10197
+ .muka-fab:disabled {
10198
+ opacity: 0.5;
10199
+ cursor: not-allowed;
10200
+ box-shadow: none;
10140
10201
  }
10141
10202
 
10142
- .muka-dropdown-select__label--lg {
10143
- font-family: var(--text-label-lg-semibold-fontFamily);
10144
- font-weight: var(--text-label-lg-semibold-fontWeight);
10145
- font-size: var(--text-label-lg-semibold-fontSize);
10146
- line-height: var(--text-label-lg-semibold-lineHeight);
10203
+ /* ─── Variants ────────────────────────────────────────── */
10204
+
10205
+ .muka-fab--primary {
10206
+ background-color: var(--color-action-default);
10207
+ color: var(--color-text-default-inverse);
10147
10208
  }
10148
10209
 
10149
- .muka-dropdown-select__required {
10150
- color: var(--color-state-error-default);
10210
+ .muka-fab--primary:hover:not(:disabled) {
10211
+ background-color: var(--color-action-hover);
10151
10212
  }
10152
10213
 
10153
- .muka-dropdown-select__field {
10154
- display: flex;
10155
- align-items: center;
10156
- gap: var(--spacing-1);
10157
- width: 100%;
10158
- position: relative;
10159
- box-sizing: border-box;
10160
- background-color: var(--input-field-color-default-background);
10161
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
10162
- border-radius: var(--input-field-radius-lg);
10163
- padding: var(--spacing-2);
10164
- padding-right: calc(var(--spacing-2) + var(--size-2xl, 2rem));
10165
- text-align: left;
10166
- cursor: pointer;
10214
+ .muka-fab--secondary {
10215
+ background-color: var(--color-surface-level3);
10167
10216
  color: var(--color-text-default-default);
10168
- transition: border-color 0.12s ease, background-color 0.12s ease;
10169
- -webkit-tap-highlight-color: transparent;
10170
10217
  }
10171
10218
 
10172
- .muka-dropdown-select__field::after {
10173
- content: '';
10174
- position: absolute;
10175
- inset: 0;
10176
- border-radius: inherit;
10177
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.08);
10178
- pointer-events: none;
10219
+ .muka-fab--secondary:hover:not(:disabled) {
10220
+ background-color: var(--color-surface-level2);
10179
10221
  }
10180
10222
 
10181
- .muka-dropdown-select__field--sm {
10182
- min-height: var(--input-field-height-sm);
10183
- border-radius: var(--input-field-radius-sm);
10184
- padding-right: calc(var(--spacing-2) + var(--size-xl, 1.5rem));
10185
- }
10223
+ /* ─── Sizes (circular by default) ─────────────────────── */
10186
10224
 
10187
- .muka-dropdown-select__field--md {
10188
- min-height: var(--input-field-height-default);
10189
- border-radius: var(--input-field-radius-md);
10225
+ .muka-fab--md {
10226
+ width: 56px;
10227
+ height: 56px;
10228
+ border-radius: 50%;
10190
10229
  }
10191
10230
 
10192
- .muka-dropdown-select__field--lg {
10193
- min-height: var(--input-field-height-lg);
10194
- border-radius: var(--input-field-radius-lg);
10231
+ .muka-fab--lg {
10232
+ width: 64px;
10233
+ height: 64px;
10234
+ border-radius: 50%;
10195
10235
  }
10196
10236
 
10197
- .muka-dropdown-select__field--focused:not(.muka-dropdown-select__field--disabled) {
10198
- border-width: var(--border-width-bold);
10199
- border-color: var(--input-field-color-focus-border);
10200
- background-color: var(--input-field-color-focus-background);
10201
- padding: calc(var(--spacing-2) - 1px);
10202
- padding-right: calc(var(--spacing-2) + var(--size-2xl, 2rem) - 1px);
10203
- }
10237
+ /* ─── Extended (pill shape with label) ────────────────── */
10204
10238
 
10205
- .muka-dropdown-select__field--sm.muka-dropdown-select__field--focused:not(.muka-dropdown-select__field--disabled) {
10239
+ .muka-fab--extended {
10240
+ width: auto;
10241
+ height: auto;
10242
+ padding: var(--spacing-3) var(--spacing-4);
10243
+ border-radius: var(--radius-full);
10244
+ }
10245
+
10246
+ .muka-fab--extended.muka-fab--lg {
10247
+ padding: var(--spacing-4) var(--spacing-5);
10248
+ }
10249
+
10250
+ .muka-fab__icon {
10251
+ display: inline-flex;
10252
+ align-items: center;
10253
+ justify-content: center;
10254
+ width: 24px;
10255
+ height: 24px;
10256
+ }
10257
+
10258
+ .muka-fab__icon svg {
10259
+ width: 100%;
10260
+ height: 100%;
10261
+ }
10262
+
10263
+ .muka-fab__label {
10264
+ font-family: var(--text-label-md-semibold-fontFamily);
10265
+ font-weight: var(--text-label-md-semibold-fontWeight);
10266
+ font-size: var(--text-label-md-semibold-fontSize);
10267
+ line-height: var(--text-label-md-semibold-lineHeight);
10268
+ }
10269
+
10270
+ /* ─── Positioning ─────────────────────────────────────── */
10271
+
10272
+ .muka-fab--bottom-right {
10273
+ right: var(--spacing-4);
10274
+ bottom: var(--spacing-4);
10275
+ }
10276
+
10277
+ .muka-fab--bottom-left {
10278
+ left: var(--spacing-4);
10279
+ bottom: var(--spacing-4);
10280
+ }
10281
+
10282
+ .muka-fab--bottom-center {
10283
+ left: 50%;
10284
+ bottom: var(--spacing-4);
10285
+ transform: translateX(-50%);
10286
+ }
10287
+
10288
+ .muka-fab--bottom-center:active {
10289
+ transform: translateX(-50%) scale(0.96);
10290
+ }
10291
+
10292
+ /* Add the iOS home-indicator inset to the bottom offset. */
10293
+ .muka-fab:not(.muka-fab--no-safe-area) {
10294
+ bottom: calc(var(--spacing-4) + env(safe-area-inset-bottom));
10295
+ }
10296
+
10297
+ /* Lateral safe-area for landscape iPhone with notch. */
10298
+ .muka-fab--bottom-right:not(.muka-fab--no-safe-area) {
10299
+ right: max(var(--spacing-4), env(safe-area-inset-right));
10300
+ }
10301
+
10302
+ .muka-fab--bottom-left:not(.muka-fab--no-safe-area) {
10303
+ left: max(var(--spacing-4), env(safe-area-inset-left));
10304
+ }
10305
+
10306
+
10307
+ /* EmojiPicker */
10308
+ /* EmojiPicker Component Styles */
10309
+
10310
+ .muka-emoji-picker {
10311
+ display: grid;
10312
+ grid-template-columns: repeat(8, 1fr);
10313
+ gap: var(--spacing-1);
10314
+ padding: var(--spacing-2);
10315
+ max-height: 12rem;
10316
+ overflow-y: auto;
10317
+ background: var(--color-surface-level2);
10318
+ border: var(--border-width-regular, 1px) solid var(--color-border-default);
10319
+ border-radius: var(--radius-lg);
10320
+ box-shadow: var(--menu-content-shadow, 0 4px 12px rgba(0, 0, 0, 0.12));
10321
+ }
10322
+
10323
+ .muka-emoji-picker__glyph {
10324
+ font-size: 1.25rem;
10325
+ line-height: 1;
10326
+ }
10327
+
10328
+
10329
+ /* DropdownSelect */
10330
+ /* DropdownSelect — Figma Dropdown Menu form field (Menu + chips) */
10331
+
10332
+ .muka-dropdown-select {
10333
+ display: inline-flex;
10334
+ flex-direction: column;
10335
+ gap: var(--spacing-2);
10336
+ min-width: 200px;
10337
+ }
10338
+
10339
+ .muka-dropdown-select--full-width {
10340
+ width: 100%;
10341
+ }
10342
+
10343
+ .muka-dropdown-select__label {
10344
+ color: var(--color-text-default-default);
10345
+ cursor: pointer;
10346
+ }
10347
+
10348
+ .muka-dropdown-select__label--sm {
10349
+ font-family: var(--text-label-sm-semibold-fontFamily);
10350
+ font-weight: var(--text-label-sm-semibold-fontWeight);
10351
+ font-size: var(--text-label-sm-semibold-fontSize);
10352
+ line-height: var(--text-label-sm-semibold-lineHeight);
10353
+ }
10354
+
10355
+ .muka-dropdown-select__label--md {
10356
+ font-family: var(--text-label-md-semibold-fontFamily);
10357
+ font-weight: var(--text-label-md-semibold-fontWeight);
10358
+ font-size: var(--text-label-md-semibold-fontSize);
10359
+ line-height: var(--text-label-md-semibold-lineHeight);
10360
+ }
10361
+
10362
+ .muka-dropdown-select__label--lg {
10363
+ font-family: var(--text-label-lg-semibold-fontFamily);
10364
+ font-weight: var(--text-label-lg-semibold-fontWeight);
10365
+ font-size: var(--text-label-lg-semibold-fontSize);
10366
+ line-height: var(--text-label-lg-semibold-lineHeight);
10367
+ }
10368
+
10369
+ .muka-dropdown-select__required {
10370
+ color: var(--color-state-error-default);
10371
+ }
10372
+
10373
+ .muka-dropdown-select__field {
10374
+ display: flex;
10375
+ align-items: center;
10376
+ gap: var(--spacing-1);
10377
+ width: 100%;
10378
+ position: relative;
10379
+ box-sizing: border-box;
10380
+ background-color: var(--input-field-color-default-background);
10381
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
10382
+ border-radius: var(--input-field-radius-lg);
10383
+ padding: var(--spacing-2);
10384
+ padding-right: calc(var(--spacing-2) + var(--size-2xl, 2rem));
10385
+ text-align: left;
10386
+ cursor: pointer;
10387
+ color: var(--color-text-default-default);
10388
+ transition: border-color 0.12s ease, background-color 0.12s ease;
10389
+ -webkit-tap-highlight-color: transparent;
10390
+ }
10391
+
10392
+ .muka-dropdown-select__field::after {
10393
+ content: '';
10394
+ position: absolute;
10395
+ inset: 0;
10396
+ border-radius: inherit;
10397
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.08);
10398
+ pointer-events: none;
10399
+ }
10400
+
10401
+ .muka-dropdown-select__field--sm {
10402
+ min-height: var(--input-field-height-sm);
10403
+ border-radius: var(--input-field-radius-sm);
10404
+ padding-right: calc(var(--spacing-2) + var(--size-xl, 1.5rem));
10405
+ }
10406
+
10407
+ .muka-dropdown-select__field--md {
10408
+ min-height: var(--input-field-height-default);
10409
+ border-radius: var(--input-field-radius-md);
10410
+ }
10411
+
10412
+ .muka-dropdown-select__field--lg {
10413
+ min-height: var(--input-field-height-lg);
10414
+ border-radius: var(--input-field-radius-lg);
10415
+ }
10416
+
10417
+ .muka-dropdown-select__field--focused:not(.muka-dropdown-select__field--disabled) {
10418
+ border-width: var(--border-width-bold);
10419
+ border-color: var(--input-field-color-focus-border);
10420
+ background-color: var(--input-field-color-focus-background);
10421
+ padding: calc(var(--spacing-2) - 1px);
10422
+ padding-right: calc(var(--spacing-2) + var(--size-2xl, 2rem) - 1px);
10423
+ }
10424
+
10425
+ .muka-dropdown-select__field--sm.muka-dropdown-select__field--focused:not(.muka-dropdown-select__field--disabled) {
10206
10426
  padding-right: calc(var(--spacing-2) + var(--size-xl, 1.5rem) - 1px);
10207
10427
  }
10208
10428
 
@@ -10490,314 +10710,35 @@ li.muka-listitem {
10490
10710
  }
10491
10711
 
10492
10712
 
10493
- /* DocumentViewer */
10494
- /* DocumentViewer Component Styles - Using Muka Design Tokens */
10713
+ /* Divider */
10714
+ /* Divider Component Styles - Using Muka Design Tokens */
10495
10715
 
10496
- .muka-documentviewer {
10497
- display: flex;
10498
- flex-direction: column;
10499
- background-color: var(--documentviewer-container-background);
10500
- border-radius: var(--documentviewer-container-borderRadius);
10501
- overflow: hidden;
10502
- position: relative;
10716
+ .muka-divider {
10717
+ flex-shrink: 0;
10503
10718
  }
10504
10719
 
10505
- .muka-documentviewer--fullscreen {
10506
- position: fixed;
10507
- top: 0;
10508
- left: 0;
10509
- right: 0;
10510
- bottom: 0;
10511
- width: 100vw;
10512
- height: 100vh;
10513
- z-index: 9999;
10514
- border-radius: 0;
10720
+ .muka-divider--horizontal {
10721
+ width: 100%;
10722
+ height: var(--separator-width);
10515
10723
  }
10516
10724
 
10517
- /* Toolbar */
10518
- .muka-documentviewer__toolbar {
10519
- display: flex;
10520
- align-items: center;
10521
- justify-content: space-between;
10522
- height: var(--documentviewer-toolbar-height);
10523
- padding: var(--documentviewer-toolbar-padding-y) var(--documentviewer-toolbar-padding-x);
10524
- background-color: var(--documentviewer-toolbar-background);
10525
- border-bottom: 1px solid var(--documentviewer-toolbar-border);
10526
- gap: var(--documentviewer-toolbar-gap);
10527
- flex-shrink: 0;
10725
+ .muka-divider--vertical {
10726
+ height: 100%;
10727
+ width: var(--separator-width);
10728
+ align-self: stretch;
10528
10729
  }
10529
10730
 
10530
- .muka-documentviewer__toolbar-section {
10531
- display: flex;
10532
- align-items: center;
10533
- gap: var(--documentviewer-toolbar-gap);
10731
+ .muka-divider--default {
10732
+ background-color: var(--separator-color-default);
10534
10733
  }
10535
10734
 
10536
- .muka-documentviewer__toolbar-section--center {
10537
- flex: 1;
10538
- justify-content: center;
10735
+ .muka-divider--contrast {
10736
+ background-color: var(--separator-color-contrast);
10539
10737
  }
10540
10738
 
10541
- .muka-documentviewer__toolbar-section--end {
10542
- justify-content: flex-end;
10543
- }
10544
10739
 
10545
- /* Page navigation */
10546
- .muka-documentviewer__page-input {
10547
- display: flex;
10548
- align-items: center;
10549
- gap: var(--spacing-1);
10550
- }
10551
-
10552
- .muka-documentviewer__page-number {
10553
- width: 3rem;
10554
- padding: var(--spacing-1) var(--spacing-2);
10555
- text-align: center;
10556
- font-family: var(--alias-font-brand-family);
10557
- font-size: var(--text-label-sm-fontSize);
10558
- line-height: var(--text-label-sm-lineHeight);
10559
- border: 1px solid var(--color-border-default);
10560
- border-radius: var(--border-radius-md);
10561
- background-color: var(--color-surface-level0);
10562
- color: var(--color-text-default-default);
10563
- }
10564
-
10565
- .muka-documentviewer__page-number:focus {
10566
- outline: 2px solid var(--color-border-focus);
10567
- outline-offset: 0;
10568
- border-color: var(--color-border-focus);
10569
- }
10570
-
10571
- .muka-documentviewer__page-total {
10572
- font-family: var(--alias-font-brand-family);
10573
- font-size: var(--text-label-sm-fontSize);
10574
- color: var(--color-text-subtle-default);
10575
- }
10576
-
10577
- /* Zoom controls */
10578
- .muka-documentviewer__zoom-display {
10579
- min-width: var(--documentviewer-zoom-button-width);
10580
- padding: var(--spacing-1) var(--spacing-2);
10581
- font-family: var(--alias-font-brand-family);
10582
- font-size: var(--text-label-sm-fontSize);
10583
- font-weight: var(--alias-font-brand-weight-semibold);
10584
- color: var(--color-text-default-default);
10585
- background: transparent;
10586
- border: none;
10587
- border-radius: var(--border-radius-md);
10588
- cursor: pointer;
10589
- transition: background-color 0.2s ease;
10590
- }
10591
-
10592
- .muka-documentviewer__zoom-display:hover {
10593
- background-color: var(--color-surface-level2);
10594
- }
10595
-
10596
- .muka-documentviewer__zoom-display:focus {
10597
- outline: 2px solid var(--color-border-focus);
10598
- outline-offset: 0;
10599
- }
10600
-
10601
- /* Content area */
10602
- .muka-documentviewer__content {
10603
- display: flex;
10604
- flex: 1;
10605
- overflow: hidden;
10606
- }
10607
-
10608
- .muka-documentviewer__main {
10609
- flex: 1;
10610
- display: flex;
10611
- flex-direction: column;
10612
- overflow: hidden;
10613
- position: relative;
10614
- }
10615
-
10616
- /* Canvas */
10617
- .muka-documentviewer__canvas {
10618
- flex: 1;
10619
- background-color: var(--documentviewer-canvas-background);
10620
- padding: var(--documentviewer-canvas-padding);
10621
- overflow: auto;
10622
- display: flex;
10623
- align-items: flex-start;
10624
- justify-content: center;
10625
- }
10626
-
10627
- .muka-documentviewer__page {
10628
- background-color: var(--documentviewer-page-background);
10629
- box-shadow: var(--documentviewer-page-shadow);
10630
- border-radius: var(--documentviewer-page-borderRadius);
10631
- overflow: hidden;
10632
- }
10633
-
10634
- .muka-documentviewer__page canvas {
10635
- display: block;
10636
- max-width: 100%;
10637
- height: auto;
10638
- }
10639
-
10640
- .muka-documentviewer__page-number {
10641
- text-align: center;
10642
- padding: var(--spacing-2);
10643
- font-family: var(--alias-font-brand-family);
10644
- font-size: var(--text-label-sm-fontSize);
10645
- color: var(--color-text-subtle-default);
10646
- }
10647
-
10648
- /* Thumbnails */
10649
- .muka-documentviewer__thumbnails {
10650
- width: var(--documentviewer-thumbnails-width);
10651
- background-color: var(--documentviewer-thumbnails-background);
10652
- border-right: 1px solid var(--documentviewer-thumbnails-border);
10653
- overflow-y: auto;
10654
- flex-shrink: 0;
10655
- }
10656
-
10657
- .muka-documentviewer__thumbnails-list {
10658
- display: flex;
10659
- flex-direction: column;
10660
- gap: var(--documentviewer-thumbnails-item-gap);
10661
- padding: var(--spacing-2);
10662
- }
10663
-
10664
- .muka-documentviewer__thumbnail-item {
10665
- display: flex;
10666
- flex-direction: column;
10667
- align-items: center;
10668
- gap: var(--spacing-1);
10669
- padding: var(--documentviewer-thumbnails-item-padding);
10670
- border-radius: var(--documentviewer-thumbnails-item-borderRadius);
10671
- border: 2px solid var(--documentviewer-thumbnails-item-border-default);
10672
- background-color: var(--documentviewer-thumbnails-item-background-default);
10673
- cursor: pointer;
10674
- transition: all 0.2s ease;
10675
- width: 100%;
10676
- }
10677
-
10678
- .muka-documentviewer__thumbnail-item:hover {
10679
- background-color: var(--documentviewer-thumbnails-item-background-hover);
10680
- }
10681
-
10682
- .muka-documentviewer__thumbnail-item--selected {
10683
- background-color: var(--documentviewer-thumbnails-item-background-selected);
10684
- border-color: var(--documentviewer-thumbnails-item-border-selected);
10685
- }
10686
-
10687
- .muka-documentviewer__thumbnail-item:focus {
10688
- outline: 2px solid var(--color-border-focus);
10689
- outline-offset: 2px;
10690
- }
10691
-
10692
- .muka-documentviewer__thumbnail-preview {
10693
- width: 100%;
10694
- overflow: hidden;
10695
- border-radius: var(--border-radius-sm);
10696
- }
10697
-
10698
- .muka-documentviewer__thumbnail-preview canvas {
10699
- display: block;
10700
- width: 100%;
10701
- height: auto;
10702
- }
10703
-
10704
- .muka-documentviewer__thumbnail-label {
10705
- font-family: var(--alias-font-brand-family);
10706
- font-size: var(--text-label-xs-regular-fontSize);
10707
- color: var(--color-text-default-default);
10708
- font-weight: var(--alias-font-brand-weight-medium);
10709
- }
10710
-
10711
- /* Loading state */
10712
- .muka-documentviewer__loading {
10713
- display: flex;
10714
- align-items: center;
10715
- justify-content: center;
10716
- flex: 1;
10717
- background-color: var(--documentviewer-loading-overlay-background);
10718
- }
10719
-
10720
- /* Error state */
10721
- .muka-documentviewer__error {
10722
- display: flex;
10723
- align-items: center;
10724
- justify-content: center;
10725
- flex: 1;
10726
- padding: var(--spacing-4);
10727
- background-color: var(--documentviewer-error-background);
10728
- }
10729
-
10730
- /* Accessibility - visually hidden */
10731
- .visually-hidden {
10732
- position: absolute;
10733
- width: 1px;
10734
- height: 1px;
10735
- margin: -1px;
10736
- padding: 0;
10737
- overflow: hidden;
10738
- clip: rect(0, 0, 0, 0);
10739
- white-space: nowrap;
10740
- border-width: 0;
10741
- }
10742
-
10743
- /* React-PDF specific styles */
10744
- .react-pdf__Document {
10745
- display: flex;
10746
- flex-direction: column;
10747
- align-items: center;
10748
- }
10749
-
10750
- .react-pdf__Page {
10751
- max-width: 100%;
10752
- box-shadow: var(--documentviewer-page-shadow);
10753
- border-radius: var(--documentviewer-page-borderRadius);
10754
- overflow: hidden;
10755
- }
10756
-
10757
- .react-pdf__Page__canvas {
10758
- max-width: 100%;
10759
- height: auto !important;
10760
- display: block;
10761
- }
10762
-
10763
- .react-pdf__Page__textContent {
10764
- max-width: 100%;
10765
- }
10766
-
10767
- .react-pdf__Page__annotations {
10768
- max-width: 100%;
10769
- }
10770
-
10771
-
10772
- /* Divider */
10773
- /* Divider Component Styles - Using Muka Design Tokens */
10774
-
10775
- .muka-divider {
10776
- flex-shrink: 0;
10777
- }
10778
-
10779
- .muka-divider--horizontal {
10780
- width: 100%;
10781
- height: var(--separator-width);
10782
- }
10783
-
10784
- .muka-divider--vertical {
10785
- height: 100%;
10786
- width: var(--separator-width);
10787
- align-self: stretch;
10788
- }
10789
-
10790
- .muka-divider--default {
10791
- background-color: var(--separator-color-default);
10792
- }
10793
-
10794
- .muka-divider--contrast {
10795
- background-color: var(--separator-color-contrast);
10796
- }
10797
-
10798
-
10799
- /* Dialog */
10800
- /* Dialog Component Styles */
10740
+ /* Dialog */
10741
+ /* Dialog Component Styles */
10801
10742
 
10802
10743
  /* ─── Native dialog reset ─────────────────────────────── */
10803
10744
 
@@ -10837,6 +10778,7 @@ li.muka-listitem {
10837
10778
  height: 100%;
10838
10779
  max-width: 100vw;
10839
10780
  max-height: 100vh;
10781
+ max-height: 100dvh;
10840
10782
  margin: 0;
10841
10783
  display: flex;
10842
10784
  flex-direction: column;
@@ -10871,6 +10813,8 @@ li.muka-listitem {
10871
10813
 
10872
10814
  .muka-dialog--lg .muka-dialog__surface {
10873
10815
  height: calc(100vh - var(--dialog-margin-top-mobile));
10816
+ /* dvh tracks the visible area as mobile toolbars show and hide */
10817
+ height: calc(100dvh - var(--dialog-margin-top-mobile));
10874
10818
  }
10875
10819
 
10876
10820
  /* Body */
@@ -11064,6 +11008,285 @@ li.muka-listitem {
11064
11008
  }
11065
11009
 
11066
11010
 
11011
+ /* DocumentViewer */
11012
+ /* DocumentViewer Component Styles - Using Muka Design Tokens */
11013
+
11014
+ .muka-documentviewer {
11015
+ display: flex;
11016
+ flex-direction: column;
11017
+ background-color: var(--documentviewer-container-background);
11018
+ border-radius: var(--documentviewer-container-borderRadius);
11019
+ overflow: hidden;
11020
+ position: relative;
11021
+ }
11022
+
11023
+ .muka-documentviewer--fullscreen {
11024
+ position: fixed;
11025
+ top: 0;
11026
+ left: 0;
11027
+ right: 0;
11028
+ bottom: 0;
11029
+ width: 100vw;
11030
+ height: 100vh;
11031
+ z-index: 9999;
11032
+ border-radius: 0;
11033
+ }
11034
+
11035
+ /* Toolbar */
11036
+ .muka-documentviewer__toolbar {
11037
+ display: flex;
11038
+ align-items: center;
11039
+ justify-content: space-between;
11040
+ height: var(--documentviewer-toolbar-height);
11041
+ padding: var(--documentviewer-toolbar-padding-y) var(--documentviewer-toolbar-padding-x);
11042
+ background-color: var(--documentviewer-toolbar-background);
11043
+ border-bottom: 1px solid var(--documentviewer-toolbar-border);
11044
+ gap: var(--documentviewer-toolbar-gap);
11045
+ flex-shrink: 0;
11046
+ }
11047
+
11048
+ .muka-documentviewer__toolbar-section {
11049
+ display: flex;
11050
+ align-items: center;
11051
+ gap: var(--documentviewer-toolbar-gap);
11052
+ }
11053
+
11054
+ .muka-documentviewer__toolbar-section--center {
11055
+ flex: 1;
11056
+ justify-content: center;
11057
+ }
11058
+
11059
+ .muka-documentviewer__toolbar-section--end {
11060
+ justify-content: flex-end;
11061
+ }
11062
+
11063
+ /* Page navigation */
11064
+ .muka-documentviewer__page-input {
11065
+ display: flex;
11066
+ align-items: center;
11067
+ gap: var(--spacing-1);
11068
+ }
11069
+
11070
+ .muka-documentviewer__page-number {
11071
+ width: 3rem;
11072
+ padding: var(--spacing-1) var(--spacing-2);
11073
+ text-align: center;
11074
+ font-family: var(--alias-font-brand-family);
11075
+ font-size: var(--text-label-sm-fontSize);
11076
+ line-height: var(--text-label-sm-lineHeight);
11077
+ border: 1px solid var(--color-border-default);
11078
+ border-radius: var(--border-radius-md);
11079
+ background-color: var(--color-surface-level0);
11080
+ color: var(--color-text-default-default);
11081
+ }
11082
+
11083
+ .muka-documentviewer__page-number:focus {
11084
+ outline: 2px solid var(--color-border-focus);
11085
+ outline-offset: 0;
11086
+ border-color: var(--color-border-focus);
11087
+ }
11088
+
11089
+ .muka-documentviewer__page-total {
11090
+ font-family: var(--alias-font-brand-family);
11091
+ font-size: var(--text-label-sm-fontSize);
11092
+ color: var(--color-text-subtle-default);
11093
+ }
11094
+
11095
+ /* Zoom controls */
11096
+ .muka-documentviewer__zoom-display {
11097
+ min-width: var(--documentviewer-zoom-button-width);
11098
+ padding: var(--spacing-1) var(--spacing-2);
11099
+ font-family: var(--alias-font-brand-family);
11100
+ font-size: var(--text-label-sm-fontSize);
11101
+ font-weight: var(--alias-font-brand-weight-semibold);
11102
+ color: var(--color-text-default-default);
11103
+ background: transparent;
11104
+ border: none;
11105
+ border-radius: var(--border-radius-md);
11106
+ cursor: pointer;
11107
+ transition: background-color 0.2s ease;
11108
+ }
11109
+
11110
+ .muka-documentviewer__zoom-display:hover {
11111
+ background-color: var(--color-surface-level2);
11112
+ }
11113
+
11114
+ .muka-documentviewer__zoom-display:focus {
11115
+ outline: 2px solid var(--color-border-focus);
11116
+ outline-offset: 0;
11117
+ }
11118
+
11119
+ /* Content area */
11120
+ .muka-documentviewer__content {
11121
+ display: flex;
11122
+ flex: 1;
11123
+ overflow: hidden;
11124
+ }
11125
+
11126
+ .muka-documentviewer__main {
11127
+ flex: 1;
11128
+ display: flex;
11129
+ flex-direction: column;
11130
+ overflow: hidden;
11131
+ position: relative;
11132
+ }
11133
+
11134
+ /* Canvas */
11135
+ .muka-documentviewer__canvas {
11136
+ flex: 1;
11137
+ background-color: var(--documentviewer-canvas-background);
11138
+ padding: var(--documentviewer-canvas-padding);
11139
+ overflow: auto;
11140
+ display: flex;
11141
+ align-items: flex-start;
11142
+ justify-content: center;
11143
+ }
11144
+
11145
+ .muka-documentviewer__page {
11146
+ background-color: var(--documentviewer-page-background);
11147
+ box-shadow: var(--documentviewer-page-shadow);
11148
+ border-radius: var(--documentviewer-page-borderRadius);
11149
+ overflow: hidden;
11150
+ }
11151
+
11152
+ .muka-documentviewer__page canvas {
11153
+ display: block;
11154
+ max-width: 100%;
11155
+ height: auto;
11156
+ }
11157
+
11158
+ .muka-documentviewer__page-number {
11159
+ text-align: center;
11160
+ padding: var(--spacing-2);
11161
+ font-family: var(--alias-font-brand-family);
11162
+ font-size: var(--text-label-sm-fontSize);
11163
+ color: var(--color-text-subtle-default);
11164
+ }
11165
+
11166
+ /* Thumbnails */
11167
+ .muka-documentviewer__thumbnails {
11168
+ width: var(--documentviewer-thumbnails-width);
11169
+ background-color: var(--documentviewer-thumbnails-background);
11170
+ border-right: 1px solid var(--documentviewer-thumbnails-border);
11171
+ overflow-y: auto;
11172
+ flex-shrink: 0;
11173
+ }
11174
+
11175
+ .muka-documentviewer__thumbnails-list {
11176
+ display: flex;
11177
+ flex-direction: column;
11178
+ gap: var(--documentviewer-thumbnails-item-gap);
11179
+ padding: var(--spacing-2);
11180
+ }
11181
+
11182
+ .muka-documentviewer__thumbnail-item {
11183
+ display: flex;
11184
+ flex-direction: column;
11185
+ align-items: center;
11186
+ gap: var(--spacing-1);
11187
+ padding: var(--documentviewer-thumbnails-item-padding);
11188
+ border-radius: var(--documentviewer-thumbnails-item-borderRadius);
11189
+ border: 2px solid var(--documentviewer-thumbnails-item-border-default);
11190
+ background-color: var(--documentviewer-thumbnails-item-background-default);
11191
+ cursor: pointer;
11192
+ transition: all 0.2s ease;
11193
+ width: 100%;
11194
+ }
11195
+
11196
+ .muka-documentviewer__thumbnail-item:hover {
11197
+ background-color: var(--documentviewer-thumbnails-item-background-hover);
11198
+ }
11199
+
11200
+ .muka-documentviewer__thumbnail-item--selected {
11201
+ background-color: var(--documentviewer-thumbnails-item-background-selected);
11202
+ border-color: var(--documentviewer-thumbnails-item-border-selected);
11203
+ }
11204
+
11205
+ .muka-documentviewer__thumbnail-item:focus {
11206
+ outline: 2px solid var(--color-border-focus);
11207
+ outline-offset: 2px;
11208
+ }
11209
+
11210
+ .muka-documentviewer__thumbnail-preview {
11211
+ width: 100%;
11212
+ overflow: hidden;
11213
+ border-radius: var(--border-radius-sm);
11214
+ }
11215
+
11216
+ .muka-documentviewer__thumbnail-preview canvas {
11217
+ display: block;
11218
+ width: 100%;
11219
+ height: auto;
11220
+ }
11221
+
11222
+ .muka-documentviewer__thumbnail-label {
11223
+ font-family: var(--alias-font-brand-family);
11224
+ font-size: var(--text-label-xs-regular-fontSize);
11225
+ color: var(--color-text-default-default);
11226
+ font-weight: var(--alias-font-brand-weight-medium);
11227
+ }
11228
+
11229
+ /* Loading state */
11230
+ .muka-documentviewer__loading {
11231
+ display: flex;
11232
+ align-items: center;
11233
+ justify-content: center;
11234
+ flex: 1;
11235
+ background-color: var(--documentviewer-loading-overlay-background);
11236
+ }
11237
+
11238
+ /* Error state */
11239
+ .muka-documentviewer__error {
11240
+ display: flex;
11241
+ align-items: center;
11242
+ justify-content: center;
11243
+ flex: 1;
11244
+ padding: var(--spacing-4);
11245
+ background-color: var(--documentviewer-error-background);
11246
+ }
11247
+
11248
+ /* Accessibility - visually hidden */
11249
+ .visually-hidden {
11250
+ position: absolute;
11251
+ width: 1px;
11252
+ height: 1px;
11253
+ margin: -1px;
11254
+ padding: 0;
11255
+ overflow: hidden;
11256
+ clip: rect(0, 0, 0, 0);
11257
+ white-space: nowrap;
11258
+ border-width: 0;
11259
+ }
11260
+
11261
+ /* React-PDF specific styles */
11262
+ .react-pdf__Document {
11263
+ display: flex;
11264
+ flex-direction: column;
11265
+ align-items: center;
11266
+ }
11267
+
11268
+ .react-pdf__Page {
11269
+ max-width: 100%;
11270
+ box-shadow: var(--documentviewer-page-shadow);
11271
+ border-radius: var(--documentviewer-page-borderRadius);
11272
+ overflow: hidden;
11273
+ }
11274
+
11275
+ .react-pdf__Page__canvas {
11276
+ max-width: 100%;
11277
+ height: auto !important;
11278
+ display: block;
11279
+ }
11280
+
11281
+ .react-pdf__Page__textContent {
11282
+ max-width: 100%;
11283
+ }
11284
+
11285
+ .react-pdf__Page__annotations {
11286
+ max-width: 100%;
11287
+ }
11288
+
11289
+
11067
11290
  /* DatePicker */
11068
11291
  /* DatePicker — compact native date field. */
11069
11292
  /* Field/label/helper styling is inherited from ../Input/Input.css. */
@@ -11616,7 +11839,10 @@ li.muka-listitem {
11616
11839
  fill: none;
11617
11840
  /* Subtle lift on the filled segment, matching the Figma elevation */
11618
11841
  filter: drop-shadow(0 2px 4px var(--color-black-alpha-5, rgba(0, 0, 0, 0.05)));
11619
- transition: stroke-dasharray 0.3s ease;
11842
+ /* Butt caps keep the always-rendered 0% arc invisible (round caps would draw a dot) */
11843
+ stroke-linecap: butt;
11844
+ /* view duration (300ms) reads at the 24px size; tokens zero it for reduced motion */
11845
+ transition: stroke-dasharray var(--motion-duration-view) var(--motion-easing-default);
11620
11846
  }
11621
11847
 
11622
11848
  /* ─── Indeterminate (spinner) ─────────────────────────── */