@attrus-ds/core 0.2.0 → 0.3.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 (80) hide show
  1. package/LICENSE +27 -27
  2. package/dist/assets/flags/Brazil-rounded.svg +15 -15
  3. package/dist/assets/flags/Brazil-square.svg +16 -16
  4. package/dist/assets/flags/Chile-rounded.svg +10 -10
  5. package/dist/assets/flags/Chile-square.svg +10 -10
  6. package/dist/assets/flags/Colombia-rounded.svg +9 -9
  7. package/dist/assets/flags/Colombia-square.svg +9 -9
  8. package/dist/assets/flags/EUA-rounded.svg +10 -10
  9. package/dist/assets/flags/EUA-square.svg +10 -10
  10. package/dist/assets/flags/EUR-rounded.svg +8 -8
  11. package/dist/assets/flags/EUR-square.svg +8 -8
  12. package/dist/assets/flags/Mexico-rounded.svg +18 -18
  13. package/dist/assets/flags/Mexico-square.svg +18 -18
  14. package/dist/assets/icon-attrus-dark.svg +2 -2
  15. package/dist/assets/icon-attrus-light.svg +2 -2
  16. package/dist/assets/logo-attrus-dark.svg +7 -7
  17. package/dist/assets/logo-attrus-light.svg +7 -7
  18. package/dist/css/components/buttons.css +301 -301
  19. package/dist/css/components/callout.css +195 -195
  20. package/dist/css/components/cards.css +272 -272
  21. package/dist/css/components/combobox.css +319 -319
  22. package/dist/css/components/empty-states.css +61 -61
  23. package/dist/css/components/inputs.css +975 -975
  24. package/dist/css/components/number-input.css +138 -138
  25. package/dist/css/components/overlays.css +374 -374
  26. package/dist/css/components/primitives.css +314 -314
  27. package/dist/css/components/sidebar.css +179 -179
  28. package/dist/css/components/smart-search.css +91 -91
  29. package/dist/css/components/status-pills.css +207 -207
  30. package/dist/css/components/stepper.css +309 -309
  31. package/dist/css/components/table.css +602 -602
  32. package/dist/css/components/tabs.css +319 -319
  33. package/dist/css/components/toast.css +243 -243
  34. package/dist/css/components/tooltip.css +231 -231
  35. package/dist/css/components/topbar.css +148 -148
  36. package/dist/css/tokens.css +666 -666
  37. package/dist/react/AppSidebar/AppSidebar.d.ts +50 -50
  38. package/dist/react/AppSidebar/AppSidebar.tsx +197 -197
  39. package/dist/react/AppTopbar/AppTopbar.d.ts +58 -58
  40. package/dist/react/AppTopbar/AppTopbar.tsx +203 -203
  41. package/dist/react/Atoms/Atoms.d.ts +149 -149
  42. package/dist/react/Atoms/Atoms.tsx +407 -407
  43. package/dist/react/Button/Button.d.ts +25 -25
  44. package/dist/react/Button/Button.tsx +83 -83
  45. package/dist/react/Callout/Callout.d.ts +29 -29
  46. package/dist/react/Callout/Callout.tsx +98 -98
  47. package/dist/react/Card/Card.d.ts +38 -38
  48. package/dist/react/Card/Card.tsx +93 -93
  49. package/dist/react/Combobox/Combobox.d.ts +52 -52
  50. package/dist/react/Combobox/Combobox.tsx +254 -254
  51. package/dist/react/DataTable/DataTable.d.ts +81 -81
  52. package/dist/react/DataTable/DataTable.tsx +308 -308
  53. package/dist/react/Drawer/Drawer.d.ts +35 -35
  54. package/dist/react/Drawer/Drawer.tsx +226 -226
  55. package/dist/react/Input/Input.d.ts +155 -155
  56. package/dist/react/Input/Input.tsx +478 -478
  57. package/dist/react/Modal/Modal.d.ts +27 -27
  58. package/dist/react/Modal/Modal.tsx +173 -173
  59. package/dist/react/NumberInput/NumberInput.d.ts +25 -25
  60. package/dist/react/NumberInput/NumberInput.tsx +117 -117
  61. package/dist/react/Pill/Pill.d.ts +31 -31
  62. package/dist/react/Pill/Pill.tsx +104 -104
  63. package/dist/react/SearchPill/SearchPill.d.ts +14 -14
  64. package/dist/react/SearchPill/SearchPill.tsx +40 -40
  65. package/dist/react/SmartSearch/SmartSearch.d.ts +65 -65
  66. package/dist/react/SmartSearch/SmartSearch.tsx +271 -271
  67. package/dist/react/Stepper/Stepper.d.ts +25 -25
  68. package/dist/react/Stepper/Stepper.tsx +94 -94
  69. package/dist/react/Tabs/Tabs.d.ts +32 -32
  70. package/dist/react/Tabs/Tabs.tsx +147 -147
  71. package/dist/react/Toast/Toast.d.ts +30 -30
  72. package/dist/react/Toast/Toast.tsx +94 -94
  73. package/dist/react/Tooltip/Tooltip.d.ts +23 -23
  74. package/dist/react/Tooltip/Tooltip.tsx +80 -80
  75. package/dist/react/ZeroState/ZeroState.d.ts +17 -17
  76. package/dist/react/ZeroState/ZeroState.tsx +45 -45
  77. package/dist/react/index.ts +35 -35
  78. package/dist/tokens/attrus-tokens.flat.json +1234 -1234
  79. package/dist/tokens/attrus-tokens.json +1089 -1089
  80. package/package.json +64 -64
