@inchurch/matcha-theme 21.3.3 → 22.0.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 (93) hide show
  1. package/abstracts/_colors.scss +236 -229
  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 +445 -432
  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 +384 -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-crop.scss +406 -406
  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 +471 -471
  34. package/components/matcha-flag.scss +103 -103
  35. package/components/matcha-footer.scss +91 -91
  36. package/components/matcha-form-field.scss +606 -606
  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 +316 -316
  42. package/components/matcha-icon.scss +98 -98
  43. package/components/matcha-image.scss +61 -61
  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 +581 -581
  48. package/components/matcha-notification.scss +413 -413
  49. package/components/matcha-option.scss +170 -170
  50. package/components/matcha-page-builder.scss +4196 -4196
  51. package/components/matcha-paginator.scss +689 -689
  52. package/components/matcha-panel.scss +194 -194
  53. package/components/matcha-profile-card.scss +50 -50
  54. package/components/matcha-progress-bar.scss +313 -313
  55. package/components/matcha-radio.scss +320 -320
  56. package/components/matcha-ripple.scss +7 -7
  57. package/components/matcha-scrollbar.scss +33 -33
  58. package/components/matcha-scrollbox-shadow.scss +120 -120
  59. package/components/matcha-section.scss +102 -102
  60. package/components/matcha-select-multiple.scss +56 -56
  61. package/components/matcha-select.scss +667 -667
  62. package/components/matcha-skeleton.scss +155 -155
  63. package/components/matcha-slide-toggle.scss +369 -369
  64. package/components/matcha-slider.scss +285 -285
  65. package/components/matcha-snack-bar.scss +259 -259
  66. package/components/matcha-spin.scss +164 -164
  67. package/components/matcha-spinner.scss +97 -97
  68. package/components/matcha-status-pill.scss +38 -18
  69. package/components/matcha-stepper.scss +376 -376
  70. package/components/matcha-table-cell.scss +74 -41
  71. package/components/matcha-table.scss +579 -578
  72. package/components/matcha-tabs.scss +600 -600
  73. package/components/matcha-text-editor.scss +105 -105
  74. package/components/matcha-time.scss +33 -33
  75. package/components/matcha-timepicker.scss +13 -13
  76. package/components/matcha-toolbar.scss +359 -359
  77. package/components/matcha-tooltip.scss +224 -224
  78. package/components/matcha-tree-view.scss +257 -212
  79. package/layout/matcha-page-layout.scss +778 -778
  80. package/main.scss +329 -329
  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 +274 -261
  85. package/tokens/_elevation-tokens.scss +33 -33
  86. package/tokens/_emit-tokens.scss +324 -324
  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,261 +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
-
246
- // ═══════════════════════════════════════════════════════════════════════════
247
- // 2. MAPAS FLAT POR MODO — token → valor (derivados de $matcha-color-tokens).
248
- // Consumidos pelo emissor abaixo e pela theme API
249
- // (matcha-build-color-map() em abstracts/_theme-api.scss).
250
- // ═══════════════════════════════════════════════════════════════════════════
251
- @function matcha-default-colors($mode) {
252
- $out: ();
253
- @each $token, $modes in $matcha-color-tokens {
254
- $out: map.set($out, $token, map.get($modes, $mode));
255
- }
256
- @return $out;
257
- }
258
-
259
- $matcha-colors-light: matcha-default-colors(light);
260
- $matcha-colors-dark: matcha-default-colors(dark);
261
-
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-";