@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,430 +1,430 @@
1
- @use "sass:map";
2
-
3
- // =============================================================================
4
- // MATCHA DROP LIST STYLES
5
- // =============================================================================
6
-
7
- // Mixin para cores e temas
8
- @mixin matcha-drop-list-theme($theme) {
9
-
10
- // =============================================================================
11
- // COMPONENTE PRINCIPAL
12
- // =============================================================================
13
-
14
- .matcha-drop-list {
15
- display: block;
16
- position: relative;
17
- }
18
-
19
- // =============================================================================
20
- // CONTAINER DAS LISTAS
21
- // =============================================================================
22
-
23
- .matcha-drop-list-container {
24
- position: relative;
25
- min-height: 48px;
26
- display: flex;
27
- flex-direction: column;
28
- gap: var(--matcha-space-200, 16px);
29
- padding: 0px;
30
- border-radius: var(--matcha-radius-lg, 8px);
31
- border-width: 0px;
32
- transition: background-color 0.2s ease, border-color 0.2s ease, padding 0.2s ease;
33
-
34
- &.matcha-drop-list-receiving {
35
- background-color: var(--matcha-color-primary-alpha);
36
- border-color: var(--matcha-color-accent);
37
- border-width: 2px;
38
- border-style: dashed;
39
- border-radius: var(--matcha-radius-lg, 8px);
40
- padding: var(--matcha-space-100, 8px);
41
- transition: background-color 0.2s ease, border-color 0.2s ease, padding 0.2s ease;
42
-
43
- &::before {
44
- content: '';
45
- position: absolute;
46
- top: 0;
47
- left: 0;
48
- right: 0;
49
- bottom: 0;
50
- background: linear-gradient(45deg,
51
- transparent 25%,
52
- var(--matcha-color-primary-alpha) 25%,
53
- var(--matcha-color-primary-alpha) 50%,
54
- transparent 50%,
55
- transparent 75%,
56
- var(--matcha-color-primary-alpha) 75%,
57
- var(--matcha-color-primary-alpha));
58
- background-size: 16px 16px;
59
- animation: drop-zone-animation 2s linear infinite;
60
- border-radius: var(--matcha-radius-md, 4px);
61
- opacity: 0.4;
62
- }
63
- }
64
-
65
- // Estados de aceitação de drop
66
- &.matcha-drop-list-can-accept {
67
- background-color: var(--matcha-color-success-alpha);
68
- border-color: var(--matcha-color-success);
69
- cursor: copy;
70
-
71
- &::before {
72
- background: linear-gradient(45deg,
73
- transparent 25%,
74
- var(--matcha-color-success-alpha) 25%,
75
- var(--matcha-color-success-alpha) 50%,
76
- transparent 50%,
77
- transparent 75%,
78
- var(--matcha-color-success-alpha) 75%,
79
- var(--matcha-color-success-alpha));
80
- background-size: 16px 16px;
81
- animation: drop-zone-animation 1.5s linear infinite;
82
- opacity: 0.5;
83
- }
84
- }
85
-
86
-
87
-
88
- &.matcha-drop-list-cannot-accept {
89
- background-color: var(--matcha-color-danger-alpha);
90
- border-color: var(--matcha-color-danger);
91
- pointer-events: none;
92
- cursor: default;
93
-
94
- &::before {
95
- background: linear-gradient(45deg,
96
- transparent 25%,
97
- var(--matcha-color-danger-alpha) 25%,
98
- var(--matcha-color-danger-alpha) 50%,
99
- transparent 50%,
100
- transparent 75%,
101
- var(--matcha-color-danger-alpha) 75%,
102
- var(--matcha-color-danger-alpha));
103
- background-size: 16px 16px;
104
- animation: drop-zone-animation 0.8s linear infinite;
105
- opacity: 0.6;
106
- }
107
- }
108
-
109
- &.matcha-drop-list-disabled {
110
- color: var(--matcha-color-disabled-fg);
111
- background-color: var(--matcha-color-disabled-bg);
112
- pointer-events: none;
113
- cursor: default;
114
- }
115
- }
116
-
117
- // =============================================================================
118
- // DROP ZONE (matchaDropZone directive — reparenting target)
119
- // =============================================================================
120
-
121
- .matcha-drop-zone-cannot-accept {
122
- border: 2px dashed var(--matcha-color-danger) !important;
123
- border-radius: 8px;
124
- background-color: var(--matcha-color-danger-alpha);
125
- cursor: not-allowed;
126
- transition: background-color 0.15s linear, border-color 0.15s linear;
127
- }
128
-
129
- // Fix C: quando o drop zone pai está rejeitado (vermelho), a lista filha
130
- // recebendo o drag também deve ficar vermelha — não verde.
131
- .matcha-drop-zone-cannot-accept .matcha-drop-list-container.matcha-drop-list-receiving {
132
- background-color: var(--matcha-color-danger-alpha);
133
- border-color: var(--matcha-color-danger);
134
-
135
- &::before {
136
- background: linear-gradient(45deg,
137
- transparent 25%, var(--matcha-color-danger-alpha) 25%, var(--matcha-color-danger-alpha) 50%,
138
- transparent 50%, transparent 75%, var(--matcha-color-danger-alpha) 75%, var(--matcha-color-danger-alpha));
139
- background-size: 16px 16px;
140
- animation: drop-zone-animation 0.8s linear infinite;
141
- opacity: 0.6;
142
- }
143
- }
144
-
145
- // =============================================================================
146
- // GHOST CLONE (criado dinamicamente no body durante o drag)
147
- // =============================================================================
148
-
149
- .matcha-drag-ghost {
150
- pointer-events: none;
151
- opacity: 0.85;
152
- z-index: 9999;
153
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
154
- border-radius: var(--matcha-radius-md, 4px);
155
- will-change: transform;
156
- }
157
-
158
- // =============================================================================
159
- // ITENS ARRASTÁVEIS — Template A
160
- // =============================================================================
161
-
162
- .matcha-drag-item {
163
- position: relative;
164
- display: flex;
165
- padding: var(--matcha-space-150, 12px);
166
- border-radius: var(--matcha-radius-md, 4px);
167
- overflow: hidden;
168
- transition: box-shadow 0.2s ease, transform 0.2s ease, opacity 0.2s ease;
169
- user-select: none;
170
- background-color: var(--matcha-color-surface);
171
- color: var(--matcha-color-fg);
172
-
173
- // State layer (Template A)
174
- &::before {
175
- content: '';
176
- position: absolute;
177
- inset: 0;
178
- background: currentColor;
179
- opacity: 0;
180
- border-radius: inherit;
181
- pointer-events: none;
182
- transition: opacity var(--matcha-duration-instant, 80ms) linear;
183
- }
184
-
185
- &:last-child {
186
- margin-bottom: 0;
187
- }
188
-
189
- &:hover:not([disabled])::before { opacity: var(--matcha-state-hover, 0.08); }
190
- &:active:not([disabled])::before { opacity: var(--matcha-state-active, 0.12); }
191
-
192
- &:focus-visible:not([disabled]) {
193
- outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent);
194
- outline-offset: var(--matcha-state-focus-ring-offset, 2px);
195
- }
196
-
197
- @media (prefers-reduced-motion: reduce) {
198
- &::before { transition: none; }
199
- }
200
-
201
- &.matcha-drag-dragging {
202
- z-index: 1000;
203
- cursor: grabbing;
204
- position: relative;
205
- box-shadow: 0 8px 25px var(--matcha-color-text-muted);
206
- background-color: var(--matcha-color-surface);
207
- transform: scale(1.02);
208
- opacity: 0.95;
209
-
210
- // Efeito de destaque sutil
211
- &::before {
212
- content: '';
213
- position: absolute;
214
- inset: 0;
215
- border-radius: var(--matcha-radius-lg, 8px);
216
- z-index: -1;
217
- opacity: 0.1;
218
- background: linear-gradient(45deg, var(--matcha-color-surface), var(--matcha-color-primary));
219
- animation: drag-glow 1s ease-in-out infinite alternate;
220
- }
221
- }
222
-
223
- &.matcha-drag-disabled {
224
- pointer-events: none;
225
- cursor: default;
226
- color: var(--matcha-color-disabled-fg);
227
- background-color: var(--matcha-color-disabled-bg);
228
- }
229
-
230
- &.disabled-item {
231
- pointer-events: none;
232
- cursor: default;
233
- color: var(--matcha-color-disabled-fg);
234
- background-color: var(--matcha-color-disabled-bg);
235
- }
236
- }
237
-
238
- // =============================================================================
239
- // HANDLE DE DRAG
240
- // =============================================================================
241
-
242
- .matcha-drag-handle {
243
- cursor: grab;
244
- touch-action: none;
245
-
246
- &:active {
247
- cursor: grabbing;
248
- }
249
-
250
- &.disabled {
251
- pointer-events: none;
252
- cursor: default;
253
- }
254
- }
255
-
256
- // =============================================================================
257
- // CONTEÚDO DOS ITENS
258
- // =============================================================================
259
-
260
- .item-content {
261
- flex: 1;
262
- display: flex;
263
- flex-direction: column;
264
- gap: var(--matcha-space-050, 4px);
265
-
266
- .item-title {
267
- font-weight: 500;
268
- color: var(--matcha-color-fg);
269
-
270
- &.completed {
271
- text-decoration: line-through;
272
- opacity: 0.7;
273
- }
274
- }
275
-
276
- .item-id {
277
- font-size: var(--matcha-text-body-sm, 12px);
278
- font-family: monospace;
279
- color: var(--matcha-color-text-muted);
280
- }
281
-
282
- small {
283
- font-size: var(--matcha-text-p-tiny, 11px);
284
- font-style: italic;
285
- color: var(--matcha-color-fg-alpha);
286
- }
287
- }
288
-
289
- // =============================================================================
290
- // AÇÕES DOS ITENS
291
- // =============================================================================
292
-
293
- .item-actions {
294
- display: flex;
295
- align-items: center;
296
- gap: var(--matcha-space-100, 8px);
297
-
298
- i {
299
- font-size: var(--matcha-icon-size-sm, 16px);
300
- }
301
- }
302
-
303
- // =============================================================================
304
- // INDICADOR DE DROP
305
- // =============================================================================
306
-
307
- .matcha-drop-indicator {
308
- position: absolute;
309
- left: 0;
310
- right: 0;
311
- height: 2px;
312
- opacity: 0;
313
- transition: opacity 0.2s ease;
314
- transform: translateY(-8px);
315
- z-index: 1000;
316
- pointer-events: none;
317
- margin: 0;
318
- border-radius: var(--matcha-radius-sm, 2px);
319
- background-color: var(--matcha-color-accent);
320
-
321
- &.active {
322
- opacity: 1;
323
- }
324
- }
325
-
326
- // =============================================================================
327
- // PLACEHOLDER PARA LISTAS VAZIAS
328
- // =============================================================================
329
-
330
- .matcha-drop-list-placeholder {
331
- position: absolute;
332
- top: 0;
333
- left: 0;
334
- right: 0;
335
- bottom: 0;
336
- display: flex;
337
- align-items: center;
338
- justify-content: center;
339
- z-index: 10;
340
-
341
- .matcha-drop-list-empty-placeholder {
342
- font-style: italic;
343
- padding: var(--matcha-space-250, 20px);
344
- text-align: center;
345
- font-size: var(--matcha-text-body-md, 14px);
346
- border-radius: var(--matcha-radius-md, 4px);
347
- transition: color 0.2s ease, border-color 0.2s ease, background-color 0.2s ease;
348
- color: var(--matcha-color-text-muted);
349
- border-color: var(--matcha-color-fg-alpha);
350
-
351
- &.can-accept {
352
- color: var(--matcha-color-success);
353
- border-color: var(--matcha-color-success);
354
- background-color: var(--matcha-color-success-alpha);
355
- }
356
-
357
- &.cannot-accept {
358
- color: var(--matcha-color-danger);
359
- border-color: var(--matcha-color-danger);
360
- background-color: var(--matcha-color-danger-alpha);
361
- animation: shake 0.5s ease-in-out;
362
- }
363
- }
364
- }
365
-
366
- // =============================================================================
367
- // HIGH CONTRAST MODE SUPPORT
368
- // =============================================================================
369
-
370
- @media (prefers-contrast: high) {
371
- .matcha-drop-list-container.matcha-drop-list-receiving {
372
- border-color: var(--matcha-color-fg);
373
- background-color: var(--matcha-color-fg-alpha);
374
- }
375
-
376
- .matcha-drag-item.matcha-drag-dragging {
377
- border: 2px solid var(--matcha-color-fg);
378
- }
379
- }
380
- }
381
-
382
- // =============================================================================
383
- // ANIMAÇÕES
384
- // =============================================================================
385
-
386
- @keyframes drop-zone-animation {
387
- 0% {
388
- background-position: 0 0;
389
- }
390
- 100% {
391
- background-position: 32px 0, 32px 0, 32px 0;
392
- }
393
- }
394
-
395
- @keyframes pulse-reject {
396
- 0% {
397
- opacity: 0.5;
398
- transform: scaleY(1);
399
- }
400
-
401
- 100% {
402
- opacity: 1;
403
- transform: scaleY(1.5);
404
- }
405
- }
406
-
407
- @keyframes shake {
408
- 0%,
409
- 100% {
410
- transform: translateX(0);
411
- }
412
-
413
- 25% {
414
- transform: translateX(-2px);
415
- }
416
-
417
- 75% {
418
- transform: translateX(2px);
419
- }
420
- }
421
-
422
- @keyframes drag-glow {
423
- 0% {
424
- opacity: 0.1;
425
- }
426
-
427
- 100% {
428
- opacity: 0.3;
429
- }
430
- }
1
+ @use "sass:map";
2
+
3
+ // =============================================================================
4
+ // MATCHA DROP LIST STYLES
5
+ // =============================================================================
6
+
7
+ // Mixin para cores e temas
8
+ @mixin matcha-drop-list-theme($theme) {
9
+
10
+ // =============================================================================
11
+ // COMPONENTE PRINCIPAL
12
+ // =============================================================================
13
+
14
+ .matcha-drop-list {
15
+ display: block;
16
+ position: relative;
17
+ }
18
+
19
+ // =============================================================================
20
+ // CONTAINER DAS LISTAS
21
+ // =============================================================================
22
+
23
+ .matcha-drop-list-container {
24
+ position: relative;
25
+ min-height: 48px;
26
+ display: flex;
27
+ flex-direction: column;
28
+ gap: var(--matcha-space-200, 16px);
29
+ padding: 0px;
30
+ border-radius: var(--matcha-radius-lg, 8px);
31
+ border-width: 0px;
32
+ transition: background-color 0.2s ease, border-color 0.2s ease, padding 0.2s ease;
33
+
34
+ &.matcha-drop-list-receiving {
35
+ background-color: var(--matcha-color-primary-alpha);
36
+ border-color: var(--matcha-color-accent);
37
+ border-width: 2px;
38
+ border-style: dashed;
39
+ border-radius: var(--matcha-radius-lg, 8px);
40
+ padding: var(--matcha-space-100, 8px);
41
+ transition: background-color 0.2s ease, border-color 0.2s ease, padding 0.2s ease;
42
+
43
+ &::before {
44
+ content: '';
45
+ position: absolute;
46
+ top: 0;
47
+ left: 0;
48
+ right: 0;
49
+ bottom: 0;
50
+ background: linear-gradient(45deg,
51
+ transparent 25%,
52
+ var(--matcha-color-primary-alpha) 25%,
53
+ var(--matcha-color-primary-alpha) 50%,
54
+ transparent 50%,
55
+ transparent 75%,
56
+ var(--matcha-color-primary-alpha) 75%,
57
+ var(--matcha-color-primary-alpha));
58
+ background-size: 16px 16px;
59
+ animation: drop-zone-animation 2s linear infinite;
60
+ border-radius: var(--matcha-radius-md, 4px);
61
+ opacity: 0.4;
62
+ }
63
+ }
64
+
65
+ // Estados de aceitação de drop
66
+ &.matcha-drop-list-can-accept {
67
+ background-color: var(--matcha-color-success-alpha);
68
+ border-color: var(--matcha-color-success);
69
+ cursor: copy;
70
+
71
+ &::before {
72
+ background: linear-gradient(45deg,
73
+ transparent 25%,
74
+ var(--matcha-color-success-alpha) 25%,
75
+ var(--matcha-color-success-alpha) 50%,
76
+ transparent 50%,
77
+ transparent 75%,
78
+ var(--matcha-color-success-alpha) 75%,
79
+ var(--matcha-color-success-alpha));
80
+ background-size: 16px 16px;
81
+ animation: drop-zone-animation 1.5s linear infinite;
82
+ opacity: 0.5;
83
+ }
84
+ }
85
+
86
+
87
+
88
+ &.matcha-drop-list-cannot-accept {
89
+ background-color: var(--matcha-color-danger-alpha);
90
+ border-color: var(--matcha-color-danger);
91
+ pointer-events: none;
92
+ cursor: default;
93
+
94
+ &::before {
95
+ background: linear-gradient(45deg,
96
+ transparent 25%,
97
+ var(--matcha-color-danger-alpha) 25%,
98
+ var(--matcha-color-danger-alpha) 50%,
99
+ transparent 50%,
100
+ transparent 75%,
101
+ var(--matcha-color-danger-alpha) 75%,
102
+ var(--matcha-color-danger-alpha));
103
+ background-size: 16px 16px;
104
+ animation: drop-zone-animation 0.8s linear infinite;
105
+ opacity: 0.6;
106
+ }
107
+ }
108
+
109
+ &.matcha-drop-list-disabled {
110
+ color: var(--matcha-color-disabled-fg);
111
+ background-color: var(--matcha-color-disabled-bg);
112
+ pointer-events: none;
113
+ cursor: default;
114
+ }
115
+ }
116
+
117
+ // =============================================================================
118
+ // DROP ZONE (matchaDropZone directive — reparenting target)
119
+ // =============================================================================
120
+
121
+ .matcha-drop-zone-cannot-accept {
122
+ border: 2px dashed var(--matcha-color-danger) !important;
123
+ border-radius: 8px;
124
+ background-color: var(--matcha-color-danger-alpha);
125
+ cursor: not-allowed;
126
+ transition: background-color 0.15s linear, border-color 0.15s linear;
127
+ }
128
+
129
+ // Fix C: quando o drop zone pai está rejeitado (vermelho), a lista filha
130
+ // recebendo o drag também deve ficar vermelha — não verde.
131
+ .matcha-drop-zone-cannot-accept .matcha-drop-list-container.matcha-drop-list-receiving {
132
+ background-color: var(--matcha-color-danger-alpha);
133
+ border-color: var(--matcha-color-danger);
134
+
135
+ &::before {
136
+ background: linear-gradient(45deg,
137
+ transparent 25%, var(--matcha-color-danger-alpha) 25%, var(--matcha-color-danger-alpha) 50%,
138
+ transparent 50%, transparent 75%, var(--matcha-color-danger-alpha) 75%, var(--matcha-color-danger-alpha));
139
+ background-size: 16px 16px;
140
+ animation: drop-zone-animation 0.8s linear infinite;
141
+ opacity: 0.6;
142
+ }
143
+ }
144
+
145
+ // =============================================================================
146
+ // GHOST CLONE (criado dinamicamente no body durante o drag)
147
+ // =============================================================================
148
+
149
+ .matcha-drag-ghost {
150
+ pointer-events: none;
151
+ opacity: 0.85;
152
+ z-index: 9999;
153
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
154
+ border-radius: var(--matcha-radius-md, 4px);
155
+ will-change: transform;
156
+ }
157
+
158
+ // =============================================================================
159
+ // ITENS ARRASTÁVEIS — Template A
160
+ // =============================================================================
161
+
162
+ .matcha-drag-item {
163
+ position: relative;
164
+ display: flex;
165
+ padding: var(--matcha-space-150, 12px);
166
+ border-radius: var(--matcha-radius-md, 4px);
167
+ overflow: hidden;
168
+ transition: box-shadow 0.2s ease, transform 0.2s ease, opacity 0.2s ease;
169
+ user-select: none;
170
+ background-color: var(--matcha-color-surface);
171
+ color: var(--matcha-color-fg);
172
+
173
+ // State layer (Template A)
174
+ &::before {
175
+ content: '';
176
+ position: absolute;
177
+ inset: 0;
178
+ background: currentColor;
179
+ opacity: 0;
180
+ border-radius: inherit;
181
+ pointer-events: none;
182
+ transition: opacity var(--matcha-duration-instant, 80ms) linear;
183
+ }
184
+
185
+ &:last-child {
186
+ margin-bottom: 0;
187
+ }
188
+
189
+ &:hover:not([disabled])::before { opacity: var(--matcha-state-hover, 0.08); }
190
+ &:active:not([disabled])::before { opacity: var(--matcha-state-active, 0.12); }
191
+
192
+ &:focus-visible:not([disabled]) {
193
+ outline: var(--matcha-state-focus-ring-width, 2px) solid var(--matcha-color-accent);
194
+ outline-offset: var(--matcha-state-focus-ring-offset, 2px);
195
+ }
196
+
197
+ @media (prefers-reduced-motion: reduce) {
198
+ &::before { transition: none; }
199
+ }
200
+
201
+ &.matcha-drag-dragging {
202
+ z-index: 1000;
203
+ cursor: grabbing;
204
+ position: relative;
205
+ box-shadow: 0 8px 25px var(--matcha-color-text-muted);
206
+ background-color: var(--matcha-color-surface);
207
+ transform: scale(1.02);
208
+ opacity: 0.95;
209
+
210
+ // Efeito de destaque sutil
211
+ &::before {
212
+ content: '';
213
+ position: absolute;
214
+ inset: 0;
215
+ border-radius: var(--matcha-radius-lg, 8px);
216
+ z-index: -1;
217
+ opacity: 0.1;
218
+ background: linear-gradient(45deg, var(--matcha-color-surface), var(--matcha-color-primary));
219
+ animation: drag-glow 1s ease-in-out infinite alternate;
220
+ }
221
+ }
222
+
223
+ &.matcha-drag-disabled {
224
+ pointer-events: none;
225
+ cursor: default;
226
+ color: var(--matcha-color-disabled-fg);
227
+ background-color: var(--matcha-color-disabled-bg);
228
+ }
229
+
230
+ &.disabled-item {
231
+ pointer-events: none;
232
+ cursor: default;
233
+ color: var(--matcha-color-disabled-fg);
234
+ background-color: var(--matcha-color-disabled-bg);
235
+ }
236
+ }
237
+
238
+ // =============================================================================
239
+ // HANDLE DE DRAG
240
+ // =============================================================================
241
+
242
+ .matcha-drag-handle {
243
+ cursor: grab;
244
+ touch-action: none;
245
+
246
+ &:active {
247
+ cursor: grabbing;
248
+ }
249
+
250
+ &.disabled {
251
+ pointer-events: none;
252
+ cursor: default;
253
+ }
254
+ }
255
+
256
+ // =============================================================================
257
+ // CONTEÚDO DOS ITENS
258
+ // =============================================================================
259
+
260
+ .item-content {
261
+ flex: 1;
262
+ display: flex;
263
+ flex-direction: column;
264
+ gap: var(--matcha-space-050, 4px);
265
+
266
+ .item-title {
267
+ font-weight: 500;
268
+ color: var(--matcha-color-fg);
269
+
270
+ &.completed {
271
+ text-decoration: line-through;
272
+ opacity: 0.7;
273
+ }
274
+ }
275
+
276
+ .item-id {
277
+ font-size: var(--matcha-text-body-sm, 12px);
278
+ font-family: monospace;
279
+ color: var(--matcha-color-text-muted);
280
+ }
281
+
282
+ small {
283
+ font-size: var(--matcha-text-p-tiny, 11px);
284
+ font-style: italic;
285
+ color: var(--matcha-color-fg-alpha);
286
+ }
287
+ }
288
+
289
+ // =============================================================================
290
+ // AÇÕES DOS ITENS
291
+ // =============================================================================
292
+
293
+ .item-actions {
294
+ display: flex;
295
+ align-items: center;
296
+ gap: var(--matcha-space-100, 8px);
297
+
298
+ i {
299
+ font-size: var(--matcha-icon-size-sm, 16px);
300
+ }
301
+ }
302
+
303
+ // =============================================================================
304
+ // INDICADOR DE DROP
305
+ // =============================================================================
306
+
307
+ .matcha-drop-indicator {
308
+ position: absolute;
309
+ left: 0;
310
+ right: 0;
311
+ height: 2px;
312
+ opacity: 0;
313
+ transition: opacity 0.2s ease;
314
+ transform: translateY(-8px);
315
+ z-index: 1000;
316
+ pointer-events: none;
317
+ margin: 0;
318
+ border-radius: var(--matcha-radius-sm, 2px);
319
+ background-color: var(--matcha-color-accent);
320
+
321
+ &.active {
322
+ opacity: 1;
323
+ }
324
+ }
325
+
326
+ // =============================================================================
327
+ // PLACEHOLDER PARA LISTAS VAZIAS
328
+ // =============================================================================
329
+
330
+ .matcha-drop-list-placeholder {
331
+ position: absolute;
332
+ top: 0;
333
+ left: 0;
334
+ right: 0;
335
+ bottom: 0;
336
+ display: flex;
337
+ align-items: center;
338
+ justify-content: center;
339
+ z-index: 10;
340
+
341
+ .matcha-drop-list-empty-placeholder {
342
+ font-style: italic;
343
+ padding: var(--matcha-space-250, 20px);
344
+ text-align: center;
345
+ font-size: var(--matcha-text-body-md, 14px);
346
+ border-radius: var(--matcha-radius-md, 4px);
347
+ transition: color 0.2s ease, border-color 0.2s ease, background-color 0.2s ease;
348
+ color: var(--matcha-color-text-muted);
349
+ border-color: var(--matcha-color-fg-alpha);
350
+
351
+ &.can-accept {
352
+ color: var(--matcha-color-success);
353
+ border-color: var(--matcha-color-success);
354
+ background-color: var(--matcha-color-success-alpha);
355
+ }
356
+
357
+ &.cannot-accept {
358
+ color: var(--matcha-color-danger);
359
+ border-color: var(--matcha-color-danger);
360
+ background-color: var(--matcha-color-danger-alpha);
361
+ animation: shake 0.5s ease-in-out;
362
+ }
363
+ }
364
+ }
365
+
366
+ // =============================================================================
367
+ // HIGH CONTRAST MODE SUPPORT
368
+ // =============================================================================
369
+
370
+ @media (prefers-contrast: high) {
371
+ .matcha-drop-list-container.matcha-drop-list-receiving {
372
+ border-color: var(--matcha-color-fg);
373
+ background-color: var(--matcha-color-fg-alpha);
374
+ }
375
+
376
+ .matcha-drag-item.matcha-drag-dragging {
377
+ border: 2px solid var(--matcha-color-fg);
378
+ }
379
+ }
380
+ }
381
+
382
+ // =============================================================================
383
+ // ANIMAÇÕES
384
+ // =============================================================================
385
+
386
+ @keyframes drop-zone-animation {
387
+ 0% {
388
+ background-position: 0 0;
389
+ }
390
+ 100% {
391
+ background-position: 32px 0, 32px 0, 32px 0;
392
+ }
393
+ }
394
+
395
+ @keyframes pulse-reject {
396
+ 0% {
397
+ opacity: 0.5;
398
+ transform: scaleY(1);
399
+ }
400
+
401
+ 100% {
402
+ opacity: 1;
403
+ transform: scaleY(1.5);
404
+ }
405
+ }
406
+
407
+ @keyframes shake {
408
+ 0%,
409
+ 100% {
410
+ transform: translateX(0);
411
+ }
412
+
413
+ 25% {
414
+ transform: translateX(-2px);
415
+ }
416
+
417
+ 75% {
418
+ transform: translateX(2px);
419
+ }
420
+ }
421
+
422
+ @keyframes drag-glow {
423
+ 0% {
424
+ opacity: 0.1;
425
+ }
426
+
427
+ 100% {
428
+ opacity: 0.3;
429
+ }
430
+ }