@inchurch/matcha-theme 22.39.0 → 22.40.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 (93) hide show
  1. package/abstracts/_colors.scss +291 -291
  2. package/abstracts/_elevation.scss +108 -108
  3. package/abstracts/_functions.scss +321 -321
  4. package/abstracts/_media-breakpoint.scss +26 -26
  5. package/abstracts/_theme-api.scss +224 -224
  6. package/abstracts/_typography.scss +128 -128
  7. package/base/_reset.scss +487 -487
  8. package/components/app-page-header.scss +260 -260
  9. package/components/matcha-accordion.scss +297 -297
  10. package/components/matcha-audio-player.scss +31 -31
  11. package/components/matcha-autocomplete.scss +145 -145
  12. package/components/matcha-avatar.scss +426 -426
  13. package/components/matcha-badge.scss +120 -120
  14. package/components/matcha-breadcrumb.scss +231 -231
  15. package/components/matcha-button-toggle.scss +484 -484
  16. package/components/matcha-buttons.scss +973 -973
  17. package/components/matcha-calendar.scss +253 -253
  18. package/components/matcha-cards.scss +212 -212
  19. package/components/matcha-chart-card.scss +53 -53
  20. package/components/matcha-checkbox.scss +266 -266
  21. package/components/matcha-chip.scss +311 -311
  22. package/components/matcha-color-pick.scss +34 -34
  23. package/components/matcha-command-palette.scss +316 -316
  24. package/components/matcha-crop.scss +419 -419
  25. package/components/matcha-date.scss +81 -81
  26. package/components/matcha-divider.scss +100 -100
  27. package/components/matcha-draggable.scss +23 -23
  28. package/components/matcha-drawer.scss +376 -376
  29. package/components/matcha-drop-image.scss +14 -14
  30. package/components/matcha-drop-list.scss +430 -430
  31. package/components/matcha-emoji.scss +69 -69
  32. package/components/matcha-empty-state.scss +230 -230
  33. package/components/matcha-file-uploader.scss +650 -650
  34. package/components/matcha-flag.scss +103 -103
  35. package/components/matcha-footer.scss +91 -91
  36. package/components/matcha-form-field.scss +883 -883
  37. package/components/matcha-form-section.scss +100 -100
  38. package/components/matcha-header.scss +135 -135
  39. package/components/matcha-highlight.scss +164 -164
  40. package/components/matcha-hint-text.scss +90 -90
  41. package/components/matcha-horizontal-tree.scss +247 -247
  42. package/components/matcha-icon.scss +111 -111
  43. package/components/matcha-image.scss +60 -60
  44. package/components/matcha-list.scss +211 -211
  45. package/components/matcha-menu.scss +99 -99
  46. package/components/matcha-modal.scss +210 -210
  47. package/components/matcha-nav.scss +770 -770
  48. package/components/matcha-notification.scss +417 -417
  49. package/components/matcha-option.scss +170 -170
  50. package/components/matcha-page-builder.scss +4196 -4196
  51. package/components/matcha-paginator.scss +699 -699
  52. package/components/matcha-panel.scss +216 -216
  53. package/components/matcha-period.scss +174 -174
  54. package/components/matcha-profile-card.scss +50 -50
  55. package/components/matcha-progress-bar.scss +355 -355
  56. package/components/matcha-radio.scss +325 -325
  57. package/components/matcha-ripple.scss +7 -7
  58. package/components/matcha-scrollbar.scss +33 -33
  59. package/components/matcha-scrollbox-shadow.scss +120 -120
  60. package/components/matcha-section.scss +102 -102
  61. package/components/matcha-select-multiple.scss +56 -56
  62. package/components/matcha-select.scss +643 -629
  63. package/components/matcha-skeleton.scss +182 -182
  64. package/components/matcha-slide-toggle.scss +369 -369
  65. package/components/matcha-slider.scss +285 -285
  66. package/components/matcha-snack-bar.scss +259 -259
  67. package/components/matcha-spin.scss +164 -164
  68. package/components/matcha-spinner.scss +97 -97
  69. package/components/matcha-stepper.scss +376 -376
  70. package/components/matcha-table-cell.scss +107 -107
  71. package/components/matcha-table.scss +722 -722
  72. package/components/matcha-tabs.scss +642 -642
  73. package/components/matcha-text-editor.scss +111 -111
  74. package/components/matcha-time.scss +33 -33
  75. package/components/matcha-timepicker.scss +13 -13
  76. package/components/matcha-toolbar.scss +366 -366
  77. package/components/matcha-tooltip.scss +235 -235
  78. package/components/matcha-tree-view.scss +658 -658
  79. package/layout/matcha-page-layout.scss +778 -778
  80. package/main.scss +334 -334
  81. package/package.json +1 -1
  82. package/tokens/_animations-tokens.scss +37 -37
  83. package/tokens/_breakpoints-tokens.scss +35 -35
  84. package/tokens/_color-tokens.scss +288 -288
  85. package/tokens/_elevation-tokens.scss +33 -33
  86. package/tokens/_emit-tokens.scss +329 -329
  87. package/tokens/_material-palette.scss +1149 -1149
  88. package/tokens/_primitives.scss +98 -98
  89. package/tokens/_semantic-aliases.scss +120 -120
  90. package/tokens/_spacing-tokens.scss +94 -94
  91. package/tokens/_static-tokens.scss +137 -137
  92. package/tokens/_typography-tokens.scss +65 -65
  93. package/vendors/charts.scss +90 -90
