@inchurch/matcha-theme 20.0.3

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 (112) hide show
  1. package/README.md +303 -0
  2. package/abstracts/_colors.scss +405 -0
  3. package/abstracts/_elevation.scss +102 -0
  4. package/abstracts/_functions.scss +1213 -0
  5. package/abstracts/_media-breakpoint.scss +23 -0
  6. package/abstracts/_typography.scss +127 -0
  7. package/base/_reset.scss +438 -0
  8. package/components/matcha-accordion.scss +157 -0
  9. package/components/matcha-audio-player.scss +32 -0
  10. package/components/matcha-autocomplete.scss +134 -0
  11. package/components/matcha-avatar.scss +161 -0
  12. package/components/matcha-badge.scss +120 -0
  13. package/components/matcha-breadcrumb.scss +126 -0
  14. package/components/matcha-button-toggle.scss +363 -0
  15. package/components/matcha-buttons.scss +784 -0
  16. package/components/matcha-calendar.scss +154 -0
  17. package/components/matcha-cards.scss +205 -0
  18. package/components/matcha-chart-card.scss +60 -0
  19. package/components/matcha-checkbox.scss +554 -0
  20. package/components/matcha-chip.scss +212 -0
  21. package/components/matcha-color-pick.scss +35 -0
  22. package/components/matcha-command-palette.scss +89 -0
  23. package/components/matcha-crop.scss +172 -0
  24. package/components/matcha-date.scss +81 -0
  25. package/components/matcha-divider.scss +45 -0
  26. package/components/matcha-draggable.scss +24 -0
  27. package/components/matcha-drawer.scss +235 -0
  28. package/components/matcha-drop-list.scss +390 -0
  29. package/components/matcha-emoji.scss +69 -0
  30. package/components/matcha-empty-state.scss +118 -0
  31. package/components/matcha-flag.scss +62 -0
  32. package/components/matcha-footer.scss +187 -0
  33. package/components/matcha-form-field.scss +552 -0
  34. package/components/matcha-form-section.scss +101 -0
  35. package/components/matcha-header.scss +325 -0
  36. package/components/matcha-highlight.scss +296 -0
  37. package/components/matcha-hint-text.scss +66 -0
  38. package/components/matcha-horizontal-tree.scss +317 -0
  39. package/components/matcha-icon.scss +106 -0
  40. package/components/matcha-image.scss +62 -0
  41. package/components/matcha-list.scss +212 -0
  42. package/components/matcha-menu.scss +86 -0
  43. package/components/matcha-modal.scss +234 -0
  44. package/components/matcha-nav.scss +450 -0
  45. package/components/matcha-notification.scss +197 -0
  46. package/components/matcha-option.scss +95 -0
  47. package/components/matcha-page-builder.scss +4186 -0
  48. package/components/matcha-paginator.scss +235 -0
  49. package/components/matcha-panel.scss +167 -0
  50. package/components/matcha-profile-card.scss +50 -0
  51. package/components/matcha-progress-bar.scss +209 -0
  52. package/components/matcha-radio.scss +528 -0
  53. package/components/matcha-ripple.scss +7 -0
  54. package/components/matcha-scrollbar.scss +35 -0
  55. package/components/matcha-scrollbox-shadow.scss +123 -0
  56. package/components/matcha-section.scss +105 -0
  57. package/components/matcha-select.scss +661 -0
  58. package/components/matcha-skeleton.scss +138 -0
  59. package/components/matcha-slide-toggle.scss +590 -0
  60. package/components/matcha-slider.scss +188 -0
  61. package/components/matcha-snack-bar.scss +266 -0
  62. package/components/matcha-spin.scss +252 -0
  63. package/components/matcha-spinner.scss +78 -0
  64. package/components/matcha-stepper.scss +177 -0
  65. package/components/matcha-table-cell.scss +41 -0
  66. package/components/matcha-table.scss +785 -0
  67. package/components/matcha-tabs.scss +469 -0
  68. package/components/matcha-text-editor.scss +151 -0
  69. package/components/matcha-time.scss +33 -0
  70. package/components/matcha-timepicker.scss +13 -0
  71. package/components/matcha-toolbar.scss +206 -0
  72. package/components/matcha-tooltip.scss +128 -0
  73. package/components/matcha-uploader.scss +215 -0
  74. package/css/matcha-style.css +76772 -0
  75. package/fonts/CircularStd-Black.eot +0 -0
  76. package/fonts/CircularStd-Black.svg +3426 -0
  77. package/fonts/CircularStd-Black.ttf +0 -0
  78. package/fonts/CircularStd-Black.woff +0 -0
  79. package/fonts/CircularStd-Black.woff2 +0 -0
  80. package/fonts/CircularStd-Bold.eot +0 -0
  81. package/fonts/CircularStd-Bold.otf +0 -0
  82. package/fonts/CircularStd-Bold.svg +13532 -0
  83. package/fonts/CircularStd-Bold.ttf +0 -0
  84. package/fonts/CircularStd-Bold.woff +0 -0
  85. package/fonts/CircularStd-Bold.woff2 +0 -0
  86. package/fonts/CircularStd-Medium.eot +0 -0
  87. package/fonts/CircularStd-Medium.otf +0 -0
  88. package/fonts/CircularStd-Medium.svg +13511 -0
  89. package/fonts/CircularStd-Medium.ttf +0 -0
  90. package/fonts/CircularStd-Medium.woff +0 -0
  91. package/fonts/CircularStd-Medium.woff2 +0 -0
  92. package/fonts/CircularStd-Regular.eot +0 -0
  93. package/fonts/CircularStd-Regular.otf +0 -0
  94. package/fonts/CircularStd-Regular.svg +2378 -0
  95. package/fonts/CircularStd-Regular.ttf +0 -0
  96. package/fonts/CircularStd-Regular.woff +0 -0
  97. package/fonts/CircularStd-Regular.woff2 +0 -0
  98. package/main.scss +262 -0
  99. package/package.json +11 -0
  100. package/tokens/_animations-tokens.scss +37 -0
  101. package/tokens/_breakpoints-tokens.scss +26 -0
  102. package/tokens/_color-tokens.scss +1153 -0
  103. package/tokens/_css-custom-properties.scss +568 -0
  104. package/tokens/_elevation-tokens.scss +33 -0
  105. package/tokens/_spacing-tokens.scss +94 -0
  106. package/tokens/_typography-tokens.scss +65 -0
  107. package/vendors/angular-editor.scss +56 -0
  108. package/vendors/angular-material-fixes.scss +297 -0
  109. package/vendors/calendar.scss +2880 -0
  110. package/vendors/charts.scss +92 -0
  111. package/vendors/ng5-slider.scss +56 -0
  112. package/vendors/ngx-material-timepicker.scss +50 -0
