@composy/layout-vue 0.0.1

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 (109) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/LICENSE +21 -0
  3. package/README.md +75 -0
  4. package/dist/index.css +2383 -0
  5. package/dist/index.js +2665 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/index.min.css +1 -0
  8. package/dist/index.min.js +1 -0
  9. package/es/components/LGrid.d.ts +3 -0
  10. package/es/components/LGrid.d.ts.map +1 -0
  11. package/es/components/LGrid.js +91 -0
  12. package/es/components/LGrid.js.map +1 -0
  13. package/es/components/LGridItem.d.ts +52 -0
  14. package/es/components/LGridItem.d.ts.map +1 -0
  15. package/es/components/LGridItem.js +52 -0
  16. package/es/components/LGridItem.js.map +1 -0
  17. package/es/components/LLayoutEditor.d.ts +49 -0
  18. package/es/components/LLayoutEditor.d.ts.map +1 -0
  19. package/es/components/LLayoutEditor.js +81 -0
  20. package/es/components/LLayoutEditor.js.map +1 -0
  21. package/es/components/LLayoutWorkspace.js +17 -0
  22. package/es/components/LLayoutWorkspace.js.map +1 -0
  23. package/es/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.js +2217 -0
  24. package/es/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.js.map +1 -0
  25. package/es/components/LMaterialDragSource.d.ts +55 -0
  26. package/es/components/LMaterialDragSource.d.ts.map +1 -0
  27. package/es/components/LMaterialDragSource.js +92 -0
  28. package/es/components/LMaterialDragSource.js.map +1 -0
  29. package/es/components/LMaterialRenderer.d.ts +63 -0
  30. package/es/components/LMaterialRenderer.d.ts.map +1 -0
  31. package/es/components/LMaterialRenderer.js +48 -0
  32. package/es/components/LMaterialRenderer.js.map +1 -0
  33. package/es/components/LMetricCard.d.ts +29 -0
  34. package/es/components/LMetricCard.d.ts.map +1 -0
  35. package/es/components/LMetricCard.js +39 -0
  36. package/es/components/LMetricCard.js.map +1 -0
  37. package/es/components/LTrendCard.d.ts +17 -0
  38. package/es/components/LTrendCard.d.ts.map +1 -0
  39. package/es/components/LTrendCard.js +36 -0
  40. package/es/components/LTrendCard.js.map +1 -0
  41. package/es/components/index.d.ts +10 -0
  42. package/es/components/index.d.ts.map +1 -0
  43. package/es/components/index.js +19 -0
  44. package/es/components/material-renderer.d.ts +26 -0
  45. package/es/components/material-renderer.d.ts.map +1 -0
  46. package/es/components/material-renderer.js +96 -0
  47. package/es/components/material-renderer.js.map +1 -0
  48. package/es/composables/index.d.ts +2 -0
  49. package/es/composables/index.d.ts.map +1 -0
  50. package/es/composables/index.js +12 -0
  51. package/es/composables/useLayoutEditor.d.ts +3 -0
  52. package/es/composables/useLayoutEditor.d.ts.map +1 -0
  53. package/es/composables/useLayoutEditor.js +22 -0
  54. package/es/composables/useLayoutEditor.js.map +1 -0
  55. package/es/index.d.ts +7 -0
  56. package/es/index.d.ts.map +1 -0
  57. package/es/index.js +22 -0
  58. package/es/style/css.js +1 -0
  59. package/es/style/index.js +1 -0
  60. package/es/style/index.less +1 -0
  61. package/es/style/workspace.css +2370 -0
  62. package/es/types.d.ts +26 -0
  63. package/es/types.d.ts.map +1 -0
  64. package/es/types.js +10 -0
  65. package/lib/components/LGrid.cjs +92 -0
  66. package/lib/components/LGrid.cjs.map +1 -0
  67. package/lib/components/LGrid.d.ts +3 -0
  68. package/lib/components/LGridItem.cjs +53 -0
  69. package/lib/components/LGridItem.cjs.map +1 -0
  70. package/lib/components/LGridItem.d.ts +52 -0
  71. package/lib/components/LLayoutEditor.cjs +82 -0
  72. package/lib/components/LLayoutEditor.cjs.map +1 -0
  73. package/lib/components/LLayoutEditor.d.ts +49 -0
  74. package/lib/components/LLayoutWorkspace.cjs +21 -0
  75. package/lib/components/LLayoutWorkspace.cjs.map +1 -0
  76. package/lib/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.cjs +2217 -0
  77. package/lib/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.cjs.map +1 -0
  78. package/lib/components/LMaterialDragSource.cjs +93 -0
  79. package/lib/components/LMaterialDragSource.cjs.map +1 -0
  80. package/lib/components/LMaterialDragSource.d.ts +55 -0
  81. package/lib/components/LMaterialRenderer.cjs +49 -0
  82. package/lib/components/LMaterialRenderer.cjs.map +1 -0
  83. package/lib/components/LMaterialRenderer.d.ts +63 -0
  84. package/lib/components/LMetricCard.cjs +40 -0
  85. package/lib/components/LMetricCard.cjs.map +1 -0
  86. package/lib/components/LMetricCard.d.ts +29 -0
  87. package/lib/components/LTrendCard.cjs +37 -0
  88. package/lib/components/LTrendCard.cjs.map +1 -0
  89. package/lib/components/LTrendCard.d.ts +17 -0
  90. package/lib/components/index.cjs +27 -0
  91. package/lib/components/index.d.ts +10 -0
  92. package/lib/components/material-renderer.cjs +99 -0
  93. package/lib/components/material-renderer.cjs.map +1 -0
  94. package/lib/components/material-renderer.d.ts +26 -0
  95. package/lib/composables/index.cjs +13 -0
  96. package/lib/composables/index.d.ts +2 -0
  97. package/lib/composables/useLayoutEditor.cjs +23 -0
  98. package/lib/composables/useLayoutEditor.cjs.map +1 -0
  99. package/lib/composables/useLayoutEditor.d.ts +3 -0
  100. package/lib/index.cjs +29 -0
  101. package/lib/index.d.ts +7 -0
  102. package/lib/package.json +3 -0
  103. package/lib/style/css.js +1 -0
  104. package/lib/style/index.css +2 -0
  105. package/lib/style/index.js +1 -0
  106. package/lib/style/workspace.css +2378 -0
  107. package/lib/types.cjs +11 -0
  108. package/lib/types.d.ts +26 -0
  109. package/package.json +117 -0