@@ -1,288 +1,288 @@
1
- @use "../abstracts/functions" as *;
2
- // =============================================================================
3
- // MATCHA — TOKENS DE COR (papéis semânticos por modo) · SINCRONIZADO DO FIGMA
4
- // =============================================================================
5
- // NÃO ajuste COR à mão. Fonte: tokens/matcha/colors/{Light,Dark}.json (Tokens Studio).
6
- // Sincronizado por scripts/matcha-tokens/sync-tokens.js — gate: sync-tokens.js --check.
7
- // Mudar cor: edite no Figma/tokens e rode sync-tokens.js --write [--adopt-drift].
8
- // Comentários, ordem e chaves PASSTHROUGH (sem fonte JSON) são curados — esses pode editar.
9
- // Consumido por _emit-tokens.scss (emissor) e por abstracts/_theme-api.scss (define-theme).
10
- // =============================================================================
11
- @use "sass:map";
12
-
13
- // ═══════════════════════════════════════════════════════════════════════════
14
- // 1. COLOR TOKENS — fonte única (light/dark) na ordem de emissão
15
- // LIGHT = Figma oficial (matcha/color/* JSON export hierárquico)
16
- // DARK = tokens confirmados pelo usuário (flat JSON)
17
- // ═══════════════════════════════════════════════════════════════════════════
18
- $matcha-color-tokens: (
19
- // ── Surface (9) — matcha/color/surface/* ─────────────────────────────────
20
- // 1:1 Figma DSV3 (Light + Dark JSON export 2026-05-29).
21
- // Light mode: sage-tinted neutrals (2–4% green hue da marca) + hierarquia perceptível.
22
- surface-bg: (light: #f1f4f1, dark: #111318),
23
- // bg-alpha light usa cor BASE distinta (#f0f2f5) — não é #f1f4f1 com alpha.
24
- // Decisão Figma intencional pra sutil shift de tint no estado transparente.
25
- surface-bg-alpha: (light: rgba(#f0f2f5, .5), dark: rgba(#111318, .5)),
26
- surface-bg-inverse: (light: #111318, dark: #f0f2f5),
27
- surface-bg-inverse-alpha: (light: rgba(#111318, .5), dark: rgba(#f0f2f5, .5)),
28
-
29
- // Card soft default — light #f7fcf7 (off-white com tint sage muito sutil).
30
- // Reduz glare contra surface-bg #f1f4f1 (Δ ~5 luminance). Pure white só pra
31
- // floating overlays via surface-card-strong (modal, command-palette).
32
- // Pattern Linear / Vercel / Notion: soft cards default + bright float.
33
- surface: (light: #f7fcf7, dark: #1c1f26),
34
- surface-card: (light: #f7fcf7, dark: #1c1f26),
35
- // Card strong — pure white (light) / lifted dark, pra floating overlays
36
- // que precisam máximo destaque sobre scrim. Modal, popover, dropdown,
37
- // command-palette. NÃO usar pra cards inline — vira agressivo.
38
- surface-card-strong: (light: #ffffff, dark: #262a32),
39
- // Canvas aninhada dentro de card (preview stage, code body, inset panels)
40
- // Light: sage (= bg da page, cria recorte sutil sobre card off-white)
41
- // Dark: mais clara que card (inverte lógica, dá profundidade em vez de buraco)
42
- surface-inner: (light: #f1f4f1, dark: #262a32),
43
- // card-alpha light usa #ffffff base (não #f7fcf7) — overlay/zebra com white puro
44
- surface-card-alpha: (light: rgba(#ffffff, .85), dark: rgba(#1c1f26, .5)),
45
- surface-card-inverse: (light: #1c1f26, dark: #ffffff),
46
-
47
- surface-sidebar: (light: #e4ebe5, dark: #0d0f14),
48
- surface-sidebar-hover: (light: #d8e1da, dark: #161920),
49
- // table-row-hover light: neutral #f4f4f4 (Figma — não tinted sage)
50
- surface-table-row-hover: (light: #f4f4f4, dark: #151a22),
51
-
52
- // Border sólido e visível (era rgba(0,0,0,.08) = invisível sobre sage bg)
53
- surface-border: (light: #e1e7e2, dark: rgba(255, 255, 255, .12)),
54
- // Border mais forte pra cards elevados (hero, playground — com shadow)
55
- surface-border-strong: (light: #c8d2ca, dark: rgba(255, 255, 255, .24)),
56
- surface-hover: (light: rgba(#e4ebe5, .5), dark: rgba(#111318, .5)),
57
-
58
- // Aliases (flat) — usados massivamente
59
- // Light mode softening 2026-05-18: fg de #1a1d21 (17:1, "tinta preta") → #2a2d33 (12:1 AAA, "tinta carvão").
60
- // Inspiração: tom entre Linear (#1a1d21, mais pesado) e GitHub (#1f2328) — reduz fatiga em sessions longas.
61
- bg: (light: #f1f4f1, dark: #111318),
62
- fg: (light: #2a2d33, dark: #e8eaed),
63
- fg-alpha: (light: rgba(#2a2d33, .5), dark: rgba(#e8eaed, .5)),
64
- fg-inverse: (light: #e8eaed, dark: #2a2d33),
65
- fg-inverse-alpha: (light: rgba(#e8eaed, .5), dark: rgba(#2a2d33, .5)),
66
- border: (light: #e1e7e2, dark: rgba(255, 255, 255, .12)),
67
-
68
- // ── Text (9) — matcha/color/text/* ───────────────────────────────────────
69
- // Light mode softening 2026-05-18 — todos os tons recuados ~1 step pra reduzir
70
- // peso visual sem perder hierarquia. Contrastes recalculados sobre card #f7fcf7:
71
- // primary #2a2d33 → 12.0:1 (AAA, antes era #1a1d21 17:1 = exagero)
72
- // secondary #5a6066 → 6.8:1 (AAA Large + AA Normal, antes #4a5056 8.5:1)
73
- // muted #6e7681 → 5.2:1 (AA, antes #5a6a5e 7.4:1)
74
- // label #7a818a → 4.6:1 (AA, antes #6b7177 5.9:1)
75
- text-primary: (light: #2a2d33, dark: #e8eaed),
76
- text-inverse: (light: #e8eaed, dark: #2a2d33),
77
- text-secondary: (light: #5a6066, dark: rgba(255, 255, 255, .7)),
78
- // Muted: GitHub-ish neutral (antes era sage-tinted #5a6a5e — verde demais em form helper text)
79
- text-muted: (light: #6e7681, dark: #a8b5a0),
80
- text-label: (light: #7a818a, dark: #bdc1c6),
81
- // Placeholder: #7a818a (4.5:1 sobre card — passa AA mantendo low-emphasis)
82
- text-placeholder: (light: #7a818a, dark: #6e747a),
83
- text-hint: (light: #7a818a, dark: #9aa0a6),
84
- text-static-light: (light: #ffffff, dark: #ffffff),
85
- text-static-dark: (light: #1a1d21, dark: #1a1d21),
86
-
87
- // ── Icon (2) — matcha/color/icon/* ───────────────────────────────────────
88
- // Light mode softening 2026-05-18:
89
- // default #5f656b → #75767a — recua ícones decorativos (sort, leading) pra não competir com texto
90
- // active #1a1d21 → #3d4248 — ainda firme mas menos "tinta china" em toggles/sortable headers
91
- icon-default: (light: #9aa0a6, dark: #9aa0a6),
92
- icon-active: (light: #3d4248, dark: #e8eaed),
93
-
94
- // ── Interaction (4) — matcha/color/interaction/* ─────────────────────────
95
- // Light mode: disabled sólido com sage tint (antes alpha sobre bg = inconsistente)
96
- interaction-disabled-bg: (light: #cfd6d1, dark: #282c34),
97
- interaction-disabled-bg-alpha: (light: rgba(#cfd6d1, .5), dark: rgba(#282c34, .5)),
98
- interaction-disabled-fg: (light: #8a9090, dark: rgba(#e8eaed, .38)),
99
- interaction-disabled-border: (light: #c8d2ca, dark: rgba(#e8eaed, .38)),
100
- focus-ring: (light: #43a047, dark: #a8d94e),
101
- // Aliases legados
102
- disabled: (light: #cfd6d1, dark: #282c34),
103
- disabled-fg: (light: #8a9090, dark: rgba(#e8eaed, .38)),
104
- disabled-border: (light: #c8d2ca, dark: rgba(#e8eaed, .38)),
105
- disabled-bg: (light: #cfd6d1, dark: #282c34),
106
-
107
- // ── Neutral (4 tokens Figma matcha/color/neutral/*) ───────────────────────
108
- // Cor base pra botões e controles sem ênfase semântica (basic, ghost default).
109
- // Light: sage-tinted grey | Dark: grey neutro escuro.
110
- neutral: (light: #e4ebe5, dark: #282c34),
111
- neutral-contrast: (light: #1a1d21, dark: #e8eaed),
112
- neutral-alpha: (light: rgba(#1a1d21, .08), dark: rgba(#e8eaed, .1)),
113
- neutral-hover: (light: #d8e1da, dark: #333842),
114
-
115
- // ── Elevation (6) — matcha/color/elevation/* ─────────────────────────────
116
- elevation-surface-1: (light: #f8faf8, dark: #1c1f26), // cards, dropdowns (sage)
117
- elevation-surface-2: (light: #ffffff, dark: #262a32), // menus, floating
118
- elevation-surface-3: (light: #ffffff, dark: #2e333c), // modals, drawers
119
- // Shadow base: Figma light usa tinta accent #1A2C1E (não preto puro), dark usa #000000
120
- elevation-shadow: (light: #1a2c1e, dark: #000000),
121
- elevation-shadow-tint: (light: #1a2c1e, dark: #000000), // tint da marca pra shadows light
122
- elevation-scrim: (light: #000000, dark: #000000),
123
- // Figma matcha/color/state-layer/fg (camada sobre interações)
124
- state-layer-fg: (light: #000000, dark: #ffffff),
125
-
126
- // ── Accent (10) — matcha/color/accent/* ──────────────────────────────────
127
- // Brand inChurch: lime/chartreuse #86BD00 (hue 78°, "matcha tea").
128
- // Brand bright #86BD00 com white dá 2.25:1 (fail UI). Light mode escurece pra
129
- // #6E9A00 (3.31:1 — passa WCAG UI/large text mínimo 3:1) mantendo a MESMA hue
130
- // 78° pra preservar identidade lime. Tradeoff aceito 2026-05-18: accent é usado
131
- // praticamente só em buttons (CTA filled c/ label branco) onde 3:1 UI é OK.
132
- // Dark mode: lima bright #a8d94e + label preto (~11:1 AAA).
133
- // accent-contrast 1:1 Figma DSV3: rgba(0,0,0,.87) em AMBOS os modos (Light + Dark).
134
- // É label-on-accent ripple/text token, semantica é "preto sobre amarelo-lima". Pra label
135
- // branco em Filled buttons use accent/text-on (branco no Light / quase-preto no Dark).
136
- accent: (light: #54a71d, dark: #a8d94e),
137
- accent-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
138
- accent-contrast-alpha: (light: rgba(0, 0, 0, .1), dark: rgba(0, 0, 0, .1)),
139
- // Figma matcha/color/accent/text-on — branco puro Light / quase preto Dark.
140
- // Dedicado pra foreground sobre accent/default em Filled buttons, icon buttons.
141
- // Garante contraste ≥ 3:1 em ambos modos (supera accent/contrast que é preto fixo).
142
- accent-text-on: (light: #ffffff, dark: #1a1d21),
143
- accent-alpha: (light: rgba(#54a71d, .1), dark: rgba(#a8d94e, .1)),
144
- // Light/dark auxiliares: spring green tint (hue 143° matching accent base)
145
- accent-light: (light: #b9e3a3, dark: #b9f6ca),
146
- accent-dark: (light: #3a7515, dark: #c5e1a5),
147
- // Hover/pressed: step ~10% darker mesma hue (3.0:1 → 3.75:1 → 4.7:1)
148
- accent-hover: (light: #4b9519, dark: #bee57a),
149
- accent-pressed: (light: #428316, dark: #d4eea0),
150
- // Surface tints — light spring green
151
- accent-surface-hover: (light: #e8f3dc, dark: #161e12),
152
- accent-surface-pressed: (light: #cbe4ab, dark: #1f2d18),
153
-
154
- // ── Accent Secondary (teal — 4 tokens Figma matcha/color/accent-2/*) ─────
155
- // Light #00796b (teal-700) | Dark #4fb7ad (teal-light)
156
- accent-2: (light: #00796b, dark: #4fb7ad),
157
- // accent-2-contrast 1:1 Figma DSV3: {common.white} em AMBOS os modos. Serve no Light
158
- // (#00796b + branco = 5.3:1), mas NÃO no Dark: accent-2 clareia pra #4fb7ad e o branco
159
- // cai pra ~2.3:1 (reprova AA). Mesma situação do accent/contrast — por isso a saída é a
160
- // mesma: um accent-2/text-on dedicado a FOREGROUND DE TEXTO, que inverte por modo.
161
- // O -contrast fica intacto, fiel ao Figma (drift = o Figma vence).
162
- accent-2-contrast: (light: #ffffff, dark: #ffffff),
163
- // Espelha accent-text-on. Valores batem com matcha-text-on() (rota whitelabel):
164
- // yiq(#00796b)=83 → #ffffff · yiq(#4fb7ad)=151 → #1a1d21.
165
- accent-2-text-on: (light: #ffffff, dark: #1a1d21),
166
- accent-2-alpha: (light: rgba(#00796b, .10), dark: rgba(#4fb7ad, .12)),
167
- accent-2-surface: (light: #e0f0ee, dark: #1d332e),
168
-
169
- // ── Primary (10) — matcha/color/primary/* ────────────────────────────────
170
- // Light #1664c2 (blue-700) | Dark #64b5f6 (blue-300)
171
- primary: (light: #1664c2, dark: #64b5f6),
172
- primary-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
173
- primary-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
174
- primary-alpha: (light: rgba(#1664c2, .1), dark: rgba(#64b5f6, .1)),
175
- primary-light: (light: #b3d7fd, dark: #bbdefb),
176
- primary-dark: (light: #0d3c8c, dark: #90caf9),
177
- primary-hover: (light: #2576d2, dark: #90caf9),
178
- primary-pressed: (light: #378ce1, dark: #bbdefb),
179
- primary-surface-hover: (light: #e4eefa, dark: #141922),
180
- primary-surface-pressed: (light: #cddef5, dark: #1a2436),
181
-
182
- // ── Feedback — Success (9) ───────────────────────────────────────────────
183
- success: (light: #2e7d32, dark: #69f0ae),
184
- success-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
185
- success-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
186
- success-alpha: (light: rgba(#2e7d32, .1), dark: rgba(#69f0ae, .1)),
187
- success-hover: (light: #388e3c, dark: #4cd992),
188
- success-pressed: (light: #43a047, dark: #33c078),
189
- success-fill: (light: #2e7d32, dark: #43a047),
190
- success-surface-hover: (light: #e8f5e9, dark: #121d17),
191
- success-surface-pressed: (light: #c8e6c9, dark: #192f24),
192
-
193
- // ── Feedback — Danger (9) ────────────────────────────────────────────────
194
- danger: (light: #c81010, dark: #ef9a9a),
195
- danger-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
196
- danger-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
197
- danger-alpha: (light: rgba(#c81010, .1), dark: rgba(#ef9a9a, .1)),
198
- danger-hover: (light: #da2c2c, dark: #f4b8b8),
199
- danger-pressed: (light: #e64848, dark: #f7d0d0),
200
- danger-fill: (light: #c81010, dark: #e53935),
201
- danger-surface-hover: (light: #fae8e8, dark: #1d1616),
202
- danger-surface-pressed: (light: #f5d2d2, dark: #2f2121),
203
-
204
- // ── Feedback — Warn (9) ──────────────────────────────────────────────────
205
- // Light #a64e00 (âmbar escuro) | Dark #ffb74d (orange-300)
206
- warn: (light: #a64e00, dark: #ffb74d),
207
- warn-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
208
- warn-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
209
- warn-alpha: (light: rgba(#a64e00, .1), dark: rgba(#ffb74d, .1)),
210
- warn-hover: (light: #924200, dark: #e69f33),
211
- warn-pressed: (light: #7e3600, dark: #cc881a),
212
- warn-fill: (light: #a64e00, dark: #fb8c00),
213
- warn-surface-hover: (light: #fcf0e1, dark: #1e1910),
214
- warn-surface-pressed: (light: #f8e1c3, dark: #2f2616),
215
-
216
- // ── Feedback — Info (8) ──────────────────────────────────────────────────
217
- info: (light: #0a2fc2, dark: #4090d8),
218
- info-contrast: (light: #ffffff, dark: #ffffff),
219
- info-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(255, 255, 255, .1)),
220
- info-alpha: (light: rgba(#0a2fc2, .1), dark: rgba(#4090d8, .1)),
221
- info-hover: (light: #294cd4, dark: #5aa0e0),
222
- info-pressed: (light: #4265e0, dark: #74b0e8),
223
- info-surface-hover: (light: #ebeefa, dark: #0f141e),
224
- info-surface-pressed: (light: #d8def5, dark: #131f31),
225
-
226
- // ── Palette (19) — matcha/color/palette/* ────────────────────────────────
227
- palette-teal: (light: #00796b, dark: #4fb7ad),
228
- palette-teal-light: (light: #4fb7ad, dark: #009688),
229
- palette-teal-alpha: (light: rgba(#00796b, .1), dark: rgba(#4fb7ad, .1)),
230
- palette-light-blue: (light: #0288d1, dark: #54c5f7),
231
- palette-light-blue-light: (light: #54c5f7, dark: #03a9f4),
232
- palette-light-blue-alpha: (light: rgba(#0288d1, .1), dark: rgba(#54c5f7, .1)),
233
- palette-purple: (light: #9c27b0, dark: #bb6ac8),
234
- palette-purple-light: (light: #bb6ac8, dark: #9c27b0),
235
- palette-purple-alpha: (light: rgba(#9c27b0, .1), dark: rgba(#bb6ac8, .1)),
236
- // Contraste (texto sobre a cor sólida), mesmo critério dos chart-series-*-contrast.
237
- // Light #9c27b0 + branco = 5.6:1 · Dark #bb6ac8 + preto .87 = ~7:1 (AA nos 2 modos).
238
- // Só o purple tem o par por enquanto: é a única cor da paleta usada como fill de
239
- // superfície com texto em cima (barra de Jornada do dashboard). As outras ganham o
240
- // seu quando aparecer o caso — não gerar 6 pares especulativos.
241
- palette-purple-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
242
- palette-pink: (light: #d81b60, dark: #e46291),
243
- palette-pink-light: (light: #e46291, dark: #d81b60),
244
- palette-pink-alpha: (light: rgba(#d81b60, .1), dark: rgba(#e46291, .1)),
245
- palette-orange: (light: #e65100, dark: #f9a25d),
246
- palette-orange-light: (light: #f9a25d, dark: #f77814),
247
- palette-orange-alpha: (light: rgba(#e65100, .1), dark: rgba(#f9a25d, .1)),
248
- palette-yellow: (light: #ffa000, dark: #efd64f),
249
- palette-yellow-light: (light: #efd64f, dark: #e8c300),
250
- palette-yellow-alpha: (light: rgba(#ffa000, .1), dark: rgba(#efd64f, .1)),
251
-
252
- // ── Chart (5) — matcha/color/chart/* ─────────────────────────────────────
253
- chart-series-1: (light: #615ce5, dark: #8782f2),
254
- chart-series-2: (light: #42a147, dark: #66ba6b),
255
- chart-series-3: (light: #ed6645, dark: #f5876b),
256
- chart-series-4: (light: #c28700, dark: #ffc93d),
257
- chart-series-5: (light: #008094, dark: #26c2d9),
258
-
259
- // Chart contrast (texto sobre a série, AA ≥ 4.5 nos 2 modos) + alpha (fill 10%).
260
- // Completam a paleta chart pra uso em pílula/badge/superfície (ex.: níveis da tree-view).
261
- chart-series-1-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
262
- chart-series-2-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
263
- chart-series-3-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
264
- chart-series-4-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
265
- chart-series-5-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
266
- chart-series-1-alpha: (light: rgba(#615ce5, .1), dark: rgba(#8782f2, .1)),
267
- chart-series-2-alpha: (light: rgba(#42a147, .1), dark: rgba(#66ba6b, .1)),
268
- chart-series-3-alpha: (light: rgba(#ed6645, .1), dark: rgba(#f5876b, .1)),
269
- chart-series-4-alpha: (light: rgba(#c28700, .1), dark: rgba(#ffc93d, .1)),
270
- chart-series-5-alpha: (light: rgba(#008094, .1), dark: rgba(#26c2d9, .1)),
271
- );
272
-
273
- // ═══════════════════════════════════════════════════════════════════════════
274
- // 2. MAPAS FLAT POR MODO — token → valor (derivados de $matcha-color-tokens).
275
- // Consumidos pelo emissor abaixo e pela theme API
276
- // (matcha-build-color-map() em abstracts/_theme-api.scss).
277
- // ═══════════════════════════════════════════════════════════════════════════
278
- @function matcha-default-colors($mode) {
279
- $out: ();
280
- @each $token, $modes in $matcha-color-tokens {
281
- $out: map.set($out, $token, map.get($modes, $mode));
282
- }
283
- @return $out;
284
- }
285
-
286
- $matcha-colors-light: matcha-default-colors(light);
287
- $matcha-colors-dark: matcha-default-colors(dark);
288
-
1
+ @use "../abstracts/functions" as *;
2
+ // =============================================================================
3
+ // MATCHA — TOKENS DE COR (papéis semânticos por modo) · SINCRONIZADO DO FIGMA
4
+ // =============================================================================
5
+ // NÃO ajuste COR à mão. Fonte: tokens/matcha/colors/{Light,Dark}.json (Tokens Studio).
6
+ // Sincronizado por scripts/matcha-tokens/sync-tokens.js — gate: sync-tokens.js --check.
7
+ // Mudar cor: edite no Figma/tokens e rode sync-tokens.js --write [--adopt-drift].
8
+ // Comentários, ordem e chaves PASSTHROUGH (sem fonte JSON) são curados — esses pode editar.
9
+ // Consumido por _emit-tokens.scss (emissor) e por abstracts/_theme-api.scss (define-theme).
10
+ // =============================================================================
11
+ @use "sass:map";
12
+
13
+ // ═══════════════════════════════════════════════════════════════════════════
14
+ // 1. COLOR TOKENS — fonte única (light/dark) na ordem de emissão
15
+ // LIGHT = Figma oficial (matcha/color/* JSON export hierárquico)
16
+ // DARK = tokens confirmados pelo usuário (flat JSON)
17
+ // ═══════════════════════════════════════════════════════════════════════════
18
+ $matcha-color-tokens: (
19
+ // ── Surface (9) — matcha/color/surface/* ─────────────────────────────────
20
+ // 1:1 Figma DSV3 (Light + Dark JSON export 2026-05-29).
21
+ // Light mode: sage-tinted neutrals (2–4% green hue da marca) + hierarquia perceptível.
22
+ surface-bg: (light: #f1f4f1, dark: #111318),
23
+ // bg-alpha light usa cor BASE distinta (#f0f2f5) — não é #f1f4f1 com alpha.
24
+ // Decisão Figma intencional pra sutil shift de tint no estado transparente.
25
+ surface-bg-alpha: (light: rgba(#f0f2f5, .5), dark: rgba(#111318, .5)),
26
+ surface-bg-inverse: (light: #111318, dark: #f0f2f5),
27
+ surface-bg-inverse-alpha: (light: rgba(#111318, .5), dark: rgba(#f0f2f5, .5)),
28
+
29
+ // Card soft default — light #f7fcf7 (off-white com tint sage muito sutil).
30
+ // Reduz glare contra surface-bg #f1f4f1 (Δ ~5 luminance). Pure white só pra
31
+ // floating overlays via surface-card-strong (modal, command-palette).
32
+ // Pattern Linear / Vercel / Notion: soft cards default + bright float.
33
+ surface: (light: #f7fcf7, dark: #1c1f26),
34
+ surface-card: (light: #f7fcf7, dark: #1c1f26),
35
+ // Card strong — pure white (light) / lifted dark, pra floating overlays
36
+ // que precisam máximo destaque sobre scrim. Modal, popover, dropdown,
37
+ // command-palette. NÃO usar pra cards inline — vira agressivo.
38
+ surface-card-strong: (light: #ffffff, dark: #262a32),
39
+ // Canvas aninhada dentro de card (preview stage, code body, inset panels)
40
+ // Light: sage (= bg da page, cria recorte sutil sobre card off-white)
41
+ // Dark: mais clara que card (inverte lógica, dá profundidade em vez de buraco)
42
+ surface-inner: (light: #f1f4f1, dark: #262a32),
43
+ // card-alpha light usa #ffffff base (não #f7fcf7) — overlay/zebra com white puro
44
+ surface-card-alpha: (light: rgba(#ffffff, .85), dark: rgba(#1c1f26, .5)),
45
+ surface-card-inverse: (light: #1c1f26, dark: #ffffff),
46
+
47
+ surface-sidebar: (light: #e4ebe5, dark: #0d0f14),
48
+ surface-sidebar-hover: (light: #d8e1da, dark: #161920),
49
+ // table-row-hover light: neutral #f4f4f4 (Figma — não tinted sage)
50
+ surface-table-row-hover: (light: #f4f4f4, dark: #151a22),
51
+
52
+ // Border sólido e visível (era rgba(0,0,0,.08) = invisível sobre sage bg)
53
+ surface-border: (light: #e1e7e2, dark: rgba(255, 255, 255, .12)),
54
+ // Border mais forte pra cards elevados (hero, playground — com shadow)
55
+ surface-border-strong: (light: #c8d2ca, dark: rgba(255, 255, 255, .24)),
56
+ surface-hover: (light: rgba(#e4ebe5, .5), dark: rgba(#111318, .5)),
57
+
58
+ // Aliases (flat) — usados massivamente
59
+ // Light mode softening 2026-05-18: fg de #1a1d21 (17:1, "tinta preta") → #2a2d33 (12:1 AAA, "tinta carvão").
60
+ // Inspiração: tom entre Linear (#1a1d21, mais pesado) e GitHub (#1f2328) — reduz fatiga em sessions longas.
61
+ bg: (light: #f1f4f1, dark: #111318),
62
+ fg: (light: #2a2d33, dark: #e8eaed),
63
+ fg-alpha: (light: rgba(#2a2d33, .5), dark: rgba(#e8eaed, .5)),
64
+ fg-inverse: (light: #e8eaed, dark: #2a2d33),
65
+ fg-inverse-alpha: (light: rgba(#e8eaed, .5), dark: rgba(#2a2d33, .5)),
66
+ border: (light: #e1e7e2, dark: rgba(255, 255, 255, .12)),
67
+
68
+ // ── Text (9) — matcha/color/text/* ───────────────────────────────────────
69
+ // Light mode softening 2026-05-18 — todos os tons recuados ~1 step pra reduzir
70
+ // peso visual sem perder hierarquia. Contrastes recalculados sobre card #f7fcf7:
71
+ // primary #2a2d33 → 12.0:1 (AAA, antes era #1a1d21 17:1 = exagero)
72
+ // secondary #5a6066 → 6.8:1 (AAA Large + AA Normal, antes #4a5056 8.5:1)
73
+ // muted #6e7681 → 5.2:1 (AA, antes #5a6a5e 7.4:1)
74
+ // label #7a818a → 4.6:1 (AA, antes #6b7177 5.9:1)
75
+ text-primary: (light: #2a2d33, dark: #e8eaed),
76
+ text-inverse: (light: #e8eaed, dark: #2a2d33),
77
+ text-secondary: (light: #5a6066, dark: rgba(255, 255, 255, .7)),
78
+ // Muted: GitHub-ish neutral (antes era sage-tinted #5a6a5e — verde demais em form helper text)
79
+ text-muted: (light: #6e7681, dark: #a8b5a0),
80
+ text-label: (light: #7a818a, dark: #bdc1c6),
81
+ // Placeholder: #7a818a (4.5:1 sobre card — passa AA mantendo low-emphasis)
82
+ text-placeholder: (light: #7a818a, dark: #6e747a),
83
+ text-hint: (light: #7a818a, dark: #9aa0a6),
84
+ text-static-light: (light: #ffffff, dark: #ffffff),
85
+ text-static-dark: (light: #1a1d21, dark: #1a1d21),
86
+
87
+ // ── Icon (2) — matcha/color/icon/* ───────────────────────────────────────
88
+ // Light mode softening 2026-05-18:
89
+ // default #5f656b → #75767a — recua ícones decorativos (sort, leading) pra não competir com texto
90
+ // active #1a1d21 → #3d4248 — ainda firme mas menos "tinta china" em toggles/sortable headers
91
+ icon-default: (light: #9aa0a6, dark: #9aa0a6),
92
+ icon-active: (light: #3d4248, dark: #e8eaed),
93
+
94
+ // ── Interaction (4) — matcha/color/interaction/* ─────────────────────────
95
+ // Light mode: disabled sólido com sage tint (antes alpha sobre bg = inconsistente)
96
+ interaction-disabled-bg: (light: #cfd6d1, dark: #282c34),
97
+ interaction-disabled-bg-alpha: (light: rgba(#cfd6d1, .5), dark: rgba(#282c34, .5)),
98
+ interaction-disabled-fg: (light: #8a9090, dark: rgba(#e8eaed, .38)),
99
+ interaction-disabled-border: (light: #c8d2ca, dark: rgba(#e8eaed, .38)),
100
+ focus-ring: (light: #43a047, dark: #a8d94e),
101
+ // Aliases legados
102
+ disabled: (light: #cfd6d1, dark: #282c34),
103
+ disabled-fg: (light: #8a9090, dark: rgba(#e8eaed, .38)),
104
+ disabled-border: (light: #c8d2ca, dark: rgba(#e8eaed, .38)),
105
+ disabled-bg: (light: #cfd6d1, dark: #282c34),
106
+
107
+ // ── Neutral (4 tokens Figma matcha/color/neutral/*) ───────────────────────
108
+ // Cor base pra botões e controles sem ênfase semântica (basic, ghost default).
109
+ // Light: sage-tinted grey | Dark: grey neutro escuro.
110
+ neutral: (light: #e4ebe5, dark: #282c34),
111
+ neutral-contrast: (light: #1a1d21, dark: #e8eaed),
112
+ neutral-alpha: (light: rgba(#1a1d21, .08), dark: rgba(#e8eaed, .1)),
113
+ neutral-hover: (light: #d8e1da, dark: #333842),
114
+
115
+ // ── Elevation (6) — matcha/color/elevation/* ─────────────────────────────
116
+ elevation-surface-1: (light: #f8faf8, dark: #1c1f26), // cards, dropdowns (sage)
117
+ elevation-surface-2: (light: #ffffff, dark: #262a32), // menus, floating
118
+ elevation-surface-3: (light: #ffffff, dark: #2e333c), // modals, drawers
119
+ // Shadow base: Figma light usa tinta accent #1A2C1E (não preto puro), dark usa #000000
120
+ elevation-shadow: (light: #1a2c1e, dark: #000000),
121
+ elevation-shadow-tint: (light: #1a2c1e, dark: #000000), // tint da marca pra shadows light
122
+ elevation-scrim: (light: #000000, dark: #000000),
123
+ // Figma matcha/color/state-layer/fg (camada sobre interações)
124
+ state-layer-fg: (light: #000000, dark: #ffffff),
125
+
126
+ // ── Accent (10) — matcha/color/accent/* ──────────────────────────────────
127
+ // Brand inChurch: lime/chartreuse #86BD00 (hue 78°, "matcha tea").
128
+ // Brand bright #86BD00 com white dá 2.25:1 (fail UI). Light mode escurece pra
129
+ // #6E9A00 (3.31:1 — passa WCAG UI/large text mínimo 3:1) mantendo a MESMA hue
130
+ // 78° pra preservar identidade lime. Tradeoff aceito 2026-05-18: accent é usado
131
+ // praticamente só em buttons (CTA filled c/ label branco) onde 3:1 UI é OK.
132
+ // Dark mode: lima bright #a8d94e + label preto (~11:1 AAA).
133
+ // accent-contrast 1:1 Figma DSV3: rgba(0,0,0,.87) em AMBOS os modos (Light + Dark).
134
+ // É label-on-accent ripple/text token, semantica é "preto sobre amarelo-lima". Pra label
135
+ // branco em Filled buttons use accent/text-on (branco no Light / quase-preto no Dark).
136
+ accent: (light: #54a71d, dark: #a8d94e),
137
+ accent-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
138
+ accent-contrast-alpha: (light: rgba(0, 0, 0, .1), dark: rgba(0, 0, 0, .1)),
139
+ // Figma matcha/color/accent/text-on — branco puro Light / quase preto Dark.
140
+ // Dedicado pra foreground sobre accent/default em Filled buttons, icon buttons.
141
+ // Garante contraste ≥ 3:1 em ambos modos (supera accent/contrast que é preto fixo).
142
+ accent-text-on: (light: #ffffff, dark: #1a1d21),
143
+ accent-alpha: (light: rgba(#54a71d, .1), dark: rgba(#a8d94e, .1)),
144
+ // Light/dark auxiliares: spring green tint (hue 143° matching accent base)
145
+ accent-light: (light: #b9e3a3, dark: #b9f6ca),
146
+ accent-dark: (light: #3a7515, dark: #c5e1a5),
147
+ // Hover/pressed: step ~10% darker mesma hue (3.0:1 → 3.75:1 → 4.7:1)
148
+ accent-hover: (light: #4b9519, dark: #bee57a),
149
+ accent-pressed: (light: #428316, dark: #d4eea0),
150
+ // Surface tints — light spring green
151
+ accent-surface-hover: (light: #e8f3dc, dark: #161e12),
152
+ accent-surface-pressed: (light: #cbe4ab, dark: #1f2d18),
153
+
154
+ // ── Accent Secondary (teal — 4 tokens Figma matcha/color/accent-2/*) ─────
155
+ // Light #00796b (teal-700) | Dark #4fb7ad (teal-light)
156
+ accent-2: (light: #00796b, dark: #4fb7ad),
157
+ // accent-2-contrast 1:1 Figma DSV3: {common.white} em AMBOS os modos. Serve no Light
158
+ // (#00796b + branco = 5.3:1), mas NÃO no Dark: accent-2 clareia pra #4fb7ad e o branco
159
+ // cai pra ~2.3:1 (reprova AA). Mesma situação do accent/contrast — por isso a saída é a
160
+ // mesma: um accent-2/text-on dedicado a FOREGROUND DE TEXTO, que inverte por modo.
161
+ // O -contrast fica intacto, fiel ao Figma (drift = o Figma vence).
162
+ accent-2-contrast: (light: #ffffff, dark: #ffffff),
163
+ // Espelha accent-text-on. Valores batem com matcha-text-on() (rota whitelabel):
164
+ // yiq(#00796b)=83 → #ffffff · yiq(#4fb7ad)=151 → #1a1d21.
165
+ accent-2-text-on: (light: #ffffff, dark: #1a1d21),
166
+ accent-2-alpha: (light: rgba(#00796b, .10), dark: rgba(#4fb7ad, .12)),
167
+ accent-2-surface: (light: #e0f0ee, dark: #1d332e),
168
+
169
+ // ── Primary (10) — matcha/color/primary/* ────────────────────────────────
170
+ // Light #1664c2 (blue-700) | Dark #64b5f6 (blue-300)
171
+ primary: (light: #1664c2, dark: #64b5f6),
172
+ primary-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
173
+ primary-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
174
+ primary-alpha: (light: rgba(#1664c2, .1), dark: rgba(#64b5f6, .1)),
175
+ primary-light: (light: #b3d7fd, dark: #bbdefb),
176
+ primary-dark: (light: #0d3c8c, dark: #90caf9),
177
+ primary-hover: (light: #2576d2, dark: #90caf9),
178
+ primary-pressed: (light: #378ce1, dark: #bbdefb),
179
+ primary-surface-hover: (light: #e4eefa, dark: #141922),
180
+ primary-surface-pressed: (light: #cddef5, dark: #1a2436),
181
+
182
+ // ── Feedback — Success (9) ───────────────────────────────────────────────
183
+ success: (light: #2e7d32, dark: #69f0ae),
184
+ success-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
185
+ success-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
186
+ success-alpha: (light: rgba(#2e7d32, .1), dark: rgba(#69f0ae, .1)),
187
+ success-hover: (light: #388e3c, dark: #4cd992),
188
+ success-pressed: (light: #43a047, dark: #33c078),
189
+ success-fill: (light: #2e7d32, dark: #43a047),
190
+ success-surface-hover: (light: #e8f5e9, dark: #121d17),
191
+ success-surface-pressed: (light: #c8e6c9, dark: #192f24),
192
+
193
+ // ── Feedback — Danger (9) ────────────────────────────────────────────────
194
+ danger: (light: #c81010, dark: #ef9a9a),
195
+ danger-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
196
+ danger-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
197
+ danger-alpha: (light: rgba(#c81010, .1), dark: rgba(#ef9a9a, .1)),
198
+ danger-hover: (light: #da2c2c, dark: #f4b8b8),
199
+ danger-pressed: (light: #e64848, dark: #f7d0d0),
200
+ danger-fill: (light: #c81010, dark: #e53935),
201
+ danger-surface-hover: (light: #fae8e8, dark: #1d1616),
202
+ danger-surface-pressed: (light: #f5d2d2, dark: #2f2121),
203
+
204
+ // ── Feedback — Warn (9) ──────────────────────────────────────────────────
205
+ // Light #a64e00 (âmbar escuro) | Dark #ffb74d (orange-300)
206
+ warn: (light: #a64e00, dark: #ffb74d),
207
+ warn-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
208
+ warn-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
209
+ warn-alpha: (light: rgba(#a64e00, .1), dark: rgba(#ffb74d, .1)),
210
+ warn-hover: (light: #924200, dark: #e69f33),
211
+ warn-pressed: (light: #7e3600, dark: #cc881a),
212
+ warn-fill: (light: #a64e00, dark: #fb8c00),
213
+ warn-surface-hover: (light: #fcf0e1, dark: #1e1910),
214
+ warn-surface-pressed: (light: #f8e1c3, dark: #2f2616),
215
+
216
+ // ── Feedback — Info (8) ──────────────────────────────────────────────────
217
+ info: (light: #0a2fc2, dark: #4090d8),
218
+ info-contrast: (light: #ffffff, dark: #ffffff),
219
+ info-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(255, 255, 255, .1)),
220
+ info-alpha: (light: rgba(#0a2fc2, .1), dark: rgba(#4090d8, .1)),
221
+ info-hover: (light: #294cd4, dark: #5aa0e0),
222
+ info-pressed: (light: #4265e0, dark: #74b0e8),
223
+ info-surface-hover: (light: #ebeefa, dark: #0f141e),
224
+ info-surface-pressed: (light: #d8def5, dark: #131f31),
225
+
226
+ // ── Palette (19) — matcha/color/palette/* ────────────────────────────────
227
+ palette-teal: (light: #00796b, dark: #4fb7ad),
228
+ palette-teal-light: (light: #4fb7ad, dark: #009688),
229
+ palette-teal-alpha: (light: rgba(#00796b, .1), dark: rgba(#4fb7ad, .1)),
230
+ palette-light-blue: (light: #0288d1, dark: #54c5f7),
231
+ palette-light-blue-light: (light: #54c5f7, dark: #03a9f4),
232
+ palette-light-blue-alpha: (light: rgba(#0288d1, .1), dark: rgba(#54c5f7, .1)),
233
+ palette-purple: (light: #9c27b0, dark: #bb6ac8),
234
+ palette-purple-light: (light: #bb6ac8, dark: #9c27b0),
235
+ palette-purple-alpha: (light: rgba(#9c27b0, .1), dark: rgba(#bb6ac8, .1)),
236
+ // Contraste (texto sobre a cor sólida), mesmo critério dos chart-series-*-contrast.
237
+ // Light #9c27b0 + branco = 5.6:1 · Dark #bb6ac8 + preto .87 = ~7:1 (AA nos 2 modos).
238
+ // Só o purple tem o par por enquanto: é a única cor da paleta usada como fill de
239
+ // superfície com texto em cima (barra de Jornada do dashboard). As outras ganham o
240
+ // seu quando aparecer o caso — não gerar 6 pares especulativos.
241
+ palette-purple-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
242
+ palette-pink: (light: #d81b60, dark: #e46291),
243
+ palette-pink-light: (light: #e46291, dark: #d81b60),
244
+ palette-pink-alpha: (light: rgba(#d81b60, .1), dark: rgba(#e46291, .1)),
245
+ palette-orange: (light: #e65100, dark: #f9a25d),
246
+ palette-orange-light: (light: #f9a25d, dark: #f77814),
247
+ palette-orange-alpha: (light: rgba(#e65100, .1), dark: rgba(#f9a25d, .1)),
248
+ palette-yellow: (light: #ffa000, dark: #efd64f),
249
+ palette-yellow-light: (light: #efd64f, dark: #e8c300),
250
+ palette-yellow-alpha: (light: rgba(#ffa000, .1), dark: rgba(#efd64f, .1)),
251
+
252
+ // ── Chart (5) — matcha/color/chart/* ─────────────────────────────────────
253
+ chart-series-1: (light: #615ce5, dark: #8782f2),
254
+ chart-series-2: (light: #42a147, dark: #66ba6b),
255
+ chart-series-3: (light: #ed6645, dark: #f5876b),
256
+ chart-series-4: (light: #c28700, dark: #ffc93d),
257
+ chart-series-5: (light: #008094, dark: #26c2d9),
258
+
259
+ // Chart contrast (texto sobre a série, AA ≥ 4.5 nos 2 modos) + alpha (fill 10%).
260
+ // Completam a paleta chart pra uso em pílula/badge/superfície (ex.: níveis da tree-view).
261
+ chart-series-1-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
262
+ chart-series-2-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
263
+ chart-series-3-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
264
+ chart-series-4-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
265
+ chart-series-5-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
266
+ chart-series-1-alpha: (light: rgba(#615ce5, .1), dark: rgba(#8782f2, .1)),
267
+ chart-series-2-alpha: (light: rgba(#42a147, .1), dark: rgba(#66ba6b, .1)),
268
+ chart-series-3-alpha: (light: rgba(#ed6645, .1), dark: rgba(#f5876b, .1)),
269
+ chart-series-4-alpha: (light: rgba(#c28700, .1), dark: rgba(#ffc93d, .1)),
270
+ chart-series-5-alpha: (light: rgba(#008094, .1), dark: rgba(#26c2d9, .1)),
271
+ );
272
+
273
+ // ═══════════════════════════════════════════════════════════════════════════
274
+ // 2. MAPAS FLAT POR MODO — token → valor (derivados de $matcha-color-tokens).
275
+ // Consumidos pelo emissor abaixo e pela theme API
276
+ // (matcha-build-color-map() em abstracts/_theme-api.scss).
277
+ // ═══════════════════════════════════════════════════════════════════════════
278
+ @function matcha-default-colors($mode) {
279
+ $out: ();
280
+ @each $token, $modes in $matcha-color-tokens {
281
+ $out: map.set($out, $token, map.get($modes, $mode));
282
+ }
283
+ @return $out;
284
+ }
285
+
286
+ $matcha-colors-light: matcha-default-colors(light);
287
+ $matcha-colors-dark: matcha-default-colors(dark);
288
+