@composy/layout-vue 0.0.1 → 0.0.2

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 (157) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +82 -75
  3. package/dist/index.css +9 -3
  4. package/dist/index.js +22 -11
  5. package/dist/index.js.map +1 -1
  6. package/dist/index.min.css +1 -1
  7. package/dist/index.min.js +2038 -1
  8. package/dist/index.min.js.map +1 -0
  9. package/es/.dts-output-manifest.json +1 -0
  10. package/es/.dts.tsbuildinfo +1 -0
  11. package/es/components/LGrid.d.ts +0 -1
  12. package/es/components/LGrid.js +3 -3
  13. package/es/components/LGrid.js.map +1 -1
  14. package/es/components/LGridItem.d.ts +0 -1
  15. package/es/components/LGridItem.d.ts.map +1 -1
  16. package/es/components/LGridItem.js +4 -2
  17. package/es/components/LGridItem.js.map +1 -1
  18. package/es/components/LLayoutEditor.d.ts +5 -5
  19. package/es/components/LLayoutEditor.d.ts.map +1 -1
  20. package/es/components/LLayoutEditor.js +2 -2
  21. package/es/components/LLayoutEditor.js.map +1 -1
  22. package/es/components/LLayoutWorkspace.js +1 -1
  23. package/es/components/LLayoutWorkspace.js.map +1 -1
  24. package/es/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.js +8 -5
  25. package/es/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/es/components/LMaterialDragSource.d.ts +0 -1
  27. package/es/components/LMaterialDragSource.js +1 -1
  28. package/es/components/LMaterialRenderer.d.ts +0 -1
  29. package/es/components/LMaterialRenderer.js +1 -1
  30. package/es/components/LMetricCard.d.ts +0 -1
  31. package/es/components/LMetricCard.js +1 -1
  32. package/es/components/LTrendCard.d.ts +0 -1
  33. package/es/components/LTrendCard.js +1 -1
  34. package/es/components/index.d.ts +0 -1
  35. package/es/components/index.js +3 -3
  36. package/es/components/material-renderer.d.ts +0 -1
  37. package/es/components/material-renderer.d.ts.map +1 -1
  38. package/es/components/material-renderer.js +10 -3
  39. package/es/components/material-renderer.js.map +1 -1
  40. package/es/composables/index.d.ts +0 -1
  41. package/es/composables/index.js +1 -1
  42. package/es/composables/useLayoutEditor.d.ts +0 -1
  43. package/es/composables/useLayoutEditor.js +1 -1
  44. package/es/index.d.ts +0 -1
  45. package/es/index.js +3 -5
  46. package/es/style/css.js +1 -1
  47. package/es/style/index.css +1 -0
  48. package/es/style/index.js +1 -1
  49. package/es/style/workspace.css +18 -2
  50. package/es/types.d.ts +0 -1
  51. package/es/types.js +1 -1
  52. package/esm/components/LGrid.d.ts.map +1 -0
  53. package/esm/components/LGrid.js +91 -0
  54. package/esm/components/LGrid.js.map +1 -0
  55. package/esm/components/LGridItem.d.ts.map +1 -0
  56. package/esm/components/LGridItem.js +54 -0
  57. package/esm/components/LGridItem.js.map +1 -0
  58. package/esm/components/LLayoutEditor.d.ts +50 -0
  59. package/esm/components/LLayoutEditor.d.ts.map +1 -0
  60. package/esm/components/LLayoutEditor.js +81 -0
  61. package/esm/components/LLayoutEditor.js.map +1 -0
  62. package/esm/components/LLayoutWorkspace.js +17 -0
  63. package/esm/components/LLayoutWorkspace.js.map +1 -0
  64. package/esm/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.js +2220 -0
  65. package/esm/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.js.map +1 -0
  66. package/esm/components/LMaterialDragSource.d.ts.map +1 -0
  67. package/esm/components/LMaterialDragSource.js +92 -0
  68. package/esm/components/LMaterialDragSource.js.map +1 -0
  69. package/esm/components/LMaterialRenderer.d.ts.map +1 -0
  70. package/esm/components/LMaterialRenderer.js +48 -0
  71. package/esm/components/LMaterialRenderer.js.map +1 -0
  72. package/esm/components/LMetricCard.d.ts.map +1 -0
  73. package/esm/components/LMetricCard.js +39 -0
  74. package/esm/components/LMetricCard.js.map +1 -0
  75. package/esm/components/LTrendCard.d.ts.map +1 -0
  76. package/esm/components/LTrendCard.js +36 -0
  77. package/esm/components/LTrendCard.js.map +1 -0
  78. package/esm/components/index.d.ts.map +1 -0
  79. package/esm/components/index.js +19 -0
  80. package/esm/components/material-renderer.d.ts.map +1 -0
  81. package/esm/components/material-renderer.js +103 -0
  82. package/esm/components/material-renderer.js.map +1 -0
  83. package/esm/composables/index.d.ts.map +1 -0
  84. package/esm/composables/index.js +12 -0
  85. package/esm/composables/useLayoutEditor.d.ts.map +1 -0
  86. package/esm/composables/useLayoutEditor.js +22 -0
  87. package/esm/composables/useLayoutEditor.js.map +1 -0
  88. package/esm/index.d.ts.map +1 -0
  89. package/esm/index.js +22 -0
  90. package/esm/style/css.js +1 -0
  91. package/esm/style/index.js +1 -0
  92. package/{es → esm}/style/index.less +1 -1
  93. package/esm/style/workspace.css +2379 -0
  94. package/esm/types.d.ts.map +1 -0
  95. package/esm/types.js +10 -0
  96. package/lib/components/LGrid.cjs +3 -3
  97. package/lib/components/LGrid.cjs.map +1 -1
  98. package/lib/components/LGrid.d.cts +2 -0
  99. package/lib/components/LGrid.d.cts.map +1 -0
  100. package/lib/components/LGridItem.cjs +4 -2
  101. package/lib/components/LGridItem.cjs.map +1 -1
  102. package/lib/components/LGridItem.d.cts +51 -0
  103. package/lib/components/LGridItem.d.cts.map +1 -0
  104. package/lib/components/LLayoutEditor.cjs +2 -2
  105. package/lib/components/LLayoutEditor.cjs.map +1 -1
  106. package/lib/components/{LLayoutEditor.d.ts → LLayoutEditor.d.cts} +5 -5
  107. package/lib/components/LLayoutEditor.d.cts.map +1 -0
  108. package/lib/components/LLayoutWorkspace.cjs +1 -1
  109. package/lib/components/LLayoutWorkspace.cjs.map +1 -1
  110. package/lib/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.cjs +8 -5
  111. package/lib/components/LLayoutWorkspace.vue_vue_type_script_setup_true_lang.cjs.map +1 -1
  112. package/lib/components/LMaterialDragSource.cjs +1 -1
  113. package/lib/components/LMaterialDragSource.d.cts +54 -0
  114. package/lib/components/LMaterialDragSource.d.cts.map +1 -0
  115. package/lib/components/LMaterialRenderer.cjs +1 -1
  116. package/lib/components/LMaterialRenderer.d.cts +62 -0
  117. package/lib/components/LMaterialRenderer.d.cts.map +1 -0
  118. package/lib/components/LMetricCard.cjs +1 -1
  119. package/lib/components/LMetricCard.d.cts +28 -0
  120. package/lib/components/LMetricCard.d.cts.map +1 -0
  121. package/lib/components/LTrendCard.cjs +1 -1
  122. package/lib/components/LTrendCard.d.cts +16 -0
  123. package/lib/components/LTrendCard.d.cts.map +1 -0
  124. package/lib/components/index.cjs +1 -1
  125. package/lib/components/index.d.cts +9 -0
  126. package/lib/components/index.d.cts.map +1 -0
  127. package/lib/components/material-renderer.cjs +10 -3
  128. package/lib/components/material-renderer.cjs.map +1 -1
  129. package/lib/components/material-renderer.d.cts +25 -0
  130. package/lib/components/material-renderer.d.cts.map +1 -0
  131. package/lib/composables/index.cjs +1 -1
  132. package/lib/composables/index.d.cts +1 -0
  133. package/lib/composables/index.d.cts.map +1 -0
  134. package/lib/composables/useLayoutEditor.cjs +1 -1
  135. package/lib/composables/useLayoutEditor.d.cts +2 -0
  136. package/lib/composables/useLayoutEditor.d.cts.map +1 -0
  137. package/lib/index.cjs +1 -1
  138. package/lib/index.d.cts +6 -0
  139. package/lib/index.d.cts.map +1 -0
  140. package/lib/style/index.css +0 -1
  141. package/lib/style/workspace.css +9 -1
  142. package/lib/types.cjs +1 -1
  143. package/lib/types.d.cts +25 -0
  144. package/lib/types.d.cts.map +1 -0
  145. package/package.json +25 -18
  146. /package/{lib → esm}/components/LGrid.d.ts +0 -0
  147. /package/{lib → esm}/components/LGridItem.d.ts +0 -0
  148. /package/{lib → esm}/components/LMaterialDragSource.d.ts +0 -0
  149. /package/{lib → esm}/components/LMaterialRenderer.d.ts +0 -0
  150. /package/{lib → esm}/components/LMetricCard.d.ts +0 -0
  151. /package/{lib → esm}/components/LTrendCard.d.ts +0 -0
  152. /package/{lib → esm}/components/index.d.ts +0 -0
  153. /package/{lib → esm}/components/material-renderer.d.ts +0 -0
  154. /package/{lib → esm}/composables/index.d.ts +0 -0
  155. /package/{lib → esm}/composables/useLayoutEditor.d.ts +0 -0
  156. /package/{lib → esm}/index.d.ts +0 -0
  157. /package/{lib → esm}/types.d.ts +0 -0
