@revikornmann/muka-ui 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +81 -60
  2. package/cli/bin/muka-ui.js +12 -5
  3. package/cli/commands/brand.js +33 -14
  4. package/cli/commands/init.js +21 -17
  5. package/cli/commands/install-skill.js +84 -26
  6. package/cli/templates/AGENTS.md +128 -0
  7. package/cli/templates/CLAUDE.md +8 -88
  8. package/cli/templates/muka-ui-guidelines.md +50 -14
  9. package/dist/cjs/components/Combobox/Combobox.css +116 -132
  10. package/dist/cjs/components/Combobox/Combobox.js +175 -52
  11. package/dist/cjs/components/Combobox/Combobox.js.map +1 -1
  12. package/dist/cjs/components/Combobox/index.js.map +1 -1
  13. package/dist/cjs/components/DropdownSelect/DropdownSelect.css +225 -0
  14. package/dist/cjs/components/DropdownSelect/DropdownSelect.js +106 -0
  15. package/dist/cjs/components/DropdownSelect/DropdownSelect.js.map +1 -0
  16. package/dist/cjs/components/DropdownSelect/index.js +6 -0
  17. package/dist/cjs/components/DropdownSelect/index.js.map +1 -0
  18. package/dist/cjs/components/Icon/custom/ArrowReturnIcon.js +11 -0
  19. package/dist/cjs/components/Icon/custom/ArrowReturnIcon.js.map +1 -0
  20. package/dist/cjs/components/Icon/iconRegistry.js +5 -0
  21. package/dist/cjs/components/Icon/iconRegistry.js.map +1 -1
  22. package/dist/cjs/components/Input/Input.css +45 -8
  23. package/dist/cjs/components/Input/Input.js +14 -3
  24. package/dist/cjs/components/Input/Input.js.map +1 -1
  25. package/dist/cjs/components/Menu/Menu.css +123 -37
  26. package/dist/cjs/components/Menu/Menu.js +283 -25
  27. package/dist/cjs/components/Menu/Menu.js.map +1 -1
  28. package/dist/cjs/components/ProgressTracker/ProgressTracker.css +273 -22
  29. package/dist/cjs/components/ProgressTracker/ProgressTracker.js +109 -9
  30. package/dist/cjs/components/ProgressTracker/ProgressTracker.js.map +1 -1
  31. package/dist/cjs/components/Scrollbar/Scrollbar.css +7 -6
  32. package/dist/cjs/components/index.js +5 -3
  33. package/dist/cjs/components/index.js.map +1 -1
  34. package/dist/esm/components/Combobox/Combobox.css +116 -132
  35. package/dist/esm/components/Combobox/Combobox.js +177 -54
  36. package/dist/esm/components/Combobox/Combobox.js.map +1 -1
  37. package/dist/esm/components/Combobox/index.js +1 -1
  38. package/dist/esm/components/Combobox/index.js.map +1 -1
  39. package/dist/esm/components/DropdownSelect/DropdownSelect.css +225 -0
  40. package/dist/esm/components/DropdownSelect/DropdownSelect.js +102 -0
  41. package/dist/esm/components/DropdownSelect/DropdownSelect.js.map +1 -0
  42. package/dist/esm/components/DropdownSelect/index.js +2 -0
  43. package/dist/esm/components/DropdownSelect/index.js.map +1 -0
  44. package/dist/esm/components/Icon/custom/ArrowReturnIcon.js +7 -0
  45. package/dist/esm/components/Icon/custom/ArrowReturnIcon.js.map +1 -0
  46. package/dist/esm/components/Icon/iconRegistry.js +5 -0
  47. package/dist/esm/components/Icon/iconRegistry.js.map +1 -1
  48. package/dist/esm/components/Input/Input.css +45 -8
  49. package/dist/esm/components/Input/Input.js +14 -3
  50. package/dist/esm/components/Input/Input.js.map +1 -1
  51. package/dist/esm/components/Menu/Menu.css +123 -37
  52. package/dist/esm/components/Menu/Menu.js +284 -26
  53. package/dist/esm/components/Menu/Menu.js.map +1 -1
  54. package/dist/esm/components/ProgressTracker/ProgressTracker.css +273 -22
  55. package/dist/esm/components/ProgressTracker/ProgressTracker.js +110 -10
  56. package/dist/esm/components/ProgressTracker/ProgressTracker.js.map +1 -1
  57. package/dist/esm/components/Scrollbar/Scrollbar.css +7 -6
  58. package/dist/esm/components/index.js +1 -0
  59. package/dist/esm/components/index.js.map +1 -1
  60. package/dist/styles/components/Combobox.css +116 -132
  61. package/dist/styles/components/DropdownSelect.css +225 -0
  62. package/dist/styles/components/Input.css +45 -8
  63. package/dist/styles/components/Menu.css +123 -37
  64. package/dist/styles/components/ProgressTracker.css +273 -22
  65. package/dist/styles/components/Scrollbar.css +7 -6
  66. package/dist/styles/components/Typography.css +89 -0
  67. package/dist/styles/index.css +1285 -605
  68. package/dist/styles/muka-dark.css +1285 -605
  69. package/dist/styles/muka-light.css +1285 -605
  70. package/dist/styles/tokens-bouwplan-dark.css +5 -4
  71. package/dist/styles/tokens-bouwplan-light.css +5 -4
  72. package/dist/styles/tokens-fscl-dark.css +25 -24
  73. package/dist/styles/tokens-fscl-light.css +25 -24
  74. package/dist/styles/tokens-grip-dark.css +4 -3
  75. package/dist/styles/tokens-grip-light.css +4 -3
  76. package/dist/styles/tokens-muka-dark.css +4 -3
  77. package/dist/styles/tokens-muka-light.css +4 -3
  78. package/dist/styles/tokens-wireframe-dark.css +49 -48
  79. package/dist/styles/tokens-wireframe-light.css +49 -48
  80. package/dist/styles/wireframe-dark.css +1330 -650
  81. package/dist/styles/wireframe-light.css +1330 -650
  82. package/dist/types/components/Combobox/Combobox.d.ts +38 -38
  83. package/dist/types/components/Combobox/Combobox.d.ts.map +1 -1
  84. package/dist/types/components/Combobox/index.d.ts +1 -1
  85. package/dist/types/components/Combobox/index.d.ts.map +1 -1
  86. package/dist/types/components/DropdownSelect/DropdownSelect.d.ts +71 -0
  87. package/dist/types/components/DropdownSelect/DropdownSelect.d.ts.map +1 -0
  88. package/dist/types/components/DropdownSelect/index.d.ts +2 -0
  89. package/dist/types/components/DropdownSelect/index.d.ts.map +1 -0
  90. package/dist/types/components/Icon/custom/ArrowReturnIcon.d.ts +9 -0
  91. package/dist/types/components/Icon/custom/ArrowReturnIcon.d.ts.map +1 -0
  92. package/dist/types/components/Icon/iconRegistry.d.ts.map +1 -1
  93. package/dist/types/components/Input/Input.d.ts +5 -0
  94. package/dist/types/components/Input/Input.d.ts.map +1 -1
  95. package/dist/types/components/Menu/Menu.d.ts +42 -2
  96. package/dist/types/components/Menu/Menu.d.ts.map +1 -1
  97. package/dist/types/components/ProgressTracker/ProgressTracker.d.ts +29 -8
  98. package/dist/types/components/ProgressTracker/ProgressTracker.d.ts.map +1 -1
  99. package/dist/types/components/index.d.ts +1 -0
  100. package/dist/types/components/index.d.ts.map +1 -1
  101. package/docs/consumers/README.md +116 -37
  102. package/docs/consumers/brand.md +261 -0
  103. package/docs/consumers/figma-console-mcp.md +116 -0
  104. package/docs/consumers/setup-instructions.md +98 -12
  105. package/docs/consumers/skills.md +79 -0
  106. package/package.json +4 -6
  107. package/scripts/postinstall-nudge.js +8 -4
  108. package/skills/add-brand/SKILL.md +204 -0
  109. package/skills/add-brand/reference.md +160 -0
  110. package/skills/figma-to-code/SKILL.md +127 -0
  111. package/skills/pull-from-figma/SKILL.md +123 -0
  112. package/skills/push-to-figma/SKILL.md +172 -0
  113. package/skills/setup-muka/SKILL.md +73 -13
  114. package/tokens/README.md +39 -17
  115. package/tokens/t2-alias/brand/bouwplan/fonts.json +1 -1
  116. package/tokens/t2-alias/brand/fscl/fonts.json +3 -3
  117. package/tokens/t2-alias/brand/wireframe/fonts.json +2 -2
  118. package/tokens/t4-components/menu.json +8 -3
