@inchurch/matcha-theme 20.0.11 → 20.277.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 (116) hide show
  1. package/abstracts/_colors.scss +404 -404
  2. package/abstracts/_elevation.scss +102 -102
  3. package/abstracts/_functions.scss +1186 -1212
  4. package/abstracts/_media-breakpoint.scss +23 -23
  5. package/abstracts/_theme-api.scss +230 -0
  6. package/abstracts/_typography.scss +127 -127
  7. package/base/_reset.scss +438 -438
  8. package/components/app-page-header.scss +259 -0
  9. package/components/matcha-accordion.scss +293 -157
  10. package/components/matcha-audio-player.scss +1 -2
  11. package/components/matcha-autocomplete.scss +10 -11
  12. package/components/matcha-avatar.scss +173 -33
  13. package/components/matcha-badge.scss +15 -15
  14. package/components/matcha-breadcrumb.scss +231 -126
  15. package/components/matcha-button-toggle.scss +46 -2
  16. package/components/matcha-buttons.scss +908 -784
  17. package/components/matcha-calendar.scss +99 -35
  18. package/components/matcha-cards.scss +58 -33
  19. package/components/matcha-chart-card.scss +5 -12
  20. package/components/matcha-checkbox.scss +191 -490
  21. package/components/matcha-chip.scss +297 -212
  22. package/components/matcha-color-pick.scss +1 -2
  23. package/components/matcha-command-palette.scss +290 -63
  24. package/components/matcha-crop.scss +406 -172
  25. package/components/matcha-date.scss +81 -81
  26. package/components/matcha-divider.scss +86 -31
  27. package/components/matcha-draggable.scss +4 -5
  28. package/components/matcha-drawer.scss +207 -66
  29. package/components/matcha-drop-image.scss +14 -0
  30. package/components/matcha-drop-list.scss +87 -47
  31. package/components/matcha-emoji.scss +2 -2
  32. package/components/matcha-empty-state.scss +195 -83
  33. package/components/matcha-file-uploader.scss +462 -0
  34. package/components/matcha-flag.scss +93 -52
  35. package/components/matcha-footer.scss +67 -164
  36. package/components/matcha-form-field.scss +55 -3
  37. package/components/matcha-form-section.scss +100 -101
  38. package/components/matcha-header.scss +134 -325
  39. package/components/matcha-highlight.scss +65 -197
  40. package/components/matcha-hint-text.scss +25 -4
  41. package/components/matcha-horizontal-tree.scss +316 -317
  42. package/components/matcha-icon.scss +37 -45
  43. package/components/matcha-image.scss +2 -3
  44. package/components/matcha-list.scss +14 -15
  45. package/components/matcha-menu.scss +15 -2
  46. package/components/matcha-modal.scss +59 -86
  47. package/components/matcha-nav.scss +362 -231
  48. package/components/matcha-notification.scss +412 -197
  49. package/components/matcha-option.scss +98 -23
  50. package/components/matcha-page-builder.scss +16 -16
  51. package/components/matcha-paginator.scss +688 -235
  52. package/components/matcha-panel.scss +42 -27
  53. package/components/matcha-profile-card.scss +50 -50
  54. package/components/matcha-progress-bar.scss +257 -153
  55. package/components/matcha-radio.scss +244 -452
  56. package/components/matcha-scrollbar.scss +1 -2
  57. package/components/matcha-scrollbox-shadow.scss +120 -122
  58. package/components/matcha-section.scss +5 -9
  59. package/components/matcha-select-multiple.scss +56 -0
  60. package/components/matcha-select.scss +10 -10
  61. package/components/matcha-skeleton.scss +24 -7
  62. package/components/matcha-slide-toggle.scss +80 -301
  63. package/components/matcha-slider.scss +174 -77
  64. package/components/matcha-snack-bar.scss +123 -131
  65. package/components/matcha-spin.scss +12 -103
  66. package/components/matcha-spinner.scss +76 -57
  67. package/components/matcha-status-pill.scss +82 -0
  68. package/components/matcha-stepper.scss +376 -177
  69. package/components/matcha-table.scss +568 -785
  70. package/components/matcha-tabs.scss +622 -469
  71. package/components/matcha-text-editor.scss +78 -78
  72. package/components/matcha-time.scss +2 -2
  73. package/components/matcha-toolbar.scss +359 -206
  74. package/components/matcha-tooltip.scss +158 -62
  75. package/components/matcha-tree-view.scss +189 -0
  76. package/fonts/manrope/manrope-latin-ext.woff2 +0 -0
  77. package/fonts/manrope/manrope-latin.woff2 +0 -0
  78. package/layout/matcha-page-layout.scss +4 -4
  79. package/main.scss +237 -265
  80. package/package.json +1 -1
  81. package/tokens/_animations-tokens.scss +37 -37
  82. package/tokens/_breakpoints-tokens.scss +35 -26
  83. package/tokens/_color-tokens.scss +1149 -1152
  84. package/tokens/_css-custom-properties.scss +704 -568
  85. package/tokens/_primitives.scss +82 -0
  86. package/tokens/_semantic-aliases.scss +120 -0
  87. package/tokens/_spacing-tokens.scss +94 -94
  88. package/vendors/angular-editor.scss +56 -56
  89. package/vendors/angular-material-fixes.scss +297 -297
  90. package/vendors/charts.scss +92 -92
  91. package/vendors/ng5-slider.scss +56 -56
  92. package/vendors/ngx-material-timepicker.scss +50 -50
  93. package/components/matcha-uploader.scss +0 -215
  94. package/fonts/CircularStd-Black.eot +0 -0
  95. package/fonts/CircularStd-Black.svg +0 -3426
  96. package/fonts/CircularStd-Black.ttf +0 -0
  97. package/fonts/CircularStd-Black.woff +0 -0
  98. package/fonts/CircularStd-Black.woff2 +0 -0
  99. package/fonts/CircularStd-Bold.eot +0 -0
  100. package/fonts/CircularStd-Bold.otf +0 -0
  101. package/fonts/CircularStd-Bold.svg +0 -13532
  102. package/fonts/CircularStd-Bold.ttf +0 -0
  103. package/fonts/CircularStd-Bold.woff +0 -0
  104. package/fonts/CircularStd-Bold.woff2 +0 -0
  105. package/fonts/CircularStd-Medium.eot +0 -0
  106. package/fonts/CircularStd-Medium.otf +0 -0
  107. package/fonts/CircularStd-Medium.svg +0 -13511
  108. package/fonts/CircularStd-Medium.ttf +0 -0
  109. package/fonts/CircularStd-Medium.woff +0 -0
  110. package/fonts/CircularStd-Medium.woff2 +0 -0
  111. package/fonts/CircularStd-Regular.eot +0 -0
  112. package/fonts/CircularStd-Regular.otf +0 -0
  113. package/fonts/CircularStd-Regular.svg +0 -2378
  114. package/fonts/CircularStd-Regular.ttf +0 -0
  115. package/fonts/CircularStd-Regular.woff +0 -0
  116. package/fonts/CircularStd-Regular.woff2 +0 -0