@@ -0,0 +1,2379 @@
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
+ /* The editor keeps a native runtime container mounted for fast framework
1386
+ * switching. Vue mode renders the adapter grid in the same stage, so the
1387
+ * native container must stay out of layout flow until Web Component mode is
1388
+ * selected. */
1389
+ .runtime-preview-stage[data-preview-framework="vue"] > .runtime-preview-grid,
1390
+ .vanilla-runtime-stage[data-preview-framework="vue"] > .runtime-preview-grid {
1391
+ display: none !important;
1392
+ }
1393
+
1394
+ .layout-item-shell,
1395
+ .layout-card {
1396
+ position: relative;
1397
+ width: 100%;
1398
+ height: 100%;
1399
+ min-width: 0;
1400
+ min-height: 0;
1401
+ }
1402
+
1403
+ .layout-item-shell {
1404
+ display: block;
1405
+ padding: 0;
1406
+ overflow: hidden;
1407
+ border: 0;
1408
+ background: transparent;
1409
+ color: inherit;
1410
+ }
1411
+
1412
+ .layout-item-shell--interactive {
1413
+ cursor: pointer;
1414
+ }
1415
+
1416
+ .layout-card {
1417
+ min-height: 84px;
1418
+ padding: 14px;
1419
+ display: flex;
1420
+ flex-direction: column;
1421
+ overflow: hidden;
1422
+ border: 1px solid var(--card-line);
1423
+ border-radius: 12px;
1424
+ background:
1425
+ linear-gradient(145deg, rgb(255 255 255 / 98%), rgb(248 249 255 / 94%)),
1426
+ var(--card);
1427
+ color: var(--ink);
1428
+ box-shadow:
1429
+ 0 10px 24px rgb(71 86 132 / 9%),
1430
+ inset 0 1px 0 rgb(255 255 255 / 80%);
1431
+ transition:
1432
+ border-color 160ms ease,
1433
+ box-shadow 160ms ease,
1434
+ transform 160ms ease;
1435
+ }
1436
+
1437
+ .layout-card__actions {
1438
+ position: absolute;
1439
+ z-index: 2;
1440
+ top: 9px;
1441
+ right: 9px;
1442
+ display: flex;
1443
+ align-items: center;
1444
+ gap: 3px;
1445
+ opacity: 0;
1446
+ transform: translateY(-3px);
1447
+ pointer-events: none;
1448
+ transition:
1449
+ opacity 140ms ease,
1450
+ transform 140ms ease;
1451
+ isolation: isolate;
1452
+ }
1453
+
1454
+ .layout-editor-grid .grid-stack-item:hover .layout-card__actions,
1455
+ .layout-editor-grid .grid-stack-item.is-selected .layout-card__actions {
1456
+ opacity: 1;
1457
+ transform: translateY(0);
1458
+ pointer-events: auto;
1459
+ }
1460
+
1461
+ .layout-card__action {
1462
+ position: relative;
1463
+ z-index: 3;
1464
+ width: 24px;
1465
+ height: 24px;
1466
+ display: grid;
1467
+ place-items: center;
1468
+ padding: 0;
1469
+ border: 1px solid var(--line);
1470
+ border-radius: 7px;
1471
+ background: color-mix(in srgb, var(--panel) 94%, transparent);
1472
+ color: var(--muted);
1473
+ cursor: pointer;
1474
+ pointer-events: auto;
1475
+ box-shadow: 0 3px 8px rgb(37 53 91 / 10%);
1476
+ transition:
1477
+ color 140ms ease,
1478
+ border-color 140ms ease,
1479
+ background 140ms ease,
1480
+ transform 140ms ease;
1481
+ }
1482
+
1483
+ .layout-card__action:hover {
1484
+ border-color: #9aa9ff;
1485
+ background: var(--accent-soft);
1486
+ color: var(--accent);
1487
+ transform: translateY(-1px);
1488
+ }
1489
+
1490
+ .layout-card__meta,
1491
+ .layout-card__footer {
1492
+ display: flex;
1493
+ align-items: center;
1494
+ justify-content: space-between;
1495
+ gap: 8px;
1496
+ }
1497
+
1498
+ .layout-card__meta {
1499
+ color: #8590a5;
1500
+ font-size: 10px;
1501
+ }
1502
+
1503
+ .layout-card__type {
1504
+ color: var(--accent);
1505
+ font-weight: 700;
1506
+ }
1507
+
1508
+ .layout-card__status {
1509
+ padding: 2px 5px;
1510
+ border-radius: 4px;
1511
+ background: #edf8f3;
1512
+ color: #4aaf84;
1513
+ white-space: nowrap;
1514
+ }
1515
+
1516
+ .layout-card__title {
1517
+ margin: 10px 0 7px;
1518
+ overflow: hidden;
1519
+ color: #273249;
1520
+ font-size: 13px;
1521
+ font-weight: 700;
1522
+ line-height: 1.35;
1523
+ text-overflow: ellipsis;
1524
+ white-space: nowrap;
1525
+ }
1526
+
1527
+ .layout-card__value {
1528
+ display: block;
1529
+ color: #25345a;
1530
+ font-size: clamp(20px, 2.2vw, 30px);
1531
+ line-height: 1;
1532
+ letter-spacing: -0.04em;
1533
+ }
1534
+
1535
+ .layout-card__chart {
1536
+ height: 36px;
1537
+ display: flex;
1538
+ align-items: flex-end;
1539
+ gap: 5px;
1540
+ padding: 0 3px;
1541
+ }
1542
+
1543
+ .layout-card__chart i {
1544
+ width: 100%;
1545
+ border-radius: 4px 4px 1px 1px;
1546
+ background: linear-gradient(180deg, #8b9cff, #5e72ed);
1547
+ }
1548
+
1549
+ .layout-card__chart i:nth-child(1) {
1550
+ height: 38%;
1551
+ }
1552
+ .layout-card__chart i:nth-child(2) {
1553
+ height: 62%;
1554
+ }
1555
+ .layout-card__chart i:nth-child(3) {
1556
+ height: 48%;
1557
+ }
1558
+ .layout-card__chart i:nth-child(4) {
1559
+ height: 82%;
1560
+ }
1561
+ .layout-card__chart i:nth-child(5) {
1562
+ height: 100%;
1563
+ }
1564
+
1565
+ .layout-card__footer {
1566
+ margin-top: auto;
1567
+ padding-top: 12px;
1568
+ color: #9aa3b4;
1569
+ font-size: 10px;
1570
+ }
1571
+
1572
+ .layout-card__spark {
1573
+ color: #56b78e;
1574
+ font-size: 15px;
1575
+ font-weight: 700;
1576
+ }
1577
+
1578
+ .widget.selected .layout-card,
1579
+ .layout-item-shell[aria-pressed="true"] .layout-card {
1580
+ border-color: #8392f6;
1581
+ box-shadow:
1582
+ 0 0 0 2px rgb(83 109 241 / 18%),
1583
+ 0 10px 22px rgb(71 86 132 / 12%);
1584
+ }
1585
+
1586
+ .layout-editor-grid .grid-stack-item:hover .layout-card,
1587
+ .layout-item-shell--interactive:hover .layout-card {
1588
+ border-color: #aab6f7;
1589
+ box-shadow:
1590
+ 0 0 0 2px rgb(83 109 241 / 12%),
1591
+ 0 14px 28px rgb(71 86 132 / 14%);
1592
+ }
1593
+
1594
+ .inspectors {
1595
+ padding: 18px 14px;
1596
+ display: flex;
1597
+ flex-direction: column;
1598
+ gap: 12px;
1599
+ background: var(--panel);
1600
+ color: var(--ink);
1601
+ border-left: 1px solid var(--line);
1602
+ overflow: auto;
1603
+ }
1604
+
1605
+ .inspector-heading {
1606
+ align-items: center;
1607
+ padding: 2px 3px 0;
1608
+ flex: 0 0 auto;
1609
+ }
1610
+
1611
+ .inspector-heading > div:first-child {
1612
+ min-width: 0;
1613
+ flex: 1;
1614
+ }
1615
+
1616
+ .inspector-heading h2 {
1617
+ color: var(--ink);
1618
+ }
1619
+
1620
+ .inspector-heading .eyebrow {
1621
+ color: var(--muted);
1622
+ }
1623
+
1624
+ .inspector-icon {
1625
+ background: var(--accent-soft);
1626
+ color: var(--accent);
1627
+ font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
1628
+ }
1629
+
1630
+ .copy-code-button {
1631
+ width: 30px;
1632
+ height: 30px;
1633
+ display: grid;
1634
+ place-items: center;
1635
+ border: 1px solid var(--line);
1636
+ border-radius: 8px;
1637
+ background: var(--accent-soft);
1638
+ color: var(--accent);
1639
+ cursor: pointer;
1640
+ transition: 140ms ease;
1641
+ }
1642
+
1643
+ .copy-code-button:hover {
1644
+ border-color: color-mix(in srgb, var(--accent) 45%, var(--line));
1645
+ background: color-mix(in srgb, var(--accent-soft) 72%, #fff);
1646
+ color: var(--accent);
1647
+ }
1648
+
1649
+ .download-code-button {
1650
+ width: 30px;
1651
+ height: 30px;
1652
+ display: grid;
1653
+ place-items: center;
1654
+ border: 1px solid var(--line);
1655
+ border-radius: 8px;
1656
+ background: var(--accent-soft);
1657
+ color: var(--accent);
1658
+ cursor: pointer;
1659
+ transition: 140ms ease;
1660
+ }
1661
+
1662
+ .download-code-button:hover {
1663
+ border-color: color-mix(in srgb, var(--accent) 45%, var(--line));
1664
+ background: color-mix(in srgb, var(--accent-soft) 72%, #fff);
1665
+ color: var(--accent);
1666
+ }
1667
+
1668
+ .code-block {
1669
+ min-height: 0;
1670
+ height: 0;
1671
+ flex: 1 1 0;
1672
+ margin: 0;
1673
+ padding: 12px;
1674
+ overflow: auto;
1675
+ border: 1px solid var(--line);
1676
+ border-radius: 9px;
1677
+ background: #f7f9fc;
1678
+ color: #263653;
1679
+ font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
1680
+ font-size: 11px;
1681
+ line-height: 1.65;
1682
+ tab-size: 2;
1683
+ white-space: pre;
1684
+ scrollbar-width: thin;
1685
+ }
1686
+
1687
+ .code-block code {
1688
+ display: block;
1689
+ min-width: max-content;
1690
+ color: inherit;
1691
+ }
1692
+
1693
+ .code-token-comment {
1694
+ color: #8b96a8;
1695
+ font-style: italic;
1696
+ }
1697
+
1698
+ .code-token-tag,
1699
+ .code-token-keyword {
1700
+ color: #7257d8;
1701
+ }
1702
+
1703
+ .code-token-attribute,
1704
+ .code-token-property {
1705
+ color: #197d9a;
1706
+ }
1707
+
1708
+ .code-token-string {
1709
+ color: #b05b2b;
1710
+ }
1711
+
1712
+ .code-token-number,
1713
+ .code-token-constant {
1714
+ color: #b43d78;
1715
+ }
1716
+
1717
+ .code-status {
1718
+ display: flex;
1719
+ align-items: center;
1720
+ gap: 7px;
1721
+ padding: 0 3px 2px;
1722
+ flex: 0 0 auto;
1723
+ color: var(--muted);
1724
+ font-size: 10px;
1725
+ line-height: 1.4;
1726
+ }
1727
+
1728
+ .material-card-actions {
1729
+ display: inline-flex;
1730
+ align-items: center;
1731
+ gap: 3px;
1732
+ justify-self: end;
1733
+ }
1734
+
1735
+ .material-code-button {
1736
+ width: 25px;
1737
+ height: 25px;
1738
+ display: grid;
1739
+ place-items: center;
1740
+ padding: 0;
1741
+ border: 1px solid transparent;
1742
+ border-radius: 7px;
1743
+ background: transparent;
1744
+ color: var(--muted);
1745
+ cursor: pointer;
1746
+ transition: 140ms ease;
1747
+ }
1748
+
1749
+ .material-code-button:hover,
1750
+ .material-code-button:focus-visible {
1751
+ border-color: color-mix(in srgb, var(--accent) 28%, var(--line));
1752
+ background: var(--accent-soft);
1753
+ color: var(--accent);
1754
+ outline: none;
1755
+ }
1756
+
1757
+ .code-status__dot {
1758
+ width: 6px;
1759
+ height: 6px;
1760
+ flex: 0 0 6px;
1761
+ border-radius: 50%;
1762
+ background: #60c99b;
1763
+ box-shadow: 0 0 0 3px rgb(96 201 155 / 14%);
1764
+ }
1765
+
1766
+ .preview-dialog {
1767
+ --ink: #172033;
1768
+ --muted: #768198;
1769
+ --line: #dce3ed;
1770
+ --panel: #fff;
1771
+ --canvas: #f5f7fb;
1772
+ --stage: #fff;
1773
+ --card: #fff;
1774
+ --card-line: #d8def0;
1775
+ --accent: #536df1;
1776
+ --accent-soft: #eef0ff;
1777
+ position: fixed;
1778
+ inset: 0;
1779
+ z-index: 100;
1780
+ display: grid;
1781
+ place-items: center;
1782
+ padding: 28px;
1783
+ color: var(--ink);
1784
+ }
1785
+
1786
+ .preview-dialog-enter-active,
1787
+ .preview-dialog-leave-active {
1788
+ transition: opacity 180ms ease;
1789
+ }
1790
+
1791
+ .preview-dialog-enter-active .preview-dialog__panel,
1792
+ .preview-dialog-leave-active .preview-dialog__panel {
1793
+ transition:
1794
+ transform 220ms cubic-bezier(0.22, 1, 0.36, 1),
1795
+ opacity 180ms ease;
1796
+ }
1797
+
1798
+ .preview-dialog-enter-from,
1799
+ .preview-dialog-leave-to {
1800
+ opacity: 0;
1801
+ }
1802
+
1803
+ .preview-dialog-enter-from .preview-dialog__panel,
1804
+ .preview-dialog-leave-to .preview-dialog__panel {
1805
+ opacity: 0;
1806
+ transform: translateY(14px) scale(0.975);
1807
+ }
1808
+
1809
+ .preview-dialog__backdrop {
1810
+ position: absolute;
1811
+ inset: 0;
1812
+ border: 0;
1813
+ background: rgb(20 31 51 / 42%);
1814
+ cursor: default;
1815
+ backdrop-filter: blur(6px);
1816
+ }
1817
+
1818
+ .preview-dialog__panel {
1819
+ position: relative;
1820
+ z-index: 1;
1821
+ width: min(1080px, 100%);
1822
+ max-height: min(820px, calc(100vh - 56px));
1823
+ display: flex;
1824
+ flex-direction: column;
1825
+ overflow: hidden;
1826
+ border: 1px solid var(--line);
1827
+ border-radius: 18px;
1828
+ background: var(--panel);
1829
+ box-shadow: 0 28px 80px rgb(31 46 78 / 26%);
1830
+ }
1831
+
1832
+ .preview-dialog__header,
1833
+ .preview-dialog__footer {
1834
+ flex: 0 0 auto;
1835
+ display: flex;
1836
+ align-items: center;
1837
+ justify-content: space-between;
1838
+ gap: 16px;
1839
+ padding: 15px 18px;
1840
+ border-bottom: 1px solid var(--line);
1841
+ }
1842
+
1843
+ .preview-dialog__header h2 {
1844
+ margin: 4px 0 0;
1845
+ font-size: 17px;
1846
+ }
1847
+
1848
+ .preview-dialog__header-meta {
1849
+ display: flex;
1850
+ align-items: center;
1851
+ gap: 8px;
1852
+ }
1853
+
1854
+ .preview-dialog__header .icon-button {
1855
+ width: 32px;
1856
+ height: 32px;
1857
+ display: grid;
1858
+ place-items: center;
1859
+ border: 1px solid var(--line);
1860
+ border-radius: 9px;
1861
+ background: var(--panel);
1862
+ color: var(--muted);
1863
+ cursor: pointer;
1864
+ transition: 140ms ease;
1865
+ }
1866
+
1867
+ .preview-dialog__header .icon-button:hover {
1868
+ border-color: var(--accent);
1869
+ background: var(--accent-soft);
1870
+ color: var(--accent);
1871
+ transform: rotate(6deg);
1872
+ }
1873
+
1874
+ .preview-dialog__body {
1875
+ min-height: 0;
1876
+ flex: 1 1 auto;
1877
+ overflow: auto;
1878
+ padding: 18px;
1879
+ background: var(--canvas);
1880
+ }
1881
+
1882
+ .preview-dialog__canvas {
1883
+ min-height: 520px;
1884
+ padding: 18px;
1885
+ border: 1px solid var(--line);
1886
+ border-radius: 14px;
1887
+ background: var(--stage);
1888
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 70%);
1889
+ }
1890
+
1891
+ .preview-dialog__canvas .ldesign-layout-grid {
1892
+ min-height: 480px;
1893
+ padding: 0;
1894
+ background: transparent;
1895
+ }
1896
+
1897
+ .preview-dialog__card {
1898
+ height: 100%;
1899
+ }
1900
+
1901
+ .preview-dialog__footer {
1902
+ border-top: 1px solid var(--line);
1903
+ border-bottom: 0;
1904
+ color: var(--muted);
1905
+ font-size: 11px;
1906
+ }
1907
+
1908
+ .preview-dialog__close-button {
1909
+ min-height: 32px;
1910
+ padding: 0 12px;
1911
+ border: 1px solid var(--line);
1912
+ border-radius: 8px;
1913
+ background: var(--accent-soft);
1914
+ color: var(--accent);
1915
+ cursor: pointer;
1916
+ font-size: 11px;
1917
+ font-weight: 700;
1918
+ }
1919
+
1920
+ .preview-dialog__close-button:hover {
1921
+ border-color: var(--accent);
1922
+ }
1923
+
1924
+ .material-code-dialog__panel {
1925
+ width: min(820px, 100%);
1926
+ }
1927
+
1928
+ .material-code-dialog__subtitle {
1929
+ margin: 5px 0 0;
1930
+ color: var(--muted);
1931
+ font-size: 11px;
1932
+ }
1933
+
1934
+ .material-code-dialog__body {
1935
+ min-height: 0;
1936
+ padding: 16px;
1937
+ }
1938
+
1939
+ .material-code-dialog__code {
1940
+ min-height: 360px;
1941
+ max-height: min(560px, calc(100vh - 250px));
1942
+ margin: 0;
1943
+ border: 1px solid var(--line);
1944
+ border-radius: 12px;
1945
+ background: color-mix(in srgb, var(--stage) 82%, var(--canvas));
1946
+ }
1947
+
1948
+ .material-code-dialog__actions {
1949
+ display: inline-flex;
1950
+ align-items: center;
1951
+ gap: 8px;
1952
+ }
1953
+
1954
+ .material-code-dialog__actions .copy-code-button {
1955
+ width: 32px;
1956
+ height: 32px;
1957
+ display: grid;
1958
+ place-items: center;
1959
+ padding: 0;
1960
+ border: 1px solid var(--line);
1961
+ border-radius: 8px;
1962
+ background: var(--panel);
1963
+ color: var(--muted);
1964
+ cursor: pointer;
1965
+ }
1966
+
1967
+ .material-code-dialog__actions .copy-code-button:hover {
1968
+ border-color: var(--accent);
1969
+ background: var(--accent-soft);
1970
+ color: var(--accent);
1971
+ }
1972
+
1973
+ .preview-dialog[data-theme="dark"] {
1974
+ --ink: #edf2ff;
1975
+ --muted: #95a3be;
1976
+ --line: #34405a;
1977
+ --panel: #192238;
1978
+ --canvas: #121a2d;
1979
+ --stage: #202b43;
1980
+ --card: #1d2940;
1981
+ --card-line: #405071;
1982
+ --accent: #8ea2ff;
1983
+ --accent-soft: #293762;
1984
+ }
1985
+
1986
+ .preview-dialog[data-theme="dark"] .preview-dialog__backdrop {
1987
+ background: rgb(4 8 18 / 64%);
1988
+ }
1989
+
1990
+ .preview-dialog[data-theme="dark"] .preview-dialog__canvas {
1991
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / 4%);
1992
+ }
1993
+
1994
+ .preview-dialog[data-theme="dark"] .layout-card {
1995
+ background:
1996
+ linear-gradient(145deg, rgb(39 53 80 / 98%), rgb(29 41 64 / 96%)),
1997
+ var(--card);
1998
+ box-shadow:
1999
+ 0 10px 24px rgb(2 8 22 / 30%),
2000
+ inset 0 1px 0 rgb(255 255 255 / 5%);
2001
+ }
2002
+
2003
+ .preview-dialog[data-theme="dark"] .layout-card__title {
2004
+ color: #edf2ff;
2005
+ }
2006
+
2007
+ .preview-dialog[data-theme="dark"] .layout-card__value {
2008
+ color: #dbe4ff;
2009
+ }
2010
+
2011
+ .preview-dialog[data-theme="dark"] .layout-card__meta,
2012
+ .preview-dialog[data-theme="dark"] .layout-card__footer {
2013
+ color: #a8b6d0;
2014
+ }
2015
+
2016
+ @media (max-width: 1080px) {
2017
+ .workspace {
2018
+ grid-template-columns: minmax(190px, 230px) minmax(0, 1fr) minmax(
2019
+ 260px,
2020
+ 320px
2021
+ );
2022
+ }
2023
+
2024
+ .topbar {
2025
+ gap: 10px;
2026
+ padding-inline: 12px;
2027
+ }
2028
+
2029
+ .brand {
2030
+ min-width: 132px;
2031
+ }
2032
+
2033
+ .route-tabs button {
2034
+ padding-inline: 7px;
2035
+ }
2036
+
2037
+ .route-tabs button > span:last-child {
2038
+ display: none;
2039
+ }
2040
+
2041
+ .breakpoint-tab {
2042
+ padding-inline: 7px;
2043
+ }
2044
+
2045
+ .breakpoint-tab span {
2046
+ display: none;
2047
+ }
2048
+
2049
+ .canvas {
2050
+ padding: 14px;
2051
+ }
2052
+ }
2053
+
2054
+ @media (max-width: 720px) {
2055
+ .layout-demo {
2056
+ grid-template-rows: 70px minmax(0, 1fr);
2057
+ }
2058
+
2059
+ .brand-copy {
2060
+ display: none;
2061
+ }
2062
+
2063
+ .workspace {
2064
+ grid-template-columns: minmax(118px, 0.8fr) minmax(0, 1.8fr) minmax(
2065
+ 170px,
2066
+ 1fr
2067
+ );
2068
+ }
2069
+
2070
+ .materials,
2071
+ .inspectors {
2072
+ padding-inline: 9px;
2073
+ }
2074
+
2075
+ .canvas {
2076
+ padding: 9px;
2077
+ }
2078
+
2079
+ .stage-header {
2080
+ padding-inline: 11px;
2081
+ }
2082
+
2083
+ .stage-header h2 {
2084
+ font-size: 13px;
2085
+ }
2086
+
2087
+ .stage-badge {
2088
+ padding-inline: 6px;
2089
+ }
2090
+
2091
+ .stage-badge i {
2092
+ display: none;
2093
+ }
2094
+
2095
+ .material-source {
2096
+ align-items: flex-start;
2097
+ }
2098
+
2099
+ .material-source > span:nth-child(2) small,
2100
+ .breakpoint-button small,
2101
+ .panel-tip {
2102
+ display: none;
2103
+ }
2104
+
2105
+ .topbar {
2106
+ gap: 8px;
2107
+ padding-inline: 10px;
2108
+ }
2109
+
2110
+ .topbar-center {
2111
+ order: 3;
2112
+ flex: 1 1 100%;
2113
+ }
2114
+
2115
+ .topbar {
2116
+ flex-wrap: wrap;
2117
+ }
2118
+
2119
+ .actions {
2120
+ margin-left: auto;
2121
+ }
2122
+
2123
+ .breakpoint-tabs {
2124
+ display: none;
2125
+ }
2126
+
2127
+ .layout-card {
2128
+ padding: 10px;
2129
+ }
2130
+
2131
+ .layout-card__footer {
2132
+ padding-top: 7px;
2133
+ }
2134
+ }
2135
+
2136
+ .layout-demo[data-theme="dark"] {
2137
+ --ink: #edf2ff;
2138
+ --muted: #93a1bb;
2139
+ --line: #2d3a50;
2140
+ --line-strong: #43516a;
2141
+ --panel: #151e2e;
2142
+ --canvas: #0e1625;
2143
+ --topbar: rgb(17 25 39 / 94%);
2144
+ --stage: #172235;
2145
+ --stage-header: rgb(24 36 56 / 96%);
2146
+ --card: #1d2a40;
2147
+ --card-line: #3b4b68;
2148
+ --checker-a: #1a2638;
2149
+ --checker-b: #223047;
2150
+ --accent: #90a2ff;
2151
+ --accent-soft: #29345d;
2152
+ --shadow: 0 18px 42px rgb(0 0 0 / 28%);
2153
+ background: var(--canvas);
2154
+ }
2155
+
2156
+ .layout-demo[data-theme="dark"] .route-tabs,
2157
+ .layout-demo[data-theme="dark"] .breakpoint-tabs {
2158
+ background: #1b273b;
2159
+ }
2160
+
2161
+ .layout-demo[data-theme="dark"] .topbar-center__shell {
2162
+ background: #151f31;
2163
+ border-color: #2d3a50;
2164
+ box-shadow: 0 8px 20px rgb(0 0 0 / 18%);
2165
+ }
2166
+
2167
+ .layout-demo[data-theme="dark"] .workspace-mode,
2168
+ .layout-demo[data-theme="dark"] .development-mode,
2169
+ .layout-demo[data-theme="dark"] .device-select,
2170
+ .layout-demo[data-theme="dark"] .canvas-device-control,
2171
+ .layout-demo[data-theme="dark"] .orientation-button {
2172
+ background: #1b273b;
2173
+ color: #a7b3c9;
2174
+ }
2175
+
2176
+ .layout-demo[data-theme="dark"] .workspace-mode {
2177
+ background: transparent;
2178
+ color: #b7c2ff;
2179
+ }
2180
+
2181
+ .layout-demo[data-theme="dark"] .development-mode:hover,
2182
+ .layout-demo[data-theme="dark"] .development-mode.is-open {
2183
+ border-color: #455aab;
2184
+ background: #25324b;
2185
+ color: var(--accent);
2186
+ }
2187
+
2188
+ .layout-demo[data-theme="dark"] .workspace-mode__hint {
2189
+ border-color: #34435d;
2190
+ color: #8190aa;
2191
+ }
2192
+
2193
+ .layout-demo[data-theme="dark"] .device-select:hover,
2194
+ .layout-demo[data-theme="dark"] .device-select.is-open,
2195
+ .layout-demo[data-theme="dark"] .canvas-device-control:hover,
2196
+ .layout-demo[data-theme="dark"] .canvas-device-control.is-open,
2197
+ .layout-demo[data-theme="dark"] .orientation-button:hover,
2198
+ .layout-demo[data-theme="dark"] .orientation-button[aria-pressed="true"] {
2199
+ border-color: #455aab;
2200
+ background: #25324b;
2201
+ color: var(--accent);
2202
+ }
2203
+
2204
+ .layout-demo[data-theme="dark"] .custom-select__menu {
2205
+ border-color: #36455f;
2206
+ background: #17243a;
2207
+ box-shadow: 0 16px 34px rgb(0 0 0 / 32%);
2208
+ }
2209
+
2210
+ .layout-demo[data-theme="dark"] .custom-select__option:hover,
2211
+ .layout-demo[data-theme="dark"] .custom-select__option[aria-selected="true"] {
2212
+ background: #26365b;
2213
+ color: #c5ceff;
2214
+ }
2215
+
2216
+ .layout-demo[data-theme="dark"] .preview-open-button {
2217
+ border-color: #455aab !important;
2218
+ background: #202d4d !important;
2219
+ color: #c5ceff !important;
2220
+ }
2221
+
2222
+ .layout-demo[data-theme="dark"] .route-tabs button,
2223
+ .layout-demo[data-theme="dark"] .breakpoint-tab {
2224
+ color: #a7b3c9;
2225
+ }
2226
+
2227
+ .layout-demo[data-theme="dark"] .route-tabs button:hover,
2228
+ .layout-demo[data-theme="dark"] .breakpoint-tab:hover,
2229
+ .layout-demo[data-theme="dark"] .route-tabs button[aria-current="page"],
2230
+ .layout-demo[data-theme="dark"] .breakpoint-tab[aria-pressed="true"] {
2231
+ background: #25324b;
2232
+ color: var(--accent);
2233
+ }
2234
+
2235
+ .layout-demo[data-theme="dark"] .actions button:hover:not(:disabled),
2236
+ .layout-demo[data-theme="dark"] .canvas-tool-button:hover {
2237
+ background: #273552;
2238
+ color: var(--accent);
2239
+ }
2240
+
2241
+ .layout-demo[data-theme="dark"] .material-source {
2242
+ background: #1b293e;
2243
+ border-color: var(--line);
2244
+ box-shadow: 0 6px 16px rgb(0 0 0 / 18%);
2245
+ }
2246
+
2247
+ .layout-demo[data-theme="dark"] .material-search {
2248
+ background: #17243a;
2249
+ }
2250
+
2251
+ .layout-demo[data-theme="dark"] .material-select {
2252
+ background: #1b293e;
2253
+ }
2254
+
2255
+ .layout-demo[data-theme="dark"] .material-filter-reset:hover {
2256
+ background: #26365b;
2257
+ }
2258
+
2259
+ .layout-demo[data-theme="dark"] .material-category-button:hover,
2260
+ .layout-demo[data-theme="dark"] .material-category-button.active {
2261
+ background: #26365b;
2262
+ }
2263
+
2264
+ .layout-demo[data-theme="dark"] .material-source:hover {
2265
+ background: #22324e;
2266
+ border-color: #5c6fbb;
2267
+ }
2268
+
2269
+ .layout-demo[data-theme="dark"] .panel-count,
2270
+ .layout-demo[data-theme="dark"] .breakpoint-button[aria-pressed="true"] {
2271
+ background: var(--accent-soft);
2272
+ }
2273
+
2274
+ .layout-demo[data-theme="dark"] .breakpoint-button {
2275
+ color: #a0aec5;
2276
+ }
2277
+
2278
+ .layout-demo[data-theme="dark"] .breakpoint-button:hover {
2279
+ background: #202e47;
2280
+ }
2281
+
2282
+ .layout-demo[data-theme="dark"] .panel-tip {
2283
+ background: #1a2639;
2284
+ color: #8999b5;
2285
+ }
2286
+
2287
+ .layout-demo[data-theme="dark"] .stage-badge {
2288
+ background: #1f2d45;
2289
+ }
2290
+
2291
+ .layout-demo[data-theme="dark"] .layout-card {
2292
+ background: var(--card);
2293
+ color: var(--ink);
2294
+ box-shadow:
2295
+ 0 12px 26px rgb(0 0 0 / 20%),
2296
+ inset 0 1px 0 rgb(255 255 255 / 4%);
2297
+ }
2298
+
2299
+ .layout-demo[data-theme="dark"] .layout-card__action {
2300
+ border-color: #40516e;
2301
+ background: #1b2940;
2302
+ color: #a8b6d0;
2303
+ }
2304
+
2305
+ .layout-demo[data-theme="dark"] .layout-card__title {
2306
+ color: #eef3ff;
2307
+ }
2308
+
2309
+ .layout-demo[data-theme="dark"] .layout-card__value {
2310
+ color: #dbe3ff;
2311
+ }
2312
+
2313
+ .layout-demo[data-theme="dark"] .layout-card__meta,
2314
+ .layout-demo[data-theme="dark"] .layout-card__footer {
2315
+ color: #9caac1;
2316
+ }
2317
+
2318
+ .layout-demo[data-theme="dark"] .layout-editor-grid::after {
2319
+ color: #7889a5;
2320
+ }
2321
+
2322
+ .layout-demo[data-theme="dark"] .inspectors {
2323
+ background: #101827;
2324
+ color: #e9eff9;
2325
+ border-left-color: rgb(10 19 34 / 12%);
2326
+ }
2327
+
2328
+ .layout-demo[data-theme="dark"] .copy-code-button,
2329
+ .layout-demo[data-theme="dark"] .download-code-button {
2330
+ border-color: rgb(153 170 210 / 16%);
2331
+ background: rgb(117 137 255 / 12%);
2332
+ color: #aab5ff;
2333
+ }
2334
+
2335
+ .layout-demo[data-theme="dark"] .copy-code-button:hover,
2336
+ .layout-demo[data-theme="dark"] .download-code-button:hover {
2337
+ border-color: rgb(153 170 210 / 34%);
2338
+ background: rgb(117 137 255 / 22%);
2339
+ color: #fff;
2340
+ }
2341
+
2342
+ .layout-demo[data-theme="dark"] .code-block {
2343
+ background: #192438;
2344
+ color: #cad5ea;
2345
+ border-color: rgb(153 170 210 / 12%);
2346
+ }
2347
+
2348
+ .layout-demo[data-theme="dark"] .code-token-comment {
2349
+ color: #71819e;
2350
+ }
2351
+
2352
+ .layout-demo[data-theme="dark"] .code-token-tag,
2353
+ .layout-demo[data-theme="dark"] .code-token-keyword {
2354
+ color: #c4b5fd;
2355
+ }
2356
+
2357
+ .layout-demo[data-theme="dark"] .code-token-attribute,
2358
+ .layout-demo[data-theme="dark"] .code-token-property {
2359
+ color: #80d8ee;
2360
+ }
2361
+
2362
+ .layout-demo[data-theme="dark"] .code-token-string {
2363
+ color: #f3b18a;
2364
+ }
2365
+
2366
+ .layout-demo[data-theme="dark"] .code-token-number,
2367
+ .layout-demo[data-theme="dark"] .code-token-constant {
2368
+ color: #f3a6cb;
2369
+ }
2370
+
2371
+ .layout-demo[data-theme="dark"] .code-status {
2372
+ color: #7f8da6;
2373
+ }
2374
+
2375
+ .layout-demo[data-theme="dark"] .mode-button {
2376
+ border-color: #5265b8 !important;
2377
+ background: #27345c !important;
2378
+ color: #c5ceff !important;
2379
+ }