@@ -50,32 +50,62 @@
50
50
  .muka-menu__search {
51
51
  display: flex;
52
52
  align-items: center;
53
- gap: var(--spacing-2);
54
53
  flex-shrink: 0;
55
- height: var(--size-3xl, 48px);
56
- padding: 0 var(--spacing-4);
54
+ /* Figma dropdown filter header: 48px, 8px inset, 32px icon slots. */
55
+ height: var(--input-field-height-lg, 3rem);
56
+ padding: 0 var(--spacing-2);
57
57
  border-bottom: var(--border-width-regular) solid var(--color-border-default);
58
58
  }
59
59
 
60
- .muka-menu__search-icon {
60
+ .muka-menu__search--sm {
61
+ height: calc(var(--size-xl, 1.5rem) + var(--spacing-2) * 2);
62
+ }
63
+
64
+ .muka-menu__search-icon,
65
+ .muka-menu__search-clear {
61
66
  display: flex;
67
+ align-items: center;
68
+ justify-content: center;
62
69
  flex-shrink: 0;
70
+ width: var(--size-2xl, 2rem);
71
+ height: var(--size-2xl, 2rem);
72
+ color: var(--color-text-subtle-default);
73
+ }
74
+
75
+ .muka-menu__search-icon .muka-icon,
76
+ .muka-menu__search-clear .muka-icon,
77
+ .muka-menu__search-clear:hover,
78
+ .muka-menu__search-clear:hover .muka-icon {
63
79
  color: var(--color-text-subtle-default);
64
80
  }
65
81
 
82
+ .muka-menu__search--sm .muka-menu__search-icon,
83
+ .muka-menu__search--sm .muka-menu__search-clear {
84
+ width: var(--size-xl, 1.5rem);
85
+ height: var(--size-xl, 1.5rem);
86
+ }
87
+
66
88
  .muka-menu__search-input {
67
89
  flex: 1 1 auto;
68
90
  min-width: 0;
69
91
  border: none;
70
92
  outline: none;
71
93
  background: transparent;
72
- font-family: var(--text-label-md-regular-font-family);
73
- font-size: var(--text-label-md-regular-font-size);
74
- font-weight: var(--text-label-md-regular-font-weight);
75
- line-height: var(--text-label-md-regular-line-height);
94
+ padding: 0 var(--spacing-1);
95
+ font-family: var(--text-input-md-fontFamily);
96
+ font-size: var(--text-input-md-fontSize);
97
+ font-weight: var(--text-input-md-fontWeight);
98
+ line-height: var(--text-input-md-lineHeight);
76
99
  color: var(--color-text-default-default);
77
100
  }
78
101
 
102
+ .muka-menu__search--sm .muka-menu__search-input {
103
+ font-family: var(--text-input-sm-fontFamily);
104
+ font-size: var(--text-input-sm-fontSize);
105
+ font-weight: var(--text-input-sm-fontWeight);
106
+ line-height: var(--text-input-sm-lineHeight);
107
+ }
108
+
79
109
  .muka-menu__search-input::placeholder {
80
110
  color: var(--color-text-subtle-default);
81
111
  }
@@ -86,22 +116,27 @@
86
116
  appearance: none;
87
117
  }
