@inchurch/matcha-theme 20.276.0 → 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 (69) hide show
  1. package/abstracts/_functions.scss +0 -26
  2. package/abstracts/_theme-api.scss +230 -0
  3. package/components/app-page-header.scss +16 -17
  4. package/components/matcha-accordion.scss +5 -6
  5. package/components/matcha-audio-player.scss +1 -2
  6. package/components/matcha-autocomplete.scss +10 -11
  7. package/components/matcha-avatar.scss +3 -3
  8. package/components/matcha-badge.scss +11 -11
  9. package/components/matcha-breadcrumb.scss +6 -7
  10. package/components/matcha-button-toggle.scss +2 -2
  11. package/components/matcha-buttons.scss +34 -34
  12. package/components/matcha-calendar.scss +31 -35
  13. package/components/matcha-cards.scss +31 -32
  14. package/components/matcha-chart-card.scss +5 -12
  15. package/components/matcha-checkbox.scss +13 -13
  16. package/components/matcha-chip.scss +2 -2
  17. package/components/matcha-color-pick.scss +1 -2
  18. package/components/matcha-command-palette.scss +17 -18
  19. package/components/matcha-crop.scss +0 -1
  20. package/components/matcha-date.scss +3 -3
  21. package/components/matcha-draggable.scss +4 -5
  22. package/components/matcha-drawer.scss +18 -28
  23. package/components/matcha-drop-list.scss +51 -52
  24. package/components/matcha-emoji.scss +2 -2
  25. package/components/{matcha-uploader.scss → matcha-file-uploader.scss} +185 -116
  26. package/components/matcha-footer.scss +3 -4
  27. package/components/matcha-form-field.scss +3 -3
  28. package/components/matcha-form-section.scss +5 -6
  29. package/components/matcha-header.scss +3 -4
  30. package/components/matcha-hint-text.scss +4 -4
  31. package/components/matcha-horizontal-tree.scss +15 -16
  32. package/components/matcha-icon.scss +27 -27
  33. package/components/matcha-image.scss +2 -3
  34. package/components/matcha-list.scss +11 -12
  35. package/components/matcha-menu.scss +2 -2
  36. package/components/matcha-modal.scss +5 -6
  37. package/components/matcha-nav.scss +16 -16
  38. package/components/matcha-notification.scss +3 -4
  39. package/components/matcha-option.scss +19 -0
  40. package/components/matcha-page-builder.scss +16 -16
  41. package/components/matcha-paginator.scss +6 -7
  42. package/components/matcha-panel.scss +4 -5
  43. package/components/matcha-profile-card.scss +3 -3
  44. package/components/matcha-progress-bar.scss +1 -1
  45. package/components/matcha-radio.scss +6 -6
  46. package/components/matcha-scrollbar.scss +1 -2
  47. package/components/matcha-scrollbox-shadow.scss +35 -37
  48. package/components/matcha-section.scss +5 -9
  49. package/components/matcha-select-multiple.scss +56 -0
  50. package/components/matcha-select.scss +7 -7
  51. package/components/matcha-skeleton.scss +6 -7
  52. package/components/matcha-slide-toggle.scss +33 -299
  53. package/components/matcha-slider.scss +5 -5
  54. package/components/matcha-snack-bar.scss +17 -18
  55. package/components/matcha-spin.scss +12 -103
  56. package/components/matcha-spinner.scss +1 -1
  57. package/components/matcha-stepper.scss +15 -16
  58. package/components/matcha-table.scss +14 -15
  59. package/components/matcha-tabs.scss +22 -24
  60. package/components/matcha-text-editor.scss +78 -78
  61. package/components/matcha-time.scss +2 -2
  62. package/components/matcha-toolbar.scss +1 -1
  63. package/components/matcha-tooltip.scss +14 -12
  64. package/main.scss +7 -2
  65. package/package.json +1 -1
  66. package/tokens/_color-tokens.scss +0 -3
  67. package/tokens/_css-custom-properties.scss +233 -179
  68. package/tokens/_primitives.scss +82 -0
  69. package/tokens/_semantic-aliases.scss +120 -0
@@ -39,141 +39,50 @@
39
39
  }
40
40
 
