@inchurch/matcha-theme 21.4.0 → 22.1.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 (94) hide show
  1. package/abstracts/_colors.scss +236 -236
  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 +219 -219
  6. package/abstracts/_typography.scss +128 -128
  7. package/base/_reset.scss +446 -445
  8. package/components/app-page-header.scss +260 -260
  9. package/components/matcha-accordion.scss +293 -293
  10. package/components/matcha-audio-player.scss +31 -31
  11. package/components/matcha-autocomplete.scss +145 -145
  12. package/components/matcha-avatar.scss +440 -301
  13. package/components/matcha-badge.scss +120 -120
  14. package/components/matcha-breadcrumb.scss +231 -231
  15. package/components/matcha-button-toggle.scss +383 -384
  16. package/components/matcha-buttons.scss +913 -913
  17. package/components/matcha-calendar.scss +218 -218
  18. package/components/matcha-cards.scss +230 -230
  19. package/components/matcha-chart-card.scss +53 -53
  20. package/components/matcha-checkbox.scss +255 -255
  21. package/components/matcha-chip.scss +292 -292
  22. package/components/matcha-color-pick.scss +34 -34
  23. package/components/matcha-command-palette.scss +316 -316
  24. package/components/matcha-contact.scss +35 -0
  25. package/components/matcha-crop.scss +406 -406
  26. package/components/matcha-date.scss +81 -81
  27. package/components/matcha-divider.scss +100 -100
  28. package/components/matcha-draggable.scss +23 -23
  29. package/components/matcha-drawer.scss +376 -376
  30. package/components/matcha-drop-image.scss +14 -14
  31. package/components/matcha-drop-list.scss +430 -430
  32. package/components/matcha-emoji.scss +69 -69
  33. package/components/matcha-empty-state.scss +230 -230
  34. package/components/matcha-file-uploader.scss +471 -471
  35. package/components/matcha-flag.scss +103 -103
  36. package/components/matcha-footer.scss +91 -91
  37. package/components/matcha-form-field.scss +606 -606
  38. package/components/matcha-form-section.scss +100 -100
  39. package/components/matcha-header.scss +135 -135
  40. package/components/matcha-highlight.scss +164 -164
  41. package/components/matcha-hint-text.scss +90 -90
  42. package/components/matcha-horizontal-tree.scss +316 -316
  43. package/components/matcha-icon.scss +98 -98
  44. package/components/matcha-image.scss +61 -61
  45. package/components/matcha-list.scss +211 -211
  46. package/components/matcha-menu.scss +99 -99
  47. package/components/matcha-modal.scss +210 -210
  48. package/components/matcha-nav.scss +581 -581
  49. package/components/matcha-notification.scss +413 -413
  50. package/components/matcha-option.scss +170 -170
  51. package/components/matcha-page-builder.scss +4196 -4196
  52. package/components/matcha-paginator.scss +689 -689
  53. package/components/matcha-panel.scss +194 -194
  54. package/components/matcha-profile-card.scss +50 -50
  55. package/components/matcha-progress-bar.scss +313 -313
  56. package/components/matcha-radio.scss +320 -320
  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 +667 -667
  63. package/components/matcha-skeleton.scss +155 -155
  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-status-pill.scss +38 -18
  70. package/components/matcha-stepper.scss +376 -376
  71. package/components/matcha-table-cell.scss +49 -41
  72. package/components/matcha-table.scss +579 -579
  73. package/components/matcha-tabs.scss +600 -600
  74. package/components/matcha-text-editor.scss +105 -105
  75. package/components/matcha-time.scss +33 -33
  76. package/components/matcha-timepicker.scss +13 -13
  77. package/components/matcha-toolbar.scss +359 -359
  78. package/components/matcha-tooltip.scss +224 -224
  79. package/components/matcha-tree-view.scss +257 -257
  80. package/layout/matcha-page-layout.scss +778 -778
  81. package/main.scss +331 -329
  82. package/package.json +1 -1
  83. package/tokens/_animations-tokens.scss +37 -37
  84. package/tokens/_breakpoints-tokens.scss +35 -35
  85. package/tokens/_color-tokens.scss +274 -274
  86. package/tokens/_elevation-tokens.scss +33 -33
  87. package/tokens/_emit-tokens.scss +324 -324
  88. package/tokens/_material-palette.scss +1149 -1149
  89. package/tokens/_primitives.scss +98 -98
  90. package/tokens/_semantic-aliases.scss +120 -120
  91. package/tokens/_spacing-tokens.scss +94 -94
  92. package/tokens/_static-tokens.scss +137 -137
  93. package/tokens/_typography-tokens.scss +65 -65
  94. package/vendors/charts.scss +90 -90