@@ -0,0 +1,82 @@
1
+ // =============================================================================
2
+ // matcha-status-pill — tons com cor + bg-alpha + halo no dot por estado.
3
+ // Mapeamento Figma DSV3 (matcha/status-pill, fileKey i04CyWczuVctwRjE5VbJh7).
4
+ // =============================================================================
5
+
6
+ matcha-status-pill {
7
+ // ── Active (success) ────────────────────────────────────────────────────
8
+ &[tone="active"] {
9
+ color: var(--matcha-color-success, #16a34a);
10
+ background-color: var(--matcha-color-success-alpha, rgba(22, 163, 74, 0.10));
11
+ border-color: var(--matcha-color-success-alpha, rgba(22, 163, 74, 0.30));
12
+
13
+ .matcha-status-pill__dot {
14
+ background-color: var(--matcha-color-success, #16a34a);
15
+ box-shadow: 0 0 0 3px var(--matcha-color-success-alpha, rgba(22, 163, 74, 0.20));
16
+ }
17
+
18
+ &[interactive]:hover:not([disabled]) {
19
+ background-color: var(--matcha-color-success-alpha, rgba(22, 163, 74, 0.16));
20
+ border-color: var(--matcha-color-success);
21
+ }
22
+ }
23
+
24
+ // ── Pending (warn) ──────────────────────────────────────────────────────
25
+ &[tone="pending"] {
26
+ color: var(--matcha-color-warn, #f59e0b);
27
+ background-color: var(--matcha-color-warn-alpha, rgba(245, 158, 11, 0.10));
28
+ border-color: var(--matcha-color-warn-alpha, rgba(245, 158, 11, 0.30));
29
+
30
+ .matcha-status-pill__dot {
31
+ background-color: var(--matcha-color-warn, #f59e0b);
32
+ box-shadow: 0 0 0 3px var(--matcha-color-warn-alpha, rgba(245, 158, 11, 0.20));
33
+ }
34
+
35
+ &[interactive]:hover:not([disabled]) {
36
+ background-color: var(--matcha-color-warn-alpha, rgba(245, 158, 11, 0.16));
37
+ border-color: var(--matcha-color-warn);
38
+ }
39
+ }
40
+
41
+ // ── Refused (danger) ────────────────────────────────────────────────────
42
+ &[tone="refused"] {
43
+ color: var(--matcha-color-danger, #ef4444);
44
+ background-color: var(--matcha-color-danger-alpha, rgba(239, 68, 68, 0.10));
45
+ border-color: var(--matcha-color-danger-alpha, rgba(239, 68, 68, 0.30));
46
+
47
+ .matcha-status-pill__dot {
48
+ background-color: var(--matcha-color-danger, #ef4444);
49
+ box-shadow: 0 0 0 3px var(--matcha-color-danger-alpha, rgba(239, 68, 68, 0.20));
50
+ }
51
+
52
+ &[interactive]:hover:not([disabled]) {
53
+ background-color: var(--matcha-color-danger-alpha, rgba(239, 68, 68, 0.16));
54
+ border-color: var(--matcha-color-danger);
55
+ }
56
+ }
57
+
58
+ // ── Inactive / Unknown (cinza muted) ────────────────────────────────────
59
+ &[tone="inactive"],
60
+ &[tone="unknown"] {
61
+ color: var(--matcha-color-text-muted, #9ca3af);
62
+ background-color: var(--matcha-color-surface-hover, rgba(255, 255, 255, 0.04));
63
+ border-color: var(--matcha-color-surface-border, rgba(255, 255, 255, 0.14));
64
+
65
+ .matcha-status-pill__dot {
66
+ background-color: var(--matcha-color-text-muted, #9ca3af);
67
+ }
68
+
69
+ &[interactive]:hover:not([disabled]) {
70
+ background-color: var(--matcha-color-surface-bg);
71
+ border-color: var(--matcha-color-text-muted);
72
+ }
73
+ }
74
+
75
+ // Unknown ainda diferencia com itálico + dot opaco.
76
+ &[tone="unknown"] {
77
+ font-style: italic;
78
+ font-weight: var(--matcha-weight-regular, 400);
79
+
80
+ .matcha-status-pill__dot { opacity: 0.5; }
81
+ }
82
+ }
@@ -1,177 +1,376 @@
1
- @use "sass:map";
2
-
3
- // =============================================================================
4
- // matcha-stepper.scss — Step progress indicator
5
- // Aligned with Figma matcha/stepper/step:
6
- // Estado(4: Completo, Ativo, Pendente, Disabled) × Tamanho(2: SM, MD)
7
- // Connector lines between steps via CSS
8
- // =============================================================================
9
-
10
- @mixin matcha-stepper-theme($theme) {
11
- $is-dark: map.get($theme, is-dark);
12
-
13
- matcha-stepper {
14
- // ── Step indicators ──
15
- .step-indicator-completo {
16
- background: var(--matcha-color-accent, #{getAccent($theme)});
17
- color: var(--matcha-color-accent-contrast, #{getAccentContrast($theme)});
18
- }
19
-
20
- .step-indicator-ativo {
21
- background: var(--matcha-color-fg, #{getForeground($theme)});
22
- color: var(--matcha-color-bg, #{getBackground($theme)});
23
- }
24
-
25
- .step-indicator-pendente,
26
- .step-indicator-disabled {
27
- background: var(--matcha-color-disabled, #{getDisabled($theme)});
28
- color: var(--matcha-color-bg, #{getBackground($theme)});
29
- }
30
-
31
- // ── Labels ──
32
- .step-label-completo {
33
- color: var(--matcha-color-accent, #{getAccent($theme)});
34
- }
35
-
36
- .step-label-ativo {
37
- color: var(--matcha-color-fg, #{getForeground($theme)});
38
- }
39
-
40
- .step-label-pendente,
41
- .step-label-disabled {
42
- color: var(--matcha-color-text-placeholder, #{getBlueGrey($theme)});
43
- }
44
-
45
- // ── Connector lines ──
46
- .step-connector {
47
- background: var(--matcha-color-disabled, #{getDisabled($theme)});
48
- }
49
-
50
- .step-connector-complete {
51
- background: var(--matcha-color-accent, #{getAccent($theme)});
52
- }
53
-
54
- // ── Focus ──
55
- .step-item:focus-visible {
56
- outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent, #{getAccent($theme)});
57
- outline-offset: var(--matcha-state-focus-ring-offset, 2px);
58
- border-radius: var(--matcha-radius-md, 4px);
59
- }
60
- }
61
- }
62
-
63
- // ── Layout ──────────────────────────────────────────────────────────────────
64
-
65
- matcha-stepper {
66
- display: flex;
67
- width: 100%;
68
-
69
- // ── Horizontal (default) ──
70
- &:not([orientation="vertical"]) {
71
- flex-direction: row;
72
- align-items: center;
73
- gap: var(--matcha-space-200, 16px);
74
- }
75
-
76
- // ── Vertical ──
77
- &[orientation="vertical"] {
78
- flex-direction: column;
79
- gap: var(--matcha-space-200, 16px);
80
- }
81
- }
82
-
83
- // ── Step item ──
84
- .step-item {
85
- display: flex;
86
- align-items: center;
87
- gap: var(--matcha-space-100, 8px);
88
- cursor: default;
89
- white-space: nowrap;
90
-
91
- &.step-clickable {
92
- cursor: pointer;
93
- }
94
-
95
- &.step-disabled {
96
- opacity: 0.5;
97
- pointer-events: none;
98
- }
99
- }
100
-
101
- // ── Indicator circle ──
102
- .step-indicator {
103
- display: flex;
104
- align-items: center;
105
- justify-content: center;
106
- border-radius: 50%;
107
- flex-shrink: 0;
108
- font-family: var(--matcha-font-family);
109
-
110
- &.step-sm {
111
- width: var(--matcha-icon-size-md, 24px);
112
- height: var(--matcha-icon-size-md, 24px);
113
- font-size: var(--matcha-text-body-md, 14px);
114
- font-weight: var(--matcha-weight-regular, 400);
115
- }
116
-
117
- &.step-md {
118
- width: var(--matcha-space-400, 32px);
119
- height: var(--matcha-space-400, 32px);
120
- font-size: var(--matcha-text-title-sm, 16px);
121
- font-weight: var(--matcha-weight-semibold, 600);
122
- }
123
-
124
- matcha-icon {
125
- flex-shrink: 0;
126
- }
127
- }
128
-
129
- // ── Label ──
130
- .step-label {
131
- font-family: var(--matcha-font-family);
132
-
133
- &.step-sm {
134
- font-size: var(--matcha-text-body-md, 14px);
135
- line-height: var(--matcha-leading-body-md, 20px);
136
- font-weight: var(--matcha-weight-regular, 400);
137
- }
138
-
139
- &.step-md {
140
- font-size: var(--matcha-text-title-sm, 16px);
141
- line-height: var(--matcha-leading-title-sm, 22px);
142
- font-weight: var(--matcha-weight-semibold, 600);
143
- }
144
-
145
- // Ativo SM gets medium weight
146
- .step-item-ativo &.step-sm {
147
- font-weight: var(--matcha-weight-medium, 500);
148
- }
149
- }
150
-
151
- // ── Connector line ──
152
- .step-connector {
153
- flex: 1;
154
- height: var(--matcha-border-thin, 2px);
155
- min-width: var(--matcha-space-200, 16px);
156
-
157
- // Vertical connector
158
- matcha-stepper[orientation="vertical"] & {
159
- width: var(--matcha-border-thin, 2px);
160
- height: var(--matcha-space-200, 16px);
161
- min-width: auto;
162
- flex: none;
163
- margin-left: calc(var(--matcha-icon-size-md, 24px) / 2 - 1px);
164
- }
165
-
166
- matcha-stepper[orientation="vertical"].step-md & {
167
- margin-left: calc(var(--matcha-space-400, 32px) / 2 - 1px);
168
- }
169
- }
170
-
171
- // ── Reduced motion ──────────────────────────────────────────────────────────
172
- @media (prefers-reduced-motion: reduce) {
173
- .step-indicator,
174
- .step-connector {
175
- transition: none;
176
- }
177
- }
1
+ @use "sass:map";
2
+
3
+ // =============================================================================
4
+ // matcha-stepper.scss — Step progress indicator
5
+ // Aligned with Figma matcha/stepper/step:
6
+ // Estado(4: Completo, Ativo, Pendente, Disabled) × Tamanho(2: SM, MD)
7
+ // Connector lines between steps via CSS — fill animation on complete
8
+ // =============================================================================
9
+
10
+ @mixin matcha-stepper-theme($theme) {
11
+
12
+ matcha-stepper {
13
+ // ── Step indicators ──
14
+ // Completo: círculo verde sólido + matcha-icon messaging-check outlined
15
+ // (canon Figma DSV3: bola accent atrás, ícone outlined dentro).
16
+ // matcha-icon NÃO herda `color` do parent — usa `--matcha-icon-color`.
17
+ .step-indicator-completo {
18
+ background: var(--matcha-color-accent);
19
+ color: var(--matcha-color-accent-text-on, var(--matcha-color-accent-contrast));
20
+ --matcha-icon-color: var(--matcha-color-accent-text-on, var(--matcha-color-accent-contrast));
21
+ }
22
+
23
+ .step-indicator-ativo {
24
+ background: var(--matcha-color-fg);
25
+ color: var(--matcha-color-bg);
26
+ }
27
+
28
+ .step-indicator-pendente,
29
+ .step-indicator-disabled {
30
+ background: var(--matcha-color-disabled);
31
+ color: var(--matcha-color-bg);
32
+ }
33
+
34
+ // ── Labels ──
35
+ .step-label-completo {
36
+ color: var(--matcha-color-accent);
37
+ }
38
+
39
+ .step-label-ativo {
40
+ color: var(--matcha-color-fg);
41
+ }
42
+
43
+ .step-label-pendente,
44
+ .step-label-disabled {
45
+ color: var(--matcha-color-text-placeholder);
46
+ }
47
+
48
+ // ── Connector lines (track + fill animation) ──
49
+ .step-connector {
50
+ background: var(--matcha-color-disabled);
51
+
52
+ // Pseudo "fill" que cresce da esquerda → direita quando step completa.
53
+ &::before {
54
+ background: var(--matcha-color-accent);
55
+ }
56
+ }
57
+
58
+ // ── Focus ring polido (offset 4px + halo) ──
59
+ .step-item:focus-visible {
60
+ outline: var(--matcha-state-focus-ring-width, 2px) solid
61
+ var(--matcha-color-accent);
62
+ outline-offset: var(--matcha-state-focus-ring-offset, 4px);
63
+ border-radius: var(--matcha-radius-md, 8px);
64
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--matcha-color-accent) 16%, transparent);
65
+ }
66
+
67
+ // ── Spinner color (loading state) — herda accent ──
68
+ .step-spinner {
69
+ color: var(--matcha-color-accent);
70
+ }
71
+ }
72
+ }
73
+
74
+ // ── Layout ──────────────────────────────────────────────────────────────────
75
+
76
+ matcha-stepper {
77
+ display: flex;
78
+ width: 100%;
79
+
80
+ // ── Horizontal (default) ──
81
+ &:not([orientation="vertical"]) {
82
+ flex-direction: column;
83
+ align-items: stretch;
84
+ gap: var(--matcha-space-200, 16px);
85
+ }
86
+
87
+ // ── Vertical ──
88
+ &[orientation="vertical"] {
89
+ flex-direction: row;
90
+ align-items: flex-start;
91
+ gap: var(--matcha-space-300, 24px);
92
+ }
93
+ }
94
+
95
+ // O controller é flex próprio (canon: layout dos step-items/connectors).
96
+ // Horizontal default · Vertical quando [orientation="vertical"].
97
+ matcha-stepper-controller {
98
+ display: inline-flex;
99
+ align-items: center;
100
+ gap: 0;
101
+
102
+ &[aria-orientation="vertical"] {
103
+ flex-direction: column;
104
+ align-items: flex-start;
105
+ }
106
+
107
+ // ── Compact mode (esconde labels, mostra só indicators + connectors) ──
108
+ // Manual: <matcha-stepper-controller compact>
109
+ // Auto: viewports <480px via media query abaixo
110
+ &[compact] .step-label {
111
+ display: none;
112
+ }
113
+ }
114
+
115
+ // ── Step item (button native pra a11y de focus/Enter/Space) ──
116
+ .step-item {
117
+ display: inline-flex;
118
+ align-items: center;
119
+ gap: var(--matcha-space-100, 8px);
120
+ flex-shrink: 0;
121
+ // Reseta button defaults
122
+ background: none;
123
+ border: none;
124
+ padding: var(--matcha-space-075, 6px) var(--matcha-space-100, 8px);
125
+ margin: 0;
126
+ font: inherit;
127
+ color: inherit;
128
+ cursor: default;
129
+ white-space: nowrap;
130
+ border-radius: var(--matcha-radius-md, 8px);
131
+ transition: background-color 160ms ease, transform 160ms ease;
132
+
133
+ &.step-clickable {
134
+ cursor: pointer;
135
+
136
+ &:hover {
137
+ background: var(--matcha-color-surface-hover, rgba(232, 234, 237, 0.06));
138
+ transform: translateY(-1px);
139
+ }
140
+
141
+ &:active { transform: scale(0.98); }
142
+ }
143
+
144
+ &.step-disabled,
145
+ &.step-item-disabled {
146
+ opacity: var(--matcha-opacity-disabled, 0.4);
147
+ pointer-events: none;
148
+ }
149
+
150
+ &.step-item-loading {
151
+ pointer-events: none;
152
+ }
153
+ }
154
+
155
+ // ── Indicator circle (com transition de cor pra trocas suaves) ──
156
+ .step-indicator {
157
+ display: flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ border-radius: 50%;
161
+ flex-shrink: 0;
162
+ font-family: var(--matcha-font-family);
163
+ transition:
164
+ background-color 240ms cubic-bezier(0.4, 0, 0.2, 1),
165
+ color 240ms cubic-bezier(0.4, 0, 0.2, 1);
166
+
167
+ &.step-sm {
168
+ width: var(--matcha-icon-size-md, 24px);
169
+ height: var(--matcha-icon-size-md, 24px);
170
+ font-size: var(--matcha-text-body-md, 14px);
171
+ font-weight: var(--matcha-weight-regular, 400);
172
+ }
173
+
174
+ &.step-md {
175
+ width: var(--matcha-space-400, 32px);
176
+ height: var(--matcha-space-400, 32px);
177
+ font-size: var(--matcha-text-title-sm, 16px);
178
+ font-weight: var(--matcha-weight-semibold, 600);
179
+ }
180
+
181
+ matcha-icon {
182
+ flex-shrink: 0;
183
+ }
184
+ }
185
+
186
+ // ── Spinner (loading state) ──
187
+ .step-spinner {
188
+ display: inline-flex;
189
+ align-items: center;
190
+ justify-content: center;
191
+ width: 100%;
192
+ height: 100%;
193
+
194
+ svg {
195
+ width: 70%;
196
+ height: 70%;
197
+ animation: matcha-stepper-spin 800ms linear infinite;
198
+ }
199
+ }
200
+
201
+ @keyframes matcha-stepper-spin {
202
+ to { transform: rotate(360deg); }
203
+ }
204
+
205
+ // ── Label (com transition pra trocas de cor suaves) ──
206
+ .step-label {
207
+ font-family: var(--matcha-font-family);
208
+ transition: color 240ms cubic-bezier(0.4, 0, 0.2, 1);
209
+
210
+ &.step-sm {
211
+ font-size: var(--matcha-text-body-md, 14px);
212
+ line-height: var(--matcha-leading-body-md, 20px);
213
+ font-weight: var(--matcha-weight-regular, 400);
214
+ }
215
+
216
+ &.step-md {
217
+ font-size: var(--matcha-text-title-sm, 16px);
218
+ line-height: var(--matcha-leading-title-sm, 22px);
219
+ font-weight: var(--matcha-weight-semibold, 600);
220
+ }
221
+
222
+ // Ativo SM gets medium weight
223
+ .step-item-ativo &.step-sm {
224
+ font-weight: var(--matcha-weight-medium, 500);
225
+ }
226
+ }
227
+
228
+ // ── Connector line (track + animated fill) ──
229
+ //
230
+ // Track: fixed-width line (40px horizontal, 24px vertical) com bg disabled.
231
+ // Fill: ::before pseudo growing scaleX(0→1) quando state complete.
232
+ // Pattern Material 3 / iOS Wizard — feedback de progresso direto.
233
+ .step-connector {
234
+ flex: 0 0 var(--matcha-space-500, 40px);
235
+ height: var(--matcha-border-thin, 2px);
236
+ margin: 0 var(--matcha-space-050, 4px);
237
+ border-radius: var(--matcha-radius-pill, 9999px);
238
+ position: relative;
239
+ overflow: hidden;
240
+
241
+ &::before {
242
+ content: '';
243
+ position: absolute;
244
+ inset: 0;
245
+ border-radius: inherit;
246
+ transform: scaleX(0);
247
+ transform-origin: left center;
248
+ transition: transform 400ms cubic-bezier(0.4, 0, 0.2, 1);
249
+ }
250
+
251
+ &.step-connector-complete::before {
252
+ transform: scaleX(1);
253
+ }
254
+
255
+ // Vertical connector — fill cresce de cima → baixo
256
+ matcha-stepper[orientation="vertical"] & {
257
+ width: var(--matcha-border-thin, 2px);
258
+ height: var(--matcha-space-300, 24px);
259
+ flex: 0 0 var(--matcha-space-300, 24px);
260
+ margin: var(--matcha-space-050, 4px) 0 var(--matcha-space-050, 4px)
261
+ calc(var(--matcha-icon-size-md, 24px) / 2 - 1px);
262
+
263
+ &::before {
264
+ transform: scaleY(0);
265
+ transform-origin: top center;
266
+ }
267
+
268
+ &.step-connector-complete::before {
269
+ transform: scaleY(1);
270
+ }
271
+ }
272
+
273
+ matcha-stepper[orientation="vertical"].step-md & {
274
+ margin-left: calc(var(--matcha-space-400, 32px) / 2 - 1px);
275
+ }
276
+ }
277
+
278
+ // ── Mobile: auto-compact mode em viewports estreitos ────────────────────────
279
+ // Esconde labels (mantém só indicators + connectors) — canon iOS form wizard.
280
+ @media (max-width: 480px) {
281
+ matcha-stepper-controller:not([aria-orientation="vertical"]) .step-label {
282
+ display: none;
283
+ }
284
+ matcha-stepper:not([orientation="vertical"]) {
285
+ overflow-x: auto;
286
+ }
287
+ }
288
+
289
+ // ── Variant "progress": label inline à esquerda + N botões-pill clicáveis ──
290
+ // Cada botão É o pill (visual + click no mesmo elemento). Tokens canônicos
291
+ // DSV3 idem matcha-progress-bar[type=segmented]: empty=disabled-bg,
292
+ // filled=accent. Compacto, single-line, ideal pra toolbar-actions slot
293
+ // (1-line evita assimetria vertical com title 1-line do toolbar).
294
+ .step-progress {
295
+ display: flex;
296
+ flex-direction: row;
297
+ align-items: center;
298
+ gap: var(--matcha-space-100, 8px);
299
+ }
300
+
301
+ .step-progress-label {
302
+ font-family: var(--matcha-font-family);
303
+ font-size: var(--matcha-text-body-sm, 12px);
304
+ font-weight: var(--matcha-weight-semibold, 600);
305
+ line-height: var(--matcha-leading-body-sm, 16px);
306
+ color: var(--matcha-color-text-primary);
307
+ white-space: nowrap;
308
+ }
309
+
310
+ .step-progress-bar {
311
+ display: inline-flex;
312
+ align-items: center;
313
+ gap: var(--matcha-space-050, 4px);
314
+ }
315
+
316
+ // Botão-pill: visual canon DSV3 (8px tall, pill radius, disabled-bg base).
317
+ // Width fixo 32px = consistente entre steps. Cursor pointer. Tokens 1:1
318
+ // com matcha-progress-bar[type=segmented] pra parity visual.
319
+ .step-progress-pill {
320
+ display: block;
321
+ width: 32px;
322
+ height: 8px;
323
+ padding: 0;
324
+ border: 0;
325
+ background: var(--matcha-color-disabled-bg, #282C34);
326
+ cursor: pointer;
327
+ border-radius: var(--matcha-radius-pill, 9999px);
328
+ transition: background var(--matcha-duration-fast, 200ms) ease,
329
+ transform var(--matcha-duration-fast, 200ms) ease;
330
+ }
331
+
332
+ // is-filled: step ≤ activeStep (completos + ativo) ficam accent.
333
+ .step-progress-pill.is-filled {
334
+ background: var(--matcha-color-accent, #009400);
335
+ }
336
+
337
+ // Hover state: pendentes mostram preview accent com opacity; ativo/completos
338
+ // crescem 1.25× verticalmente pra feedback perceptivel.
339
+ .step-progress-pill:not([disabled]):not(.is-filled):hover {
340
+ background: var(--matcha-color-accent, #009400);
341
+ opacity: 0.5;
342
+ }
343
+
344
+ .step-progress-pill:not([disabled]).is-filled:hover {
345
+ transform: scaleY(1.25);
346
+ }
347
+
348
+ .step-progress-pill:not([disabled]):focus-visible {
349
+ outline: 2px solid var(--matcha-color-accent, #009400);
350
+ outline-offset: 2px;
351
+ }
352
+
353
+ .step-progress-pill[disabled] {
354
+ cursor: not-allowed;
355
+ opacity: 0.4;
356
+ }
357
+
358
+ // ── Reduced motion (WCAG 2.2.2) ─────────────────────────────────────────────
359
+ @media (prefers-reduced-motion: reduce) {
360
+ .step-item,
361
+ .step-indicator,
362
+ .step-label,
363
+ .step-connector,
364
+ .step-connector::before {
365
+ transition: none;
366
+ }
367
+ .step-spinner svg {
368
+ animation: none;
369
+ }
370
+ .step-item.step-clickable:hover {
371
+ transform: none;
372
+ }
373
+ .step-item.step-clickable:active {
374
+ transform: none;
375
+ }
376
+ }