@maildeno/editor 0.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 (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +426 -0
  3. package/dist/RowPreviewLegacyComponent-CXsY4P-R.js +439 -0
  4. package/dist/RowPreviewLegacyComponent-osWbuByc.js +439 -0
  5. package/dist/RowPreviewRow-D-U1mV4v.js +107 -0
  6. package/dist/RowPreviewRow-MSc_unf3.js +107 -0
  7. package/dist/adapters/index.d.ts +7 -0
  8. package/dist/adapters/localStorageAdapter.d.ts +6 -0
  9. package/dist/adapters/types.d.ts +83 -0
  10. package/dist/baseStyles.d.ts +13 -0
  11. package/dist/blocks/canvasStyleHelpers.d.ts +17 -0
  12. package/dist/blocks/definitions/anchor.d.ts +2 -0
  13. package/dist/blocks/definitions/button.d.ts +2 -0
  14. package/dist/blocks/definitions/divider.d.ts +2 -0
  15. package/dist/blocks/definitions/heading.d.ts +2 -0
  16. package/dist/blocks/definitions/image.d.ts +2 -0
  17. package/dist/blocks/definitions/list.d.ts +2 -0
  18. package/dist/blocks/definitions/menu.d.ts +2 -0
  19. package/dist/blocks/definitions/paragraph.d.ts +2 -0
  20. package/dist/blocks/definitions/socials.d.ts +2 -0
  21. package/dist/blocks/definitions/spacer.d.ts +2 -0
  22. package/dist/blocks/definitions/video.d.ts +2 -0
  23. package/dist/blocks/index.d.ts +8 -0
  24. package/dist/blocks/registry.d.ts +23 -0
  25. package/dist/blocks/types.d.ts +73 -0
  26. package/dist/composables/emailBuilder/components/useComponentStyleEditor.d.ts +72 -0
  27. package/dist/composables/emailBuilder/components/useProductRowActions.d.ts +3 -0
  28. package/dist/composables/emailBuilder/components/useProductRows.d.ts +59 -0
  29. package/dist/composables/emailBuilder/core/config/componentConfig.d.ts +29 -0
  30. package/dist/composables/emailBuilder/core/link-tags/useLinkTagInsert.d.ts +13 -0
  31. package/dist/composables/emailBuilder/core/merge-tags/mergeTagDefinitions.d.ts +64 -0
  32. package/dist/composables/emailBuilder/core/merge-tags/resolveMergeTags.d.ts +27 -0
  33. package/dist/composables/emailBuilder/core/ui/useLayerHoverScroll.d.ts +20 -0
  34. package/dist/composables/emailBuilder/core/ui/useLayoutDrag.d.ts +85 -0
  35. package/dist/composables/emailBuilder/core/ui/useRichTextEditors.d.ts +6 -0
  36. package/dist/composables/emailBuilder/core/ui/visibilityBadgeHelpers.d.ts +22 -0
  37. package/dist/composables/emailBuilder/core/useEmailBuilder.d.ts +274 -0
  38. package/dist/composables/emailBuilder/core/useEmailBuilderDefault.d.ts +507 -0
  39. package/dist/composables/emailBuilder/core/useEmailBuilderOperations.d.ts +31 -0
  40. package/dist/composables/emailBuilder/core/useEmailBuilderVisibility.d.ts +31 -0
  41. package/dist/composables/emailBuilder/export/actions/download.d.ts +24 -0
  42. package/dist/composables/emailBuilder/export/generators/html.d.ts +3 -0
  43. package/dist/composables/emailBuilder/export/generators/mjml.d.ts +6 -0
  44. package/dist/composables/emailBuilder/export/generators/react-email.d.ts +61 -0
  45. package/dist/composables/emailBuilder/export/helpers/generatorHelpers.d.ts +53 -0
  46. package/dist/composables/emailBuilder/export/logic/espLogicWrapper.d.ts +76 -0
  47. package/dist/composables/emailBuilder/export/logic/reactLogicWrapper.d.ts +31 -0
  48. package/dist/composables/emailBuilder/export/merge-tags/mergeTagMapper.d.ts +42 -0
  49. package/dist/composables/emailBuilder/export/merge-tags/reactMergeTagMapper.d.ts +26 -0
  50. package/dist/composables/emailBuilder/export/shared/containers.d.ts +18 -0
  51. package/dist/composables/emailBuilder/export/shared/styles.d.ts +12 -0
  52. package/dist/composables/emailBuilder/export/shared/tagIdentifier.d.ts +1 -0
  53. package/dist/composables/emailBuilder/export/targets/htmlExport.d.ts +20 -0
  54. package/dist/composables/emailBuilder/export/targets/jsonExport.d.ts +28 -0
  55. package/dist/composables/emailBuilder/export/targets/mjmlExport.d.ts +19 -0
  56. package/dist/composables/emailBuilder/export/targets/reactEmailExport.d.ts +20 -0
  57. package/dist/composables/emailBuilder/export/transformers/espWrapper.d.ts +2 -0
  58. package/dist/composables/emailBuilder/export/transformers/formatting.d.ts +3 -0
  59. package/dist/composables/emailBuilder/export/transformers/minify.d.ts +33 -0
  60. package/dist/composables/emailBuilder/export/transformers/tagMapper.d.ts +29 -0
  61. package/dist/composables/emailBuilder/export/types/export.d.ts +24 -0
  62. package/dist/composables/emailBuilder/export/useEmailExportEngine.d.ts +63 -0
  63. package/dist/composables/emailBuilder/export/useEmailExportMobileStyles.d.ts +3 -0
  64. package/dist/composables/emailBuilder/export/useExportSettings.d.ts +5 -0
  65. package/dist/composables/emailBuilder/health/accessibilityChecker.d.ts +64 -0
  66. package/dist/composables/emailBuilder/health/healthIndicator.d.ts +19 -0
  67. package/dist/composables/emailBuilder/history/useEmailBuilderHistory.d.ts +26 -0
  68. package/dist/composables/emailBuilder/history/useHistory.d.ts +16 -0
  69. package/dist/composables/emailBuilder/persistence/useEmailBuilderPersistence.d.ts +38 -0
  70. package/dist/composables/emailBuilder/preview/useClientPreview.d.ts +127 -0
  71. package/dist/composables/emailBuilder/transform/pipeline/hydrate.d.ts +54 -0
  72. package/dist/composables/emailBuilder/transform/pipeline/optimize.d.ts +101 -0
  73. package/dist/composables/emailBuilder/transform/pipeline/optimizeAI.d.ts +125 -0
  74. package/dist/composables/emailBuilder/types/emailBuilder.d.ts +79 -0
  75. package/dist/composables/system/useColor.d.ts +26 -0
  76. package/dist/composables/system/useDeviceDetection.d.ts +5 -0
  77. package/dist/composables/system/useGoogleFonts.d.ts +11 -0
  78. package/dist/composables/system/useImageUpload.d.ts +23 -0
  79. package/dist/composables/system/useSavedRowsPanel.d.ts +35 -0
  80. package/dist/composables/ui/useConfirm.d.ts +33 -0
  81. package/dist/composables/ui/useInfoDialog.d.ts +22 -0
  82. package/dist/composables/ui/useTeleportTarget.d.ts +49 -0
  83. package/dist/composables/ui/useToast.d.ts +32 -0
  84. package/dist/devStyleMirror.d.ts +20 -0
  85. package/dist/documentScopedStyles.d.ts +39 -0
  86. package/dist/editor.css +2411 -0
  87. package/dist/element-DN22fZmQ.js +72000 -0
  88. package/dist/element-scoped-styles.css +2411 -0
  89. package/dist/element.d.ts +6 -0
  90. package/dist/element.js +2 -0
  91. package/dist/esp/registry.d.ts +33 -0
  92. package/dist/estree-C12ASyI-.js +7993 -0
  93. package/dist/html-DGrfikay.js +7353 -0
  94. package/dist/index.d.ts +12 -0
  95. package/dist/index.js +71955 -0
  96. package/dist/init.d.ts +85 -0
  97. package/dist/init.js +130 -0
  98. package/dist/lightDom.d.ts +30 -0
  99. package/dist/merge-tags/registry.d.ts +33 -0
  100. package/dist/shadowStyles.d.ts +8 -0
  101. package/dist/standalone-Bd2oQFm3.js +3639 -0
  102. package/dist/theme.d.ts +132 -0
  103. package/dist/typescript-D-z2dDu9.js +23190 -0
  104. package/dist/utils/generateId.d.ts +1 -0
  105. package/dist/utils/shadowDom.d.ts +30 -0
  106. package/dist/vue.runtime.esm-bundler-DwQEK7WO.js +9028 -0
  107. package/package.json +99 -0
@@ -0,0 +1,2411 @@
1
+
2
+ .md-input[data-v-3e558228] {
3
+ width: 100%;
4
+ padding: 0.325rem 0.625rem;
5
+ font-size: 13px;
6
+ line-height: 1.25rem;
7
+ color: var(--md-text);
8
+ background: var(--md-surface);
9
+ border: 1px solid var(--md-border);
10
+ border-radius: 0.375rem;
11
+ outline: none;
12
+ transition: border-color 0.15s, box-shadow 0.15s;
13
+ }
14
+ .md-input[data-v-3e558228]::placeholder { color: var(--md-text-subtle);
15
+ }
16
+ .md-input[data-v-3e558228]:focus {
17
+ border-color: var(--md-primary);
18
+ }
19
+ .md-input[data-v-3e558228]:disabled { background: var(--md-surface-hover); color: var(--md-text-subtle); cursor: not-allowed;
20
+ }
21
+ .md-input--invalid[data-v-3e558228] { border-color: var(--md-danger);
22
+ }
23
+ .md-input--invalid[data-v-3e558228]:focus { border-color: var(--md-danger); box-shadow: 0 0 0 1px var(--md-danger);
24
+ }
25
+
26
+ /* =========================================================
27
+ SELECT ROOT
28
+ ========================================================= */
29
+ .md-sel__anchor {
30
+ display: flex;
31
+ align-items: center;
32
+ gap: 0.25rem;
33
+ width: 100%;
34
+ min-height: 32px;
35
+ box-sizing: border-box;
36
+ padding: 0 0.375rem 0 0.5rem;
37
+ background: var(--md-surface);
38
+ border: 1px solid var(--md-border);
39
+ border-radius: 0.375rem;
40
+ font-size: 13px;
41
+ color: var(--md-text);
42
+ }
43
+ .md-sel__anchor:focus-within {
44
+ border-color: var(--md-primary);
45
+ }
46
+ .md-sel__anchor--open {
47
+ border-color: var(--md-primary);
48
+ }
49
+ .md-sel__anchor--disabled {
50
+ background: var(--md-surface-hover);
51
+ color: var(--md-text-subtle);
52
+ }
53
+
54
+ /* =========================================================
55
+ SEARCH INPUT
56
+ ========================================================= */
57
+ .md-sel__input {
58
+ flex: 1;
59
+ min-width: 0;
60
+ width: 100%;
61
+ box-sizing: border-box;
62
+ padding: 0.375rem 0;
63
+ border: 0;
64
+ outline: none;
65
+ background: transparent;
66
+ font-family: inherit;
67
+ font-size: 13px;
68
+ line-height: 1.25rem;
69
+ color: var(--md-text);
70
+ }
71
+ .md-sel__input::placeholder {
72
+ color: var(--md-text-subtle);
73
+ }
74
+
75
+ /* =========================================================
76
+ NON-FILTERED TRIGGER
77
+ ========================================================= */
78
+ .md-sel__triggerText {
79
+ flex: 1;
80
+ min-width: 0;
81
+ box-sizing: border-box;
82
+ padding: 0.375rem 0;
83
+ border: 0;
84
+ outline: none;
85
+ background: transparent;
86
+ cursor: pointer;
87
+ font-family: inherit;
88
+ font-size: 13px;
89
+ color: var(--md-text);
90
+ text-align: left;
91
+ overflow: hidden;
92
+ text-overflow: ellipsis;
93
+ white-space: nowrap;
94
+ }
95
+ .md-sel__ph {
96
+ color: var(--md-text-subtle);
97
+ }
98
+
99
+ /* =========================================================
100
+ CHEVRON
101
+ ========================================================= */
102
+ .md-sel__chev {
103
+ display: inline-flex;
104
+ align-items: center;
105
+ justify-content: center;
106
+ flex-shrink: 0;
107
+ width: 20px;
108
+ height: 20px;
109
+ padding: 0;
110
+ border: 0;
111
+ outline: none;
112
+ background: transparent;
113
+ cursor: pointer;
114
+ color: var(--md-text-muted);
115
+ transition:
116
+ transform 150ms ease,
117
+ color 150ms ease;
118
+ }
119
+ .md-sel__chev--open {
120
+ transform: rotate(180deg);
121
+ color: var(--md-text);
122
+ }
123
+
124
+ /* =========================================================
125
+ DROPDOWN
126
+ ========================================================= */
127
+ .md-sel__content {
128
+ position: relative;
129
+ z-index: 999999;
130
+ width: var(--reka-combobox-trigger-width);
131
+ min-width: 180px;
132
+ max-width: 320px;
133
+ box-sizing: border-box;
134
+ background: var(--md-surface);
135
+ border: 1px solid var(--md-border);
136
+ border-radius: 0.5rem;
137
+ box-shadow:
138
+ 0 10px 15px -3px rgb(0 0 0 / 0.12),
139
+ 0 4px 6px -4px rgb(0 0 0 / 0.12);
140
+ overflow: hidden;
141
+ }
142
+
143
+ /* =========================================================
144
+ DROPDOWN VIEWPORT
145
+ ========================================================= */
146
+ .md-sel__viewport {
147
+ width: 100%;
148
+ max-height: 240px;
149
+ box-sizing: border-box;
150
+ overflow-x: hidden;
151
+ overflow-y: auto;
152
+ padding: 4px;
153
+ background: var(--md-surface);
154
+ }
155
+
156
+ /* =========================================================
157
+ EMPTY
158
+ ========================================================= */
159
+ .md-sel__empty {
160
+ display: block;
161
+ width: 100%;
162
+ box-sizing: border-box;
163
+ padding: 8px;
164
+ background: var(--md-surface);
165
+ font-family: inherit;
166
+ font-size: 12px;
167
+ color: var(--md-text-subtle);
168
+ text-align: center;
169
+ }
170
+
171
+ /* =========================================================
172
+ OPTION
173
+ ========================================================= */
174
+ .md-sel__item {
175
+ display: flex;
176
+ align-items: center;
177
+ justify-content: space-between;
178
+ width: 100%;
179
+ min-height: 32px;
180
+ box-sizing: border-box;
181
+ gap: 8px;
182
+ padding: 6px 8px;
183
+ background: var(--md-surface);
184
+ border: 0;
185
+ border-radius: 6px;
186
+ font-family: inherit;
187
+ font-size: 13px;
188
+ line-height: 18px;
189
+ color: var(--md-text);
190
+ cursor: pointer;
191
+ outline: none;
192
+ user-select: none;
193
+ }
194
+ .md-sel__item:hover {
195
+ background: var(--md-surface-muted);
196
+ }
197
+ .md-sel__item[data-highlighted] {
198
+ background: var(--md-surface-muted);
199
+ }
200
+ .md-sel__item[data-state="checked"] {
201
+ background: var(--md-success-bg);
202
+ color: var(--md-success-fg);
203
+ font-weight: 500;
204
+ }
205
+ .md-sel__item[data-state="checked"][data-highlighted] {
206
+ background: #dcfce7;
207
+ }
208
+
209
+ /* =========================================================
210
+ OPTION TEXT
211
+ ========================================================= */
212
+ .md-sel__itemLabel {
213
+ flex: 1;
214
+ min-width: 0;
215
+ overflow: hidden;
216
+ text-overflow: ellipsis;
217
+ white-space: nowrap;
218
+ }
219
+
220
+ /* =========================================================
221
+ CHECK
222
+ ========================================================= */
223
+ .md-sel__check {
224
+ display: inline-flex;
225
+ align-items: center;
226
+ justify-content: center;
227
+ flex-shrink: 0;
228
+ width: 16px;
229
+ height: 16px;
230
+ font-size: 12px;
231
+ color: currentColor;
232
+ }
233
+
234
+ .section-fade-enter-active[data-v-315250dd],
235
+ .section-fade-leave-active[data-v-315250dd] {
236
+ transition: opacity 0.15s ease, transform 0.15s ease;
237
+ }
238
+ .section-fade-enter-from[data-v-315250dd],
239
+ .section-fade-leave-to[data-v-315250dd] {
240
+ opacity: 0;
241
+ transform: translateY(-3px);
242
+ }
243
+
244
+ .transparent-swatch[data-v-4f01058e] {
245
+ background-image:
246
+ linear-gradient(45deg, #ccc 25%, transparent 25%),
247
+ linear-gradient(-45deg, #ccc 25%, transparent 25%),
248
+ linear-gradient(45deg, transparent 75%, #ccc 75%),
249
+ linear-gradient(-45deg, transparent 75%, #ccc 75%);
250
+ background-size: 6px 6px;
251
+ background-position: 0 0, 0 3px, 3px -3px, -3px 0;
252
+ background-color: white;
253
+ }
254
+
255
+ .transparent-swatch[data-v-618c08eb] {
256
+ background-image:
257
+ linear-gradient(45deg, #ccc 25%, transparent 25%),
258
+ linear-gradient(-45deg, #ccc 25%, transparent 25%),
259
+ linear-gradient(45deg, transparent 75%, #ccc 75%),
260
+ linear-gradient(-45deg, transparent 75%, #ccc 75%);
261
+ background-size: 6px 6px;
262
+ background-position: 0 0, 0 3px, 3px -3px, -3px 0;
263
+ background-color: white;
264
+ }
265
+
266
+ /* =========================================================
267
+ FIELD
268
+ ========================================================= */
269
+ .md-dp__field {
270
+ display: flex;
271
+ align-items: center;
272
+ gap: 0.0625rem;
273
+ width: 100%;
274
+ min-height: 32px;
275
+ box-sizing: border-box;
276
+ padding: 0.375rem 0.375rem 0.375rem 0.5rem;
277
+ background: var(--md-surface);
278
+ border: 1px solid var(--md-border);
279
+ border-radius: 0.375rem;
280
+ font-family: inherit;
281
+ font-size: 13px;
282
+ color: var(--md-text);
283
+ }
284
+ .md-dp__field:focus-within {
285
+ border-color: var(--md-primary);
286
+ box-shadow: 0 0 0 1px var(--md-primary);
287
+ }
288
+
289
+ /* =========================================================
290
+ DATE SEGMENTS
291
+ ========================================================= */
292
+ .md-dp__seg {
293
+ padding: 0 0.0625rem;
294
+ border-radius: 0.125rem;
295
+ outline: none;
296
+ font-family: inherit;
297
+ font-size: 13px;
298
+ }
299
+ .md-dp__seg:focus {
300
+ background: var(--md-primary);
301
+ color: var(--md-surface);
302
+ }
303
+ .md-dp__seg[data-placeholder] {
304
+ color: var(--md-text-subtle);
305
+ }
306
+ .md-dp__lit {
307
+ color: var(--md-text-subtle);
308
+ }
309
+
310
+ /* =========================================================
311
+ CALENDAR TRIGGER
312
+ ========================================================= */
313
+ .md-dp__trigger {
314
+ display: inline-flex;
315
+ align-items: center;
316
+ justify-content: center;
317
+ flex-shrink: 0;
318
+ margin-left: auto;
319
+ width: 20px;
320
+ height: 20px;
321
+ padding: 0.125rem;
322
+ border: 0;
323
+ background: transparent;
324
+ cursor: pointer;
325
+ font-size: 11px;
326
+ color: var(--md-text-subtle);
327
+ }
328
+ .md-dp__trigger:hover {
329
+ color: var(--md-text-muted);
330
+ }
331
+
332
+ /* =========================================================
333
+ CALENDAR POPOVER
334
+ ========================================================= */
335
+ .md-dp__content {
336
+ z-index: 999999;
337
+ padding: 0.625rem;
338
+ box-sizing: border-box;
339
+ background: var(--md-surface);
340
+ border: 1px solid var(--md-border);
341
+ border-radius: 0.625rem;
342
+ box-shadow:
343
+ 0 10px 15px -3px rgb(0 0 0 / 0.12),
344
+ 0 4px 6px -4px rgb(0 0 0 / 0.12);
345
+ }
346
+
347
+ /* =========================================================
348
+ CALENDAR
349
+ ========================================================= */
350
+ .md-dp__cal {
351
+ width: max-content;
352
+ }
353
+
354
+ /* =========================================================
355
+ HEADER
356
+ ========================================================= */
357
+ .md-dp__header {
358
+ display: flex;
359
+ align-items: center;
360
+ justify-content: space-between;
361
+ margin-bottom: 0.5rem;
362
+ }
363
+ .md-dp__heading {
364
+ font-family: inherit;
365
+ font-size: 13px;
366
+ font-weight: 600;
367
+ color: var(--md-text);
368
+ }
369
+
370
+ /* =========================================================
371
+ PREVIOUS / NEXT
372
+ ========================================================= */
373
+ .md-dp__nav {
374
+ display: inline-flex;
375
+ align-items: center;
376
+ justify-content: center;
377
+ width: 24px;
378
+ height: 24px;
379
+ padding: 0.25rem;
380
+ border: 0;
381
+ background: transparent;
382
+ border-radius: 0.25rem;
383
+ cursor: pointer;
384
+ font-size: 12px;
385
+ color: var(--md-text-muted);
386
+ }
387
+ .md-dp__nav:hover {
388
+ background: var(--md-surface-muted);
389
+ color: var(--md-text);
390
+ }
391
+ .md-dp__nav:disabled {
392
+ opacity: 0.4;
393
+ cursor: default;
394
+ }
395
+
396
+ /* =========================================================
397
+ GRID
398
+ ========================================================= */
399
+ .md-dp__grid {
400
+ width: 100%;
401
+ border-collapse: collapse;
402
+ }
403
+ .md-dp__row {
404
+ display: flex;
405
+ }
406
+
407
+ /* =========================================================
408
+ WEEKDAY HEADER
409
+ ========================================================= */
410
+ .md-dp__headCell {
411
+ display: inline-flex;
412
+ align-items: center;
413
+ justify-content: center;
414
+ width: 32px;
415
+ height: 28px;
416
+ font-family: inherit;
417
+ font-size: 11px;
418
+ font-weight: 500;
419
+ color: var(--md-text-subtle);
420
+ }
421
+
422
+ /* =========================================================
423
+ DAY BUTTON
424
+ ========================================================= */
425
+ .md-dp__day {
426
+ display: inline-flex;
427
+ align-items: center;
428
+ justify-content: center;
429
+ width: 32px;
430
+ height: 30px;
431
+ padding: 0;
432
+ border: 0;
433
+ background: transparent;
434
+ font-family: inherit;
435
+ font-size: 12px;
436
+ color: var(--md-text);
437
+ border-radius: 0.3125rem;
438
+ cursor: pointer;
439
+ outline: none;
440
+ transition:
441
+ background 100ms ease,
442
+ color 100ms ease;
443
+ }
444
+ .md-dp__day:hover {
445
+ background: var(--md-surface-muted);
446
+ }
447
+ .md-dp__day:focus-visible {
448
+ outline: 2px solid var(--md-primary);
449
+ outline-offset: -2px;
450
+ }
451
+
452
+ /* =========================================================
453
+ SELECTED DAY
454
+ ========================================================= */
455
+ .md-dp__day[data-selected] {
456
+ background: var(--md-primary);
457
+ color: var(--md-surface);
458
+ font-weight: 600;
459
+ }
460
+ .md-dp__day[data-selected]:hover {
461
+ background: var(--md-primary);
462
+ }
463
+
464
+ /* =========================================================
465
+ TODAY
466
+ ========================================================= */
467
+ .md-dp__day[data-today]:not([data-selected]) {
468
+ font-weight: 700;
469
+ color: var(--md-primary);
470
+ }
471
+
472
+ /* =========================================================
473
+ OUTSIDE / DISABLED
474
+ ========================================================= */
475
+ .md-dp__day[data-outside-view] {
476
+ color: var(--md-border-strong);
477
+ }
478
+ .md-dp__day[data-disabled] {
479
+ color: var(--md-border-strong);
480
+
481
+ cursor: default;
482
+ }
483
+ .md-dp__day[data-disabled]:hover {
484
+ background: transparent;
485
+ }
486
+
487
+ .rules-scroll[data-v-a13d36c0] {
488
+ overflow-x: auto;
489
+ max-width: 100%;
490
+ -webkit-overflow-scrolling: touch;
491
+ }
492
+ .rules-scroll[data-v-a13d36c0]::-webkit-scrollbar {
493
+ height: 6px;
494
+ }
495
+ .rules-scroll[data-v-a13d36c0]::-webkit-scrollbar-track {
496
+ background: #f1f1f1;
497
+ border-radius: 4px;
498
+ }
499
+ .rules-scroll[data-v-a13d36c0]::-webkit-scrollbar-thumb {
500
+ background: #ccc;
501
+ border-radius: 4px;
502
+ }
503
+ .rules-scroll[data-v-a13d36c0]::-webkit-scrollbar-thumb:hover {
504
+ background: #999;
505
+ }
506
+
507
+ .toggle-btn[data-v-85d1bec5] {
508
+ display: flex;
509
+ align-items: center;
510
+ justify-content: center;
511
+ height: 28px;
512
+ border-radius: 6px;
513
+ border: 0.5px solid transparent;
514
+ cursor: pointer;
515
+ transition:
516
+ background 0.1s,
517
+ border-color 0.1s,
518
+ color 0.1s;
519
+ background: transparent;
520
+ padding: 0;
521
+ outline: none;
522
+ }
523
+ .toggle-btn[data-v-85d1bec5]:focus-visible {
524
+ box-shadow: 0 0 0 2px oklch(52.7% 0.154 150.069);
525
+ }
526
+ .toggle-btn--idle[data-v-85d1bec5] {
527
+ border-color: #e5e7eb;
528
+ color: #6b7280;
529
+ }
530
+ .toggle-btn--idle[data-v-85d1bec5]:hover {
531
+ background: #f9fafb;
532
+ border-color: #d1d5db;
533
+ }
534
+ .toggle-btn--active[data-v-85d1bec5] {
535
+ background: #eff6ff;
536
+ border-color: #05df72;
537
+ color: oklch(72.3% 0.219 149.579);
538
+ }
539
+ .toggle-btn--active[data-v-85d1bec5]:hover {
540
+ background: #dbeafe;
541
+ }
542
+
543
+ .md-btn[data-v-cc741dfc] {
544
+ display: inline-flex;
545
+ align-items: center;
546
+ justify-content: center;
547
+ gap: 0.375rem;
548
+ padding: 0.5rem 0.875rem;
549
+ font-size: 13px;
550
+ font-weight: 500;
551
+ border-radius: 0.375rem;
552
+ border: 1px solid transparent;
553
+ cursor: pointer;
554
+ transition: background-color 0.15s, border-color 0.15s, opacity 0.15s;
555
+ }
556
+ .md-btn[data-v-cc741dfc]:disabled { opacity: 0.55; cursor: not-allowed;
557
+ }
558
+ .md-btn--primary[data-v-cc741dfc] {
559
+ background: var(--md-button-primary-bg);
560
+ color: var(--md-button-primary-text);
561
+ }
562
+ .md-btn--primary[data-v-cc741dfc]:not(:disabled):hover { background: var(--md-button-primary-hover-bg);
563
+ }
564
+ .md-btn--secondary[data-v-cc741dfc] {
565
+ background: var(--md-button-secondary-bg);
566
+ color: var(--md-button-secondary-text);
567
+ border-color: var(--md-border);
568
+ }
569
+ .md-btn--secondary[data-v-cc741dfc]:not(:disabled):hover { background: var(--md-button-secondary-hover-bg);
570
+ }
571
+ .md-btn--danger[data-v-cc741dfc] { background: var(--md-danger); color: var(--md-on-danger);
572
+ }
573
+ .md-btn--danger[data-v-cc741dfc]:not(:disabled):hover { filter: brightness(0.94);
574
+ }
575
+ .md-btn--success[data-v-cc741dfc] { background: var(--md-success); color: var(--md-surface);
576
+ }
577
+
578
+ .md-dialog__overlay[data-v-0b61b47b] {
579
+ position: fixed;
580
+ inset: 0;
581
+ z-index: 9998;
582
+ display: flex;
583
+ align-items: center;
584
+ justify-content: center;
585
+ padding: 1rem;
586
+ background: rgb(0 0 0 / 0.4);
587
+ }
588
+ .md-dialog[data-v-0b61b47b] {
589
+ width: 420px;
590
+ max-width: 100%;
591
+ max-height: calc(100vh - 2rem);
592
+ display: flex;
593
+ flex-direction: column;
594
+ background: var(--md-surface);
595
+ border-radius: 0.75rem;
596
+ box-shadow: 0 20px 60px rgb(0 0 0 / 0.25);
597
+ outline: none;
598
+ }
599
+ .md-dialog__header[data-v-0b61b47b] {
600
+ display: flex;
601
+ align-items: center;
602
+ justify-content: space-between;
603
+ gap: 1rem;
604
+ padding: 1.125rem 1.25rem 0.5rem;
605
+ }
606
+ .md-dialog__header--noTitle[data-v-0b61b47b] { justify-content: flex-end;
607
+ }
608
+ .md-dialog__title[data-v-0b61b47b] { font-size: 17px; font-weight: 600; color: var(--md-text); margin: 0;
609
+ }
610
+ .md-dialog__close[data-v-0b61b47b] {
611
+ display: inline-flex;
612
+ padding: 0.25rem;
613
+ color: var(--md-text-subtle);
614
+ background: none;
615
+ border: 0;
616
+ border-radius: 0.25rem;
617
+ cursor: pointer;
618
+ }
619
+ .md-dialog__close[data-v-0b61b47b]:hover { color: var(--md-text); background: var(--md-surface-muted);
620
+ }
621
+ .md-dialog__body[data-v-0b61b47b] {
622
+ padding: 0.5rem 1.25rem 1.25rem;
623
+ overflow-y: auto;
624
+ font-size: 14px;
625
+ color: var(--md-text);
626
+ }
627
+ .md-dialog__footer[data-v-0b61b47b] {
628
+ display: flex;
629
+ justify-content: flex-end;
630
+ gap: 0.5rem;
631
+ padding: 0 1.25rem 1.25rem;
632
+ }
633
+ .md-dialog__srOnly[data-v-0b61b47b] {
634
+ position: absolute;
635
+ width: 1px; height: 1px;
636
+ padding: 0; margin: -1px;
637
+ overflow: hidden;
638
+ clip: rect(0, 0, 0, 0);
639
+ white-space: nowrap;
640
+ border: 0;
641
+ }
642
+
643
+ [data-v-4650bfba] a {
644
+ color: #2563eb;
645
+ cursor: pointer;
646
+ }
647
+ [data-v-4650bfba] a:not([style*="text-decoration"]) {
648
+ text-decoration: underline;
649
+ }
650
+ [data-v-4650bfba] a:hover {
651
+ opacity: 0.8;
652
+ }
653
+
654
+ /* Merge tag node — inline chip styling.
655
+ display:inline ensures the span is exactly as wide as its text content.
656
+ No width reservation from hidden raw-tag text since the NodeView
657
+ writes only one text node at a time. */
658
+ [data-v-4650bfba] .merge-tag-node {
659
+ display: inline;
660
+ white-space: nowrap;
661
+ vertical-align: baseline;
662
+ cursor: default;
663
+ border-radius: 3px;
664
+ padding: 0 2px;
665
+ }
666
+
667
+ /* List styles — scoped to the editor content area */
668
+ [data-v-4650bfba] li:not(:last-child) {
669
+ margin-bottom: var(--list-item-spacing, 0.25rem);
670
+ }
671
+
672
+ /* ─── Toolbar font Select sizing ─────────────────────────────────────────────
673
+ Constrain the Select to sit flush inside the toolbar row.
674
+ The trigger is kept compact (28px tall) and the overlay is widened so
675
+ long font names are readable without being clipped. */
676
+ .toolbar-font-select[data-v-4650bfba] .p-select {
677
+ height: 28px;
678
+ min-width: 110px;
679
+ max-width: 130px;
680
+ border-radius: 6px;
681
+ border-color: #d1d5db; /* gray-300 — matches other toolbar button borders */
682
+ padding: 0 6px;
683
+ font-size: 0.75rem;
684
+ display: flex;
685
+ align-items: center;
686
+ }
687
+ .toolbar-font-select[data-v-4650bfba] .p-select-label {
688
+ padding: 0;
689
+ font-size: 0.85rem;
690
+ line-height: 1;
691
+ }
692
+ .toolbar-font-select[data-v-4650bfba] .p-select-dropdown {
693
+ width: 20px;
694
+ }
695
+
696
+ /* Widen the overlay panel so long font names are not clipped */
697
+ [data-v-4650bfba] .p-select-overlay {
698
+ min-width: 180px !important;
699
+ }
700
+
701
+ .toggle-btn[data-v-23c99fda] {
702
+ display: flex;
703
+ align-items: center;
704
+ justify-content: center;
705
+ height: 28px;
706
+ border-radius: 6px;
707
+ border: 0.5px solid transparent;
708
+ cursor: pointer;
709
+ transition: background 0.1s, border-color 0.1s, color 0.1s;
710
+ background: transparent;
711
+ padding: 0;
712
+ outline: none;
713
+ }
714
+ .toggle-btn--idle[data-v-23c99fda] {
715
+ border-color: rgba(229,231,235,0.8);
716
+ color: #99a1af;
717
+ }
718
+ .toggle-btn--idle[data-v-23c99fda]:hover {
719
+ background: #f9fafb;
720
+ border-color: #d1d5db;
721
+ color: #6b7280;
722
+ }
723
+ .toggle-btn--active[data-v-23c99fda] {
724
+ background: #f0fdf4;
725
+ border-color: #4ade80;
726
+ color: #16a34a;
727
+ }
728
+ .toggle-btn--active[data-v-23c99fda]:hover {
729
+ background: #dcfce7;
730
+ }
731
+
732
+ .panel[data-v-3474739e] {
733
+ padding: 10px 12px;
734
+ background: #ffffff;
735
+ border: 0.5px solid rgba(229, 231, 235, 0.8);
736
+ border-radius: 10px;
737
+ }
738
+ .separator[data-v-3474739e] {
739
+ height: 0.5px;
740
+ background: rgba(229, 231, 235, 0.8);
741
+ margin-left: -12px;
742
+ margin-right: -12px;
743
+ }
744
+
745
+ .spinner[data-v-ddaffab7] {
746
+ width: 50px;
747
+ height: 50px;
748
+ border: 5px solid rgba(0, 0, 0, 0.2);
749
+ border-top-color: #05df72;
750
+ border-radius: 50%;
751
+ margin: 0 auto;
752
+ animation: spin-ddaffab7 1s linear infinite;
753
+ }
754
+ @keyframes spin-ddaffab7 {
755
+ to {
756
+ transform: rotate(360deg);
757
+ }
758
+ }
759
+
760
+ /* ===== DESIGN SYSTEM TOKENS ===== */
761
+ .desktop-gate[data-v-52ab9ff1] {
762
+ --brand-primary: #2463eb;
763
+ --brand-primary-dark: #1b4ec4;
764
+ --brand-primary-light: #4b82f0;
765
+ --brand-gradient-start: #2463eb;
766
+ --brand-gradient-end: #8b5cf6;
767
+ --gray-50: #f9fafb;
768
+ --gray-100: #f3f4f6;
769
+ --gray-200: #e5e7eb;
770
+ --gray-300: #d1d5db;
771
+ --gray-400: #9ca3af;
772
+ --gray-500: #6b7280;
773
+ --gray-600: #4b5563;
774
+ --gray-700: #374151;
775
+ --gray-800: #1f2937;
776
+ --gray-900: #111827;
777
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
778
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
779
+ --shadow-lg:
780
+ 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
781
+ --shadow-xl:
782
+ 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
783
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
784
+ }
785
+
786
+ /* ===== MAIN LAYOUT ===== */
787
+ .desktop-gate[data-v-52ab9ff1] {
788
+ position: fixed;
789
+ inset: 0;
790
+ z-index: 9999;
791
+ display: flex;
792
+ align-items: center;
793
+ justify-content: center;
794
+ background: linear-gradient(
795
+ 135deg,
796
+ rgba(255, 255, 255, 0.98) 0%,
797
+ rgba(249, 250, 251, 0.98) 100%
798
+ );
799
+ backdrop-filter: blur(2px);
800
+ padding: 1.5rem;
801
+ }
802
+ .gate-container[data-v-52ab9ff1] {
803
+ max-width: 520px;
804
+ width: 100%;
805
+ background: white;
806
+ border-radius: 2rem;
807
+ padding: 2.5rem;
808
+ text-align: center;
809
+ box-shadow: var(--shadow-2xl);
810
+ animation: fadeInUp-52ab9ff1 0.5s cubic-bezier(0.16, 1, 0.3, 1);
811
+ border: 1px solid var(--gray-200);
812
+ }
813
+
814
+ /* ===== BRAND BADGE ===== */
815
+ .brand-badge[data-v-52ab9ff1] {
816
+ position: relative;
817
+ width: 80px;
818
+ height: 80px;
819
+ margin: 0 auto 1.5rem;
820
+ display: flex;
821
+ align-items: center;
822
+ justify-content: center;
823
+ }
824
+ .badge-ring[data-v-52ab9ff1] {
825
+ position: absolute;
826
+ inset: 0;
827
+ border-radius: 50%;
828
+ background: linear-gradient(
829
+ 135deg,
830
+ var(--brand-gradient-start),
831
+ var(--brand-gradient-end)
832
+ );
833
+ animation: pulseRing-52ab9ff1 2s ease-out infinite;
834
+ }
835
+ .badge-icon[data-v-52ab9ff1] {
836
+ position: relative;
837
+ width: 56px;
838
+ height: 56px;
839
+ background: white;
840
+ border-radius: 50%;
841
+ display: flex;
842
+ align-items: center;
843
+ justify-content: center;
844
+ color: var(--brand-primary);
845
+ box-shadow: var(--shadow-md);
846
+ transition: transform 0.2s ease;
847
+ }
848
+ .gate-container:hover .badge-icon[data-v-52ab9ff1] {
849
+ transform: scale(1.02);
850
+ }
851
+
852
+ /* ===== TYPOGRAPHY ===== */
853
+ .gate-title[data-v-52ab9ff1] {
854
+ font-size: 1.875rem;
855
+ font-weight: 700;
856
+ letter-spacing: -0.02em;
857
+ margin: 0 0 1rem 0;
858
+ color: var(--gray-900);
859
+ }
860
+ .brand-gradient[data-v-52ab9ff1] {
861
+ background: linear-gradient(
862
+ 135deg,
863
+ var(--brand-gradient-start),
864
+ var(--brand-gradient-end)
865
+ );
866
+ background-clip: text;
867
+ -webkit-background-clip: text;
868
+ color: transparent;
869
+ }
870
+ .gate-description[data-v-52ab9ff1] {
871
+ font-size: 1rem;
872
+ line-height: 1.5;
873
+ color: var(--gray-600);
874
+ margin: 0 0 1.75rem 0;
875
+ }
876
+
877
+ /* ===== FEATURE GRID ===== */
878
+ .feature-grid[data-v-52ab9ff1] {
879
+ display: flex;
880
+ justify-content: center;
881
+ gap: 2rem;
882
+ margin-bottom: 2rem;
883
+ padding: 1rem 0;
884
+ border-top: 1px solid var(--gray-200);
885
+ border-bottom: 1px solid var(--gray-200);
886
+ }
887
+ .feature-item[data-v-52ab9ff1] {
888
+ display: flex;
889
+ flex-direction: column;
890
+ align-items: center;
891
+ gap: 0.5rem;
892
+ font-size: 0.75rem;
893
+ font-weight: 500;
894
+ color: var(--gray-700);
895
+ }
896
+ .feature-icon[data-v-52ab9ff1] {
897
+ width: 36px;
898
+ height: 36px;
899
+ background: var(--gray-100);
900
+ border-radius: 12px;
901
+ display: flex;
902
+ align-items: center;
903
+ justify-content: center;
904
+ color: var(--brand-primary);
905
+ transition: all 0.2s ease;
906
+ }
907
+ .feature-item:hover .feature-icon[data-v-52ab9ff1] {
908
+ background: var(--brand-primary);
909
+ color: white;
910
+ transform: translateY(-2px);
911
+ }
912
+
913
+ /* ===== STATUS ===== */
914
+ .detection-status[data-v-52ab9ff1] {
915
+ display: inline-flex;
916
+ align-items: center;
917
+ gap: 0.5rem;
918
+ padding: 0.5rem 1rem;
919
+ background: var(--gray-100);
920
+ border-radius: 100px;
921
+ font-size: 0.75rem;
922
+ font-weight: 500;
923
+ color: var(--gray-600);
924
+ }
925
+ .status-dot[data-v-52ab9ff1] {
926
+ width: 8px;
927
+ height: 8px;
928
+ background: #f59e0b;
929
+ border-radius: 50%;
930
+ animation: pulse-52ab9ff1 1.5s ease-out infinite;
931
+ }
932
+
933
+ /* ===== FOOTER ===== */
934
+ .gate-footer[data-v-52ab9ff1] {
935
+ margin-top: 2rem;
936
+ padding-top: 1.5rem;
937
+ display: flex;
938
+ align-items: center;
939
+ justify-content: center;
940
+ gap: 0.5rem;
941
+ font-size: 0.75rem;
942
+ color: var(--gray-400);
943
+ }
944
+ .brand-text[data-v-52ab9ff1] {
945
+ font-weight: 600;
946
+ background: linear-gradient(
947
+ 135deg,
948
+ var(--brand-gradient-start),
949
+ var(--brand-gradient-end)
950
+ );
951
+ background-clip: text;
952
+ -webkit-background-clip: text;
953
+ color: transparent;
954
+ }
955
+
956
+ /* ===== ANIMATIONS ===== */
957
+ @keyframes fadeInUp-52ab9ff1 {
958
+ from {
959
+ opacity: 0;
960
+ transform: translateY(20px);
961
+ }
962
+ to {
963
+ opacity: 1;
964
+ transform: translateY(0);
965
+ }
966
+ }
967
+ @keyframes pulseRing-52ab9ff1 {
968
+ 0% {
969
+ opacity: 1;
970
+ transform: scale(0.95);
971
+ }
972
+ 70% {
973
+ opacity: 0.4;
974
+ transform: scale(1.15);
975
+ }
976
+ 100% {
977
+ opacity: 0;
978
+ transform: scale(1.25);
979
+ }
980
+ }
981
+ @keyframes pulse-52ab9ff1 {
982
+ 0%,
983
+ 100% {
984
+ opacity: 1;
985
+ }
986
+ 50% {
987
+ opacity: 0.4;
988
+ }
989
+ }
990
+
991
+ /* ===== RESPONSIVE TOUCH-UPS ===== */
992
+ @media (max-width: 480px) {
993
+ .gate-container[data-v-52ab9ff1] {
994
+ padding: 2rem 1.5rem;
995
+ }
996
+ .gate-title[data-v-52ab9ff1] {
997
+ font-size: 1.5rem;
998
+ }
999
+ .feature-grid[data-v-52ab9ff1] {
1000
+ gap: 1.25rem;
1001
+ }
1002
+ }
1003
+
1004
+ .row-drop-bar[data-v-ec871cea] {
1005
+ position: absolute;
1006
+ left: 0;
1007
+ right: 0;
1008
+ height: 28px;
1009
+ display: flex;
1010
+ align-items: center;
1011
+ gap: 8px;
1012
+ padding: 0 16px;
1013
+ background: var(--drop-color-bg);
1014
+ border-radius: 6px;
1015
+ z-index: 20;
1016
+ pointer-events: none;
1017
+ }
1018
+ .row-drop-bar--before[data-v-ec871cea] {
1019
+ top: -14px;
1020
+ }
1021
+ .row-drop-bar--after[data-v-ec871cea] {
1022
+ bottom: -14px;
1023
+ }
1024
+ .row-drop-bar-line[data-v-ec871cea] {
1025
+ flex: 1;
1026
+ height: 2px;
1027
+ background: var(--drop-color-line);
1028
+ border-radius: 2px;
1029
+ /* animation: bar-expand 0.18s ease forwards; */
1030
+ }
1031
+
1032
+ /* @keyframes bar-expand {
1033
+ from {
1034
+ transform: scaleX(0);
1035
+ opacity: 0;
1036
+ }
1037
+ to {
1038
+ transform: scaleX(1);
1039
+ opacity: 1;
1040
+ }
1041
+ } */
1042
+ .row-drop-bar-label[data-v-ec871cea] {
1043
+ display: flex;
1044
+ align-items: center;
1045
+ gap: 6px;
1046
+ font-size: 11px;
1047
+ font-weight: 500;
1048
+ color: var(--drop-color);
1049
+ white-space: nowrap;
1050
+ padding: 4px 12px;
1051
+ background: var(--drop-color-pill-bg);
1052
+ border: 1px solid var(--drop-color-pill-border);
1053
+ border-radius: 24px;
1054
+ /* animation: label-pop 0.2s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; */
1055
+ }
1056
+
1057
+ /* @keyframes label-pop {
1058
+ from {
1059
+ transform: scale(0.8);
1060
+ opacity: 0;
1061
+ }
1062
+ to {
1063
+ transform: scale(1);
1064
+ opacity: 1;
1065
+ }
1066
+ } */
1067
+ .row-drop-bar-icon[data-v-ec871cea] {
1068
+ width: 12px;
1069
+ height: 12px;
1070
+ flex-shrink: 0;
1071
+ }
1072
+
1073
+ /* Transition */
1074
+ /* .drop-bar-enter-active {
1075
+ animation: bar-in 0.15s ease forwards;
1076
+ }
1077
+ .drop-bar-leave-active {
1078
+ transition: opacity 0.12s ease;
1079
+ }
1080
+ .drop-bar-leave-to {
1081
+ opacity: 0;
1082
+ } */
1083
+
1084
+ /* @keyframes bar-in {
1085
+ from {
1086
+ opacity: 0;
1087
+ }
1088
+ to {
1089
+ opacity: 1;
1090
+ }
1091
+ } */
1092
+
1093
+ .fade-enter-active[data-v-83e65439],
1094
+ .fade-leave-active[data-v-83e65439] {
1095
+ transition: opacity 0.1s ease;
1096
+ }
1097
+ .fade-enter-from[data-v-83e65439],
1098
+ .fade-leave-to[data-v-83e65439] {
1099
+ opacity: 0;
1100
+ }
1101
+
1102
+ /*
1103
+ * Stacking fix: CanvasRowDropZone has z-index: 9 and extends its hit-area
1104
+ * strip into adjacent rows when a layout drag is active. Without an explicit
1105
+ * stacking context on the column, that strip would catch pointer events for
1106
+ * the edges of the column — the row drop zone would win and the drop would
1107
+ * become a top-level row instead of a nested row.
1108
+ *
1109
+ * z-index: 1 creates a stacking context ABOVE the drop zone's hit strip.
1110
+ *
1111
+ * CRITICAL: When a child component is selected, we must set z-index: auto on
1112
+ * this column AND on its ancestor CanvasRow (via hasSelectedDescendant).
1113
+ * z-index: auto removes the column from the stacking context chain entirely,
1114
+ * letting the selected component's z-50 bubble up to compete at the canvas
1115
+ * root level — which is what allows the action bar and RichText toolbar to
1116
+ * paint above sibling rows. If z-index: 1 stays active, ANY z-index on a
1117
+ * child is capped within this column's own stacking context and can never
1118
+ * exceed a sibling row painted at z-index: 0 in normal flow.
1119
+ */
1120
+ .canvas-column[data-v-83e65439] {
1121
+ position: relative;
1122
+ z-index: 1;
1123
+ }
1124
+ .canvas-column.has-selected-child[data-v-83e65439] {
1125
+ z-index: auto;
1126
+ }
1127
+
1128
+ /* ── Base zone ─────────────────────────────────────────────── */
1129
+ .canvas-drop-zone[data-v-a85cd0b8] {
1130
+ position: relative;
1131
+ height: 0;
1132
+ margin: 0;
1133
+ z-index: 9;
1134
+ overflow: visible;
1135
+ transition: height 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
1136
+ }
1137
+
1138
+ /* Full expansion on hover */
1139
+ .canvas-drop-zone--active[data-v-a85cd0b8] {
1140
+ height: 52px;
1141
+ }
1142
+
1143
+ /* Empty-canvas variant — fills the whole empty area */
1144
+ .canvas-drop-zone--empty[data-v-a85cd0b8] {
1145
+ height: 100%;
1146
+ min-height: 200px;
1147
+ }
1148
+
1149
+ /* Full height variant - takes up entire parent container */
1150
+ .canvas-drop-zone--full[data-v-a85cd0b8] {
1151
+ position: absolute;
1152
+ top: 0;
1153
+ left: 0;
1154
+ right: 0;
1155
+ bottom: 0;
1156
+ height: auto;
1157
+ min-height: 100%;
1158
+ }
1159
+ .canvas-drop-zone--empty .cdz-bar[data-v-a85cd0b8] {
1160
+ inset: 12px;
1161
+ justify-content: center;
1162
+ border-radius: 12px;
1163
+ }
1164
+
1165
+ /* ── Empty state styles (when fullHeight is true) ── */
1166
+ .cdz-empty-state[data-v-a85cd0b8] {
1167
+ position: absolute;
1168
+ inset: 0;
1169
+ display: flex;
1170
+ align-items: center;
1171
+ justify-content: center;
1172
+ pointer-events: none;
1173
+ background: linear-gradient(135deg, #faf9ff 0%, #f5f3ff 100%);
1174
+ border: 2px dashed #e0e7ff;
1175
+ border-radius: 6px;
1176
+ transition: all 0.2s ease;
1177
+ }
1178
+ .canvas-drop-zone--full .cdz-empty-state[data-v-a85cd0b8] {
1179
+ animation: fade-in-a85cd0b8 0.3s ease;
1180
+ }
1181
+ @keyframes fade-in-a85cd0b8 {
1182
+ from {
1183
+ opacity: 0;
1184
+ transform: scale(0.98);
1185
+ }
1186
+ to {
1187
+ opacity: 1;
1188
+ transform: scale(1);
1189
+ }
1190
+ }
1191
+ .cdz-empty-content[data-v-a85cd0b8] {
1192
+ text-align: center;
1193
+ padding: 2rem;
1194
+ }
1195
+ .cdz-empty-icon[data-v-a85cd0b8] {
1196
+ width: 48px;
1197
+ height: 48px;
1198
+ margin: 0 auto 12px;
1199
+ color: #94a3b8;
1200
+ stroke-width: 1.5;
1201
+ }
1202
+ .cdz-empty-title[data-v-a85cd0b8] {
1203
+ font-size: 1.125rem;
1204
+ font-weight: 500;
1205
+ color: #02bb4c;
1206
+ margin-bottom: 8px;
1207
+ letter-spacing: -0.01em;
1208
+ }
1209
+ .cdz-empty-subtitle[data-v-a85cd0b8] {
1210
+ font-size: 0.875rem;
1211
+ color: #94a3b8;
1212
+ line-height: 1.4;
1213
+ }
1214
+
1215
+ /* ── Invisible hit-area ─────────────────────────────────────
1216
+ * Previously this bled 12px into the rows above and below with pointer-events
1217
+ * all during a layout drag. That meant dragging a LayoutTab row would hit this
1218
+ * strip when the cursor was merely near a column's top/bottom edge, and
1219
+ * insert a top-level row instead of a nested row.
1220
+ *
1221
+ * FIX: Shrink the bleed to a small value (−4px) so the strip only covers the
1222
+ * natural visible gap between rows. Columns retain ownership of their rendered
1223
+ * area. Combined with CanvasColumn's new z-index: 1 stacking context, the
1224
+ * column reliably wins for pointer hits inside its body, while the thin gap
1225
+ * between rows still belongs to this drop zone.
1226
+ *
1227
+ * When fully expanded (canvas-drop-zone--active: 52px tall) the zone's own
1228
+ * height covers the hit area naturally, so bleed here is not needed for the
1229
+ * "snap into a big target" UX — that comes from the zone's own expanded size.
1230
+ */
1231
+ .cdz-hit-area[data-v-a85cd0b8] {
1232
+ position: absolute;
1233
+ left: 0;
1234
+ right: 0;
1235
+ top: -4px;
1236
+ bottom: -4px;
1237
+ z-index: 1;
1238
+ /* Only catchable during a layout drag; invisible + inert otherwise */
1239
+ pointer-events: none;
1240
+ }
1241
+ .canvas-drop-zone--receptive .cdz-hit-area[data-v-a85cd0b8] {
1242
+ pointer-events: all;
1243
+ }
1244
+
1245
+ /* Hide empty state when dragging */
1246
+ .canvas-drop-zone--full.canvas-drop-zone--receptive .cdz-empty-state[data-v-a85cd0b8],
1247
+ .canvas-drop-zone--full.canvas-drop-zone--active .cdz-empty-state[data-v-a85cd0b8] {
1248
+ opacity: 0.5;
1249
+ background: rgba(139, 92, 246, 0.04);
1250
+ }
1251
+
1252
+ /* ── Ghost line (receptive but not hovered) ─────────────────── */
1253
+ .cdz-ghost-line[data-v-a85cd0b8] {
1254
+ position: absolute;
1255
+ left: 0;
1256
+ right: 0;
1257
+ top: 50%;
1258
+ height: 2px;
1259
+ transform: translateY(-50%);
1260
+ background: repeating-linear-gradient(
1261
+ 90deg,
1262
+ rgba(139, 92, 246, 0.25) 0px,
1263
+ rgba(139, 92, 246, 0.25) 6px,
1264
+ transparent 6px,
1265
+ transparent 12px
1266
+ );
1267
+ border-radius: 2px;
1268
+ pointer-events: none;
1269
+ animation: ghost-pulse-a85cd0b8 2s ease-in-out infinite;
1270
+ }
1271
+ @keyframes ghost-pulse-a85cd0b8 {
1272
+ 0%, 100% { opacity: 0.5;
1273
+ }
1274
+ 50% { opacity: 1;
1275
+ }
1276
+ }
1277
+
1278
+ /* ── Active bar ─────────────────────────────────────────────── */
1279
+ .cdz-bar[data-v-a85cd0b8] {
1280
+ position: absolute;
1281
+ inset: 4px 0;
1282
+ display: flex;
1283
+ align-items: center;
1284
+ gap: 10px;
1285
+ padding: 0 20px;
1286
+ background: rgba(139, 92, 246, 0.06);
1287
+ border-radius: 8px;
1288
+ border: 1.5px dashed rgba(139, 92, 246, 0.35);
1289
+ pointer-events: none; /* let drag events fall through to the parent drop zone */
1290
+ }
1291
+ .cdz-line[data-v-a85cd0b8] {
1292
+ flex: 1;
1293
+ height: 2px;
1294
+ background: linear-gradient(
1295
+ 90deg,
1296
+ transparent,
1297
+ rgba(139, 92, 246, 0.6),
1298
+ rgba(139, 92, 246, 0.8),
1299
+ rgba(139, 92, 246, 0.6),
1300
+ transparent
1301
+ );
1302
+ border-radius: 2px;
1303
+ animation: line-expand-a85cd0b8 0.2s ease forwards;
1304
+ transform-origin: center;
1305
+ }
1306
+ @keyframes line-expand-a85cd0b8 {
1307
+ from { transform: scaleX(0); opacity: 0;
1308
+ }
1309
+ to { transform: scaleX(1); opacity: 1;
1310
+ }
1311
+ }
1312
+ .cdz-pill[data-v-a85cd0b8] {
1313
+ display: flex;
1314
+ align-items: center;
1315
+ gap: 5px;
1316
+ font-size: 11px;
1317
+ font-weight: 600;
1318
+ color: #7c3aed;
1319
+ letter-spacing: 0.01em;
1320
+ white-space: nowrap;
1321
+ padding: 5px 14px;
1322
+ background: rgba(139, 92, 246, 0.08);
1323
+ border: 1.5px solid rgba(139, 92, 246, 0.35);
1324
+ border-radius: 100px;
1325
+ box-shadow: 0 2px 8px rgba(139, 92, 246, 0.15);
1326
+ animation: pill-pop-a85cd0b8 0.22s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
1327
+ }
1328
+ @keyframes pill-pop-a85cd0b8 {
1329
+ from { transform: scale(0.75); opacity: 0;
1330
+ }
1331
+ to { transform: scale(1); opacity: 1;
1332
+ }
1333
+ }
1334
+ .cdz-icon[data-v-a85cd0b8] {
1335
+ width: 13px;
1336
+ height: 13px;
1337
+ flex-shrink: 0;
1338
+ }
1339
+
1340
+ /* ── Transition ─────────────────────────────────────────────── */
1341
+ .cdz-bar-enter-active[data-v-a85cd0b8] { animation: cdz-in-a85cd0b8 0.15s ease forwards;
1342
+ }
1343
+ .cdz-bar-leave-active[data-v-a85cd0b8] { transition: opacity 0.1s ease;
1344
+ }
1345
+ .cdz-bar-leave-to[data-v-a85cd0b8] { opacity: 0;
1346
+ }
1347
+ @keyframes cdz-in-a85cd0b8 {
1348
+ from { opacity: 0; transform: scaleY(0.6);
1349
+ }
1350
+ to { opacity: 1; transform: scaleY(1);
1351
+ }
1352
+ }
1353
+
1354
+ .drop-line-enter-active[data-v-bbf19b57] {
1355
+ transition: opacity 80ms ease, transform 80ms ease;
1356
+ }
1357
+ .drop-line-leave-active[data-v-bbf19b57] {
1358
+ transition: opacity 60ms ease, transform 60ms ease;
1359
+ }
1360
+ .drop-line-enter-from[data-v-bbf19b57],
1361
+ .drop-line-leave-to[data-v-bbf19b57] {
1362
+ opacity: 0;
1363
+ transform: scaleX(0.6);
1364
+ transform-origin: left center;
1365
+ }
1366
+
1367
+ .slide-enter-active[data-v-0b0e946e],
1368
+ .slide-leave-active[data-v-0b0e946e] {
1369
+ transition: all 0.2s ease;
1370
+ max-height: 500px;
1371
+ overflow: hidden;
1372
+ }
1373
+ .slide-enter-from[data-v-0b0e946e],
1374
+ .slide-leave-to[data-v-0b0e946e] {
1375
+ opacity: 0;
1376
+ max-height: 0;
1377
+ transform: translateY(-10px);
1378
+ }
1379
+
1380
+ /* ============================================================
1381
+ md-dropdown – suggestion list
1382
+ ============================================================ */
1383
+ .md-dropdown[data-v-c497f9f6] {
1384
+ position: absolute;
1385
+ top: 100%;
1386
+ left: 0;
1387
+ right: 0;
1388
+ margin-top: 4px;
1389
+ background: var(--md-surface);
1390
+ border: 1px solid var(--md-border);
1391
+ border-radius: 0.375rem;
1392
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
1393
+ z-index: 10;
1394
+ max-height: 12rem;
1395
+ overflow-y: auto;
1396
+ }
1397
+ .md-dropdown-item[data-v-c497f9f6] {
1398
+ padding: 0.5rem 0.75rem;
1399
+ cursor: pointer;
1400
+ color: var(--md-text);
1401
+ transition: background 0.1s;
1402
+ }
1403
+ .md-dropdown-item[data-v-c497f9f6]:hover {
1404
+ background: var(--md-surface-hover);
1405
+ }
1406
+ .md-dropdown-item--active[data-v-c497f9f6] {
1407
+ background: var(--md-primary);
1408
+ color: #fff;
1409
+ }
1410
+
1411
+ /* ============================================================
1412
+ md-tag – selected tag pills
1413
+ ============================================================ */
1414
+ .md-tag[data-v-c497f9f6] {
1415
+ display: inline-flex;
1416
+ align-items: center;
1417
+ padding: 0.125rem 0.75rem;
1418
+ border-radius: 9999px;
1419
+ font-size: 0.875rem;
1420
+ font-weight: 500;
1421
+ background: var(--md-primary);
1422
+ color: #fff;
1423
+ line-height: 1.5;
1424
+ }
1425
+ .md-tag-remove[data-v-c497f9f6] {
1426
+ margin-left: 0.5rem;
1427
+ display: inline-flex;
1428
+ align-items: center;
1429
+ justify-content: center;
1430
+ width: 1rem;
1431
+ height: 1rem;
1432
+ border: none;
1433
+ background: transparent;
1434
+ color: rgba(255, 255, 255, 0.8);
1435
+ cursor: pointer;
1436
+ border-radius: 9999px;
1437
+ transition:
1438
+ background 0.15s,
1439
+ color 0.15s;
1440
+ padding: 0;
1441
+ }
1442
+ .md-tag-remove[data-v-c497f9f6]:hover {
1443
+ background: rgba(255, 255, 255, 0.2);
1444
+ color: #fff;
1445
+ }
1446
+ .md-tag-remove svg[data-v-c497f9f6] {
1447
+ width: 100%;
1448
+ height: 100%;
1449
+ }
1450
+
1451
+ /* ============================================================
1452
+ Scrollbar styling for dropdown (optional, keeps it clean)
1453
+ ============================================================ */
1454
+ .md-dropdown[data-v-c497f9f6]::-webkit-scrollbar {
1455
+ width: 4px;
1456
+ }
1457
+ .md-dropdown[data-v-c497f9f6]::-webkit-scrollbar-track {
1458
+ background: transparent;
1459
+ }
1460
+ .md-dropdown[data-v-c497f9f6]::-webkit-scrollbar-thumb {
1461
+ background: var(--md-border);
1462
+ border-radius: 8px;
1463
+ }
1464
+ .md-dropdown[data-v-c497f9f6]::-webkit-scrollbar-thumb:hover {
1465
+ background: var(--md-text-subtle);
1466
+ }
1467
+
1468
+ .overflow-x-auto[data-v-2de6cff1] {
1469
+ max-width: 100%;
1470
+ -webkit-overflow-scrolling: touch;
1471
+ }
1472
+ .overflow-x-auto[data-v-2de6cff1]::-webkit-scrollbar {
1473
+ height: 6px;
1474
+ }
1475
+ .overflow-x-auto[data-v-2de6cff1]::-webkit-scrollbar-track {
1476
+ background: #f1f1f1;
1477
+ border-radius: 4px;
1478
+ }
1479
+ .overflow-x-auto[data-v-2de6cff1]::-webkit-scrollbar-thumb {
1480
+ background: #ccc;
1481
+ border-radius: 4px;
1482
+ }
1483
+ .overflow-x-auto[data-v-2de6cff1]::-webkit-scrollbar-thumb:hover {
1484
+ background: #999;
1485
+ }
1486
+
1487
+ .overflow-x-auto[data-v-60af6f59] {
1488
+ max-width: 100%;
1489
+ -webkit-overflow-scrolling: touch;
1490
+ }
1491
+ .overflow-x-auto[data-v-60af6f59]::-webkit-scrollbar {
1492
+ height: 6px;
1493
+ }
1494
+ .overflow-x-auto[data-v-60af6f59]::-webkit-scrollbar-track {
1495
+ background: #f1f1f1;
1496
+ border-radius: 4px;
1497
+ }
1498
+ .overflow-x-auto[data-v-60af6f59]::-webkit-scrollbar-thumb {
1499
+ background: #ccc;
1500
+ border-radius: 4px;
1501
+ }
1502
+ .overflow-x-auto[data-v-60af6f59]::-webkit-scrollbar-thumb:hover {
1503
+ background: #999;
1504
+ }
1505
+
1506
+ .panel-slide-enter-active[data-v-87974adb],
1507
+ .panel-slide-leave-active[data-v-87974adb] {
1508
+ transition:
1509
+ opacity 0.18s ease,
1510
+ transform 0.18s ease;
1511
+ }
1512
+ .panel-slide-enter-from[data-v-87974adb],
1513
+ .panel-slide-leave-to[data-v-87974adb] {
1514
+ opacity: 0;
1515
+ transform: translateX(-10px);
1516
+ }
1517
+
1518
+ /* Filter pill fade */
1519
+ .fade-enter-active[data-v-87974adb],
1520
+ .fade-leave-active[data-v-87974adb] {
1521
+ transition:
1522
+ opacity 0.15s ease,
1523
+ transform 0.15s ease;
1524
+ }
1525
+ .fade-enter-from[data-v-87974adb],
1526
+ .fade-leave-to[data-v-87974adb] {
1527
+ opacity: 0;
1528
+ transform: translateY(-4px);
1529
+ }
1530
+
1531
+ /* Smooth row list reorder/filter transitions */
1532
+ .row-list-enter-active[data-v-87974adb],
1533
+ .row-list-leave-active[data-v-87974adb] {
1534
+ transition:
1535
+ opacity 0.2s ease,
1536
+ transform 0.2s ease;
1537
+ }
1538
+ .row-list-enter-from[data-v-87974adb],
1539
+ .row-list-leave-to[data-v-87974adb] {
1540
+ opacity: 0;
1541
+ transform: translateY(6px);
1542
+ }
1543
+ .row-list-move[data-v-87974adb] {
1544
+ transition: transform 0.2s ease;
1545
+ }
1546
+
1547
+ /* Scrollbar — thin, unobtrusive */
1548
+ .overflow-y-auto[data-v-87974adb]::-webkit-scrollbar {
1549
+ width: 6px;
1550
+ }
1551
+ .overflow-y-auto[data-v-87974adb]::-webkit-scrollbar-track {
1552
+ background: transparent;
1553
+ }
1554
+ .overflow-y-auto[data-v-87974adb]::-webkit-scrollbar-thumb {
1555
+ background: #6a7282;
1556
+ border-radius: 9999px;
1557
+ }
1558
+ .overflow-y-auto[data-v-87974adb]::-webkit-scrollbar-thumb:hover {
1559
+ background: #364153;
1560
+ }
1561
+
1562
+ .panel-slide-enter-active[data-v-4f9c7f2a],
1563
+ .panel-slide-leave-active[data-v-4f9c7f2a] {
1564
+ transition:
1565
+ opacity 0.18s ease,
1566
+ transform 0.18s ease;
1567
+ }
1568
+ .panel-slide-enter-from[data-v-4f9c7f2a],
1569
+ .panel-slide-leave-to[data-v-4f9c7f2a] {
1570
+ opacity: 0;
1571
+ transform: translateX(-10px);
1572
+ }
1573
+ .row-list-enter-active[data-v-4f9c7f2a],
1574
+ .row-list-leave-active[data-v-4f9c7f2a] {
1575
+ transition:
1576
+ opacity 0.2s ease,
1577
+ transform 0.2s ease;
1578
+ }
1579
+ .row-list-enter-from[data-v-4f9c7f2a],
1580
+ .row-list-leave-to[data-v-4f9c7f2a] {
1581
+ opacity: 0;
1582
+ transform: translateY(6px);
1583
+ }
1584
+ .row-list-move[data-v-4f9c7f2a] {
1585
+ transition: transform 0.2s ease;
1586
+ }
1587
+
1588
+ /* Scrollbar — thin, unobtrusive. Matches SavedRowsPanel. */
1589
+ .overflow-y-auto[data-v-4f9c7f2a]::-webkit-scrollbar { width: 6px;
1590
+ }
1591
+ .overflow-y-auto[data-v-4f9c7f2a]::-webkit-scrollbar-track { background: transparent;
1592
+ }
1593
+ .overflow-y-auto[data-v-4f9c7f2a]::-webkit-scrollbar-thumb { background: #6a7282; border-radius: 9999px;
1594
+ }
1595
+ .overflow-y-auto[data-v-4f9c7f2a]::-webkit-scrollbar-thumb:hover { background: #364153;
1596
+ }
1597
+
1598
+ .md-toast__region[data-v-7583ad77] {
1599
+ position: fixed;
1600
+ top: 1rem;
1601
+ right: 1rem;
1602
+ z-index: 9999;
1603
+ display: flex;
1604
+ flex-direction: column;
1605
+ gap: 0.5rem;
1606
+ pointer-events: none;
1607
+ }
1608
+ .md-toast[data-v-7583ad77] {
1609
+ pointer-events: auto;
1610
+ display: flex;
1611
+ align-items: flex-start;
1612
+ gap: 0.625rem;
1613
+ min-width: 280px;
1614
+ max-width: 380px;
1615
+ padding: 0.75rem 0.875rem;
1616
+ font-size: 13px;
1617
+ border: 1px solid;
1618
+ border-radius: 0.75rem;
1619
+ box-shadow: 0 8px 30px rgb(0 0 0 / 0.12);
1620
+ }
1621
+ .md-toast__icon[data-v-7583ad77] { font-size: 15px; flex-shrink: 0; margin-top: 0.0625rem;
1622
+ }
1623
+ .md-toast__body[data-v-7583ad77] { flex: 1; min-width: 0;
1624
+ }
1625
+ .md-toast__summary[data-v-7583ad77] { font-weight: 500;
1626
+ }
1627
+ .md-toast__detail[data-v-7583ad77] { font-size: 12px; opacity: 0.8; margin-top: 0.125rem;
1628
+ }
1629
+ .md-toast__close[data-v-7583ad77] { flex-shrink: 0; opacity: 0.5; background: none; border: 0; cursor: pointer; color: inherit;
1630
+ }
1631
+ .md-toast__close[data-v-7583ad77]:hover { opacity: 1;
1632
+ }
1633
+ .md-toast--success[data-v-7583ad77] { background: var(--md-success-bg); border-color: var(--md-success-border); color: var(--md-success-fg);
1634
+ }
1635
+ .md-toast--info[data-v-7583ad77] { background: var(--md-info-bg); border-color: var(--md-info-border); color: var(--md-info-fg);
1636
+ }
1637
+ .md-toast--warn[data-v-7583ad77] { background: var(--md-surface)beb; border-color: var(--md-warning-border); color: var(--md-warning-fg);
1638
+ }
1639
+ .md-toast--error[data-v-7583ad77] { background: var(--md-danger-bg); border-color: var(--md-danger-border); color: var(--md-danger-fg);
1640
+ }
1641
+ .md-toast-enter-active[data-v-7583ad77], .md-toast-leave-active[data-v-7583ad77] { transition: all 0.2s ease;
1642
+ }
1643
+ .md-toast-enter-from[data-v-7583ad77], .md-toast-leave-to[data-v-7583ad77] { opacity: 0; transform: translateX(20px);
1644
+ }
1645
+
1646
+ .md-confirm__body[data-v-43b7e283] { display: flex; align-items: flex-start; gap: 0.75rem;
1647
+ }
1648
+ .md-confirm__icon[data-v-43b7e283] { font-size: 22px; color: var(--md-warning); flex-shrink: 0; margin-top: 0.125rem;
1649
+ }
1650
+ .md-confirm__message[data-v-43b7e283] { margin: 0; font-size: 14px; line-height: 1.5; color: var(--md-text);
1651
+ }
1652
+
1653
+ /* ── Orb ──────────────────────────────────────────────────────────────────── */
1654
+ .health-orb[data-v-0521087e] {
1655
+ position: relative;
1656
+ display: flex;
1657
+ align-items: center;
1658
+ justify-content: center;
1659
+ width: 24px;
1660
+ height: 24px;
1661
+ border-radius: 50%;
1662
+ border: none;
1663
+ background: transparent;
1664
+ cursor: pointer;
1665
+ padding: 0;
1666
+ outline: none;
1667
+ flex-shrink: 0;
1668
+ }
1669
+ .health-orb:focus-visible .orb-core[data-v-0521087e] {
1670
+ box-shadow: 0 0 0 3px rgba(66, 56, 158, 0.4);
1671
+ }
1672
+
1673
+ /* Pulse rings */
1674
+ .orb-ring[data-v-0521087e] {
1675
+ position: absolute;
1676
+ border-radius: 50%;
1677
+ animation: orb-pulse-0521087e 2.4s ease-out infinite;
1678
+ }
1679
+ .orb-ring--outer[data-v-0521087e] {
1680
+ width: 22px;
1681
+ height: 22px;
1682
+ animation-delay: 0s;
1683
+ }
1684
+ .orb-ring--inner[data-v-0521087e] {
1685
+ width: 16px;
1686
+ height: 16px;
1687
+ animation-delay: 0.6s;
1688
+ }
1689
+
1690
+ /* Core */
1691
+ .orb-core[data-v-0521087e] {
1692
+ position: relative;
1693
+ width: 10px;
1694
+ height: 10px;
1695
+ border-radius: 50%;
1696
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
1697
+ z-index: 1;
1698
+ }
1699
+ .health-orb:hover .orb-core[data-v-0521087e],
1700
+ .health-orb--active .orb-core[data-v-0521087e] {
1701
+ transform: scale(1.15);
1702
+ }
1703
+
1704
+ /* ── Status colours with brand accent ───────────────────────────────────────── */
1705
+ .health-orb--good .orb-ring[data-v-0521087e] {
1706
+ background: rgba(34, 197, 94, 0.25);
1707
+ }
1708
+ .health-orb--good .orb-core[data-v-0521087e] {
1709
+ background: #22c55e;
1710
+ box-shadow: 0 0 0 2px rgba(34, 197, 94, 0.2), 0 0 8px rgba(34, 197, 94, 0.4);
1711
+ }
1712
+ .health-orb--warn .orb-ring[data-v-0521087e] {
1713
+ background: rgba(245, 158, 11, 0.28);
1714
+ }
1715
+ .health-orb--warn .orb-core[data-v-0521087e] {
1716
+ background: #f59e0b;
1717
+ box-shadow: 0 0 0 2px rgba(245, 158, 11, 0.2), 0 0 8px rgba(245, 158, 11, 0.4);
1718
+ }
1719
+ .health-orb--bad .orb-ring[data-v-0521087e] {
1720
+ background: rgba(239, 68, 68, 0.28);
1721
+ }
1722
+ .health-orb--bad .orb-core[data-v-0521087e] {
1723
+ background: #ef4444;
1724
+ box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.2), 0 0 8px rgba(239, 68, 68, 0.4);
1725
+ }
1726
+ @keyframes orb-pulse-0521087e {
1727
+ 0% { transform: scale(0.6); opacity: 0.7;
1728
+ }
1729
+ 60% { transform: scale(1.6); opacity: 0;
1730
+ }
1731
+ 100% { transform: scale(1.6); opacity: 0;
1732
+ }
1733
+ }
1734
+
1735
+ /* ── Panel ────────────────────────────────────────────────────────────────── */
1736
+ .health-panel[data-v-0521087e] {
1737
+ position: absolute;
1738
+ top: calc(100% + 10px);
1739
+ left: 50%;
1740
+ transform: translateX(-50%);
1741
+ width: 300px;
1742
+ background: #18181b;
1743
+ border: 1px solid rgba(255, 255, 255, 0.08);
1744
+ border-radius: 14px;
1745
+ padding: 12px;
1746
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5), 0 4px 12px rgba(0, 0, 0, 0.3);
1747
+ z-index: 9999;
1748
+ display: flex;
1749
+ flex-direction: column;
1750
+ gap: 8px;
1751
+ /* Smooth horizontal expansion */
1752
+ transition: width 0.25s cubic-bezier(0.4, 0, 0.2, 1);
1753
+ }
1754
+ .health-panel--expanded[data-v-0521087e] {
1755
+ width: 400px;
1756
+ }
1757
+
1758
+ /* When expanded, stat grid uses 3 cols instead of 2 */
1759
+ .health-panel--expanded .detail-stats[data-v-0521087e] {
1760
+ grid-template-columns: repeat(3, 1fr);
1761
+ }
1762
+
1763
+ /* When expanded, accessibility list gets more vertical room */
1764
+ .health-panel--expanded .a11y-list[data-v-0521087e] {
1765
+ max-height: 320px;
1766
+ }
1767
+
1768
+ /* When expanded, format rows go side-by-side */
1769
+ .health-panel--expanded .format-note[data-v-0521087e] {
1770
+ display: grid;
1771
+ grid-template-columns: repeat(3, 1fr);
1772
+ gap: 6px;
1773
+ }
1774
+ .health-panel--expanded .format-row[data-v-0521087e] {
1775
+ flex-direction: column;
1776
+ align-items: flex-start;
1777
+ gap: 4px;
1778
+ }
1779
+
1780
+ /* ── Panel header with brand color ─────────────────────────────────────────── */
1781
+ .panel-header[data-v-0521087e] {
1782
+ display: flex;
1783
+ align-items: center;
1784
+ justify-content: space-between;
1785
+ padding: 0 2px 4px;
1786
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
1787
+ }
1788
+ .panel-header-right[data-v-0521087e] {
1789
+ display: flex;
1790
+ align-items: center;
1791
+ gap: 6px;
1792
+ }
1793
+
1794
+ /* Expand toggle button */
1795
+ .panel-expand-btn[data-v-0521087e] {
1796
+ display: flex;
1797
+ align-items: center;
1798
+ justify-content: center;
1799
+ width: 22px;
1800
+ height: 22px;
1801
+ border-radius: 6px;
1802
+ border: 1px solid rgba(255, 255, 255, 0.08);
1803
+ background: rgba(255, 255, 255, 0.04);
1804
+ color: rgba(255, 255, 255, 0.35);
1805
+ cursor: pointer;
1806
+ transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
1807
+ flex-shrink: 0;
1808
+ padding: 0;
1809
+ }
1810
+ .panel-expand-btn[data-v-0521087e]:hover {
1811
+ background: rgba(66, 56, 158, 0.18);
1812
+ border-color: rgba(66, 56, 158, 0.4);
1813
+ color: #a5b4fc;
1814
+ }
1815
+ .panel-expand-btn[data-v-0521087e]:focus-visible {
1816
+ outline: 2px solid rgba(66, 56, 158, 0.5);
1817
+ outline-offset: 1px;
1818
+ }
1819
+ .panel-expand-btn--active[data-v-0521087e] {
1820
+ background: rgba(66, 56, 158, 0.2);
1821
+ border-color: rgba(66, 56, 158, 0.45);
1822
+ color: #a5b4fc;
1823
+ }
1824
+ .panel-title[data-v-0521087e] {
1825
+ font-size: 11px;
1826
+ font-weight: 600;
1827
+ letter-spacing: 0.06em;
1828
+ text-transform: uppercase;
1829
+ color: #a5b4fc;
1830
+ }
1831
+ .panel-status-badge[data-v-0521087e] {
1832
+ font-size: 10px;
1833
+ font-weight: 600;
1834
+ padding: 2px 8px;
1835
+ border-radius: 99px;
1836
+ }
1837
+ .status-badge--good[data-v-0521087e] { background: rgba(34, 197, 94, 0.15); color: #4ade80;
1838
+ }
1839
+ .status-badge--warn[data-v-0521087e] { background: rgba(245, 158, 11, 0.15); color: #fbbf24;
1840
+ }
1841
+ .status-badge--bad[data-v-0521087e] { background: rgba(239, 68, 68, 0.15); color: #f87171;
1842
+ }
1843
+
1844
+ /* ── Metric cards ─────────────────────────────────────────────────────────── */
1845
+ .metric-card[data-v-0521087e] {
1846
+ border-radius: 10px;
1847
+ border: 1px solid rgba(255, 255, 255, 0.06);
1848
+ background: rgba(255, 255, 255, 0.04);
1849
+ cursor: pointer;
1850
+ transition: background 0.15s ease, border-color 0.15s ease;
1851
+ overflow: hidden;
1852
+ user-select: none;
1853
+ }
1854
+ .metric-card[data-v-0521087e]:hover {
1855
+ background: rgba(66, 56, 158, 0.1);
1856
+ border-color: rgba(66, 56, 158, 0.3);
1857
+ }
1858
+ .metric-card[data-v-0521087e]:focus-visible {
1859
+ outline: 2px solid rgba(66, 56, 158, 0.5);
1860
+ outline-offset: 2px;
1861
+ }
1862
+ .metric-card--good[data-v-0521087e] { border-color: rgba(34, 197, 94, 0.15);
1863
+ }
1864
+ .metric-card--warn[data-v-0521087e] { border-color: rgba(245, 158, 11, 0.15);
1865
+ }
1866
+ .metric-card--bad[data-v-0521087e] { border-color: rgba(239, 68, 68, 0.2);
1867
+ }
1868
+ .metric-card--good.metric-card--expanded[data-v-0521087e] { background: rgba(34, 197, 94, 0.05);
1869
+ }
1870
+ .metric-card--warn.metric-card--expanded[data-v-0521087e] { background: rgba(245, 158, 11, 0.05);
1871
+ }
1872
+ .metric-card--bad.metric-card--expanded[data-v-0521087e] { background: rgba(239, 68, 68, 0.06);
1873
+ }
1874
+
1875
+ /* ── Summary row ──────────────────────────────────────────────────────────── */
1876
+ .metric-summary[data-v-0521087e] {
1877
+ display: flex;
1878
+ align-items: center;
1879
+ justify-content: space-between;
1880
+ padding: 9px 10px;
1881
+ gap: 8px;
1882
+ }
1883
+ .metric-left[data-v-0521087e] {
1884
+ display: flex;
1885
+ align-items: center;
1886
+ gap: 7px;
1887
+ min-width: 0;
1888
+ }
1889
+ .metric-icon[data-v-0521087e] {
1890
+ display: flex;
1891
+ align-items: center;
1892
+ opacity: 0.8;
1893
+ flex-shrink: 0;
1894
+ }
1895
+ .metric-label[data-v-0521087e] {
1896
+ font-size: 11.5px;
1897
+ font-weight: 500;
1898
+ color: rgba(255, 255, 255, 0.7);
1899
+ white-space: nowrap;
1900
+ }
1901
+ .metric-right[data-v-0521087e] {
1902
+ display: flex;
1903
+ align-items: center;
1904
+ gap: 6px;
1905
+ flex-shrink: 0;
1906
+ }
1907
+
1908
+ /* Mini bar */
1909
+ .mini-bar[data-v-0521087e] {
1910
+ width: 36px;
1911
+ height: 4px;
1912
+ border-radius: 99px;
1913
+ background: rgba(255, 255, 255, 0.1);
1914
+ overflow: hidden;
1915
+ }
1916
+ .mini-bar-fill[data-v-0521087e] {
1917
+ height: 100%;
1918
+ border-radius: 99px;
1919
+ transition: width 0.5s ease;
1920
+ }
1921
+ .mini-bar-fill--good[data-v-0521087e] { background: #22c55e;
1922
+ }
1923
+ .mini-bar-fill--warn[data-v-0521087e] { background: #f59e0b;
1924
+ }
1925
+ .mini-bar-fill--bad[data-v-0521087e] { background: #ef4444;
1926
+ }
1927
+
1928
+ /* Status dot */
1929
+ .status-dot[data-v-0521087e] {
1930
+ width: 6px;
1931
+ height: 6px;
1932
+ border-radius: 50%;
1933
+ flex-shrink: 0;
1934
+ }
1935
+ .status-dot--good[data-v-0521087e] { background: #22c55e;
1936
+ }
1937
+ .status-dot--warn[data-v-0521087e] { background: #f59e0b;
1938
+ }
1939
+ .status-dot--bad[data-v-0521087e] { background: #ef4444;
1940
+ }
1941
+
1942
+ /* Pulsing dot for bad status */
1943
+ .pulse-dot[data-v-0521087e] {
1944
+ position: relative;
1945
+ width: 6px;
1946
+ height: 6px;
1947
+ flex-shrink: 0;
1948
+ }
1949
+ .pulse-dot[data-v-0521087e]::before,
1950
+ .pulse-dot[data-v-0521087e]::after {
1951
+ content: '';
1952
+ position: absolute;
1953
+ inset: 0;
1954
+ border-radius: 50%;
1955
+ }
1956
+ .pulse-dot--bad[data-v-0521087e]::before { background: #ef4444; z-index: 1;
1957
+ }
1958
+ .pulse-dot--bad[data-v-0521087e]::after { background: #ef4444; animation: dot-ping-0521087e 1.5s ease-out infinite;
1959
+ }
1960
+ @keyframes dot-ping-0521087e {
1961
+ 0% { transform: scale(1); opacity: 0.75;
1962
+ }
1963
+ 100% { transform: scale(2.5); opacity: 0;
1964
+ }
1965
+ }
1966
+ .metric-value[data-v-0521087e] {
1967
+ font-size: 11.5px;
1968
+ font-weight: 600;
1969
+ font-variant-numeric: tabular-nums;
1970
+ }
1971
+ .metric-value--good[data-v-0521087e] { color: #4ade80;
1972
+ }
1973
+ .metric-value--warn[data-v-0521087e] { color: #fbbf24;
1974
+ }
1975
+ .metric-value--bad[data-v-0521087e] { color: #f87171;
1976
+ }
1977
+
1978
+ /* Chevron */
1979
+ .chevron[data-v-0521087e] {
1980
+ color: rgba(255, 255, 255, 0.3);
1981
+ transition: transform 0.2s ease, color 0.15s ease;
1982
+ flex-shrink: 0;
1983
+ }
1984
+ .chevron--open[data-v-0521087e] { transform: rotate(180deg); color: rgba(255, 255, 255, 0.6);
1985
+ }
1986
+ .metric-card:hover .chevron[data-v-0521087e] { color: rgba(255, 255, 255, 0.5);
1987
+ }
1988
+
1989
+ /* ── Expanded detail ──────────────────────────────────────────────────────── */
1990
+ .metric-detail[data-v-0521087e] {
1991
+ padding: 0 10px 10px;
1992
+ display: flex;
1993
+ flex-direction: column;
1994
+ gap: 8px;
1995
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
1996
+ }
1997
+ .detail-tip[data-v-0521087e] {
1998
+ font-size: 11px;
1999
+ line-height: 1.55;
2000
+ color: rgba(255, 255, 255, 0.55);
2001
+ margin: 6px 0 0;
2002
+ }
2003
+
2004
+ /* Stats grid */
2005
+ .detail-stats[data-v-0521087e] {
2006
+ display: grid;
2007
+ grid-template-columns: 1fr 1fr;
2008
+ gap: 4px 12px;
2009
+ }
2010
+ .stat-item[data-v-0521087e] {
2011
+ display: flex;
2012
+ justify-content: space-between;
2013
+ align-items: baseline;
2014
+ gap: 6px;
2015
+ }
2016
+ .stat-label[data-v-0521087e] {
2017
+ font-size: 10.5px;
2018
+ color: rgba(255, 255, 255, 0.35);
2019
+ white-space: nowrap;
2020
+ }
2021
+ .stat-value[data-v-0521087e] {
2022
+ font-size: 11px;
2023
+ font-weight: 600;
2024
+ color: rgba(255, 255, 255, 0.75);
2025
+ font-variant-numeric: tabular-nums;
2026
+ }
2027
+
2028
+ /* Thresholds */
2029
+ .detail-thresholds[data-v-0521087e] {
2030
+ display: flex;
2031
+ flex-wrap: wrap;
2032
+ gap: 4px;
2033
+ padding-top: 4px;
2034
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
2035
+ }
2036
+ .threshold[data-v-0521087e] {
2037
+ font-size: 10px;
2038
+ font-weight: 500;
2039
+ padding: 2px 7px;
2040
+ border-radius: 99px;
2041
+ }
2042
+ .threshold--good[data-v-0521087e] { background: rgba(34, 197, 94, 0.12); color: #4ade80;
2043
+ }
2044
+ .threshold--warn[data-v-0521087e] { background: rgba(245, 158, 11, 0.12); color: #fbbf24;
2045
+ }
2046
+ .threshold--bad[data-v-0521087e] { background: rgba(239, 68, 68, 0.12); color: #f87171;
2047
+ }
2048
+
2049
+ /* ── Format note (KB card) ────────────────────────────────────────────────── */
2050
+ .format-note[data-v-0521087e] {
2051
+ display: flex;
2052
+ flex-direction: column;
2053
+ gap: 5px;
2054
+ background: rgba(0, 0, 0, 0.2);
2055
+ border-radius: 8px;
2056
+ padding: 8px;
2057
+ }
2058
+ .format-row[data-v-0521087e] {
2059
+ display: flex;
2060
+ align-items: flex-start;
2061
+ gap: 8px;
2062
+ }
2063
+ .format-badge[data-v-0521087e] {
2064
+ font-size: 9.5px;
2065
+ font-weight: 700;
2066
+ letter-spacing: 0.05em;
2067
+ padding: 2px 6px;
2068
+ border-radius: 4px;
2069
+ flex-shrink: 0;
2070
+ margin-top: 1px;
2071
+ background: rgba(66, 56, 158, 0.3);
2072
+ color: #a5b4fc;
2073
+ }
2074
+ .format-badge--muted[data-v-0521087e] {
2075
+ background: rgba(255, 255, 255, 0.07);
2076
+ color: rgba(255, 255, 255, 0.35);
2077
+ }
2078
+ .format-info[data-v-0521087e] {
2079
+ display: flex;
2080
+ flex-direction: column;
2081
+ gap: 2px;
2082
+ min-width: 0;
2083
+ }
2084
+ .format-range[data-v-0521087e] {
2085
+ font-size: 11px;
2086
+ font-weight: 600;
2087
+ color: rgba(255, 255, 255, 0.8);
2088
+ }
2089
+ .format-range--muted[data-v-0521087e] {
2090
+ color: rgba(255, 255, 255, 0.35);
2091
+ font-weight: 500;
2092
+ }
2093
+ .format-caveat[data-v-0521087e] {
2094
+ font-size: 10px;
2095
+ line-height: 1.4;
2096
+ color: rgba(255, 255, 255, 0.35);
2097
+ }
2098
+
2099
+ /* ── Accessibility card ───────────────────────────────────────────────────── */
2100
+ .a11y-detail[data-v-0521087e] {
2101
+ cursor: default;
2102
+ padding: 8px 10px 10px;
2103
+ gap: 10px;
2104
+ }
2105
+
2106
+ /* Tabs */
2107
+ .a11y-tabs[data-v-0521087e] {
2108
+ display: grid;
2109
+ grid-template-columns: repeat(3, 1fr);
2110
+ gap: 4px;
2111
+ background: rgba(0, 0, 0, 0.25);
2112
+ padding: 3px;
2113
+ border-radius: 8px;
2114
+ }
2115
+ .a11y-tab[data-v-0521087e] {
2116
+ display: flex;
2117
+ align-items: center;
2118
+ justify-content: center;
2119
+ gap: 6px;
2120
+ padding: 6px 4px;
2121
+ background: transparent;
2122
+ border: none;
2123
+ border-radius: 6px;
2124
+ cursor: pointer;
2125
+ font-family: inherit;
2126
+ font-size: 10.5px;
2127
+ font-weight: 600;
2128
+ letter-spacing: 0.02em;
2129
+ color: rgba(255, 255, 255, 0.45);
2130
+ transition: background 0.15s ease, color 0.15s ease;
2131
+ }
2132
+ .a11y-tab[data-v-0521087e]:hover {
2133
+ color: rgba(255, 255, 255, 0.75);
2134
+ background: rgba(255, 255, 255, 0.04);
2135
+ }
2136
+ .a11y-tab[data-v-0521087e]:focus-visible {
2137
+ outline: 2px solid rgba(66, 56, 158, 0.5);
2138
+ outline-offset: 1px;
2139
+ }
2140
+ .a11y-tab--active[data-v-0521087e] {
2141
+ background: rgba(255, 255, 255, 0.07);
2142
+ color: rgba(255, 255, 255, 0.92);
2143
+ }
2144
+ .a11y-tab-label[data-v-0521087e] {
2145
+ text-transform: uppercase;
2146
+ }
2147
+ .a11y-tab-count[data-v-0521087e] {
2148
+ display: inline-flex;
2149
+ align-items: center;
2150
+ justify-content: center;
2151
+ min-width: 18px;
2152
+ height: 16px;
2153
+ padding: 0 5px;
2154
+ border-radius: 99px;
2155
+ font-size: 10px;
2156
+ font-weight: 700;
2157
+ font-variant-numeric: tabular-nums;
2158
+ line-height: 1;
2159
+ }
2160
+ .a11y-tab-count--failed[data-v-0521087e] { background: rgba(239, 68, 68, 0.18); color: #f87171;
2161
+ }
2162
+ .a11y-tab-count--passed[data-v-0521087e] { background: rgba(34, 197, 94, 0.18); color: #4ade80;
2163
+ }
2164
+ .a11y-tab-count--ignored[data-v-0521087e] { background: rgba(255, 255, 255, 0.08); color: rgba(255, 255, 255, 0.5);
2165
+ }
2166
+
2167
+ /* List */
2168
+ .a11y-list[data-v-0521087e] {
2169
+ display: flex;
2170
+ flex-direction: column;
2171
+ gap: 6px;
2172
+ max-height: 240px;
2173
+ overflow-y: auto;
2174
+ /* Custom thin scrollbar */
2175
+ scrollbar-width: thin;
2176
+ scrollbar-color: rgba(255, 255, 255, 0.12) transparent;
2177
+ }
2178
+ .a11y-list[data-v-0521087e]::-webkit-scrollbar {
2179
+ width: 6px;
2180
+ }
2181
+ .a11y-list[data-v-0521087e]::-webkit-scrollbar-track {
2182
+ background: transparent;
2183
+ }
2184
+ .a11y-list[data-v-0521087e]::-webkit-scrollbar-thumb {
2185
+ background: rgba(255, 255, 255, 0.12);
2186
+ border-radius: 99px;
2187
+ }
2188
+ .a11y-empty[data-v-0521087e] {
2189
+ font-size: 11px;
2190
+ color: rgba(255, 255, 255, 0.4);
2191
+ text-align: center;
2192
+ padding: 12px 4px;
2193
+ margin: 0;
2194
+ }
2195
+ .a11y-item[data-v-0521087e] {
2196
+ display: flex;
2197
+ flex-direction: column;
2198
+ gap: 4px;
2199
+ padding: 8px;
2200
+ border-radius: 8px;
2201
+ background: rgba(255, 255, 255, 0.03);
2202
+ border-left: 2px solid transparent;
2203
+ }
2204
+ .a11y-item--critical[data-v-0521087e] { border-left-color: #ef4444;
2205
+ }
2206
+ .a11y-item--serious[data-v-0521087e] { border-left-color: #f59e0b;
2207
+ }
2208
+ .a11y-item--passed[data-v-0521087e] { border-left-color: rgba(34, 197, 94, 0.5);
2209
+ }
2210
+ .a11y-item--ignored[data-v-0521087e] { border-left-color: rgba(255, 255, 255, 0.18); opacity: 0.75;
2211
+ }
2212
+ .a11y-item-header[data-v-0521087e] {
2213
+ display: flex;
2214
+ align-items: center;
2215
+ gap: 6px;
2216
+ }
2217
+ .a11y-severity[data-v-0521087e] {
2218
+ display: inline-flex;
2219
+ align-items: center;
2220
+ font-size: 9px;
2221
+ font-weight: 700;
2222
+ text-transform: uppercase;
2223
+ letter-spacing: 0.05em;
2224
+ padding: 2px 6px;
2225
+ border-radius: 4px;
2226
+ flex-shrink: 0;
2227
+ }
2228
+ .a11y-severity--critical[data-v-0521087e] { background: rgba(239, 68, 68, 0.18); color: #f87171;
2229
+ }
2230
+ .a11y-severity--serious[data-v-0521087e] { background: rgba(245, 158, 11, 0.18); color: #fbbf24;
2231
+ }
2232
+ .a11y-severity--passed[data-v-0521087e] { background: rgba(34, 197, 94, 0.18); color: #4ade80;
2233
+ }
2234
+ .a11y-severity--ignored[data-v-0521087e] { background: rgba(255, 255, 255, 0.07); color: rgba(255, 255, 255, 0.5);
2235
+ }
2236
+ .a11y-rule[data-v-0521087e] {
2237
+ font-size: 11px;
2238
+ font-weight: 600;
2239
+ color: rgba(255, 255, 255, 0.85);
2240
+ flex: 1;
2241
+ min-width: 0;
2242
+ white-space: nowrap;
2243
+ overflow: hidden;
2244
+ text-overflow: ellipsis;
2245
+ }
2246
+ .a11y-action[data-v-0521087e] {
2247
+ background: transparent;
2248
+ border: 1px solid rgba(255, 255, 255, 0.1);
2249
+ border-radius: 4px;
2250
+ padding: 2px 7px;
2251
+ font-family: inherit;
2252
+ font-size: 9.5px;
2253
+ font-weight: 600;
2254
+ color: rgba(255, 255, 255, 0.5);
2255
+ cursor: pointer;
2256
+ transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
2257
+ flex-shrink: 0;
2258
+ }
2259
+ .a11y-action[data-v-0521087e]:hover {
2260
+ background: rgba(255, 255, 255, 0.06);
2261
+ color: rgba(255, 255, 255, 0.85);
2262
+ border-color: rgba(255, 255, 255, 0.2);
2263
+ }
2264
+ .a11y-action[data-v-0521087e]:focus-visible {
2265
+ outline: 2px solid rgba(66, 56, 158, 0.5);
2266
+ outline-offset: 1px;
2267
+ }
2268
+ .a11y-action--restore[data-v-0521087e] {
2269
+ border-color: rgba(165, 180, 252, 0.25);
2270
+ color: #a5b4fc;
2271
+ }
2272
+ .a11y-action--restore[data-v-0521087e]:hover {
2273
+ background: rgba(66, 56, 158, 0.15);
2274
+ border-color: rgba(165, 180, 252, 0.4);
2275
+ color: #c7d2fe;
2276
+ }
2277
+ .a11y-message[data-v-0521087e] {
2278
+ font-size: 10.5px;
2279
+ line-height: 1.5;
2280
+ color: rgba(255, 255, 255, 0.65);
2281
+ margin: 0;
2282
+ }
2283
+ .a11y-info[data-v-0521087e] {
2284
+ font-size: 10px;
2285
+ line-height: 1.5;
2286
+ color: rgba(255, 255, 255, 0.38);
2287
+ margin: 0;
2288
+ padding-top: 2px;
2289
+ border-top: 1px dashed rgba(255, 255, 255, 0.06);
2290
+ }
2291
+
2292
+ /* ── Panel footer ─────────────────────────────────────────────────────────── */
2293
+ .panel-footer[data-v-0521087e] {
2294
+ font-size: 10px;
2295
+ color: rgba(255, 255, 255, 0.22);
2296
+ text-align: center;
2297
+ padding-top: 4px;
2298
+ margin: 0;
2299
+ }
2300
+
2301
+ /* ── Click-outside overlay ────────────────────────────────────────────────── */
2302
+ .click-outside[data-v-0521087e] {
2303
+ position: fixed;
2304
+ inset: 0;
2305
+ z-index: 9998;
2306
+ }
2307
+
2308
+ /* ── Transitions ──────────────────────────────────────────────────────────── */
2309
+ .popover-enter-active[data-v-0521087e] {
2310
+ transition: opacity 0.18s ease, transform 0.18s cubic-bezier(0.34, 1.56, 0.64, 1);
2311
+ }
2312
+ .popover-leave-active[data-v-0521087e] {
2313
+ transition: opacity 0.12s ease, transform 0.12s ease;
2314
+ }
2315
+ .popover-enter-from[data-v-0521087e] {
2316
+ opacity: 0;
2317
+ transform: translateX(-50%) translateY(-6px) scale(0.97);
2318
+ }
2319
+ .popover-leave-to[data-v-0521087e] {
2320
+ opacity: 0;
2321
+ transform: translateX(-50%) translateY(-4px) scale(0.98);
2322
+ }
2323
+ .expand-enter-active[data-v-0521087e] {
2324
+ transition: opacity 0.18s ease, max-height 0.22s ease;
2325
+ max-height: 300px;
2326
+ overflow: hidden;
2327
+ }
2328
+ .expand-leave-active[data-v-0521087e] {
2329
+ transition: opacity 0.12s ease, max-height 0.18s ease;
2330
+ overflow: hidden;
2331
+ }
2332
+ .expand-enter-from[data-v-0521087e] {
2333
+ opacity: 0;
2334
+ max-height: 0;
2335
+ }
2336
+ .expand-leave-to[data-v-0521087e] {
2337
+ opacity: 0;
2338
+ max-height: 0;
2339
+ }
2340
+
2341
+ .picker-overlay-enter-active[data-v-a19c20aa],
2342
+ .picker-overlay-leave-active[data-v-a19c20aa] {
2343
+ transition: opacity 0.2s ease;
2344
+ }
2345
+ .picker-overlay-enter-from[data-v-a19c20aa],
2346
+ .picker-overlay-leave-to[data-v-a19c20aa] {
2347
+ opacity: 0;
2348
+ }
2349
+ .picker-drawer-enter-active[data-v-a19c20aa],
2350
+ .picker-drawer-leave-active[data-v-a19c20aa] {
2351
+ transition: transform 0.28s cubic-bezier(0.32, 0.72, 0, 1);
2352
+ }
2353
+ .picker-drawer-enter-from[data-v-a19c20aa],
2354
+ .picker-drawer-leave-to[data-v-a19c20aa] {
2355
+ transform: translateX(100%);
2356
+ }
2357
+
2358
+ .note-enter-active[data-v-0b957c88],
2359
+ .note-leave-active[data-v-0b957c88] {
2360
+ transition: opacity 0.2s ease, max-height 0.25s ease;
2361
+ max-height: 60px;
2362
+ overflow: hidden;
2363
+ }
2364
+ .note-enter-from[data-v-0b957c88],
2365
+ .note-leave-to[data-v-0b957c88] {
2366
+ opacity: 0;
2367
+ max-height: 0;
2368
+ }
2369
+
2370
+ .md-msg[data-v-db5ba171] {
2371
+ display: flex;
2372
+ align-items: flex-start;
2373
+ gap: 0.5rem;
2374
+ padding: 0.625rem 0.75rem;
2375
+ font-size: 13px;
2376
+ border: 1px solid;
2377
+ border-radius: 0.5rem;
2378
+ }
2379
+ .md-msg__icon[data-v-db5ba171] { margin-top: 0.125rem; flex-shrink: 0; font-size: 14px;
2380
+ }
2381
+ .md-msg__body[data-v-db5ba171] { flex: 1; min-width: 0;
2382
+ }
2383
+ .md-msg__close[data-v-db5ba171] { opacity: 0.6; cursor: pointer; background: none; border: 0;
2384
+ }
2385
+ .md-msg__close[data-v-db5ba171]:hover { opacity: 1;
2386
+ }
2387
+ .md-msg--info[data-v-db5ba171] { background: var(--md-info-bg); border-color: var(--md-info-border); color: var(--md-info-fg);
2388
+ }
2389
+ .md-msg--success[data-v-db5ba171] { background: var(--md-success-bg); border-color: var(--md-success-border); color: var(--md-success-fg);
2390
+ }
2391
+ .md-msg--warn[data-v-db5ba171] { background: var(--md-surface)beb; border-color: var(--md-warning-border); color: var(--md-warning-fg);
2392
+ }
2393
+ .md-msg--error[data-v-db5ba171] { background: var(--md-danger-bg); border-color: var(--md-danger-border); color: var(--md-danger-fg);
2394
+ }
2395
+
2396
+ /* Auto-save pill: fade + 4px vertical drift on enter/leave */
2397
+ .autosave-fade-enter-active[data-v-d422c2b4],
2398
+ .autosave-fade-leave-active[data-v-d422c2b4] {
2399
+ transition:
2400
+ opacity 0.2s ease,
2401
+ transform 0.2s ease;
2402
+ }
2403
+ .autosave-fade-enter-from[data-v-d422c2b4] {
2404
+ opacity: 0;
2405
+ transform: translateY(4px);
2406
+ }
2407
+ .autosave-fade-leave-to[data-v-d422c2b4] {
2408
+ opacity: 0;
2409
+ transform: translateY(-4px);
2410
+ }
2411
+ /*$vite$:1*/