@icen.ai/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1318 @@
1
+ /*
2
+ * Icen Design System — 色彩 Tokens
3
+ *
4
+ * 5 体系 × 2 模式 = 10 套完整配色
5
+ * 每套: 12 base + 4 glow + 8 derived + 8 semantic + 8 fill + 4 border + 2 shadow + n bridge
6
+ *
7
+ * 用法: import "./colors.css";
8
+ */
9
+
10
+ /* ══════════════════════════════════════════════════════════════
11
+ CLAY — 温暖纸感 · 陶土橙 + 牛皮纸白
12
+ Warm Paper · Clay-Dust Orange × Parchment Cream
13
+ ══════════════════════════════════════════════════════════════ */
14
+
15
+ :root {
16
+ /* ── 12 Base Tokens ── */
17
+ --token-bg: #faf9f5;
18
+ --token-bg-soft: #f5f3ec;
19
+ --token-surface: #ffffff;
20
+ --token-surface-strong: #f5f3ec;
21
+ --token-line-soft: rgba(43, 41, 38, 0.12);
22
+ --token-line: rgba(43, 41, 38, 0.22);
23
+ --token-line-strong: rgba(43, 41, 38, 0.38);
24
+ --token-text: #1f1e1c;
25
+ --token-text-muted: #5e5d58;
26
+ --token-text-faint: #9d9b93;
27
+ --token-accent: #d97757;
28
+ --token-accent-cold: #7a9cb0;
29
+ --token-accent-deep: #c6613f;
30
+
31
+ /* ── Glow (background radial accents) ── */
32
+ --token-glow: rgba(217,119,87,.12);
33
+ --token-glow-cold: rgba(122,156,176,.06);
34
+
35
+ /* ── Derived ── */
36
+ --token-surface-hover: color-mix(in srgb, var(--token-surface) 92%, var(--token-accent) 8%);
37
+ --token-accent-subtle: color-mix(in srgb, var(--token-accent) 14%, transparent);
38
+ --token-accent-glow: color-mix(in srgb, var(--token-accent) 10%, transparent);
39
+ --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 55%, transparent);
40
+ --token-overlay-bg: color-mix(in srgb, var(--token-bg) 92%, transparent);
41
+ --token-on-accent: #ffffff;
42
+
43
+ /* ── Shadow ── */
44
+ --token-shadow-elevated: 0 12px 32px rgba(31, 30, 29, 0.05);
45
+ --token-shadow-overlay: 0 18px 44px rgba(31, 30, 29, 0.08);
46
+
47
+ /* ── Semantic ── */
48
+ --token-success: #3d8a5a;
49
+ --token-success-muted: color-mix(in srgb, var(--token-success) 12%, transparent);
50
+ --token-warning: #b8860b;
51
+ --token-warning-muted: rgba(184,134,11,.12);
52
+ --token-error: #c0392b;
53
+ --token-error-muted: color-mix(in srgb, var(--token-error) 12%, transparent);
54
+ --token-info: #6a8ea0;
55
+ --token-info-muted: rgba(106,142,160,.12);
56
+
57
+ /* ── Fill Scale (overlay textures) ── */
58
+ --token-fill-1: color-mix(in srgb, var(--token-text) 4%, transparent);
59
+ --token-fill-2: color-mix(in srgb, var(--token-text) 8%, transparent);
60
+ --token-fill-3: color-mix(in srgb, var(--token-text) 14%, transparent);
61
+ --token-fill-4: color-mix(in srgb, var(--token-text) 22%, transparent);
62
+
63
+ /* ── Surface Glass ── */
64
+ --token-surface-glass: color-mix(in srgb, var(--token-bg-soft) 88%, transparent);
65
+
66
+ /* ═══════════════════════════════════════════
67
+ BRIDGE — legacy component token names
68
+ ═══════════════════════════════════════════ */
69
+
70
+ /* ── 主色 ── */
71
+ --accent-clay: var(--token-accent);
72
+ --accent-clay-dark: #c6613f;
73
+ --accent-clay-light: #e8a087;
74
+ --accent-cold: var(--token-accent-cold);
75
+
76
+ /* ── 背景 ── */
77
+ --bg-primary: var(--token-bg);
78
+ --bg-secondary: var(--token-bg-soft);
79
+ --bg-tertiary: var(--token-surface);
80
+ --bg-card: #fffdfa;
81
+ --bg-card-muted: #f7f0e4;
82
+ --bg-panel: var(--token-surface-strong);
83
+ --bg-hover: var(--token-surface-hover);
84
+
85
+ /* ── 文字 ── */
86
+ --text-primary: var(--token-text);
87
+ --text-secondary: #383834;
88
+ --text-tertiary: var(--token-text-muted);
89
+ --text-muted: #87867f;
90
+ --text-subtle: var(--token-text-faint);
91
+
92
+ /* ── 边框 ── */
93
+ --border-subtle: var(--token-line-soft);
94
+ --border-default: var(--token-line);
95
+ --border-strong: var(--token-line-strong);
96
+
97
+ /* ── 阴影 ── */
98
+ --shadow-sm: var(--token-shadow-elevated);
99
+ --shadow-md: var(--token-shadow-overlay);
100
+
101
+ /* ── 语义色 ── */
102
+ --color-success: var(--token-success);
103
+ --color-success-bg: var(--token-success-muted);
104
+ --color-warning: var(--token-warning);
105
+ --color-warning-bg: var(--token-warning-muted);
106
+ --color-error: var(--token-error);
107
+ --color-error-bg: var(--token-error-muted);
108
+ --color-info: var(--token-info);
109
+ --color-info-bg: var(--token-info-muted);
110
+ --color-pending: #87867f;
111
+ --color-pending-bg: #f9f9f8;
112
+
113
+ /* ── 装饰色 ── */
114
+ --accent-clay-bg: color-mix(in srgb, var(--token-accent) 8%, transparent);
115
+ --accent-clay-bg-strong: var(--token-accent-subtle);
116
+ --accent-clay-border: color-mix(in srgb, var(--token-accent) 22%, transparent);
117
+ }
118
+
119
+ /* ── CLAY DARK ── */
120
+ .dark {
121
+ /* ── 12 Base Tokens ── */
122
+ --token-bg: #171410;
123
+ --token-bg-soft: #211d19;
124
+ --token-surface: #2a2520;
125
+ --token-surface-strong: #302b25;
126
+ --token-line-soft: #3b352f;
127
+ --token-line: #4c433b;
128
+ --token-line-strong: #5e5349;
129
+ --token-text: #f5f4f0;
130
+ --token-text-muted: #a8a6a0;
131
+ --token-text-faint: #6a6863;
132
+ --token-accent: #e08a68;
133
+ --token-accent-cold: #7aa0b8;
134
+
135
+ /* ── Glow ── */
136
+ --token-glow: rgba(224,138,104,.10);
137
+ --token-glow-cold: rgba(122,160,184,.05);
138
+
139
+ /* ── Derived ── */
140
+ --token-surface-hover: color-mix(in srgb, var(--token-surface) 90%, var(--token-accent) 10%);
141
+ --token-accent-subtle: color-mix(in srgb, var(--token-accent) 12%, transparent);
142
+ --token-accent-glow: color-mix(in srgb, var(--token-accent) 8%, transparent);
143
+ --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 55%, transparent);
144
+ --token-overlay-bg: color-mix(in srgb, var(--token-bg) 94%, transparent);
145
+ --token-on-accent: #ffffff;
146
+
147
+ /* ── Shadow ── */
148
+ --token-shadow-elevated: 0 1px 2px rgba(0,0,0,.18), 0 4px 12px rgba(0,0,0,.16);
149
+ --token-shadow-overlay: 0 2px 4px rgba(0,0,0,.22), 0 8px 24px rgba(0,0,0,.26);
150
+
151
+ /* ── Semantic ── */
152
+ --token-success: #8fbfaa;
153
+ --token-success-muted: rgba(143,191,170,.15);
154
+ --token-warning: #d4a520;
155
+ --token-warning-muted: rgba(212,165,32,.15);
156
+ --token-error: #d46a45;
157
+ --token-error-muted: rgba(212,106,69,.15);
158
+ --token-info: #6a9ab8;
159
+ --token-info-muted: rgba(106,154,184,.15);
160
+
161
+ /* ── Fill ── */
162
+ --token-fill-1: color-mix(in srgb, var(--token-text) 5%, transparent);
163
+ --token-fill-2: color-mix(in srgb, var(--token-text) 10%, transparent);
164
+ --token-fill-3: color-mix(in srgb, var(--token-text) 16%, transparent);
165
+ --token-fill-4: color-mix(in srgb, var(--token-text) 24%, transparent);
166
+
167
+ /* ── Surface Glass ── */
168
+ --token-surface-glass: color-mix(in srgb, var(--token-bg-soft) 82%, transparent);
169
+
170
+ /* ── BRIDGE ── */
171
+ --accent-clay: var(--token-accent);
172
+ --accent-clay-dark: #d47a57;
173
+ --accent-clay-light: #eba38a;
174
+ --accent-cold: var(--token-accent-cold);
175
+ --bg-primary: var(--token-bg);
176
+ --bg-secondary: var(--token-bg-soft);
177
+ --bg-tertiary: var(--token-surface);
178
+ --bg-card: #221f1b;
179
+ --bg-card-muted: #26221d;
180
+ --bg-panel: var(--token-surface-strong);
181
+ --bg-hover: var(--token-surface-hover);
182
+ --text-primary: var(--token-text);
183
+ --text-secondary: #d4d3ce;
184
+ --text-tertiary: var(--token-text-muted);
185
+ --text-muted: #7a7872;
186
+ --text-subtle: var(--token-text-faint);
187
+ --border-subtle: var(--token-line-soft);
188
+ --border-default: var(--token-line);
189
+ --border-strong: var(--token-line-strong);
190
+ --shadow-sm: var(--token-shadow-elevated);
191
+ --shadow-md: var(--token-shadow-overlay);
192
+ --color-success: var(--token-success);
193
+ --color-success-bg: var(--token-success-muted);
194
+ --color-warning: var(--token-warning);
195
+ --color-warning-bg: var(--token-warning-muted);
196
+ --color-error: var(--token-error);
197
+ --color-error-bg: var(--token-error-muted);
198
+ --color-info: var(--token-info);
199
+ --color-info-bg: var(--token-info-muted);
200
+ --color-pending: #7a7872;
201
+ --color-pending-bg: #222120;
202
+ --accent-clay-bg: color-mix(in srgb, var(--token-accent) 8%, transparent);
203
+ --accent-clay-bg-strong: var(--token-accent-subtle);
204
+ --accent-clay-border: color-mix(in srgb, var(--token-accent) 22%, transparent);
205
+ }
206
+
207
+ /* ══════════════════════════════════════════════════════════════
208
+ PIANO — 象牙琴键 · 乌木黑键 · 大漆光泽
209
+ Piano Keys · Ivory × Ebony Lacquer · Brass Nameplate
210
+ ══════════════════════════════════════════════════════════════ */
211
+
212
+ .piano {
213
+ /* ── 12 Base Tokens ── */
214
+ --token-bg: #f1eee6;
215
+ --token-bg-soft: #e5dfd2;
216
+ --token-surface: #faf8f2;
217
+ --token-surface-strong: #eee8db;
218
+ --token-line-soft: #d2cab9;
219
+ --token-line: #b8ad9a;
220
+ --token-line-strong: #8f8578;
221
+ --token-text: #11100e;
222
+ --token-text-muted: #4e4b45;
223
+ --token-text-faint: #8b857b;
224
+ --token-accent: #b89145;
225
+ --token-accent-cold: #566370;
226
+
227
+ /* ── Glow ── */
228
+ --token-glow: rgba(184,145,69,.12);
229
+ --token-glow-cold: rgba(22,24,26,.05);
230
+
231
+ /* ── Derived ── */
232
+ --token-surface-hover: color-mix(in srgb, var(--token-surface-strong) 88%, var(--token-accent) 12%);
233
+ --token-accent-subtle: color-mix(in srgb, var(--token-accent) 14%, transparent);
234
+ --token-accent-glow: color-mix(in srgb, var(--token-accent) 10%, transparent);
235
+ --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 55%, transparent);
236
+ --token-overlay-bg: color-mix(in srgb, var(--token-bg) 92%, transparent);
237
+ --token-on-accent: #12100b;
238
+
239
+ /* ── Shadow · 漆面冷反光 ── */
240
+ --token-shadow-elevated: 0 1px 2px rgba(17,16,14,.06), 0 7px 20px rgba(17,16,14,.08);
241
+ --token-shadow-overlay: 0 2px 5px rgba(17,16,14,.10), 0 16px 42px rgba(17,16,14,.16);
242
+
243
+ /* ── Semantic ── */
244
+ --token-success: #5a9e7a;
245
+ --token-success-muted: rgba(90,158,122,.10);
246
+ --token-warning: #b89145;
247
+ --token-warning-muted: rgba(184,145,69,.12);
248
+ --token-error: #a84a42;
249
+ --token-error-muted: rgba(168,74,66,.10);
250
+ --token-info: #5a7488;
251
+ --token-info-muted: rgba(90,116,136,.10);
252
+
253
+ /* ── Fill ── */
254
+ --token-fill-1: color-mix(in srgb, var(--token-text) 3%, transparent);
255
+ --token-fill-2: color-mix(in srgb, var(--token-text) 6%, transparent);
256
+ --token-fill-3: color-mix(in srgb, var(--token-text) 10%, transparent);
257
+ --token-fill-4: color-mix(in srgb, var(--token-text) 16%, transparent);
258
+
259
+ /* ── Surface Glass ── */
260
+ --token-surface-glass: color-mix(in srgb, var(--token-surface) 86%, transparent);
261
+
262
+ /* ── BRIDGE ── */
263
+ --accent-clay: var(--token-accent);
264
+ --accent-clay-dark: #967333;
265
+ --accent-clay-light: #d2b36f;
266
+ --accent-cold: var(--token-accent-cold);
267
+ --bg-primary: var(--token-bg);
268
+ --bg-secondary: var(--token-bg-soft);
269
+ --bg-tertiary: var(--token-surface);
270
+ --bg-card: var(--token-surface);
271
+ --bg-card-muted: var(--token-bg-soft);
272
+ --bg-panel: var(--token-surface-strong);
273
+ --bg-hover: var(--token-surface-hover);
274
+ --text-primary: var(--token-text);
275
+ --text-secondary: #2e2b27;
276
+ --text-tertiary: var(--token-text-muted);
277
+ --text-muted: #8b857b;
278
+ --text-subtle: var(--token-text-faint);
279
+ --border-subtle: var(--token-line-soft);
280
+ --border-default: var(--token-line);
281
+ --border-strong: var(--token-line-strong);
282
+ --shadow-sm: var(--token-shadow-elevated);
283
+ --shadow-md: var(--token-shadow-overlay);
284
+ --color-success: var(--token-success);
285
+ --color-success-bg: var(--token-success-muted);
286
+ --color-warning: var(--token-warning);
287
+ --color-warning-bg: var(--token-warning-muted);
288
+ --color-error: var(--token-error);
289
+ --color-error-bg: var(--token-error-muted);
290
+ --color-info: var(--token-info);
291
+ --color-info-bg: var(--token-info-muted);
292
+ --color-pending: #8b857b;
293
+ --color-pending-bg: var(--token-bg-soft);
294
+ --accent-clay-bg: var(--token-accent-subtle);
295
+ --accent-clay-bg-strong: color-mix(in srgb, var(--token-accent) 20%, transparent);
296
+ --accent-clay-border: color-mix(in srgb, var(--token-accent) 24%, transparent);
297
+ }
298
+
299
+ /* ── PIANO DARK ── */
300
+ .piano.dark {
301
+ /* ── 12 Base Tokens ── */
302
+ --token-bg: #090909;
303
+ --token-bg-soft: #11100f;
304
+ --token-surface: #1a1917;
305
+ --token-surface-strong: #24221f;
306
+ --token-line-soft: #2f2c27;
307
+ --token-line: #463f34;
308
+ --token-line-strong: #685b45;
309
+ --token-text: #f6f1e7;
310
+ --token-text-muted: #b7afa2;
311
+ --token-text-faint: #736b60;
312
+ --token-accent: #d6b567;
313
+ --token-accent-cold: #7c8a94;
314
+
315
+ /* ── Glow ── */
316
+ --token-glow: rgba(214,181,103,.14);
317
+ --token-glow-cold: rgba(210,220,225,.04);
318
+
319
+ /* ── Derived ── */
320
+ --token-surface-hover: color-mix(in srgb, var(--token-surface-strong) 88%, var(--token-accent) 12%);
321
+ --token-accent-subtle: color-mix(in srgb, var(--token-accent) 12%, transparent);
322
+ --token-accent-glow: color-mix(in srgb, var(--token-accent) 8%, transparent);
323
+ --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 60%, transparent);
324
+ --token-overlay-bg: color-mix(in srgb, var(--token-bg) 95%, transparent);
325
+ --token-on-accent: #0a0a0a;
326
+
327
+ /* ── Shadow ── */
328
+ --token-shadow-elevated: 0 1px 2px rgba(0,0,0,.28), 0 10px 26px rgba(0,0,0,.34);
329
+ --token-shadow-overlay: 0 2px 5px rgba(0,0,0,.34), 0 18px 46px rgba(0,0,0,.46);
330
+
331
+ /* ── Semantic ── */
332
+ --token-success: #7ac09a;
333
+ --token-success-muted: rgba(122,192,154,.12);
334
+ --token-warning: #d6b567;
335
+ --token-warning-muted: rgba(214,181,103,.13);
336
+ --token-error: #d07668;
337
+ --token-error-muted: rgba(208,118,104,.12);
338
+ --token-info: #7293aa;
339
+ --token-info-muted: rgba(114,147,170,.12);
340
+
341
+ /* ── Fill ── */
342
+ --token-fill-1: color-mix(in srgb, var(--token-text) 4%, transparent);
343
+ --token-fill-2: color-mix(in srgb, var(--token-text) 8%, transparent);
344
+ --token-fill-3: color-mix(in srgb, var(--token-text) 14%, transparent);
345
+ --token-fill-4: color-mix(in srgb, var(--token-text) 22%, transparent);
346
+
347
+ /* ── Surface Glass ── */
348
+ --token-surface-glass: color-mix(in srgb, var(--token-bg-soft) 82%, transparent);
349
+
350
+ /* ── BRIDGE ── */
351
+ --accent-clay: var(--token-accent);
352
+ --accent-clay-dark: #b8954b;
353
+ --accent-clay-light: #e7cf8b;
354
+ --accent-cold: var(--token-accent-cold);
355
+ --bg-primary: var(--token-bg);
356
+ --bg-secondary: var(--token-bg-soft);
357
+ --bg-tertiary: var(--token-surface);
358
+ --bg-card: var(--token-bg-soft);
359
+ --bg-card-muted: var(--token-surface);
360
+ --bg-panel: var(--token-surface-strong);
361
+ --bg-hover: var(--token-surface-hover);
362
+ --text-primary: var(--token-text);
363
+ --text-secondary: #d8d0c2;
364
+ --text-tertiary: var(--token-text-muted);
365
+ --text-muted: var(--token-text-faint);
366
+ --text-subtle: var(--token-text-faint);
367
+ --border-subtle: var(--token-line-soft);
368
+ --border-default: var(--token-line);
369
+ --border-strong: var(--token-line-strong);
370
+ --shadow-sm: var(--token-shadow-elevated);
371
+ --shadow-md: var(--token-shadow-overlay);
372
+ --color-success: var(--token-success);
373
+ --color-success-bg: var(--token-success-muted);
374
+ --color-warning: var(--token-warning);
375
+ --color-warning-bg: var(--token-warning-muted);
376
+ --color-error: var(--token-error);
377
+ --color-error-bg: var(--token-error-muted);
378
+ --color-info: var(--token-info);
379
+ --color-info-bg: var(--token-info-muted);
380
+ --color-pending: var(--token-text-faint);
381
+ --color-pending-bg: var(--token-bg-soft);
382
+ --accent-clay-bg: var(--token-accent-subtle);
383
+ --accent-clay-bg-strong: color-mix(in srgb, var(--token-accent) 16%, transparent);
384
+ --accent-clay-border: color-mix(in srgb, var(--token-accent) 24%, transparent);
385
+ }
386
+
387
+ /* ══════════════════════════════════════════════════════════════
388
+ ART — 莫奈 · 日出印象 + 睡莲
389
+ Monet · Impression, Sunrise × Water Lilies
390
+ ══════════════════════════════════════════════════════════════ */
391
+
392
+ /* ── ART LIGHT · 日出印象 (Claude Monet, 1872) ── */
393
+ .art {
394
+ /* 勒阿弗尔晨雾 · 日出橙红 · 港湾青灰 */
395
+ --token-bg: #dce8e3;
396
+ --token-bg-soft: #ccdcd6;
397
+ --token-surface: #edf3ee;
398
+ --token-surface-strong: #d8e6df;
399
+ --token-line-soft: #b7c9c1;
400
+ --token-line: #96aaa2;
401
+ --token-line-strong: #718980;
402
+ --token-text: #172226;
403
+ --token-text-muted: #445553;
404
+ --token-text-faint: #768985;
405
+ --token-accent: #d66f4f;
406
+ --token-accent-cold: #4f8f90;
407
+
408
+ /* ── Glow · 雾霭橙光 ── */
409
+ --token-glow: rgba(214,111,79,.12);
410
+ --token-glow-cold: rgba(79,143,144,.07);
411
+
412
+ /* ── Derived ── */
413
+ --token-surface-hover: color-mix(in srgb, var(--token-surface-strong) 88%, var(--token-accent) 12%);
414
+ --token-accent-subtle: color-mix(in srgb, var(--token-accent) 12%, transparent);
415
+ --token-accent-glow: color-mix(in srgb, var(--token-accent) 8%, transparent);
416
+ --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 55%, transparent);
417
+ --token-overlay-bg: color-mix(in srgb, var(--token-bg) 94%, transparent);
418
+ --token-on-accent: #ffffff;
419
+
420
+ --token-shadow-elevated: 0 1px 2px rgba(23,34,38,.05), 0 6px 18px rgba(23,34,38,.08);
421
+ --token-shadow-overlay: 0 2px 5px rgba(23,34,38,.08), 0 12px 32px rgba(23,34,38,.12);
422
+
423
+ --token-success: #5a8c6e;
424
+ --token-success-muted: rgba(90,140,110,.10);
425
+ --token-warning: #b67933;
426
+ --token-warning-muted: rgba(182,121,51,.11);
427
+ --token-error: #b95e52;
428
+ --token-error-muted: rgba(185,94,82,.11);
429
+ --token-info: #568aa0;
430
+ --token-info-muted: rgba(86,138,160,.11);
431
+
432
+ --token-fill-1: color-mix(in srgb, var(--token-text) 3%, transparent);
433
+ --token-fill-2: color-mix(in srgb, var(--token-text) 6%, transparent);
434
+ --token-fill-3: color-mix(in srgb, var(--token-text) 10%, transparent);
435
+ --token-fill-4: color-mix(in srgb, var(--token-text) 16%, transparent);
436
+
437
+ --token-surface-glass: color-mix(in srgb, var(--token-bg) 84%, transparent);
438
+
439
+ /* ── BRIDGE ── */
440
+ --accent-clay: var(--token-accent);
441
+ --accent-clay-dark: #b95a3c;
442
+ --accent-clay-light: #e69a82;
443
+ --accent-cold: var(--token-accent-cold);
444
+ --bg-primary: var(--token-bg);
445
+ --bg-secondary: var(--token-bg-soft);
446
+ --bg-tertiary: var(--token-surface);
447
+ --bg-card: var(--token-surface);
448
+ --bg-card-muted: var(--token-bg-soft);
449
+ --bg-panel: var(--token-surface-strong);
450
+ --bg-hover: var(--token-surface-hover);
451
+ --text-primary: var(--token-text);
452
+ --text-secondary: var(--token-text-muted);
453
+ --text-tertiary: #556864;
454
+ --text-muted: var(--token-text-faint);
455
+ --text-subtle: var(--token-line-strong);
456
+ --border-subtle: var(--token-line-soft);
457
+ --border-default: var(--token-line);
458
+ --border-strong: var(--token-line-strong);
459
+ --shadow-sm: var(--token-shadow-elevated);
460
+ --shadow-md: var(--token-shadow-overlay);
461
+ --color-success: var(--token-success);
462
+ --color-success-bg: var(--token-success-muted);
463
+ --color-warning: var(--token-warning);
464
+ --color-warning-bg: var(--token-warning-muted);
465
+ --color-error: var(--token-error);
466
+ --color-error-bg: var(--token-error-muted);
467
+ --color-info: var(--token-info);
468
+ --color-info-bg: var(--token-info-muted);
469
+ --color-pending: var(--token-text-faint);
470
+ --color-pending-bg: var(--token-fill-1);
471
+ --accent-clay-bg: var(--token-accent-subtle);
472
+ --accent-clay-bg-strong: color-mix(in srgb, var(--token-accent) 14%, transparent);
473
+ --accent-clay-border: color-mix(in srgb, var(--token-accent) 20%, transparent);
474
+ }
475
+
476
+ /* ── ART DARK · 莫奈睡莲 (Water Lilies) ── */
477
+ .art.dark {
478
+ /* 睡莲池水 · 暮色蓝绿 · 莲粉紫影 */
479
+ --token-bg: #172521;
480
+ --token-bg-soft: #1d312c;
481
+ --token-surface: #263d37;
482
+ --token-surface-strong: #304a42;
483
+ --token-line-soft: #35554c;
484
+ --token-line: #4c7167;
485
+ --token-line-strong: #659082;
486
+ --token-text: #edf1e8;
487
+ --token-text-muted: #c1cabd;
488
+ --token-text-faint: #7f9188;
489
+ --token-accent: #d59ab1;
490
+ --token-accent-cold: #78aaa2;
491
+
492
+ /* ── Glow · 池面粉紫和水光 ── */
493
+ --token-glow: rgba(213,154,177,.10);
494
+ --token-glow-cold: rgba(120,170,162,.10);
495
+
496
+ /* ── Derived ── */
497
+ --token-surface-hover: color-mix(in srgb, var(--token-surface) 86%, var(--token-accent-cold) 14%);
498
+ --token-accent-subtle: color-mix(in srgb, var(--token-accent) 12%, transparent);
499
+ --token-accent-glow: color-mix(in srgb, var(--token-accent) 8%, transparent);
500
+ --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 60%, transparent);
501
+ --token-overlay-bg: color-mix(in srgb, var(--token-bg) 92%, transparent);
502
+
503
+ --token-shadow-elevated: 0 1px 2px rgba(0,0,0,.18), 0 8px 22px rgba(0,0,0,.24);
504
+ --token-shadow-overlay: 0 2px 5px rgba(0,0,0,.24), 0 14px 36px rgba(0,0,0,.32);
505
+
506
+ --token-success: #5ab88a;
507
+ --token-success-muted: rgba(90,184,138,.12);
508
+ --token-warning: #c5aa68;
509
+ --token-warning-muted: rgba(197,170,104,.12);
510
+ --token-error: #d1847e;
511
+ --token-error-muted: rgba(209,132,126,.12);
512
+ --token-info: #78aaa2;
513
+ --token-info-muted: rgba(120,170,162,.12);
514
+
515
+ --token-fill-1: color-mix(in srgb, var(--token-text) 4%, transparent);
516
+ --token-fill-2: color-mix(in srgb, var(--token-text) 8%, transparent);
517
+ --token-fill-3: color-mix(in srgb, var(--token-text) 14%, transparent);
518
+ --token-fill-4: color-mix(in srgb, var(--token-text) 22%, transparent);
519
+
520
+ --token-surface-glass: color-mix(in srgb, var(--token-bg-soft) 82%, transparent);
521
+
522
+ /* ── BRIDGE ── */
523
+ --accent-clay: var(--token-accent);
524
+ --accent-clay-dark: #bc7f9a;
525
+ --accent-clay-light: #e4b7ca;
526
+ --accent-cold: var(--token-accent-cold);
527
+ --bg-primary: var(--token-bg);
528
+ --bg-secondary: var(--token-bg-soft);
529
+ --bg-tertiary: var(--token-surface);
530
+ --bg-card: var(--token-bg-soft);
531
+ --bg-card-muted: var(--token-surface);
532
+ --bg-panel: var(--token-surface-strong);
533
+ --bg-hover: var(--token-surface-hover);
534
+ --text-primary: var(--token-text);
535
+ --text-secondary: var(--token-text-muted);
536
+ --text-tertiary: #a5b1aa;
537
+ --text-muted: var(--token-text-faint);
538
+ --text-subtle: var(--token-line-strong);
539
+ --border-subtle: var(--token-line-soft);
540
+ --border-default: var(--token-line);
541
+ --border-strong: var(--token-line-strong);
542
+ --shadow-sm: var(--token-shadow-elevated);
543
+ --shadow-md: var(--token-shadow-overlay);
544
+ --color-success: var(--token-success);
545
+ --color-success-bg: var(--token-success-muted);
546
+ --color-warning: var(--token-warning);
547
+ --color-warning-bg: var(--token-warning-muted);
548
+ --color-error: var(--token-error);
549
+ --color-error-bg: var(--token-error-muted);
550
+ --color-info: var(--token-info);
551
+ --color-info-bg: var(--token-info-muted);
552
+ --color-pending: var(--token-text-faint);
553
+ --color-pending-bg: var(--token-fill-1);
554
+ --accent-clay-bg: var(--token-accent-subtle);
555
+ --accent-clay-bg-strong: color-mix(in srgb, var(--token-accent) 14%, transparent);
556
+ --accent-clay-border: color-mix(in srgb, var(--token-accent) 22%, transparent);
557
+ }
558
+
559
+ /* ══════════════════════════════════════════════════════════════
560
+ VANGOGH — 麦田鸦群 + 星空
561
+ Van Gogh · Wheatfield × Starry Night
562
+ ══════════════════════════════════════════════════════════════ */
563
+
564
+ /* ── VANGOGH LIGHT · 麦田鸦群 ── */
565
+ .vangogh {
566
+ /* 干麦秆画布 · 麦浪金 · 普鲁士蓝阴影 */
567
+ --token-bg: #e8ddb2;
568
+ --token-bg-soft: #d5c58f;
569
+ --token-surface: #f2e8bd;
570
+ --token-surface-strong: #decb85;
571
+ --token-line-soft: #c0ad6e;
572
+ --token-line: #9f8b53;
573
+ --token-line-strong: #70623f;
574
+ --token-text: #1f241b;
575
+ --token-text-muted: #4a5138;
576
+ --token-text-faint: #767b57;
577
+ --token-accent: #1f527c;
578
+ --token-accent-cold: #476f45;
579
+
580
+ --token-glow: rgba(31,82,124,.09);
581
+ --token-glow-cold: rgba(71,111,69,.07);
582
+
583
+ --token-surface-hover: color-mix(in srgb, var(--token-surface-strong) 90%, var(--token-accent) 10%);
584
+ --token-accent-subtle: color-mix(in srgb, var(--token-accent) 10%, transparent);
585
+ --token-accent-glow: color-mix(in srgb, var(--token-accent) 7%, transparent);
586
+ --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 60%, transparent);
587
+ --token-overlay-bg: color-mix(in srgb, var(--token-bg) 94%, transparent);
588
+ --token-on-accent: #fff3c5;
589
+
590
+ --token-shadow-elevated: 0 1px 2px rgba(31,36,27,.06), 0 7px 20px rgba(31,36,27,.10);
591
+ --token-shadow-overlay: 0 2px 5px rgba(31,36,27,.09), 0 16px 40px rgba(31,36,27,.15);
592
+
593
+ --token-success: #3f7d50;
594
+ --token-success-muted: rgba(63,125,80,.12);
595
+ --token-warning: #a97824;
596
+ --token-warning-muted: rgba(169,120,36,.12);
597
+ --token-error: #9c513a;
598
+ --token-error-muted: rgba(156,81,58,.11);
599
+ --token-info: #2d638e;
600
+ --token-info-muted: rgba(45,99,142,.11);
601
+
602
+ --token-fill-1: color-mix(in srgb, var(--token-text) 4%, transparent);
603
+ --token-fill-2: color-mix(in srgb, var(--token-text) 8%, transparent);
604
+ --token-fill-3: color-mix(in srgb, var(--token-text) 13%, transparent);
605
+ --token-fill-4: color-mix(in srgb, var(--token-text) 20%, transparent);
606
+
607
+ --token-surface-glass: color-mix(in srgb, var(--token-surface) 82%, transparent);
608
+
609
+ /* ── BRIDGE ── */
610
+ --accent-clay: var(--token-accent);
611
+ --accent-clay-dark: #173f64;
612
+ --accent-clay-light: #5b82a6;
613
+ --accent-cold: var(--token-accent-cold);
614
+ --bg-primary: var(--token-bg);
615
+ --bg-secondary: var(--token-bg-soft);
616
+ --bg-tertiary: var(--token-surface);
617
+ --bg-card: var(--token-surface);
618
+ --bg-card-muted: var(--token-bg-soft);
619
+ --bg-panel: var(--token-surface-strong);
620
+ --bg-hover: var(--token-surface-hover);
621
+ --text-primary: var(--token-text);
622
+ --text-secondary: var(--token-text-muted);
623
+ --text-tertiary: #606847;
624
+ --text-muted: var(--token-text-faint);
625
+ --text-subtle: var(--token-line-strong);
626
+ --border-subtle: var(--token-line-soft);
627
+ --border-default: var(--token-line);
628
+ --border-strong: var(--token-line-strong);
629
+ --shadow-sm: var(--token-shadow-elevated);
630
+ --shadow-md: var(--token-shadow-overlay);
631
+ --color-success: var(--token-success);
632
+ --color-success-bg: var(--token-success-muted);
633
+ --color-warning: var(--token-warning);
634
+ --color-warning-bg: var(--token-warning-muted);
635
+ --color-error: var(--token-error);
636
+ --color-error-bg: var(--token-error-muted);
637
+ --color-info: var(--token-info);
638
+ --color-info-bg: var(--token-info-muted);
639
+ --color-pending: var(--token-text-faint);
640
+ --color-pending-bg: var(--token-fill-1);
641
+ --accent-clay-bg: var(--token-accent-subtle);
642
+ --accent-clay-bg-strong: color-mix(in srgb, var(--token-accent) 16%, transparent);
643
+ --accent-clay-border: color-mix(in srgb, var(--token-accent) 24%, transparent);
644
+ }
645
+
646
+ /* ── VANGOGH DARK · 星空 ── */
647
+ .vangogh.dark {
648
+ /* 钴蓝夜空 · 漩涡青蓝 · 星点暖黄 */
649
+ --token-bg: #0f1b2e;
650
+ --token-bg-soft: #142440;
651
+ --token-surface: #1a3050;
652
+ --token-surface-strong: #223a60;
653
+ --token-line-soft: #1c3455;
654
+ --token-line: #2a4a75;
655
+ --token-line-strong: #3a5a8a;
656
+ --token-text: #f0ece0;
657
+ --token-text-muted: #c0bcb0;
658
+ --token-text-faint: #77728b;
659
+ --token-accent: #e8c840;
660
+ --token-accent-cold: #4a98b8;
661
+
662
+ --token-glow: rgba(232,200,64,.12);
663
+ --token-glow-cold: rgba(74,152,184,.08);
664
+
665
+ --token-surface-hover: color-mix(in srgb, var(--token-surface) 88%, var(--token-accent) 12%);
666
+ --token-accent-subtle: color-mix(in srgb, var(--token-accent) 10%, transparent);
667
+ --token-accent-glow: color-mix(in srgb, var(--token-accent) 6%, transparent);
668
+ --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 60%, transparent);
669
+ --token-overlay-bg: color-mix(in srgb, var(--token-bg) 92%, transparent);
670
+ --token-on-accent: #101824;
671
+
672
+ --token-shadow-elevated: 0 1px 2px rgba(0,0,0,.14), 0 4px 12px rgba(0,0,0,.20);
673
+ --token-shadow-overlay: 0 2px 4px rgba(0,0,0,.18), 0 8px 24px rgba(0,0,0,.28);
674
+
675
+ --token-success: #5ab88a;
676
+ --token-success-muted: rgba(90,184,138,.12);
677
+ --token-warning: #d4a028;
678
+ --token-warning-muted: rgba(212,160,40,.12);
679
+ --token-error: #d06060;
680
+ --token-error-muted: rgba(208,96,96,.12);
681
+ --token-info: #6090c0;
682
+ --token-info-muted: rgba(96,144,192,.12);
683
+
684
+ --token-fill-1: color-mix(in srgb, var(--token-text) 4%, transparent);
685
+ --token-fill-2: color-mix(in srgb, var(--token-text) 8%, transparent);
686
+ --token-fill-3: color-mix(in srgb, var(--token-text) 14%, transparent);
687
+ --token-fill-4: color-mix(in srgb, var(--token-text) 22%, transparent);
688
+
689
+ --token-surface-glass: color-mix(in srgb, var(--token-bg-soft) 82%, transparent);
690
+
691
+ /* ── BRIDGE ── */
692
+ --accent-clay: var(--token-accent);
693
+ --accent-clay-dark: #c8a830;
694
+ --accent-clay-light: #f0e070;
695
+ --accent-cold: var(--token-accent-cold);
696
+ --bg-primary: var(--token-bg);
697
+ --bg-secondary: var(--token-bg-soft);
698
+ --bg-tertiary: var(--token-surface);
699
+ --bg-card: var(--token-bg-soft);
700
+ --bg-card-muted: var(--token-surface);
701
+ --bg-panel: var(--token-surface-strong);
702
+ --bg-hover: var(--token-surface-hover);
703
+ --text-primary: var(--token-text);
704
+ --text-secondary: var(--token-text-muted);
705
+ --text-tertiary: #a0a098;
706
+ --text-muted: var(--token-text-faint);
707
+ --text-subtle: var(--token-line-strong);
708
+ --border-subtle: var(--token-line-soft);
709
+ --border-default: var(--token-line);
710
+ --border-strong: var(--token-line-strong);
711
+ --shadow-sm: var(--token-shadow-elevated);
712
+ --shadow-md: var(--token-shadow-overlay);
713
+ --color-success: var(--token-success);
714
+ --color-success-bg: var(--token-success-muted);
715
+ --color-warning: var(--token-warning);
716
+ --color-warning-bg: var(--token-warning-muted);
717
+ --color-error: var(--token-error);
718
+ --color-error-bg: var(--token-error-muted);
719
+ --color-info: var(--token-info);
720
+ --color-info-bg: var(--token-info-muted);
721
+ --color-pending: var(--token-text-faint);
722
+ --color-pending-bg: var(--token-fill-1);
723
+ --accent-clay-bg: var(--token-accent-subtle);
724
+ --accent-clay-bg-strong: color-mix(in srgb, var(--token-accent) 14%, transparent);
725
+ --accent-clay-border: color-mix(in srgb, var(--token-accent) 22%, transparent);
726
+ }
727
+
728
+ /* ══════════════════════════════════════════════════════════════
729
+ INK — 水墨纸砚 · 松烟翠
730
+ Sumi Ink · Rice Paper × Pine-Soot Green
731
+ ══════════════════════════════════════════════════════════════ */
732
+
733
+ /* ── INK LIGHT · 宣纸水墨 ── */
734
+ .ink {
735
+ /* 宣纸白底 · 墨灰 · 松烟绿 accent */
736
+ --token-bg: #F5F2ED;
737
+ --token-bg-soft: #EDE9E2;
738
+ --token-surface: #E8E4DC;
739
+ --token-surface-strong: #E0DBD2;
740
+ --token-line-soft: #D4CFC6;
741
+ --token-line: #B8B2A8;
742
+ --token-line-strong: #969088;
743
+ --token-text: #1A1816;
744
+ --token-text-muted: #5C5854;
745
+ --token-text-faint: #969088;
746
+ --token-accent: #5B7A5E;
747
+ --token-accent-cold: #6B7E8A;
748
+
749
+ --token-glow: rgba(91,122,94,.08);
750
+ --token-glow-cold: rgba(107,126,138,.04);
751
+
752
+ --token-surface-hover: color-mix(in srgb, var(--token-surface) 94%, var(--token-accent) 6%);
753
+ --token-accent-subtle: color-mix(in srgb, var(--token-accent) 10%, transparent);
754
+ --token-accent-glow: color-mix(in srgb, var(--token-accent) 6%, transparent);
755
+ --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 55%, transparent);
756
+ --token-overlay-bg: color-mix(in srgb, var(--token-bg) 94%, transparent);
757
+ --token-on-accent: #ffffff;
758
+
759
+ --token-shadow-elevated: 0 1px 2px rgba(0,0,0,.04), 0 4px 14px rgba(0,0,0,.06);
760
+ --token-shadow-overlay: 0 2px 4px rgba(0,0,0,.06), 0 10px 28px rgba(0,0,0,.08);
761
+
762
+ --token-success: #5A8E6A;
763
+ --token-success-muted: rgba(90,142,106,.10);
764
+ --token-warning: #9A7A3A;
765
+ --token-warning-muted: rgba(154,122,58,.10);
766
+ --token-error: #A05048;
767
+ --token-error-muted: rgba(160,80,72,.10);
768
+ --token-info: #5A7890;
769
+ --token-info-muted: rgba(90,120,144,.10);
770
+
771
+ --token-fill-1: color-mix(in srgb, var(--token-text) 3%, transparent);
772
+ --token-fill-2: color-mix(in srgb, var(--token-text) 6%, transparent);
773
+ --token-fill-3: color-mix(in srgb, var(--token-text) 10%, transparent);
774
+ --token-fill-4: color-mix(in srgb, var(--token-text) 16%, transparent);
775
+
776
+ --token-surface-glass: color-mix(in srgb, var(--token-bg) 86%, transparent);
777
+
778
+ /* ── BRIDGE ── */
779
+ --accent-clay: var(--token-accent);
780
+ --accent-clay-dark: #4A6A4E;
781
+ --accent-clay-light: #8AA88E;
782
+ --accent-cold: var(--token-accent-cold);
783
+ --bg-primary: var(--token-bg);
784
+ --bg-secondary: var(--token-bg-soft);
785
+ --bg-tertiary: var(--token-surface);
786
+ --bg-card: #FCFAF7;
787
+ --bg-card-muted: var(--token-bg-soft);
788
+ --bg-panel: var(--token-surface-strong);
789
+ --bg-hover: var(--token-surface-hover);
790
+ --text-primary: var(--token-text);
791
+ --text-secondary: var(--token-text-muted);
792
+ --text-tertiary: #7A7672;
793
+ --text-muted: var(--token-text-faint);
794
+ --text-subtle: var(--token-line-strong);
795
+ --border-subtle: var(--token-line-soft);
796
+ --border-default: var(--token-line);
797
+ --border-strong: var(--token-line-strong);
798
+ --shadow-sm: var(--token-shadow-elevated);
799
+ --shadow-md: var(--token-shadow-overlay);
800
+ --color-success: var(--token-success);
801
+ --color-success-bg: var(--token-success-muted);
802
+ --color-warning: var(--token-warning);
803
+ --color-warning-bg: var(--token-warning-muted);
804
+ --color-error: var(--token-error);
805
+ --color-error-bg: var(--token-error-muted);
806
+ --color-info: var(--token-info);
807
+ --color-info-bg: var(--token-info-muted);
808
+ --color-pending: var(--token-text-faint);
809
+ --color-pending-bg: var(--token-fill-1);
810
+ --accent-clay-bg: var(--token-accent-subtle);
811
+ --accent-clay-bg-strong: color-mix(in srgb, var(--token-accent) 14%, transparent);
812
+ --accent-clay-border: color-mix(in srgb, var(--token-accent) 20%, transparent);
813
+ }
814
+
815
+ /* ── INK DARK · 夜墨松烟 ── */
816
+ .ink.dark {
817
+ /* 墨色夜空 · 松烟暗绿 · 冷灰星点 */
818
+ --token-bg: #131815;
819
+ --token-bg-soft: #1A201D;
820
+ --token-surface: #212824;
821
+ --token-surface-strong: #28302B;
822
+ --token-line-soft: #2A322D;
823
+ --token-line: #3A423D;
824
+ --token-line-strong: #4A524D;
825
+ --token-text: #F0EEE8;
826
+ --token-text-muted: #B0AEAA;
827
+ --token-text-faint: #74726e;
828
+ --token-accent: #7AA87E;
829
+ --token-accent-cold: #6A8EA0;
830
+
831
+ --token-glow: rgba(122,168,126,.10);
832
+ --token-glow-cold: rgba(106,142,160,.05);
833
+
834
+ --token-surface-hover: color-mix(in srgb, var(--token-surface) 90%, var(--token-accent) 10%);
835
+ --token-accent-subtle: color-mix(in srgb, var(--token-accent) 10%, transparent);
836
+ --token-accent-glow: color-mix(in srgb, var(--token-accent) 6%, transparent);
837
+ --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 60%, transparent);
838
+ --token-overlay-bg: color-mix(in srgb, var(--token-bg) 94%, transparent);
839
+ --token-on-accent: #ffffff;
840
+
841
+ --token-shadow-elevated: 0 1px 2px rgba(0,0,0,.2), 0 4px 14px rgba(0,0,0,.22);
842
+ --token-shadow-overlay: 0 2px 4px rgba(0,0,0,.28), 0 10px 30px rgba(0,0,0,.34);
843
+
844
+ --token-success: #6AB080;
845
+ --token-success-muted: rgba(106,176,128,.12);
846
+ --token-warning: #B89A45;
847
+ --token-warning-muted: rgba(184,154,69,.12);
848
+ --token-error: #C06860;
849
+ --token-error-muted: rgba(192,104,96,.12);
850
+ --token-info: #6A98B8;
851
+ --token-info-muted: rgba(106,152,184,.12);
852
+
853
+ --token-fill-1: color-mix(in srgb, var(--token-text) 4%, transparent);
854
+ --token-fill-2: color-mix(in srgb, var(--token-text) 8%, transparent);
855
+ --token-fill-3: color-mix(in srgb, var(--token-text) 14%, transparent);
856
+ --token-fill-4: color-mix(in srgb, var(--token-text) 22%, transparent);
857
+
858
+ --token-surface-glass: color-mix(in srgb, var(--token-bg-soft) 82%, transparent);
859
+
860
+ /* ── BRIDGE ── */
861
+ --accent-clay: var(--token-accent);
862
+ --accent-clay-dark: #5A8A62;
863
+ --accent-clay-light: #A0CAA4;
864
+ --accent-cold: var(--token-accent-cold);
865
+ --bg-primary: var(--token-bg);
866
+ --bg-secondary: var(--token-bg-soft);
867
+ --bg-tertiary: var(--token-surface);
868
+ --bg-card: var(--token-bg-soft);
869
+ --bg-card-muted: var(--token-surface);
870
+ --bg-panel: var(--token-surface-strong);
871
+ --bg-hover: var(--token-surface-hover);
872
+ --text-primary: var(--token-text);
873
+ --text-secondary: var(--token-text-muted);
874
+ --text-tertiary: #989692;
875
+ --text-muted: var(--token-text-faint);
876
+ --text-subtle: var(--token-line-strong);
877
+ --border-subtle: var(--token-line-soft);
878
+ --border-default: var(--token-line);
879
+ --border-strong: var(--token-line-strong);
880
+ --shadow-sm: var(--token-shadow-elevated);
881
+ --shadow-md: var(--token-shadow-overlay);
882
+ --color-success: var(--token-success);
883
+ --color-success-bg: var(--token-success-muted);
884
+ --color-warning: var(--token-warning);
885
+ --color-warning-bg: var(--token-warning-muted);
886
+ --color-error: var(--token-error);
887
+ --color-error-bg: var(--token-error-muted);
888
+ --color-info: var(--token-info);
889
+ --color-info-bg: var(--token-info-muted);
890
+ --color-pending: var(--token-text-faint);
891
+ --color-pending-bg: var(--token-fill-1);
892
+ --accent-clay-bg: var(--token-accent-subtle);
893
+ --accent-clay-bg-strong: color-mix(in srgb, var(--token-accent) 14%, transparent);
894
+ --accent-clay-border: color-mix(in srgb, var(--token-accent) 22%, transparent);
895
+ }
896
+
897
+ /* ══════════════════════════════════════════════════════════════
898
+ RETRO — 8-bit · 红白机 · 像素风
899
+ NES · Famicom · Pixel Art · CRT Glow
900
+ ══════════════════════════════════════════════════════════════ */
901
+
902
+ /* ── RETRO LIGHT · 经典像素 ── */
903
+ .retro {
904
+ /* 像素风配色:纯白底 + 经典红 + 深蓝 */
905
+ --token-bg: #f0f0e8;
906
+ --token-bg-soft: #e0e0d0;
907
+ --token-surface: #e8e8dc;
908
+ --token-surface-strong: #dcdcc8;
909
+ --token-line-soft: #c0c0a8;
910
+ --token-line: #a0a088;
911
+ --token-line-strong: #808068;
912
+ --token-text: #1a1a1a;
913
+ --token-text-muted: #4a4a3a;
914
+ --token-text-faint: #7a7a6a;
915
+ --token-accent: #d03030;
916
+ --token-accent-cold: #3030a0;
917
+
918
+ /* ── Glow ── */
919
+ --token-glow: rgba(208,48,48,.10);
920
+ --token-glow-cold: rgba(48,48,160,.08);
921
+
922
+ /* ── Derived ── */
923
+ --token-surface-hover: color-mix(in srgb, var(--token-surface) 90%, var(--token-accent) 10%);
924
+ --token-accent-subtle: color-mix(in srgb, var(--token-accent) 12%, transparent);
925
+ --token-accent-glow: color-mix(in srgb, var(--token-accent) 8%, transparent);
926
+ --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 55%, transparent);
927
+ --token-overlay-bg: color-mix(in srgb, var(--token-bg) 92%, transparent);
928
+ --token-on-accent: #ffffff;
929
+
930
+ /* ── Shadow · 硬像素投影 ── */
931
+ --token-shadow-elevated: 2px 2px 0 rgba(26,26,26,.25);
932
+ --token-shadow-overlay: 3px 3px 0 rgba(26,26,26,.35);
933
+
934
+ /* ── Semantic ── */
935
+ --token-success: #30a030;
936
+ --token-success-muted: rgba(48,160,48,.14);
937
+ --token-warning: #c8a020;
938
+ --token-warning-muted: rgba(200,160,32,.14);
939
+ --token-error: #d03030;
940
+ --token-error-muted: rgba(208,48,48,.14);
941
+ --token-info: #3030a0;
942
+ --token-info-muted: rgba(48,48,160,.14);
943
+
944
+ /* ── Fill ── */
945
+ --token-fill-1: color-mix(in srgb, var(--token-text) 4%, transparent);
946
+ --token-fill-2: color-mix(in srgb, var(--token-text) 8%, transparent);
947
+ --token-fill-3: color-mix(in srgb, var(--token-text) 14%, transparent);
948
+ --token-fill-4: color-mix(in srgb, var(--token-text) 22%, transparent);
949
+
950
+ /* ── Glass ── */
951
+ --token-surface-glass: color-mix(in srgb, var(--token-bg-soft) 88%, transparent);
952
+
953
+ /* ── BRIDGE ── */
954
+ --accent-clay: var(--token-accent);
955
+ --accent-clay-dark: #a02020;
956
+ --accent-clay-light: #e06060;
957
+ --accent-cold: var(--token-accent-cold);
958
+ --bg-primary: var(--token-bg);
959
+ --bg-secondary: var(--token-bg-soft);
960
+ --bg-tertiary: var(--token-surface);
961
+ --bg-card: var(--token-surface);
962
+ --bg-card-muted: var(--token-bg-soft);
963
+ --bg-panel: var(--token-surface-strong);
964
+ --bg-hover: var(--token-surface-hover);
965
+ --text-primary: var(--token-text);
966
+ --text-secondary: var(--token-text-muted);
967
+ --text-tertiary: #5a5a4a;
968
+ --text-muted: var(--token-text-faint);
969
+ --text-subtle: var(--token-line-strong);
970
+ --border-subtle: var(--token-line-soft);
971
+ --border-default: var(--token-line);
972
+ --border-strong: var(--token-line-strong);
973
+ --shadow-sm: var(--token-shadow-elevated);
974
+ --shadow-md: var(--token-shadow-overlay);
975
+ --color-success: var(--token-success);
976
+ --color-success-bg: var(--token-success-muted);
977
+ --color-warning: var(--token-warning);
978
+ --color-warning-bg: var(--token-warning-muted);
979
+ --color-error: var(--token-error);
980
+ --color-error-bg: var(--token-error-muted);
981
+ --color-info: var(--token-info);
982
+ --color-info-bg: var(--token-info-muted);
983
+ --color-pending: var(--token-text-faint);
984
+ --color-pending-bg: var(--token-fill-1);
985
+ --accent-clay-bg: var(--token-accent-subtle);
986
+ --accent-clay-bg-strong: color-mix(in srgb, var(--token-accent) 20%, transparent);
987
+ --accent-clay-border: color-mix(in srgb, var(--token-accent) 24%, transparent);
988
+ }
989
+
990
+ /* ── RETRO DARK · 深夜像素 ── */
991
+ .retro.dark {
992
+ /* 像素暗色:深蓝灰底 + 霓虹红 + 像素蓝 */
993
+ --token-bg: #1a1a2e;
994
+ --token-bg-soft: #222240;
995
+ --token-surface: #2a2a50;
996
+ --token-surface-strong: #323260;
997
+ --token-line-soft: #3a3a70;
998
+ --token-line: #4a4a90;
999
+ --token-line-strong: #5a5ab0;
1000
+ --token-text: #e8e8d8;
1001
+ --token-text-muted: #c0c0a8;
1002
+ --token-text-faint: #808070;
1003
+ --token-accent: #ff4040;
1004
+ --token-accent-cold: #5050ff;
1005
+
1006
+ /* ── Glow · 霓虹像素光 ── */
1007
+ --token-glow: rgba(255,64,64,.14);
1008
+ --token-glow-cold: rgba(80,80,255,.10);
1009
+
1010
+ /* ── Derived ── */
1011
+ --token-surface-hover: color-mix(in srgb, var(--token-surface) 88%, var(--token-accent) 12%);
1012
+ --token-accent-subtle: color-mix(in srgb, var(--token-accent) 14%, transparent);
1013
+ --token-accent-glow: color-mix(in srgb, var(--token-accent) 10%, transparent);
1014
+ --token-line-dashed: color-mix(in srgb, var(--token-line-soft) 60%, transparent);
1015
+ --token-overlay-bg: color-mix(in srgb, var(--token-bg) 94%, transparent);
1016
+ --token-on-accent: #ffffff;
1017
+
1018
+ /* ── Shadow · 硬像素投影 ── */
1019
+ --token-shadow-elevated: 2px 2px 0 rgba(0,0,0,.40);
1020
+ --token-shadow-overlay: 3px 3px 0 rgba(0,0,0,.50);
1021
+
1022
+ /* ── Semantic ── */
1023
+ --token-success: #40ff40;
1024
+ --token-success-muted: rgba(64,255,64,.16);
1025
+ --token-warning: #ffff40;
1026
+ --token-warning-muted: rgba(255,255,64,.16);
1027
+ --token-error: #ff4040;
1028
+ --token-error-muted: rgba(255,64,64,.16);
1029
+ --token-info: #5050ff;
1030
+ --token-info-muted: rgba(80,80,255,.16);
1031
+
1032
+ /* ── Fill ── */
1033
+ --token-fill-1: color-mix(in srgb, var(--token-text) 5%, transparent);
1034
+ --token-fill-2: color-mix(in srgb, var(--token-text) 10%, transparent);
1035
+ --token-fill-3: color-mix(in srgb, var(--token-text) 16%, transparent);
1036
+ --token-fill-4: color-mix(in srgb, var(--token-text) 24%, transparent);
1037
+
1038
+ /* ── Glass ── */
1039
+ --token-surface-glass: color-mix(in srgb, var(--token-bg-soft) 82%, transparent);
1040
+
1041
+ /* ── BRIDGE ── */
1042
+ --accent-clay: var(--token-accent);
1043
+ --accent-clay-dark: #d03030;
1044
+ --accent-clay-light: #ff6060;
1045
+ --accent-cold: var(--token-accent-cold);
1046
+ --bg-primary: var(--token-bg);
1047
+ --bg-secondary: var(--token-bg-soft);
1048
+ --bg-tertiary: var(--token-surface);
1049
+ --bg-card: var(--token-bg-soft);
1050
+ --bg-card-muted: var(--token-surface);
1051
+ --bg-panel: var(--token-surface-strong);
1052
+ --bg-hover: var(--token-surface-hover);
1053
+ --text-primary: var(--token-text);
1054
+ --text-secondary: var(--token-text-muted);
1055
+ --text-tertiary: #a0a090;
1056
+ --text-muted: var(--token-text-faint);
1057
+ --text-subtle: var(--token-line-strong);
1058
+ --border-subtle: var(--token-line-soft);
1059
+ --border-default: var(--token-line);
1060
+ --border-strong: var(--token-line-strong);
1061
+ --shadow-sm: var(--token-shadow-elevated);
1062
+ --shadow-md: var(--token-shadow-overlay);
1063
+ --color-success: var(--token-success);
1064
+ --color-success-bg: var(--token-success-muted);
1065
+ --color-warning: var(--token-warning);
1066
+ --color-warning-bg: var(--token-warning-muted);
1067
+ --color-error: var(--token-error);
1068
+ --color-error-bg: var(--token-error-muted);
1069
+ --color-info: var(--token-info);
1070
+ --color-info-bg: var(--token-info-muted);
1071
+ --color-pending: var(--token-text-faint);
1072
+ --color-pending-bg: var(--token-fill-1);
1073
+ --accent-clay-bg: var(--token-accent-subtle);
1074
+ --accent-clay-bg-strong: color-mix(in srgb, var(--token-accent) 16%, transparent);
1075
+ --accent-clay-border: color-mix(in srgb, var(--token-accent) 24%, transparent);
1076
+ }
1077
+
1078
+ /* ── RETRO Depth Tokens ── */
1079
+ .retro {
1080
+ --token-canvas: var(--token-bg);
1081
+ --token-sidebar: color-mix(in srgb, var(--token-bg-soft) 78%, var(--token-bg) 22%);
1082
+ --token-panel: color-mix(in srgb, var(--token-bg-soft) 52%, var(--token-bg) 48%);
1083
+ --token-card: color-mix(in srgb, var(--token-bg) 80%, var(--token-surface) 20%);
1084
+ --token-card-strong: color-mix(in srgb, var(--token-bg) 66%, var(--token-surface) 34%);
1085
+ --token-control: color-mix(in srgb, var(--token-bg-soft) 62%, var(--token-bg) 38%);
1086
+ --token-control-hover: color-mix(in srgb, var(--token-surface-hover) 52%, var(--token-bg-soft) 48%);
1087
+ --token-outline-soft: color-mix(in srgb, var(--token-line-soft) 82%, var(--token-bg) 18%);
1088
+ --token-outline: color-mix(in srgb, var(--token-line) 84%, var(--token-bg) 16%);
1089
+ --token-outline-strong: color-mix(in srgb, var(--token-line-strong) 86%, var(--token-text) 8%);
1090
+ --token-shadow-card: 2px 2px 0 color-mix(in srgb, var(--token-text) 15%, transparent);
1091
+ --token-shadow-inset: inset 2px 2px 0 color-mix(in srgb, var(--token-surface) 42%, transparent), inset -1px -1px 0 color-mix(in srgb, var(--token-text) 4%, transparent);
1092
+ --token-top-highlight: color-mix(in srgb, var(--token-surface) 36%, transparent);
1093
+ }
1094
+
1095
+ .retro.dark {
1096
+ --token-canvas: var(--token-bg);
1097
+ --token-sidebar: color-mix(in srgb, var(--token-bg-soft) 86%, var(--token-bg) 14%);
1098
+ --token-panel: color-mix(in srgb, var(--token-bg-soft) 72%, var(--token-bg) 28%);
1099
+ --token-card: color-mix(in srgb, var(--token-surface) 72%, var(--token-bg-soft) 28%);
1100
+ --token-card-strong: color-mix(in srgb, var(--token-surface-strong) 72%, var(--token-surface) 28%);
1101
+ --token-control: color-mix(in srgb, var(--token-bg-soft) 70%, var(--token-bg) 30%);
1102
+ --token-control-hover: color-mix(in srgb, var(--token-surface-hover) 62%, var(--token-bg-soft) 38%);
1103
+ --token-outline-soft: color-mix(in srgb, var(--token-line-soft) 82%, var(--token-bg) 18%);
1104
+ --token-outline: color-mix(in srgb, var(--token-line) 84%, var(--token-text-faint) 8%);
1105
+ --token-outline-strong: color-mix(in srgb, var(--token-line-strong) 86%, var(--token-text-muted) 8%);
1106
+ --token-shadow-card: 2px 2px 0 rgba(0,0,0,.30);
1107
+ --token-shadow-inset: inset 2px 2px 0 color-mix(in srgb, var(--token-text) 6%, transparent), inset -1px -1px 0 rgba(0,0,0,.22);
1108
+ --token-top-highlight: color-mix(in srgb, var(--token-surface) 18%, transparent);
1109
+ }
1110
+
1111
+
1112
+ /* ── 圆角 ── */
1113
+ :root {
1114
+ --radius-xs: 6px;
1115
+ --radius-sm: 8px;
1116
+ --radius-md: 10px;
1117
+ --radius-lg: 12px;
1118
+ --radius-xl: 16px;
1119
+ --radius-full: 999px;
1120
+ }
1121
+
1122
+ /* ── Depth Tokens ──
1123
+ Semantic surface levels used by app chrome and primitives. These are
1124
+ intentionally derived from theme tokens so every palette keeps its own voice
1125
+ while gaining clearer functional separation. */
1126
+ :root {
1127
+ --token-canvas: var(--token-bg);
1128
+ --token-sidebar: color-mix(in srgb, var(--token-bg-soft) 78%, var(--token-bg) 22%);
1129
+ --token-panel: color-mix(in srgb, var(--token-bg-soft) 52%, var(--token-bg) 48%);
1130
+ --token-card: color-mix(in srgb, var(--token-bg) 80%, var(--token-surface) 20%);
1131
+ --token-card-strong: color-mix(in srgb, var(--token-bg) 66%, var(--token-surface) 34%);
1132
+ --token-control: color-mix(in srgb, var(--token-bg-soft) 62%, var(--token-bg) 38%);
1133
+ --token-control-hover: color-mix(in srgb, var(--token-surface-hover) 52%, var(--token-bg-soft) 48%);
1134
+ --token-outline-soft: color-mix(in srgb, var(--token-line-soft) 82%, var(--token-bg) 18%);
1135
+ --token-outline: color-mix(in srgb, var(--token-line) 84%, var(--token-bg) 16%);
1136
+ --token-outline-strong: color-mix(in srgb, var(--token-line-strong) 86%, var(--token-text) 8%);
1137
+ --token-shadow-card: 0 1px 2px color-mix(in srgb, var(--token-text) 5%, transparent), 0 6px 18px color-mix(in srgb, var(--token-text) 5%, transparent);
1138
+ --token-shadow-inset: inset 0 1px 1px color-mix(in srgb, var(--token-surface) 42%, transparent), inset 0 -1px 1px color-mix(in srgb, var(--token-text) 4%, transparent);
1139
+ --token-top-highlight: color-mix(in srgb, var(--token-surface) 36%, transparent);
1140
+ }
1141
+
1142
+ .dark {
1143
+ --token-canvas: var(--token-bg);
1144
+ --token-sidebar: color-mix(in srgb, var(--token-bg-soft) 86%, var(--token-bg) 14%);
1145
+ --token-panel: color-mix(in srgb, var(--token-bg-soft) 72%, var(--token-bg) 28%);
1146
+ --token-card: color-mix(in srgb, var(--token-surface) 72%, var(--token-bg-soft) 28%);
1147
+ --token-card-strong: color-mix(in srgb, var(--token-surface-strong) 72%, var(--token-surface) 28%);
1148
+ --token-control: color-mix(in srgb, var(--token-bg-soft) 70%, var(--token-bg) 30%);
1149
+ --token-control-hover: color-mix(in srgb, var(--token-surface-hover) 62%, var(--token-bg-soft) 38%);
1150
+ --token-outline-soft: color-mix(in srgb, var(--token-line-soft) 82%, var(--token-bg) 18%);
1151
+ --token-outline: color-mix(in srgb, var(--token-line) 84%, var(--token-text-faint) 8%);
1152
+ --token-outline-strong: color-mix(in srgb, var(--token-line-strong) 86%, var(--token-text-muted) 8%);
1153
+ --token-shadow-card: 0 1px 1px rgba(0,0,0,.22), 0 12px 28px rgba(0,0,0,.24);
1154
+ --token-shadow-inset: inset 0 1px 1px color-mix(in srgb, var(--token-text) 6%, transparent), inset 0 -1px 1px rgba(0,0,0,.22);
1155
+ --token-top-highlight: color-mix(in srgb, var(--token-surface) 18%, transparent);
1156
+ }
1157
+
1158
+ .piano {
1159
+ --token-canvas: var(--token-bg);
1160
+ --token-sidebar: color-mix(in srgb, var(--token-bg-soft) 84%, var(--token-bg) 16%);
1161
+ --token-panel: color-mix(in srgb, var(--token-bg-soft) 68%, var(--token-bg) 32%);
1162
+ --token-card: color-mix(in srgb, var(--token-surface) 56%, var(--token-bg) 44%);
1163
+ --token-card-strong: color-mix(in srgb, var(--token-surface) 72%, var(--token-bg-soft) 28%);
1164
+ --token-control: color-mix(in srgb, var(--token-bg-soft) 74%, var(--token-line-soft) 26%);
1165
+ --token-control-hover: color-mix(in srgb, var(--token-surface-strong) 92%, var(--token-accent) 8%);
1166
+ --token-outline-soft: color-mix(in srgb, var(--token-line-soft) 84%, var(--token-bg) 16%);
1167
+ --token-outline: color-mix(in srgb, var(--token-line) 94%, var(--token-text-muted) 6%);
1168
+ --token-outline-strong: color-mix(in srgb, var(--token-line-strong) 92%, var(--token-text) 8%);
1169
+ --token-shadow-card: 0 1px 1px color-mix(in srgb, var(--token-text) 7%, transparent), 0 9px 24px color-mix(in srgb, var(--token-text) 7%, transparent);
1170
+ --token-shadow-inset: inset 0 1px 1px color-mix(in srgb, var(--token-surface) 70%, transparent), inset 0 -1px 1px color-mix(in srgb, var(--token-text) 5%, transparent);
1171
+ --token-top-highlight: color-mix(in srgb, var(--token-surface) 52%, transparent);
1172
+ }
1173
+
1174
+ .piano.dark {
1175
+ --token-canvas: var(--token-bg);
1176
+ --token-sidebar: color-mix(in srgb, var(--token-bg-soft) 86%, black 14%);
1177
+ --token-panel: color-mix(in srgb, var(--token-bg-soft) 74%, var(--token-bg) 26%);
1178
+ --token-card: color-mix(in srgb, var(--token-surface) 76%, var(--token-bg-soft) 24%);
1179
+ --token-card-strong: color-mix(in srgb, var(--token-surface-strong) 78%, var(--token-surface) 22%);
1180
+ --token-control: color-mix(in srgb, var(--token-bg-soft) 72%, black 28%);
1181
+ --token-control-hover: color-mix(in srgb, var(--token-surface-strong) 92%, var(--token-accent) 8%);
1182
+ --token-outline-soft: color-mix(in srgb, var(--token-line-soft) 86%, var(--token-bg) 14%);
1183
+ --token-outline: color-mix(in srgb, var(--token-line) 92%, var(--token-accent) 8%);
1184
+ --token-outline-strong: color-mix(in srgb, var(--token-line-strong) 88%, var(--token-accent) 12%);
1185
+ --token-shadow-card: 0 1px 1px rgba(0,0,0,.32), 0 14px 34px rgba(0,0,0,.40);
1186
+ --token-shadow-inset: inset 0 1px 1px color-mix(in srgb, var(--token-text) 8%, transparent), inset 0 -1px 1px rgba(0,0,0,.30);
1187
+ --token-top-highlight: color-mix(in srgb, var(--token-text) 8%, transparent);
1188
+ }
1189
+
1190
+ .vangogh {
1191
+ --token-canvas: color-mix(in srgb, var(--token-bg) 88%, #f6efd0 12%);
1192
+ --token-sidebar: color-mix(in srgb, var(--token-bg-soft) 78%, var(--token-bg) 22%);
1193
+ --token-panel: color-mix(in srgb, var(--token-bg) 70%, var(--token-bg-soft) 30%);
1194
+ --token-card: color-mix(in srgb, var(--token-bg) 78%, var(--token-surface) 22%);
1195
+ --token-card-strong: color-mix(in srgb, var(--token-bg) 58%, var(--token-surface) 42%);
1196
+ --token-control: color-mix(in srgb, var(--token-bg-soft) 58%, var(--token-bg) 42%);
1197
+ --token-control-hover: color-mix(in srgb, var(--token-surface-strong) 86%, var(--token-accent) 14%);
1198
+ --token-outline-soft: color-mix(in srgb, var(--token-line-soft) 80%, var(--token-bg) 20%);
1199
+ --token-outline: color-mix(in srgb, var(--token-line) 88%, var(--token-accent) 12%);
1200
+ --token-outline-strong: color-mix(in srgb, var(--token-line-strong) 84%, var(--token-accent) 16%);
1201
+ --token-shadow-card: 0 1px 2px color-mix(in srgb, var(--token-text) 5%, transparent), 0 8px 22px color-mix(in srgb, var(--token-text) 7%, transparent);
1202
+ --token-shadow-inset: inset 0 1px 1px color-mix(in srgb, var(--token-surface) 48%, transparent), inset 0 -1px 1px color-mix(in srgb, var(--token-text) 4%, transparent);
1203
+ --token-top-highlight: color-mix(in srgb, var(--token-surface) 30%, transparent);
1204
+ }
1205
+
1206
+ .vangogh.dark {
1207
+ --token-canvas: var(--token-bg);
1208
+ --token-sidebar: color-mix(in srgb, var(--token-bg-soft) 84%, var(--token-bg) 16%);
1209
+ --token-panel: color-mix(in srgb, var(--token-bg-soft) 72%, var(--token-bg) 28%);
1210
+ --token-card: color-mix(in srgb, var(--token-surface) 72%, var(--token-bg-soft) 28%);
1211
+ --token-card-strong: color-mix(in srgb, var(--token-surface-strong) 76%, var(--token-surface) 24%);
1212
+ --token-control: color-mix(in srgb, var(--token-bg-soft) 70%, var(--token-bg) 30%);
1213
+ --token-control-hover: color-mix(in srgb, var(--token-surface-hover) 74%, var(--token-accent) 8%);
1214
+ --token-outline-soft: color-mix(in srgb, var(--token-line-soft) 82%, var(--token-bg) 18%);
1215
+ --token-outline: color-mix(in srgb, var(--token-line) 84%, var(--token-accent-cold) 8%);
1216
+ --token-outline-strong: color-mix(in srgb, var(--token-line-strong) 84%, var(--token-accent) 10%);
1217
+ --token-shadow-card: 0 1px 1px rgba(0,0,0,.22), 0 12px 28px rgba(0,0,0,.24);
1218
+ --token-shadow-inset: inset 0 1px 1px color-mix(in srgb, var(--token-text) 6%, transparent), inset 0 -1px 1px rgba(0,0,0,.22);
1219
+ --token-top-highlight: color-mix(in srgb, var(--token-surface) 18%, transparent);
1220
+ }
1221
+
1222
+ /* ── Workbench Chrome Tokens ──
1223
+ Shared spatial hierarchy for Studio and Creation editors. These sit on top
1224
+ of theme depth tokens so light/dark and style profiles keep their own voice
1225
+ while still exposing clear IDE-like regions. */
1226
+ :root {
1227
+ --token-workbench-canvas: color-mix(in srgb, var(--token-bg-soft) 78%, var(--token-line-soft) 22%);
1228
+ --token-workbench-sidebar: color-mix(in srgb, var(--token-bg) 76%, var(--token-surface) 24%);
1229
+ --token-workbench-editor: color-mix(in srgb, var(--token-bg) 82%, var(--token-surface) 18%);
1230
+ --token-workbench-panel: color-mix(in srgb, var(--token-card) 82%, var(--token-surface) 18%);
1231
+ --token-workbench-panel-strong: color-mix(in srgb, var(--token-card-strong) 78%, var(--token-surface) 22%);
1232
+ --token-workbench-chrome: color-mix(in srgb, var(--token-workbench-panel) 86%, var(--token-surface) 14%);
1233
+ --token-workbench-rail: color-mix(in srgb, var(--token-sidebar) 84%, var(--token-bg) 16%);
1234
+ --token-workbench-gutter: color-mix(in srgb, var(--token-line-soft) 30%, transparent);
1235
+ --token-workbench-edge: color-mix(in srgb, var(--token-text) 10%, transparent);
1236
+ --token-workbench-edge-soft: color-mix(in srgb, var(--token-text) 7%, transparent);
1237
+ --token-workbench-shadow: 0 1px 1px color-mix(in srgb, var(--token-text) 3%, transparent), 0 8px 22px color-mix(in srgb, var(--token-text) 4%, transparent);
1238
+ --token-workbench-shadow-inset: inset 0 1px 0 color-mix(in srgb, var(--token-surface) 28%, transparent);
1239
+ --token-editor-paper: #f5efe5;
1240
+ --token-editor-paper-soft: color-mix(in srgb, var(--token-editor-paper) 88%, var(--token-bg-soft) 12%);
1241
+ --token-editor-paper-chrome: color-mix(in srgb, var(--token-editor-paper) 92%, var(--token-surface) 8%);
1242
+ --token-editor-paper-edge: color-mix(in srgb, var(--token-text) 7%, transparent);
1243
+ }
1244
+
1245
+ .dark {
1246
+ --token-workbench-canvas: color-mix(in srgb, var(--token-bg) 72%, black 28%);
1247
+ --token-workbench-sidebar: color-mix(in srgb, var(--token-bg-soft) 72%, black 28%);
1248
+ --token-workbench-editor: color-mix(in srgb, var(--token-bg) 84%, black 16%);
1249
+ --token-workbench-panel: color-mix(in srgb, var(--token-panel) 82%, black 18%);
1250
+ --token-workbench-panel-strong: color-mix(in srgb, var(--token-card-strong) 82%, black 18%);
1251
+ --token-workbench-chrome: color-mix(in srgb, var(--token-workbench-panel) 78%, black 22%);
1252
+ --token-workbench-rail: color-mix(in srgb, var(--token-sidebar) 76%, black 24%);
1253
+ --token-workbench-gutter: color-mix(in srgb, var(--token-line-soft) 44%, transparent);
1254
+ --token-workbench-edge: color-mix(in srgb, var(--token-text) 11%, transparent);
1255
+ --token-workbench-edge-soft: color-mix(in srgb, var(--token-text) 8%, transparent);
1256
+ --token-workbench-shadow: 0 1px 1px rgba(0,0,0,.16), 0 10px 26px rgba(0,0,0,.18);
1257
+ --token-workbench-shadow-inset: inset 0 1px 0 color-mix(in srgb, var(--token-text) 4%, transparent);
1258
+ --token-editor-paper: #26211b;
1259
+ --token-editor-paper-soft: color-mix(in srgb, var(--token-editor-paper) 88%, var(--token-bg-soft) 12%);
1260
+ --token-editor-paper-chrome: color-mix(in srgb, var(--token-editor-paper) 90%, var(--token-surface-strong) 10%);
1261
+ --token-editor-paper-edge: color-mix(in srgb, var(--token-text) 8%, transparent);
1262
+ }
1263
+
1264
+ .piano {
1265
+ --token-editor-paper: #fbf8ef;
1266
+ }
1267
+
1268
+ .piano.dark {
1269
+ --token-editor-paper: #1d1b17;
1270
+ }
1271
+
1272
+ .art {
1273
+ --token-editor-paper: #e9f2ed;
1274
+ }
1275
+
1276
+ .art.dark {
1277
+ --token-editor-paper: #203a34;
1278
+ }
1279
+
1280
+ .vangogh {
1281
+ --token-editor-paper: #eee5bf;
1282
+ }
1283
+
1284
+ .vangogh.dark {
1285
+ --token-editor-paper: #172742;
1286
+ }
1287
+
1288
+ .ink {
1289
+ --token-editor-paper: #fbf8f1;
1290
+ }
1291
+
1292
+ .ink.dark {
1293
+ --token-editor-paper: #1b221e;
1294
+ }
1295
+
1296
+ .retro {
1297
+ --token-editor-paper: #f4f4ea;
1298
+ }
1299
+
1300
+ .retro.dark {
1301
+ --token-editor-paper: #24243f;
1302
+ }
1303
+
1304
+ .style-retro {
1305
+ --token-workbench-shadow: var(--token-shadow-card);
1306
+ --token-workbench-shadow-inset: var(--token-shadow-inset);
1307
+ }
1308
+
1309
+ /* ── 动画 ── */
1310
+ @keyframes blink {
1311
+ 0%, 100% { opacity: 1; }
1312
+ 50% { opacity: 0; }
1313
+ }
1314
+
1315
+ .animate-blink {
1316
+ animation: blink 1s step-end infinite;
1317
+ }
1318
+