88
118
 
89
- .muka-menu__search-clear {
119
+ .muka-menu__empty {
90
120
  display: flex;
91
121
  align-items: center;
92
- justify-content: center;
93
- flex-shrink: 0;
122
+ min-height: var(--menu-item-height);
123
+ padding: var(--menu-item-padding-y) var(--menu-item-padding-x);
124
+ color: var(--color-text-subtle-default);
125
+ font-family: var(--text-input-md-fontFamily);
126
+ font-size: var(--text-input-md-fontSize);
127
+ font-weight: var(--text-input-md-fontWeight);
128
+ line-height: var(--text-input-md-lineHeight);
129
+ pointer-events: none;
130
+ user-select: none;
131
+ }
132
+
133
+ .muka-menu__search-clear {
94
134
  padding: 0;
95
135
  border: none;
96
136
  background: transparent;
97
- color: var(--color-text-subtle-default);
98
137
  cursor: pointer;
99
138
  }
100
139
 
101
- .muka-menu__search-clear:hover {
102
- color: var(--color-text-default-default);
103
- }
104
-
105
140
  .muka-menu__match {
106
141
  font-weight: var(--font-weight-bold, 700);
107
142
  }
@@ -138,22 +173,26 @@
138
173
  /* ─── Menu Item ──────────────────────────────────────────────────────────── */
139
174
 
140
175
  .muka-menu__item {
176
+ position: relative;
141
177
  display: flex;
142
178
  align-items: center;
143
179
  gap: var(--menu-item-gap);
144
180
  min-height: var(--menu-item-height);
145
- padding: var(--menu-item-padding-y) var(--menu-item-padding-x);
181
+ /* Right gutter always reserved for floating trailers (enter / check). */
182
+ padding: var(--menu-item-padding-y) var(--menu-item-padding-right) var(--menu-item-padding-y)
183
+ var(--menu-item-padding-x);
146
184
  border-radius: var(--menu-item-border-radius);
147
185
  cursor: pointer;
148
186
  user-select: none;
149
187
  outline: none;
150
- font-family: var(--text-label-md-regular-font-family);
151
- font-size: var(--text-label-md-regular-font-size);
152
- font-weight: var(--text-label-md-regular-font-weight);
153
- line-height: var(--text-label-md-regular-line-height);
188
+ font-family: var(--text-label-md-regular-fontFamily);
189
+ font-size: var(--text-label-md-regular-fontSize);
190
+ font-weight: var(--text-label-md-regular-fontWeight);
191
+ line-height: var(--text-label-md-regular-lineHeight);
154
192
  color: var(--menu-item-color-default-foreground);
155
193
  background-color: var(--menu-item-color-default-background);
156
194
  transition: background-color 100ms ease, color 100ms ease;
195
+ white-space: nowrap;
157
196
  }
158
197
 
159
198
  .muka-menu__item:hover,
@@ -219,25 +258,55 @@
219
258
  }
