@abstractframework/ui-kit 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.
package/src/theme.css ADDED
@@ -0,0 +1,989 @@
1
+ /* AbstractUIC UI Kit: Shared theme tokens for AbstractFramework thin clients */
2
+
3
+ /* Base tokens (aligned with AbstractFlow; extended for thin clients) */
4
+ :root {
5
+ color-scheme: dark;
6
+
7
+ /* Colors */
8
+ --bg-primary: #1a1a2e;
9
+ --bg-secondary: #16213e;
10
+ --bg-tertiary: #0f3460;
11
+ --text-primary: #eee;
12
+ --text-secondary: #aaa;
13
+ --text-muted: #666;
14
+ --accent: #e94560;
15
+ --success: #27ae60;
16
+ --warning: #f39c12;
17
+ --error: #e74c3c;
18
+ --info: #60a5fa;
19
+
20
+ /* Fonts (no remote imports; prefer system fonts) */
21
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
22
+ --font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
23
+
24
+ /* Typography / density (controlled by thin-client Settings; avoid per-app drift) */
25
+ --font-scale: 1;
26
+ --header-density: 1;
27
+
28
+ --font-size-xxs: calc(10px * var(--font-scale));
29
+ --font-size-xs: calc(11px * var(--font-scale));
30
+ --font-size-sm: calc(12px * var(--font-scale));
31
+ --font-size-md: calc(13px * var(--font-scale));
32
+ --font-size-base: calc(14px * var(--font-scale));
33
+ --font-size-lg: calc(16px * var(--font-scale));
34
+ --font-size-xl: calc(18px * var(--font-scale));
35
+
36
+ --line-height-base: 1.5;
37
+
38
+ /* Sizes */
39
+ --header-height: calc(48px * var(--header-density));
40
+ --footer-height: calc(32px * var(--header-density));
41
+ --header-pad-x: 16px;
42
+ --header-pad-y: calc(8px * var(--header-density));
43
+
44
+ /* Radius */
45
+ --radius-sm: 4px;
46
+ --radius-md: 8px;
47
+ --radius-lg: 10px;
48
+
49
+ /* General UI surfaces */
50
+ --ui-surface-1: rgba(0, 0, 0, 0.16);
51
+ --ui-surface-2: rgba(255, 255, 255, 0.06);
52
+ --ui-surface-3: rgba(0, 0, 0, 0.25);
53
+ --ui-border-1: rgba(255, 255, 255, 0.10);
54
+ --ui-border-2: rgba(255, 255, 255, 0.14);
55
+ --ui-shadow-1: 0 10px 30px rgba(0, 0, 0, 0.35);
56
+
57
+ /* Semantic tints */
58
+ --accent-subtle: rgba(233, 69, 96, 0.12);
59
+ --info-subtle: rgba(96, 165, 250, 0.12);
60
+ --success-subtle: rgba(34, 197, 94, 0.12);
61
+ --warning-subtle: rgba(245, 158, 11, 0.12);
62
+ --error-subtle: rgba(239, 68, 68, 0.12);
63
+
64
+ /* Semantic borders (used for selection + pills) */
65
+ --accent-border: rgba(233, 69, 96, 0.35);
66
+ --info-border: rgba(96, 165, 250, 0.35);
67
+ --success-border: rgba(34, 197, 94, 0.35);
68
+ --warning-border: rgba(245, 158, 11, 0.35);
69
+ --error-border: rgba(239, 68, 68, 0.35);
70
+ --muted-border: rgba(148, 163, 184, 0.22);
71
+
72
+ /* Chips / badges */
73
+ --ui-chip-bg: rgba(0, 0, 0, 0.22);
74
+ --ui-chip-border: rgba(255, 255, 255, 0.12);
75
+ --ui-chip-text: rgba(255, 255, 255, 0.92);
76
+
77
+ /* Small overlay surfaces (tabs, pills) */
78
+ --ui-overlay-bg: rgba(0, 0, 0, 0.18);
79
+ --ui-overlay-bg-hover: rgba(255, 255, 255, 0.08);
80
+ --ui-overlay-border: rgba(255, 255, 255, 0.14);
81
+ --ui-pill-bg: rgba(0, 0, 0, 0.22);
82
+ --ui-pill-border: rgba(255, 255, 255, 0.12);
83
+
84
+ /* Markdown/code surfaces */
85
+ --ui-code-bg: rgba(0, 0, 0, 0.18);
86
+ --ui-code-border: rgba(255, 255, 255, 0.08);
87
+ --ui-code-block-bg: rgba(0, 0, 0, 0.25);
88
+ --ui-code-block-border: rgba(255, 255, 255, 0.08);
89
+
90
+ /* Compatibility aliases used by multiple thin clients */
91
+ --bg: var(--bg-primary);
92
+ --bg-surface: var(--bg-secondary);
93
+ --bg-elevated: var(--bg-tertiary);
94
+ --bg-card: var(--bg-secondary);
95
+ --panel: var(--bg-secondary);
96
+ --panel2: var(--bg-tertiary);
97
+ --text: var(--text-primary);
98
+ --muted: var(--text-secondary);
99
+ --danger: var(--error);
100
+ --ok: var(--success);
101
+
102
+ /* Strokes */
103
+ --border: var(--bg-tertiary);
104
+ --border-default: rgba(255, 255, 255, 0.12);
105
+ --border-accent: rgba(233, 69, 96, 0.55);
106
+ }
107
+
108
+ @supports (color: color-mix(in srgb, black 50%, white)) {
109
+ :root {
110
+ /* Prefer a theme-tinted translucent card surface when supported. */
111
+ --bg-card: color-mix(in srgb, var(--bg-secondary) 88%, transparent);
112
+ }
113
+ }
114
+
115
+ :root.theme-light,
116
+ :root.theme-solarized-light,
117
+ :root.theme-catppuccin-latte,
118
+ :root.theme-rose-pine-dawn,
119
+ :root.theme-one-light,
120
+ :root.theme-everforest-light {
121
+ color-scheme: light;
122
+ }
123
+
124
+ :root.theme-light {
125
+ --bg-primary: #f7f7fb;
126
+ --bg-secondary: #ffffff;
127
+ --bg-tertiary: #e6e8f0;
128
+ --text-primary: #0f172a;
129
+ --text-secondary: #334155;
130
+ --text-muted: #64748b;
131
+ --accent: #e94560;
132
+ --success: #16a34a;
133
+ --warning: #d97706;
134
+ --error: #dc2626;
135
+ --info: #2563eb;
136
+
137
+ --bg-card: rgba(255, 255, 255, 0.92);
138
+ --border-default: rgba(15, 23, 42, 0.12);
139
+ --border-accent: rgba(233, 69, 96, 0.45);
140
+
141
+ --ui-surface-1: rgba(15, 23, 42, 0.03);
142
+ --ui-surface-2: rgba(15, 23, 42, 0.05);
143
+ --ui-surface-3: rgba(15, 23, 42, 0.04);
144
+ --ui-border-1: rgba(15, 23, 42, 0.10);
145
+ --ui-border-2: rgba(15, 23, 42, 0.14);
146
+ --ui-shadow-1: 0 10px 30px rgba(15, 23, 42, 0.12);
147
+
148
+ --ui-overlay-bg: rgba(15, 23, 42, 0.04);
149
+ --ui-overlay-bg-hover: rgba(15, 23, 42, 0.06);
150
+ --ui-overlay-border: rgba(15, 23, 42, 0.12);
151
+ --ui-pill-bg: rgba(15, 23, 42, 0.04);
152
+ --ui-pill-border: rgba(15, 23, 42, 0.12);
153
+
154
+ --ui-chip-bg: rgba(15, 23, 42, 0.04);
155
+ --ui-chip-border: rgba(15, 23, 42, 0.12);
156
+ --ui-chip-text: rgba(15, 23, 42, 0.92);
157
+
158
+ --ui-code-bg: rgba(15, 23, 42, 0.05);
159
+ --ui-code-border: rgba(15, 23, 42, 0.10);
160
+ --ui-code-block-bg: rgba(15, 23, 42, 0.05);
161
+ --ui-code-block-border: rgba(15, 23, 42, 0.10);
162
+
163
+ --accent-subtle: rgba(233, 69, 96, 0.10);
164
+ --info-subtle: rgba(37, 99, 235, 0.10);
165
+ --success-subtle: rgba(22, 163, 74, 0.10);
166
+ --warning-subtle: rgba(217, 119, 6, 0.10);
167
+ --error-subtle: rgba(220, 38, 38, 0.10);
168
+
169
+ --accent-border: rgba(233, 69, 96, 0.30);
170
+ --info-border: rgba(37, 99, 235, 0.30);
171
+ --success-border: rgba(22, 163, 74, 0.30);
172
+ --warning-border: rgba(217, 119, 6, 0.30);
173
+ --error-border: rgba(220, 38, 38, 0.30);
174
+ --muted-border: rgba(15, 23, 42, 0.18);
175
+ }
176
+
177
+ :root.theme-nord {
178
+ --bg-primary: #2e3440;
179
+ --bg-secondary: #3b4252;
180
+ --bg-tertiary: #434c5e;
181
+ --text-primary: #eceff4;
182
+ --text-secondary: #d8dee9;
183
+ --text-muted: #81a1c1;
184
+ --accent: #88c0d0;
185
+ --success: #a3be8c;
186
+ --warning: #ebcb8b;
187
+ --error: #bf616a;
188
+ --info: #5e81ac;
189
+
190
+ --accent-subtle: rgba(136, 192, 208, 0.12);
191
+ --info-subtle: rgba(94, 129, 172, 0.12);
192
+ --success-subtle: rgba(163, 190, 140, 0.12);
193
+ --warning-subtle: rgba(235, 203, 139, 0.12);
194
+ --error-subtle: rgba(191, 97, 106, 0.12);
195
+
196
+ --accent-border: rgba(136, 192, 208, 0.35);
197
+ --info-border: rgba(94, 129, 172, 0.35);
198
+ --success-border: rgba(163, 190, 140, 0.35);
199
+ --warning-border: rgba(235, 203, 139, 0.35);
200
+ --error-border: rgba(191, 97, 106, 0.35);
201
+ --border-accent: rgba(136, 192, 208, 0.55);
202
+ }
203
+
204
+ :root.theme-dracula {
205
+ --bg-primary: #282a36;
206
+ --bg-secondary: #343746;
207
+ --bg-tertiary: #44475a;
208
+ --text-primary: #f8f8f2;
209
+ --text-secondary: #d4d4de;
210
+ --text-muted: #6272a4;
211
+ --accent: #ff79c6;
212
+ --success: #50fa7b;
213
+ --warning: #f1fa8c;
214
+ --error: #ff5555;
215
+ --info: #8be9fd;
216
+
217
+ --accent-subtle: rgba(255, 121, 198, 0.12);
218
+ --info-subtle: rgba(139, 233, 253, 0.12);
219
+ --success-subtle: rgba(80, 250, 123, 0.12);
220
+ --warning-subtle: rgba(241, 250, 140, 0.12);
221
+ --error-subtle: rgba(255, 85, 85, 0.12);
222
+
223
+ --accent-border: rgba(255, 121, 198, 0.35);
224
+ --info-border: rgba(139, 233, 253, 0.35);
225
+ --success-border: rgba(80, 250, 123, 0.35);
226
+ --warning-border: rgba(241, 250, 140, 0.35);
227
+ --error-border: rgba(255, 85, 85, 0.35);
228
+ --border-accent: rgba(255, 121, 198, 0.55);
229
+ }
230
+
231
+ :root.theme-gruvbox {
232
+ --bg-primary: #282828;
233
+ --bg-secondary: #3c3836;
234
+ --bg-tertiary: #504945;
235
+ --text-primary: #ebdbb2;
236
+ --text-secondary: #d5c4a1;
237
+ --text-muted: #928374;
238
+ --accent: #fe8019;
239
+ --success: #b8bb26;
240
+ --warning: #fabd2f;
241
+ --error: #fb4934;
242
+ --info: #83a598;
243
+
244
+ --accent-subtle: rgba(254, 128, 25, 0.12);
245
+ --info-subtle: rgba(131, 165, 152, 0.12);
246
+ --success-subtle: rgba(184, 187, 38, 0.12);
247
+ --warning-subtle: rgba(250, 189, 47, 0.12);
248
+ --error-subtle: rgba(251, 73, 52, 0.12);
249
+
250
+ --accent-border: rgba(254, 128, 25, 0.35);
251
+ --info-border: rgba(131, 165, 152, 0.35);
252
+ --success-border: rgba(184, 187, 38, 0.35);
253
+ --warning-border: rgba(250, 189, 47, 0.35);
254
+ --error-border: rgba(251, 73, 52, 0.35);
255
+ --border-accent: rgba(254, 128, 25, 0.55);
256
+ }
257
+
258
+ :root.theme-monokai {
259
+ --bg-primary: #272822;
260
+ --bg-secondary: #2d2e27;
261
+ --bg-tertiary: #3e3d32;
262
+ --text-primary: #f8f8f2;
263
+ --text-secondary: #e2e2dc;
264
+ --text-muted: #75715e;
265
+ --accent: #66d9ef;
266
+ --success: #a6e22e;
267
+ --warning: #e6db74;
268
+ --error: #f92672;
269
+ --info: #a1efe4;
270
+
271
+ --accent-subtle: rgba(102, 217, 239, 0.12);
272
+ --info-subtle: rgba(161, 239, 228, 0.12);
273
+ --success-subtle: rgba(166, 226, 46, 0.12);
274
+ --warning-subtle: rgba(230, 219, 116, 0.12);
275
+ --error-subtle: rgba(249, 38, 114, 0.12);
276
+
277
+ --accent-border: rgba(102, 217, 239, 0.35);
278
+ --info-border: rgba(161, 239, 228, 0.35);
279
+ --success-border: rgba(166, 226, 46, 0.35);
280
+ --warning-border: rgba(230, 219, 116, 0.35);
281
+ --error-border: rgba(249, 38, 114, 0.35);
282
+ --border-accent: rgba(102, 217, 239, 0.55);
283
+ }
284
+
285
+ :root.theme-solarized-dark {
286
+ --bg-primary: #002b36;
287
+ --bg-secondary: #073642;
288
+ --bg-tertiary: #0b4b5a;
289
+ --text-primary: #eee8d5;
290
+ --text-secondary: #93a1a1;
291
+ --text-muted: #657b83;
292
+ --accent: #268bd2;
293
+ --success: #859900;
294
+ --warning: #b58900;
295
+ --error: #dc322f;
296
+ --info: #2aa198;
297
+
298
+ --accent-subtle: rgba(38, 139, 210, 0.12);
299
+ --info-subtle: rgba(42, 161, 152, 0.12);
300
+ --success-subtle: rgba(133, 153, 0, 0.12);
301
+ --warning-subtle: rgba(181, 137, 0, 0.12);
302
+ --error-subtle: rgba(220, 50, 47, 0.12);
303
+
304
+ --accent-border: rgba(38, 139, 210, 0.35);
305
+ --info-border: rgba(42, 161, 152, 0.35);
306
+ --success-border: rgba(133, 153, 0, 0.35);
307
+ --warning-border: rgba(181, 137, 0, 0.35);
308
+ --error-border: rgba(220, 50, 47, 0.35);
309
+ --border-accent: rgba(38, 139, 210, 0.55);
310
+ }
311
+
312
+ :root.theme-solarized-light {
313
+ --bg-primary: #fdf6e3;
314
+ --bg-secondary: #eee8d5;
315
+ --bg-tertiary: #e3ddc9;
316
+ --text-primary: #073642;
317
+ --text-secondary: #586e75;
318
+ --text-muted: #657b83;
319
+ --accent: #268bd2;
320
+ --success: #859900;
321
+ --warning: #b58900;
322
+ --error: #dc322f;
323
+ --info: #2aa198;
324
+
325
+ --bg-card: rgba(255, 255, 255, 0.88);
326
+ --border-default: rgba(7, 54, 66, 0.18);
327
+ --border-accent: rgba(38, 139, 210, 0.35);
328
+
329
+ --ui-overlay-bg: rgba(7, 54, 66, 0.04);
330
+ --ui-overlay-bg-hover: rgba(7, 54, 66, 0.06);
331
+ --ui-overlay-border: rgba(7, 54, 66, 0.14);
332
+ --ui-pill-bg: rgba(7, 54, 66, 0.04);
333
+ --ui-pill-border: rgba(7, 54, 66, 0.14);
334
+
335
+ --ui-chip-bg: rgba(7, 54, 66, 0.04);
336
+ --ui-chip-border: rgba(7, 54, 66, 0.14);
337
+ --ui-chip-text: rgba(7, 54, 66, 0.92);
338
+
339
+ --ui-code-bg: rgba(7, 54, 66, 0.04);
340
+ --ui-code-border: rgba(7, 54, 66, 0.14);
341
+ --ui-code-block-bg: rgba(7, 54, 66, 0.04);
342
+ --ui-code-block-border: rgba(7, 54, 66, 0.14);
343
+ }
344
+
345
+ :root.theme-tokyo-night {
346
+ --bg-primary: #1a1b26;
347
+ --bg-secondary: #24283b;
348
+ --bg-tertiary: #414868;
349
+ --text-primary: #c0caf5;
350
+ --text-secondary: #a9b1d6;
351
+ --text-muted: #565f89;
352
+ --accent: #7aa2f7;
353
+ --success: #9ece6a;
354
+ --warning: #e0af68;
355
+ --error: #f7768e;
356
+ --info: #2ac3de;
357
+
358
+ --accent-subtle: rgba(122, 162, 247, 0.12);
359
+ --info-subtle: rgba(42, 195, 222, 0.12);
360
+ --success-subtle: rgba(158, 206, 106, 0.12);
361
+ --warning-subtle: rgba(224, 175, 104, 0.12);
362
+ --error-subtle: rgba(247, 118, 142, 0.12);
363
+
364
+ --accent-border: rgba(122, 162, 247, 0.35);
365
+ --info-border: rgba(42, 195, 222, 0.35);
366
+ --success-border: rgba(158, 206, 106, 0.35);
367
+ --warning-border: rgba(224, 175, 104, 0.35);
368
+ --error-border: rgba(247, 118, 142, 0.35);
369
+ --border-accent: rgba(122, 162, 247, 0.55);
370
+ }
371
+
372
+ :root.theme-catppuccin-mocha {
373
+ --bg-primary: #1e1e2e;
374
+ --bg-secondary: #181825;
375
+ --bg-tertiary: #313244;
376
+ --text-primary: #cdd6f4;
377
+ --text-secondary: #bac2de;
378
+ --text-muted: #6c7086;
379
+ --accent: #cba6f7;
380
+ --success: #a6e3a1;
381
+ --warning: #f9e2af;
382
+ --error: #f38ba8;
383
+ --info: #89b4fa;
384
+
385
+ --accent-subtle: rgba(203, 166, 247, 0.12);
386
+ --info-subtle: rgba(137, 180, 250, 0.12);
387
+ --success-subtle: rgba(166, 227, 161, 0.12);
388
+ --warning-subtle: rgba(249, 226, 175, 0.12);
389
+ --error-subtle: rgba(243, 139, 168, 0.12);
390
+
391
+ --accent-border: rgba(203, 166, 247, 0.35);
392
+ --info-border: rgba(137, 180, 250, 0.35);
393
+ --success-border: rgba(166, 227, 161, 0.35);
394
+ --warning-border: rgba(249, 226, 175, 0.35);
395
+ --error-border: rgba(243, 139, 168, 0.35);
396
+ --border-accent: rgba(203, 166, 247, 0.55);
397
+ }
398
+
399
+ :root.theme-catppuccin-macchiato {
400
+ --bg-primary: #24273a;
401
+ --bg-secondary: #1e2030;
402
+ --bg-tertiary: #363a4f;
403
+ --text-primary: #cad3f5;
404
+ --text-secondary: #b8c0e0;
405
+ --text-muted: #8087a2;
406
+ --accent: #c6a0f6;
407
+ --success: #a6da95;
408
+ --warning: #eed49f;
409
+ --error: #ed8796;
410
+ --info: #8aadf4;
411
+
412
+ --accent-subtle: rgba(198, 160, 246, 0.12);
413
+ --info-subtle: rgba(138, 173, 244, 0.12);
414
+ --success-subtle: rgba(166, 218, 149, 0.12);
415
+ --warning-subtle: rgba(238, 212, 159, 0.12);
416
+ --error-subtle: rgba(237, 135, 150, 0.12);
417
+
418
+ --accent-border: rgba(198, 160, 246, 0.35);
419
+ --info-border: rgba(138, 173, 244, 0.35);
420
+ --success-border: rgba(166, 218, 149, 0.35);
421
+ --warning-border: rgba(238, 212, 159, 0.35);
422
+ --error-border: rgba(237, 135, 150, 0.35);
423
+ --border-accent: rgba(198, 160, 246, 0.55);
424
+ }
425
+
426
+ :root.theme-catppuccin-frappe {
427
+ --bg-primary: #303446;
428
+ --bg-secondary: #292c3c;
429
+ --bg-tertiary: #414559;
430
+ --text-primary: #c6d0f5;
431
+ --text-secondary: #b5bfe2;
432
+ --text-muted: #838ba7;
433
+ --accent: #ca9ee6;
434
+ --success: #a6d189;
435
+ --warning: #e5c890;
436
+ --error: #e78284;
437
+ --info: #8caaee;
438
+
439
+ --accent-subtle: rgba(202, 158, 230, 0.12);
440
+ --info-subtle: rgba(140, 170, 238, 0.12);
441
+ --success-subtle: rgba(166, 209, 137, 0.12);
442
+ --warning-subtle: rgba(229, 200, 144, 0.12);
443
+ --error-subtle: rgba(231, 130, 132, 0.12);
444
+
445
+ --accent-border: rgba(202, 158, 230, 0.35);
446
+ --info-border: rgba(140, 170, 238, 0.35);
447
+ --success-border: rgba(166, 209, 137, 0.35);
448
+ --warning-border: rgba(229, 200, 144, 0.35);
449
+ --error-border: rgba(231, 130, 132, 0.35);
450
+ --border-accent: rgba(202, 158, 230, 0.55);
451
+ }
452
+
453
+ :root.theme-rose-pine {
454
+ --bg-primary: #191724;
455
+ --bg-secondary: #1f1d2e;
456
+ --bg-tertiary: #26233a;
457
+ --text-primary: #e0def4;
458
+ --text-secondary: #908caa;
459
+ --text-muted: #6e6a86;
460
+ --accent: #c4a7e7;
461
+ --success: #9ccfd8;
462
+ --warning: #f6c177;
463
+ --error: #eb6f92;
464
+ --info: #31748f;
465
+
466
+ --accent-subtle: rgba(196, 167, 231, 0.12);
467
+ --info-subtle: rgba(49, 116, 143, 0.12);
468
+ --success-subtle: rgba(156, 207, 216, 0.12);
469
+ --warning-subtle: rgba(246, 193, 119, 0.12);
470
+ --error-subtle: rgba(235, 111, 146, 0.12);
471
+
472
+ --accent-border: rgba(196, 167, 231, 0.35);
473
+ --info-border: rgba(49, 116, 143, 0.35);
474
+ --success-border: rgba(156, 207, 216, 0.35);
475
+ --warning-border: rgba(246, 193, 119, 0.35);
476
+ --error-border: rgba(235, 111, 146, 0.35);
477
+ --border-accent: rgba(196, 167, 231, 0.55);
478
+ }
479
+
480
+ :root.theme-rose-pine-moon {
481
+ --bg-primary: #232136;
482
+ --bg-secondary: #2a273f;
483
+ --bg-tertiary: #393552;
484
+ --text-primary: #e0def4;
485
+ --text-secondary: #908caa;
486
+ --text-muted: #6e6a86;
487
+ --accent: #c4a7e7;
488
+ --success: #9ccfd8;
489
+ --warning: #f6c177;
490
+ --error: #eb6f92;
491
+ --info: #3e8fb0;
492
+
493
+ --accent-subtle: rgba(196, 167, 231, 0.12);
494
+ --info-subtle: rgba(62, 143, 176, 0.12);
495
+ --success-subtle: rgba(156, 207, 216, 0.12);
496
+ --warning-subtle: rgba(246, 193, 119, 0.12);
497
+ --error-subtle: rgba(235, 111, 146, 0.12);
498
+
499
+ --accent-border: rgba(196, 167, 231, 0.35);
500
+ --info-border: rgba(62, 143, 176, 0.35);
501
+ --success-border: rgba(156, 207, 216, 0.35);
502
+ --warning-border: rgba(246, 193, 119, 0.35);
503
+ --error-border: rgba(235, 111, 146, 0.35);
504
+ --border-accent: rgba(196, 167, 231, 0.55);
505
+ }
506
+
507
+ :root.theme-one-dark {
508
+ --bg-primary: #282c34;
509
+ --bg-secondary: #21252b;
510
+ --bg-tertiary: #3a3f4b;
511
+ --text-primary: #abb2bf;
512
+ --text-secondary: #9da5b4;
513
+ --text-muted: #5c6370;
514
+ --accent: #61afef;
515
+ --success: #98c379;
516
+ --warning: #e5c07b;
517
+ --error: #e06c75;
518
+ --info: #c678dd;
519
+
520
+ --accent-subtle: rgba(97, 175, 239, 0.12);
521
+ --info-subtle: rgba(198, 120, 221, 0.12);
522
+ --success-subtle: rgba(152, 195, 121, 0.12);
523
+ --warning-subtle: rgba(229, 192, 123, 0.12);
524
+ --error-subtle: rgba(224, 108, 117, 0.12);
525
+
526
+ --accent-border: rgba(97, 175, 239, 0.35);
527
+ --info-border: rgba(198, 120, 221, 0.35);
528
+ --success-border: rgba(152, 195, 121, 0.35);
529
+ --warning-border: rgba(229, 192, 123, 0.35);
530
+ --error-border: rgba(224, 108, 117, 0.35);
531
+ --border-accent: rgba(97, 175, 239, 0.55);
532
+ }
533
+
534
+ :root.theme-everforest-dark {
535
+ --bg-primary: #2b3339;
536
+ --bg-secondary: #323c41;
537
+ --bg-tertiary: #3a464c;
538
+ --text-primary: #d3c6aa;
539
+ --text-secondary: #a7c080;
540
+ --text-muted: #859289;
541
+ --accent: #a7c080;
542
+ --success: #a7c080;
543
+ --warning: #dbbc7f;
544
+ --error: #e67e80;
545
+ --info: #7fbbb3;
546
+
547
+ --accent-subtle: rgba(167, 192, 128, 0.12);
548
+ --info-subtle: rgba(127, 187, 179, 0.12);
549
+ --success-subtle: rgba(167, 192, 128, 0.12);
550
+ --warning-subtle: rgba(219, 188, 127, 0.12);
551
+ --error-subtle: rgba(230, 126, 128, 0.12);
552
+
553
+ --accent-border: rgba(167, 192, 128, 0.35);
554
+ --info-border: rgba(127, 187, 179, 0.35);
555
+ --success-border: rgba(167, 192, 128, 0.35);
556
+ --warning-border: rgba(219, 188, 127, 0.35);
557
+ --error-border: rgba(230, 126, 128, 0.35);
558
+ --border-accent: rgba(167, 192, 128, 0.55);
559
+ }
560
+
561
+ :root.theme-catppuccin-latte {
562
+ --bg-primary: #eff1f5;
563
+ --bg-secondary: #e6e9ef;
564
+ --bg-tertiary: #ccd0da;
565
+ --text-primary: #4c4f69;
566
+ --text-secondary: #5c5f77;
567
+ --text-muted: #9ca0b0;
568
+ --accent: #8839ef;
569
+ --success: #40a02b;
570
+ --warning: #df8e1d;
571
+ --error: #d20f39;
572
+ --info: #1e66f5;
573
+
574
+ --bg-card: rgba(255, 255, 255, 0.92);
575
+ --border-default: rgba(76, 79, 105, 0.12);
576
+ --border-accent: rgba(136, 57, 239, 0.35);
577
+
578
+ --ui-surface-1: rgba(76, 79, 105, 0.03);
579
+ --ui-surface-2: rgba(76, 79, 105, 0.05);
580
+ --ui-surface-3: rgba(76, 79, 105, 0.04);
581
+ --ui-border-1: rgba(76, 79, 105, 0.10);
582
+ --ui-border-2: rgba(76, 79, 105, 0.14);
583
+ --ui-shadow-1: 0 10px 30px rgba(76, 79, 105, 0.12);
584
+
585
+ --ui-overlay-bg: rgba(76, 79, 105, 0.04);
586
+ --ui-overlay-bg-hover: rgba(76, 79, 105, 0.06);
587
+ --ui-overlay-border: rgba(76, 79, 105, 0.12);
588
+ --ui-pill-bg: rgba(76, 79, 105, 0.04);
589
+ --ui-pill-border: rgba(76, 79, 105, 0.12);
590
+
591
+ --ui-chip-bg: rgba(76, 79, 105, 0.04);
592
+ --ui-chip-border: rgba(76, 79, 105, 0.12);
593
+ --ui-chip-text: rgba(76, 79, 105, 0.92);
594
+
595
+ --ui-code-bg: rgba(76, 79, 105, 0.05);
596
+ --ui-code-border: rgba(76, 79, 105, 0.10);
597
+ --ui-code-block-bg: rgba(76, 79, 105, 0.05);
598
+ --ui-code-block-border: rgba(76, 79, 105, 0.10);
599
+
600
+ --accent-subtle: rgba(136, 57, 239, 0.10);
601
+ --info-subtle: rgba(30, 102, 245, 0.10);
602
+ --success-subtle: rgba(64, 160, 43, 0.10);
603
+ --warning-subtle: rgba(223, 142, 29, 0.10);
604
+ --error-subtle: rgba(210, 15, 57, 0.10);
605
+
606
+ --accent-border: rgba(136, 57, 239, 0.30);
607
+ --info-border: rgba(30, 102, 245, 0.30);
608
+ --success-border: rgba(64, 160, 43, 0.30);
609
+ --warning-border: rgba(223, 142, 29, 0.30);
610
+ --error-border: rgba(210, 15, 57, 0.30);
611
+ --muted-border: rgba(76, 79, 105, 0.18);
612
+ }
613
+
614
+ :root.theme-rose-pine-dawn {
615
+ --bg-primary: #faf4ed;
616
+ --bg-secondary: #fffaf3;
617
+ --bg-tertiary: #f2e9e1;
618
+ --text-primary: #575279;
619
+ --text-secondary: #6e6a86;
620
+ --text-muted: #9893a5;
621
+ --accent: #907aa9;
622
+ --success: #286983;
623
+ --warning: #ea9d34;
624
+ --error: #b4637a;
625
+ --info: #56949f;
626
+
627
+ --bg-card: rgba(255, 255, 255, 0.92);
628
+ --border-default: rgba(87, 82, 121, 0.12);
629
+ --border-accent: rgba(144, 122, 169, 0.35);
630
+
631
+ --ui-surface-1: rgba(87, 82, 121, 0.03);
632
+ --ui-surface-2: rgba(87, 82, 121, 0.05);
633
+ --ui-surface-3: rgba(87, 82, 121, 0.04);
634
+ --ui-border-1: rgba(87, 82, 121, 0.10);
635
+ --ui-border-2: rgba(87, 82, 121, 0.14);
636
+ --ui-shadow-1: 0 10px 30px rgba(87, 82, 121, 0.12);
637
+
638
+ --ui-overlay-bg: rgba(87, 82, 121, 0.04);
639
+ --ui-overlay-bg-hover: rgba(87, 82, 121, 0.06);
640
+ --ui-overlay-border: rgba(87, 82, 121, 0.12);
641
+ --ui-pill-bg: rgba(87, 82, 121, 0.04);
642
+ --ui-pill-border: rgba(87, 82, 121, 0.12);
643
+
644
+ --ui-chip-bg: rgba(87, 82, 121, 0.04);
645
+ --ui-chip-border: rgba(87, 82, 121, 0.12);
646
+ --ui-chip-text: rgba(87, 82, 121, 0.92);
647
+
648
+ --ui-code-bg: rgba(87, 82, 121, 0.05);
649
+ --ui-code-border: rgba(87, 82, 121, 0.10);
650
+ --ui-code-block-bg: rgba(87, 82, 121, 0.05);
651
+ --ui-code-block-border: rgba(87, 82, 121, 0.10);
652
+
653
+ --accent-subtle: rgba(144, 122, 169, 0.10);
654
+ --info-subtle: rgba(86, 148, 159, 0.10);
655
+ --success-subtle: rgba(40, 105, 131, 0.10);
656
+ --warning-subtle: rgba(234, 157, 52, 0.10);
657
+ --error-subtle: rgba(180, 99, 122, 0.10);
658
+
659
+ --accent-border: rgba(144, 122, 169, 0.30);
660
+ --info-border: rgba(86, 148, 159, 0.30);
661
+ --success-border: rgba(40, 105, 131, 0.30);
662
+ --warning-border: rgba(234, 157, 52, 0.30);
663
+ --error-border: rgba(180, 99, 122, 0.30);
664
+ --muted-border: rgba(87, 82, 121, 0.18);
665
+ }
666
+
667
+ :root.theme-one-light {
668
+ --bg-primary: #fafafa;
669
+ --bg-secondary: #ffffff;
670
+ --bg-tertiary: #e5e5e6;
671
+ --text-primary: #383a42;
672
+ --text-secondary: #4f525d;
673
+ --text-muted: #a0a1a7;
674
+ --accent: #4078f2;
675
+ --success: #50a14f;
676
+ --warning: #c18401;
677
+ --error: #e45649;
678
+ --info: #a626a4;
679
+
680
+ --bg-card: rgba(255, 255, 255, 0.92);
681
+ --border-default: rgba(56, 58, 66, 0.12);
682
+ --border-accent: rgba(64, 120, 242, 0.35);
683
+
684
+ --ui-surface-1: rgba(56, 58, 66, 0.03);
685
+ --ui-surface-2: rgba(56, 58, 66, 0.05);
686
+ --ui-surface-3: rgba(56, 58, 66, 0.04);
687
+ --ui-border-1: rgba(56, 58, 66, 0.10);
688
+ --ui-border-2: rgba(56, 58, 66, 0.14);
689
+ --ui-shadow-1: 0 10px 30px rgba(56, 58, 66, 0.12);
690
+
691
+ --ui-overlay-bg: rgba(56, 58, 66, 0.04);
692
+ --ui-overlay-bg-hover: rgba(56, 58, 66, 0.06);
693
+ --ui-overlay-border: rgba(56, 58, 66, 0.12);
694
+ --ui-pill-bg: rgba(56, 58, 66, 0.04);
695
+ --ui-pill-border: rgba(56, 58, 66, 0.12);
696
+
697
+ --ui-chip-bg: rgba(56, 58, 66, 0.04);
698
+ --ui-chip-border: rgba(56, 58, 66, 0.12);
699
+ --ui-chip-text: rgba(56, 58, 66, 0.92);
700
+
701
+ --ui-code-bg: rgba(56, 58, 66, 0.05);
702
+ --ui-code-border: rgba(56, 58, 66, 0.10);
703
+ --ui-code-block-bg: rgba(56, 58, 66, 0.05);
704
+ --ui-code-block-border: rgba(56, 58, 66, 0.10);
705
+
706
+ --accent-subtle: rgba(64, 120, 242, 0.10);
707
+ --info-subtle: rgba(166, 38, 164, 0.10);
708
+ --success-subtle: rgba(80, 161, 79, 0.10);
709
+ --warning-subtle: rgba(193, 132, 1, 0.10);
710
+ --error-subtle: rgba(228, 86, 73, 0.10);
711
+
712
+ --accent-border: rgba(64, 120, 242, 0.30);
713
+ --info-border: rgba(166, 38, 164, 0.30);
714
+ --success-border: rgba(80, 161, 79, 0.30);
715
+ --warning-border: rgba(193, 132, 1, 0.30);
716
+ --error-border: rgba(228, 86, 73, 0.30);
717
+ --muted-border: rgba(56, 58, 66, 0.18);
718
+ }
719
+
720
+ :root.theme-everforest-light {
721
+ --bg-primary: #fdf6e3;
722
+ --bg-secondary: #fffbef;
723
+ --bg-tertiary: #e8e0cc;
724
+ --text-primary: #5c6a72;
725
+ --text-secondary: #708089;
726
+ --text-muted: #9da9a0;
727
+ --accent: #4f8f5a;
728
+ --success: #4f8f5a;
729
+ --warning: #d6993d;
730
+ --error: #f85552;
731
+ --info: #3a94c5;
732
+
733
+ --bg-card: rgba(255, 255, 255, 0.92);
734
+ --border-default: rgba(92, 106, 114, 0.12);
735
+ --border-accent: rgba(79, 143, 90, 0.35);
736
+
737
+ --ui-surface-1: rgba(92, 106, 114, 0.03);
738
+ --ui-surface-2: rgba(92, 106, 114, 0.05);
739
+ --ui-surface-3: rgba(92, 106, 114, 0.04);
740
+ --ui-border-1: rgba(92, 106, 114, 0.10);
741
+ --ui-border-2: rgba(92, 106, 114, 0.14);
742
+ --ui-shadow-1: 0 10px 30px rgba(92, 106, 114, 0.12);
743
+
744
+ --ui-overlay-bg: rgba(92, 106, 114, 0.04);
745
+ --ui-overlay-bg-hover: rgba(92, 106, 114, 0.06);
746
+ --ui-overlay-border: rgba(92, 106, 114, 0.12);
747
+ --ui-pill-bg: rgba(92, 106, 114, 0.04);
748
+ --ui-pill-border: rgba(92, 106, 114, 0.12);
749
+
750
+ --ui-chip-bg: rgba(92, 106, 114, 0.04);
751
+ --ui-chip-border: rgba(92, 106, 114, 0.12);
752
+ --ui-chip-text: rgba(92, 106, 114, 0.92);
753
+
754
+ --ui-code-bg: rgba(92, 106, 114, 0.05);
755
+ --ui-code-border: rgba(92, 106, 114, 0.10);
756
+ --ui-code-block-bg: rgba(92, 106, 114, 0.05);
757
+ --ui-code-block-border: rgba(92, 106, 114, 0.10);
758
+
759
+ --accent-subtle: rgba(79, 143, 90, 0.10);
760
+ --info-subtle: rgba(58, 148, 197, 0.10);
761
+ --success-subtle: rgba(79, 143, 90, 0.10);
762
+ --warning-subtle: rgba(214, 153, 61, 0.10);
763
+ --error-subtle: rgba(248, 85, 82, 0.10);
764
+
765
+ --accent-border: rgba(79, 143, 90, 0.30);
766
+ --info-border: rgba(58, 148, 197, 0.30);
767
+ --success-border: rgba(79, 143, 90, 0.30);
768
+ --warning-border: rgba(214, 153, 61, 0.30);
769
+ --error-border: rgba(248, 85, 82, 0.30);
770
+ --muted-border: rgba(92, 106, 114, 0.18);
771
+ }
772
+
773
+ /* ------------------------------------------------------------------------- */
774
+ /* AbstractFlow-style custom select (searchable popover) */
775
+ /* ------------------------------------------------------------------------- */
776
+
777
+ .af-select {
778
+ display: inline-flex;
779
+ }
780
+
781
+ .af-select--panel {
782
+ display: flex;
783
+ width: 100%;
784
+ }
785
+
786
+ .af-select--pin {
787
+ display: inline-flex;
788
+ }
789
+
790
+ .af-select-trigger {
791
+ display: inline-flex;
792
+ align-items: center;
793
+ gap: 8px;
794
+ border: 1px solid var(--ui-overlay-border, rgba(255, 255, 255, 0.14));
795
+ background: var(--ui-overlay-bg, rgba(0, 0, 0, 0.18));
796
+ color: var(--text-primary);
797
+ border-radius: var(--radius-md, 8px);
798
+ padding: 0 10px;
799
+ line-height: 1;
800
+ font-family: var(--font-sans);
801
+ font-size: var(--font-size-base);
802
+ }
803
+
804
+ .af-select-trigger:hover:not(:disabled) {
805
+ background: var(--ui-overlay-bg-hover, rgba(255, 255, 255, 0.08));
806
+ }
807
+
808
+ .af-select--pin .af-select-trigger {
809
+ height: 20px;
810
+ max-width: 160px;
811
+ font-size: var(--font-size-xs);
812
+ padding: 0 8px;
813
+ }
814
+
815
+ .af-select--panel .af-select-trigger {
816
+ height: 34px;
817
+ width: 100%;
818
+ }
819
+
820
+ .af-select-value {
821
+ overflow: hidden;
822
+ text-overflow: ellipsis;
823
+ white-space: nowrap;
824
+ flex: 1;
825
+ text-align: left;
826
+ }
827
+
828
+ .af-select-value--placeholder {
829
+ color: var(--text-secondary);
830
+ }
831
+
832
+ .af-select-clear {
833
+ display: inline-flex;
834
+ width: 16px;
835
+ height: 16px;
836
+ align-items: center;
837
+ justify-content: center;
838
+ border-radius: 6px;
839
+ color: var(--text-secondary);
840
+ cursor: pointer;
841
+ }
842
+
843
+ .af-select-clear:hover {
844
+ color: var(--text-primary);
845
+ background: var(--ui-overlay-bg-hover, rgba(255, 255, 255, 0.08));
846
+ }
847
+
848
+ .af-select-caret {
849
+ color: var(--text-secondary);
850
+ transform: translateY(-1px);
851
+ }
852
+
853
+ .af-select-caret--open {
854
+ color: var(--text-primary);
855
+ }
856
+
857
+ .af-select-popover {
858
+ z-index: 10000;
859
+ background: var(--bg-card, var(--bg-secondary));
860
+ border: 1px solid var(--ui-overlay-border, rgba(255, 255, 255, 0.14));
861
+ border-radius: 12px;
862
+ box-shadow: var(--ui-shadow-1, 0 10px 30px rgba(0, 0, 0, 0.35));
863
+ overflow: hidden;
864
+ }
865
+
866
+ .af-select-popover--top {
867
+ transform: translateY(-100%);
868
+ }
869
+
870
+ .af-select-search {
871
+ padding: 10px;
872
+ border-bottom: 1px solid var(--ui-border-1, rgba(255, 255, 255, 0.10));
873
+ background: var(--ui-surface-2, rgba(255, 255, 255, 0.06));
874
+ }
875
+
876
+ .af-select-search-input {
877
+ width: 100%;
878
+ height: 34px;
879
+ padding: 6px 10px;
880
+ border-radius: 10px;
881
+ border: 1px solid var(--ui-border-2, rgba(255, 255, 255, 0.14));
882
+ background: var(--ui-code-bg, rgba(0, 0, 0, 0.18));
883
+ color: var(--text-primary);
884
+ font-family: var(--font-sans);
885
+ font-size: var(--font-size-base);
886
+ }
887
+
888
+ .af-select-options {
889
+ max-height: 340px;
890
+ overflow: auto;
891
+ padding: 6px;
892
+ }
893
+
894
+ .af-select-empty {
895
+ padding: 10px;
896
+ color: var(--text-secondary);
897
+ font-size: var(--font-size-sm);
898
+ }
899
+
900
+ .af-select-group {
901
+ padding: 8px 10px 6px 10px;
902
+ font-size: var(--font-size-xxs);
903
+ font-weight: 700;
904
+ letter-spacing: 0.02em;
905
+ text-transform: uppercase;
906
+ color: var(--text-muted);
907
+ }
908
+
909
+ .af-select-option {
910
+ display: flex;
911
+ align-items: center;
912
+ justify-content: space-between;
913
+ gap: 10px;
914
+ padding: 9px 10px;
915
+ border-radius: 10px;
916
+ cursor: pointer;
917
+ color: var(--text-primary);
918
+ font-size: var(--font-size-base);
919
+ }
920
+
921
+ .af-select-option--highlighted {
922
+ background: var(--accent-subtle, rgba(233, 69, 96, 0.12));
923
+ }
924
+
925
+ .af-select-option--selected {
926
+ background: var(--ui-surface-2, rgba(255, 255, 255, 0.06));
927
+ }
928
+
929
+ .af-select-option-label {
930
+ flex: 1;
931
+ overflow: hidden;
932
+ text-overflow: ellipsis;
933
+ white-space: nowrap;
934
+ }
935
+
936
+ .af-select-check {
937
+ color: var(--accent);
938
+ font-weight: 700;
939
+ }
940
+
941
+ /* ThemeSelect swatch previews */
942
+ .af-theme-value {
943
+ display: inline-flex;
944
+ align-items: center;
945
+ gap: 10px;
946
+ min-width: 0;
947
+ flex: 1 1 auto;
948
+ }
949
+
950
+ .af-theme-label {
951
+ overflow: hidden;
952
+ text-overflow: ellipsis;
953
+ white-space: nowrap;
954
+ min-width: 0;
955
+ flex: 1 1 auto;
956
+ }
957
+
958
+ .af-theme-label--placeholder {
959
+ color: var(--text-secondary);
960
+ }
961
+
962
+ .af-theme-option-label {
963
+ flex: 1 1 auto;
964
+ overflow: hidden;
965
+ text-overflow: ellipsis;
966
+ white-space: nowrap;
967
+ min-width: 0;
968
+ }
969
+
970
+ .af-theme-option-right {
971
+ display: inline-flex;
972
+ align-items: center;
973
+ gap: 10px;
974
+ flex: 0 0 auto;
975
+ }
976
+
977
+ .af-theme-swatches {
978
+ display: inline-flex;
979
+ gap: 4px;
980
+ flex: 0 0 auto;
981
+ }
982
+
983
+ .af-theme-swatch {
984
+ width: 10px;
985
+ height: 10px;
986
+ border-radius: 3px;
987
+ border: 1px solid var(--ui-border-1, rgba(255, 255, 255, 0.10));
988
+ box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
989
+ }