@exccoder/dsh-media-workbench 0.0.0-stage → 0.2.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.
package/web/styles.css ADDED
@@ -0,0 +1,1143 @@
1
+ /* @exccoder/dsh-media-workbench · 摩登-媒体工作室 */
2
+
3
+ :root {
4
+ --sans: "Segoe UI Variable", "Segoe UI", "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", system-ui, -apple-system, sans-serif;
5
+ --serif: "Songti SC", "Source Han Serif SC", "Noto Serif SC", "STSong", "SimSun", Georgia, serif;
6
+ --mono: "Cascadia Code", "SF Mono", Consolas, "Liberation Mono", monospace;
7
+
8
+ --bg: #f6f3ee;
9
+ --bg-soft: #efe9e0;
10
+ --bg-deep: #e7ded2;
11
+ --surface: #fffdfa;
12
+ --surface-2: #faf6ef;
13
+ --surface-3: #f3ece2;
14
+ --ink: #211d18;
15
+ --ink-2: #5b5349;
16
+ --muted: #8b8175;
17
+ --line: #e5dbcE;
18
+ --line-2: #d8ccbd;
19
+ --accent: #c96442;
20
+ --accent-2: #e09a72;
21
+ --accent-soft: #f7e3d6;
22
+ --violet: #7b68ce;
23
+ --violet-soft: #ece8fb;
24
+ --teal: #2f7f82;
25
+ --teal-soft: #dff0ee;
26
+ --gold: #a97a35;
27
+ --gold-soft: #f6ecd8;
28
+ --danger: #b5442f;
29
+ --ok: #4c8a5b;
30
+ --radius-lg: 20px;
31
+ --radius: 14px;
32
+ --radius-sm: 10px;
33
+ --shadow-sm: 0 1px 2px rgba(55, 38, 22, 0.05), 0 6px 18px -12px rgba(55, 38, 22, 0.25);
34
+ --shadow: 0 2px 4px rgba(55, 38, 22, 0.04), 0 20px 48px -28px rgba(55, 38, 22, 0.4);
35
+ --ease: cubic-bezier(0.22, 1, 0.36, 1);
36
+ --rail: 78px;
37
+ color-scheme: light;
38
+ }
39
+
40
+ [data-theme="dark"] {
41
+ --bg: #141210;
42
+ --bg-soft: #1a1714;
43
+ --bg-deep: #221d18;
44
+ --surface: #1e1a16;
45
+ --surface-2: #241f1a;
46
+ --surface-3: #2b251f;
47
+ --ink: #f1ebe2;
48
+ --ink-2: #c4b9aa;
49
+ --muted: #938777;
50
+ --line: #302921;
51
+ --line-2: #40362c;
52
+ --accent: #dd7f5b;
53
+ --accent-2: #e9a77f;
54
+ --accent-soft: #38231b;
55
+ --violet: #a394ec;
56
+ --violet-soft: #262238;
57
+ --teal: #5aacad;
58
+ --teal-soft: #17302f;
59
+ --gold: #d0a163;
60
+ --gold-soft: #332a1c;
61
+ --danger: #e0785f;
62
+ --ok: #7cb389;
63
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
64
+ --shadow: 0 24px 60px -30px rgba(0, 0, 0, 0.8);
65
+ color-scheme: dark;
66
+ }
67
+
68
+ * { box-sizing: border-box; }
69
+ [hidden] { display: none !important; }
70
+
71
+ html, body { height: 100%; }
72
+
73
+ body {
74
+ margin: 0;
75
+ font-family: var(--sans);
76
+ font-size: 14px;
77
+ line-height: 1.55;
78
+ background: var(--bg);
79
+ color: var(--ink);
80
+ overflow: hidden;
81
+ -webkit-font-smoothing: antialiased;
82
+ text-rendering: optimizeLegibility;
83
+ }
84
+
85
+ ::selection { background: var(--accent-soft); color: var(--ink); }
86
+
87
+ button, input, textarea, select { font: inherit; color: inherit; }
88
+ button { cursor: pointer; background: none; border: 0; padding: 0; }
89
+ button:disabled { cursor: not-allowed; opacity: 0.55; }
90
+ a { color: var(--accent); text-decoration: none; }
91
+ img, video { max-width: 100%; display: block; }
92
+ p { margin: 0; }
93
+ h1, h2, h3, h4 { margin: 0; font-weight: 620; letter-spacing: -0.01em; }
94
+ pre { font-family: var(--mono); }
95
+
96
+ ::-webkit-scrollbar { width: 10px; height: 10px; }
97
+ ::-webkit-scrollbar-track { background: transparent; }
98
+ ::-webkit-scrollbar-thumb { background: var(--line-2); border-radius: 8px; border: 3px solid transparent; background-clip: content-box; }
99
+ ::-webkit-scrollbar-thumb:hover { background: var(--muted); background-clip: content-box; border: 3px solid transparent; }
100
+
101
+ :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 6px; }
102
+
103
+ .ic { flex: none; display: block; }
104
+
105
+ /* ---------- 壳 ---------- */
106
+ .app-shell {
107
+ height: 100%;
108
+ min-height: 100vh;
109
+ display: grid;
110
+ grid-template-columns: var(--rail) minmax(0, 1fr);
111
+ grid-template-rows: minmax(0, 1fr);
112
+ background: var(--bg);
113
+ }
114
+
115
+ .rail {
116
+ display: flex;
117
+ flex-direction: column;
118
+ align-items: stretch;
119
+ padding: 14px 9px 12px;
120
+ gap: 8px;
121
+ background: var(--bg-soft);
122
+ border-right: 1px solid var(--line);
123
+ min-height: 0;
124
+ }
125
+
126
+ .rail-brand {
127
+ display: flex;
128
+ flex-direction: column;
129
+ align-items: center;
130
+ gap: 4px;
131
+ color: var(--accent);
132
+ padding: 6px 0 14px;
133
+ user-select: none;
134
+ }
135
+ .rail-brand span {
136
+ font-size: 8px;
137
+ letter-spacing: 0.16em;
138
+ font-weight: 700;
139
+ color: var(--muted);
140
+ }
141
+
142
+ .rail-nav { display: flex; flex-direction: column; gap: 4px; }
143
+
144
+ .rail-btn {
145
+ display: flex;
146
+ flex-direction: column;
147
+ align-items: center;
148
+ justify-content: center;
149
+ gap: 4px;
150
+ min-height: 56px;
151
+ border-radius: 13px;
152
+ color: var(--muted);
153
+ font-size: 10.5px;
154
+ letter-spacing: 0.04em;
155
+ transition: background 0.16s var(--ease), color 0.16s var(--ease), transform 0.16s var(--ease);
156
+ }
157
+ .rail-btn:hover { color: var(--ink); background: var(--surface-2); }
158
+ .rail-btn.is-on { color: var(--accent); background: var(--surface); box-shadow: var(--shadow-sm); }
159
+ .rail-btn.is-on::before {
160
+ content: "";
161
+ position: absolute;
162
+ left: 0;
163
+ width: 2px;
164
+ height: 18px;
165
+ border-radius: 2px;
166
+ background: var(--accent);
167
+ }
168
+ .rail-btn { position: relative; }
169
+
170
+ .rail-foot {
171
+ margin-top: auto;
172
+ padding-top: 10px;
173
+ border-top: 1px solid var(--line);
174
+ display: flex;
175
+ flex-direction: column;
176
+ gap: 2px;
177
+ }
178
+ .rail-theme { min-height: 38px; }
179
+
180
+ .workspace {
181
+ display: flex;
182
+ flex-direction: column;
183
+ min-width: 0;
184
+ min-height: 0;
185
+ }
186
+
187
+ .topbar {
188
+ display: flex;
189
+ align-items: flex-end;
190
+ gap: 16px;
191
+ padding: 16px 26px 14px;
192
+ border-bottom: 1px solid var(--line);
193
+ background: var(--bg);
194
+ flex: none;
195
+ }
196
+ .topbar-copy { min-width: 0; }
197
+ .eyebrow {
198
+ display: block;
199
+ font-size: 9.5px;
200
+ font-weight: 700;
201
+ letter-spacing: 0.16em;
202
+ color: var(--muted);
203
+ text-transform: uppercase;
204
+ }
205
+ .topbar h1 {
206
+ font-family: var(--serif);
207
+ font-size: 23px;
208
+ line-height: 1.25;
209
+ margin-top: 4px;
210
+ font-weight: 600;
211
+ }
212
+ .topbar-desc { color: var(--muted); font-size: 12.5px; margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
213
+ .topbar-side { margin-left: auto; display: flex; align-items: center; gap: 8px; flex: none; }
214
+
215
+ .status-chip {
216
+ display: inline-flex;
217
+ align-items: center;
218
+ gap: 7px;
219
+ height: 30px;
220
+ padding: 0 11px;
221
+ border: 1px solid var(--line);
222
+ border-radius: 999px;
223
+ background: var(--surface);
224
+ color: var(--ink-2);
225
+ font-size: 11.5px;
226
+ max-width: 210px;
227
+ overflow: hidden;
228
+ white-space: nowrap;
229
+ }
230
+ .status-chip:hover { border-color: var(--line-2); }
231
+ .status-chip .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--muted); flex: none; }
232
+ .status-chip.is-ok .dot { background: var(--ok); box-shadow: 0 0 0 3px color-mix(in srgb, var(--ok) 16%, transparent); }
233
+ .status-chip.is-off .dot { background: var(--accent); }
234
+
235
+ .view {
236
+ flex: 1;
237
+ min-height: 0;
238
+ display: flex;
239
+ overflow: hidden;
240
+ }
241
+
242
+ .boot { margin: auto; display: flex; flex-direction: column; align-items: center; gap: 14px; color: var(--muted); }
243
+ .boot-mark { color: var(--accent); animation: breathe 1.8s ease-in-out infinite; }
244
+ @keyframes breathe { 0%, 100% { opacity: 0.45; transform: scale(0.96); } 50% { opacity: 1; transform: scale(1); } }
245
+
246
+ .fatal { margin: auto; max-width: 460px; text-align: center; }
247
+ .fatal h2 { font-family: var(--serif); font-size: 24px; margin-bottom: 8px; }
248
+ .fatal p { color: var(--ink-2); }
249
+
250
+ /* ---------- 通用 ---------- */
251
+ .ic { vertical-align: middle; }
252
+ .icon-btn {
253
+ width: 30px;
254
+ height: 30px;
255
+ border-radius: 9px;
256
+ display: inline-flex;
257
+ align-items: center;
258
+ justify-content: center;
259
+ color: var(--ink-2);
260
+ border: 1px solid transparent;
261
+ transition: background 0.15s var(--ease), color 0.15s var(--ease), border-color 0.15s var(--ease);
262
+ }
263
+ .icon-btn:hover { background: var(--surface-2); color: var(--ink); border-color: var(--line); }
264
+ .icon-btn:disabled { opacity: 0.35; }
265
+
266
+ .btn {
267
+ display: inline-flex;
268
+ align-items: center;
269
+ justify-content: center;
270
+ gap: 7px;
271
+ height: 38px;
272
+ padding: 0 16px;
273
+ border-radius: 11px;
274
+ border: 1px solid transparent;
275
+ font-size: 13px;
276
+ font-weight: 600;
277
+ white-space: nowrap;
278
+ transition: transform 0.12s var(--ease), background 0.16s var(--ease), box-shadow 0.16s var(--ease);
279
+ }
280
+ .btn:active { transform: translateY(1px); }
281
+ .btn-primary { background: var(--ink); color: var(--bg); }
282
+ .btn-primary:hover { background: color-mix(in srgb, var(--ink) 88%, var(--accent)); }
283
+ .btn-ghost { background: var(--surface); border-color: var(--line); color: var(--ink-2); }
284
+ .btn-ghost:hover { border-color: var(--line-2); color: var(--ink); background: var(--surface-2); }
285
+ .btn-danger { background: var(--danger); color: #fff; }
286
+ .btn-small { height: 30px; padding: 0 11px; font-size: 12px; border-radius: 9px; }
287
+ .btn-block { width: 100%; }
288
+
289
+ .text-btn {
290
+ display: inline-flex;
291
+ align-items: center;
292
+ gap: 5px;
293
+ color: var(--ink-2);
294
+ font-size: 12px;
295
+ padding: 4px 6px;
296
+ border-radius: 7px;
297
+ }
298
+ .text-btn:hover { color: var(--ink); background: var(--surface-2); }
299
+
300
+ .link-btn { display: inline-flex; align-items: center; gap: 3px; color: var(--accent); font-size: 12px; font-weight: 600; }
301
+ .link-btn:hover { text-decoration: underline; }
302
+
303
+ .fine { font-size: 11.5px; color: var(--muted); line-height: 1.5; }
304
+ .muted { color: var(--muted); }
305
+ .spacer { flex: 1; }
306
+ .ellipsis { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
307
+ .danger-quiet { color: var(--danger) !important; }
308
+ .danger-quiet:hover { background: color-mix(in srgb, var(--danger) 10%, transparent) !important; }
309
+
310
+ .field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
311
+ .field-label {
312
+ display: flex;
313
+ align-items: center;
314
+ justify-content: space-between;
315
+ gap: 8px;
316
+ font-size: 11.5px;
317
+ font-weight: 600;
318
+ color: var(--ink-2);
319
+ letter-spacing: 0.02em;
320
+ }
321
+ .field-label em { font-style: normal; font-weight: 500; color: var(--muted); font-size: 10.5px; }
322
+ .field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
323
+ .field-wide { grid-column: 1 / -1; }
324
+ .field-prompt textarea { min-height: 96px; }
325
+
326
+ .input, .select, textarea {
327
+ width: 100%;
328
+ border: 1px solid var(--line);
329
+ background: var(--surface);
330
+ border-radius: 10px;
331
+ padding: 9px 11px;
332
+ color: var(--ink);
333
+ transition: border-color 0.15s var(--ease), box-shadow 0.15s var(--ease), background 0.15s var(--ease);
334
+ }
335
+ textarea { resize: vertical; line-height: 1.6; min-height: 44px; }
336
+ .input:focus, .select:focus, textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 12%, transparent); }
337
+ .input::placeholder, textarea::placeholder { color: var(--muted); opacity: 0.75; }
338
+ .select { appearance: none; background-image: linear-gradient(45deg, transparent 50%, var(--muted) 50%), linear-gradient(135deg, var(--muted) 50%, transparent 50%); background-position: calc(100% - 15px) 52%, calc(100% - 10px) 52%; background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; padding-right: 28px; }
339
+ .select-flat { border-color: transparent; background-color: transparent; font-weight: 600; padding-left: 4px; }
340
+ .select-flat:hover { background-color: var(--surface-2); }
341
+
342
+ .chips { display: flex; flex-wrap: wrap; gap: 6px; }
343
+ .chip {
344
+ height: 29px;
345
+ padding: 0 10px;
346
+ border-radius: 8px;
347
+ border: 1px solid var(--line);
348
+ background: var(--surface);
349
+ color: var(--ink-2);
350
+ font-size: 12px;
351
+ display: inline-flex;
352
+ align-items: center;
353
+ gap: 5px;
354
+ transition: all 0.14s var(--ease);
355
+ }
356
+ .chip:hover { border-color: var(--line-2); color: var(--ink); }
357
+ .chip.is-on { background: var(--ink); border-color: var(--ink); color: var(--bg); }
358
+ .chips-tight .chip { height: 27px; padding: 0 9px; }
359
+ .chip-ratio { padding-left: 8px; }
360
+ .ratio-shape { display: inline-block; width: 12px; height: auto; max-height: 14px; border: 1.4px solid currentColor; border-radius: 2px; opacity: 0.65; }
361
+
362
+ .seg { display: inline-flex; padding: 3px; gap: 2px; background: var(--surface-2); border: 1px solid var(--line); border-radius: 10px; }
363
+ .seg button { height: 26px; padding: 0 11px; border-radius: 7px; color: var(--muted); font-size: 12px; }
364
+ .seg button:hover { color: var(--ink); }
365
+ .seg button.is-on { background: var(--surface); color: var(--ink); box-shadow: var(--shadow-sm); }
366
+
367
+ .search {
368
+ display: inline-flex;
369
+ align-items: center;
370
+ gap: 7px;
371
+ height: 32px;
372
+ padding: 0 10px;
373
+ border: 1px solid var(--line);
374
+ border-radius: 9px;
375
+ background: var(--surface);
376
+ color: var(--muted);
377
+ min-width: 190px;
378
+ }
379
+ .search input { border: 0; background: transparent; outline: none; width: 100%; font-size: 12px; }
380
+ .search-wide { width: 100%; margin: 0 0 10px; }
381
+
382
+ .divider { height: 1px; background: var(--line); margin: 16px 0; }
383
+ .dot-sep { width: 3px; height: 3px; border-radius: 50%; background: var(--line-2); }
384
+
385
+ /* ---------- 生图 ---------- */
386
+ .bench { flex: 1; min-height: 0; display: flex; width: 100%; }
387
+ .bench-image, .bench-video { display: grid; grid-template-columns: minmax(330px, 370px) minmax(0, 1fr); }
388
+
389
+ .composer {
390
+ min-height: 0;
391
+ overflow-y: auto;
392
+ padding: 20px 20px 24px;
393
+ border-right: 1px solid var(--line);
394
+ background: var(--bg);
395
+ display: flex;
396
+ flex-direction: column;
397
+ gap: 14px;
398
+ }
399
+ .composer-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
400
+ .composer-head h2 { font-family: var(--serif); font-size: 22px; font-weight: 600; margin-top: 2px; }
401
+
402
+ .provider-line {
403
+ display: flex;
404
+ align-items: center;
405
+ gap: 8px;
406
+ padding: 8px 10px;
407
+ border-radius: 10px;
408
+ background: var(--surface-2);
409
+ border: 1px solid var(--line);
410
+ font-size: 11.5px;
411
+ color: var(--ink-2);
412
+ }
413
+ .provider-line .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--muted); flex: none; }
414
+ .provider-line.is-ready .dot { background: var(--ok); }
415
+ .provider-line.is-off { color: var(--muted); }
416
+ .provider-line em { margin-left: auto; font-style: normal; color: var(--muted); font-size: 10.5px; }
417
+ .provider-line .link-btn { margin-left: auto; }
418
+
419
+ #prompt-count { font-variant-numeric: tabular-nums; }
420
+
421
+ .stepper { display: flex; align-items: center; justify-content: space-between; border: 1px solid var(--line); border-radius: 10px; background: var(--surface); height: 38px; padding: 0 4px; }
422
+ .stepper button { width: 30px; height: 30px; border-radius: 7px; display: grid; place-items: center; color: var(--ink-2); }
423
+ .stepper button:hover { background: var(--surface-2); }
424
+ .stepper b { font-variant-numeric: tabular-nums; }
425
+
426
+ .advanced { border-top: 1px solid var(--line); padding-top: 12px; }
427
+ .advanced summary { display: flex; align-items: center; gap: 6px; list-style: none; cursor: pointer; color: var(--ink-2); font-size: 12px; font-weight: 600; padding: 2px 0; }
428
+ .advanced summary::-webkit-details-marker { display: none; }
429
+ .advanced summary svg:last-child { margin-left: auto; transition: transform 0.2s var(--ease); }
430
+ .advanced[open] summary svg:last-child { transform: rotate(180deg); }
431
+ .advanced-body { display: flex; flex-direction: column; gap: 12px; padding-top: 12px; }
432
+
433
+ .drop {
434
+ position: relative;
435
+ border: 1.5px dashed var(--line-2);
436
+ border-radius: 12px;
437
+ background: var(--surface-2);
438
+ min-height: 82px;
439
+ display: grid;
440
+ place-items: center;
441
+ transition: border-color 0.15s var(--ease), background 0.15s var(--ease);
442
+ cursor: pointer;
443
+ overflow: hidden;
444
+ }
445
+ .drop:hover, .drop.is-over { border-color: var(--accent); background: var(--accent-soft); }
446
+ .ref-drop { display: block; padding: 8px; }
447
+ .ref-list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; width: 100%; }
448
+ .ref-item { position: relative; margin: 0; aspect-ratio: 1; min-width: 0; overflow: hidden; border-radius: 9px; background: var(--surface-3); }
449
+ .ref-item img { width: 100%; height: 100%; object-fit: cover; }
450
+ .ref-badge { position: absolute; left: 5px; top: 5px; padding: 2px 5px; border-radius: 5px; background: rgba(20, 16, 12, 0.65); color: #fff; font-size: 9px; line-height: 1.35; pointer-events: none; }
451
+ .ref-tools { position: absolute; right: 4px; bottom: 4px; display: flex; gap: 2px; }
452
+ .ref-tools button { width: 20px; height: 20px; border-radius: 5px; background: rgba(20, 16, 12, 0.62); color: #fff; display: grid; place-items: center; font-size: 11px; line-height: 1; }
453
+ .ref-tools button:hover { background: rgba(20, 16, 12, 0.85); }
454
+ .ref-tools button:disabled { opacity: 0.3; }
455
+ .drop-empty { display: flex; flex-direction: column; align-items: center; gap: 5px; color: var(--muted); font-size: 11.5px; text-align: center; padding: 14px; }
456
+ .drop-empty small { font-size: 10.5px; opacity: 0.8; }
457
+ .drop-preview { position: absolute; inset: 0; }
458
+ .drop-preview img { width: 100%; height: 100%; object-fit: cover; }
459
+ .drop-compact { min-height: 60px; }
460
+ .drop-compact .drop-empty { flex-direction: row; gap: 8px; padding: 10px; }
461
+ .mini-x { position: absolute; top: 6px; right: 6px; width: 22px; height: 22px; border-radius: 6px; background: rgba(0, 0, 0, 0.55); color: #fff; display: grid; place-items: center; }
462
+ .mini-x:hover { background: rgba(0, 0, 0, 0.75); }
463
+
464
+ .btn-generate {
465
+ position: relative;
466
+ height: 46px;
467
+ margin-top: 2px;
468
+ border-radius: 12px;
469
+ background: linear-gradient(120deg, var(--accent) 0%, var(--accent-2) 100%);
470
+ color: #fff;
471
+ font-size: 14px;
472
+ font-weight: 650;
473
+ box-shadow: 0 10px 24px -12px color-mix(in srgb, var(--accent) 70%, transparent);
474
+ overflow: hidden;
475
+ }
476
+ .btn-generate:hover { filter: brightness(1.04); }
477
+ .btn-generate kbd {
478
+ margin-left: auto;
479
+ font-family: var(--sans);
480
+ font-size: 10px;
481
+ padding: 2px 5px;
482
+ border-radius: 5px;
483
+ background: rgba(255, 255, 255, 0.18);
484
+ border: 1px solid rgba(255, 255, 255, 0.22);
485
+ }
486
+ .btn-generate .gen-ic { margin-left: auto; }
487
+ .btn-generate .gen-label { margin: 0 auto 0 2px; }
488
+ .btn-generate.is-busy { pointer-events: none; opacity: 0.85; }
489
+ .btn-generate.is-busy::after {
490
+ content: "";
491
+ position: absolute;
492
+ inset: 0;
493
+ background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.25), transparent);
494
+ animation: sweep 1.2s linear infinite;
495
+ }
496
+ @keyframes sweep { from { transform: translateX(-100%); } to { transform: translateX(100%); } }
497
+
498
+ /* 画廊 */
499
+ .gallery-pane {
500
+ min-width: 0;
501
+ min-height: 0;
502
+ overflow-y: auto;
503
+ padding: 20px 24px 32px;
504
+ }
505
+ .pane-head { display: flex; align-items: center; gap: 16px; margin-bottom: 16px; flex-wrap: wrap; }
506
+ .pane-title { display: flex; align-items: center; gap: 9px; }
507
+ .pane-title h2 { font-family: var(--serif); font-size: 19px; font-weight: 600; }
508
+ .count-pill { min-width: 22px; height: 20px; padding: 0 7px; border-radius: 999px; background: var(--surface-2); border: 1px solid var(--line); color: var(--muted); font-size: 10.5px; display: inline-flex; align-items: center; justify-content: center; font-variant-numeric: tabular-nums; }
509
+ .gallery-tools { margin-left: auto; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
510
+
511
+ .gallery {
512
+ display: grid;
513
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
514
+ gap: 16px;
515
+ align-content: start;
516
+ align-items: start;
517
+ }
518
+ .gallery:has(.empty-gallery) { display: block; }
519
+
520
+ .shot {
521
+ background: var(--surface);
522
+ border: 1px solid var(--line);
523
+ border-radius: var(--radius);
524
+ overflow: hidden;
525
+ box-shadow: var(--shadow-sm);
526
+ transition: transform 0.2s var(--ease), box-shadow 0.2s var(--ease), border-color 0.2s var(--ease);
527
+ min-width: 0;
528
+ }
529
+ .shot:hover { transform: translateY(-2px); box-shadow: var(--shadow); border-color: var(--line-2); }
530
+ .shot-media { position: relative; background: var(--surface-3); overflow: hidden; cursor: zoom-in; }
531
+ .shot-media img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s var(--ease); }
532
+ .shot:hover .shot-media img { transform: scale(1.025); }
533
+ .shot-top { position: absolute; top: 8px; right: 8px; display: flex; gap: 5px; opacity: 0; transition: opacity 0.18s var(--ease); }
534
+ .shot:hover .shot-top { opacity: 1; }
535
+ .mini-btn {
536
+ width: 27px;
537
+ height: 27px;
538
+ border-radius: 8px;
539
+ background: rgba(20, 16, 12, 0.55);
540
+ backdrop-filter: blur(8px);
541
+ color: #fff;
542
+ display: grid;
543
+ place-items: center;
544
+ transition: background 0.15s var(--ease), color 0.15s var(--ease);
545
+ }
546
+ .mini-btn:hover { background: rgba(20, 16, 12, 0.8); }
547
+ .mini-btn.is-on { color: #ff9d86; }
548
+ .shot-body { padding: 11px 12px 10px; display: flex; flex-direction: column; gap: 7px; }
549
+ .shot-prompt {
550
+ font-size: 12.5px;
551
+ color: var(--ink);
552
+ line-height: 1.5;
553
+ display: -webkit-box;
554
+ -webkit-line-clamp: 2;
555
+ -webkit-box-orient: vertical;
556
+ overflow: hidden;
557
+ }
558
+ .shot-meta { display: flex; align-items: center; gap: 6px; font-size: 10.5px; color: var(--muted); min-width: 0; }
559
+ .shot-meta time { margin-left: auto; flex: none; }
560
+ .tag { display: inline-flex; align-items: center; height: 19px; padding: 0 6px; border-radius: 5px; background: var(--surface-2); border: 1px solid var(--line); color: var(--ink-2); font-size: 10px; max-width: 90px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
561
+ .tag-error { color: var(--danger); border-color: color-mix(in srgb, var(--danger) 30%, var(--line)); }
562
+ .shot-actions { display: flex; align-items: center; gap: 2px; padding-top: 2px; border-top: 1px dashed var(--line); margin-top: 1px; }
563
+ .shot-actions button { display: inline-flex; align-items: center; gap: 4px; color: var(--muted); font-size: 10.5px; padding: 4px 5px; border-radius: 6px; }
564
+ .shot-actions button:hover { color: var(--ink); background: var(--surface-2); }
565
+ .shot-actions button:last-child { margin-left: auto; }
566
+
567
+ .shimmer { position: relative; overflow: hidden; background: var(--surface-3); }
568
+ .shimmer::after { content: ""; position: absolute; inset: 0; background: linear-gradient(100deg, transparent 20%, color-mix(in srgb, var(--surface) 65%, transparent) 45%, transparent 70%); animation: shimmer 1.5s infinite; }
569
+ @keyframes shimmer { from { transform: translateX(-100%); } to { transform: translateX(100%); } }
570
+ .busy-label { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; gap: 8px; color: var(--muted); font-size: 12px; z-index: 1; }
571
+ .busy-label i { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); animation: pulse 1.2s infinite; }
572
+ @keyframes pulse { 0%, 100% { opacity: 0.4; transform: scale(0.8); } 50% { opacity: 1; transform: scale(1.1); } }
573
+ .error-media { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; padding: 20px; text-align: center; color: var(--danger); background: color-mix(in srgb, var(--danger) 5%, var(--surface-2)); min-height: 140px; }
574
+ .error-media p { font-size: 11px; color: var(--ink-2); line-height: 1.45; }
575
+
576
+ .empty-gallery { max-width: 760px; margin: 26px auto; text-align: center; }
577
+ .empty-art { width: 62px; height: 62px; margin: 0 auto 14px; border-radius: 18px; display: grid; place-items: center; background: var(--surface-2); border: 1px solid var(--line); color: var(--accent); }
578
+ .empty-gallery h3 { font-family: var(--serif); font-size: 21px; font-weight: 600; }
579
+ .empty-gallery > p { color: var(--muted); font-size: 13px; margin: 7px auto 22px; max-width: 460px; }
580
+ .empty-gallery.compact { padding: 40px 0; }
581
+ .inspirations { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 10px; text-align: left; }
582
+ .inspo {
583
+ display: flex;
584
+ flex-direction: column;
585
+ gap: 5px;
586
+ padding: 14px;
587
+ border-radius: 13px;
588
+ border: 1px solid var(--line);
589
+ background: var(--surface);
590
+ transition: all 0.18s var(--ease);
591
+ min-height: 118px;
592
+ }
593
+ .inspo:hover { border-color: var(--accent-2); background: var(--surface); transform: translateY(-2px); box-shadow: var(--shadow-sm); }
594
+ .inspo-index { font-family: var(--mono); font-size: 10px; color: var(--accent); }
595
+ .inspo b { font-size: 13px; }
596
+ .inspo small { color: var(--muted); font-size: 11px; line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
597
+
598
+ /* 大图查看 */
599
+ .layer {
600
+ position: fixed;
601
+ inset: 0;
602
+ z-index: 50;
603
+ background: rgba(16, 12, 9, 0.55);
604
+ backdrop-filter: blur(6px);
605
+ display: grid;
606
+ place-items: center;
607
+ opacity: 0;
608
+ transition: opacity 0.18s var(--ease);
609
+ }
610
+ .layer.is-in { opacity: 1; }
611
+ .layer.is-out { opacity: 0; }
612
+ .lightbox {
613
+ position: relative;
614
+ width: min(1180px, 94vw);
615
+ height: min(760px, 90vh);
616
+ display: grid;
617
+ grid-template-columns: minmax(0, 1fr) 320px;
618
+ background: var(--surface);
619
+ border-radius: 20px;
620
+ overflow: hidden;
621
+ box-shadow: 0 40px 120px -30px rgba(0, 0, 0, 0.6);
622
+ transform: translateY(8px) scale(0.99);
623
+ transition: transform 0.22s var(--ease);
624
+ }
625
+ .layer.is-in .lightbox { transform: none; }
626
+ .lb-figure { margin: 0; background: #171310; display: grid; place-items: center; overflow: hidden; }
627
+ .lb-figure img { max-width: 100%; max-height: 100%; object-fit: contain; }
628
+ .lb-side { padding: 26px 22px; overflow-y: auto; display: flex; flex-direction: column; gap: 12px; }
629
+ .lb-side h3 { font-family: var(--serif); font-size: 22px; }
630
+ .lb-prompt { font-size: 13px; line-height: 1.7; color: var(--ink-2); white-space: pre-wrap; }
631
+ .lb-meta { display: grid; gap: 8px; border-top: 1px solid var(--line); padding-top: 12px; }
632
+ .lb-meta div { display: flex; justify-content: space-between; gap: 10px; font-size: 11.5px; }
633
+ .lb-meta span { color: var(--muted); }
634
+ .lb-meta b { font-weight: 550; color: var(--ink-2); text-align: right; max-width: 65%; overflow: hidden; text-overflow: ellipsis; }
635
+ .lb-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 7px; margin-top: auto; }
636
+ .lb-actions .btn { height: 34px; font-size: 12px; }
637
+
638
+ .image-menu {
639
+ position: fixed;
640
+ z-index: 1200;
641
+ min-width: 184px;
642
+ padding: 5px;
643
+ border: 1px solid var(--line);
644
+ border-radius: 10px;
645
+ background: var(--surface);
646
+ box-shadow: var(--shadow);
647
+ display: flex;
648
+ flex-direction: column;
649
+ gap: 1px;
650
+ }
651
+ .image-menu button {
652
+ width: 100%;
653
+ min-height: 32px;
654
+ padding: 0 10px;
655
+ border-radius: 7px;
656
+ display: flex;
657
+ align-items: center;
658
+ gap: 8px;
659
+ text-align: left;
660
+ font-size: 12px;
661
+ color: var(--ink-2);
662
+ }
663
+ .image-menu button:hover { background: var(--surface-2); color: var(--ink); }
664
+ .image-menu button .ic { color: var(--muted); }
665
+ .image-menu-sep { height: 1px; margin: 4px 6px; background: var(--line); }
666
+ .lb-close { position: absolute; top: 12px; right: 12px; z-index: 3; width: 32px; height: 32px; border-radius: 9px; background: rgba(20, 16, 12, 0.45); color: #fff; display: grid; place-items: center; }
667
+ .lb-close:hover { background: rgba(20, 16, 12, 0.7); }
668
+ .lb-nav { position: absolute; top: 50%; transform: translateY(-50%); z-index: 3; width: 38px; height: 58px; border-radius: 10px; background: rgba(20, 16, 12, 0.35); color: #fff; display: grid; place-items: center; }
669
+ .lb-nav:hover { background: rgba(20, 16, 12, 0.65); }
670
+ .lb-prev { left: 12px; }
671
+ .lb-next { right: 332px; }
672
+ .layer-lightbox .lb-close { right: 12px; }
673
+
674
+ /* ---------- 视频 ---------- */
675
+ .mode-tabs { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; background: var(--surface-2); border: 1px solid var(--line); border-radius: 12px; padding: 4px; }
676
+ .mode-tab { text-align: left; padding: 8px 9px; border-radius: 9px; display: flex; flex-direction: column; gap: 2px; color: var(--ink-2); }
677
+ .mode-tab b { font-size: 12px; }
678
+ .mode-tab small { font-size: 10px; color: var(--muted); line-height: 1.35; }
679
+ .mode-tab:hover { background: var(--surface); }
680
+ .mode-tab.is-on { background: var(--surface); box-shadow: var(--shadow-sm); color: var(--ink); }
681
+ .mode-tab.is-on b { color: var(--accent); }
682
+
683
+ .video-list { display: flex; flex-direction: column; gap: 14px; }
684
+ .vid-card {
685
+ display: grid;
686
+ grid-template-columns: 300px minmax(0, 1fr);
687
+ gap: 0;
688
+ background: var(--surface);
689
+ border: 1px solid var(--line);
690
+ border-radius: var(--radius);
691
+ overflow: hidden;
692
+ box-shadow: var(--shadow-sm);
693
+ transition: border-color 0.2s var(--ease), box-shadow 0.2s var(--ease);
694
+ }
695
+ .vid-card:hover { border-color: var(--line-2); box-shadow: var(--shadow); }
696
+ .vid-media { background: #171310; min-height: 180px; display: grid; place-items: center; overflow: hidden; position: relative; }
697
+ .vid-media video { width: 100%; height: 100%; object-fit: contain; max-height: 260px; }
698
+ .vid-body { padding: 16px 18px; display: flex; flex-direction: column; gap: 9px; min-width: 0; }
699
+ .vid-head { display: flex; align-items: center; gap: 7px; font-size: 12px; color: var(--muted); }
700
+ .vid-head b { color: var(--ink); font-size: 13px; }
701
+ .vid-head time { margin-left: auto; font-size: 10.5px; }
702
+ .status-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--muted); flex: none; }
703
+ .status-dot.is-done { background: var(--ok); }
704
+ .status-dot.is-running { background: var(--accent); animation: pulse 1.2s infinite; }
705
+ .status-dot.is-error { background: var(--danger); }
706
+ .vid-prompt { font-size: 13px; line-height: 1.6; color: var(--ink-2); display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
707
+ .vid-error { font-size: 12px; color: var(--danger); background: color-mix(in srgb, var(--danger) 7%, transparent); padding: 7px 9px; border-radius: 8px; }
708
+ .progress { height: 5px; border-radius: 99px; background: var(--surface-3); overflow: hidden; }
709
+ .progress span { display: block; height: 100%; border-radius: 99px; background: linear-gradient(90deg, var(--accent), var(--accent-2)); transition: width 0.6s var(--ease); }
710
+ .vid-actions { display: flex; align-items: center; gap: 6px; margin-top: auto; flex-wrap: wrap; }
711
+ .vid-actions .fine { margin-right: auto; }
712
+ .storyboard-media { display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; gap: 2px; aspect-ratio: 16 / 9; align-self: center; width: 100%; }
713
+ .storyboard-media img { width: 100%; height: 100%; object-fit: cover; min-height: 0; }
714
+ .play-fab { position: absolute; inset: 0; margin: auto; width: 46px; height: 46px; border-radius: 50%; background: rgba(255, 255, 255, 0.9); color: #171310; display: grid; place-items: center; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4); transition: transform 0.16s var(--ease); }
715
+ .play-fab:hover { transform: scale(1.06); }
716
+ .quiet-note { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; color: var(--muted); }
717
+
718
+ .story-player {
719
+ position: relative;
720
+ width: min(1080px, 94vw);
721
+ height: min(720px, 90vh);
722
+ background: #0e0c0a;
723
+ border-radius: 20px;
724
+ overflow: hidden;
725
+ display: flex;
726
+ flex-direction: column;
727
+ box-shadow: 0 40px 120px -30px rgba(0, 0, 0, 0.7);
728
+ }
729
+ .story-stage { position: relative; flex: 1; overflow: hidden; }
730
+ .story-stage img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: 0; transition: opacity 1.1s ease; transform: scale(1.04); }
731
+ .story-stage img.is-on { opacity: 1; animation: kenburns 6s ease-out forwards; }
732
+ @keyframes kenburns { from { transform: scale(1.02); } to { transform: scale(1.1); } }
733
+ .story-caption { position: absolute; left: 0; right: 0; bottom: 0; padding: 60px 34px 26px; background: linear-gradient(transparent, rgba(0, 0, 0, 0.78)); color: #fff; }
734
+ .story-caption .eyebrow { color: rgba(255, 255, 255, 0.6); }
735
+ .story-caption p { margin-top: 6px; font-family: var(--serif); font-size: 19px; line-height: 1.6; max-width: 760px; }
736
+ .story-controls { display: flex; align-items: center; gap: 14px; padding: 12px 18px; background: #17130f; color: #fff; }
737
+ .story-controls .icon-btn { color: #fff; border: 1px solid rgba(255, 255, 255, 0.15); }
738
+ .story-dots { display: flex; gap: 6px; }
739
+ .story-dots i { width: 6px; height: 6px; border-radius: 50%; background: rgba(255, 255, 255, 0.25); transition: all 0.3s; }
740
+ .story-dots i.is-on { background: #fff; width: 18px; border-radius: 99px; }
741
+ .story-controls .fine { margin-left: auto; color: rgba(255, 255, 255, 0.55); }
742
+
743
+ /* ---------- 写作 ---------- */
744
+ .bench-write { display: grid; grid-template-columns: 246px minmax(0, 1fr) 340px; }
745
+ .docs-pane { display: flex; flex-direction: column; min-height: 0; border-right: 1px solid var(--line); background: var(--bg); padding: 18px 14px 12px; gap: 10px; }
746
+ .docs-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; padding: 0 2px; }
747
+ .docs-head h2 { font-family: var(--serif); font-size: 19px; font-weight: 600; margin-top: 2px; }
748
+ .docs-list { flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 5px; margin: 0 -4px; padding: 0 4px; }
749
+ .docs-foot { font-size: 10.5px; color: var(--muted); padding: 8px 2px 0; border-top: 1px solid var(--line); }
750
+ .docs-empty { color: var(--muted); font-size: 12px; text-align: center; padding: 30px 12px; line-height: 1.6; }
751
+ .doc-item { position: relative; padding: 10px 10px 9px; border-radius: 11px; border: 1px solid transparent; cursor: pointer; transition: all 0.15s var(--ease); }
752
+ .doc-item:hover { background: var(--surface-2); }
753
+ .doc-item.is-on { background: var(--surface); border-color: var(--line); box-shadow: var(--shadow-sm); }
754
+ .doc-item-top { display: flex; align-items: baseline; gap: 8px; }
755
+ .doc-item-top b { font-size: 12.5px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
756
+ .doc-item-top time { margin-left: auto; font-size: 9.5px; color: var(--muted); flex: none; }
757
+ .doc-item p { font-size: 11px; color: var(--muted); margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
758
+ .doc-item-actions { position: absolute; right: 6px; bottom: 6px; display: flex; gap: 2px; opacity: 0; transition: opacity 0.15s; background: var(--surface); border-radius: 6px; }
759
+ .doc-item:hover .doc-item-actions { opacity: 1; }
760
+ .doc-item-actions button { width: 22px; height: 22px; border-radius: 5px; color: var(--muted); display: grid; place-items: center; }
761
+ .doc-item-actions button:hover { background: var(--surface-2); color: var(--ink); }
762
+
763
+ .editor-pane { display: flex; flex-direction: column; min-width: 0; min-height: 0; background: var(--surface); }
764
+ .editor-top { padding: 22px 40px 0; flex: none; }
765
+ .title-input {
766
+ width: 100%;
767
+ border: 0;
768
+ background: transparent;
769
+ font-family: var(--serif);
770
+ font-size: 30px;
771
+ font-weight: 600;
772
+ line-height: 1.3;
773
+ padding: 0;
774
+ letter-spacing: -0.01em;
775
+ }
776
+ .title-input:focus { outline: none; }
777
+ .title-input::placeholder { color: var(--line-2); }
778
+ .editor-meta { display: flex; align-items: center; gap: 8px; margin-top: 10px; padding-bottom: 12px; border-bottom: 1px solid var(--line); font-size: 11px; color: var(--muted); }
779
+ .editor-meta .text-btn { font-size: 11px; }
780
+ .editor-meta .spacer { flex: 1; }
781
+ .save-state.is-dirty { color: var(--gold); }
782
+ .save-state.is-saving { color: var(--muted); }
783
+ .save-state.is-error { color: var(--danger); }
784
+ .editor-wrap { flex: 1; min-height: 0; display: flex; padding: 0 40px; }
785
+ #doc-content {
786
+ flex: 1;
787
+ width: 100%;
788
+ height: 100%;
789
+ border: 0;
790
+ background: transparent;
791
+ resize: none;
792
+ font-family: var(--serif);
793
+ font-size: 17px;
794
+ line-height: 1.95;
795
+ padding: 22px 0 30px;
796
+ color: var(--ink);
797
+ max-width: 760px;
798
+ margin: 0 auto;
799
+ }
800
+ #doc-content:focus { outline: none; box-shadow: none; }
801
+ #doc-content::placeholder { color: var(--line-2); }
802
+ .editor-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 10px 40px 12px; border-top: 1px solid var(--line); font-size: 10.5px; color: var(--muted); flex: none; }
803
+
804
+ .ai-pane { display: flex; flex-direction: column; min-height: 0; border-left: 1px solid var(--line); background: var(--bg); }
805
+ .ai-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; padding: 18px 16px 12px; border-bottom: 1px solid var(--line); }
806
+ .ai-head h2 { font-family: var(--serif); font-size: 19px; font-weight: 600; margin-top: 2px; }
807
+ .model-chip { font-size: 10px; padding: 3px 7px; border-radius: 99px; border: 1px solid var(--line); color: var(--muted); background: var(--surface); max-width: 120px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
808
+ .model-chip.is-ok { color: var(--ok); border-color: color-mix(in srgb, var(--ok) 30%, var(--line)); }
809
+ .ai-scroll { flex: 1; overflow-y: auto; padding: 14px 16px 24px; display: flex; flex-direction: column; gap: 16px; }
810
+ .ai-section { display: flex; flex-direction: column; gap: 7px; }
811
+ .ai-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; }
812
+ .ai-action { text-align: left; padding: 8px 9px; border-radius: 9px; border: 1px solid var(--line); background: var(--surface); display: flex; flex-direction: column; gap: 1px; transition: all 0.14s var(--ease); }
813
+ .ai-action b { font-size: 12px; }
814
+ .ai-action small { font-size: 9.5px; color: var(--muted); line-height: 1.35; }
815
+ .ai-action:hover { border-color: var(--line-2); background: var(--surface-2); }
816
+ .ai-action.is-on { border-color: var(--accent); background: var(--accent-soft); }
817
+ .ai-action.is-on b { color: var(--accent); }
818
+ .row-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 7px; margin-top: 2px; }
819
+ .check-line { display: flex; align-items: center; gap: 7px; font-size: 11.5px; color: var(--ink-2); }
820
+ .check-line input { accent-color: var(--accent); }
821
+ .ai-result { display: flex; flex-direction: column; gap: 8px; border: 1px solid var(--line); border-radius: 12px; background: var(--surface); padding: 12px; }
822
+ .ai-result-head { display: flex; align-items: center; gap: 8px; font-size: 11px; color: var(--muted); }
823
+ .ai-result-head b { color: var(--ink); font-size: 11.5px; }
824
+ .ai-result-body { font-size: 12.5px; line-height: 1.8; max-height: 300px; overflow-y: auto; white-space: pre-wrap; color: var(--ink); }
825
+ .ai-result-body.is-error { color: var(--danger); }
826
+ .ai-result-body.is-streaming::after { content: "▍"; color: var(--accent); animation: blink 1s steps(2) infinite; }
827
+ @keyframes blink { 50% { opacity: 0; } }
828
+ .ai-result-actions { display: flex; flex-wrap: wrap; gap: 4px; }
829
+ .ai-result-body.is-streaming ~ .ai-result-actions { opacity: 0.4; pointer-events: none; }
830
+ .ai-result-actions .btn { height: 27px; padding: 0 8px; font-size: 10.5px; }
831
+ .ai-history { display: flex; flex-direction: column; gap: 4px; }
832
+ .history-row { display: flex; align-items: baseline; gap: 7px; text-align: left; padding: 6px 7px; border-radius: 8px; font-size: 10.5px; color: var(--muted); }
833
+ .history-row:hover { background: var(--surface-2); }
834
+ .history-row b { color: var(--ink-2); font-size: 10.5px; flex: none; }
835
+ .history-row span { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
836
+ .history-row time { margin-left: auto; flex: none; font-size: 9.5px; }
837
+
838
+ .bench-write.is-focus { grid-template-columns: 0 minmax(0, 1fr) 0; }
839
+ .bench-write.is-focus .docs-pane, .bench-write.is-focus .ai-pane { display: none; }
840
+ .bench-write.is-focus .editor-wrap { max-width: 900px; margin: 0 auto; width: 100%; }
841
+
842
+ /* ---------- 星图 ---------- */
843
+ .bench-graph { display: grid; grid-template-columns: 212px minmax(0, 1fr) 296px; background: var(--bg); position: relative; }
844
+ .inspector-toggle { display: none; }
845
+ .graph-palette { border-right: 1px solid var(--line); display: flex; flex-direction: column; min-height: 0; background: var(--bg); }
846
+ .palette-head { padding: 18px 16px 10px; }
847
+ .palette-head p { font-size: 11px; color: var(--muted); margin-top: 4px; }
848
+ .palette-list { padding: 0 10px; display: flex; flex-direction: column; gap: 4px; overflow-y: auto; }
849
+ .palette-item { display: flex; align-items: center; gap: 9px; padding: 8px 8px; border-radius: 10px; border: 1px solid transparent; text-align: left; transition: all 0.15s var(--ease); }
850
+ .palette-item:hover { background: var(--surface); border-color: var(--line); box-shadow: var(--shadow-sm); }
851
+ .palette-ic { width: 30px; height: 30px; border-radius: 9px; background: color-mix(in srgb, var(--c) 12%, var(--surface)); color: var(--c); display: grid; place-items: center; flex: none; }
852
+ .palette-item span:nth-child(2) { display: flex; flex-direction: column; min-width: 0; }
853
+ .palette-item b { font-size: 12px; }
854
+ .palette-item small { font-size: 9.5px; color: var(--muted); line-height: 1.4; }
855
+ .palette-plus { margin-left: auto; color: var(--muted); opacity: 0; transition: opacity 0.15s; }
856
+ .palette-item:hover .palette-plus { opacity: 1; }
857
+ .palette-foot { margin-top: auto; padding: 14px 14px 16px; border-top: 1px solid var(--line); display: flex; flex-direction: column; gap: 8px; }
858
+ .template-list { display: flex; flex-direction: column; gap: 4px; }
859
+ .template-list button { text-align: left; padding: 7px 8px; border-radius: 8px; border: 1px solid var(--line); background: var(--surface); display: flex; flex-direction: column; gap: 1px; }
860
+ .template-list button:hover { border-color: var(--accent-2); }
861
+ .template-list b { font-size: 11px; }
862
+ .template-list small { font-size: 9.5px; color: var(--muted); }
863
+ .palette-tip { display: flex; gap: 5px; font-size: 9.5px; color: var(--muted); line-height: 1.5; margin-top: 4px; }
864
+ .palette-tip svg { flex: none; margin-top: 1px; }
865
+
866
+ .graph-main { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
867
+ .graph-toolbar { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-bottom: 1px solid var(--line); background: var(--bg); flex: none; }
868
+ .graph-id { display: flex; align-items: center; gap: 6px; min-width: 0; }
869
+ #graph-select { max-width: 150px; font-size: 12px; }
870
+ .graph-name { border: 1px solid transparent; background: transparent; border-radius: 7px; padding: 4px 6px; font-size: 12px; font-weight: 600; width: 130px; }
871
+ .graph-name:hover { border-color: var(--line); }
872
+ .graph-name:focus { background: var(--surface); border-color: var(--accent); outline: none; }
873
+ .graph-actions { margin-left: auto; display: flex; align-items: center; gap: 5px; }
874
+ .graph-status { font-size: 10.5px; color: var(--muted); display: inline-flex; align-items: center; gap: 5px; margin-right: 4px; max-width: 220px; overflow: hidden; white-space: nowrap; }
875
+ .graph-status i { width: 6px; height: 6px; border-radius: 50%; background: var(--accent); animation: pulse 1.2s infinite; }
876
+ .graph-status.is-done { color: var(--ok); }
877
+ .graph-status.is-error { color: var(--danger); }
878
+ .graph-status.is-saving { color: var(--muted); }
879
+ .tool-sep { width: 1px; height: 18px; background: var(--line); margin: 0 3px; }
880
+
881
+ .menu { position: relative; }
882
+ .menu summary { list-style: none; cursor: pointer; }
883
+ .menu summary::-webkit-details-marker { display: none; }
884
+ .menu-panel { position: absolute; right: 0; top: calc(100% + 6px); z-index: 20; min-width: 190px; padding: 5px; border-radius: 12px; background: var(--surface); border: 1px solid var(--line); box-shadow: var(--shadow); display: flex; flex-direction: column; gap: 1px; }
885
+ .menu-panel button { display: flex; align-items: center; gap: 8px; text-align: left; padding: 8px 9px; border-radius: 7px; font-size: 12px; color: var(--ink-2); }
886
+ .menu-panel button:hover { background: var(--surface-2); color: var(--ink); }
887
+ .menu-sep { height: 1px; background: var(--line); margin: 4px 2px; }
888
+ .menu-graphs { min-width: 220px; max-height: 330px; overflow-y: auto; }
889
+ .menu-graphs button span { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
890
+ .menu-panel button.is-current { color: var(--accent); background: var(--accent-soft); }
891
+ .menu-label { display: block; padding: 7px 9px 3px; font-size: 8.5px; letter-spacing: 0.12em; color: var(--muted); font-weight: 700; }
892
+ .menu-blueprints { display: flex; flex-direction: column; gap: 1px; max-height: 180px; overflow-y: auto; }
893
+ .menu-blueprints button span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
894
+ .menu-empty { padding: 4px 9px 7px; font-size: 10px; color: var(--muted); }
895
+
896
+ .graph-canvas {
897
+ position: relative;
898
+ flex: 1;
899
+ min-height: 0;
900
+ overflow: hidden;
901
+ background-color: var(--bg-soft);
902
+ background-image: radial-gradient(circle, color-mix(in srgb, var(--muted) 22%, transparent) 1px, transparent 1px);
903
+ background-size: 22px 22px;
904
+ cursor: grab;
905
+ touch-action: none;
906
+ }
907
+ .graph-canvas:active { cursor: grabbing; }
908
+ .world { position: absolute; top: 0; left: 0; width: 0; height: 0; transform-origin: 0 0; }
909
+ .world.is-animating { transition: transform 0.38s var(--ease); }
910
+ .edge-layer { position: absolute; top: 0; left: 0; overflow: visible; pointer-events: none; }
911
+ .edge { pointer-events: none; }
912
+ .edge-hit { fill: none; stroke: transparent; stroke-width: 18; pointer-events: stroke; cursor: pointer; }
913
+ .edge-line { fill: none; stroke: color-mix(in srgb, var(--ink) 30%, transparent); stroke-width: 1.7; transition: stroke 0.15s; }
914
+ .edge:hover .edge-line { stroke: color-mix(in srgb, var(--ink) 55%, transparent); }
915
+ .edge.is-selected .edge-line { stroke: var(--accent); stroke-width: 2.4; }
916
+ .edge-arrow { fill: color-mix(in srgb, var(--ink) 30%, transparent); }
917
+ .edge-temp { fill: none; stroke: var(--accent); stroke-width: 2; stroke-dasharray: 6 5; animation: dash 0.6s linear infinite; pointer-events: none; }
918
+ @keyframes dash { to { stroke-dashoffset: -11; } }
919
+ .node-layer { position: absolute; top: 0; left: 0; }
920
+
921
+ .gnode {
922
+ position: absolute;
923
+ background: var(--surface);
924
+ border: 1px solid var(--line);
925
+ border-radius: 14px;
926
+ box-shadow: var(--shadow-sm);
927
+ transition: border-color 0.15s var(--ease), box-shadow 0.15s var(--ease);
928
+ user-select: none;
929
+ }
930
+ .gnode:hover { border-color: var(--line-2); box-shadow: var(--shadow); }
931
+ .gnode.is-selected { border-color: var(--c); box-shadow: 0 0 0 2px color-mix(in srgb, var(--c) 25%, transparent), var(--shadow); }
932
+ .gnode[data-status="running"] { border-color: var(--accent); }
933
+ .gnode[data-status="error"] { border-color: color-mix(in srgb, var(--danger) 55%, var(--line)); }
934
+ .gnode-head { display: flex; align-items: center; gap: 7px; padding: 10px 12px 7px; cursor: grab; }
935
+ .gnode-head:active { cursor: grabbing; }
936
+ .gnode-ic { width: 24px; height: 24px; border-radius: 7px; background: color-mix(in srgb, var(--c) 12%, var(--surface)); color: var(--c); display: grid; place-items: center; flex: none; }
937
+ .gnode-title { font-size: 12px; font-weight: 650; }
938
+ .gnode-status { margin-left: auto; width: 6px; height: 6px; border-radius: 50%; background: var(--line-2); }
939
+ .gnode[data-status="running"] .gnode-status { background: var(--accent); animation: pulse 1.2s infinite; }
940
+ .gnode[data-status="done"] .gnode-status { background: var(--ok); }
941
+ .gnode[data-status="error"] .gnode-status { background: var(--danger); }
942
+ .gnode-body { padding: 2px 12px 10px; }
943
+ .node-text { font-size: 11px; line-height: 1.55; color: var(--ink-2); display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; white-space: pre-wrap; }
944
+ .node-tags { display: flex; gap: 4px; margin-top: 6px; }
945
+ .node-tags span { font-size: 9px; padding: 1px 5px; border-radius: 4px; background: var(--surface-2); color: var(--muted); }
946
+ .node-media { position: relative; border-radius: 9px; overflow: hidden; background: var(--surface-3); max-height: 160px; }
947
+ .node-media img, .node-media video { width: 100%; height: 100%; object-fit: cover; max-height: 160px; }
948
+ .media-badge { position: absolute; right: 6px; bottom: 6px; width: 20px; height: 20px; border-radius: 6px; background: rgba(0, 0, 0, 0.55); color: #fff; display: grid; place-items: center; }
949
+ .node-strip { display: grid; grid-template-columns: repeat(2, 1fr); gap: 2px; border-radius: 9px; overflow: hidden; }
950
+ .node-strip img { width: 100%; aspect-ratio: 16/9; object-fit: cover; }
951
+ .node-placeholder { display: flex; align-items: center; gap: 7px; padding: 10px; border-radius: 9px; background: var(--surface-2); color: var(--muted); font-size: 10.5px; }
952
+ .node-placeholder svg { color: var(--c); }
953
+ .node-running { display: flex; align-items: center; gap: 7px; padding: 9px 10px; border-radius: 9px; background: var(--surface-2); font-size: 11px; color: var(--ink-2); }
954
+ .node-running i { width: 7px; height: 7px; border-radius: 50%; background: var(--accent); animation: pulse 1.1s infinite; }
955
+ .node-error { font-size: 10.5px; color: var(--danger); line-height: 1.5; max-height: 60px; overflow: hidden; }
956
+ .gnode-foot { display: flex; align-items: center; gap: 6px; padding: 7px 12px 9px; border-top: 1px solid var(--line); font-size: 9.5px; color: var(--muted); }
957
+ .gnode-open { margin-left: auto; color: var(--accent); font-size: 9.5px; }
958
+
959
+ .port { position: absolute; transform: translateY(-50%); display: flex; align-items: center; gap: 3px; z-index: 2; }
960
+ .port::after { content: ""; position: absolute; inset: -8px; border-radius: 10px; }
961
+ .port i { width: 10px; height: 10px; border-radius: 50%; background: var(--surface); border: 1.8px solid var(--line-2); transition: all 0.15s var(--ease); }
962
+ .port em { font-style: normal; font-size: 8.5px; color: var(--muted); opacity: 0; transition: opacity 0.15s; white-space: nowrap; }
963
+ .port:hover em { opacity: 1; }
964
+ .port:hover i { border-color: var(--c); background: var(--c); transform: scale(1.15); }
965
+ .port-in { left: -6px; }
966
+ .port-in em { order: 2; margin-left: 2px; }
967
+ .port-out { right: -6px; flex-direction: row-reverse; }
968
+ .port-out em { margin-right: 2px; }
969
+ .is-connecting .port-in i { border-color: var(--accent); }
970
+ .is-connecting .port-in { cursor: crosshair; }
971
+
972
+ .canvas-empty { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; pointer-events: none; padding: 30px; }
973
+ .canvas-empty .empty-art { pointer-events: none; }
974
+ .canvas-empty h3 { font-family: var(--serif); font-size: 22px; }
975
+ .canvas-empty p { max-width: 420px; color: var(--muted); font-size: 12.5px; margin-top: 6px; line-height: 1.6; }
976
+ .canvas-hints { position: absolute; left: 12px; bottom: 10px; display: flex; gap: 12px; font-size: 9.5px; color: var(--muted); pointer-events: none; }
977
+ .zoom-tools { position: absolute; right: 12px; bottom: 10px; display: flex; align-items: center; gap: 2px; padding: 3px 5px; border-radius: 9px; background: var(--surface); border: 1px solid var(--line); box-shadow: var(--shadow-sm); font-size: 9.5px; color: var(--muted); }
978
+ .zoom-tools .icon-btn { width: 24px; height: 24px; }
979
+ #zoom-label { min-width: 30px; text-align: center; font-variant-numeric: tabular-nums; }
980
+
981
+ .graph-inspector { border-left: 1px solid var(--line); background: var(--bg); min-height: 0; overflow-y: auto; padding: 16px 16px 22px; display: flex; flex-direction: column; gap: 12px; }
982
+ .inspect-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
983
+ .inspect-head h3 { font-family: var(--serif); font-size: 18px; font-weight: 600; margin-top: 2px; }
984
+ .inspect-fields { display: flex; flex-direction: column; gap: 11px; }
985
+ .inspect-fields .field-row { grid-template-columns: 1fr 1fr; }
986
+ .inspect-fields textarea { font-size: 12.5px; }
987
+ .inspect-help { font-size: 10.5px; color: var(--muted); line-height: 1.55; }
988
+ .inspect-error { font-size: 11px; color: var(--danger); background: color-mix(in srgb, var(--danger) 7%, transparent); padding: 7px 9px; border-radius: 8px; }
989
+ .inspect-output { display: flex; flex-direction: column; gap: 6px; border-top: 1px solid var(--line); padding-top: 10px; }
990
+ .inspect-output img, .inspect-output video { border-radius: 9px; border: 1px solid var(--line); max-height: 180px; object-fit: cover; }
991
+ .inspect-output .text-btn { align-self: flex-start; }
992
+ .inspect-text { font-size: 11.5px; line-height: 1.65; max-height: 160px; overflow-y: auto; white-space: pre-wrap; color: var(--ink-2); background: var(--surface-2); padding: 8px; border-radius: 8px; }
993
+ .inspect-actions { display: flex; flex-wrap: wrap; gap: 2px; margin-top: auto; padding-top: 10px; border-top: 1px solid var(--line); }
994
+ .inspect-actions .btn { height: 28px; font-size: 10.5px; padding: 0 8px; }
995
+ .inspect-empty { text-align: center; padding: 26px 6px; color: var(--muted); display: flex; flex-direction: column; align-items: center; gap: 8px; }
996
+ .inspect-art { color: var(--accent); }
997
+ .inspect-empty h3 { font-family: var(--serif); font-size: 17px; color: var(--ink); }
998
+ .inspect-empty p { font-size: 11px; line-height: 1.6; }
999
+ .inspect-legend { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-top: 10px; width: 100%; }
1000
+ .inspect-legend span { display: flex; align-items: center; gap: 5px; font-size: 9.5px; }
1001
+ .inspect-legend i { width: 6px; height: 6px; border-radius: 2px; }
1002
+
1003
+ .layer-text { place-items: center; }
1004
+ .text-layer { width: min(720px, 90vw); max-height: 80vh; background: var(--surface); border-radius: 16px; padding: 18px 20px; display: flex; flex-direction: column; gap: 10px; box-shadow: var(--shadow); }
1005
+ .text-layer-head { display: flex; align-items: center; justify-content: space-between; }
1006
+ .text-layer pre { white-space: pre-wrap; font-family: var(--sans); font-size: 13px; line-height: 1.8; overflow-y: auto; }
1007
+ .output-lightbox { width: min(900px, 92vw); max-height: 88vh; background: #171310; border-radius: 18px; overflow: hidden; display: flex; flex-direction: column; }
1008
+ .output-lightbox img { max-height: 78vh; object-fit: contain; margin: 0 auto; }
1009
+ .output-bar { display: flex; align-items: center; justify-content: space-between; padding: 10px 14px; color: #fff; font-size: 11px; }
1010
+ .output-bar .btn { color: #fff; border-color: rgba(255,255,255,.2); }
1011
+
1012
+ /* ---------- 设置 ---------- */
1013
+ .bench-settings { flex: 1; min-height: 0; overflow-y: auto; }
1014
+ .settings-scroll { max-width: 900px; margin: 0 auto; padding: 28px 28px 60px; display: flex; flex-direction: column; gap: 16px; }
1015
+ .settings-hero { margin-bottom: 4px; }
1016
+ .settings-hero h2 { font-family: var(--serif); font-size: 26px; font-weight: 600; margin: 5px 0 7px; }
1017
+ .settings-hero p { color: var(--muted); font-size: 12.5px; line-height: 1.7; max-width: 700px; }
1018
+ .settings-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius-lg); padding: 18px 20px; box-shadow: var(--shadow-sm); }
1019
+ .settings-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; }
1020
+ .settings-title { display: flex; gap: 11px; }
1021
+ .settings-ic { width: 36px; height: 36px; border-radius: 10px; background: color-mix(in srgb, var(--c) 12%, var(--surface-2)); color: var(--c); display: grid; place-items: center; flex: none; }
1022
+ .settings-title h3 { font-size: 15px; }
1023
+ .settings-title p { font-size: 11.5px; color: var(--muted); margin-top: 2px; line-height: 1.5; }
1024
+ .ready-pill { flex: none; display: inline-flex; align-items: center; gap: 5px; font-size: 10.5px; color: var(--muted); padding: 3px 8px; border-radius: 99px; border: 1px solid var(--line); background: var(--surface-2); }
1025
+ .ready-pill i { width: 6px; height: 6px; border-radius: 50%; background: var(--muted); }
1026
+ .ready-pill.is-ok { color: var(--ok); border-color: color-mix(in srgb, var(--ok) 30%, var(--line)); }
1027
+ .ready-pill.is-ok i { background: var(--ok); }
1028
+ .settings-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 14px; margin-top: 16px; }
1029
+ .settings-actions { display: flex; align-items: center; gap: 8px; margin-top: 16px; padding-top: 13px; border-top: 1px solid var(--line); flex-wrap: wrap; }
1030
+ .settings-actions.wrap { flex-wrap: wrap; }
1031
+ .settings-actions .fine { margin-right: auto; }
1032
+ .test-result { display: flex; align-items: center; gap: 12px; margin-top: 12px; padding: 10px; border-radius: 10px; background: var(--surface-2); border: 1px solid var(--line); font-size: 11.5px; color: var(--ok); }
1033
+ .test-result img { width: 72px; height: 72px; border-radius: 8px; object-fit: cover; }
1034
+ .data-path { display: flex; align-items: center; gap: 10px; margin-top: 14px; padding: 9px 11px; border-radius: 9px; background: var(--surface-2); border: 1px solid var(--line); }
1035
+ .data-path code { font-family: var(--mono); font-size: 11px; color: var(--ink-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1036
+ .about-card { display: flex; gap: 14px; align-items: flex-start; }
1037
+ .about-mark { width: 42px; height: 42px; border-radius: 12px; background: var(--accent-soft); color: var(--accent); display: grid; place-items: center; flex: none; }
1038
+ .about-card h3 { font-size: 15px; }
1039
+ .about-card p { font-size: 11.5px; color: var(--muted); margin-top: 4px; line-height: 1.7; }
1040
+ .version { font-family: var(--mono); font-size: 10px; color: var(--muted); margin-left: 4px; }
1041
+ kbd { font-family: var(--sans); font-size: 10px; padding: 1px 4px; border-radius: 4px; border: 1px solid var(--line-2); background: var(--surface-2); }
1042
+
1043
+ /* ---------- 弹层与提示 ---------- */
1044
+ .layer-dialog { z-index: 60; }
1045
+ .dialog { width: min(420px, 90vw); background: var(--surface); border-radius: 16px; padding: 22px; box-shadow: var(--shadow); border: 1px solid var(--line); transform: translateY(6px); transition: transform 0.2s var(--ease); }
1046
+ .layer.is-in .dialog { transform: none; }
1047
+ .dialog h3 { font-family: var(--serif); font-size: 19px; }
1048
+ .dialog p { color: var(--ink-2); font-size: 12.5px; line-height: 1.65; margin: 8px 0 18px; }
1049
+ .dialog-actions { display: flex; justify-content: flex-end; gap: 8px; }
1050
+
1051
+ #toasts { position: fixed; left: 50%; bottom: 22px; transform: translateX(-50%); z-index: 80; display: flex; flex-direction: column; align-items: center; gap: 7px; pointer-events: none; }
1052
+ .toast {
1053
+ display: flex;
1054
+ align-items: center;
1055
+ gap: 8px;
1056
+ min-width: 220px;
1057
+ max-width: min(520px, 90vw);
1058
+ padding: 9px 10px 9px 12px;
1059
+ border-radius: 11px;
1060
+ background: var(--ink);
1061
+ color: var(--bg);
1062
+ box-shadow: 0 16px 40px -18px rgba(0, 0, 0, 0.6);
1063
+ font-size: 12px;
1064
+ pointer-events: auto;
1065
+ animation: toastIn 0.22s var(--ease);
1066
+ }
1067
+ .toast p { flex: 1; line-height: 1.45; }
1068
+ .toast-ic { display: grid; place-items: center; opacity: 0.85; }
1069
+ .toast-error { background: var(--danger); color: #fff; }
1070
+ .toast-success .toast-ic { color: #9fd8ac; }
1071
+ .toast-x { color: inherit; opacity: 0.6; padding: 2px; }
1072
+ .toast-x:hover { opacity: 1; }
1073
+ .toast.is-out { opacity: 0; transform: translateY(6px); transition: all 0.2s var(--ease); }
1074
+ @keyframes toastIn { from { opacity: 0; transform: translateY(8px); } }
1075
+
1076
+ /* ---------- 响应式 ---------- */
1077
+ @media (max-width: 1200px) {
1078
+ .bench-graph { grid-template-columns: 190px minmax(0, 1fr); }
1079
+ .graph-inspector { display: none; }
1080
+ .inspector-toggle { display: inline-flex; }
1081
+ .bench-graph.is-inspector-open .graph-inspector {
1082
+ display: flex;
1083
+ position: absolute;
1084
+ z-index: 8;
1085
+ top: 52px;
1086
+ right: 0;
1087
+ bottom: 0;
1088
+ width: 300px;
1089
+ background: var(--bg);
1090
+ box-shadow: -24px 0 60px -40px rgba(0, 0, 0, 0.45);
1091
+ }
1092
+ }
1093
+
1094
+ @media (max-width: 1180px) {
1095
+ .bench-write { grid-template-columns: 220px minmax(0, 1fr) 300px; }
1096
+ .bench-graph { grid-template-columns: 190px minmax(0, 1fr); }
1097
+ .vid-card { grid-template-columns: 240px minmax(0, 1fr); }
1098
+ }
1099
+
1100
+ @media (max-width: 980px) {
1101
+ :root { --rail: 64px; }
1102
+ .rail-brand span { display: none; }
1103
+ .rail-btn { font-size: 9.5px; }
1104
+ .topbar { padding: 12px 18px 11px; }
1105
+ .topbar h1 { font-size: 20px; }
1106
+ .bench-image, .bench-video { grid-template-columns: minmax(290px, 330px) minmax(0, 1fr); }
1107
+ .bench-write { grid-template-columns: 200px minmax(0, 1fr); }
1108
+ .ai-pane { display: none; }
1109
+ .bench-write.is-focus { grid-template-columns: 0 1fr; }
1110
+ .bench-graph { grid-template-columns: 176px minmax(0, 1fr); }
1111
+ .graph-inspector { display: none; }
1112
+ .editor-top, .editor-wrap, .editor-foot { padding-left: 24px; padding-right: 24px; }
1113
+ }
1114
+
1115
+ @media (max-width: 760px) {
1116
+ :root { --rail: 58px; }
1117
+ .topbar-side .status-chip span { display: none; }
1118
+ .status-chip { padding: 0 9px; }
1119
+ .topbar-desc { display: none; }
1120
+ .bench-image, .bench-video { grid-template-columns: 1fr; overflow-y: auto; }
1121
+ .composer { border-right: 0; border-bottom: 1px solid var(--line); overflow: visible; }
1122
+ .gallery-pane { overflow: visible; }
1123
+ .gallery { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 10px; }
1124
+ .bench-write { grid-template-columns: 1fr; }
1125
+ .docs-pane { display: none; }
1126
+ .ai-pane { display: flex; border-left: 0; border-top: 1px solid var(--line); }
1127
+ .bench-write { display: flex; flex-direction: column; overflow-y: auto; }
1128
+ .editor-pane { min-height: 60vh; }
1129
+ .bench-graph { grid-template-columns: 1fr; }
1130
+ .graph-palette { display: none; }
1131
+ .vid-card { grid-template-columns: 1fr; }
1132
+ .vid-media { min-height: 160px; }
1133
+ .lightbox { grid-template-columns: 1fr; height: 92vh; }
1134
+ .lb-side { max-height: 34vh; }
1135
+ .lb-next { right: 12px; }
1136
+ .settings-grid { grid-template-columns: 1fr; }
1137
+ .settings-scroll { padding: 18px 16px 50px; }
1138
+ .canvas-hints { display: none; }
1139
+ }
1140
+
1141
+ @media (prefers-reduced-motion: reduce) {
1142
+ *, *::before, *::after { animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important; }
1143
+ }