220
259
 
221
260
  .muka-menu__item-label {
222
- flex: 1;
261
+ flex: 1 1 auto;
223
262
  min-width: 0;
263
+ white-space: nowrap;
264
+ }
265
+
266
+ /* Shortcut trailers replace icons and sit with an 8px right inset. */
267
+ .muka-menu__item--has-shortcut {
268
+ padding-right: var(--spacing-2);
224
269
  }
225
270
 
226
271
  .muka-menu__item-shortcut {
227
272
  flex-shrink: 0;
228
273
  margin-left: auto;
229
274
  padding-left: var(--menu-item-gap);
230
- font-size: var(--text-label-sm-regular-font-size);
231
- color: var(--menu-shortcut-color);
232
- opacity: 0.7;
275
+ font-family: var(--text-label-sm-regular-fontFamily);
276
+ font-size: var(--text-label-sm-regular-fontSize);
277
+ font-weight: var(--text-label-sm-regular-fontWeight);
278
+ line-height: var(--text-label-sm-regular-lineHeight);
279
+ color: var(--color-text-muted-default);
280
+ white-space: nowrap;
281
+ }
282
+
283
+ .muka-menu__item-hint {
284
+ /* Figma: trailer sits with 8px margin top / right / bottom; 24px glyph centered inside. */
285
+ position: absolute;
286
+ top: var(--spacing-2);
287
+ right: var(--spacing-2);
288
+ bottom: var(--spacing-2);
289
+ display: none;
290
+ align-items: center;
291
+ justify-content: center;
292
+ width: var(--icon-size-default, 1.5rem);
293
+ color: var(--color-text-muted-default);
294
+ pointer-events: none;
295
+ }
296
+
297
+ .muka-menu__item--hint-enter[data-highlighted] .muka-menu__item-hint {
298
+ display: flex;
233
299
  }
234
300
 
235
301
  .muka-menu__item-chevron {
302
+ position: absolute;
303
+ top: var(--spacing-2);
304
+ right: var(--spacing-2);
305
+ bottom: var(--spacing-2);
236
306
  display: flex;
237
307
  align-items: center;
238
308
  justify-content: center;
239
- flex-shrink: 0;
240
- margin-left: auto;
309
+ width: var(--icon-size-default, 1.5rem);
241
310
  color: var(--menu-shortcut-color);
242
311
  }
243
312
 
@@ -258,9 +327,10 @@
258
327
  padding-left: var(--menu-item-padding-x);
259
328
  }
260
329
 
330
+ .muka-menu__item--checkbox-trailing,
261
331
  .muka-menu__item--radio-check {
262
- position: relative;
263
- padding-right: calc(var(--menu-item-padding-x) + var(--menu-checkbox-indicator-size) + var(--menu-item-gap));
332
+ /* Same reserved right gutter as default items — trailing indicator floats. */
333
+ padding-right: var(--menu-item-padding-right);
264
334
  }
265
335
 
266
336
  .muka-menu__item--radio-check[data-state='checked'] {
@@ -268,11 +338,27 @@
268
338
  }
269
339
 
270
340
  .muka-menu__item-indicator--trailing {
341
+ /* Match enter-hint trailer: 8px inset, 24px box (override leading indicator size). */
271
342
  position: absolute;
272
- right: var(--menu-item-padding-x);
273
- top: 50%;
274
- transform: translateY(-50%);
275
- color: var(--menu-checkbox-indicator-color);
343
+ top: var(--spacing-2);
344
+ right: var(--spacing-2);
345
+ bottom: var(--spacing-2);
346
+ display: flex;
347
+ align-items: center;
348
+ justify-content: center;
349
+ width: var(--icon-size-default, 1.5rem);
350
+ height: auto;
351
+ max-height: none;
352
+ transform: none;
353
+ color: var(--color-text-subtle-default);
354
+ }
355
+
356
+ .muka-menu__item-indicator--trailing > [data-state] {
357
+ display: flex;
358
+ align-items: center;
359
+ justify-content: center;
360
+ width: 100%;
361
+ height: 100%;
276
362
  }