@@ -1,274 +1,274 @@
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: (light: #ffffff, dark: #ffffff),
158
- accent-2-alpha: (light: rgba(#00796b, .10), dark: rgba(#4fb7ad, .12)),
159
- accent-2-surface: (light: #e0f0ee, dark: #1d332e),
160
-
161
- // ── Primary (10) — matcha/color/primary/* ────────────────────────────────
162
- // Light #1664c2 (blue-700) | Dark #64b5f6 (blue-300)
163
- primary: (light: #1664c2, dark: #64b5f6),
164
- primary-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
165
- primary-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
166
- primary-alpha: (light: rgba(#1664c2, .1), dark: rgba(#64b5f6, .1)),
167
- primary-light: (light: #b3d7fd, dark: #bbdefb),
168
- primary-dark: (light: #0d3c8c, dark: #90caf9),
169
- primary-hover: (light: #2576d2, dark: #90caf9),
170
- primary-pressed: (light: #378ce1, dark: #bbdefb),
171
- primary-surface-hover: (light: #e4eefa, dark: #141922),
172
- primary-surface-pressed: (light: #cddef5, dark: #1a2436),
173
-
174
- // ── Feedback — Success (9) ───────────────────────────────────────────────
175
- success: (light: #2e7d32, dark: #69f0ae),
176
- success-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
177
- success-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
178
- success-alpha: (light: rgba(#2e7d32, .1), dark: rgba(#69f0ae, .1)),
179
- success-hover: (light: #388e3c, dark: #4cd992),
180
- success-pressed: (light: #43a047, dark: #33c078),
181
- success-fill: (light: #2e7d32, dark: #43a047),
182
- success-surface-hover: (light: #e8f5e9, dark: #121d17),
183
- success-surface-pressed: (light: #c8e6c9, dark: #192f24),
184
-
185
- // ── Feedback — Danger (9) ────────────────────────────────────────────────
186
- danger: (light: #c81010, dark: #ef9a9a),
187
- danger-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
188
- danger-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
189
- danger-alpha: (light: rgba(#c81010, .1), dark: rgba(#ef9a9a, .1)),
190
- danger-hover: (light: #da2c2c, dark: #f4b8b8),
191
- danger-pressed: (light: #e64848, dark: #f7d0d0),
192
- danger-fill: (light: #c81010, dark: #e53935),
193
- danger-surface-hover: (light: #fae8e8, dark: #1d1616),
194
- danger-surface-pressed: (light: #f5d2d2, dark: #2f2121),
195
-
196
- // ── Feedback — Warn (9) ──────────────────────────────────────────────────
197
- // Light #a64e00 (âmbar escuro) | Dark #ffb74d (orange-300)
198
- warn: (light: #a64e00, dark: #ffb74d),
199
- warn-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
200
- warn-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
201
- warn-alpha: (light: rgba(#a64e00, .1), dark: rgba(#ffb74d, .1)),
202
- warn-hover: (light: #924200, dark: #e69f33),
203
- warn-pressed: (light: #7e3600, dark: #cc881a),
204
- warn-fill: (light: #a64e00, dark: #fb8c00),
205
- warn-surface-hover: (light: #fcf0e1, dark: #1e1910),
206
- warn-surface-pressed: (light: #f8e1c3, dark: #2f2616),
207
-
208
- // ── Feedback — Info (8) ──────────────────────────────────────────────────
209
- info: (light: #0a2fc2, dark: #4090d8),
210
- info-contrast: (light: #ffffff, dark: #ffffff),
211
- info-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(255, 255, 255, .1)),
212
- info-alpha: (light: rgba(#0a2fc2, .1), dark: rgba(#4090d8, .1)),
213
- info-hover: (light: #294cd4, dark: #5aa0e0),
214
- info-pressed: (light: #4265e0, dark: #74b0e8),
215
- info-surface-hover: (light: #ebeefa, dark: #0f141e),
216
- info-surface-pressed: (light: #d8def5, dark: #131f31),
217
-
218
- // ── Palette (18) — matcha/color/palette/* ────────────────────────────────
219
- palette-teal: (light: #00796b, dark: #4fb7ad),
220
- palette-teal-light: (light: #4fb7ad, dark: #009688),
221
- palette-teal-alpha: (light: rgba(#00796b, .1), dark: rgba(#4fb7ad, .1)),
222
- palette-light-blue: (light: #0288d1, dark: #54c5f7),
223
- palette-light-blue-light: (light: #54c5f7, dark: #03a9f4),
224
- palette-light-blue-alpha: (light: rgba(#0288d1, .1), dark: rgba(#54c5f7, .1)),
225
- palette-purple: (light: #9c27b0, dark: #bb6ac8),
226
- palette-purple-light: (light: #bb6ac8, dark: #9c27b0),
227
- palette-purple-alpha: (light: rgba(#9c27b0, .1), dark: rgba(#bb6ac8, .1)),
228
- palette-pink: (light: #d81b60, dark: #e46291),
229
- palette-pink-light: (light: #e46291, dark: #d81b60),
230
- palette-pink-alpha: (light: rgba(#d81b60, .1), dark: rgba(#e46291, .1)),
231
- palette-orange: (light: #e65100, dark: #f9a25d),
232
- palette-orange-light: (light: #f9a25d, dark: #f77814),
233
- palette-orange-alpha: (light: rgba(#e65100, .1), dark: rgba(#f9a25d, .1)),
234
- palette-yellow: (light: #ffa000, dark: #efd64f),
235
- palette-yellow-light: (light: #efd64f, dark: #e8c300),
236
- palette-yellow-alpha: (light: rgba(#ffa000, .1), dark: rgba(#efd64f, .1)),
237
-
238
- // ── Chart (5) — matcha/color/chart/* ─────────────────────────────────────
239
- chart-series-1: (light: #615ce5, dark: #8782f2),
240
- chart-series-2: (light: #42a147, dark: #66ba6b),
241
- chart-series-3: (light: #ed6645, dark: #f5876b),
242
- chart-series-4: (light: #c28700, dark: #ffc93d),
243
- chart-series-5: (light: #008094, dark: #26c2d9),
244
-
245
- // Chart contrast (texto sobre a série, AA ≥ 4.5 nos 2 modos) + alpha (fill 10%).
246
- // Completam a paleta chart pra uso em pílula/badge/superfície (ex.: níveis da tree-view).
247
- chart-series-1-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
248
- chart-series-2-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
249
- chart-series-3-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
250
- chart-series-4-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
251
- chart-series-5-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
252
- chart-series-1-alpha: (light: rgba(#615ce5, .1), dark: rgba(#8782f2, .1)),
253
- chart-series-2-alpha: (light: rgba(#42a147, .1), dark: rgba(#66ba6b, .1)),
254
- chart-series-3-alpha: (light: rgba(#ed6645, .1), dark: rgba(#f5876b, .1)),
255
- chart-series-4-alpha: (light: rgba(#c28700, .1), dark: rgba(#ffc93d, .1)),
256
- chart-series-5-alpha: (light: rgba(#008094, .1), dark: rgba(#26c2d9, .1)),
257
- );
258
-
259
- // ═══════════════════════════════════════════════════════════════════════════
260
- // 2. MAPAS FLAT POR MODO — token → valor (derivados de $matcha-color-tokens).
261
- // Consumidos pelo emissor abaixo e pela theme API
262
- // (matcha-build-color-map() em abstracts/_theme-api.scss).
263
- // ═══════════════════════════════════════════════════════════════════════════
264
- @function matcha-default-colors($mode) {
265
- $out: ();
266
- @each $token, $modes in $matcha-color-tokens {
267
- $out: map.set($out, $token, map.get($modes, $mode));
268
- }
269
- @return $out;
270
- }
271
-
272
- $matcha-colors-light: matcha-default-colors(light);
273
- $matcha-colors-dark: matcha-default-colors(dark);
274
-
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: (light: #ffffff, dark: #ffffff),
158
+ accent-2-alpha: (light: rgba(#00796b, .10), dark: rgba(#4fb7ad, .12)),
159
+ accent-2-surface: (light: #e0f0ee, dark: #1d332e),
160
+
161
+ // ── Primary (10) — matcha/color/primary/* ────────────────────────────────
162
+ // Light #1664c2 (blue-700) | Dark #64b5f6 (blue-300)
163
+ primary: (light: #1664c2, dark: #64b5f6),
164
+ primary-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
165
+ primary-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
166
+ primary-alpha: (light: rgba(#1664c2, .1), dark: rgba(#64b5f6, .1)),
167
+ primary-light: (light: #b3d7fd, dark: #bbdefb),
168
+ primary-dark: (light: #0d3c8c, dark: #90caf9),
169
+ primary-hover: (light: #2576d2, dark: #90caf9),
170
+ primary-pressed: (light: #378ce1, dark: #bbdefb),
171
+ primary-surface-hover: (light: #e4eefa, dark: #141922),
172
+ primary-surface-pressed: (light: #cddef5, dark: #1a2436),
173
+
174
+ // ── Feedback — Success (9) ───────────────────────────────────────────────
175
+ success: (light: #2e7d32, dark: #69f0ae),
176
+ success-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
177
+ success-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
178
+ success-alpha: (light: rgba(#2e7d32, .1), dark: rgba(#69f0ae, .1)),
179
+ success-hover: (light: #388e3c, dark: #4cd992),
180
+ success-pressed: (light: #43a047, dark: #33c078),
181
+ success-fill: (light: #2e7d32, dark: #43a047),
182
+ success-surface-hover: (light: #e8f5e9, dark: #121d17),
183
+ success-surface-pressed: (light: #c8e6c9, dark: #192f24),
184
+
185
+ // ── Feedback — Danger (9) ────────────────────────────────────────────────
186
+ danger: (light: #c81010, dark: #ef9a9a),
187
+ danger-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
188
+ danger-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
189
+ danger-alpha: (light: rgba(#c81010, .1), dark: rgba(#ef9a9a, .1)),
190
+ danger-hover: (light: #da2c2c, dark: #f4b8b8),
191
+ danger-pressed: (light: #e64848, dark: #f7d0d0),
192
+ danger-fill: (light: #c81010, dark: #e53935),
193
+ danger-surface-hover: (light: #fae8e8, dark: #1d1616),
194
+ danger-surface-pressed: (light: #f5d2d2, dark: #2f2121),
195
+
196
+ // ── Feedback — Warn (9) ──────────────────────────────────────────────────
197
+ // Light #a64e00 (âmbar escuro) | Dark #ffb74d (orange-300)
198
+ warn: (light: #a64e00, dark: #ffb74d),
199
+ warn-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
200
+ warn-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(0, 0, 0, .1)),
201
+ warn-alpha: (light: rgba(#a64e00, .1), dark: rgba(#ffb74d, .1)),
202
+ warn-hover: (light: #924200, dark: #e69f33),
203
+ warn-pressed: (light: #7e3600, dark: #cc881a),
204
+ warn-fill: (light: #a64e00, dark: #fb8c00),
205
+ warn-surface-hover: (light: #fcf0e1, dark: #1e1910),
206
+ warn-surface-pressed: (light: #f8e1c3, dark: #2f2616),
207
+
208
+ // ── Feedback — Info (8) ──────────────────────────────────────────────────
209
+ info: (light: #0a2fc2, dark: #4090d8),
210
+ info-contrast: (light: #ffffff, dark: #ffffff),
211
+ info-contrast-alpha: (light: rgba(255, 255, 255, .1), dark: rgba(255, 255, 255, .1)),
212
+ info-alpha: (light: rgba(#0a2fc2, .1), dark: rgba(#4090d8, .1)),
213
+ info-hover: (light: #294cd4, dark: #5aa0e0),
214
+ info-pressed: (light: #4265e0, dark: #74b0e8),
215
+ info-surface-hover: (light: #ebeefa, dark: #0f141e),
216
+ info-surface-pressed: (light: #d8def5, dark: #131f31),
217
+
218
+ // ── Palette (18) — matcha/color/palette/* ────────────────────────────────
219
+ palette-teal: (light: #00796b, dark: #4fb7ad),
220
+ palette-teal-light: (light: #4fb7ad, dark: #009688),
221
+ palette-teal-alpha: (light: rgba(#00796b, .1), dark: rgba(#4fb7ad, .1)),
222
+ palette-light-blue: (light: #0288d1, dark: #54c5f7),
223
+ palette-light-blue-light: (light: #54c5f7, dark: #03a9f4),
224
+ palette-light-blue-alpha: (light: rgba(#0288d1, .1), dark: rgba(#54c5f7, .1)),
225
+ palette-purple: (light: #9c27b0, dark: #bb6ac8),
226
+ palette-purple-light: (light: #bb6ac8, dark: #9c27b0),
227
+ palette-purple-alpha: (light: rgba(#9c27b0, .1), dark: rgba(#bb6ac8, .1)),
228
+ palette-pink: (light: #d81b60, dark: #e46291),
229
+ palette-pink-light: (light: #e46291, dark: #d81b60),
230
+ palette-pink-alpha: (light: rgba(#d81b60, .1), dark: rgba(#e46291, .1)),
231
+ palette-orange: (light: #e65100, dark: #f9a25d),
232
+ palette-orange-light: (light: #f9a25d, dark: #f77814),
233
+ palette-orange-alpha: (light: rgba(#e65100, .1), dark: rgba(#f9a25d, .1)),
234
+ palette-yellow: (light: #ffa000, dark: #efd64f),
235
+ palette-yellow-light: (light: #efd64f, dark: #e8c300),
236
+ palette-yellow-alpha: (light: rgba(#ffa000, .1), dark: rgba(#efd64f, .1)),
237
+
238
+ // ── Chart (5) — matcha/color/chart/* ─────────────────────────────────────
239
+ chart-series-1: (light: #615ce5, dark: #8782f2),
240
+ chart-series-2: (light: #42a147, dark: #66ba6b),
241
+ chart-series-3: (light: #ed6645, dark: #f5876b),
242
+ chart-series-4: (light: #c28700, dark: #ffc93d),
243
+ chart-series-5: (light: #008094, dark: #26c2d9),
244
+
245
+ // Chart contrast (texto sobre a série, AA ≥ 4.5 nos 2 modos) + alpha (fill 10%).
246
+ // Completam a paleta chart pra uso em pílula/badge/superfície (ex.: níveis da tree-view).
247
+ chart-series-1-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
248
+ chart-series-2-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
249
+ chart-series-3-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
250
+ chart-series-4-contrast: (light: rgba(0, 0, 0, .87), dark: rgba(0, 0, 0, .87)),
251
+ chart-series-5-contrast: (light: #ffffff, dark: rgba(0, 0, 0, .87)),
252
+ chart-series-1-alpha: (light: rgba(#615ce5, .1), dark: rgba(#8782f2, .1)),
253
+ chart-series-2-alpha: (light: rgba(#42a147, .1), dark: rgba(#66ba6b, .1)),
254
+ chart-series-3-alpha: (light: rgba(#ed6645, .1), dark: rgba(#f5876b, .1)),
255
+ chart-series-4-alpha: (light: rgba(#c28700, .1), dark: rgba(#ffc93d, .1)),
256
+ chart-series-5-alpha: (light: rgba(#008094, .1), dark: rgba(#26c2d9, .1)),
257
+ );
258
+
259
+ // ═══════════════════════════════════════════════════════════════════════════
260
+ // 2. MAPAS FLAT POR MODO — token → valor (derivados de $matcha-color-tokens).
261
+ // Consumidos pelo emissor abaixo e pela theme API
262
+ // (matcha-build-color-map() em abstracts/_theme-api.scss).
263
+ // ═══════════════════════════════════════════════════════════════════════════
264
+ @function matcha-default-colors($mode) {
265
+ $out: ();
266
+ @each $token, $modes in $matcha-color-tokens {
267
+ $out: map.set($out, $token, map.get($modes, $mode));
268
+ }
269
+ @return $out;
270
+ }
271
+
272
+ $matcha-colors-light: matcha-default-colors(light);
273
+ $matcha-colors-dark: matcha-default-colors(dark);
274
+
@@ -1,33 +1,33 @@
1
- // =============================================================================
2
- // Elevation Tokens — Aligned with Figma matcha/elevation/level-{1-4}
3
- // =============================================================================
4
-
5
- // ── Semantic shadow levels (3-layer Figma spec: accent glow + ambient + key) ──
6
- // Light mode: top layer usa tinta accent (rgba(45,122,47,..)) pra identidade da marca,
7
- // camadas intermediárias/base usam tint escuro (#1A2C1E) pra profundidade
8
- // Dark mode: continua preto puro (ambiente já escuro)
9
- //
10
- // Spec 1:1 com Figma matcha/elevation/level-{1-4} — DS-PAINEL nodes.
11
-
12
- // Level 1: Cards elevados padrão (hero card, side cards) — Figma hero-card shadow
13
- $shadow-1-light: 0 8px 24px -8px rgba(45, 122, 47, 0.04), 0 2px 8px -1px rgba(26, 44, 30, 0.08), 0 1px 2px rgba(26, 44, 30, 0.04);
14
- $shadow-1-dark: 0 1px 2px rgba(0, 0, 0, 0.10), 0 2px 6px -1px rgba(0, 0, 0, 0.15);
15
-
16
- // Level 2: Cards destacados (playground, feature cards) — Figma playground-card shadow
17
- $shadow-2-light: 0 12px 32px -10px rgba(45, 122, 47, 0.05), 0 4px 16px -2px rgba(26, 44, 30, 0.10), 0 2px 4px -1px rgba(26, 44, 30, 0.05);
18
- $shadow-2-dark: 0 2px 4px -1px rgba(0, 0, 0, 0.10), 0 4px 16px -2px rgba(0, 0, 0, 0.20);
19
-
20
- // Level 3: Modals, drawers, side panels
21
- $shadow-3-light: 0 16px 40px -12px rgba(45, 122, 47, 0.06), 0 12px 32px -4px rgba(26, 44, 30, 0.14), 0 4px 8px -2px rgba(26, 44, 30, 0.08);
22
- $shadow-3-dark: 0 4px 8px -2px rgba(0, 0, 0, 0.15), 0 12px 32px -4px rgba(0, 0, 0, 0.30);
23
-
24
- // Level 4: Tooltips, command palette, notifications
25
- $shadow-4-light: 0 24px 48px -16px rgba(45, 122, 47, 0.08), 0 24px 48px -8px rgba(26, 44, 30, 0.18), 0 8px 16px -4px rgba(26, 44, 30, 0.10);
26
- $shadow-4-dark: 0 8px 16px -4px rgba(0, 0, 0, 0.20), 0 24px 48px -8px rgba(0, 0, 0, 0.40);
27
-
28
- // ── Legacy elevation system (Material Design 0-24) — kept for retrocompatibility ──
29
- $elevation-transition-duration: 280ms !default;
30
- $elevation-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !default;
31
- $elevation-color: black !default;
32
- $elevation-opacity: 1 !default;
33
- $elevation-prefix: "elevation-z-";
1
+ // =============================================================================
2
+ // Elevation Tokens — Aligned with Figma matcha/elevation/level-{1-4}
3
+ // =============================================================================
4
+
5
+ // ── Semantic shadow levels (3-layer Figma spec: accent glow + ambient + key) ──
6
+ // Light mode: top layer usa tinta accent (rgba(45,122,47,..)) pra identidade da marca,
7
+ // camadas intermediárias/base usam tint escuro (#1A2C1E) pra profundidade
8
+ // Dark mode: continua preto puro (ambiente já escuro)
9
+ //
10
+ // Spec 1:1 com Figma matcha/elevation/level-{1-4} — DS-PAINEL nodes.
11
+
12
+ // Level 1: Cards elevados padrão (hero card, side cards) — Figma hero-card shadow
13
+ $shadow-1-light: 0 8px 24px -8px rgba(45, 122, 47, 0.04), 0 2px 8px -1px rgba(26, 44, 30, 0.08), 0 1px 2px rgba(26, 44, 30, 0.04);
14
+ $shadow-1-dark: 0 1px 2px rgba(0, 0, 0, 0.10), 0 2px 6px -1px rgba(0, 0, 0, 0.15);
15
+
16
+ // Level 2: Cards destacados (playground, feature cards) — Figma playground-card shadow
17
+ $shadow-2-light: 0 12px 32px -10px rgba(45, 122, 47, 0.05), 0 4px 16px -2px rgba(26, 44, 30, 0.10), 0 2px 4px -1px rgba(26, 44, 30, 0.05);
18
+ $shadow-2-dark: 0 2px 4px -1px rgba(0, 0, 0, 0.10), 0 4px 16px -2px rgba(0, 0, 0, 0.20);
19
+
20
+ // Level 3: Modals, drawers, side panels
21
+ $shadow-3-light: 0 16px 40px -12px rgba(45, 122, 47, 0.06), 0 12px 32px -4px rgba(26, 44, 30, 0.14), 0 4px 8px -2px rgba(26, 44, 30, 0.08);
22
+ $shadow-3-dark: 0 4px 8px -2px rgba(0, 0, 0, 0.15), 0 12px 32px -4px rgba(0, 0, 0, 0.30);
23
+
24
+ // Level 4: Tooltips, command palette, notifications
25
+ $shadow-4-light: 0 24px 48px -16px rgba(45, 122, 47, 0.08), 0 24px 48px -8px rgba(26, 44, 30, 0.18), 0 8px 16px -4px rgba(26, 44, 30, 0.10);
26
+ $shadow-4-dark: 0 8px 16px -4px rgba(0, 0, 0, 0.20), 0 24px 48px -8px rgba(0, 0, 0, 0.40);
27
+
28
+ // ── Legacy elevation system (Material Design 0-24) — kept for retrocompatibility ──
29
+ $elevation-transition-duration: 280ms !default;
30
+ $elevation-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !default;
31
+ $elevation-color: black !default;
32
+ $elevation-opacity: 1 !default;
33
+ $elevation-prefix: "elevation-z-";