41
41
  @mixin matcha-spin($theme) {
42
- $is-dark: map.get($theme, is-dark);
43
42
 
44
43
  matcha-spin:not([color]) .spin-progress {
45
- stroke: var(--matcha-color-accent, #{getAccent($theme)});
44
+ stroke: var(--matcha-color-accent);
46
45
  }
47
46
 
48
47
  matcha-spin {
49
48
 
50
- // Red
51
- &[color="red"] .spin-progress {
52
- stroke: getRed($theme);
53
- }
54
-
55
- // Pink
56
- &[color="pink"] .spin-progress {
57
- stroke: getPink($theme);
58
- }
59
-
60
- // Purple
61
- &[color="purple"] .spin-progress {
62
- stroke: getPurple($theme);
63
- }
64
-
65
- // Deep Purple
66
- &[color="deep-purple"] .spin-progress {
67
- stroke: getDeepPurple($theme);
68
- }
69
-
70
- // Indigo
71
- &[color="indigo"] .spin-progress {
72
- stroke: getIndigo($theme);
73
- }
74
-
75
- // Blue
76
- &[color="blue"] .spin-progress {
77
- stroke: getBlue($theme);
78
- }
79
-
80
- // Light Blue
81
- &[color="light-blue"] .spin-progress {
82
- stroke: getLightBlue($theme);
83
- }
84
-
85
- // Cyan
86
- &[color="cyan"] .spin-progress {
87
- stroke: getCyan($theme);
88
- }
89
-
90
- // Teal
91
- &[color="teal"] .spin-progress {
92
- stroke: getTeal($theme);
93
- }
94
-
95
- // Green
96
- &[color="green"] .spin-progress {
97
- stroke: getGreen($theme);
98
- }
99
-
100
- // Light Green
101
- &[color="light-green"] .spin-progress {
102
- stroke: getLightGreen($theme);
103
- }
104
-
105
- // Lime
106
- &[color="lime"] .spin-progress {
107
- stroke: getLime($theme);
108
- }
109
-
110
- // Yellow
111
- &[color="yellow"] .spin-progress {
112
- stroke: getYellow($theme);
113
- }
114
-
115
- // Amber
116
- &[color="amber"] .spin-progress {
117
- stroke: getAmber($theme);
118
- }
119
-
120
- // Orange
121
- &[color="orange"] .spin-progress {
122
- stroke: getOrange($theme);
123
- }
124
-
125
- // Deep Orange
126
- &[color="deep-orange"] .spin-progress {
127
- stroke: getDeepOrange($theme);
128
- }
129
-
130
- // Brown
131
- &[color="brown"] .spin-progress {
132
- stroke: getBrown($theme);
133
- }
134
-
135
- // Grey
136
- &[color="grey"] .spin-progress {
137
- stroke: getGrey($theme);
138
- }
139
-
140
- // Blue Grey
141
- &[color="blue-grey"] .spin-progress {
142
- stroke: getBlueGrey($theme);
143
- }
49
+ // Cores nomeadas de paleta (red/pink/blue/… 19 famílias) DEPRECADAS na migração
50
+ // runtime-theming (2026-06-19): sem uso real (só doc auto-gerada). Use as semânticas
51
+ // abaixo (primary/accent/feedback). Remove a dependência dos getters de paleta
52
+ // (getRed…getBlueGrey, shade mode-dependente da paleta Material legada).
144
53
 
145
54
  // Accent
146
55
  &[color="accent"] .spin-progress {
147
- stroke: var(--matcha-color-accent, #{getAccent($theme)});
56
+ stroke: var(--matcha-color-accent);
148
57
  }
149
58
 
150
59
  // Primary
151
60
  &[color="primary"] .spin-progress {
152
- stroke: var(--matcha-color-primary, #{getPrimary($theme)});
61
+ stroke: var(--matcha-color-primary);
153
62
  }
154
63
 
155
64
  // Success
156
65
  &[color="success"] .spin-progress {
157
- stroke: var(--matcha-color-success, #{getSuccess($theme)});
66
+ stroke: var(--matcha-color-success);
158
67
  }
159
68
 
160
69
  // Warn
161
70
  &[color="warn"] .spin-progress {
162
- stroke: var(--matcha-color-warn, #{getWarn($theme)});
71
+ stroke: var(--matcha-color-warn);
163
72
  }
164
73
 
165
74
  // Danger
166
75
  &[color="danger"] .spin-progress {
167
- stroke: var(--matcha-color-danger, #{getDanger($theme)});
76
+ stroke: var(--matcha-color-danger);
168
77
  }
169
78
 
170
79
  // Info
171
80
  &[color="info"] .spin-progress {
172
- stroke: var(--matcha-color-info, #{getInfo($theme)});
81
+ stroke: var(--matcha-color-info);
173
82
  }
174
83
 
175
84
  .spin-placeholder {
176
- stroke: var(--matcha-color-disabled, #{getDisabled($theme)});
85
+ stroke: var(--matcha-color-disabled);
177
86
  }
178
87
 
179
88
  &:not([size]) {
@@ -22,7 +22,7 @@
22
22
  );
23
23
 
24
24
  matcha-spinner {
25
- --matcha-spinner-fill: var(--matcha-color-accent, #{getAccent($theme)});
25
+ --matcha-spinner-fill: var(--matcha-color-accent);
26
26
 
27
27
  @each $name, $fn in $semantic-colors {
28
28
  &[color="#{$name}"] {
@@ -8,7 +8,6 @@
8
8
  // =============================================================================
9
9
 
10
10
  @mixin matcha-stepper-theme($theme) {
11
- $is-dark: map.get($theme, is-dark);
12
11
 
13
12
  matcha-stepper {
14
13
  // ── Step indicators ──
@@ -16,58 +15,58 @@
16
15
  // (canon Figma DSV3: bola accent atrás, ícone outlined dentro).
17
16
  // matcha-icon NÃO herda `color` do parent — usa `--matcha-icon-color`.
18
17
  .step-indicator-completo {
19
- background: var(--matcha-color-accent, #{getAccent($theme)});
20
- color: var(--matcha-color-accent-text-on, var(--matcha-color-accent-contrast, #{getAccentContrast($theme)}));
21
- --matcha-icon-color: var(--matcha-color-accent-text-on, var(--matcha-color-accent-contrast, #{getAccentContrast($theme)}));
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));
22
21
  }
23
22
 
24
23
  .step-indicator-ativo {
25
- background: var(--matcha-color-fg, #{getForeground($theme)});
26
- color: var(--matcha-color-bg, #{getBackground($theme)});
24
+ background: var(--matcha-color-fg);
25
+ color: var(--matcha-color-bg);
27
26
  }
28
27
 
29
28
  .step-indicator-pendente,
30
29
  .step-indicator-disabled {
31
- background: var(--matcha-color-disabled, #{getDisabled($theme)});
32
- color: var(--matcha-color-bg, #{getBackground($theme)});
30
+ background: var(--matcha-color-disabled);
31
+ color: var(--matcha-color-bg);
33
32
  }
34
33
 
35
34
  // ── Labels ──
36
35
  .step-label-completo {
37
- color: var(--matcha-color-accent, #{getAccent($theme)});
36
+ color: var(--matcha-color-accent);
38
37
  }
39
38
 
40
39
  .step-label-ativo {
41
- color: var(--matcha-color-fg, #{getForeground($theme)});
40
+ color: var(--matcha-color-fg);
42
41
  }
43
42
 
44
43
  .step-label-pendente,
45
44
  .step-label-disabled {
46
- color: var(--matcha-color-text-placeholder, #{getBlueGrey($theme)});
45
+ color: var(--matcha-color-text-placeholder);
47
46
  }
48
47
 
49
48
  // ── Connector lines (track + fill animation) ──
50
49
  .step-connector {
51
- background: var(--matcha-color-disabled, #{getDisabled($theme)});
50
+ background: var(--matcha-color-disabled);
52
51
 
53
52
  // Pseudo "fill" que cresce da esquerda → direita quando step completa.
54
53
  &::before {
55
- background: var(--matcha-color-accent, #{getAccent($theme)});
54
+ background: var(--matcha-color-accent);
56
55
  }
57
56
  }
58
57
 
59
58
  // ── Focus ring polido (offset 4px + halo) ──
60
59
  .step-item:focus-visible {
61
60
  outline: var(--matcha-state-focus-ring-width, 2px) solid
62
- var(--matcha-color-accent, #{getAccent($theme)});
61
+ var(--matcha-color-accent);
63
62
  outline-offset: var(--matcha-state-focus-ring-offset, 4px);
64
63
  border-radius: var(--matcha-radius-md, 8px);
65
- box-shadow: 0 0 0 4px rgba(getAccent($theme), 0.16);
64
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--matcha-color-accent) 16%, transparent);
66
65
  }
67
66
 
68
67
  // ── Spinner color (loading state) — herda accent ──
69
68
  .step-spinner {
70
- color: var(--matcha-color-accent, #{getAccent($theme)});
69
+ color: var(--matcha-color-accent);
71
70
  }
72
71
  }
73
72
  }
@@ -24,7 +24,6 @@
24
24
  // =============================================================================
25
25
 
26
26
  @mixin matcha-table-modern($theme) {
27
- $is-dark: map.get($theme, is-dark);
28
27
 
29
28
  // ═══════════════════════════════════════════════════════════════════════
30
29
  // CSS vars do componente — única fonte de verdade. ZERO literal hardcoded
@@ -60,9 +59,9 @@
60
59
  // ── Surface colors ────────────────────────────────────────────────────
61
60
  --matcha-table-cell-bg: var(--matcha-color-surface-card);
62
61
  --matcha-table-row-bg-selected: var(--matcha-color-accent-alpha-12,
63
- rgba(#{getAccent($theme)}, 0.12));
62
+ rgba(var(--matcha-color-accent), 0.12));
64
63
  --matcha-table-row-bg-striped: var(--matcha-color-surface-card-alt,
65
- rgba(#{getForeground($theme)}, 0.02));
64
+ rgba(var(--matcha-color-fg), 0.02));
66
65
  // Hover NÃO usa surface-table-row-hover token (tá próximo demais de surface-card
67
66
  // em dark e fica imperceptível). Calibrado pra delta visível mesmo sobre stripe.
68
67
  // CSS custom property values são TEXTO LITERAL pro Sass — fn calls Sass
@@ -70,26 +69,26 @@
70
69
  // evaluar `getForeground($theme)` ANTES do output. Sem isso, o valor sai
71
70
  // literal no bundle (ex: `rgba(getForeground($theme), 0.12)`) e o browser
72
71
  // descarta como invalid CSS (= chevron invisível, hover sem cor, etc).
73
- --matcha-table-row-bg-hover: rgba(#{getForeground($theme)}, 0.12);
74
- --matcha-table-row-bg-hover-striped: rgba(#{getForeground($theme)}, 0.18);
75
- --matcha-table-header-bg-hover: rgba(#{getForeground($theme)}, 0.10);
72
+ --matcha-table-row-bg-hover: rgba(var(--matcha-color-fg), 0.12);
73
+ --matcha-table-row-bg-hover-striped: rgba(var(--matcha-color-fg), 0.18);
74
+ --matcha-table-header-bg-hover: rgba(var(--matcha-color-fg), 0.10);
76
75
 
77
76
  // ── Sort indicator colors ─────────────────────────────────────────────
78
77
  // Inactive usa alpha 0.45 no foreground — claramente VISÍVEL como "ali tem
79
78
  // sort", sem competir com texto do header. Hover/ativo passa pra accent full.
80
- --matcha-table-sort-icon-color: rgba(#{getForeground($theme)}, 0.45);
81
- --matcha-table-sort-icon-color-active: var(--matcha-color-accent, #{getAccent($theme)});
79
+ --matcha-table-sort-icon-color: rgba(var(--matcha-color-fg), 0.45);
80
+ --matcha-table-sort-icon-color-active: var(--matcha-color-accent);
82
81
  --matcha-table-sort-icon-size: var(--matcha-space-250, 20px);
83
82
 
84
83
  // ── Empty cell placeholder ────────────────────────────────────────────
85
84
  --matcha-table-empty-cell-text: var(--matcha-color-text-muted,
86
- rgba(#{getForeground($theme)}, 0.5));
85
+ rgba(var(--matcha-color-fg), 0.5));
87
86
 
88
87
  // ── Variant accent (semantic row) ─────────────────────────────────────
89
88
  --matcha-table-variant-accent-width: var(--matcha-space-050, 4px);
90
89
  --matcha-table-row-accent-child-opacity: 0.5;
91
90
  --matcha-table-selected-accent-width: var(--matcha-border-thin, 2px);
92
- --matcha-table-selected-accent-color: var(--matcha-color-accent, #{getAccent($theme)});
91
+ --matcha-table-selected-accent-color: var(--matcha-color-accent);
93
92
 
94
93
  // ── Column width hints (utility classes col-*) ────────────────────────
95
94
  --matcha-table-col-checkbox-width: var(--matcha-space-600, 48px);
@@ -103,7 +102,7 @@
103
102
  --matcha-table-loading-pulse-opacity-min: 0.5;
104
103
  --matcha-table-transition-duration: var(--matcha-duration-instant, 80ms);
105
104
  --matcha-table-focus-ring-width: var(--matcha-state-focus-ring-width, 2px);
106
- --matcha-table-focus-ring-color: var(--matcha-color-accent, #{getAccent($theme)});
105
+ --matcha-table-focus-ring-color: var(--matcha-color-accent);
107
106
 
108
107
  // ── Empty state row (matcha-table-empty directive) ────────────────────
109
108
  --matcha-table-empty-padding-y: var(--matcha-space-500, 40px);
@@ -133,7 +132,7 @@
133
132
  line-height: var(--matcha-table-font-line-height);
134
133
  font-weight: var(--matcha-weight-regular, 400);
135
134
  color: var(--matcha-color-text-secondary,
136
- rgba(getForeground($theme), 0.7));
135
+ color-mix(in srgb, var(--matcha-color-fg) 70%, transparent));
137
136
 
138
137
  // ── Header cells (text/primary, border-bottom 2px, height 64) ────────
139
138
  thead th {
@@ -146,7 +145,7 @@
146
145
  var(--matcha-table-cell-padding-x-left);
147
146
  background: var(--matcha-table-cell-bg);
148
147
  color: var(--matcha-color-text-primary,
149
- var(--matcha-color-fg, #{getForeground($theme)}));
148
+ var(--matcha-color-fg));
150
149
  // Header menor que body — hierarquia "metadado" vs "conteúdo".
151
150
  font-size: var(--matcha-table-header-font-size);
152
151
  line-height: var(--matcha-table-header-font-line-height);
@@ -198,7 +197,7 @@
198
197
  // muted antes via alpha 0.45). Reforça que tá interativo.
199
198
  &:hover::after {
200
199
  background: var(--matcha-color-text-primary,
201
- var(--matcha-color-fg, #{getForeground($theme)}));
200
+ var(--matcha-color-fg));
202
201
  }
203
202
 
204
203
  // Padding-right SEMPRE reserva espaço pro chevron. Antes ajustava
@@ -250,7 +249,7 @@
250
249
  var(--matcha-table-cell-padding-x-left);
251
250
  background: var(--matcha-table-cell-bg);
252
251
  color: var(--matcha-color-text-secondary,
253
- rgba(getForeground($theme), 0.7));
252
+ color-mix(in srgb, var(--matcha-color-fg) 70%, transparent));
254
253
  vertical-align: middle;
255
254
  border-bottom: var(--matcha-table-border-row) solid
256
255
  var(--matcha-table-border-color);
@@ -9,7 +9,7 @@
9
9
  button[matcha-button],
10
10
  a[matcha-button] {
11
11
  &:not([active-item="true"]) {
12
- background: var(--matcha-color-surface, #{getSurface($theme)});
12
+ background: var(--matcha-color-surface);
13
13
  color: call(#{$colorFn}, $theme);
14
14
  box-shadow: 0 0 0 0px inset;
15
15
 
@@ -212,7 +212,7 @@ matcha-tabs {
212
212
  button[matcha-button],
213
213
  a[matcha-button] {
214
214
  &:focus-visible:not([disabled]):not([disabled="true"]) {
215
- outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent, #{getAccent($theme)});
215
+ outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent);
216
216
  outline-offset: var(--matcha-state-focus-ring-offset, 2px);
217
217
  }
218
218
  }
@@ -287,7 +287,6 @@ matcha-tabs {
287
287
  // =============================================================================
288
288
 
289
289
  @mixin matcha-tabs-modern($theme) {
290
- $is-dark: map.get($theme, is-dark);
291
290
 
292
291
  // ── Component-level tokens (overridable pelo consumer via CSS vars) ───
293
292
  matcha-tabs {
@@ -344,7 +343,7 @@ matcha-tabs {
344
343
  left: var(--matcha-tab-indicator-left, 0);
345
344
  width: var(--matcha-tab-indicator-width, 0);
346
345
  height: var(--matcha-border-thin, 2px);
347
- background: var(--matcha-color-accent, #{getAccent($theme)});
346
+ background: var(--matcha-color-accent);
348
347
  border-radius: 0;
349
348
  transition:
350
349
  left var(--matcha-duration-fast, 200ms) var(--matcha-easing-emphasized, cubic-bezier(0.2, 0, 0, 1)),
@@ -362,8 +361,8 @@ matcha-tabs {
362
361
  border: none;
363
362
  // Border bottom 2px — per item (track surface-border, slider sobrepõe accent)
364
363
  border-bottom: var(--matcha-border-thin, 2px) solid
365
- var(--matcha-color-surface-border, #{getDisabled($theme)});
366
- background: var(--matcha-color-surface-card, #{getSurface($theme)});
364
+ var(--matcha-color-surface-border);
365
+ background: var(--matcha-color-surface-card);
367
366
  cursor: pointer;
368
367
  position: relative;
369
368
  overflow: hidden;
@@ -372,7 +371,7 @@ matcha-tabs {
372
371
  font-weight: var(--matcha-weight-regular, 400);
373
372
  line-height: var(--matcha-leading-body-lg, 24px);
374
373
  color: var(--matcha-color-text-secondary,
375
- rgba(getForeground($theme), 0.7));
374
+ color-mix(in srgb, var(--matcha-color-fg) 70%, transparent));
376
375
  white-space: nowrap;
377
376
  flex-shrink: 0;
378
377
  min-width: var(--matcha-tab-min-width-underline);
@@ -398,10 +397,10 @@ matcha-tabs {
398
397
  // — cobre 100% mesmo com subpixel mismatch do indicator) ──
399
398
  &.active,
400
399
  &[aria-selected="true"] {
401
- color: var(--matcha-color-accent, #{getAccent($theme)});
400
+ color: var(--matcha-color-accent);
402
401
  font-weight: var(--matcha-weight-semibold, 600);
403
402
  line-height: var(--matcha-leading-title-sm, 22px);
404
- border-bottom-color: var(--matcha-color-accent, #{getAccent($theme)});
403
+ border-bottom-color: var(--matcha-color-accent);
405
404
  }
406
405
 
407
406
  // ── Disabled ──
@@ -415,11 +414,11 @@ matcha-tabs {
415
414
  // ── Focus ring polido (offset 4px + halo 16% alpha) ──
416
415
  &:focus-visible {
417
416
  outline: var(--matcha-state-focus-ring-width, 2px) solid
418
- var(--matcha-color-accent, #{getAccent($theme)});
417
+ var(--matcha-color-accent);
419
418
  outline-offset: var(--matcha-state-focus-ring-offset, 4px);
420
419
  border-radius: var(--matcha-radius-sm, 4px);
421
420
  box-shadow: 0 0 0 var(--matcha-tab-focus-halo)
422
- rgba(getAccent($theme), var(--matcha-tab-focus-halo-alpha));
421
+ color-mix(in srgb, var(--matcha-color-accent) calc(var(--matcha-tab-focus-halo-alpha) * 100%), transparent);
423
422
  }
424
423
  }
425
424
  }
@@ -469,8 +468,7 @@ matcha-tabs {
469
468
  // canon: atom interativo / container. Antes era md (4px), o que dava
470
469
  // disparidade 1:4 e quebrava a leitura conjunta tabs + cards.
471
470
  border-radius: var(--matcha-radius-lg, 8px);
472
- background: var(--matcha-color-surface-card,
473
- #{getSurface($theme)});
471
+ background: var(--matcha-color-surface-card);
474
472
  cursor: pointer;
475
473
  position: relative;
476
474
  overflow: hidden;
@@ -479,7 +477,7 @@ matcha-tabs {
479
477
  font-weight: var(--matcha-weight-regular, 400);
480
478
  line-height: var(--matcha-leading-body-md, 20px);
481
479
  color: var(--matcha-color-text-secondary,
482
- rgba(getForeground($theme), 0.7));
480
+ color-mix(in srgb, var(--matcha-color-fg) 70%, transparent));
483
481
  flex-shrink: 0;
484
482
  min-width: var(--matcha-tab-min-width-card-horizontal);
485
483
  transition:
@@ -507,8 +505,8 @@ matcha-tabs {
507
505
  // ── Selecionado (Figma: border accent · texto text-primary NÃO accent) ──
508
506
  &.active,
509
507
  &[aria-selected="true"] {
510
- border-color: var(--matcha-color-accent, #{getAccent($theme)});
511
- color: var(--matcha-color-fg, #{getForeground($theme)});
508
+ border-color: var(--matcha-color-accent);
509
+ color: var(--matcha-color-fg);
512
510
  font-weight: var(--matcha-weight-medium, 500);
513
511
  }
514
512
 
@@ -523,10 +521,10 @@ matcha-tabs {
523
521
  // ── Focus ring polido ──
524
522
  &:focus-visible {
525
523
  outline: var(--matcha-state-focus-ring-width, 2px) solid
526
- var(--matcha-color-accent, #{getAccent($theme)});
524
+ var(--matcha-color-accent);
527
525
  outline-offset: var(--matcha-border-thin, 2px);
528
526
  box-shadow: 0 0 0 var(--matcha-tab-focus-halo)
529
- rgba(getAccent($theme), var(--matcha-tab-focus-halo-alpha));
527
+ color-mix(in srgb, var(--matcha-color-accent) calc(var(--matcha-tab-focus-halo-alpha) * 100%), transparent);
530
528
  }
531
529
  }
532
530
  }
@@ -545,9 +543,9 @@ matcha-tabs {
545
543
  min-width: var(--matcha-space-250, 20px);
546
544
  height: var(--matcha-space-250, 20px);
547
545
  padding: 0 var(--matcha-space-075, 6px);
548
- background: var(--matcha-color-accent, #{getAccent($theme)});
546
+ background: var(--matcha-color-accent);
549
547
  color: var(--matcha-color-accent-text-on,
550
- var(--matcha-color-accent-contrast, #{getAccentContrast($theme)}));
548
+ var(--matcha-color-accent-contrast));
551
549
  border-radius: var(--matcha-radius-pill, 9999px);
552
550
  font-size: var(--matcha-text-body-xs, 11px);
553
551
  font-weight: var(--matcha-weight-semibold, 600);
@@ -564,7 +562,7 @@ matcha-tabs {
564
562
  height: var(--matcha-space-300, 24px);
565
563
  border-radius: 50%;
566
564
  color: var(--matcha-color-text-secondary,
567
- rgba(getForeground($theme), 0.7));
565
+ color-mix(in srgb, var(--matcha-color-fg) 70%, transparent));
568
566
  transition:
569
567
  background-color var(--matcha-duration-instant, 80ms) ease,
570
568
  color var(--matcha-duration-instant, 80ms) ease;
@@ -574,13 +572,13 @@ matcha-tabs {
574
572
 
575
573
  &:hover {
576
574
  background: var(--matcha-color-surface-hover,
577
- rgba(getForeground($theme), 0.08));
578
- color: var(--matcha-color-fg, #{getForeground($theme)});
575
+ color-mix(in srgb, var(--matcha-color-fg) 8%, transparent));
576
+ color: var(--matcha-color-fg);
579
577
  }
580
578
 
581
579
  &:focus-visible {
582
580
  outline: var(--matcha-state-focus-ring-width, 2px) solid
583
- var(--matcha-color-accent, #{getAccent($theme)});
581
+ var(--matcha-color-accent);
584
582
  outline-offset: var(--matcha-border-thin, 2px);
585
583
  }
586
584