277
363
 
278
364
  .muka-menu__radio-dot {
@@ -298,10 +384,10 @@
298
384
 
299
385
  .muka-menu__group-label {
300
386
  padding: var(--menu-group-label-padding-y) var(--menu-group-label-padding-x);
301
- font-family: var(--text-label-sm-semibold-font-family);
302
- font-size: var(--text-label-sm-semibold-font-size);
303
- font-weight: var(--text-label-sm-semibold-font-weight);
304
- line-height: var(--text-label-sm-semibold-line-height);
387
+ font-family: var(--text-label-sm-semibold-fontFamily);
388
+ font-size: var(--text-label-sm-semibold-fontSize);
389
+ font-weight: var(--text-label-sm-semibold-fontWeight);
390
+ line-height: var(--text-label-sm-semibold-lineHeight);
305
391
  color: var(--menu-group-label-color);
306
392
  text-transform: uppercase;
307
393
  letter-spacing: 0.05em;
@@ -3,19 +3,22 @@
3
3
  /* ─── Root ──────────────────────────────────────────────── */
4
4
  .muka-progress-tracker {
5
5
  width: 100%;
6
+ }
7
+
8
+ .muka-progress-tracker--horizontal {
6
9
  padding-bottom: var(--spacing-7);
7
10
  }
8
11
 
9
12
  /* ─── Track (layered container) ─────────────────────────── */
10
- .muka-progress-tracker__track {
13
+ .muka-progress-tracker--horizontal .muka-progress-tracker__track {
11
14
  position: relative;
12
15
  /* Vertical padding = (indicator size - connector height) / 2 = (32 - 4) / 2 = 14px */
13
16
  padding-top: 14px;
14
17
  padding-bottom: 14px;
15
18
  }
16
19
 
17
- /* ─── Steps layer (on top) ──────────────────────────────── */
18
- .muka-progress-tracker__steps {
20
+ /* ─── Steps layer (on top) — horizontal ─────────────────── */
21
+ .muka-progress-tracker--horizontal .muka-progress-tracker__steps {
19
22
  position: absolute;
20
23
  inset: 0;
21
24
  display: flex;
@@ -24,13 +27,16 @@
24
27
  z-index: 2;
25
28
  }
26
29
 
27
- /* ─── Individual step ───────────────────────────────────── */
28
- .muka-progress-tracker__step {
30
+ /* ─── Individual step — horizontal ──────────────────────── */
31
+ .muka-progress-tracker--horizontal .muka-progress-tracker__step {
29
32
  display: flex;
30
33
  flex-direction: column;
31
34
  align-items: center;
32
- gap: 7px;
33
35
  position: relative;
36
+ /* Labels are absolutely positioned so the step stays 32px and
37
+ circle centers line up with the connector padding. */
38
+ width: 32px;
39
+ flex: 0 0 32px;
34
40
  }
35
41
 
36
42
  /* ─── Step indicator (circle) ───────────────────────────── */
@@ -43,20 +49,24 @@
43
49
  justify-content: center;
44
50
  flex-shrink: 0;
45
51
  position: relative;
52
+ z-index: 1;
46
53
  }
47
54
 
48
55
  /* Past: dark accent contrast circle with white checkmark */
49
56
  .muka-progress-tracker__indicator--past {
50
57
  background-color: var(--alias-color-accent-contrast);
51
58
  color: var(--color-text-default-inverse);
59
+ }
60
+
61
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--past {
52
62
  cursor: pointer;
53
63
  }
54
64
 
55
- .muka-progress-tracker__indicator--past:hover {
65
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--past:hover {
56
66
  background-color: var(--alias-color-accent-pressed);
57
67
  }
58
68
 
59
- .muka-progress-tracker__indicator--past:focus-visible {
69
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--past:focus-visible {
60
70
  outline: 2px solid var(--color-border-focus);
61
71
  outline-offset: 2px;
62
72
  }
@@ -83,6 +93,18 @@
83
93
  user-select: none;
84
94
  }
85
95
 
96
+ .muka-progress-tracker--horizontal .muka-progress-tracker__indicator--upcoming .muka-progress-tracker__number {
97
+ font-family: var(--text-label-md-bold-fontFamily);
98
+ font-weight: var(--text-label-md-bold-fontWeight);
99
+ }
100
+
101
+ .muka-progress-tracker--vertical .muka-progress-tracker__indicator--upcoming .muka-progress-tracker__number {
102
+ font-family: var(--text-label-md-semibold-fontFamily);
103
+ font-weight: var(--text-label-md-semibold-fontWeight);
104
+ font-size: var(--text-label-md-semibold-fontSize);
105
+ line-height: var(--text-label-md-semibold-lineHeight);
106
+ }
107
+
86
108
  /* ─── Checkmark icon ────────────────────────────────────── */
87
109
  .muka-progress-tracker__check-icon {
88
110
  width: 20px;
@@ -95,8 +117,12 @@
95
117
  color: var(--color-text-default-inverse);
96
118
  }
97
119
 
98
- /* ─── Step label ────────────────────────────────────────── */
99
- .muka-progress-tracker__label {
120
+ /* ─── Step label — horizontal ───────────────────────────── */
121
+ .muka-progress-tracker--horizontal .muka-progress-tracker__label {
122
+ position: absolute;
123
+ top: 39px;
124
+ left: 50%;
125
+ transform: translateX(-50%);
100
126
  font-family: var(--text-label-sm-regular-fontFamily);
101
127
  font-weight: var(--text-label-sm-regular-fontWeight);
102
128
  font-size: var(--text-label-sm-regular-fontSize);
@@ -109,14 +135,14 @@
109
135
  text-overflow: ellipsis;
110
136
  }
111
137
 
112
- /* Current step label is bold */
113
- .muka-progress-tracker__label--current {
138
+ /* Current step label is bold (horizontal only) */
139
+ .muka-progress-tracker--horizontal .muka-progress-tracker__label--current {
114
140
  font-family: var(--text-label-sm-bold-fontFamily);
115
141
  font-weight: var(--text-label-sm-bold-fontWeight);
116
142
  }
117
143
 
118
- /* ─── Connectors layer (behind indicators) ──────────────── */
119
- .muka-progress-tracker__connectors {
144
+ /* ─── Connectors layer (behind indicators) — horizontal ─── */
145
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connectors {
120
146
  display: flex;
121
147
  align-items: center;
122
148
  /* Horizontal padding = indicator radius (32/2 = 16px) so lines meet circle centers */
@@ -126,20 +152,31 @@
126
152
  z-index: 1;
127
153
  }
128
154
 
129
- /* ─── Individual connector line ─────────────────────────── */
130
- .muka-progress-tracker__connector {
155
+ /* Rounder, bar, rounder in a row. Chromium treats a negative gap as invalid,
156
+ so the overlap is margins: the bar runs 2px under each circle. */
157
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connector {
158
+ display: flex;
159
+ flex-direction: row;
160
+ align-items: center;
131
161
  flex: 1 0 0;
132
162
  height: 4px;
133
163
  min-width: 1px;
164
+ position: relative;
165
+ overflow: visible;
166
+ background: none;
134
167
  }
135
168
 
136
- /* Past: solid dark line */
137
- .muka-progress-tracker__connector--past {
169
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connector-line {
170
+ flex: 1 1 auto;
171
+ height: 4px;
172
+ min-width: 1px;
173
+ }
174
+
175
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connector--past .muka-progress-tracker__connector-line {
138
176
  background-color: var(--alias-color-accent-contrast);
139
177
  }
140
178
 
141
- /* Current: gradient from past (dark) toward current step */
142
- .muka-progress-tracker__connector--current {
179
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connector--current .muka-progress-tracker__connector-line {
143
180
  background: linear-gradient(
144
181
  to right,
145
182
  var(--alias-color-accent-contrast) 0%,
@@ -147,8 +184,7 @@
147
184
  );
148
185
  }
149
186
 
150
- /* Current-right: gradient fading from current step into upcoming */
151
- .muka-progress-tracker__connector--current-right {
187
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connector--current-right .muka-progress-tracker__connector-line {
152
188
  background: linear-gradient(
153
189
  to right,
154
190
  var(--alias-color-accent-default) 0%,
@@ -157,7 +193,222 @@
157
193
  );
158
194
  }
159
195
 
196
+ .muka-progress-tracker--horizontal .muka-progress-tracker__connector--upcoming .muka-progress-tracker__connector-line {
197
+ background-color: var(--color-surface-sunken);
198
+ }
199
+
200
+ /* Past: solid dark line (vertical; horizontal uses the inner line) */
201
+ .muka-progress-tracker__connector--past {
202
+ background-color: var(--alias-color-accent-contrast);
203
+ }
204
+
160
205
  /* Upcoming: solid gray line */
161
206
  .muka-progress-tracker__connector--upcoming {
162
207
  background-color: var(--color-surface-sunken);
163
208
  }
209
+
210
+ /* ═══════════════════════════════════════════════════════════
211
+ Vertical orientation
212
+ ═══════════════════════════════════════════════════════════ */
213
+
214
+ .muka-progress-tracker--vertical .muka-progress-tracker__track {
215
+ display: flex;
216
+ flex-direction: column;
217
+ align-items: stretch;
218
+ gap: var(--spacing-6);
219
+ width: 100%;
220
+ }
221
+
222
+ .muka-progress-tracker--vertical .muka-progress-tracker__step {
223
+ display: flex;
224
+ flex-direction: row;
225
+ align-items: flex-start;
226
+ gap: var(--spacing-3);
227
+ padding-right: var(--spacing-1);
228
+ position: relative;
229
+ width: 100%;
230
+ min-height: 32px;
231
+ }
232
+
233
+ .muka-progress-tracker--vertical .muka-progress-tracker__step--interactive {
234
+ cursor: pointer;
235
+ }
236
+
237
+ .muka-progress-tracker--vertical .muka-progress-tracker__step--interactive:focus-visible {
238
+ outline: 2px solid var(--color-border-focus);
239
+ outline-offset: 4px;
240
+ border-radius: 20px;
241
+ }
242
+
243
+ /* Indicator column: circle only; connector is absolutely positioned on the step */
244
+ .muka-progress-tracker--vertical .muka-progress-tracker__indicator-col {
245
+ display: flex;
246
+ flex-direction: column;
247
+ align-items: center;
248
+ flex-shrink: 0;
249
+ position: relative;
250
+ width: 32px;
251
+ z-index: 1;
252
+ }
253
+
254
+ /* Vertical connector: from mid-indicator through gap to next mid-indicator */
255
+ .muka-progress-tracker--vertical .muka-progress-tracker__connector {
256
+ position: absolute;
257
+ left: 14px; /* (32px indicator - 4px line) / 2 */
258
+ top: 16px;
259
+ /* Through track gap (spacing-6) into the next indicator's top half */
260
+ bottom: calc(-1 * var(--spacing-6) - 16px);
261
+ width: 4px;
262
+ z-index: 0;
263
+ overflow: visible;
264
+ }
265
+
266
+ /* Divider rounders: circle bleeds into the connector (Figma Divider Rounder) */
267
+ .muka-progress-tracker__rounder {
268
+ position: absolute;
269
+ display: block;
270
+ pointer-events: none;
271
+ overflow: visible;
272
+ }
273
+
274
+ .muka-progress-tracker__rounder--past {
275
+ color: var(--alias-color-accent-contrast);
276
+ }
277
+
278
+ .muka-progress-tracker__rounder--current {
279
+ color: var(--alias-color-accent-default);
280
+ }
281
+
282
+ .muka-progress-tracker__rounder--upcoming {
283
+ color: var(--color-surface-sunken);
284
+ }
285
+
286
+ .muka-progress-tracker--horizontal .muka-progress-tracker__rounder {
287
+ position: relative;
288
+ z-index: 1;
289
+ flex-shrink: 0;
290
+ top: auto;
291
+ right: auto;
292
+ bottom: auto;
293
+ left: auto;
294
+ transform: none;
295
+ }
296
+
297
+ .muka-progress-tracker--horizontal .muka-progress-tracker__rounder--start {
298
+ margin-left: 14px;
299
+ /* Rounder overhangs the circle by 3px; -5px tucks the bar 2px under the circle. */
300
+ margin-right: -5px;
301
+ }
302
+
303
+ .muka-progress-tracker--horizontal .muka-progress-tracker__rounder--end {
304
+ margin-left: -5px;
305
+ margin-right: 14px;
306
+ }
307
+
308
+ .muka-progress-tracker--vertical .muka-progress-tracker__rounder--start {
309
+ left: 50%;
310
+ top: 14px;
311
+ transform: translateX(-50%);
312
+ }
313
+
314
+ .muka-progress-tracker--vertical .muka-progress-tracker__rounder--end {
315
+ left: 50%;
316
+ bottom: 14px;
317
+ transform: translateX(-50%);
318
+ }
319
+
320
+ .muka-progress-tracker--vertical .muka-progress-tracker__connector--current {
321
+ background: linear-gradient(
322
+ to bottom,
323
+ var(--alias-color-accent-contrast) 0%,
324
+ var(--alias-color-accent-default) 100%
325
+ );
326
+ }
327
+
328
+ .muka-progress-tracker--vertical .muka-progress-tracker__connector--current-right {
329
+ background: linear-gradient(
330
+ to bottom,
331
+ var(--alias-color-accent-default) 0%,
332
+ var(--alias-color-accent-default) 15%,
333
+ var(--color-surface-sunken) 50%
334
+ );
335
+ }
336
+
337
+ /* Vertical label: body/base/regular, wraps, not bold for current */
338
+ .muka-progress-tracker--vertical .muka-progress-tracker__label {
339
+ font-family: var(--text-body-base-regular-fontFamily);
340
+ font-weight: var(--text-body-base-regular-fontWeight);
341
+ font-size: var(--text-body-base-regular-fontSize);
342
+ line-height: var(--text-body-base-regular-lineHeight);
343
+ color: var(--color-text-default-default);
344
+ text-align: left;
345
+ flex: 1 0 0;
346
+ min-width: 0;
347
+ padding-top: var(--spacing-1);
348
+ padding-bottom: var(--spacing-1);
349
+ word-break: break-word;
350
+ }
351
+
352
+ /* Current label stays regular weight in vertical layout */
353
+ .muka-progress-tracker--vertical .muka-progress-tracker__label--current {
354
+ font-family: var(--text-body-base-regular-fontFamily);
355
+ font-weight: var(--text-body-base-regular-fontWeight);
356
+ }
357
+
358
+ /* Ensure step content paints above hover/selected backgrounds */
359
+ .muka-progress-tracker--vertical .muka-progress-tracker__indicator-col,
360
+ .muka-progress-tracker--vertical .muka-progress-tracker__label {
361
+ position: relative;
362
+ z-index: 1;
363
+ }
364
+
365
+ /* ─── Hover halo (vertical interactive only) ────────────── */
366
+ .muka-progress-tracker--vertical .muka-progress-tracker__step--interactive:hover::before,
367
+ .muka-progress-tracker--vertical .muka-progress-tracker__step--interactive:active::before,
368
+ .muka-progress-tracker--vertical .muka-progress-tracker__step[data-selected='true']::before {
369
+ content: '';
370
+ position: absolute;
371
+ background-color: var(--color-surface-level1);
372
+ pointer-events: none;
373
+ z-index: 0;
374
+ }
375
+
376
+ /* Hover: 40px circle behind indicator only */
377
+ .muka-progress-tracker--vertical .muka-progress-tracker__step--interactive:hover::before {
378
+ left: -4px;
379
+ top: -4px;
380
+ width: 40px;
381
+ height: 40px;
382
+ border-radius: 20px;
383
+ }
384
+
385
+ /* Selected / :active: pill behind full step row — wins over hover */
386
+ .muka-progress-tracker--vertical .muka-progress-tracker__step--interactive:active::before,
387
+ .muka-progress-tracker--vertical .muka-progress-tracker__step[data-selected='true']::before {
388
+ left: -4px;
389
+ right: -8px;
390
+ top: -4px;
391
+ bottom: -4px;
392
+ width: auto;
393
+ height: auto;
394
+ border-radius: 20px;
395
+ }
396
+
397
+ /* Selected steps without interactive class still show the pill */
398
+ .muka-progress-tracker--vertical .muka-progress-tracker__step[data-selected='true']:not(.muka-progress-tracker__step--interactive)::before {
399
+ content: '';
400
+ position: absolute;
401
+ left: -4px;
402
+ right: -8px;
403
+ top: -4px;
404
+ bottom: -4px;
405
+ background-color: var(--color-surface-level1);
406
+ border-radius: 20px;
407
+ pointer-events: none;
408
+ z-index: 0;
409
+ }
410
+
411
+ /* Connector stays behind indicators (indicator-col is z-index 1) */
412
+ .muka-progress-tracker--vertical .muka-progress-tracker__connector {
413
+ z-index: 0;
414
+ }
@@ -74,25 +74,26 @@
74
74
 
75
75
  .muka-scrollbar__thumb {
76
76
  position: absolute;
77
- left: 50%;
77
+ left: 0;
78
78
  top: 0;
79
79
  z-index: 1;
80
80
  display: flex;
81
81
  align-items: center;
82
82
  justify-content: center;
83
- width: 14px;
84
- margin-left: -7px;
83
+ width: 100%;
84
+ /* Figma: scrollbar thumb fill = surface/level3 */
85
+ background-color: var(--color-surface-level3);
85
86
  cursor: grab;
86
87
  touch-action: none;
87
88
  }
88
89
 
89
90
  .muka-scrollbar--horizontal .muka-scrollbar__thumb {
90
91
  left: 0;
91
- top: 50%;
92
+ top: 0;
92
93
  width: auto;
93
- height: 14px;
94
+ height: 100%;
94
95
  margin-left: 0;
95
- margin-top: -7px;
96
+ margin-top: 0;
96
97
  }
97
98
 
98
99
  .muka-scrollbar__thumb:active {