@@ -1,309 +1,309 @@
1
- /* ============================================================
2
- STEPPER — multi-step flow indicator (navigation)
3
- Horizontal for wizards (top-of-form), vertical for long
4
- onboardings (sidebar). Four step states: todo / current /
5
- done / error. Optional skipped state for non-linear flows.
6
-
7
- Markup contract:
8
- <ol class="stepper" aria-label="…">
9
- <li class="step is-done">
10
- <a class="step-marker" href="…"><i data-lucide="check"></i></a>
11
- <div class="step-body">
12
- <span class="step-label">…</span>
13
- <span class="step-help">…</span>
14
- </div>
15
- </li>
16
- <li class="step is-current" aria-current="step">…</li>
17
- <li class="step">…</li>
18
- </ol>
19
-
20
- The connector line between steps is drawn with a pseudo-
21
- element on .step (::after for horizontal, ::after on the
22
- marker's vertical track for vertical). Last child hides it.
23
- ============================================================ */
24
-
25
- /* ---------- Container ---------- */
26
- .stepper {
27
- list-style: none;
28
- margin: 0;
29
- padding: 0;
30
- display: flex;
31
- align-items: flex-start;
32
- gap: 0;
33
- font-family: var(--font-sans);
34
- color: var(--color-foreground-default);
35
- }
36
-
37
- /* ---------- Step (the row/column unit) ---------- */
38
- .step {
39
- flex: 1 1 0;
40
- min-width: 0;
41
- display: flex;
42
- align-items: flex-start;
43
- gap: var(--space-3);
44
- position: relative;
45
- color: var(--color-foreground-muted);
46
- }
47
-
48
- /* Connector line — drawn from this step's marker to the next */
49
- .step::after {
50
- content: "";
51
- position: absolute;
52
- background: var(--color-border-default);
53
- z-index: 0;
54
- }
55
- .step:last-child::after { display: none; }
56
-
57
- /* ---------- Marker (the numbered circle) ---------- */
58
- .step-marker {
59
- flex-shrink: 0;
60
- display: inline-flex;
61
- align-items: center;
62
- justify-content: center;
63
- width: 32px;
64
- height: 32px;
65
- border-radius: var(--radius-pill);
66
- background: var(--color-background-surface);
67
- border: 1.5px solid var(--color-border-default);
68
- font-family: var(--font-mono);
69
- font-size: var(--fs-sm);
70
- font-weight: var(--w-semibold);
71
- color: var(--color-foreground-muted);
72
- text-decoration: none;
73
- transition: var(--transition-fast);
74
- position: relative;
75
- z-index: 1;
76
- }
77
- .step-marker i, .step-marker svg {
78
- width: 14px;
79
- height: 14px;
80
- stroke-width: 2.4;
81
- }
82
-
83
- /* Anchor markers (clickable past steps) get a focus ring */
84
- a.step-marker:hover { border-color: var(--color-border-strong); }
85
- a.step-marker:focus-visible {
86
- outline: none;
87
- box-shadow: var(--shadow-focus);
88
- }
89
-
90
- /* ---------- Body (label + helper) ---------- */
91
- .step-body {
92
- flex: 1;
93
- min-width: 0;
94
- padding-top: var(--space-1);
95
- display: flex;
96
- flex-direction: column;
97
- gap: 2px;
98
- }
99
- .step-label {
100
- font-size: var(--fs-sm);
101
- font-weight: var(--w-semibold);
102
- letter-spacing: var(--ls-title);
103
- color: var(--color-foreground-secondary);
104
- line-height: var(--lh-tight);
105
- }
106
- .step-help {
107
- font-size: var(--fs-xs);
108
- color: var(--color-foreground-muted);
109
- line-height: var(--lh-snug);
110
- }
111
-
112
- /* ============================================================
113
- STATES
114
- ============================================================ */
115
-
116
- /* --- todo (default, future steps) --- */
117
- /* No modifier — base styles above. */
118
-
119
- /* --- current (the active step) ---
120
- Fill uses accent-700 (#1E6DC4) — NOT accent-500 — because the marker carries
121
- white text/number: white-on-Sky-500 is only 2.94:1 (fails WCAG AA), while
122
- white-on-accent-700 is 5.20:1 (passes). Stays in the Sky family; reads as the
123
- energetic "active" state without the contrast failure. See accent-highlights.html. */
124
- .step.is-current .step-marker {
125
- background: var(--color-brand-accent-700);
126
- border-color: var(--color-brand-accent-700);
127
- color: var(--color-foreground-on-solid);
128
- box-shadow: var(--shadow-focus);
129
- }
130
- .step.is-current .step-label {
131
- color: var(--color-foreground-default);
132
- font-weight: var(--w-bold);
133
- }
134
- .step.is-current .step-help {
135
- color: var(--color-foreground-secondary);
136
- }
137
-
138
- /* --- done (completed steps) --- */
139
- .step.is-done .step-marker {
140
- background: var(--color-feedback-success-foreground);
141
- border-color: var(--color-feedback-success-foreground);
142
- color: var(--color-foreground-on-solid);
143
- }
144
- .step.is-done .step-label {
145
- color: var(--color-foreground-default);
146
- }
147
- .step.is-done::after {
148
- background: var(--color-feedback-success-foreground);
149
- }
150
-
151
- /* --- error --- */
152
- .step.is-error .step-marker {
153
- background: var(--color-feedback-danger-background);
154
- border-color: var(--color-feedback-danger-border);
155
- color: var(--color-feedback-danger-foreground);
156
- }
157
- .step.is-error .step-label {
158
- color: var(--color-feedback-danger-foreground);
159
- font-weight: var(--w-bold);
160
- }
161
- .step.is-error .step-help {
162
- color: var(--color-feedback-danger-foreground);
163
- }
164
-
165
- /* --- skipped (non-linear flows, user jumped past) --- */
166
- .step.is-skipped .step-marker {
167
- background: var(--color-background-subtle);
168
- border-style: dashed;
169
- color: var(--color-foreground-muted);
170
- }
171
- .step.is-skipped .step-label {
172
- color: var(--color-foreground-muted);
173
- text-decoration: line-through;
174
- text-decoration-thickness: 1px;
175
- }
176
-
177
- /* ============================================================
178
- ORIENTATION — Horizontal (default)
179
- ============================================================ */
180
- .stepper {
181
- flex-direction: row;
182
- }
183
-
184
- .stepper .step {
185
- flex-direction: column;
186
- align-items: center;
187
- text-align: center;
188
- gap: var(--space-3);
189
- }
190
-
191
- /* Horizontal connector — from this marker's right edge to next marker's left */
192
- .stepper .step::after {
193
- top: 15px; /* center of 32px marker */
194
- left: calc(50% + 20px); /* edge of marker + small gap */
195
- right: calc(-50% + 20px);
196
- height: 2px;
197
- }
198
-
199
- .stepper .step-body {
200
- align-items: center;
201
- padding-top: 0;
202
- max-width: 16ch;
203
- }
204
- .stepper .step-label { text-align: center; }
205
- .stepper .step-help { text-align: center; }
206
-
207
- /* ============================================================
208
- ORIENTATION — Vertical
209
- ============================================================ */
210
- .stepper.is-vertical {
211
- flex-direction: column;
212
- align-items: stretch;
213
- gap: 0;
214
- }
215
-
216
- .stepper.is-vertical .step {
217
- flex: 0 0 auto;
218
- flex-direction: row;
219
- align-items: flex-start;
220
- text-align: left;
221
- gap: var(--space-4);
222
- padding-bottom: var(--space-7);
223
- }
224
- .stepper.is-vertical .step:last-child { padding-bottom: 0; }
225
-
226
- /* Vertical connector — from this marker's bottom to next marker's top */
227
- .stepper.is-vertical .step::after {
228
- top: 36px; /* below the marker */
229
- left: 15px; /* center of marker */
230
- width: 2px;
231
- bottom: var(--space-1);
232
- height: auto;
233
- }
234
-
235
- .stepper.is-vertical .step-body {
236
- padding-top: var(--space-1);
237
- max-width: none;
238
- padding-bottom: 0;
239
- }
240
- .stepper.is-vertical .step-label { text-align: left; }
241
- .stepper.is-vertical .step-help { text-align: left; }
242
-
243
- /* ============================================================
244
- SIZE — Compact
245
- For dense surfaces (drawer headers, table-row mini-flows).
246
- ============================================================ */
247
- .stepper.is-compact .step-marker {
248
- width: 24px;
249
- height: 24px;
250
- font-size: var(--fs-xs);
251
- }
252
- .stepper.is-compact .step-marker i,
253
- .stepper.is-compact .step-marker svg { width: 11px; height: 11px; }
254
- .stepper.is-compact .step-label { font-size: var(--fs-xs); }
255
- .stepper.is-compact .step-help { font-size: var(--fs-xxs); }
256
- .stepper.is-compact .step::after { top: 11px; }
257
- .stepper.is-compact.is-vertical .step::after { top: 28px; left: 11px; }
258
-
259
- /* ============================================================
260
- VARIANT — Numbered without circles (line-rule style)
261
- For minimalist top-of-form indicators where vertical space
262
- is precious. Removes circle; uses a 4px capsule + label.
263
- ============================================================ */
264
- .stepper.is-rule .step {
265
- flex-direction: column;
266
- align-items: stretch;
267
- gap: var(--space-2);
268
- padding: 0;
269
- }
270
- .stepper.is-rule .step::after { display: none; }
271
- .stepper.is-rule .step-marker {
272
- width: auto;
273
- height: 4px;
274
- border-radius: var(--radius-pill);
275
- background: var(--color-border-default);
276
- border: none;
277
- font-size: 0;
278
- }
279
- .stepper.is-rule .step-marker i,
280
- .stepper.is-rule .step-marker svg { display: none; }
281
- .stepper.is-rule .step-body { padding-top: 0; align-items: flex-start; max-width: none; }
282
- .stepper.is-rule .step-label {
283
- text-align: left;
284
- font-family: var(--font-mono);
285
- font-size: var(--fs-xxs);
286
- text-transform: uppercase;
287
- letter-spacing: var(--ls-caps);
288
- font-weight: var(--w-semibold);
289
- }
290
- .stepper.is-rule .step.is-done .step-marker { background: var(--color-feedback-success-foreground); }
291
- .stepper.is-rule .step.is-current .step-marker { background: var(--color-brand-accent-700); box-shadow: none; }
292
- .stepper.is-rule .step.is-error .step-marker { background: var(--color-feedback-danger-foreground); }
293
-
294
- /* ============================================================
295
- Responsive — Collapse labels at narrow widths
296
- The wizard pattern: keep markers + connector visible, hide
297
- labels to save space. Caller opts in with .is-collapse-sm.
298
- ============================================================ */
299
- @media (max-width: 640px) {
300
- .stepper.is-collapse-sm .step-body { display: none; }
301
- .stepper.is-collapse-sm .step { gap: 0; }
302
- }
303
-
304
- /* ============================================================
305
- Reduced motion
306
- ============================================================ */
307
- @media (prefers-reduced-motion: reduce) {
308
- .step-marker { transition: none; }
309
- }
1
+ /* ============================================================
2
+ STEPPER — multi-step flow indicator (navigation)
3
+ Horizontal for wizards (top-of-form), vertical for long
4
+ onboardings (sidebar). Four step states: todo / current /
5
+ done / error. Optional skipped state for non-linear flows.
6
+
7
+ Markup contract:
8
+ <ol class="stepper" aria-label="…">
9
+ <li class="step is-done">
10
+ <a class="step-marker" href="…"><i data-lucide="check"></i></a>
11
+ <div class="step-body">
12
+ <span class="step-label">…</span>
13
+ <span class="step-help">…</span>
14
+ </div>
15
+ </li>
16
+ <li class="step is-current" aria-current="step">…</li>
17
+ <li class="step">…</li>
18
+ </ol>
19
+
20
+ The connector line between steps is drawn with a pseudo-
21
+ element on .step (::after for horizontal, ::after on the
22
+ marker's vertical track for vertical). Last child hides it.
23
+ ============================================================ */
24
+
25
+ /* ---------- Container ---------- */
26
+ .stepper {
27
+ list-style: none;
28
+ margin: 0;
29
+ padding: 0;
30
+ display: flex;
31
+ align-items: flex-start;
32
+ gap: 0;
33
+ font-family: var(--font-sans);
34
+ color: var(--color-foreground-default);
35
+ }
36
+
37
+ /* ---------- Step (the row/column unit) ---------- */
38
+ .step {
39
+ flex: 1 1 0;
40
+ min-width: 0;
41
+ display: flex;
42
+ align-items: flex-start;
43
+ gap: var(--space-3);
44
+ position: relative;
45
+ color: var(--color-foreground-muted);
46
+ }
47
+
48
+ /* Connector line — drawn from this step's marker to the next */
49
+ .step::after {
50
+ content: "";
51
+ position: absolute;
52
+ background: var(--color-border-default);
53
+ z-index: 0;
54
+ }
55
+ .step:last-child::after { display: none; }
56
+
57
+ /* ---------- Marker (the numbered circle) ---------- */
58
+ .step-marker {
59
+ flex-shrink: 0;
60
+ display: inline-flex;
61
+ align-items: center;
62
+ justify-content: center;
63
+ width: 32px;
64
+ height: 32px;
65
+ border-radius: var(--radius-pill);
66
+ background: var(--color-background-surface);
67
+ border: 1.5px solid var(--color-border-default);
68
+ font-family: var(--font-mono);
69
+ font-size: var(--fs-sm);
70
+ font-weight: var(--w-semibold);
71
+ color: var(--color-foreground-muted);
72
+ text-decoration: none;
73
+ transition: var(--transition-fast);
74
+ position: relative;
75
+ z-index: 1;
76
+ }
77
+ .step-marker i, .step-marker svg {
78
+ width: 14px;
79
+ height: 14px;
80
+ stroke-width: 2.4;
81
+ }
82
+
83
+ /* Anchor markers (clickable past steps) get a focus ring */
84
+ a.step-marker:hover { border-color: var(--color-border-strong); }
85
+ a.step-marker:focus-visible {
86
+ outline: none;
87
+ box-shadow: var(--shadow-focus);
88
+ }
89
+
90
+ /* ---------- Body (label + helper) ---------- */
91
+ .step-body {
92
+ flex: 1;
93
+ min-width: 0;
94
+ padding-top: var(--space-1);
95
+ display: flex;
96
+ flex-direction: column;
97
+ gap: 2px;
98
+ }
99
+ .step-label {
100
+ font-size: var(--fs-sm);
101
+ font-weight: var(--w-semibold);
102
+ letter-spacing: var(--ls-title);
103
+ color: var(--color-foreground-secondary);
104
+ line-height: var(--lh-tight);
105
+ }
106
+ .step-help {
107
+ font-size: var(--fs-xs);
108
+ color: var(--color-foreground-muted);
109
+ line-height: var(--lh-snug);
110
+ }
111
+
112
+ /* ============================================================
113
+ STATES
114
+ ============================================================ */
115
+
116
+ /* --- todo (default, future steps) --- */
117
+ /* No modifier — base styles above. */
118
+
119
+ /* --- current (the active step) ---
120
+ Fill uses accent-700 (#1E6DC4) — NOT accent-500 — because the marker carries
121
+ white text/number: white-on-Sky-500 is only 2.94:1 (fails WCAG AA), while
122
+ white-on-accent-700 is 5.20:1 (passes). Stays in the Sky family; reads as the
123
+ energetic "active" state without the contrast failure. See accent-highlights.html. */
124
+ .step.is-current .step-marker {
125
+ background: var(--color-brand-accent-700);
126
+ border-color: var(--color-brand-accent-700);
127
+ color: var(--color-foreground-on-solid);
128
+ box-shadow: var(--shadow-focus);
129
+ }
130
+ .step.is-current .step-label {
131
+ color: var(--color-foreground-default);
132
+ font-weight: var(--w-bold);
133
+ }
134
+ .step.is-current .step-help {
135
+ color: var(--color-foreground-secondary);
136
+ }
137
+
138
+ /* --- done (completed steps) --- */
139
+ .step.is-done .step-marker {
140
+ background: var(--color-feedback-success-foreground);
141
+ border-color: var(--color-feedback-success-foreground);
142
+ color: var(--color-foreground-on-solid);
143
+ }
144
+ .step.is-done .step-label {
145
+ color: var(--color-foreground-default);
146
+ }
147
+ .step.is-done::after {
148
+ background: var(--color-feedback-success-foreground);
149
+ }
150
+
151
+ /* --- error --- */
152
+ .step.is-error .step-marker {
153
+ background: var(--color-feedback-danger-background);
154
+ border-color: var(--color-feedback-danger-border);
155
+ color: var(--color-feedback-danger-foreground);
156
+ }
157
+ .step.is-error .step-label {
158
+ color: var(--color-feedback-danger-foreground);
159
+ font-weight: var(--w-bold);
160
+ }
161
+ .step.is-error .step-help {
162
+ color: var(--color-feedback-danger-foreground);
163
+ }
164
+
165
+ /* --- skipped (non-linear flows, user jumped past) --- */
166
+ .step.is-skipped .step-marker {
167
+ background: var(--color-background-subtle);
168
+ border-style: dashed;
169
+ color: var(--color-foreground-muted);
170
+ }
171
+ .step.is-skipped .step-label {
172
+ color: var(--color-foreground-muted);
173
+ text-decoration: line-through;
174
+ text-decoration-thickness: 1px;
175
+ }
176
+
177
+ /* ============================================================
178
+ ORIENTATION — Horizontal (default)
179
+ ============================================================ */
180
+ .stepper {
181
+ flex-direction: row;
182
+ }
183
+
184
+ .stepper .step {
185
+ flex-direction: column;
186
+ align-items: center;
187
+ text-align: center;
188
+ gap: var(--space-3);
189
+ }
190
+
191
+ /* Horizontal connector — from this marker's right edge to next marker's left */
192
+ .stepper .step::after {
193
+ top: 15px; /* center of 32px marker */
194
+ left: calc(50% + 20px); /* edge of marker + small gap */
195
+ right: calc(-50% + 20px);
196
+ height: 2px;
197
+ }
198
+
199
+ .stepper .step-body {
200
+ align-items: center;
201
+ padding-top: 0;
202
+ max-width: 16ch;
203
+ }
204
+ .stepper .step-label { text-align: center; }
205
+ .stepper .step-help { text-align: center; }
206
+
207
+ /* ============================================================
208
+ ORIENTATION — Vertical
209
+ ============================================================ */
210
+ .stepper.is-vertical {
211
+ flex-direction: column;
212
+ align-items: stretch;
213
+ gap: 0;
214
+ }
215
+
216
+ .stepper.is-vertical .step {
217
+ flex: 0 0 auto;
218
+ flex-direction: row;
219
+ align-items: flex-start;
220
+ text-align: left;
221
+ gap: var(--space-4);
222
+ padding-bottom: var(--space-7);
223
+ }
224
+ .stepper.is-vertical .step:last-child { padding-bottom: 0; }
225
+
226
+ /* Vertical connector — from this marker's bottom to next marker's top */
227
+ .stepper.is-vertical .step::after {
228
+ top: 36px; /* below the marker */
229
+ left: 15px; /* center of marker */
230
+ width: 2px;
231
+ bottom: var(--space-1);
232
+ height: auto;
233
+ }
234
+
235
+ .stepper.is-vertical .step-body {
236
+ padding-top: var(--space-1);
237
+ max-width: none;
238
+ padding-bottom: 0;
239
+ }
240
+ .stepper.is-vertical .step-label { text-align: left; }
241
+ .stepper.is-vertical .step-help { text-align: left; }
242
+
243
+ /* ============================================================
244
+ SIZE — Compact
245
+ For dense surfaces (drawer headers, table-row mini-flows).
246
+ ============================================================ */
247
+ .stepper.is-compact .step-marker {
248
+ width: 24px;
249
+ height: 24px;
250
+ font-size: var(--fs-xs);
251
+ }
252
+ .stepper.is-compact .step-marker i,
253
+ .stepper.is-compact .step-marker svg { width: 11px; height: 11px; }
254
+ .stepper.is-compact .step-label { font-size: var(--fs-xs); }
255
+ .stepper.is-compact .step-help { font-size: var(--fs-xxs); }
256
+ .stepper.is-compact .step::after { top: 11px; }
257
+ .stepper.is-compact.is-vertical .step::after { top: 28px; left: 11px; }
258
+
259
+ /* ============================================================
260
+ VARIANT — Numbered without circles (line-rule style)
261
+ For minimalist top-of-form indicators where vertical space
262
+ is precious. Removes circle; uses a 4px capsule + label.
263
+ ============================================================ */
264
+ .stepper.is-rule .step {
265
+ flex-direction: column;
266
+ align-items: stretch;
267
+ gap: var(--space-2);
268
+ padding: 0;
269
+ }
270
+ .stepper.is-rule .step::after { display: none; }
271
+ .stepper.is-rule .step-marker {
272
+ width: auto;
273
+ height: 4px;
274
+ border-radius: var(--radius-pill);
275
+ background: var(--color-border-default);
276
+ border: none;
277
+ font-size: 0;
278
+ }
279
+ .stepper.is-rule .step-marker i,
280
+ .stepper.is-rule .step-marker svg { display: none; }
281
+ .stepper.is-rule .step-body { padding-top: 0; align-items: flex-start; max-width: none; }
282
+ .stepper.is-rule .step-label {
283
+ text-align: left;
284
+ font-family: var(--font-mono);
285
+ font-size: var(--fs-xxs);
286
+ text-transform: uppercase;
287
+ letter-spacing: var(--ls-caps);
288
+ font-weight: var(--w-semibold);
289
+ }
290
+ .stepper.is-rule .step.is-done .step-marker { background: var(--color-feedback-success-foreground); }
291
+ .stepper.is-rule .step.is-current .step-marker { background: var(--color-brand-accent-700); box-shadow: none; }
292
+ .stepper.is-rule .step.is-error .step-marker { background: var(--color-feedback-danger-foreground); }
293
+
294
+ /* ============================================================
295
+ Responsive — Collapse labels at narrow widths
296
+ The wizard pattern: keep markers + connector visible, hide
297
+ labels to save space. Caller opts in with .is-collapse-sm.
298
+ ============================================================ */
299
+ @media (max-width: 640px) {
300
+ .stepper.is-collapse-sm .step-body { display: none; }
301
+ .stepper.is-collapse-sm .step { gap: 0; }
302
+ }
303
+
304
+ /* ============================================================
305
+ Reduced motion
306
+ ============================================================ */
307
+ @media (prefers-reduced-motion: reduce) {
308
+ .step-marker { transition: none; }
309
+ }