@@ -0,0 +1,2370 @@
1
+ :root {
2
+ color: #172033;
3
+ background: #eef2f7;
4
+ font-family: Inter, "Segoe UI", "Microsoft YaHei", sans-serif;
5
+ font-synthesis: none;
6
+ }
7
+
8
+ * {
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ html,
13
+ body,
14
+ #app {
15
+ width: 100%;
16
+ height: 100%;
17
+ margin: 0;
18
+ overflow: hidden;
19
+ }
20
+
21
+ body {
22
+ min-width: 0;
23
+ }
24
+
25
+ button {
26
+ font: inherit;
27
+ }
28
+
29
+ button:focus-visible {
30
+ outline: 2px solid #5b7cfa;
31
+ outline-offset: 2px;
32
+ }
33
+
34
+ .layout-demo {
35
+ --ink: #172033;
36
+ --muted: #768198;
37
+ --line: #dce3ed;
38
+ --line-strong: #c7d1df;
39
+ --panel: #fff;
40
+ --canvas: #f5f7fb;
41
+ --topbar: rgb(255 255 255 / 92%);
42
+ --stage: #fff;
43
+ --stage-header: rgb(250 251 255 / 88%);
44
+ --card: #fff;
45
+ --card-line: #d8def0;
46
+ --checker-a: #e7e9ed;
47
+ --checker-b: #f8f9fb;
48
+ --accent: #536df1;
49
+ --accent-soft: #eef0ff;
50
+ --shadow: 0 16px 40px rgb(36 52 82 / 8%);
51
+ width: 100%;
52
+ height: 100%;
53
+ min-width: 0;
54
+ min-height: 0;
55
+ display: grid;
56
+ grid-template-rows: 82px minmax(0, 1fr);
57
+ overflow: hidden;
58
+ background: var(--canvas);
59
+ color: var(--ink);
60
+ }
61
+
62
+ .topbar {
63
+ min-width: 0;
64
+ min-height: 0;
65
+ position: relative;
66
+ z-index: 60;
67
+ padding: 10px 18px;
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: space-between;
71
+ gap: 20px;
72
+ overflow: visible;
73
+ background: var(--topbar);
74
+ border-bottom: 1px solid var(--line);
75
+ box-shadow: 0 1px 0 rgb(255 255 255 / 80%);
76
+ }
77
+
78
+ .brand,
79
+ .actions,
80
+ .route-tabs,
81
+ .route-tabs button,
82
+ .mode-button,
83
+ .material-source,
84
+ .breakpoint-button {
85
+ display: flex;
86
+ align-items: center;
87
+ }
88
+
89
+ .brand {
90
+ min-width: 150px;
91
+ gap: 10px;
92
+ }
93
+
94
+ .brand-copy {
95
+ min-width: 0;
96
+ display: grid;
97
+ gap: 2px;
98
+ }
99
+
100
+ .brand-copy strong {
101
+ color: var(--ink);
102
+ font-size: 14px;
103
+ line-height: 1.1;
104
+ white-space: nowrap;
105
+ }
106
+
107
+ .brand-copy span {
108
+ color: var(--muted);
109
+ font-size: 10px;
110
+ white-space: nowrap;
111
+ }
112
+
113
+ .topbar-center {
114
+ min-width: 0;
115
+ display: flex;
116
+ align-items: center;
117
+ gap: 10px;
118
+ overflow-x: auto;
119
+ scrollbar-width: none;
120
+ }
121
+
122
+ .topbar-center__shell {
123
+ min-width: max-content;
124
+ padding: 4px 6px;
125
+ display: flex;
126
+ align-items: center;
127
+ gap: 8px;
128
+ border: 1px solid var(--line);
129
+ border-radius: 14px;
130
+ background: color-mix(in srgb, var(--panel) 86%, #f0f3fa);
131
+ box-shadow: 0 5px 18px rgb(49 68 104 / 6%);
132
+ }
133
+
134
+ .topbar-center__section {
135
+ display: flex;
136
+ align-items: center;
137
+ gap: 7px;
138
+ }
139
+
140
+ .workspace-mode,
141
+ .device-select {
142
+ min-height: 34px;
143
+ display: inline-flex;
144
+ align-items: center;
145
+ gap: 7px;
146
+ padding: 0 10px;
147
+ border: 1px solid transparent;
148
+ border-radius: 9px;
149
+ color: var(--muted);
150
+ }
151
+
152
+ .workspace-mode {
153
+ color: var(--accent);
154
+ font-size: 12px;
155
+ font-weight: 700;
156
+ white-space: nowrap;
157
+ }
158
+
159
+ .development-mode {
160
+ position: relative;
161
+ min-width: 124px;
162
+ min-height: 36px;
163
+ border: 1px solid var(--line);
164
+ border-radius: 10px;
165
+ background: color-mix(in srgb, var(--panel) 86%, #eef1f7);
166
+ color: var(--ink);
167
+ box-shadow: 0 4px 12px rgb(49 68 104 / 5%);
168
+ }
169
+
170
+ .development-mode:hover,
171
+ .development-mode.is-open {
172
+ border-color: var(--accent);
173
+ background: var(--panel);
174
+ color: var(--accent);
175
+ box-shadow: 0 0 0 3px rgb(88 105 241 / 10%);
176
+ }
177
+
178
+ .development-mode .custom-select__trigger {
179
+ min-width: 122px;
180
+ min-height: 34px;
181
+ font-size: 11px;
182
+ font-weight: 700;
183
+ }
184
+
185
+ .development-mode__menu {
186
+ min-width: 226px;
187
+ right: 0;
188
+ left: auto;
189
+ }
190
+
191
+ .development-mode__menu .custom-select__option {
192
+ min-height: 44px;
193
+ }
194
+
195
+ .development-mode__menu .custom-select__option > span {
196
+ min-width: 0;
197
+ display: grid;
198
+ gap: 2px;
199
+ }
200
+
201
+ .development-mode__menu strong {
202
+ color: inherit;
203
+ font-size: 11px;
204
+ font-weight: 700;
205
+ }
206
+
207
+ .development-mode__menu small {
208
+ color: var(--muted);
209
+ font-size: 9px;
210
+ line-height: 1.2;
211
+ }
212
+
213
+ .workspace-mode__hint {
214
+ padding-left: 7px;
215
+ border-left: 1px solid var(--line);
216
+ color: var(--muted);
217
+ font-size: 10px;
218
+ font-weight: 500;
219
+ }
220
+
221
+ .device-select {
222
+ position: relative;
223
+ padding: 0;
224
+ background: color-mix(in srgb, var(--panel) 72%, #eef1f7);
225
+ }
226
+
227
+ .device-select:hover,
228
+ .device-select.is-open {
229
+ border-color: var(--line);
230
+ background: var(--panel);
231
+ color: var(--ink);
232
+ }
233
+
234
+ .custom-select__trigger {
235
+ min-height: 32px;
236
+ display: inline-flex;
237
+ align-items: center;
238
+ gap: 7px;
239
+ min-width: 104px;
240
+ padding: 0 9px;
241
+ border: 0;
242
+ border-radius: inherit;
243
+ background: transparent;
244
+ color: inherit;
245
+ cursor: pointer;
246
+ font-size: 11px;
247
+ text-align: left;
248
+ }
249
+
250
+ .custom-select__trigger svg:last-child {
251
+ margin-left: auto;
252
+ transition: transform 140ms ease;
253
+ }
254
+
255
+ .custom-select.is-open .custom-select__trigger svg:last-child {
256
+ transform: rotate(180deg);
257
+ }
258
+
259
+ .custom-select__menu {
260
+ position: absolute;
261
+ z-index: 40;
262
+ top: calc(100% + 7px);
263
+ left: 0;
264
+ min-width: 154px;
265
+ padding: 5px;
266
+ display: grid;
267
+ gap: 2px;
268
+ border: 1px solid var(--line);
269
+ border-radius: 11px;
270
+ background: var(--panel);
271
+ box-shadow: 0 14px 32px rgb(37 53 91 / 16%);
272
+ animation: select-menu-in 140ms ease-out;
273
+ }
274
+
275
+ .custom-select__option {
276
+ min-height: 31px;
277
+ display: flex;
278
+ align-items: center;
279
+ gap: 7px;
280
+ padding: 0 8px;
281
+ border: 0;
282
+ border-radius: 7px;
283
+ background: transparent;
284
+ color: var(--muted);
285
+ cursor: pointer;
286
+ font-size: 11px;
287
+ text-align: left;
288
+ }
289
+
290
+ .custom-select__option:hover,
291
+ .custom-select__option[aria-selected="true"] {
292
+ background: var(--accent-soft);
293
+ color: var(--accent);
294
+ }
295
+
296
+ .custom-select__option-meta {
297
+ margin-left: auto;
298
+ color: var(--muted);
299
+ font-size: 9px;
300
+ }
301
+
302
+ @keyframes select-menu-in {
303
+ from {
304
+ opacity: 0;
305
+ transform: translateY(-4px) scale(0.98);
306
+ }
307
+ to {
308
+ opacity: 1;
309
+ transform: translateY(0) scale(1);
310
+ }
311
+ }
312
+
313
+ .orientation-button {
314
+ width: 30px;
315
+ height: 30px;
316
+ display: grid;
317
+ place-items: center;
318
+ border: 1px solid transparent;
319
+ border-radius: 8px;
320
+ background: color-mix(in srgb, var(--panel) 72%, #eef1f7);
321
+ color: var(--muted);
322
+ cursor: pointer;
323
+ transition: 140ms ease;
324
+ }
325
+
326
+ .orientation-button:hover,
327
+ .orientation-button[aria-pressed="true"] {
328
+ border-color: var(--line);
329
+ background: var(--panel);
330
+ color: var(--accent);
331
+ }
332
+
333
+ .topbar-center__label {
334
+ padding: 0 2px 0 4px;
335
+ color: var(--muted);
336
+ font-size: 10px;
337
+ font-weight: 700;
338
+ letter-spacing: 0.08em;
339
+ white-space: nowrap;
340
+ }
341
+
342
+ .topbar-center__divider {
343
+ width: 1px;
344
+ height: 24px;
345
+ background: var(--line);
346
+ }
347
+
348
+ .topbar-center::-webkit-scrollbar {
349
+ display: none;
350
+ }
351
+
352
+ .brand-mark {
353
+ width: 34px;
354
+ height: 34px;
355
+ display: grid;
356
+ place-items: center;
357
+ flex: 0 0 auto;
358
+ border-radius: 11px;
359
+ background: linear-gradient(145deg, #5f74f6, #8495ff);
360
+ color: #fff;
361
+ font-size: 18px;
362
+ font-weight: 800;
363
+ box-shadow: 0 8px 18px rgb(83 109 241 / 25%);
364
+ }
365
+
366
+ .brand-mark svg,
367
+ .route-icon,
368
+ .actions svg,
369
+ .material-icon svg,
370
+ .material-add svg,
371
+ .breakpoint-icon svg,
372
+ .panel-tip > svg,
373
+ .inspector-icon svg {
374
+ display: block;
375
+ flex: 0 0 auto;
376
+ }
377
+
378
+ .brand strong,
379
+ .brand span {
380
+ display: block;
381
+ }
382
+
383
+ .brand strong {
384
+ font-size: 14px;
385
+ letter-spacing: 0.01em;
386
+ }
387
+
388
+ .brand div > span {
389
+ margin-top: 3px;
390
+ color: var(--muted);
391
+ font-size: 11px;
392
+ }
393
+
394
+ .actions {
395
+ min-width: 0;
396
+ gap: 6px;
397
+ overflow-x: auto;
398
+ overflow-y: hidden;
399
+ scrollbar-width: thin;
400
+ scrollbar-gutter: stable;
401
+ }
402
+
403
+ .route-tabs {
404
+ flex: 0 0 auto;
405
+ gap: 2px;
406
+ padding: 2px;
407
+ border-radius: 9px;
408
+ background: color-mix(in srgb, var(--panel) 72%, #eef1f7);
409
+ }
410
+
411
+ .breakpoint-tabs {
412
+ flex: 0 0 auto;
413
+ display: flex;
414
+ align-items: center;
415
+ gap: 2px;
416
+ padding: 2px;
417
+ border-radius: 9px;
418
+ background: color-mix(in srgb, var(--panel) 72%, #eef1f7);
419
+ }
420
+
421
+ .breakpoint-tab {
422
+ min-height: 30px;
423
+ padding: 4px 8px;
424
+ display: inline-flex;
425
+ align-items: center;
426
+ gap: 5px;
427
+ border: 0;
428
+ border-radius: 7px;
429
+ background: transparent;
430
+ color: #7a8498;
431
+ cursor: pointer;
432
+ white-space: nowrap;
433
+ transition: 140ms ease;
434
+ }
435
+
436
+ .breakpoint-tab:hover {
437
+ color: var(--ink);
438
+ background: #fff;
439
+ }
440
+
441
+ .breakpoint-tab[aria-pressed="true"] {
442
+ background: #fff;
443
+ color: var(--accent);
444
+ box-shadow: 0 2px 8px rgb(38 52 82 / 10%);
445
+ }
446
+
447
+ .breakpoint-download-button {
448
+ display: none;
449
+ }
450
+
451
+ .route-tabs button {
452
+ gap: 5px;
453
+ min-height: 30px;
454
+ padding: 4px 9px;
455
+ border: 0;
456
+ border-radius: 7px;
457
+ background: transparent;
458
+ color: #6a7488;
459
+ cursor: pointer;
460
+ white-space: nowrap;
461
+ transition: 140ms ease;
462
+ }
463
+
464
+ .route-tabs button:hover {
465
+ color: var(--ink);
466
+ background: rgb(255 255 255 / 70%);
467
+ }
468
+
469
+ .route-tabs button[aria-current="page"] {
470
+ background: #fff;
471
+ color: var(--accent);
472
+ box-shadow: 0 2px 8px rgb(38 52 82 / 10%);
473
+ }
474
+
475
+ .route-icon {
476
+ color: currentColor;
477
+ }
478
+
479
+ .actions button {
480
+ border: 1px solid transparent;
481
+ border-radius: 8px;
482
+ background: transparent;
483
+ color: #68748a;
484
+ cursor: pointer;
485
+ transition: 140ms ease;
486
+ }
487
+
488
+ .actions button:hover:not(:disabled) {
489
+ border-color: var(--line);
490
+ background: #fff;
491
+ color: var(--ink);
492
+ }
493
+
494
+ .actions button:disabled {
495
+ opacity: 0.35;
496
+ cursor: not-allowed;
497
+ }
498
+
499
+ .icon-button {
500
+ width: 32px;
501
+ height: 32px;
502
+ flex: 0 0 32px;
503
+ display: grid !important;
504
+ place-items: center;
505
+ font-size: 20px;
506
+ line-height: 1;
507
+ }
508
+
509
+ .icon-button:nth-of-type(5) {
510
+ color: #e36c7e;
511
+ }
512
+
513
+ .mode-button {
514
+ flex: 0 0 auto;
515
+ gap: 6px;
516
+ min-height: 32px;
517
+ padding: 0 11px;
518
+ border-color: #cbd4ff !important;
519
+ background: var(--accent-soft) !important;
520
+ color: #4d63dc !important;
521
+ font-size: 12px;
522
+ font-weight: 700;
523
+ }
524
+
525
+ .mode-button span:first-child {
526
+ font-size: 16px;
527
+ }
528
+
529
+ .preview-open-button {
530
+ min-height: 32px;
531
+ padding: 0 10px;
532
+ display: inline-flex;
533
+ align-items: center;
534
+ gap: 6px;
535
+ border: 1px solid #cbd4ff !important;
536
+ border-radius: 8px;
537
+ background: #fff !important;
538
+ color: #536df1 !important;
539
+ cursor: pointer;
540
+ font-size: 12px;
541
+ font-weight: 700;
542
+ white-space: nowrap;
543
+ }
544
+
545
+ .preview-open-button:hover {
546
+ background: var(--accent-soft) !important;
547
+ box-shadow: 0 5px 14px rgb(83 109 241 / 12%);
548
+ }
549
+
550
+ .workspace {
551
+ min-width: 0;
552
+ min-height: 0;
553
+ display: grid;
554
+ grid-template-columns: minmax(290px, 330px) minmax(0, 1fr) minmax(
555
+ 320px,
556
+ 400px
557
+ );
558
+ overflow: hidden;
559
+ }
560
+
561
+ .panel-scroll {
562
+ min-width: 0;
563
+ min-height: 0;
564
+ overflow: auto;
565
+ overscroll-behavior: contain;
566
+ scrollbar-gutter: stable;
567
+ scrollbar-width: thin;
568
+ }
569
+
570
+ .materials {
571
+ padding: 16px 16px 18px;
572
+ display: flex;
573
+ flex-direction: column;
574
+ align-items: stretch;
575
+ gap: 9px;
576
+ background: linear-gradient(
577
+ 180deg,
578
+ var(--panel) 0%,
579
+ color-mix(in srgb, var(--panel) 94%, var(--canvas)) 100%
580
+ );
581
+ border-right: 1px solid var(--line);
582
+ }
583
+
584
+ .panel-heading,
585
+ .inspector-heading {
586
+ min-width: 0;
587
+ display: flex;
588
+ align-items: flex-end;
589
+ justify-content: space-between;
590
+ gap: 8px;
591
+ }
592
+
593
+ .panel-heading {
594
+ padding: 0 3px 4px;
595
+ }
596
+
597
+ .materials .panel-heading .eyebrow {
598
+ display: none;
599
+ }
600
+
601
+ .materials .panel-heading h2 {
602
+ margin: 0;
603
+ font-size: 18px;
604
+ letter-spacing: -0.03em;
605
+ }
606
+
607
+ .panel-heading--breakpoint {
608
+ margin-top: 18px;
609
+ }
610
+
611
+ .eyebrow,
612
+ .stage-kicker {
613
+ display: block;
614
+ color: var(--muted);
615
+ font-size: 10px;
616
+ font-weight: 700;
617
+ letter-spacing: 0.12em;
618
+ text-transform: uppercase;
619
+ }
620
+
621
+ .panel-heading h2,
622
+ .inspector-heading h2 {
623
+ margin: 3px 0 0;
624
+ font-size: 14px;
625
+ line-height: 1.15;
626
+ }
627
+
628
+ .panel-count,
629
+ .breakpoint-icon,
630
+ .inspector-icon {
631
+ display: grid;
632
+ place-items: center;
633
+ width: 28px;
634
+ height: 28px;
635
+ border-radius: 9px;
636
+ background: var(--accent-soft);
637
+ color: var(--accent);
638
+ font-size: 11px;
639
+ font-weight: 700;
640
+ }
641
+
642
+ .material-toolbar {
643
+ position: relative;
644
+ z-index: 10;
645
+ display: grid;
646
+ gap: 6px;
647
+ padding-bottom: 4px;
648
+ margin: 0 0 2px;
649
+ border-bottom: 1px solid color-mix(in srgb, var(--line) 76%, transparent);
650
+ }
651
+
652
+ .material-search {
653
+ display: flex;
654
+ align-items: center;
655
+ gap: 7px;
656
+ min-height: 38px;
657
+ padding: 0 11px;
658
+ border: 1px solid var(--line);
659
+ border-radius: 11px;
660
+ background: color-mix(in srgb, var(--panel) 78%, #fff);
661
+ color: var(--muted);
662
+ }
663
+
664
+ .material-search:focus-within {
665
+ border-color: var(--accent);
666
+ box-shadow: 0 0 0 3px rgb(88 105 241 / 10%);
667
+ }
668
+
669
+ .material-search input {
670
+ width: 100%;
671
+ min-width: 0;
672
+ border: 0;
673
+ outline: 0;
674
+ background: transparent;
675
+ color: var(--ink);
676
+ font: inherit;
677
+ font-size: 11px;
678
+ }
679
+
680
+ .material-filter-row {
681
+ min-width: 0;
682
+ position: relative;
683
+ z-index: 20;
684
+ display: grid;
685
+ grid-template-columns: minmax(0, 1fr) 28px;
686
+ gap: 6px;
687
+ }
688
+
689
+ .material-select {
690
+ min-width: 0;
691
+ min-height: 34px;
692
+ position: relative;
693
+ display: flex;
694
+ align-items: center;
695
+ padding: 0;
696
+ border: 1px solid var(--line);
697
+ border-radius: 10px;
698
+ background: color-mix(in srgb, var(--panel) 78%, #eef2f8);
699
+ color: var(--muted);
700
+ }
701
+
702
+ .material-select:hover {
703
+ border-color: var(--accent);
704
+ color: var(--accent);
705
+ }
706
+
707
+ .material-select.is-open {
708
+ z-index: 30;
709
+ border-color: var(--accent);
710
+ background: var(--panel);
711
+ color: var(--ink);
712
+ box-shadow: 0 0 0 3px rgb(88 105 241 / 10%);
713
+ }
714
+
715
+ .material-select .custom-select__trigger {
716
+ width: 100%;
717
+ min-width: 0;
718
+ padding: 0 8px;
719
+ font-size: 10px;
720
+ }
721
+
722
+ .material-select .custom-select__trigger span {
723
+ overflow: hidden;
724
+ text-overflow: ellipsis;
725
+ white-space: nowrap;
726
+ }
727
+
728
+ .material-select .custom-select__menu {
729
+ min-width: max(100%, 180px);
730
+ max-width: min(260px, calc(100vw - 32px));
731
+ max-height: min(280px, calc(100vh - 180px));
732
+ overflow-y: auto;
733
+ }
734
+
735
+ .material-select:nth-child(2) .custom-select__menu {
736
+ right: 0;
737
+ left: auto;
738
+ }
739
+
740
+ .material-filter-reset {
741
+ width: 28px;
742
+ height: 30px;
743
+ display: grid;
744
+ place-items: center;
745
+ border: 1px solid var(--line);
746
+ border-radius: 8px;
747
+ background: transparent;
748
+ color: var(--muted);
749
+ cursor: pointer;
750
+ }
751
+
752
+ .material-filter-reset:hover {
753
+ border-color: var(--accent);
754
+ background: var(--accent-soft);
755
+ color: var(--accent);
756
+ }
757
+
758
+ .material-result-summary {
759
+ min-height: 16px;
760
+ display: flex;
761
+ align-items: center;
762
+ justify-content: space-between;
763
+ gap: 8px;
764
+ padding: 0 2px;
765
+ color: var(--muted);
766
+ font-size: 10px;
767
+ }
768
+
769
+ .material-result-summary span:last-child {
770
+ color: var(--accent);
771
+ }
772
+
773
+ .material-category-list {
774
+ display: flex;
775
+ gap: 5px;
776
+ overflow-x: auto;
777
+ padding-bottom: 2px;
778
+ scrollbar-width: none;
779
+ }
780
+
781
+ .material-category-list::-webkit-scrollbar {
782
+ display: none;
783
+ }
784
+
785
+ .material-category-button {
786
+ flex: 0 0 auto;
787
+ min-height: 25px;
788
+ padding: 0 9px;
789
+ border: 1px solid transparent;
790
+ border-radius: 7px;
791
+ background: transparent;
792
+ color: var(--muted);
793
+ cursor: pointer;
794
+ font: inherit;
795
+ font-size: 10px;
796
+ }
797
+
798
+ .material-category-button:hover,
799
+ .material-category-button.active {
800
+ border-color: rgb(88 105 241 / 18%);
801
+ background: var(--accent-soft);
802
+ color: var(--accent);
803
+ }
804
+
805
+ .material-empty {
806
+ min-height: 150px;
807
+ display: flex;
808
+ flex-direction: column;
809
+ align-items: center;
810
+ justify-content: center;
811
+ gap: 6px;
812
+ padding: 24px 12px;
813
+ border: 1px dashed var(--line-strong);
814
+ border-radius: 12px;
815
+ background: color-mix(in srgb, var(--panel) 76%, var(--canvas));
816
+ color: var(--muted);
817
+ font-size: 11px;
818
+ text-align: center;
819
+ }
820
+
821
+ .material-empty svg {
822
+ color: var(--accent);
823
+ }
824
+
825
+ .material-empty strong {
826
+ color: var(--ink);
827
+ font-size: 12px;
828
+ }
829
+
830
+ .material-empty span {
831
+ font-size: 10px;
832
+ }
833
+
834
+ .material-empty button {
835
+ min-height: 28px;
836
+ margin-top: 4px;
837
+ padding: 0 10px;
838
+ border: 1px solid color-mix(in srgb, var(--accent) 28%, var(--line));
839
+ border-radius: 8px;
840
+ background: var(--accent-soft);
841
+ color: var(--accent);
842
+ cursor: pointer;
843
+ font: inherit;
844
+ font-size: 10px;
845
+ }
846
+
847
+ .material-empty button:hover {
848
+ background: color-mix(in srgb, var(--accent-soft) 72%, var(--accent));
849
+ }
850
+
851
+ .material-source {
852
+ min-height: 72px;
853
+ gap: 9px;
854
+ padding: 11px;
855
+ border: 1px solid var(--line);
856
+ border-radius: 12px;
857
+ background: #fff;
858
+ color: var(--ink);
859
+ text-align: left;
860
+ cursor: grab;
861
+ user-select: none;
862
+ touch-action: none;
863
+ box-shadow: 0 4px 14px rgb(48 65 95 / 6%);
864
+ transition: 140ms ease;
865
+ }
866
+
867
+ .material-source {
868
+ display: grid;
869
+ grid-template-columns: 30px minmax(0, 1fr) auto auto;
870
+ align-items: center;
871
+ }
872
+
873
+ .material-source:hover {
874
+ border-color: #bcc6ff;
875
+ background: #fbfbff;
876
+ transform: translateY(-1px);
877
+ box-shadow: 0 8px 18px rgb(68 87 164 / 12%);
878
+ }
879
+
880
+ .material-source:active {
881
+ cursor: grabbing;
882
+ transform: translateY(0);
883
+ }
884
+
885
+ .material-source > span:nth-child(2) {
886
+ min-width: 0;
887
+ flex: 1;
888
+ }
889
+
890
+ .material-copy {
891
+ min-width: 0;
892
+ flex: 1;
893
+ }
894
+
895
+ .material-size {
896
+ flex: 0 0 auto;
897
+ align-self: flex-start;
898
+ padding: 3px 5px;
899
+ border-radius: 5px;
900
+ background: var(--accent-soft);
901
+ color: var(--accent);
902
+ font-size: 9px;
903
+ font-variant-numeric: tabular-nums;
904
+ }
905
+
906
+ .material-card-meta {
907
+ min-width: 0;
908
+ flex: 0 0 auto;
909
+ display: flex;
910
+ flex-direction: column;
911
+ align-items: flex-end;
912
+ gap: 5px;
913
+ }
914
+
915
+ .material-renderer-badges {
916
+ display: flex;
917
+ align-items: center;
918
+ gap: 3px;
919
+ }
920
+
921
+ .material-renderer-badge {
922
+ display: inline-flex;
923
+ align-items: center;
924
+ gap: 3px;
925
+ padding: 2px 4px;
926
+ border-radius: 5px;
927
+ background: #edf5ff;
928
+ color: #4381d9;
929
+ font-size: 8px;
930
+ line-height: 1;
931
+ white-space: nowrap;
932
+ }
933
+
934
+ .material-renderer-badge--vue {
935
+ background: #eaf8f1;
936
+ color: #3f9a74;
937
+ }
938
+
939
+ .material-source strong,
940
+ .material-source small {
941
+ display: block;
942
+ }
943
+
944
+ .material-source strong {
945
+ font-size: 12px;
946
+ }
947
+
948
+ .material-source small {
949
+ margin-top: 3px;
950
+ color: var(--muted);
951
+ font-size: 10px;
952
+ }
953
+
954
+ .material-icon {
955
+ width: 30px;
956
+ height: 30px;
957
+ display: grid;
958
+ place-items: center;
959
+ flex: 0 0 auto;
960
+ border-radius: 8px;
961
+ }
962
+
963
+ .material-icon--metric {
964
+ background: #edf5ff;
965
+ color: #4381d9;
966
+ }
967
+
968
+ .material-icon--chart {
969
+ background: #f2eeff;
970
+ color: #8167dd;
971
+ }
972
+
973
+ .material-add {
974
+ display: grid;
975
+ place-items: center;
976
+ color: #a1abc0;
977
+ }
978
+
979
+ .breakpoint-button {
980
+ min-height: 42px;
981
+ gap: 9px;
982
+ padding: 8px 9px;
983
+ border: 1px solid transparent;
984
+ border-radius: 9px;
985
+ background: transparent;
986
+ color: #69758b;
987
+ text-align: left;
988
+ cursor: pointer;
989
+ }
990
+
991
+ .breakpoint-button:hover {
992
+ background: #f6f8fc;
993
+ color: var(--ink);
994
+ }
995
+
996
+ .breakpoint-button[aria-pressed="true"] {
997
+ border-color: #ccd4ff;
998
+ background: var(--accent-soft);
999
+ color: #4d63dc;
1000
+ }
1001
+
1002
+ .breakpoint-button span:nth-child(2) {
1003
+ flex: 1;
1004
+ font-size: 12px;
1005
+ font-weight: 700;
1006
+ }
1007
+
1008
+ .breakpoint-button small {
1009
+ color: #a0a9b9;
1010
+ font-size: 10px;
1011
+ }
1012
+
1013
+ .breakpoint-dot {
1014
+ width: 7px;
1015
+ height: 7px;
1016
+ border-radius: 50%;
1017
+ background: #c8d0dc;
1018
+ }
1019
+
1020
+ .breakpoint-button[aria-pressed="true"] .breakpoint-dot {
1021
+ background: var(--accent);
1022
+ box-shadow: 0 0 0 4px rgb(83 109 241 / 14%);
1023
+ }
1024
+
1025
+ .panel-tip {
1026
+ margin-top: auto;
1027
+ padding: 10px;
1028
+ display: flex;
1029
+ gap: 7px;
1030
+ align-items: flex-start;
1031
+ border-radius: 9px;
1032
+ background: #f7f8fb;
1033
+ color: #8993a5;
1034
+ font-size: 10px;
1035
+ line-height: 1.55;
1036
+ }
1037
+
1038
+ .panel-tip > svg {
1039
+ color: var(--accent);
1040
+ }
1041
+
1042
+ .canvas {
1043
+ position: relative;
1044
+ padding: 20px;
1045
+ display: flex;
1046
+ flex-direction: column;
1047
+ gap: 10px;
1048
+ background-color: var(--checker-a);
1049
+ background-image:
1050
+ linear-gradient(45deg, var(--checker-b) 25%, transparent 25%),
1051
+ linear-gradient(-45deg, var(--checker-b) 25%, transparent 25%),
1052
+ linear-gradient(45deg, transparent 75%, var(--checker-b) 75%),
1053
+ linear-gradient(-45deg, transparent 75%, var(--checker-b) 75%);
1054
+ background-size: 32px 32px;
1055
+ background-position:
1056
+ 0 0,
1057
+ 0 16px,
1058
+ 16px -16px,
1059
+ -16px 0;
1060
+ }
1061
+
1062
+ .canvas-toolbar {
1063
+ position: sticky;
1064
+ top: 0;
1065
+ z-index: 30;
1066
+ align-self: stretch;
1067
+ width: 100%;
1068
+ min-height: 38px;
1069
+ padding: 4px;
1070
+ display: flex;
1071
+ align-items: center;
1072
+ justify-content: flex-end;
1073
+ gap: 3px;
1074
+ border: 0;
1075
+ background: transparent;
1076
+ box-shadow: none;
1077
+ pointer-events: none;
1078
+ }
1079
+
1080
+ .canvas-toolbar > * {
1081
+ pointer-events: auto;
1082
+ }
1083
+
1084
+ .canvas-device-control {
1085
+ position: absolute;
1086
+ z-index: 35;
1087
+ left: 0;
1088
+ top: 4px;
1089
+ min-height: 34px;
1090
+ padding: 0;
1091
+ border: 1px solid rgb(198 208 225 / 78%);
1092
+ border-radius: 10px;
1093
+ background: var(--topbar);
1094
+ box-shadow:
1095
+ 0 8px 22px rgb(67 84 122 / 12%),
1096
+ inset 0 1px 0 rgb(255 255 255 / 80%);
1097
+ backdrop-filter: blur(12px);
1098
+ }
1099
+
1100
+ .canvas-device-control:hover,
1101
+ .canvas-device-control.is-open {
1102
+ border-color: var(--line-strong);
1103
+ background: var(--panel);
1104
+ color: var(--ink);
1105
+ }
1106
+
1107
+ .canvas-device-control .custom-select__trigger {
1108
+ min-width: 112px;
1109
+ }
1110
+
1111
+ .canvas-device-control .custom-select__menu {
1112
+ top: calc(100% + 7px);
1113
+ left: 0;
1114
+ }
1115
+
1116
+ .canvas-device-control + .orientation-button {
1117
+ position: absolute;
1118
+ z-index: 35;
1119
+ top: 4px;
1120
+ left: 120px;
1121
+ border: 1px solid rgb(198 208 225 / 78%);
1122
+ background: var(--topbar);
1123
+ box-shadow:
1124
+ 0 8px 22px rgb(67 84 122 / 12%),
1125
+ inset 0 1px 0 rgb(255 255 255 / 80%);
1126
+ backdrop-filter: blur(12px);
1127
+ }
1128
+
1129
+ .canvas-device-control + .orientation-button + .canvas-toolbar__divider {
1130
+ display: none;
1131
+ }
1132
+
1133
+ .canvas-toolbar__group {
1134
+ display: flex;
1135
+ align-items: center;
1136
+ gap: 2px;
1137
+ }
1138
+
1139
+ .canvas-toolbar__divider {
1140
+ width: 1px;
1141
+ height: 20px;
1142
+ margin: 0 3px;
1143
+ background: var(--line);
1144
+ }
1145
+
1146
+ .canvas-tool-button {
1147
+ width: 29px;
1148
+ height: 29px;
1149
+ display: grid;
1150
+ place-items: center;
1151
+ border: 0;
1152
+ border-radius: 8px;
1153
+ background: transparent;
1154
+ color: #7a879d;
1155
+ cursor: pointer;
1156
+ transition:
1157
+ background 140ms ease,
1158
+ color 140ms ease,
1159
+ transform 140ms ease;
1160
+ }
1161
+
1162
+ .canvas-tool-button:hover {
1163
+ background: #f0f3ff;
1164
+ color: var(--accent);
1165
+ }
1166
+
1167
+ .canvas-tool-button:active {
1168
+ transform: scale(0.94);
1169
+ }
1170
+
1171
+ .canvas-tool-button.active {
1172
+ background: var(--accent-soft);
1173
+ color: var(--accent);
1174
+ box-shadow: inset 0 0 0 1px rgb(83 109 241 / 12%);
1175
+ }
1176
+
1177
+ .canvas-zoom-label {
1178
+ min-width: 42px;
1179
+ color: #5f6d84;
1180
+ font-size: 11px;
1181
+ font-variant-numeric: tabular-nums;
1182
+ font-weight: 700;
1183
+ text-align: center;
1184
+ }
1185
+
1186
+ .canvas-viewport {
1187
+ position: relative;
1188
+ flex: 0 0 auto;
1189
+ min-width: 0;
1190
+ min-height: 620px;
1191
+ overflow: visible;
1192
+ border-radius: 16px;
1193
+ touch-action: none;
1194
+ cursor: default;
1195
+ }
1196
+
1197
+ .canvas-viewport.is-pan-tool {
1198
+ cursor: grab;
1199
+ }
1200
+
1201
+ .canvas-viewport.is-panning {
1202
+ cursor: grabbing;
1203
+ }
1204
+
1205
+ .canvas-scene {
1206
+ width: 100%;
1207
+ min-width: 0;
1208
+ transform-origin: 0 0;
1209
+ will-change: transform;
1210
+ }
1211
+
1212
+ .editor-stage,
1213
+ .preview-stage,
1214
+ .runtime-preview-stage,
1215
+ .vanilla-runtime-stage {
1216
+ flex: 0 0 auto;
1217
+ min-width: 0;
1218
+ min-height: 620px;
1219
+ display: flex;
1220
+ flex-direction: column;
1221
+ height: auto;
1222
+ overflow: visible;
1223
+ border: 1px solid var(--line);
1224
+ border-radius: 14px;
1225
+ background: var(--stage);
1226
+ box-shadow: var(--shadow);
1227
+ }
1228
+
1229
+ .editor-stage::before,
1230
+ .preview-stage::before,
1231
+ .runtime-preview-stage::before,
1232
+ .vanilla-runtime-stage::before {
1233
+ content: "";
1234
+ height: 3px;
1235
+ flex: 0 0 3px;
1236
+ background: linear-gradient(90deg, #5b73f2, #9c83ff 55%, #74cbb1);
1237
+ }
1238
+
1239
+ .stage-header {
1240
+ min-height: 62px;
1241
+ padding: 13px 16px;
1242
+ display: flex;
1243
+ align-items: center;
1244
+ justify-content: space-between;
1245
+ gap: 12px;
1246
+ border-bottom: 1px solid var(--line);
1247
+ background: var(--stage-header);
1248
+ }
1249
+
1250
+ .stage-header h2 {
1251
+ margin: 4px 0 0;
1252
+ font-size: 15px;
1253
+ line-height: 1.15;
1254
+ }
1255
+
1256
+ .stage-kicker {
1257
+ color: var(--muted);
1258
+ font-size: 10px;
1259
+ font-weight: 700;
1260
+ }
1261
+
1262
+ .stage-badge {
1263
+ display: inline-flex;
1264
+ align-items: center;
1265
+ gap: 6px;
1266
+ padding: 5px 8px;
1267
+ border: 1px solid var(--line);
1268
+ border-radius: 999px;
1269
+ background: var(--panel);
1270
+ color: var(--muted);
1271
+ font-size: 10px;
1272
+ white-space: nowrap;
1273
+ }
1274
+
1275
+ .stage-badge i {
1276
+ width: 6px;
1277
+ height: 6px;
1278
+ border-radius: 50%;
1279
+ background: #62c49c;
1280
+ box-shadow: 0 0 0 3px rgb(98 196 156 / 15%);
1281
+ }
1282
+
1283
+ .layout-editor-grid,
1284
+ .ldesign-layout-grid,
1285
+ .runtime-preview-grid {
1286
+ flex: 0 0 auto;
1287
+ min-width: 0;
1288
+ min-height: 558px;
1289
+ padding: 16px;
1290
+ position: relative;
1291
+ isolation: isolate;
1292
+ background: var(--stage);
1293
+ --gs-cell-height: 8px;
1294
+ --gs-item-margin-top: 16px !important;
1295
+ --gs-item-margin-bottom: 0px !important;
1296
+ --gs-item-margin-left: 16px !important;
1297
+ --gs-item-margin-right: 0px !important;
1298
+ }
1299
+
1300
+ .layout-editor-grid.gs-12 {
1301
+ --gs-column-width: calc((100% - 16px) / 12) !important;
1302
+ }
1303
+
1304
+ .layout-editor-grid.gs-8 {
1305
+ --gs-column-width: calc((100% - 16px) / 8) !important;
1306
+ --gs-item-margin-bottom: -4px !important;
1307
+ }
1308
+
1309
+ .layout-editor-grid.gs-4 {
1310
+ --gs-column-width: calc((100% - 16px) / 4) !important;
1311
+ --gs-item-margin-bottom: -8px !important;
1312
+ }
1313
+
1314
+ .layout-editor-grid .grid-stack-item-content {
1315
+ padding: 0;
1316
+ overflow: hidden;
1317
+ border: 0;
1318
+ border-radius: 12px;
1319
+ background: transparent;
1320
+ color: var(--ink);
1321
+ cursor: grab;
1322
+ }
1323
+
1324
+ .layout-editor-grid .grid-stack-item-content:active,
1325
+ .layout-editor-grid.grid-stack-dragging .grid-stack-item-content,
1326
+ .layout-editor-grid .ui-draggable-dragging .grid-stack-item-content {
1327
+ cursor: grabbing;
1328
+ }
1329
+
1330
+ .layout-editor-grid .ui-draggable-dragging,
1331
+ .layout-editor-grid .grid-stack-item.ui-draggable-dragging,
1332
+ .layout-editor-grid .grid-stack-item.ui-resizable-resizing {
1333
+ transition: none !important;
1334
+ will-change: left, top, width, height;
1335
+ }
1336
+
1337
+ body > .ui-draggable-dragging[data-layout-material] {
1338
+ transition: none !important;
1339
+ animation: none !important;
1340
+ will-change: left, top;
1341
+ }
1342
+
1343
+ .layout-editor-grid .grid-stack-placeholder > .placeholder-content {
1344
+ border: 1px dashed rgb(83 109 241 / 58%);
1345
+ border-radius: 12px;
1346
+ background: rgb(83 109 241 / 10%);
1347
+ box-shadow: inset 0 0 0 1px rgb(255 255 255 / 45%);
1348
+ }
1349
+
1350
+ .layout-editor-grid::after {
1351
+ content: "拖入物料开始布局";
1352
+ inset: 50% auto auto 50%;
1353
+ z-index: -1;
1354
+ transform: translate(-50%, -50%);
1355
+ color: #a8b2c5;
1356
+ font-size: 12px;
1357
+ letter-spacing: 0.08em;
1358
+ pointer-events: none;
1359
+ }
1360
+
1361
+ .layout-editor-grid:has(.grid-stack-item)::after {
1362
+ opacity: 0;
1363
+ }
1364
+
1365
+ .layout-editor-grid .grid-stack-item.is-selected .grid-stack-item-content {
1366
+ outline: 2px solid var(--accent);
1367
+ outline-offset: -2px;
1368
+ border-radius: 12px;
1369
+ }
1370
+
1371
+ .layout-editor-grid .grid-stack-item:focus-visible .grid-stack-item-content {
1372
+ outline: 2px solid #12a594;
1373
+ outline-offset: -4px;
1374
+ }
1375
+
1376
+ .ldesign-layout-grid {
1377
+ flex: 1 0 auto;
1378
+ min-height: max(180px, min(558px, var(--canvas-grid-height, 558px)));
1379
+ }
1380
+
1381
+ .runtime-preview-grid {
1382
+ flex: 1 0 auto;
1383
+ }
1384
+
1385
+ .layout-item-shell,
1386
+ .layout-card {
1387
+ position: relative;
1388
+ width: 100%;
1389
+ height: 100%;
1390
+ min-width: 0;
1391
+ min-height: 0;
1392
+ }
1393
+
1394
+ .layout-item-shell {
1395
+ display: block;
1396
+ padding: 0;
1397
+ overflow: hidden;
1398
+ border: 0;
1399
+ background: transparent;
1400
+ color: inherit;
1401
+ }
1402
+
1403
+ .layout-item-shell--interactive {
1404
+ cursor: pointer;
1405
+ }
1406
+
1407
+ .layout-card {
1408
+ min-height: 84px;
1409
+ padding: 14px;
1410
+ display: flex;
1411
+ flex-direction: column;
1412
+ overflow: hidden;
1413
+ border: 1px solid var(--card-line);
1414
+ border-radius: 12px;
1415
+ background:
1416
+ linear-gradient(145deg, rgb(255 255 255 / 98%), rgb(248 249 255 / 94%)),
1417
+ var(--card);
1418
+ color: var(--ink);
1419
+ box-shadow:
1420
+ 0 10px 24px rgb(71 86 132 / 9%),
1421
+ inset 0 1px 0 rgb(255 255 255 / 80%);
1422
+ transition:
1423
+ border-color 160ms ease,
1424
+ box-shadow 160ms ease,
1425
+ transform 160ms ease;
1426
+ }
1427
+
1428
+ .layout-card__actions {
1429
+ position: absolute;
1430
+ z-index: 2;
1431
+ top: 9px;
1432
+ right: 9px;
1433
+ display: flex;
1434
+ align-items: center;
1435
+ gap: 3px;
1436
+ opacity: 0;
1437
+ transform: translateY(-3px);
1438
+ pointer-events: none;
1439
+ transition:
1440
+ opacity 140ms ease,
1441
+ transform 140ms ease;
1442
+ isolation: isolate;
1443
+ }
1444
+
1445
+ .layout-editor-grid .grid-stack-item:hover .layout-card__actions,
1446
+ .layout-editor-grid .grid-stack-item.is-selected .layout-card__actions {
1447
+ opacity: 1;
1448
+ transform: translateY(0);
1449
+ pointer-events: auto;
1450
+ }
1451
+
1452
+ .layout-card__action {
1453
+ position: relative;
1454
+ z-index: 3;
1455
+ width: 24px;
1456
+ height: 24px;
1457
+ display: grid;
1458
+ place-items: center;
1459
+ padding: 0;
1460
+ border: 1px solid var(--line);
1461
+ border-radius: 7px;
1462
+ background: color-mix(in srgb, var(--panel) 94%, transparent);
1463
+ color: var(--muted);
1464
+ cursor: pointer;
1465
+ pointer-events: auto;
1466
+ box-shadow: 0 3px 8px rgb(37 53 91 / 10%);
1467
+ transition:
1468
+ color 140ms ease,
1469
+ border-color 140ms ease,
1470
+ background 140ms ease,
1471
+ transform 140ms ease;
1472
+ }
1473
+
1474
+ .layout-card__action:hover {
1475
+ border-color: #9aa9ff;
1476
+ background: var(--accent-soft);
1477
+ color: var(--accent);
1478
+ transform: translateY(-1px);
1479
+ }
1480
+
1481
+ .layout-card__meta,
1482
+ .layout-card__footer {
1483
+ display: flex;
1484
+ align-items: center;
1485
+ justify-content: space-between;
1486
+ gap: 8px;
1487
+ }
1488
+
1489
+ .layout-card__meta {
1490
+ color: #8590a5;
1491
+ font-size: 10px;
1492
+ }
1493
+
1494
+ .layout-card__type {
1495
+ color: var(--accent);
1496
+ font-weight: 700;
1497
+ }
1498
+
1499
+ .layout-card__status {
1500
+ padding: 2px 5px;
1501
+ border-radius: 4px;
1502
+ background: #edf8f3;
1503
+ color: #4aaf84;
1504
+ white-space: nowrap;
1505
+ }
1506
+
1507
+ .layout-card__title {
1508
+ margin: 10px 0 7px;
1509
+ overflow: hidden;
1510
+ color: #273249;
1511
+ font-size: 13px;
1512
+ font-weight: 700;
1513
+ line-height: 1.35;
1514
+ text-overflow: ellipsis;
1515
+ white-space: nowrap;
1516
+ }
1517
+
1518
+ .layout-card__value {
1519
+ display: block;
1520
+ color: #25345a;
1521
+ font-size: clamp(20px, 2.2vw, 30px);
1522
+ line-height: 1;
1523
+ letter-spacing: -0.04em;
1524
+ }
1525
+
1526
+ .layout-card__chart {
1527
+ height: 36px;
1528
+ display: flex;
1529
+ align-items: flex-end;
1530
+ gap: 5px;
1531
+ padding: 0 3px;
1532
+ }
1533
+
1534
+ .layout-card__chart i {
1535
+ width: 100%;
1536
+ border-radius: 4px 4px 1px 1px;
1537
+ background: linear-gradient(180deg, #8b9cff, #5e72ed);
1538
+ }
1539
+
1540
+ .layout-card__chart i:nth-child(1) {
1541
+ height: 38%;
1542
+ }
1543
+ .layout-card__chart i:nth-child(2) {
1544
+ height: 62%;
1545
+ }
1546
+ .layout-card__chart i:nth-child(3) {
1547
+ height: 48%;
1548
+ }
1549
+ .layout-card__chart i:nth-child(4) {
1550
+ height: 82%;
1551
+ }
1552
+ .layout-card__chart i:nth-child(5) {
1553
+ height: 100%;
1554
+ }
1555
+
1556
+ .layout-card__footer {
1557
+ margin-top: auto;
1558
+ padding-top: 12px;
1559
+ color: #9aa3b4;
1560
+ font-size: 10px;
1561
+ }
1562
+
1563
+ .layout-card__spark {
1564
+ color: #56b78e;
1565
+ font-size: 15px;
1566
+ font-weight: 700;
1567
+ }
1568
+
1569
+ .widget.selected .layout-card,
1570
+ .layout-item-shell[aria-pressed="true"] .layout-card {
1571
+ border-color: #8392f6;
1572
+ box-shadow:
1573
+ 0 0 0 2px rgb(83 109 241 / 18%),
1574
+ 0 10px 22px rgb(71 86 132 / 12%);
1575
+ }
1576
+
1577
+ .layout-editor-grid .grid-stack-item:hover .layout-card,
1578
+ .layout-item-shell--interactive:hover .layout-card {
1579
+ border-color: #aab6f7;
1580
+ box-shadow:
1581
+ 0 0 0 2px rgb(83 109 241 / 12%),
1582
+ 0 14px 28px rgb(71 86 132 / 14%);
1583
+ }
1584
+
1585
+ .inspectors {
1586
+ padding: 18px 14px;
1587
+ display: flex;
1588
+ flex-direction: column;
1589
+ gap: 12px;
1590
+ background: var(--panel);
1591
+ color: var(--ink);
1592
+ border-left: 1px solid var(--line);
1593
+ overflow: auto;
1594
+ }
1595
+
1596
+ .inspector-heading {
1597
+ align-items: center;
1598
+ padding: 2px 3px 0;
1599
+ flex: 0 0 auto;
1600
+ }
1601
+
1602
+ .inspector-heading > div:first-child {
1603
+ min-width: 0;
1604
+ flex: 1;
1605
+ }
1606
+
1607
+ .inspector-heading h2 {
1608
+ color: var(--ink);
1609
+ }
1610
+
1611
+ .inspector-heading .eyebrow {
1612
+ color: var(--muted);
1613
+ }
1614
+
1615
+ .inspector-icon {
1616
+ background: var(--accent-soft);
1617
+ color: var(--accent);
1618
+ font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
1619
+ }
1620
+
1621
+ .copy-code-button {
1622
+ width: 30px;
1623
+ height: 30px;
1624
+ display: grid;
1625
+ place-items: center;
1626
+ border: 1px solid var(--line);
1627
+ border-radius: 8px;
1628
+ background: var(--accent-soft);
1629
+ color: var(--accent);
1630
+ cursor: pointer;
1631
+ transition: 140ms ease;
1632
+ }
1633
+
1634
+ .copy-code-button:hover {
1635
+ border-color: color-mix(in srgb, var(--accent) 45%, var(--line));
1636
+ background: color-mix(in srgb, var(--accent-soft) 72%, #fff);
1637
+ color: var(--accent);
1638
+ }
1639
+
1640
+ .download-code-button {
1641
+ width: 30px;
1642
+ height: 30px;
1643
+ display: grid;
1644
+ place-items: center;
1645
+ border: 1px solid var(--line);
1646
+ border-radius: 8px;
1647
+ background: var(--accent-soft);
1648
+ color: var(--accent);
1649
+ cursor: pointer;
1650
+ transition: 140ms ease;
1651
+ }
1652
+
1653
+ .download-code-button:hover {
1654
+ border-color: color-mix(in srgb, var(--accent) 45%, var(--line));
1655
+ background: color-mix(in srgb, var(--accent-soft) 72%, #fff);
1656
+ color: var(--accent);
1657
+ }
1658
+
1659
+ .code-block {
1660
+ min-height: 0;
1661
+ height: 0;
1662
+ flex: 1 1 0;
1663
+ margin: 0;
1664
+ padding: 12px;
1665
+ overflow: auto;
1666
+ border: 1px solid var(--line);
1667
+ border-radius: 9px;
1668
+ background: #f7f9fc;
1669
+ color: #263653;
1670
+ font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
1671
+ font-size: 11px;
1672
+ line-height: 1.65;
1673
+ tab-size: 2;
1674
+ white-space: pre;
1675
+ scrollbar-width: thin;
1676
+ }
1677
+
1678
+ .code-block code {
1679
+ display: block;
1680
+ min-width: max-content;
1681
+ color: inherit;
1682
+ }
1683
+
1684
+ .code-token-comment {
1685
+ color: #8b96a8;
1686
+ font-style: italic;
1687
+ }
1688
+
1689
+ .code-token-tag,
1690
+ .code-token-keyword {
1691
+ color: #7257d8;
1692
+ }
1693
+
1694
+ .code-token-attribute,
1695
+ .code-token-property {
1696
+ color: #197d9a;
1697
+ }
1698
+
1699
+ .code-token-string {
1700
+ color: #b05b2b;
1701
+ }
1702
+
1703
+ .code-token-number,
1704
+ .code-token-constant {
1705
+ color: #b43d78;
1706
+ }
1707
+
1708
+ .code-status {
1709
+ display: flex;
1710
+ align-items: center;
1711
+ gap: 7px;
1712
+ padding: 0 3px 2px;
1713
+ flex: 0 0 auto;
1714
+ color: var(--muted);
1715
+ font-size: 10px;
1716
+ line-height: 1.4;
1717
+ }
1718
+
1719
+ .material-card-actions {
1720
+ display: inline-flex;
1721
+ align-items: center;
1722
+ gap: 3px;
1723
+ justify-self: end;
1724
+ }
1725
+
1726
+ .material-code-button {
1727
+ width: 25px;
1728
+ height: 25px;
1729
+ display: grid;
1730
+ place-items: center;
1731
+ padding: 0;
1732
+ border: 1px solid transparent;
1733
+ border-radius: 7px;
1734
+ background: transparent;
1735
+ color: var(--muted);
1736
+ cursor: pointer;
1737
+ transition: 140ms ease;
1738
+ }
1739
+
1740
+ .material-code-button:hover,
1741
+ .material-code-button:focus-visible {
1742
+ border-color: color-mix(in srgb, var(--accent) 28%, var(--line));
1743
+ background: var(--accent-soft);
1744
+ color: var(--accent);
1745
+ outline: none;
1746
+ }
1747
+
1748
+ .code-status__dot {
1749
+ width: 6px;
1750
+ height: 6px;
1751
+ flex: 0 0 6px;
1752
+ border-radius: 50%;
1753
+ background: #60c99b;
1754
+ box-shadow: 0 0 0 3px rgb(96 201 155 / 14%);
1755
+ }
1756
+
1757
+ .preview-dialog {
1758
+ --ink: #172033;
1759
+ --muted: #768198;
1760
+ --line: #dce3ed;
1761
+ --panel: #fff;
1762
+ --canvas: #f5f7fb;
1763
+ --stage: #fff;
1764
+ --card: #fff;
1765
+ --card-line: #d8def0;
1766
+ --accent: #536df1;
1767
+ --accent-soft: #eef0ff;
1768
+ position: fixed;
1769
+ inset: 0;
1770
+ z-index: 100;
1771
+ display: grid;
1772
+ place-items: center;
1773
+ padding: 28px;
1774
+ color: var(--ink);
1775
+ }
1776
+
1777
+ .preview-dialog-enter-active,
1778
+ .preview-dialog-leave-active {
1779
+ transition: opacity 180ms ease;
1780
+ }
1781
+
1782
+ .preview-dialog-enter-active .preview-dialog__panel,
1783
+ .preview-dialog-leave-active .preview-dialog__panel {
1784
+ transition:
1785
+ transform 220ms cubic-bezier(0.22, 1, 0.36, 1),
1786
+ opacity 180ms ease;
1787
+ }
1788
+
1789
+ .preview-dialog-enter-from,
1790
+ .preview-dialog-leave-to {
1791
+ opacity: 0;
1792
+ }
1793
+
1794
+ .preview-dialog-enter-from .preview-dialog__panel,
1795
+ .preview-dialog-leave-to .preview-dialog__panel {
1796
+ opacity: 0;
1797
+ transform: translateY(14px) scale(0.975);
1798
+ }
1799
+
1800
+ .preview-dialog__backdrop {
1801
+ position: absolute;
1802
+ inset: 0;
1803
+ border: 0;
1804
+ background: rgb(20 31 51 / 42%);
1805
+ cursor: default;
1806
+ backdrop-filter: blur(6px);
1807
+ }
1808
+
1809
+ .preview-dialog__panel {
1810
+ position: relative;
1811
+ z-index: 1;
1812
+ width: min(1080px, 100%);
1813
+ max-height: min(820px, calc(100vh - 56px));
1814
+ display: flex;
1815
+ flex-direction: column;
1816
+ overflow: hidden;
1817
+ border: 1px solid var(--line);
1818
+ border-radius: 18px;
1819
+ background: var(--panel);
1820
+ box-shadow: 0 28px 80px rgb(31 46 78 / 26%);
1821
+ }
1822
+
1823
+ .preview-dialog__header,
1824
+ .preview-dialog__footer {
1825
+ flex: 0 0 auto;
1826
+ display: flex;
1827
+ align-items: center;
1828
+ justify-content: space-between;
1829
+ gap: 16px;
1830
+ padding: 15px 18px;
1831
+ border-bottom: 1px solid var(--line);
1832
+ }
1833
+
1834
+ .preview-dialog__header h2 {
1835
+ margin: 4px 0 0;
1836
+ font-size: 17px;
1837
+ }
1838
+
1839
+ .preview-dialog__header-meta {
1840
+ display: flex;
1841
+ align-items: center;
1842
+ gap: 8px;
1843
+ }
1844
+
1845
+ .preview-dialog__header .icon-button {
1846
+ width: 32px;
1847
+ height: 32px;
1848
+ display: grid;
1849
+ place-items: center;
1850
+ border: 1px solid var(--line);
1851
+ border-radius: 9px;
1852
+ background: var(--panel);
1853
+ color: var(--muted);
1854
+ cursor: pointer;
1855
+ transition: 140ms ease;
1856
+ }
1857
+
1858
+ .preview-dialog__header .icon-button:hover {
1859
+ border-color: var(--accent);
1860
+ background: var(--accent-soft);
1861
+ color: var(--accent);
1862
+ transform: rotate(6deg);
1863
+ }
1864
+
1865
+ .preview-dialog__body {
1866
+ min-height: 0;
1867
+ flex: 1 1 auto;
1868
+ overflow: auto;
1869
+ padding: 18px;
1870
+ background: var(--canvas);
1871
+ }
1872
+
1873
+ .preview-dialog__canvas {
1874
+ min-height: 520px;
1875
+ padding: 18px;
1876
+ border: 1px solid var(--line);
1877
+ border-radius: 14px;
1878
+ background: var(--stage);
1879
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 70%);
1880
+ }
1881
+
1882
+ .preview-dialog__canvas .ldesign-layout-grid {
1883
+ min-height: 480px;
1884
+ padding: 0;
1885
+ background: transparent;
1886
+ }
1887
+
1888
+ .preview-dialog__card {
1889
+ height: 100%;
1890
+ }
1891
+
1892
+ .preview-dialog__footer {
1893
+ border-top: 1px solid var(--line);
1894
+ border-bottom: 0;
1895
+ color: var(--muted);
1896
+ font-size: 11px;
1897
+ }
1898
+
1899
+ .preview-dialog__close-button {
1900
+ min-height: 32px;
1901
+ padding: 0 12px;
1902
+ border: 1px solid var(--line);
1903
+ border-radius: 8px;
1904
+ background: var(--accent-soft);
1905
+ color: var(--accent);
1906
+ cursor: pointer;
1907
+ font-size: 11px;
1908
+ font-weight: 700;
1909
+ }
1910
+
1911
+ .preview-dialog__close-button:hover {
1912
+ border-color: var(--accent);
1913
+ }
1914
+
1915
+ .material-code-dialog__panel {
1916
+ width: min(820px, 100%);
1917
+ }
1918
+
1919
+ .material-code-dialog__subtitle {
1920
+ margin: 5px 0 0;
1921
+ color: var(--muted);
1922
+ font-size: 11px;
1923
+ }
1924
+
1925
+ .material-code-dialog__body {
1926
+ min-height: 0;
1927
+ padding: 16px;
1928
+ }
1929
+
1930
+ .material-code-dialog__code {
1931
+ min-height: 360px;
1932
+ max-height: min(560px, calc(100vh - 250px));
1933
+ margin: 0;
1934
+ border: 1px solid var(--line);
1935
+ border-radius: 12px;
1936
+ background: color-mix(in srgb, var(--stage) 82%, var(--canvas));
1937
+ }
1938
+
1939
+ .material-code-dialog__actions {
1940
+ display: inline-flex;
1941
+ align-items: center;
1942
+ gap: 8px;
1943
+ }
1944
+
1945
+ .material-code-dialog__actions .copy-code-button {
1946
+ width: 32px;
1947
+ height: 32px;
1948
+ display: grid;
1949
+ place-items: center;
1950
+ padding: 0;
1951
+ border: 1px solid var(--line);
1952
+ border-radius: 8px;
1953
+ background: var(--panel);
1954
+ color: var(--muted);
1955
+ cursor: pointer;
1956
+ }
1957
+
1958
+ .material-code-dialog__actions .copy-code-button:hover {
1959
+ border-color: var(--accent);
1960
+ background: var(--accent-soft);
1961
+ color: var(--accent);
1962
+ }
1963
+
1964
+ .preview-dialog[data-theme="dark"] {
1965
+ --ink: #edf2ff;
1966
+ --muted: #95a3be;
1967
+ --line: #34405a;
1968
+ --panel: #192238;
1969
+ --canvas: #121a2d;
1970
+ --stage: #202b43;
1971
+ --card: #1d2940;
1972
+ --card-line: #405071;
1973
+ --accent: #8ea2ff;
1974
+ --accent-soft: #293762;
1975
+ }
1976
+
1977
+ .preview-dialog[data-theme="dark"] .preview-dialog__backdrop {
1978
+ background: rgb(4 8 18 / 64%);
1979
+ }
1980
+
1981
+ .preview-dialog[data-theme="dark"] .preview-dialog__canvas {
1982
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 4%);
1983
+ }
1984
+
1985
+ .preview-dialog[data-theme="dark"] .layout-card {
1986
+ background:
1987
+ linear-gradient(145deg, rgb(39 53 80 / 98%), rgb(29 41 64 / 96%)),
1988
+ var(--card);
1989
+ box-shadow:
1990
+ 0 10px 24px rgb(2 8 22 / 30%),
1991
+ inset 0 1px 0 rgb(255 255 255 / 5%);
1992
+ }
1993
+
1994
+ .preview-dialog[data-theme="dark"] .layout-card__title {
1995
+ color: #edf2ff;
1996
+ }
1997
+
1998
+ .preview-dialog[data-theme="dark"] .layout-card__value {
1999
+ color: #dbe4ff;
2000
+ }
2001
+
2002
+ .preview-dialog[data-theme="dark"] .layout-card__meta,
2003
+ .preview-dialog[data-theme="dark"] .layout-card__footer {
2004
+ color: #a8b6d0;
2005
+ }
2006
+
2007
+ @media (max-width: 1080px) {
2008
+ .workspace {
2009
+ grid-template-columns: minmax(190px, 230px) minmax(0, 1fr) minmax(
2010
+ 260px,
2011
+ 320px
2012
+ );
2013
+ }
2014
+
2015
+ .topbar {
2016
+ gap: 10px;
2017
+ padding-inline: 12px;
2018
+ }
2019
+
2020
+ .brand {
2021
+ min-width: 132px;
2022
+ }
2023
+
2024
+ .route-tabs button {
2025
+ padding-inline: 7px;
2026
+ }
2027
+
2028
+ .route-tabs button > span:last-child {
2029
+ display: none;
2030
+ }
2031
+
2032
+ .breakpoint-tab {
2033
+ padding-inline: 7px;
2034
+ }
2035
+
2036
+ .breakpoint-tab span {
2037
+ display: none;
2038
+ }
2039
+
2040
+ .canvas {
2041
+ padding: 14px;
2042
+ }
2043
+ }
2044
+
2045
+ @media (max-width: 720px) {
2046
+ .layout-demo {
2047
+ grid-template-rows: 70px minmax(0, 1fr);
2048
+ }
2049
+
2050
+ .brand-copy {
2051
+ display: none;
2052
+ }
2053
+
2054
+ .workspace {
2055
+ grid-template-columns: minmax(118px, 0.8fr) minmax(0, 1.8fr) minmax(
2056
+ 170px,
2057
+ 1fr
2058
+ );
2059
+ }
2060
+
2061
+ .materials,
2062
+ .inspectors {
2063
+ padding-inline: 9px;
2064
+ }
2065
+
2066
+ .canvas {
2067
+ padding: 9px;
2068
+ }
2069
+
2070
+ .stage-header {
2071
+ padding-inline: 11px;
2072
+ }
2073
+
2074
+ .stage-header h2 {
2075
+ font-size: 13px;
2076
+ }
2077
+
2078
+ .stage-badge {
2079
+ padding-inline: 6px;
2080
+ }
2081
+
2082
+ .stage-badge i {
2083
+ display: none;
2084
+ }
2085
+
2086
+ .material-source {
2087
+ align-items: flex-start;
2088
+ }
2089
+
2090
+ .material-source > span:nth-child(2) small,
2091
+ .breakpoint-button small,
2092
+ .panel-tip {
2093
+ display: none;
2094
+ }
2095
+
2096
+ .topbar {
2097
+ gap: 8px;
2098
+ padding-inline: 10px;
2099
+ }
2100
+
2101
+ .topbar-center {
2102
+ order: 3;
2103
+ flex: 1 1 100%;
2104
+ }
2105
+
2106
+ .topbar {
2107
+ flex-wrap: wrap;
2108
+ }
2109
+
2110
+ .actions {
2111
+ margin-left: auto;
2112
+ }
2113
+
2114
+ .breakpoint-tabs {
2115
+ display: none;
2116
+ }
2117
+
2118
+ .layout-card {
2119
+ padding: 10px;
2120
+ }
2121
+
2122
+ .layout-card__footer {
2123
+ padding-top: 7px;
2124
+ }
2125
+ }
2126
+
2127
+ .layout-demo[data-theme="dark"] {
2128
+ --ink: #edf2ff;
2129
+ --muted: #93a1bb;
2130
+ --line: #2d3a50;
2131
+ --line-strong: #43516a;
2132
+ --panel: #151e2e;
2133
+ --canvas: #0e1625;
2134
+ --topbar: rgb(17 25 39 / 94%);
2135
+ --stage: #172235;
2136
+ --stage-header: rgb(24 36 56 / 96%);
2137
+ --card: #1d2a40;
2138
+ --card-line: #3b4b68;
2139
+ --checker-a: #1a2638;
2140
+ --checker-b: #223047;
2141
+ --accent: #90a2ff;
2142
+ --accent-soft: #29345d;
2143
+ --shadow: 0 18px 42px rgb(0 0 0 / 28%);
2144
+ background: var(--canvas);
2145
+ }
2146
+
2147
+ .layout-demo[data-theme="dark"] .route-tabs,
2148
+ .layout-demo[data-theme="dark"] .breakpoint-tabs {
2149
+ background: #1b273b;
2150
+ }
2151
+
2152
+ .layout-demo[data-theme="dark"] .topbar-center__shell {
2153
+ background: #151f31;
2154
+ border-color: #2d3a50;
2155
+ box-shadow: 0 8px 20px rgb(0 0 0 / 18%);
2156
+ }
2157
+
2158
+ .layout-demo[data-theme="dark"] .workspace-mode,
2159
+ .layout-demo[data-theme="dark"] .development-mode,
2160
+ .layout-demo[data-theme="dark"] .device-select,
2161
+ .layout-demo[data-theme="dark"] .canvas-device-control,
2162
+ .layout-demo[data-theme="dark"] .orientation-button {
2163
+ background: #1b273b;
2164
+ color: #a7b3c9;
2165
+ }
2166
+
2167
+ .layout-demo[data-theme="dark"] .workspace-mode {
2168
+ background: transparent;
2169
+ color: #b7c2ff;
2170
+ }
2171
+
2172
+ .layout-demo[data-theme="dark"] .development-mode:hover,
2173
+ .layout-demo[data-theme="dark"] .development-mode.is-open {
2174
+ border-color: #455aab;
2175
+ background: #25324b;
2176
+ color: var(--accent);
2177
+ }
2178
+
2179
+ .layout-demo[data-theme="dark"] .workspace-mode__hint {
2180
+ border-color: #34435d;
2181
+ color: #8190aa;
2182
+ }
2183
+
2184
+ .layout-demo[data-theme="dark"] .device-select:hover,
2185
+ .layout-demo[data-theme="dark"] .device-select.is-open,
2186
+ .layout-demo[data-theme="dark"] .canvas-device-control:hover,
2187
+ .layout-demo[data-theme="dark"] .canvas-device-control.is-open,
2188
+ .layout-demo[data-theme="dark"] .orientation-button:hover,
2189
+ .layout-demo[data-theme="dark"] .orientation-button[aria-pressed="true"] {
2190
+ border-color: #455aab;
2191
+ background: #25324b;
2192
+ color: var(--accent);
2193
+ }
2194
+
2195
+ .layout-demo[data-theme="dark"] .custom-select__menu {
2196
+ border-color: #36455f;
2197
+ background: #17243a;
2198
+ box-shadow: 0 16px 34px rgb(0 0 0 / 32%);
2199
+ }
2200
+
2201
+ .layout-demo[data-theme="dark"] .custom-select__option:hover,
2202
+ .layout-demo[data-theme="dark"] .custom-select__option[aria-selected="true"] {
2203
+ background: #26365b;
2204
+ color: #c5ceff;
2205
+ }
2206
+
2207
+ .layout-demo[data-theme="dark"] .preview-open-button {
2208
+ border-color: #455aab !important;
2209
+ background: #202d4d !important;
2210
+ color: #c5ceff !important;
2211
+ }
2212
+
2213
+ .layout-demo[data-theme="dark"] .route-tabs button,
2214
+ .layout-demo[data-theme="dark"] .breakpoint-tab {
2215
+ color: #a7b3c9;
2216
+ }
2217
+
2218
+ .layout-demo[data-theme="dark"] .route-tabs button:hover,
2219
+ .layout-demo[data-theme="dark"] .breakpoint-tab:hover,
2220
+ .layout-demo[data-theme="dark"] .route-tabs button[aria-current="page"],
2221
+ .layout-demo[data-theme="dark"] .breakpoint-tab[aria-pressed="true"] {
2222
+ background: #25324b;
2223
+ color: var(--accent);
2224
+ }
2225
+
2226
+ .layout-demo[data-theme="dark"] .actions button:hover:not(:disabled),
2227
+ .layout-demo[data-theme="dark"] .canvas-tool-button:hover {
2228
+ background: #273552;
2229
+ color: var(--accent);
2230
+ }
2231
+
2232
+ .layout-demo[data-theme="dark"] .material-source {
2233
+ background: #1b293e;
2234
+ border-color: var(--line);
2235
+ box-shadow: 0 6px 16px rgb(0 0 0 / 18%);
2236
+ }
2237
+
2238
+ .layout-demo[data-theme="dark"] .material-search {
2239
+ background: #17243a;
2240
+ }
2241
+
2242
+ .layout-demo[data-theme="dark"] .material-select {
2243
+ background: #1b293e;
2244
+ }
2245
+
2246
+ .layout-demo[data-theme="dark"] .material-filter-reset:hover {
2247
+ background: #26365b;
2248
+ }
2249
+
2250
+ .layout-demo[data-theme="dark"] .material-category-button:hover,
2251
+ .layout-demo[data-theme="dark"] .material-category-button.active {
2252
+ background: #26365b;
2253
+ }
2254
+
2255
+ .layout-demo[data-theme="dark"] .material-source:hover {
2256
+ background: #22324e;
2257
+ border-color: #5c6fbb;
2258
+ }
2259
+
2260
+ .layout-demo[data-theme="dark"] .panel-count,
2261
+ .layout-demo[data-theme="dark"] .breakpoint-button[aria-pressed="true"] {
2262
+ background: var(--accent-soft);
2263
+ }
2264
+
2265
+ .layout-demo[data-theme="dark"] .breakpoint-button {
2266
+ color: #a0aec5;
2267
+ }
2268
+
2269
+ .layout-demo[data-theme="dark"] .breakpoint-button:hover {
2270
+ background: #202e47;
2271
+ }
2272
+
2273
+ .layout-demo[data-theme="dark"] .panel-tip {
2274
+ background: #1a2639;
2275
+ color: #8999b5;
2276
+ }
2277
+
2278
+ .layout-demo[data-theme="dark"] .stage-badge {
2279
+ background: #1f2d45;
2280
+ }
2281
+
2282
+ .layout-demo[data-theme="dark"] .layout-card {
2283
+ background: var(--card);
2284
+ color: var(--ink);
2285
+ box-shadow:
2286
+ 0 12px 26px rgb(0 0 0 / 20%),
2287
+ inset 0 1px 0 rgb(255 255 255 / 4%);
2288
+ }
2289
+
2290
+ .layout-demo[data-theme="dark"] .layout-card__action {
2291
+ border-color: #40516e;
2292
+ background: #1b2940;
2293
+ color: #a8b6d0;
2294
+ }
2295
+
2296
+ .layout-demo[data-theme="dark"] .layout-card__title {
2297
+ color: #eef3ff;
2298
+ }
2299
+
2300
+ .layout-demo[data-theme="dark"] .layout-card__value {
2301
+ color: #dbe3ff;
2302
+ }
2303
+
2304
+ .layout-demo[data-theme="dark"] .layout-card__meta,
2305
+ .layout-demo[data-theme="dark"] .layout-card__footer {
2306
+ color: #9caac1;
2307
+ }
2308
+
2309
+ .layout-demo[data-theme="dark"] .layout-editor-grid::after {
2310
+ color: #7889a5;
2311
+ }
2312
+
2313
+ .layout-demo[data-theme="dark"] .inspectors {
2314
+ background: #101827;
2315
+ color: #e9eff9;
2316
+ border-left-color: rgb(10 19 34 / 12%);
2317
+ }
2318
+
2319
+ .layout-demo[data-theme="dark"] .copy-code-button,
2320
+ .layout-demo[data-theme="dark"] .download-code-button {
2321
+ border-color: rgb(153 170 210 / 16%);
2322
+ background: rgb(117 137 255 / 12%);
2323
+ color: #aab5ff;
2324
+ }
2325
+
2326
+ .layout-demo[data-theme="dark"] .copy-code-button:hover,
2327
+ .layout-demo[data-theme="dark"] .download-code-button:hover {
2328
+ border-color: rgb(153 170 210 / 34%);
2329
+ background: rgb(117 137 255 / 22%);
2330
+ color: #fff;
2331
+ }
2332
+
2333
+ .layout-demo[data-theme="dark"] .code-block {
2334
+ background: #192438;
2335
+ color: #cad5ea;
2336
+ border-color: rgb(153 170 210 / 12%);
2337
+ }
2338
+
2339
+ .layout-demo[data-theme="dark"] .code-token-comment {
2340
+ color: #71819e;
2341
+ }
2342
+
2343
+ .layout-demo[data-theme="dark"] .code-token-tag,
2344
+ .layout-demo[data-theme="dark"] .code-token-keyword {
2345
+ color: #c4b5fd;
2346
+ }
2347
+
2348
+ .layout-demo[data-theme="dark"] .code-token-attribute,
2349
+ .layout-demo[data-theme="dark"] .code-token-property {
2350
+ color: #80d8ee;
2351
+ }
2352
+
2353
+ .layout-demo[data-theme="dark"] .code-token-string {
2354
+ color: #f3b18a;
2355
+ }
2356
+
2357
+ .layout-demo[data-theme="dark"] .code-token-number,
2358
+ .layout-demo[data-theme="dark"] .code-token-constant {
2359
+ color: #f3a6cb;
2360
+ }
2361
+
2362
+ .layout-demo[data-theme="dark"] .code-status {
2363
+ color: #7f8da6;
2364
+ }
2365
+
2366
+ .layout-demo[data-theme="dark"] .mode-button {
2367
+ border-color: #5265b8 !important;
2368
+ background: #27345c !important;
2369
+ color: #c5ceff !important;
2370
+ }