@@ -0,0 +1,450 @@
1
+ @use "sass:map";
2
+
3
+ // =============================================================================
4
+ // matcha-nav.scss — Navigation system (nav-item, nav-rail, nav-panel, command-palette)
5
+ // =============================================================================
6
+
7
+ // ── Nav Item ─────────────────────────────────────────────────────────────────
8
+
9
+ .matcha-nav-item {
10
+ position: relative; // enables ::before state layer positioning
11
+ display: flex;
12
+ align-items: center;
13
+ gap: var(--matcha-space-100, 8px);
14
+ padding: var(--matcha-space-100, 8px) var(--matcha-space-150, 12px);
15
+ border-radius: var(--matcha-radius-md, 4px);
16
+ cursor: pointer;
17
+ transition: background-color 150ms;
18
+ width: 100%;
19
+ box-sizing: border-box;
20
+ text-decoration: none;
21
+ color: inherit;
22
+ user-select: none;
23
+
24
+ // State layer
25
+ &::before {
26
+ content: '';
27
+ position: absolute;
28
+ inset: 0;
29
+ background: currentColor;
30
+ opacity: 0;
31
+ border-radius: inherit;
32
+ pointer-events: none;
33
+ transition: opacity var(--matcha-duration-instant, 80ms) linear;
34
+ }
35
+
36
+ &:hover:not(.matcha-nav-item--disabled)::before { opacity: var(--matcha-state-hover, 0.08); }
37
+ &:active:not(.matcha-nav-item--disabled)::before { opacity: var(--matcha-state-active, 0.12); }
38
+
39
+ &.matcha-nav-item--disabled {
40
+ pointer-events: none;
41
+ cursor: default;
42
+ }
43
+ }
44
+
45
+ .matcha-nav-item__icon {
46
+ flex-shrink: 0;
47
+ width: 20px;
48
+ height: 20px;
49
+ }
50
+
51
+ .matcha-nav-item__label {
52
+ flex: 1;
53
+ font-size: var(--matcha-text-body-md, 14px);
54
+ font-weight: 400;
55
+ line-height: 20px;
56
+ overflow: hidden;
57
+ text-overflow: ellipsis;
58
+ white-space: nowrap;
59
+ }
60
+
61
+ .matcha-nav-item__badge {
62
+ flex-shrink: 0;
63
+ }
64
+
65
+ .matcha-nav-item__chevron {
66
+ flex-shrink: 0;
67
+ width: 16px;
68
+ height: 16px;
69
+ opacity: 0.5;
70
+ }
71
+
72
+ // Indented variant (accordion children, Notion-style border)
73
+ .matcha-nav-item--indented {
74
+ padding: var(--matcha-space-075, 6px) var(--matcha-space-100, 8px);
75
+ padding-left: var(--matcha-space-300, 24px);
76
+ border-radius: var(--matcha-radius-sm, 2px);
77
+ border-left: var(--matcha-border-thin, 2px) solid transparent;
78
+
79
+ .matcha-nav-item__label {
80
+ font-size: var(--matcha-text-body-sm, 12px);
81
+ line-height: 16px;
82
+ }
83
+ }
84
+
85
+ // ── Nav Rail (72px sidebar) ──────────────────────────────────────────────────
86
+
87
+ .matcha-nav-rail {
88
+ display: flex;
89
+ flex-direction: column;
90
+ width: 64px;
91
+ height: 100%;
92
+ flex-shrink: 0;
93
+ box-sizing: border-box;
94
+ overflow: hidden;
95
+ }
96
+
97
+ .matcha-nav-rail__header {
98
+ display: flex;
99
+ align-items: center;
100
+ justify-content: center;
101
+ height: var(--matcha-grid-header-height, 56px);
102
+ flex-shrink: 0;
103
+ }
104
+
105
+ .matcha-nav-rail__modules {
106
+ display: flex;
107
+ flex-direction: column;
108
+ align-items: center;
109
+ gap: var(--matcha-space-025, 2px);
110
+ padding: var(--matcha-space-050, 4px) 0;
111
+ flex: 1;
112
+ overflow-y: auto;
113
+ overflow-x: hidden;
114
+
115
+ // Hide scrollbar but keep scroll
116
+ scrollbar-width: none;
117
+ &::-webkit-scrollbar { display: none; }
118
+ }
119
+
120
+ .matcha-nav-rail__module {
121
+ display: flex;
122
+ align-items: center;
123
+ justify-content: center;
124
+ width: 44px;
125
+ height: 44px;
126
+ border-radius: var(--matcha-radius-lg, 8px);
127
+ cursor: pointer;
128
+ flex-shrink: 0;
129
+ position: relative;
130
+ transition: background-color 150ms;
131
+
132
+ &:hover { opacity: 0.85; }
133
+ }
134
+
135
+ .matcha-nav-rail__footer {
136
+ display: flex;
137
+ flex-direction: column;
138
+ align-items: center;
139
+ gap: var(--matcha-space-025, 2px);
140
+ padding: var(--matcha-space-100, 8px) 0 var(--matcha-space-150, 12px);
141
+ flex-shrink: 0;
142
+ }
143
+
144
+ .matcha-nav-rail__divider {
145
+ width: 28px;
146
+ height: 1px;
147
+ opacity: 0.15;
148
+ margin: var(--matcha-space-050, 4px) 0;
149
+ }
150
+
151
+ // ── Nav Panel (216px sub-panel) ──────────────────────────────────────────────
152
+
153
+ .matcha-nav-panel {
154
+ display: flex;
155
+ flex-direction: column;
156
+ width: 256px;
157
+ height: 100%;
158
+ box-sizing: border-box;
159
+ overflow: hidden;
160
+ }
161
+
162
+ .matcha-nav-panel__header {
163
+ display: flex;
164
+ flex-direction: column;
165
+ gap: var(--matcha-space-200, 16px);
166
+ padding: var(--matcha-space-250, 20px) var(--matcha-space-250, 20px) var(--matcha-space-200, 16px);
167
+ flex-shrink: 0;
168
+ }
169
+
170
+ .matcha-nav-panel__brand {
171
+ height: 16px;
172
+ }
173
+
174
+ .matcha-nav-panel__divider {
175
+ width: 28px;
176
+ height: 1px;
177
+ opacity: 0.4;
178
+ }
179
+
180
+ .matcha-nav-panel__module {
181
+ display: flex;
182
+ align-items: center;
183
+ gap: var(--matcha-space-100, 8px);
184
+ font-size: var(--matcha-text-body-md, 14px);
185
+ font-weight: 400;
186
+ line-height: 20px;
187
+ }
188
+
189
+ .matcha-nav-panel__module-icon {
190
+ width: 16px;
191
+ height: 16px;
192
+ flex-shrink: 0;
193
+ }
194
+
195
+ .matcha-nav-panel__items {
196
+ display: flex;
197
+ flex-direction: column;
198
+ gap: var(--matcha-space-050, 4px);
199
+ padding: var(--matcha-space-150, 12px);
200
+ flex: 1;
201
+ overflow-y: auto;
202
+ overflow-x: hidden;
203
+ }
204
+
205
+ // ── Command Palette ──────────────────────────────────────────────────────────
206
+
207
+ .matcha-command-palette-overlay {
208
+ position: fixed;
209
+ inset: 0;
210
+ z-index: 9998;
211
+ display: flex;
212
+ align-items: flex-start;
213
+ justify-content: center;
214
+ padding-top: 20vh;
215
+ animation: matcha-cmd-overlay-in 150ms ease-out;
216
+ }
217
+
218
+ .matcha-command-palette {
219
+ display: flex;
220
+ flex-direction: column;
221
+ width: 520px;
222
+ max-width: calc(100vw - 32px);
223
+ max-height: 60vh;
224
+ border-radius: var(--matcha-radius-2xl, 24px);
225
+ overflow: hidden;
226
+ z-index: 9999;
227
+ animation: matcha-cmd-in 150ms ease-out;
228
+ }
229
+
230
+ .matcha-command-palette__search {
231
+ display: flex;
232
+ align-items: center;
233
+ gap: var(--matcha-space-150, 12px);
234
+ padding: var(--matcha-space-200, 16px) var(--matcha-space-250, 20px);
235
+ flex-shrink: 0;
236
+ }
237
+
238
+ .matcha-command-palette__input {
239
+ flex: 1;
240
+ border: none;
241
+ background: transparent;
242
+ font-size: var(--matcha-text-title-sm, 16px);
243
+ outline: none;
244
+ }
245
+
246
+ .matcha-command-palette__results {
247
+ display: flex;
248
+ flex-direction: column;
249
+ gap: var(--matcha-space-025, 2px);
250
+ padding: var(--matcha-space-100, 8px);
251
+ flex: 1;
252
+ overflow-y: auto;
253
+ }
254
+
255
+ .matcha-command-palette__result {
256
+ display: flex;
257
+ align-items: center;
258
+ gap: var(--matcha-space-150, 12px);
259
+ padding: var(--matcha-space-100, 8px) var(--matcha-space-150, 12px);
260
+ border-radius: var(--matcha-radius-sm, 2px);
261
+ cursor: pointer;
262
+ transition: background-color 100ms;
263
+ }
264
+
265
+ .matcha-command-palette__footer {
266
+ display: flex;
267
+ align-items: center;
268
+ padding: var(--matcha-space-100, 8px) var(--matcha-space-250, 20px);
269
+ font-size: var(--matcha-text-caption, 11px);
270
+ flex-shrink: 0;
271
+ }
272
+
273
+ @keyframes matcha-cmd-in {
274
+ from { opacity: 0; transform: scale(0.95) translateY(-8px); }
275
+ to { opacity: 1; transform: scale(1) translateY(0); }
276
+ }
277
+
278
+ @keyframes matcha-cmd-overlay-in {
279
+ from { opacity: 0; }
280
+ to { opacity: 1; }
281
+ }
282
+
283
+ @media (prefers-reduced-motion: reduce) {
284
+ .matcha-command-palette,
285
+ .matcha-command-palette-overlay,
286
+ .matcha-nav-item,
287
+ .matcha-nav-rail__module {
288
+ animation: none;
289
+ transition: none;
290
+ }
291
+ }
292
+
293
+ // =============================================================================
294
+ // Theme mixin
295
+ // =============================================================================
296
+
297
+ @mixin matcha-nav-theme($theme) {
298
+ // ── Nav Item ──
299
+ .matcha-nav-item {
300
+ color: var(--matcha-color-fg, #{getForeground($theme)});
301
+
302
+ .matcha-nav-item__label {
303
+ color: var(--matcha-color-fg, #{getForeground($theme)});
304
+ }
305
+
306
+ .matcha-nav-item__icon {
307
+ color: var(--matcha-color-hint, #{getGrey($theme)});
308
+ }
309
+
310
+ .matcha-nav-item__chevron {
311
+ color: var(--matcha-color-hint, #{getGrey($theme)});
312
+ }
313
+
314
+ &:hover {
315
+ background-color: rgba(var(--matcha-state-layer, 255,255,255), 0.08);
316
+ }
317
+
318
+ // Active state (current selected item)
319
+ &.matcha-nav-item--active {
320
+ background-color: var(--matcha-color-accent-surface-hover, #{getAccentAlpha($theme)});
321
+ border-left: 3px solid var(--matcha-color-accent, #{getAccent($theme)});
322
+
323
+ .matcha-nav-item__label {
324
+ color: var(--matcha-color-accent, #{getAccent($theme)});
325
+ font-weight: 500;
326
+ }
327
+
328
+ .matcha-nav-item__icon {
329
+ color: var(--matcha-color-accent, #{getAccent($theme)});
330
+ }
331
+ }
332
+
333
+ // Expanded (parent with open children — subtle bg highlight)
334
+ &.matcha-nav-item--expanded {
335
+ background-color: rgba(var(--matcha-state-layer, 255,255,255), 0.04);
336
+
337
+ .matcha-nav-item__label {
338
+ color: var(--matcha-color-accent, #{getAccent($theme)});
339
+ font-weight: 400;
340
+ }
341
+
342
+ .matcha-nav-item__icon {
343
+ color: var(--matcha-color-accent, #{getAccent($theme)});
344
+ }
345
+
346
+ .matcha-nav-item__chevron {
347
+ color: var(--matcha-color-accent, #{getAccent($theme)});
348
+ opacity: 0.7;
349
+ }
350
+ }
351
+
352
+ // Disabled
353
+ &.matcha-nav-item--disabled {
354
+ .matcha-nav-item__label,
355
+ .matcha-nav-item__icon {
356
+ color: var(--matcha-color-disabled-fg, #{getDisabledContrast($theme)});
357
+ }
358
+ }
359
+ }
360
+
361
+ // Indented (Notion-style border)
362
+ .matcha-nav-item--indented {
363
+ border-left-color: var(--matcha-color-accent, #{getAccent($theme)});
364
+
365
+ &.matcha-nav-item--active {
366
+ background-color: var(--matcha-color-accent-surface-hover, #{getAccentAlpha($theme)});
367
+ border-left: 3px solid var(--matcha-color-accent, #{getAccent($theme)});
368
+
369
+ .matcha-nav-item__label {
370
+ color: var(--matcha-color-accent, #{getAccent($theme)});
371
+ font-weight: 500;
372
+ }
373
+ }
374
+ }
375
+
376
+ // ── Nav Rail ──
377
+ .matcha-nav-rail {
378
+ background-color: var(--matcha-color-surface, #{getSurface($theme)});
379
+ border-right: var(--matcha-border-hairline, 1px) solid var(--matcha-color-border, #{getGrey($theme)});
380
+ }
381
+
382
+ .matcha-nav-rail__module {
383
+ color: var(--matcha-color-hint, #{getGrey($theme)});
384
+
385
+ &.matcha-nav-rail__module--active {
386
+ background-color: var(--matcha-color-accent-surface, #{getAccentAlpha($theme)});
387
+ color: var(--matcha-color-accent, #{getAccent($theme)});
388
+ }
389
+ }
390
+
391
+ .matcha-nav-rail__divider {
392
+ background-color: var(--matcha-color-border, #{getGrey($theme)});
393
+ }
394
+
395
+ // ── Nav Panel ──
396
+ .matcha-nav-panel {
397
+ background-color: var(--matcha-color-surface, #{getSurface($theme)});
398
+ border: var(--matcha-border-hairline, 1px) solid var(--matcha-color-border, #{getForegroundAlpha($theme)});
399
+ }
400
+
401
+ .matcha-nav-panel__divider {
402
+ background-color: var(--matcha-color-border, #{getForegroundAlpha($theme)});
403
+ }
404
+
405
+ .matcha-nav-panel__module {
406
+ color: var(--matcha-color-fg, #{getForeground($theme)});
407
+ }
408
+
409
+ .matcha-nav-panel__module-icon {
410
+ color: var(--matcha-color-hint, #{getGrey($theme)});
411
+ }
412
+
413
+ // ── Command Palette ──
414
+ .matcha-command-palette-overlay {
415
+ background: var(--matcha-scrim-modal, rgba(0, 0, 0, 0.5));
416
+ }
417
+
418
+ .matcha-command-palette {
419
+ $is-dark: map.get($theme, is-dark);
420
+ background-color: var(--matcha-color-surface, #{getSurface($theme)});
421
+ box-shadow: var(--matcha-shadow-4, #{if($is-dark, $shadow-4-dark, $shadow-4-light)});
422
+
423
+ @if $is-dark {
424
+ border: var(--matcha-border-hairline, 1px) solid rgba(255, 255, 255, 0.06);
425
+ }
426
+ }
427
+
428
+ .matcha-command-palette__input {
429
+ color: var(--matcha-color-fg, #{getForeground($theme)});
430
+
431
+ &::placeholder {
432
+ color: var(--matcha-color-hint, #{getGrey($theme)});
433
+ }
434
+ }
435
+
436
+ .matcha-command-palette__result {
437
+ color: var(--matcha-color-fg-secondary, #{getGrey($theme)});
438
+
439
+ &:hover,
440
+ &.matcha-command-palette__result--selected {
441
+ background-color: var(--matcha-color-surface-hover, #{getBackgroundAlpha($theme)});
442
+ color: var(--matcha-color-fg, #{getForeground($theme)});
443
+ }
444
+ }
445
+
446
+ .matcha-command-palette__footer {
447
+ background-color: var(--matcha-color-surface-bg, #{getBackground($theme)});
448
+ color: var(--matcha-color-hint, #{getGrey($theme)});
449
+ }
450
+ }
@@ -0,0 +1,197 @@
1
+ @use "sass:map";
2
+
3
+ // =============================================================================
4
+ // matcha-notification.scss — In-page notification banner / alert
5
+ // Aligned with Figma matcha/notification:
6
+ // Status(5: Erro, Alerta, Sucesso, Ideia, Neutro)
7
+ // × Slots: icon, title, description, CTA button, close
8
+ // Angular: matcha-notification
9
+ // =============================================================================
10
+
11
+ @mixin matcha-notification-theme($theme) {
12
+ $is-dark: map.get($theme, is-dark);
13
+
14
+ .matcha-notification {
15
+ // ── Base text colors ──
16
+ .matcha-notification__title {
17
+ color: var(--matcha-color-fg, #{getForeground($theme)});
18
+ }
19
+
20
+ .matcha-notification__description {
21
+ color: var(--matcha-color-text-label, #{getBlueGrey($theme)});
22
+ }
23
+
24
+ .matcha-notification__close {
25
+ color: var(--matcha-color-text-label, #{getBlueGrey($theme)});
26
+
27
+ &:hover {
28
+ color: var(--matcha-color-fg, #{getForeground($theme)});
29
+ }
30
+
31
+ &:focus-visible {
32
+ outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent, #{getAccent($theme)});
33
+ outline-offset: var(--matcha-state-focus-ring-offset, 2px);
34
+ }
35
+ }
36
+
37
+ // ── Status: Erro ──
38
+ &.matcha-notification--error {
39
+ background: var(--matcha-color-feedback-danger-alpha, #{getDangerAlpha($theme)});
40
+ border-left-color: var(--matcha-color-feedback-danger, #{getDanger($theme)});
41
+
42
+ .matcha-notification__icon {
43
+ color: var(--matcha-color-feedback-danger, #{getDanger($theme)});
44
+ }
45
+ }
46
+
47
+ // ── Status: Alerta ──
48
+ &.matcha-notification--warning {
49
+ background: var(--matcha-color-feedback-warn-alpha, #{getWarnAlpha($theme)});
50
+ border-left-color: var(--matcha-color-feedback-warn, #{getWarn($theme)});
51
+
52
+ .matcha-notification__icon {
53
+ color: var(--matcha-color-feedback-warn, #{getWarn($theme)});
54
+ }
55
+ }
56
+
57
+ // ── Status: Sucesso ──
58
+ &.matcha-notification--success {
59
+ background: var(--matcha-color-feedback-success-alpha, #{getSuccessAlpha($theme)});
60
+ border-left-color: var(--matcha-color-feedback-success, #{getSuccess($theme)});
61
+
62
+ .matcha-notification__icon {
63
+ color: var(--matcha-color-feedback-success, #{getSuccess($theme)});
64
+ }
65
+ }
66
+
67
+ // ── Status: Ideia / Info ──
68
+ &.matcha-notification--info {
69
+ background: var(--matcha-color-feedback-info-alpha, #{getInfoAlpha($theme)});
70
+ border-left-color: var(--matcha-color-feedback-info, #{getInfo($theme)});
71
+
72
+ .matcha-notification__icon {
73
+ color: var(--matcha-color-feedback-info, #{getInfo($theme)});
74
+ }
75
+ }
76
+
77
+ // ── Status: Neutro ──
78
+ &.matcha-notification--neutral {
79
+ background: var(--matcha-color-surface-hover, #{getBackgroundAlpha($theme)});
80
+ border-left-color: var(--matcha-color-border, #{getGrey($theme)});
81
+
82
+ .matcha-notification__icon {
83
+ color: var(--matcha-color-text-label, #{getBlueGrey($theme)});
84
+ }
85
+ }
86
+ }
87
+ }
88
+
89
+ // ── Layout ──────────────────────────────────────────────────────────────────
90
+
91
+ .matcha-notification {
92
+ display: flex;
93
+ align-items: center;
94
+ gap: var(--matcha-space-150, 12px);
95
+ padding: var(--matcha-space-150, 12px) var(--matcha-space-200, 16px);
96
+ border-radius: var(--matcha-radius-lg, 8px);
97
+ border-left: var(--matcha-border-medium, 4px) solid transparent;
98
+ width: 100%;
99
+ box-sizing: border-box;
100
+ }
101
+
102
+ .matcha-notification__icon {
103
+ flex-shrink: 0;
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: center;
107
+ width: var(--matcha-icon-size-md, 24px);
108
+ height: var(--matcha-icon-size-md, 24px);
109
+ }
110
+
111
+ .matcha-notification__body {
112
+ display: flex;
113
+ flex-direction: column;
114
+ gap: var(--matcha-space-050, 4px);
115
+ flex: 1;
116
+ min-width: 0;
117
+ }
118
+
119
+ .matcha-notification__title {
120
+ font-family: var(--matcha-font-family);
121
+ font-size: var(--matcha-text-body-md, 14px);
122
+ font-weight: var(--matcha-weight-semibold, 600);
123
+ line-height: var(--matcha-leading-body-md, 20px);
124
+ }
125
+
126
+ .matcha-notification__description {
127
+ font-family: var(--matcha-font-family);
128
+ font-size: var(--matcha-text-body-md, 14px);
129
+ font-weight: var(--matcha-weight-regular, 400);
130
+ line-height: var(--matcha-leading-body-md, 20px);
131
+ }
132
+
133
+ .matcha-notification__actions {
134
+ display: flex;
135
+ align-items: center;
136
+ gap: var(--matcha-space-100, 8px);
137
+ flex-shrink: 0;
138
+ }
139
+
140
+ .matcha-notification__close {
141
+ flex-shrink: 0;
142
+ display: flex;
143
+ align-items: center;
144
+ justify-content: center;
145
+ width: 32px;
146
+ height: 32px;
147
+ background: none;
148
+ border: none;
149
+ cursor: pointer;
150
+ padding: 0;
151
+ border-radius: var(--matcha-radius-pill, 9999px);
152
+ position: relative;
153
+ overflow: hidden;
154
+ transition: color var(--matcha-duration-instant, 80ms) linear;
155
+
156
+ // State layer
157
+ &::before {
158
+ content: '';
159
+ position: absolute;
160
+ inset: 0;
161
+ background: currentColor;
162
+ opacity: 0;
163
+ border-radius: inherit;
164
+ pointer-events: none;
165
+ transition: opacity var(--matcha-duration-instant, 80ms) linear;
166
+ }
167
+ &:hover:not([disabled])::before { opacity: var(--matcha-state-hover, 0.08); }
168
+ &:active:not([disabled])::before { opacity: var(--matcha-state-active, 0.12); }
169
+ }
170
+
171
+ // ── Responsive ──────────────────────────────────────────────────────────────
172
+
173
+ @include media-breakpoint('xs') {
174
+ .matcha-notification {
175
+ flex-wrap: wrap;
176
+ gap: var(--matcha-space-100, 8px);
177
+ padding: var(--matcha-space-100, 8px) var(--matcha-space-150, 12px);
178
+ }
179
+
180
+ .matcha-notification__body {
181
+ flex-basis: calc(100% - 56px); // icon + gap
182
+ }
183
+
184
+ .matcha-notification__actions {
185
+ width: 100%;
186
+ justify-content: flex-end;
187
+ }
188
+ }
189
+
190
+ // ── Reduced motion ──────────────────────────────────────────────────────────
191
+
192
+ @media (prefers-reduced-motion: reduce) {
193
+ .matcha-notification__close,
194
+ .matcha-notification__close::before {
195
+ transition: none;
196
+ }
197
+ }