@becrafter/prompt-manager 0.2.3-alpha.7 → 0.2.4-dev.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/package.json +3 -1
  2. package/packages/server/utils/config.js +1 -1
  3. package/packages/web/0.26974981f2e663e001ca.js +1 -0
  4. package/packages/web/112.895e73058c36df517412.js +1 -0
  5. package/packages/web/130.2145d293d97ee88902a1.js +1 -0
  6. package/packages/web/142.4ef07b4323c04c87bd81.js +1 -0
  7. package/packages/web/165.3b013a0e62121061ce41.js +2 -0
  8. package/packages/web/165.3b013a0e62121061ce41.js.LICENSE.txt +9 -0
  9. package/packages/web/203.a3697c577f74b6538257.js +1 -0
  10. package/packages/web/241.c0b98c14268a1d46d55d.js +1 -0
  11. package/packages/web/249.e10b6b8a1ac4f66185ea.js +1 -0
  12. package/packages/web/291.8c281d2823aa37833137.js +1 -0
  13. package/packages/web/319.5b4ef8bdd727fdac0520.js +1 -0
  14. package/packages/web/32.22d5433bcd9b6b4e98f1.js +1 -0
  15. package/packages/web/325.8810a3f94093d0f19341.js +1 -0
  16. package/packages/web/366.24666676c36ca63de8e1.js +1 -0
  17. package/packages/web/378.07aa22b5f489f8f1ec36.js +1 -0
  18. package/packages/web/391.f39db51c15feb65b46cb.js +1 -0
  19. package/packages/web/393.ab70195ea156eebec40b.js +1 -0
  20. package/packages/web/412.6d38dd3b290782c51ed6.js +1 -0
  21. package/packages/web/465.fb5ab26f362d3eb53da9.js +1 -0
  22. package/packages/web/48.7643e76aedee153e680c.js +1 -0
  23. package/packages/web/480.237737e805b568087d34.js +1 -0
  24. package/packages/web/489.182e98261f30e4da62d6.js +1 -0
  25. package/packages/web/490.3f311f0c36d0c52f8b52.js +1 -0
  26. package/packages/web/492.d07d9857e3682710f3a5.js +1 -0
  27. package/packages/web/495.60324846746eea7d588b.js +1 -0
  28. package/packages/web/510.b6e2c433d2f9bc9a1edd.js +1 -0
  29. package/packages/web/543.223a1c0b8345b4e65ed3.js +1 -0
  30. package/packages/web/567.e438fd025d21373bc95b.js +1 -0
  31. package/packages/web/592.c670d3500195bdb18ca4.js +1 -0
  32. package/packages/web/616.a8b495ba380ec0bcafd9.js +1 -0
  33. package/packages/web/617.bc4db899b54108068892.js +1 -0
  34. package/packages/web/641.1e5e900d36819777d808.js +1 -0
  35. package/packages/web/672.ae0e48b24fd6863bb4d1.js +1 -0
  36. package/packages/web/731.595770c0a8f30f8c453d.js +1 -0
  37. package/packages/web/746.3faf506c16dc0e6ae25a.js +1 -0
  38. package/packages/web/756.16d54ad97aadec6eb440.js +1 -0
  39. package/packages/web/77.d3de1da7532138022a7c.js +1 -0
  40. package/packages/web/802.0a9a7f92703bd3ed0228.js +1 -0
  41. package/packages/web/815.879527c51deda81ff3e6.js +1 -0
  42. package/packages/web/821.12f33b53b488b3995bb9.js +1 -0
  43. package/packages/web/846.64e9bb4b76cae3245c47.js +1 -0
  44. package/packages/web/869.aadd9a07fd56e04ba5dd.js +1 -0
  45. package/packages/web/885.6dc8edf4c16f6b578da6.js +1 -0
  46. package/packages/web/901.45604b599d11f86ae9d8.js +1 -0
  47. package/packages/web/928.69835904eae42113a3ce.js +1 -0
  48. package/packages/web/955.827020bdb97be41eb055.js +1 -0
  49. package/packages/web/981.e4d081b9d1dac0cd275f.js +1 -0
  50. package/packages/web/992.a3843959b85c7fdc6cf9.js +1 -0
  51. package/packages/web/996.07a82c3066973c75984b.js +1 -0
  52. package/packages/web/css/codemirror-theme_xq-light.css +43 -0
  53. package/packages/web/css/codemirror.css +344 -0
  54. package/packages/web/css/main.21a58f9cb3d253fa7787.css +9996 -0
  55. package/packages/web/css/main.css +4405 -0
  56. package/packages/web/css/skills.css +1753 -0
  57. package/packages/web/css/terminal.css +1218 -0
  58. package/packages/web/index.html +3 -0
  59. package/packages/web/main.cf6dd52dbaa4f935d45a.js +2 -0
  60. package/packages/web/main.cf6dd52dbaa4f935d45a.js.LICENSE.txt +3 -0
@@ -0,0 +1,4405 @@
1
+ /* 主要应用样式 */
2
+ :root {
3
+ --primary: #393939;
4
+ --primary-dark: #393939;
5
+ --success: #28a745;
6
+ --danger: #dc3545;
7
+ --warning: #ffc107;
8
+ --dark: #1a1a1a;
9
+ --light: #f8f9fa;
10
+ --gray: #6c757d;
11
+ --gray-light: #dee2e6;
12
+ --border: #e0e0e0;
13
+ --sidebar-bg: #f8f9fa;
14
+ --editor-bg: #263238;
15
+ --preview-bg: #f5f5f5;
16
+ --scrollbar-width: 6px;
17
+ --scrollbar-thumb-color: rgba(0, 0, 0, 0.15);
18
+ --scrollbar-thumb-hover-color: rgba(0, 0, 0, 0.25);
19
+ }
20
+
21
+ /* 全局滚动条样式 - 默认隐藏,悬停时显示 */
22
+ * {
23
+ scrollbar-width: thin;
24
+ scrollbar-color: transparent transparent;
25
+ }
26
+
27
+ *:hover {
28
+ scrollbar-color: var(--scrollbar-thumb-color) transparent;
29
+ }
30
+
31
+ /* Webkit 浏览器滚动条样式 */
32
+ *::-webkit-scrollbar {
33
+ width: var(--scrollbar-width);
34
+ height: var(--scrollbar-width);
35
+ }
36
+
37
+ *::-webkit-scrollbar-track {
38
+ background: transparent;
39
+ }
40
+
41
+ *::-webkit-scrollbar-thumb {
42
+ background: transparent;
43
+ border-radius: calc(var(--scrollbar-width) / 2);
44
+ transition: background-color 0.2s ease;
45
+ }
46
+
47
+ *:hover::-webkit-scrollbar-thumb {
48
+ background: var(--scrollbar-thumb-color);
49
+ }
50
+
51
+ *::-webkit-scrollbar-thumb:hover {
52
+ background: var(--scrollbar-thumb-hover-color);
53
+ }
54
+
55
+ * {
56
+ box-sizing: border-box;
57
+ margin: 0;
58
+ padding: 0;
59
+ font-family: "Inter", "SF Pro Display", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Microsoft YaHei", sans-serif;
60
+ -webkit-font-smoothing: antialiased;
61
+ -moz-osx-font-smoothing: grayscale;
62
+ text-rendering: optimizeLegibility;
63
+ }
64
+
65
+ body {
66
+ background-color: var(--light);
67
+ color: var(--dark);
68
+ min-height: 100vh;
69
+ display: flex;
70
+ flex-direction: column;
71
+ letter-spacing: -0.01em;
72
+ font-weight: 420;
73
+ overflow-y: hidden;
74
+ }
75
+
76
+ header {
77
+ background-color: white;
78
+ padding: 8px 25px;
79
+ display: flex;
80
+ align-items: center;
81
+ justify-content: space-between;
82
+ box-shadow: 0 2px 8px rgba(0,0,0,0.05);
83
+ border-bottom: 1px solid var(--border);
84
+ }
85
+
86
+ .logo {
87
+ font-size: 24px;
88
+ font-weight: 580;
89
+ color: var(--primary);
90
+ display: flex;
91
+ align-items: center;
92
+ gap: 10px;
93
+ letter-spacing: -0.02em;
94
+ }
95
+
96
+ .logo span {
97
+ color: #8e8989;
98
+ font-size: 10px;
99
+ padding: 2px 6px;
100
+ border-radius: 4px;
101
+ font-weight: 400;
102
+ border: 1px solid var(--border);
103
+ letter-spacing: 0;
104
+ }
105
+
106
+ .nav-right {
107
+ display: flex;
108
+ gap: 12px;
109
+ align-items: center;
110
+ position: relative;
111
+ }
112
+
113
+ .github-link {
114
+ display: flex;
115
+ align-items: center;
116
+ justify-content: center;
117
+ width: 32px;
118
+ height: 32px;
119
+ color: #6c757d;
120
+ text-decoration: none;
121
+ border-radius: 6px;
122
+ transition: all 0.2s ease;
123
+ }
124
+
125
+ .github-link:hover {
126
+ color: #24292e;
127
+ background-color: rgba(36, 41, 46, 0.1);
128
+ text-decoration: none;
129
+ }
130
+
131
+ .user-profile {
132
+ position: relative;
133
+ }
134
+
135
+ .avatar-btn {
136
+ width: 32px;
137
+ height: 32px;
138
+ padding: 0;
139
+ border: none;
140
+ background: rgba(0,0,0,0.02);
141
+ cursor: pointer;
142
+ border-radius: 50%;
143
+ overflow: hidden;
144
+ transition: all 0.2s ease;
145
+ display: flex;
146
+ align-items: center;
147
+ justify-content: center;
148
+ }
149
+
150
+ .avatar-btn:hover {
151
+ transform: translateY(-1px);
152
+ background: rgba(0,0,0,0.04);
153
+ box-shadow: 0 2px 8px rgba(0,0,0,0.05);
154
+ }
155
+
156
+ /* 当不需要认证时,头像显示为不可点击状态 */
157
+ .avatar-btn.no-auth {
158
+ cursor: default;
159
+ }
160
+
161
+ .avatar-btn.no-auth:hover {
162
+ transform: none;
163
+ background: rgba(0,0,0,0.02);
164
+ box-shadow: none;
165
+ }
166
+
167
+ .avatar-img {
168
+ width: 26px;
169
+ height: 26px;
170
+ object-fit: cover;
171
+ border-radius: 50%;
172
+ opacity: 0.75;
173
+ transition: opacity 0.2s ease;
174
+ }
175
+
176
+ .avatar-btn:hover .avatar-img {
177
+ opacity: 0.9;
178
+ }
179
+
180
+ .dropdown-menu {
181
+ position: absolute;
182
+ top: calc(100% + 8px);
183
+ right: 0;
184
+ width: 240px;
185
+ background: white;
186
+ border-radius: 12px;
187
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
188
+ opacity: 0;
189
+ visibility: hidden;
190
+ transform: translateY(-8px) scale(0.96);
191
+ transform-origin: top right;
192
+ transition: all 0.2s cubic-bezier(0.16, 1, 0.3, 1);
193
+ z-index: 1000;
194
+ border: 1px solid var(--border);
195
+ }
196
+
197
+ .dropdown-menu.show {
198
+ opacity: 1;
199
+ visibility: visible;
200
+ transform: translateY(0) scale(1);
201
+ }
202
+
203
+ .dropdown-header {
204
+ padding: 16px;
205
+ border-bottom: 1px solid var(--border);
206
+ }
207
+
208
+ .user-info {
209
+ display: flex;
210
+ align-items: center;
211
+ gap: 12px;
212
+ }
213
+
214
+ .user-avatar {
215
+ width: 36px;
216
+ height: 36px;
217
+ border-radius: 50%;
218
+ background: var(--light);
219
+ padding: 3px;
220
+ opacity: 0.8;
221
+ }
222
+
223
+ .user-details {
224
+ flex: 1;
225
+ min-width: 0;
226
+ padding: 2px 0;
227
+ }
228
+
229
+ .user-name {
230
+ font-size: 15px;
231
+ font-weight: 500;
232
+ color: var(--dark);
233
+ margin-bottom: 2px;
234
+ }
235
+
236
+ .user-role {
237
+ font-size: 13px;
238
+ color: var(--gray);
239
+ }
240
+
241
+ .dropdown-divider {
242
+ height: 1px;
243
+ background: var(--border);
244
+ margin: 8px 0;
245
+ }
246
+
247
+ .dropdown-item {
248
+ display: flex;
249
+ align-items: center;
250
+ gap: 10px;
251
+ width: 100%;
252
+ padding: 12px 16px;
253
+ border: none;
254
+ background: none;
255
+ font-size: 14px;
256
+ color: var(--dark);
257
+ cursor: pointer;
258
+ transition: all 0.2s ease;
259
+ }
260
+
261
+ .dropdown-item:last-child {
262
+ border-radius: 0 0 12px 12px;
263
+ }
264
+
265
+ .dropdown-item:hover {
266
+ background: rgba(0, 0, 0, 0.04);
267
+ }
268
+
269
+ .dropdown-item .dropdown-icon {
270
+ width: 18px;
271
+ height: 18px;
272
+ color: var(--gray);
273
+ }
274
+
275
+ .dropdown-item:hover .dropdown-icon {
276
+ color: var(--primary);
277
+ }
278
+
279
+ .btn {
280
+ padding: 8px 16px;
281
+ border-radius: 6px;
282
+ font-size: 14px;
283
+ font-weight: 500;
284
+ cursor: pointer;
285
+ transition: all 0.2s;
286
+ border: none;
287
+ display: flex;
288
+ align-items: center;
289
+ gap: 6px;
290
+ }
291
+
292
+ .btn-primary {
293
+ background: var(--primary);
294
+ color: white;
295
+ }
296
+
297
+ .btn-primary:hover {
298
+ background: var(--primary-dark);
299
+ }
300
+
301
+ .btn-success {
302
+ background: var(--success);
303
+ color: white;
304
+ }
305
+
306
+ .btn-outline {
307
+ background: transparent;
308
+ border: 1px solid var(--border);
309
+ color: var(--dark);
310
+ }
311
+
312
+ .btn-outline:hover {
313
+ background: var(--light);
314
+ }
315
+
316
+ .btn-light {
317
+ background: white;
318
+ border: 1px solid var(--border);
319
+ color: var(--dark);
320
+ }
321
+
322
+ .btn-light:hover {
323
+ background: var(--light);
324
+ }
325
+
326
+ .btn-dark {
327
+ background: var(--dark);
328
+ color: white;
329
+ }
330
+
331
+ .btn-dark:hover {
332
+ background: #000;
333
+ }
334
+
335
+ .btn-danger {
336
+ background: var(--danger);
337
+ color: white;
338
+ }
339
+
340
+ .btn-danger:hover {
341
+ background: #b71f31;
342
+ }
343
+
344
+ .btn-sm {
345
+ padding: 6px 12px;
346
+ font-size: 13px;
347
+ }
348
+
349
+ #addArgumentBtn {
350
+ padding: 6px 12px;
351
+ font-size: 12px;
352
+ }
353
+
354
+ button#saveBtn{
355
+ padding: 8px 16px;
356
+ font-size: 14px;
357
+ }
358
+
359
+ .btn.loading {
360
+ opacity: 0.6;
361
+ pointer-events: none;
362
+ }
363
+
364
+ .btn-icon {
365
+ padding: 6px;
366
+ width: 32px;
367
+ height: 32px;
368
+ display: flex;
369
+ align-items: center;
370
+ justify-content: center;
371
+ }
372
+
373
+ main {
374
+ display: flex;
375
+ flex: 1;
376
+ overflow: hidden;
377
+ height: calc(100vh - 57px); /* 减去header高度 */
378
+ }
379
+
380
+ /* 一级导航样式 */
381
+ .primary-nav {
382
+ width: 58px;
383
+ background: #fafafa;
384
+ border-right: 1px solid var(--border);
385
+ display: flex;
386
+ flex-direction: column;
387
+ padding: 12px 0;
388
+ flex-shrink: 0;
389
+ height: 100%;
390
+ overflow-y: auto;
391
+ }
392
+
393
+ .primary-nav-items {
394
+ display: flex;
395
+ flex-direction: column;
396
+ gap: 8px;
397
+ padding: 0 8px;
398
+ }
399
+
400
+ .primary-nav-item {
401
+ display: flex;
402
+ flex-direction: column;
403
+ align-items: center;
404
+ justify-content: center;
405
+ gap: 4px;
406
+ padding: 12px 8px;
407
+ border: none;
408
+ background: transparent;
409
+ border-radius: 10px;
410
+ cursor: pointer;
411
+ transition: all 0.2s ease;
412
+ color: var(--gray);
413
+ position: relative;
414
+ }
415
+
416
+ .primary-nav-item svg {
417
+ width: 14px;
418
+ height: 14px;
419
+ stroke-width: 2;
420
+ transition: all 0.2s ease;
421
+ /* transform: rotate(90deg); */
422
+ }
423
+
424
+ .primary-nav-item span {
425
+ font-size: 11px;
426
+ font-weight: 700;
427
+ letter-spacing: 1px;
428
+ writing-mode: vertical-lr;
429
+ text-transform: uppercase;
430
+ opacity: 0.85;
431
+ }
432
+
433
+ .primary-nav-item:hover {
434
+ background: rgba(0, 0, 0, 0.04);
435
+ color: var(--primary);
436
+ }
437
+
438
+ .primary-nav-item.active {
439
+ background: white;
440
+ color: var(--primary);
441
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
442
+ }
443
+
444
+ .primary-nav-item.active::before {
445
+ content: '';
446
+ position: absolute;
447
+ left: 0;
448
+ top: 50%;
449
+ transform: translateY(-50%);
450
+ width: 3px;
451
+ height: 60%;
452
+ background: var(--primary);
453
+ border-radius: 0 3px 3px 0;
454
+ }
455
+
456
+ aside {
457
+ width: 280px;
458
+ background: var(--sidebar-bg);
459
+ border-right: 1px solid var(--border);
460
+ padding: 0;
461
+ display: flex;
462
+ flex-direction: column;
463
+ height: 100%;
464
+ overflow-y: auto;
465
+ flex-shrink: 0;
466
+ }
467
+
468
+ .sidebar-header {
469
+ padding: 15px;
470
+ display: flex;
471
+ flex-direction: column;
472
+ gap: 12px;
473
+ background: white;
474
+ border-bottom: 1px solid var(--border);
475
+ }
476
+
477
+ .new-prompt-btn {
478
+ background: var(--primary);
479
+ color: white;
480
+ border: none;
481
+ border-radius: 10px;
482
+ padding: 12px 16px;
483
+ font-size: 15px;
484
+ font-weight: 500;
485
+ cursor: pointer;
486
+ display: flex;
487
+ align-items: center;
488
+ justify-content: center;
489
+ gap: 8px;
490
+ width: 100%;
491
+ transition: all 0.2s ease;
492
+ box-shadow: 0 1px 2px rgba(0,0,0,0.05);
493
+ }
494
+
495
+ .new-prompt-btn:hover {
496
+ background: #333;
497
+ transform: translateY(-1px);
498
+ box-shadow: 0 4px 12px rgba(0,0,0,0.1);
499
+ }
500
+
501
+ .blank-area-new-prompt-btn {
502
+ font-weight: 500;
503
+ background: none;
504
+ border: none;
505
+ color: inherit;
506
+ text-decoration: none;
507
+ cursor: pointer;
508
+ padding: 0;
509
+ display: inline;
510
+ font-size: inherit;
511
+ transition: color 0.2s ease;
512
+ }
513
+
514
+ .blank-area-new-prompt-btn:hover {
515
+ color: var(--primary);
516
+ text-decoration: none;
517
+ }
518
+
519
+ .search-container {
520
+ display: flex;
521
+ gap: 10px;
522
+ margin-top: 2px;
523
+ }
524
+
525
+ .search-box {
526
+ position: relative;
527
+ flex: 1;
528
+ }
529
+
530
+ .search-box input {
531
+ width: 100%;
532
+ padding: 9px 32px 9px 38px;
533
+ border: 1px solid var(--border);
534
+ border-radius: 8px;
535
+ font-size: 14px;
536
+ transition: all 0.2s ease;
537
+ background: white;
538
+ }
539
+
540
+ .search-box input:focus {
541
+ outline: none;
542
+ border-color: var(--primary);
543
+ box-shadow: 0 0 0 3px rgba(57,57,57,0.1);
544
+ }
545
+
546
+ .search-box::before {
547
+ content: '';
548
+ position: absolute;
549
+ left: 12px;
550
+ top: 50%;
551
+ transform: translateY(-50%);
552
+ width: 16px;
553
+ height: 16px;
554
+ background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'/%3E%3C/svg%3E") no-repeat center;
555
+ background-size: contain;
556
+ opacity: 0.6;
557
+ }
558
+
559
+ .search-box .clear-btn {
560
+ position: absolute;
561
+ right: 8px;
562
+ top: 50%;
563
+ transform: translateY(-50%);
564
+ width: 20px;
565
+ height: 20px;
566
+ border: none;
567
+ background: transparent;
568
+ cursor: pointer;
569
+ padding: 0;
570
+ display: none;
571
+ align-items: center;
572
+ justify-content: center;
573
+ color: var(--gray);
574
+ opacity: 0.6;
575
+ transition: opacity 0.2s ease;
576
+ }
577
+
578
+ .search-box .clear-btn::before {
579
+ content: '';
580
+ width: 16px;
581
+ height: 16px;
582
+ background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='15' y1='9' x2='9' y2='15'/%3E%3Cline x1='9' y1='9' x2='15' y2='15'/%3E%3C/svg%3E") no-repeat center;
583
+ background-size: contain;
584
+ }
585
+
586
+ .search-box .clear-btn:hover {
587
+ opacity: 1;
588
+ }
589
+
590
+ .search-box input:not(:placeholder-shown) + .clear-btn {
591
+ display: flex;
592
+ }
593
+
594
+ .folder-btn {
595
+ background: white;
596
+ border: 1px solid var(--border);
597
+ border-radius: 8px;
598
+ width: 38px;
599
+ height: 38px;
600
+ cursor: pointer;
601
+ display: flex;
602
+ align-items: center;
603
+ justify-content: center;
604
+ transition: all 0.2s ease;
605
+ flex-shrink: 0;
606
+ }
607
+
608
+ .folder-btn::before {
609
+ content: '';
610
+ width: 18px;
611
+ height: 18px;
612
+ background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z'/%3E%3Cline x1='12' y1='11' x2='12' y2='17'/%3E%3Cline x1='9' y1='14' x2='15' y2='14'/%3E%3C/svg%3E") no-repeat center;
613
+ background-size: contain;
614
+ opacity: 0.6;
615
+ transition: opacity 0.2s ease;
616
+ }
617
+
618
+ .skills-layout .folder-btn::before {
619
+ background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3Cpolyline points='17 8 12 3 7 8'/%3E%3Cline x1='12' y1='3' x2='12' y2='15'/%3E%3C/svg%3E") no-repeat center;
620
+ }
621
+
622
+ .folder-btn:hover {
623
+ background: #f8f9fa;
624
+ border-color: var(--primary);
625
+ transform: translateY(-1px);
626
+ box-shadow: 0 2px 8px rgba(0,0,0,0.08);
627
+ }
628
+
629
+ .folder-btn:hover::before {
630
+ opacity: 1;
631
+ }
632
+
633
+ .toast-container {
634
+ position: fixed;
635
+ bottom: 24px;
636
+ right: 24px;
637
+ display: flex;
638
+ flex-direction: column-reverse;
639
+ gap: 12px;
640
+ z-index: 5000;
641
+ align-items: flex-end;
642
+ }
643
+
644
+ .toast {
645
+ min-width: 280px;
646
+ max-width: 360px;
647
+ background: rgba(255, 255, 255, 0.96);
648
+ border-radius: 12px;
649
+ padding: 16px 18px;
650
+ display: flex;
651
+ align-items: flex-start;
652
+ gap: 14px;
653
+ box-shadow: 0 20px 45px rgba(0, 0, 0, 0.18);
654
+ border: 1px solid transparent;
655
+ opacity: 0;
656
+ transform: translateY(16px);
657
+ animation: toast-enter 0.35s cubic-bezier(0.16, 1, 0.3, 1) forwards;
658
+ pointer-events: auto;
659
+ }
660
+
661
+ .toast.toast-leave {
662
+ animation: toast-leave 0.25s ease forwards;
663
+ }
664
+
665
+ .toast-success {
666
+ border-color: rgba(40,167,69,0.35);
667
+ background: linear-gradient(145deg, rgba(40,167,69,0.08), rgba(40,167,69,0.02));
668
+ }
669
+
670
+ .toast-error {
671
+ border-color: rgba(220,53,69,0.35);
672
+ background: linear-gradient(145deg, rgba(220,53,69,0.08), rgba(220,53,69,0.02));
673
+ }
674
+
675
+ .toast-info {
676
+ border-color: rgba(0,102,255,0.3);
677
+ background: linear-gradient(145deg, rgba(0,102,255,0.08), rgba(0,102,255,0.02));
678
+ }
679
+
680
+ .toast-warning {
681
+ border-color: rgba(255,193,7,0.35);
682
+ background: linear-gradient(145deg, rgba(255,193,7,0.1), rgba(255,193,7,0.03));
683
+ }
684
+
685
+ .toast-icon {
686
+ width: 36px;
687
+ height: 36px;
688
+ border-radius: 50%;
689
+ display: flex;
690
+ align-items: center;
691
+ justify-content: center;
692
+ font-size: 18px;
693
+ font-weight: 600;
694
+ flex-shrink: 0;
695
+ background: rgba(0,0,0,0.05);
696
+ color: var(--dark);
697
+ }
698
+
699
+ .toast-success .toast-icon {
700
+ background: rgba(40,167,69,0.15);
701
+ color: var(--success);
702
+ }
703
+
704
+ .toast-error .toast-icon {
705
+ background: rgba(220,53,69,0.15);
706
+ color: var(--danger);
707
+ }
708
+
709
+ .toast-info .toast-icon {
710
+ background: rgba(0,102,255,0.15);
711
+ color: var(--primary);
712
+ }
713
+
714
+ .toast-warning .toast-icon {
715
+ background: rgba(255,193,7,0.2);
716
+ color: #b58100;
717
+ }
718
+
719
+ .toast-content {
720
+ flex: 1;
721
+ display: flex;
722
+ flex-direction: column;
723
+ gap: 4px;
724
+ }
725
+
726
+ .toast-title {
727
+ font-size: 15px;
728
+ font-weight: 600;
729
+ color: var(--dark);
730
+ }
731
+
732
+ .toast-message {
733
+ font-size: 13px;
734
+ color: var(--gray);
735
+ line-height: 1.5;
736
+ white-space: pre-line;
737
+ }
738
+
739
+ .toast-close {
740
+ border: none;
741
+ background: transparent;
742
+ color: var(--gray);
743
+ font-size: 18px;
744
+ cursor: pointer;
745
+ padding: 2px;
746
+ line-height: 1;
747
+ margin-left: 8px;
748
+ flex-shrink: 0;
749
+ }
750
+
751
+ .toast-close:hover {
752
+ color: var(--dark);
753
+ }
754
+
755
+ @keyframes toast-enter {
756
+ to {
757
+ opacity: 1;
758
+ transform: translateY(0);
759
+ }
760
+ }
761
+
762
+ @keyframes toast-leave {
763
+ to {
764
+ opacity: 0;
765
+ transform: translateY(12px);
766
+ }
767
+ }
768
+
769
+ .variable-desc {
770
+ font-size: 12px;
771
+ color: var(--gray);
772
+ margin-top: 2px;
773
+ }
774
+
775
+ .group-section {
776
+ margin-bottom: 8px;
777
+ }
778
+
779
+ .group-header {
780
+ padding: 12px 15px;
781
+ font-size: 14px;
782
+ font-weight: 500;
783
+ color: var(--dark);
784
+ display: flex;
785
+ align-items: center;
786
+ justify-content: space-between;
787
+ cursor: pointer;
788
+ border-bottom: 1px solid var(--border);
789
+ }
790
+
791
+ .group-section.disabled {
792
+ position: relative;
793
+ }
794
+
795
+ .group-section.disabled .group-header {
796
+ position: relative;
797
+ color: #858a91;
798
+ background: rgba(0,0,0,0.02);
799
+ box-shadow: inset 0 -1px 0 rgba(0,0,0,0.06);
800
+ }
801
+
802
+ .group-section.disabled .group-header::before {
803
+ content: '';
804
+ position: absolute;
805
+ top: 8px;
806
+ left: 9px;
807
+ width: 40px;
808
+ height: 40px;
809
+ background: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc1NicgaGVpZ2h0PSc1Nic+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSdnJyB4MT0nMCcgeTE9JzAnIHgyPScxJyB5Mj0nMSc+PHN0b3Agb2Zmc2V0PScwJyBzdG9wLWNvbG9yPScjZDVkOWRlJy8+PHN0b3Agb2Zmc2V0PScxJyBzdG9wLWNvbG9yPScjYWViNGJjJy8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBvbHlnb24gcG9pbnRzPScwLDAgMCw1NiA1NiwwJyBmaWxsPSd1cmwoI2cpJy8+PHRleHQgeD0nNicgeT0nMjQnIGZvbnQtZmFtaWx5PSdJbnRlcixzeXN0ZW0tdWksU2Vnb2UgVUksSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWYnIGZvbnQtc2l6ZT0nMTInIGZpbGw9JyM3ZTdmODInIHRyYW5zZm9ybT0ncm90YXRlKC00NSAxOCAyMCknIGZvbnQtd2VpZ2h0PSc2MDAnPuWGu+e7kzwvdGV4dD48L3N2Zz4=") no-repeat;
810
+ background-size: contain;
811
+ pointer-events: none;
812
+ transform: translate(-8px, -8px);
813
+ }
814
+
815
+ .group-section.disabled .group-header:hover {
816
+ background: rgba(0,0,0,0.04);
817
+ }
818
+
819
+ .group-header:hover {
820
+ background: #f0f0f0;
821
+ }
822
+
823
+ .group-content {
824
+ overflow: hidden;
825
+ transition: max-height 0.3s ease-out;
826
+ }
827
+
828
+ .group-content.collapsed {
829
+ max-height: 0;
830
+ }
831
+
832
+ .group-content.expanded {
833
+ max-height: 2400px;
834
+ overflow: visible;
835
+ }
836
+
837
+ .group-children {
838
+ display: flex;
839
+ flex-direction: column;
840
+ margin-top: 4px;
841
+ }
842
+
843
+ .group-count {
844
+ background: #9ea2a6;
845
+ color: white;
846
+ font-size: 11px;
847
+ padding: 2px 6px;
848
+ border-radius: 10px;
849
+ }
850
+
851
+ .group-section.disabled .group-count {
852
+ background: rgba(0,0,0,0.35);
853
+ }
854
+
855
+ .prompt-list {
856
+ padding: 10px 8px;
857
+ }
858
+
859
+ .prompt-item {
860
+ padding: 12px;
861
+ padding-right: 18px; /* 为操作按钮预留空间 */
862
+ margin-bottom: 8px;
863
+ border-radius: 8px;
864
+ cursor: pointer;
865
+ position: relative;
866
+ background: #f5f5f5;
867
+ border: 1px solid transparent;
868
+ transition: all 0.2s;
869
+ margin-right: 10px;
870
+ overflow: hidden;
871
+ }
872
+
873
+ .prompt-info {
874
+ display: flex;
875
+ flex-direction: column;
876
+ justify-content: center;
877
+ width: 100%;
878
+ min-width: 0;
879
+ padding-right: 10px; /* 为 prompt-meta 预留空间 */
880
+ }
881
+
882
+ .prompt-name {
883
+ font-weight: 500;
884
+ margin-bottom: 4px;
885
+ white-space: nowrap;
886
+ overflow: hidden;
887
+ text-overflow: ellipsis;
888
+ }
889
+
890
+ .prompt-meta {
891
+ position: absolute;
892
+ right: 0;
893
+ top: 0;
894
+ bottom: 0;
895
+ width: 50px;
896
+ display: flex;
897
+ align-items: center;
898
+ justify-content: center;
899
+ pointer-events: none;
900
+ }
901
+
902
+ .prompt-item:hover {
903
+ background: #eeeeee;
904
+ border-color: var(--primary);
905
+ box-shadow: 0 2px 8px rgba(0,102,255,0.1);
906
+ }
907
+
908
+ .prompt-item.active {
909
+ background: rgba(0,102,255,0.05);
910
+ border-color: var(--primary);
911
+ }
912
+
913
+ .prompt-desc {
914
+ font-size: 12px;
915
+ color: var(--gray);
916
+ line-height: 1.3;
917
+ height: 16px;
918
+ overflow: hidden;
919
+ position: relative;
920
+ text-overflow: ellipsis;
921
+ white-space: nowrap;
922
+ cursor: pointer;
923
+ }
924
+
925
+ .prompt-meta-hint {
926
+ font-size: 11px;
927
+ color: var(--gray);
928
+ margin-top: 4px;
929
+ text-transform: none;
930
+ }
931
+
932
+ /* Tooltip样式 */
933
+ .tooltip {
934
+ position: relative;
935
+ }
936
+
937
+ .tooltip::after {
938
+ content: attr(title);
939
+ position: absolute;
940
+ bottom: 100%;
941
+ left: 50%;
942
+ transform: translateX(-50%);
943
+ background: rgba(0, 0, 0, 0.8);
944
+ color: white;
945
+ padding: 8px 12px;
946
+ border-radius: 4px;
947
+ font-size: 12px;
948
+ white-space: pre-wrap;
949
+ word-wrap: break-word;
950
+ max-width: 300px;
951
+ z-index: 1000;
952
+ opacity: 0;
953
+ visibility: hidden;
954
+ transition: opacity 0.2s, visibility 0.2s;
955
+ pointer-events: none;
956
+ }
957
+
958
+ .tooltip:hover::after {
959
+ opacity: 1;
960
+ visibility: visible;
961
+ }
962
+
963
+ /* 启用状态边框样式 */
964
+ .prompt-item.enabled {
965
+ /* border-left: 4px solid #b8b3b3; */ /* 浅30%的深灰色,原#333调浅30%约为#666 */
966
+ border-left: 4px solid var(--primary);
967
+ }
968
+
969
+ /* 操作按钮样式 */
970
+ .prompt-actions {
971
+ display: flex;
972
+ flex-direction: column;
973
+ justify-content: center;
974
+ gap: 8px;
975
+ position: absolute;
976
+ right: 0;
977
+ top: 0;
978
+ bottom: 0;
979
+ width: 70px;
980
+ opacity: 0;
981
+ visibility: hidden;
982
+ padding: 8px;
983
+ transform: translateX(100%);
984
+ transition: all 0.25s ease;
985
+ background: linear-gradient(to left,
986
+ rgba(238, 238, 238, 0.95) 0%,
987
+ rgba(238, 238, 238, 0.9) 30%,
988
+ rgba(238, 238, 238, 0.6) 60%,
989
+ rgba(238, 238, 238, 0) 100%);
990
+ z-index: 1;
991
+ pointer-events: auto;
992
+ }
993
+
994
+ .prompt-item:hover .prompt-actions {
995
+ opacity: 1;
996
+ visibility: visible;
997
+ transform: translateX(0);
998
+ }
999
+
1000
+ .action-btn {
1001
+ background: rgba(255, 255, 255, 0.8);
1002
+ border: 1px solid var(--border);
1003
+ border-radius: 4px;
1004
+ padding: 4px;
1005
+ margin: -3px;
1006
+ font-size: 11px;
1007
+ cursor: pointer;
1008
+ white-space: nowrap;
1009
+ text-align: center;
1010
+ transition: all 0.2s ease;
1011
+ backdrop-filter: blur(2px);
1012
+ width: 100%;
1013
+ }
1014
+
1015
+ .action-btn:hover {
1016
+ background: rgba(255, 255, 255, 0.95);
1017
+ transform: translateX(-2px);
1018
+ box-shadow: 0 1px 23px rgba(0,0,0,0.1);
1019
+ }
1020
+
1021
+ /* 美化目录三角图标 */
1022
+ .group-toggle {
1023
+ position: relative;
1024
+ width: 20px;
1025
+ height: 20px;
1026
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1027
+ }
1028
+
1029
+ .group-toggle::before {
1030
+ content: '';
1031
+ position: absolute;
1032
+ width: 16px;
1033
+ height: 16px;
1034
+ top: 50%;
1035
+ left: 50%;
1036
+ transform: translate(-50%, -50%);
1037
+ background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat center;
1038
+ background-size: contain;
1039
+ opacity: 0.6;
1040
+ transition: opacity 0.2s ease;
1041
+ }
1042
+
1043
+ .group-toggle.collapsed {
1044
+ transform: rotate(-90deg);
1045
+ }
1046
+
1047
+ .group-header:hover .group-toggle::before {
1048
+ opacity: 1;
1049
+ }
1050
+
1051
+ .prompt-meta {
1052
+ display: flex;
1053
+ align-items: center;
1054
+ gap: 6px;
1055
+ }
1056
+
1057
+ .prompt-tag {
1058
+ background: rgba(0,102,255,0.1);
1059
+ color: var(--primary);
1060
+ font-size: 11px;
1061
+ padding: 2px 6px;
1062
+ border-radius: 4px;
1063
+ font-weight: 500;
1064
+ }
1065
+
1066
+ .prompt-status {
1067
+ width: 8px;
1068
+ height: 8px;
1069
+ border-radius: 50%;
1070
+ }
1071
+
1072
+ .prompt-status.enabled {
1073
+ background: var(--success);
1074
+ }
1075
+
1076
+ .prompt-status.disabled {
1077
+ background: var(--gray-light);
1078
+ }
1079
+
1080
+ .prompt-list-empty {
1081
+ padding: 16px 14px;
1082
+ border: 1px dashed rgba(0,0,0,0.12);
1083
+ border-radius: 10px;
1084
+ color: var(--gray);
1085
+ font-size: 13px;
1086
+ line-height: 1.6;
1087
+ background: rgba(0,0,0,0.02);
1088
+ text-align: left;
1089
+ }
1090
+
1091
+ .prompt-list-empty span {
1092
+ display: block;
1093
+ color: var(--dark);
1094
+ font-weight: 550;
1095
+ margin-bottom: 4px;
1096
+ }
1097
+
1098
+ .group-modal-content {
1099
+ min-width: 460px;
1100
+ }
1101
+
1102
+ .group-modal-tabs {
1103
+ display: flex;
1104
+ gap: 8px;
1105
+ padding: 4px;
1106
+ background: rgba(0,0,0,0.03);
1107
+ border-radius: 10px;
1108
+ margin-bottom: 16px;
1109
+ }
1110
+
1111
+ .group-modal-tab {
1112
+ flex: 1;
1113
+ border: none;
1114
+ background: transparent;
1115
+ border-radius: 8px;
1116
+ padding: 10px 12px;
1117
+ font-size: 14px;
1118
+ font-weight: 500;
1119
+ color: var(--gray);
1120
+ cursor: pointer;
1121
+ transition: all 0.2s ease;
1122
+ }
1123
+
1124
+ .group-modal-tab:hover {
1125
+ color: var(--primary);
1126
+ }
1127
+
1128
+ .group-modal-tab.active {
1129
+ background: white;
1130
+ box-shadow: 0 8px 24px rgba(15, 23, 42, 0.12);
1131
+ color: var(--primary);
1132
+ font-weight: 580;
1133
+ }
1134
+
1135
+ .group-modal-panel {
1136
+ display: flex;
1137
+ flex-direction: column;
1138
+ gap: 12px;
1139
+ }
1140
+
1141
+ .group-modal-panel.hidden {
1142
+ display: none;
1143
+ }
1144
+
1145
+ .group-modal-hint {
1146
+ font-size: 12px;
1147
+ color: var(--gray);
1148
+ margin-top: 6px;
1149
+ }
1150
+
1151
+ .group-modal-footer {
1152
+ display: flex;
1153
+ gap: 12px;
1154
+ width: 100%;
1155
+ justify-content: flex-end;
1156
+ }
1157
+
1158
+ .group-modal-footer.hidden {
1159
+ display: none;
1160
+ }
1161
+
1162
+ .group-manage-toolbar {
1163
+ display: flex;
1164
+ align-items: center;
1165
+ gap: 10px;
1166
+ }
1167
+
1168
+ .group-manage-toolbar input {
1169
+ flex: 1;
1170
+ padding: 8px 12px;
1171
+ border: 1px solid var(--border);
1172
+ border-radius: 8px;
1173
+ font-size: 14px;
1174
+ transition: all 0.2s ease;
1175
+ }
1176
+
1177
+ .group-manage-toolbar input:focus {
1178
+ outline: none;
1179
+ border-color: var(--primary);
1180
+ box-shadow: 0 0 0 3px rgba(57,57,57,0.08);
1181
+ }
1182
+
1183
+ .group-manage-list {
1184
+ display: flex;
1185
+ flex-direction: column;
1186
+ gap: 10px;
1187
+ max-height: 300px;
1188
+ overflow-y: auto;
1189
+ padding-right: 4px;
1190
+ }
1191
+
1192
+ .group-manage-empty {
1193
+ padding: 18px 12px;
1194
+ text-align: center;
1195
+ color: var(--gray);
1196
+ font-size: 13px;
1197
+ border-radius: 10px;
1198
+ background: rgba(0,0,0,0.04);
1199
+ }
1200
+
1201
+ .group-manage-empty.hidden {
1202
+ display: none;
1203
+ }
1204
+
1205
+ .group-manage-item {
1206
+ --depth: 0;
1207
+ display: flex;
1208
+ align-items: flex-start;
1209
+ justify-content: space-between;
1210
+ gap: 12px;
1211
+ padding: 12px 14px;
1212
+ border: 1px solid rgba(0,0,0,0.08);
1213
+ border-radius: 12px;
1214
+ background: white;
1215
+ transition: all 0.2s ease;
1216
+ }
1217
+
1218
+ .group-manage-item:hover {
1219
+ border-color: rgba(0,0,0,0.15);
1220
+ box-shadow: 0 12px 30px rgba(15,23,42,0.12);
1221
+ }
1222
+
1223
+ .group-manage-item.is-disabled {
1224
+ opacity: 0.85;
1225
+ }
1226
+
1227
+ .group-manage-info {
1228
+ flex: 1;
1229
+ min-width: 0;
1230
+ }
1231
+
1232
+ .group-manage-name {
1233
+ display: flex;
1234
+ align-items: center;
1235
+ gap: 8px;
1236
+ font-size: 14px;
1237
+ font-weight: 560;
1238
+ color: var(--dark);
1239
+ padding-left: calc(var(--depth) * 16px);
1240
+ }
1241
+
1242
+ .group-manage-edit {
1243
+ display: flex;
1244
+ align-items: center;
1245
+ gap: 8px;
1246
+ padding-left: calc(var(--depth) * 16px);
1247
+ }
1248
+
1249
+ .group-manage-path {
1250
+ font-size: 12px;
1251
+ color: var(--gray);
1252
+ margin-top: 4px;
1253
+ word-break: break-all;
1254
+ }
1255
+
1256
+ .group-status-badge {
1257
+ font-size: 11px;
1258
+ padding: 2px 6px;
1259
+ border-radius: 999px;
1260
+ background: rgba(0,0,0,0.06);
1261
+ color: var(--gray);
1262
+ font-weight: 500;
1263
+ margin-left: 6px;
1264
+ }
1265
+
1266
+ .group-status-badge.enabled {
1267
+ background: rgba(40,167,69,0.12);
1268
+ color: var(--success);
1269
+ }
1270
+
1271
+ .group-status-badge.disabled {
1272
+ background: rgba(220,53,69,0.15);
1273
+ color: var(--danger);
1274
+ }
1275
+
1276
+ .group-status-badge.default {
1277
+ background: rgba(0,0,0,0.08);
1278
+ color: var(--dark);
1279
+ }
1280
+
1281
+ .group-manage-actions {
1282
+ display: flex;
1283
+ align-items: center;
1284
+ gap: 8px;
1285
+ }
1286
+
1287
+ .group-manage-action-btn {
1288
+ border: none;
1289
+ background: transparent;
1290
+ padding: 6px 8px;
1291
+ border-radius: 6px;
1292
+ font-size: 13px;
1293
+ color: var(--primary);
1294
+ cursor: pointer;
1295
+ transition: all 0.2s ease;
1296
+ }
1297
+
1298
+ .group-manage-action-btn:hover {
1299
+ background: rgba(0,0,0,0.05);
1300
+ }
1301
+
1302
+ .group-manage-action-btn.danger {
1303
+ color: var(--danger);
1304
+ }
1305
+
1306
+ .group-manage-action-btn[disabled] {
1307
+ cursor: not-allowed;
1308
+ opacity: 0.6;
1309
+ }
1310
+
1311
+ .group-manage-rename-input {
1312
+ width: 100%;
1313
+ padding: 8px 10px;
1314
+ border: 1px solid var(--border);
1315
+ border-radius: 8px;
1316
+ font-size: 14px;
1317
+ transition: all 0.2s ease;
1318
+ }
1319
+
1320
+ .group-manage-rename-input:focus {
1321
+ outline: none;
1322
+ border-color: var(--primary);
1323
+ box-shadow: 0 0 0 3px rgba(57,57,57,0.08);
1324
+ }
1325
+
1326
+ .editor-container {
1327
+ flex: 1;
1328
+ display: flex;
1329
+ flex-direction: column;
1330
+ background: #f5f5f5;
1331
+ border-left: 1px solid var(--border);
1332
+ padding: 16px 16px 0 16px;
1333
+ overflow-y: auto;
1334
+ min-width: 0;
1335
+ }
1336
+
1337
+ .editor-header {
1338
+ padding: 8px 0 8px;
1339
+ display: flex;
1340
+ flex-direction: column;
1341
+ gap: 12px;
1342
+ background: white;
1343
+ flex-shrink: 0;
1344
+ }
1345
+
1346
+ .editor-header-top {
1347
+ display: flex;
1348
+ gap: 8px;
1349
+ align-items: center;
1350
+ width: 100%;
1351
+ }
1352
+
1353
+ .editor-header-top input,
1354
+ .prompt-description {
1355
+ padding: 8px 12px;
1356
+ border: 1px solid var(--border);
1357
+ border-radius: 6px;
1358
+ font-size: 14px;
1359
+ background: white;
1360
+ }
1361
+
1362
+ .editor-header-top input {
1363
+ flex: 1;
1364
+ min-width: 0;
1365
+ }
1366
+
1367
+ .editor-header-top input:focus,
1368
+ .prompt-description:focus {
1369
+ outline: none;
1370
+ border-color: var(--primary);
1371
+ }
1372
+
1373
+ .group-selector {
1374
+ position: relative;
1375
+ flex-shrink: 0;
1376
+ }
1377
+
1378
+ .group-selector-btn {
1379
+ display: flex;
1380
+ align-items: center;
1381
+ gap: 8px;
1382
+ min-width: 160px;
1383
+ padding: 8px 12px;
1384
+ border: 1px solid var(--border);
1385
+ border-radius: 6px;
1386
+ background: white;
1387
+ font-size: 14px;
1388
+ color: var(--dark);
1389
+ cursor: pointer;
1390
+ transition: all 0.2s ease;
1391
+ }
1392
+
1393
+ .group-selector-btn:hover {
1394
+ border-color: var(--primary);
1395
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
1396
+ transform: translateY(-1px);
1397
+ }
1398
+
1399
+ .group-selector-label {
1400
+ color: var(--gray);
1401
+ font-size: 12px;
1402
+ letter-spacing: 0;
1403
+ }
1404
+
1405
+ .group-selector-value {
1406
+ font-weight: 500;
1407
+ color: var(--primary);
1408
+ max-width: 160px;
1409
+ overflow: hidden;
1410
+ text-overflow: ellipsis;
1411
+ white-space: nowrap;
1412
+ }
1413
+
1414
+ .group-selector-icon {
1415
+ margin-left: auto;
1416
+ display: flex;
1417
+ align-items: center;
1418
+ justify-content: center;
1419
+ color: var(--gray);
1420
+ }
1421
+
1422
+ .group-selector-input {
1423
+ position: absolute;
1424
+ inset: 0;
1425
+ opacity: 0;
1426
+ pointer-events: none;
1427
+ }
1428
+
1429
+ .prompt-description {
1430
+ width: 100%;
1431
+ min-height: 38px;
1432
+ max-height: 200px;
1433
+ line-height: 1.5;
1434
+ resize: vertical;
1435
+ overflow-y: auto;
1436
+ transition: border-color 0.2s ease;
1437
+ }
1438
+
1439
+ .editor-controls {
1440
+ display: flex;
1441
+ align-items: center;
1442
+ gap: 16px;
1443
+ margin-left: auto;
1444
+ }
1445
+
1446
+ .mode-toggle {
1447
+ display: inline-flex;
1448
+ align-items: center;
1449
+ padding: 3px;
1450
+ border-radius: 999px;
1451
+ background: var(--light);
1452
+ border: 1px solid var(--border);
1453
+ }
1454
+
1455
+ .mode-btn {
1456
+ padding: 6px 18px;
1457
+ border: none;
1458
+ background: transparent;
1459
+ border-radius: 999px;
1460
+ font-size: 13px;
1461
+ font-weight: 500;
1462
+ cursor: pointer;
1463
+ color: var(--gray);
1464
+ transition: all 0.2s;
1465
+ }
1466
+
1467
+ .mode-btn.active {
1468
+ background: white;
1469
+ color: var(--primary);
1470
+ box-shadow: 0 1px 4px rgba(0,0,0,0.08);
1471
+ }
1472
+
1473
+ .editor-content {
1474
+ display: flex;
1475
+ flex-direction: column;
1476
+ gap: 16px;
1477
+ margin: 12px 0 0 0;
1478
+ min-height: 0;
1479
+ }
1480
+
1481
+ .arguments-section {
1482
+ padding: 10px 20px;
1483
+ background: white;
1484
+ border: 1px solid var(--border);
1485
+ border-radius: 12px;
1486
+ box-shadow: 0 8px 24px rgba(0,0,0,0.05);
1487
+ display: flex;
1488
+ flex-direction: column;
1489
+ gap: 16px;
1490
+ transition: all 0.3s ease;
1491
+ }
1492
+
1493
+ .arguments-section.collapsed {
1494
+ padding: 10px 20px 10px 20px;
1495
+ gap: 0;
1496
+ }
1497
+
1498
+ .arguments-section.collapsed .arguments-list {
1499
+ max-height: 0;
1500
+ overflow: hidden;
1501
+ opacity: 0;
1502
+ margin-top: 0;
1503
+ transition: all 0.3s ease;
1504
+ }
1505
+
1506
+ .arguments-section:not(.collapsed) .arguments-list {
1507
+ max-height: 2000px;
1508
+ opacity: 1;
1509
+ margin-top: 16px;
1510
+ transition: all 0.3s ease;
1511
+ }
1512
+
1513
+ .arguments-section.has-error {
1514
+ border-color: rgba(220,53,69,0.4);
1515
+ box-shadow: 0 0 0 2px rgba(220,53,69,0.08), 0 8px 24px rgba(220,53,69,0.08);
1516
+ }
1517
+
1518
+ .arguments-header {
1519
+ display: flex;
1520
+ align-items: center;
1521
+ justify-content: space-between;
1522
+ gap: 12px;
1523
+ flex-wrap: wrap;
1524
+ cursor: pointer;
1525
+ user-select: none;
1526
+ }
1527
+
1528
+ .arguments-header:hover .arguments-toggle {
1529
+ opacity: 1;
1530
+ }
1531
+
1532
+ .arguments-title {
1533
+ display: flex;
1534
+ align-items: center;
1535
+ gap: 8px;
1536
+ }
1537
+
1538
+ .arguments-toggle {
1539
+ width: 24px;
1540
+ height: 24px;
1541
+ display: flex;
1542
+ align-items: center;
1543
+ justify-content: center;
1544
+ border: none;
1545
+ background: transparent;
1546
+ color: var(--gray);
1547
+ cursor: pointer;
1548
+ border-radius: 4px;
1549
+ transition: all 0.3s ease;
1550
+ opacity: 0.6;
1551
+ padding: 0;
1552
+ }
1553
+
1554
+ .arguments-toggle:hover {
1555
+ background: rgba(0,0,0,0.05);
1556
+ opacity: 1;
1557
+ }
1558
+
1559
+ .arguments-section.collapsed .arguments-toggle {
1560
+ transform: rotate(-90deg);
1561
+ }
1562
+
1563
+ .arguments-title > span {
1564
+ font-size: 14px;
1565
+ font-weight: 600;
1566
+ color: var(--gray);
1567
+ }
1568
+
1569
+ .arguments-count {
1570
+ font-size: 12px;
1571
+ font-weight: 500;
1572
+ color: var(--gray);
1573
+ opacity: 0.7;
1574
+ }
1575
+
1576
+ .arguments-title small {
1577
+ font-size: 12px;
1578
+ color: var(--gray);
1579
+ }
1580
+
1581
+ .arguments-actions {
1582
+ display: flex;
1583
+ gap: 10px;
1584
+ align-items: center;
1585
+ }
1586
+
1587
+ .arguments-list {
1588
+ display: grid;
1589
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
1590
+ gap: 12px;
1591
+ }
1592
+
1593
+ .arguments-empty {
1594
+ grid-column: 1 / -1;
1595
+ font-size: 13px;
1596
+ color: var(--gray);
1597
+ background: var(--light);
1598
+ border: 1px dashed var(--border);
1599
+ border-radius: 8px;
1600
+ padding: 16px;
1601
+ text-align: center;
1602
+ }
1603
+
1604
+ .argument-card {
1605
+ border: 1px solid var(--border);
1606
+ border-radius: 12px;
1607
+ background: linear-gradient(180deg, rgba(248,249,250,0.9), rgba(255,255,255,0.9));
1608
+ padding: 16px;
1609
+ display: flex;
1610
+ flex-direction: column;
1611
+ gap: 12px;
1612
+ /* min-height: 150px; */
1613
+ position: relative;
1614
+ overflow: hidden;
1615
+ }
1616
+
1617
+ .argument-card.argument-card-unused {
1618
+ border-color: rgba(220,53,69,0.45);
1619
+ box-shadow: 0 0 0 1px rgba(220,53,69,0.18);
1620
+ background: rgba(220,53,69,0.04);
1621
+ }
1622
+
1623
+ .argument-card-header {
1624
+ display: flex;
1625
+ justify-content: space-between;
1626
+ align-items: flex-start;
1627
+ gap: 8px;
1628
+ }
1629
+
1630
+ .argument-name {
1631
+ font-size: 15px;
1632
+ font-weight: 600;
1633
+ color: var(--primary);
1634
+ word-break: break-all;
1635
+ }
1636
+
1637
+ .argument-badges {
1638
+ display: flex;
1639
+ flex-wrap: wrap;
1640
+ gap: 6px;
1641
+ }
1642
+
1643
+ .argument-badge {
1644
+ padding: 2px 8px;
1645
+ border-radius: 999px;
1646
+ font-size: 11px;
1647
+ background: rgba(0,0,0,0.04);
1648
+ color: var(--gray);
1649
+ }
1650
+
1651
+ .argument-required {
1652
+ background: rgba(220,53,69,0.12);
1653
+ color: var(--danger);
1654
+ font-weight: 600;
1655
+ }
1656
+
1657
+ .argument-body {
1658
+ display: flex;
1659
+ flex-direction: column;
1660
+ gap: 6px;
1661
+ color: var(--gray);
1662
+ font-size: 12px;
1663
+ /* margin-bottom: 24px; */
1664
+ }
1665
+
1666
+ .argument-body .argument-description {
1667
+ color: var(--dark);
1668
+ font-size: 13px;
1669
+ line-height: 1.5;
1670
+ display: -webkit-box;
1671
+ -webkit-line-clamp: 3;
1672
+ -webkit-box-orient: vertical;
1673
+ overflow: hidden;
1674
+ }
1675
+
1676
+ .argument-body .argument-placeholder {
1677
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
1678
+ background: rgba(0,0,0,0.04);
1679
+ padding: 2px 6px;
1680
+ border-radius: 4px;
1681
+ color: var(--primary);
1682
+ display: inline-block;
1683
+ }
1684
+
1685
+ .argument-actions {
1686
+ display: flex;
1687
+ justify-content: center;
1688
+ gap: 8px;
1689
+ opacity: 0;
1690
+ visibility: hidden;
1691
+ transition: all 0.25s ease;
1692
+ position: absolute;
1693
+ left: 0;
1694
+ right: 0;
1695
+ bottom: 0;
1696
+ padding: 12px;
1697
+ background: linear-gradient(to top,
1698
+ rgba(255, 255, 255, 0.95) 0%,
1699
+ rgba(255, 255, 255, 0.9) 50%,
1700
+ rgba(255, 255, 255, 0) 100%);
1701
+ transform: translateY(100%);
1702
+ }
1703
+
1704
+ .argument-card:hover .argument-actions {
1705
+ opacity: 1;
1706
+ visibility: visible;
1707
+ transform: translateY(0);
1708
+ }
1709
+
1710
+ .argument-action-btn {
1711
+ border: none;
1712
+ background: rgba(0,0,0,0.06);
1713
+ color: var(--primary);
1714
+ font-size: 12px;
1715
+ padding: 6px 12px;
1716
+ border-radius: 6px;
1717
+ cursor: pointer;
1718
+ transition: all 0.2s ease;
1719
+ backdrop-filter: blur(4px);
1720
+ }
1721
+
1722
+ .argument-action-btn:hover {
1723
+ background: rgba(0,0,0,0.1);
1724
+ transform: translateY(-1px);
1725
+ }
1726
+
1727
+ .argument-action-btn.delete {
1728
+ color: var(--danger);
1729
+ background: rgba(220,53,69,0.12);
1730
+ }
1731
+
1732
+ .argument-action-btn.delete:hover {
1733
+ background: rgba(220,53,69,0.18);
1734
+ }
1735
+
1736
+ .modal {
1737
+ position: fixed;
1738
+ inset: 0;
1739
+ background: rgba(17, 17, 17, 0.35);
1740
+ display: flex;
1741
+ align-items: center;
1742
+ justify-content: center;
1743
+ z-index: 1200;
1744
+ padding: 24px;
1745
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1746
+ backdrop-filter: blur(4px);
1747
+ }
1748
+
1749
+ .modal.hidden {
1750
+ opacity: 0;
1751
+ pointer-events: none;
1752
+ }
1753
+
1754
+ .modal.hidden .modal-content {
1755
+ transform: scale(0.95) translateY(10px);
1756
+ }
1757
+
1758
+ .modal-dialog {
1759
+ width: min(520px, 90vw);
1760
+ margin: auto;
1761
+ }
1762
+
1763
+ .modal-content {
1764
+ background: white;
1765
+ border-radius: 16px;
1766
+ box-shadow: 0 25px 50px -12px rgba(0,0,0,0.15);
1767
+ overflow: hidden;
1768
+ transform: scale(1) translateY(0);
1769
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1770
+ border: 1px solid rgba(0,0,0,0.08);
1771
+ max-height: 85vh;
1772
+ display: flex;
1773
+ flex-direction: column;
1774
+ }
1775
+
1776
+ .modal-header {
1777
+ padding: 12px 24px;
1778
+ border-bottom: 1px solid var(--border);
1779
+ display: flex;
1780
+ align-items: center;
1781
+ justify-content: space-between;
1782
+ background: linear-gradient(to bottom, rgba(255,255,255,1), rgba(255,255,255,0.95));
1783
+ }
1784
+
1785
+ .modal-header h3 {
1786
+ font-size: 18px;
1787
+ font-weight: 580;
1788
+ color: var(--dark);
1789
+ letter-spacing: -0.01em;
1790
+ margin: 0;
1791
+ }
1792
+
1793
+ .modal-close {
1794
+ width: 32px;
1795
+ height: 32px;
1796
+ border: none;
1797
+ background: transparent;
1798
+ border-radius: 8px;
1799
+ color: var(--gray);
1800
+ cursor: pointer;
1801
+ display: flex;
1802
+ align-items: center;
1803
+ justify-content: center;
1804
+ transition: all 0.2s ease;
1805
+ padding: 0;
1806
+ }
1807
+
1808
+ .modal-close:hover {
1809
+ background: rgba(0,0,0,0.04);
1810
+ color: var(--dark);
1811
+ }
1812
+
1813
+ .modal-body {
1814
+ padding: 24px;
1815
+ flex: 1;
1816
+ overflow-y: auto;
1817
+ min-height: 0;
1818
+ }
1819
+
1820
+ .modal-footer {
1821
+ padding: 12px 24px;
1822
+ border-top: 1px solid var(--border);
1823
+ display: flex;
1824
+ justify-content: flex-end;
1825
+ gap: 12px;
1826
+ background: rgba(248,249,250,0.65);
1827
+ }
1828
+
1829
+ .group-dropdown {
1830
+ position: absolute;
1831
+ top: calc(100% + 8px);
1832
+ right: 0;
1833
+ width: 420px;
1834
+ max-height: 420px;
1835
+ padding: 16px;
1836
+ border-radius: 14px;
1837
+ background: white;
1838
+ border: 1px solid rgba(0,0,0,0.08);
1839
+ box-shadow: 0 20px 50px rgba(15, 23, 42, 0.18);
1840
+ display: none;
1841
+ flex-direction: column;
1842
+ gap: 14px;
1843
+ z-index: 1200;
1844
+ }
1845
+
1846
+ .group-dropdown.show {
1847
+ display: flex;
1848
+ }
1849
+
1850
+ .group-dropdown-search input {
1851
+ width: 100%;
1852
+ padding: 10px 14px;
1853
+ border: 1px solid var(--border);
1854
+ border-radius: 8px;
1855
+ font-size: 14px;
1856
+ transition: all 0.2s ease;
1857
+ }
1858
+
1859
+ .group-dropdown-search input:focus {
1860
+ outline: none;
1861
+ border-color: var(--primary);
1862
+ box-shadow: 0 0 0 3px rgba(57,57,57,0.08);
1863
+ }
1864
+
1865
+ .group-dropdown-body {
1866
+ display: flex;
1867
+ flex-direction: column;
1868
+ gap: 10px;
1869
+ min-height: 220px;
1870
+ }
1871
+
1872
+ .group-cascader {
1873
+ display: flex;
1874
+ gap: 12px;
1875
+ }
1876
+
1877
+ .group-cascader-column {
1878
+ flex: 1;
1879
+ min-width: 0;
1880
+ display: flex;
1881
+ flex-direction: column;
1882
+ gap: 4px;
1883
+ max-height: 260px;
1884
+ overflow-y: auto;
1885
+ padding-right: 4px;
1886
+ border-right: 1px solid rgba(0,0,0,0.06);
1887
+ }
1888
+
1889
+ .group-cascader-column:last-child {
1890
+ border-right: none;
1891
+ }
1892
+
1893
+ .group-cascader-title {
1894
+ font-size: 12px;
1895
+ color: var(--gray);
1896
+ letter-spacing: 0;
1897
+ padding: 0 6px;
1898
+ }
1899
+
1900
+ .group-cascader-list {
1901
+ display: flex;
1902
+ flex-direction: column;
1903
+ gap: 2px;
1904
+ }
1905
+
1906
+ .group-cascader-empty {
1907
+ padding: 6px 4px;
1908
+ font-size: 12px;
1909
+ color: var(--gray);
1910
+ }
1911
+
1912
+ .group-cascader-item {
1913
+ border: none;
1914
+ background: transparent;
1915
+ text-align: left;
1916
+ padding: 6px 8px;
1917
+ border-radius: 8px;
1918
+ font-size: 13px;
1919
+ color: var(--dark);
1920
+ cursor: pointer;
1921
+ transition: background 0.18s ease, color 0.18s ease, padding-left 0.18s ease;
1922
+ position: relative;
1923
+ }
1924
+
1925
+ .group-cascader-item:hover {
1926
+ background: rgba(0,0,0,0.05);
1927
+ color: var(--primary);
1928
+ padding-left: 12px;
1929
+ }
1930
+
1931
+ .group-cascader-item.active {
1932
+ background: rgba(0,0,0,0.04);
1933
+ color: var(--primary);
1934
+ }
1935
+
1936
+ .group-cascader-label {
1937
+ display: inline-flex;
1938
+ align-items: center;
1939
+ gap: 6px;
1940
+ }
1941
+
1942
+ .group-cascader-path-hint {
1943
+ font-size: 11px;
1944
+ color: var(--gray);
1945
+ letter-spacing: 0;
1946
+ margin-left: 6px;
1947
+ }
1948
+
1949
+ .group-cascader-suffix {
1950
+ margin-left: auto;
1951
+ font-size: 12px;
1952
+ color: var(--gray);
1953
+ transition: color 0.18s ease;
1954
+ display: inline-flex;
1955
+ align-items: center;
1956
+ }
1957
+
1958
+ .group-cascader-item:hover .group-cascader-suffix,
1959
+ .group-cascader-item.active .group-cascader-suffix,
1960
+ .group-cascader-item.selected .group-cascader-suffix {
1961
+ color: var(--primary);
1962
+ }
1963
+
1964
+ .group-cascader-check {
1965
+ margin-left: auto;
1966
+ font-size: 12px;
1967
+ color: var(--primary);
1968
+ display: inline-flex;
1969
+ align-items: center;
1970
+ }
1971
+
1972
+ .group-search-results {
1973
+ display: none;
1974
+ flex-direction: column;
1975
+ gap: 6px;
1976
+ max-height: 280px;
1977
+ overflow-y: auto;
1978
+ padding-right: 4px;
1979
+ }
1980
+
1981
+ .group-search-results.show {
1982
+ display: flex;
1983
+ }
1984
+
1985
+ .group-search-item {
1986
+ border: 1px solid rgba(0,0,0,0.06);
1987
+ border-radius: 10px;
1988
+ padding: 8px 10px;
1989
+ display: flex;
1990
+ flex-direction: column;
1991
+ gap: 4px;
1992
+ cursor: pointer;
1993
+ transition: all 0.2s ease;
1994
+ background: white;
1995
+ text-align: left;
1996
+ font-size: 13px;
1997
+ color: var(--dark);
1998
+ }
1999
+
2000
+ .group-search-item:hover {
2001
+ border-color: var(--primary);
2002
+ box-shadow: 0 12px 24px rgba(15, 23, 42, 0.12);
2003
+ transform: translateY(-1px);
2004
+ }
2005
+
2006
+ .group-search-item.selected {
2007
+ border-color: var(--primary);
2008
+ box-shadow: inset 0 0 0 1px var(--primary);
2009
+ }
2010
+
2011
+ .group-search-path {
2012
+ font-size: 12px;
2013
+ color: var(--gray);
2014
+ letter-spacing: 0;
2015
+ }
2016
+
2017
+ .group-dropdown-empty {
2018
+ padding: 18px 12px;
2019
+ border-radius: 10px;
2020
+ text-align: center;
2021
+ background: rgba(0,0,0,0.03);
2022
+ color: var(--gray);
2023
+ font-size: 13px;
2024
+ }
2025
+
2026
+ .group-dropdown-empty.hidden {
2027
+ display: none;
2028
+ }
2029
+
2030
+ .form-group {
2031
+ margin-bottom: 0;
2032
+ }
2033
+
2034
+ .form-group label {
2035
+ display: block;
2036
+ margin-bottom: 8px;
2037
+ font-size: 14px;
2038
+ font-weight: 500;
2039
+ color: var(--gray);
2040
+ }
2041
+
2042
+ .form-group input {
2043
+ width: 100%;
2044
+ padding: 12px 14px;
2045
+ border: 1.5px solid var(--border);
2046
+ border-radius: 10px;
2047
+ font-size: 15px;
2048
+ transition: all 0.2s ease;
2049
+ background: white;
2050
+ }
2051
+
2052
+ .form-group input:focus {
2053
+ outline: none;
2054
+ border-color: var(--primary);
2055
+ box-shadow: 0 0 0 3px rgba(57,57,57,0.08);
2056
+ }
2057
+
2058
+ .form-group input::placeholder {
2059
+ color: #adb5bd;
2060
+ opacity: 0.8;
2061
+ }
2062
+
2063
+ .argument-modal {
2064
+ position: fixed;
2065
+ inset: 0;
2066
+ background: rgba(17, 17, 17, 0.4);
2067
+ display: flex;
2068
+ align-items: center;
2069
+ justify-content: center;
2070
+ z-index: 1200;
2071
+ padding: 24px;
2072
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2073
+ backdrop-filter: blur(4px);
2074
+ }
2075
+
2076
+ .argument-modal.hidden {
2077
+ opacity: 0;
2078
+ pointer-events: none;
2079
+ }
2080
+
2081
+ .argument-modal.hidden .argument-modal-dialog {
2082
+ transform: scale(0.95) translateY(10px);
2083
+ }
2084
+
2085
+ .argument-modal-dialog {
2086
+ width: min(520px, 100%);
2087
+ background: white;
2088
+ border-radius: 16px;
2089
+ box-shadow: 0 25px 50px -12px rgba(0,0,0,0.15);
2090
+ display: flex;
2091
+ flex-direction: column;
2092
+ overflow: hidden;
2093
+ border: 1px solid rgba(0,0,0,0.08);
2094
+ transform: scale(1) translateY(0);
2095
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2096
+ }
2097
+
2098
+ .argument-modal-header {
2099
+ display: flex;
2100
+ justify-content: space-between;
2101
+ align-items: center;
2102
+ padding: 20px 24px;
2103
+ border-bottom: 1px solid var(--border);
2104
+ background: linear-gradient(to bottom, rgba(255,255,255,1), rgba(255,255,255,0.95));
2105
+ }
2106
+
2107
+ .argument-modal-header h3 {
2108
+ font-size: 18px;
2109
+ font-weight: 580;
2110
+ color: var(--dark);
2111
+ letter-spacing: -0.01em;
2112
+ margin: 0;
2113
+ }
2114
+
2115
+ .argument-modal-close {
2116
+ width: 32px;
2117
+ height: 32px;
2118
+ border: none;
2119
+ background: transparent;
2120
+ border-radius: 8px;
2121
+ color: var(--gray);
2122
+ cursor: pointer;
2123
+ display: flex;
2124
+ align-items: center;
2125
+ justify-content: center;
2126
+ transition: all 0.2s ease;
2127
+ padding: 0;
2128
+ }
2129
+
2130
+ .argument-modal-close:hover {
2131
+ background: rgba(0,0,0,0.04);
2132
+ color: var(--dark);
2133
+ }
2134
+
2135
+ .argument-modal-body {
2136
+ padding: 24px;
2137
+ }
2138
+
2139
+ .argument-form-grid {
2140
+ display: grid;
2141
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2142
+ gap: 20px;
2143
+ }
2144
+
2145
+ .form-field {
2146
+ display: flex;
2147
+ flex-direction: column;
2148
+ }
2149
+
2150
+ .form-field.full-width {
2151
+ grid-column: 1 / -1;
2152
+ }
2153
+
2154
+ .form-field-inline {
2155
+ align-self: end;
2156
+ height: 100%;
2157
+ display: flex;
2158
+ align-items: flex-end;
2159
+ padding-top: 26px;
2160
+ }
2161
+
2162
+ .argument-modal label {
2163
+ font-size: 13px;
2164
+ color: var(--dark);
2165
+ font-weight: 500;
2166
+ letter-spacing: 0.01em;
2167
+ margin-bottom: 6px;
2168
+ }
2169
+
2170
+ .argument-modal .required {
2171
+ color: var(--danger);
2172
+ font-weight: 600;
2173
+ font-size: 12px;
2174
+ }
2175
+
2176
+ /* 统一表单字段样式 */
2177
+ .argument-modal .form-field input,
2178
+ .argument-modal .form-field textarea {
2179
+ width: 100%;
2180
+ padding: 10px 12px;
2181
+ border: 1px solid var(--border);
2182
+ border-radius: 8px;
2183
+ font-size: 14px;
2184
+ transition: all 0.2s ease;
2185
+ background: white;
2186
+ box-shadow: 0 1px 2px rgba(0,0,0,0.02);
2187
+ color: var(--dark);
2188
+ }
2189
+
2190
+ .argument-modal .form-field input:focus,
2191
+ .argument-modal .form-field textarea:focus {
2192
+ outline: none;
2193
+ border-color: var(--primary);
2194
+ box-shadow: 0 0 0 3px rgba(57,57,57,0.1), 0 1px 2px rgba(0,0,0,0.05);
2195
+ background: white;
2196
+ }
2197
+
2198
+ .argument-modal .form-field input::placeholder,
2199
+ .argument-modal .form-field textarea::placeholder {
2200
+ color: #a0aec0;
2201
+ opacity: 0.8;
2202
+ }
2203
+
2204
+ /* 必填字段的特殊样式 */
2205
+ .argument-modal .form-field.required-field input,
2206
+ .argument-modal .form-field.required-field textarea {
2207
+ border: 1px solid #cbd5e0;
2208
+ background: #fafafa;
2209
+ }
2210
+
2211
+ .argument-modal .form-field.required-field input:focus,
2212
+ .argument-modal .form-field.required-field textarea:focus {
2213
+ border-color: var(--primary);
2214
+ box-shadow: 0 0 0 3px rgba(57,57,57,0.1), 0 1px 2px rgba(0,0,0,0.05);
2215
+ background: white;
2216
+ }
2217
+
2218
+ .argument-modal textarea {
2219
+ resize: vertical;
2220
+ min-height: 100px;
2221
+ line-height: 1.5;
2222
+ }
2223
+
2224
+ /* 现代化复选框样式 */
2225
+ .checkbox-field {
2226
+ display: inline-flex;
2227
+ align-items: center;
2228
+ gap: 8px;
2229
+ font-size: 13px;
2230
+ color: var(--dark);
2231
+ cursor: pointer;
2232
+ padding: 6px 0;
2233
+ border: none;
2234
+ border-radius: 0;
2235
+ }
2236
+
2237
+ .checkbox-field:hover {
2238
+ /* background-color: rgba(0,0,0,0.03); */
2239
+ }
2240
+
2241
+ .checkbox-field input[type="checkbox"] {
2242
+ position: relative;
2243
+ width: 18px;
2244
+ height: 18px;
2245
+ appearance: none;
2246
+ background: white;
2247
+ border: 1px solid #cbd5e0;
2248
+ border-radius: 4px;
2249
+ cursor: pointer;
2250
+ padding: 10px 10px;
2251
+ transition: all 0.2s ease;
2252
+ box-shadow: 0 1px 2px rgba(0,0,0,0.03);
2253
+ }
2254
+
2255
+ .checkbox-field input[type="checkbox"]:checked {
2256
+ background: var(--primary);
2257
+ border-color: var(--primary);
2258
+ }
2259
+
2260
+ .checkbox-field input[type="checkbox"]:checked::before {
2261
+ content: '';
2262
+ position: absolute;
2263
+ left: 50%;
2264
+ top: 50%;
2265
+ width: 4px;
2266
+ height: 8px;
2267
+ border: solid white;
2268
+ border-width: 0 2px 2px 0;
2269
+ transform: translate(-50%, -50%) rotate(45deg);
2270
+ }
2271
+
2272
+ .checkbox-field input[type="checkbox"]:focus {
2273
+ outline: none;
2274
+ box-shadow: 0 0 0 3px rgba(57,57,57,0.1), 0 1px 2px rgba(0,0,0,0.05);
2275
+ }
2276
+
2277
+ .form-control {
2278
+ width: 100%;
2279
+ padding: 12px 14px;
2280
+ border: 1.5px solid var(--border);
2281
+ border-radius: 10px;
2282
+ font-size: 15px;
2283
+ transition: all 0.2s ease;
2284
+ background: white;
2285
+ }
2286
+
2287
+ .form-control:focus {
2288
+ outline: none;
2289
+ border-color: var(--primary);
2290
+ box-shadow: 0 0 0 3px rgba(57,57,57,0.08);
2291
+ }
2292
+
2293
+ .form-control::placeholder {
2294
+ color: #adb5bd;
2295
+ opacity: 0.8;
2296
+ }
2297
+
2298
+ .argument-modal-footer {
2299
+ display: flex;
2300
+ justify-content: flex-end;
2301
+ gap: 12px;
2302
+ padding: 16px 24px;
2303
+ border-top: 1px solid var(--border);
2304
+ background: rgba(248,249,250,0.65);
2305
+ }
2306
+
2307
+ body.modal-open {
2308
+ overflow: hidden;
2309
+ }
2310
+
2311
+ .editor-body {
2312
+ box-sizing: border-box;
2313
+ }
2314
+
2315
+ .workspace-pane {
2316
+ display: flex;
2317
+ flex-direction: column;
2318
+ background: white;
2319
+ transition: opacity 0.25s ease;
2320
+ border-radius: 12px;
2321
+ overflow: hidden;
2322
+ border: 1px solid var(--border);
2323
+ box-shadow: 0 8px 24px rgba(0,0,0,0.05);
2324
+ }
2325
+
2326
+ .workspace-pane.hidden {
2327
+ opacity: 0;
2328
+ visibility: hidden;
2329
+ pointer-events: none;
2330
+ display: none;
2331
+ }
2332
+
2333
+ .pane-header {
2334
+ padding: 10px 24px;
2335
+ border-bottom: 1px solid var(--border);
2336
+ background: white;
2337
+ font-size: 14px;
2338
+ font-weight: 600;
2339
+ color: var(--gray);
2340
+ }
2341
+
2342
+ .pane-content {
2343
+ display: flex;
2344
+ flex-direction: column;
2345
+ padding: 0;
2346
+ }
2347
+
2348
+ .pane-content.preview {
2349
+ background: var(--preview-bg);
2350
+ padding: 24px;
2351
+ }
2352
+
2353
+ /* 原始textarea样式 */
2354
+ #editor {
2355
+ width: 100%;
2356
+ height: 100%;
2357
+ min-height: 200px;
2358
+ border: none;
2359
+ outline: none;
2360
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
2361
+ font-size: 14px;
2362
+ line-height: 1.5;
2363
+ padding: 8px 12px;
2364
+ resize: none;
2365
+ flex: 1;
2366
+ }
2367
+
2368
+ /* CodeMirror 5 编辑器样式 */
2369
+ .CodeMirror {
2370
+ height: auto;
2371
+ /* min-height: 200px; */
2372
+ min-height: calc(100vh - 372px);
2373
+ font-size: 14px;
2374
+ line-height: 1.5;
2375
+ color: #000;
2376
+ background: #fff;
2377
+ border-radius: 4px;
2378
+ padding: 4px;
2379
+ }
2380
+
2381
+ .CodeMirror-scroll {
2382
+ height: auto;
2383
+ overflow-y: hidden;
2384
+ overflow-x: auto;
2385
+ }
2386
+
2387
+ .cm-scroller {
2388
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
2389
+ height: 100%;
2390
+ overflow: auto;
2391
+ }
2392
+
2393
+ .cm-content {
2394
+ padding: 8px 12px;
2395
+ height: 100%;
2396
+ }
2397
+
2398
+ .cm-gutters {
2399
+ display: none;
2400
+ }
2401
+
2402
+ .cm-line {
2403
+ padding: 0 4px;
2404
+ height: 1.5em;
2405
+ }
2406
+
2407
+ .preview-content {
2408
+ flex: 1;
2409
+ padding: 24px;
2410
+ overflow: auto;
2411
+ background: white;
2412
+ border-radius: 12px;
2413
+ }
2414
+
2415
+ /* 预览模式下的 CodeMirror 样式调整 */
2416
+ .preview-content .CodeMirror {
2417
+ height: auto;
2418
+ background: transparent;
2419
+ border: none;
2420
+ padding: 0;
2421
+ font-size: 14px;
2422
+ }
2423
+
2424
+ .preview-content .CodeMirror-scroll {
2425
+ overflow: hidden !important;
2426
+ }
2427
+
2428
+ .preview-content .CodeMirror-gutters {
2429
+ display: none;
2430
+ }
2431
+
2432
+ .preview-content .CodeMirror-cursor {
2433
+ display: none !important;
2434
+ }
2435
+
2436
+ @media (max-width: 1100px) {
2437
+ .arguments-list {
2438
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
2439
+ }
2440
+ }
2441
+
2442
+ .empty-state {
2443
+ text-align: center;
2444
+ padding: 40px 20px;
2445
+ color: var(--gray);
2446
+ }
2447
+
2448
+ .empty-state h3 {
2449
+ margin-bottom: 8px;
2450
+ font-weight: 500;
2451
+ }
2452
+
2453
+ .empty-state p {
2454
+ font-size: 14px;
2455
+ margin-bottom: 16px;
2456
+ }
2457
+
2458
+ .login-container {
2459
+ position: fixed;
2460
+ top: 0;
2461
+ left: 0;
2462
+ right: 0;
2463
+ bottom: 0;
2464
+ background: linear-gradient(135deg,
2465
+ rgba(255,255,255,0.92),
2466
+ rgba(248,249,250,0.95),
2467
+ rgba(255,255,255,0.98)
2468
+ );
2469
+ display: flex;
2470
+ align-items: center;
2471
+ justify-content: center;
2472
+ z-index: 1000;
2473
+ backdrop-filter: blur(12px);
2474
+ }
2475
+
2476
+ .login-box {
2477
+ width: 400px;
2478
+ background: white;
2479
+ border-radius: 20px;
2480
+ box-shadow: 0 25px 50px -12px rgba(0,0,0,0.15);
2481
+ padding: 48px 40px;
2482
+ text-align: center;
2483
+ border: 1px solid rgba(0,0,0,0.06);
2484
+ position: relative;
2485
+ animation: login-box-show 0.5s cubic-bezier(0.21, 1.02, 0.73, 1) forwards;
2486
+ backdrop-filter: blur(10px);
2487
+ background: linear-gradient(180deg,
2488
+ rgba(255, 255, 255, 0.98) 0%,
2489
+ rgba(255, 255, 255, 0.96) 100%
2490
+ );
2491
+ }
2492
+
2493
+ @keyframes login-box-show {
2494
+ 0% {
2495
+ opacity: 0;
2496
+ transform: translateY(20px);
2497
+ }
2498
+ 100% {
2499
+ opacity: 1;
2500
+ transform: translateY(0);
2501
+ }
2502
+ }
2503
+
2504
+ .login-box h2 {
2505
+ font-size: 28px;
2506
+ font-weight: 600;
2507
+ color: var(--primary);
2508
+ margin-bottom: 36px;
2509
+ position: relative;
2510
+ display: inline-block;
2511
+ }
2512
+
2513
+ .login-box h2::after {
2514
+ content: '';
2515
+ position: absolute;
2516
+ bottom: -12px;
2517
+ left: 50%;
2518
+ transform: translateX(-50%);
2519
+ width: 45px;
2520
+ height: 4px;
2521
+ background: linear-gradient(to right, var(--primary), var(--primary-dark));
2522
+ border-radius: 4px;
2523
+ opacity: 0.8;
2524
+ }
2525
+
2526
+ .login-box .input-group {
2527
+ position: relative;
2528
+ margin-bottom: 24px;
2529
+ width: 100%;
2530
+ }
2531
+
2532
+ .login-box .input-group::before {
2533
+ content: '';
2534
+ position: absolute;
2535
+ left: 16px;
2536
+ top: 50%;
2537
+ transform: translateY(-50%);
2538
+ width: 16px;
2539
+ height: 16px;
2540
+ opacity: 0.5;
2541
+ transition: opacity 0.2s ease;
2542
+ background-size: contain;
2543
+ background-repeat: no-repeat;
2544
+ }
2545
+
2546
+ .login-box .input-group.username::before {
2547
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'/%3E%3Ccircle cx='12' cy='7' r='4'/%3E%3C/svg%3E");
2548
+ }
2549
+
2550
+ .login-box .input-group.password::before {
2551
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'/%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'/%3E%3C/svg%3E");
2552
+ }
2553
+
2554
+ .login-box .input-group:focus-within::before {
2555
+ opacity: 1;
2556
+ }
2557
+
2558
+ .login-box input {
2559
+ width: 100%;
2560
+ padding: 14px 15px 14px 48px;
2561
+ border: 1.5px solid var(--border);
2562
+ border-radius: 12px;
2563
+ font-size: 16px;
2564
+ font-weight: 450;
2565
+ letter-spacing: -0.01em;
2566
+ transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
2567
+ background: rgba(255, 255, 255, 0.9);
2568
+ box-shadow: 0 2px 6px rgba(0,0,0,0.02);
2569
+ }
2570
+
2571
+ .login-box input:focus {
2572
+ outline: none;
2573
+ border-color: var(--primary);
2574
+ border-width: 1.5px;
2575
+ box-shadow: 0 0 0 3px rgba(57,57,57,0.08), 0 2px 8px rgba(0,0,0,0.04);
2576
+ background: white;
2577
+ }
2578
+
2579
+ .login-box input::placeholder {
2580
+ color: #adb5bd;
2581
+ font-size: 15px;
2582
+ font-weight: 450;
2583
+ letter-spacing: -0.01em;
2584
+ opacity: 0.85;
2585
+ }
2586
+
2587
+ .login-box button {
2588
+ width: 100%;
2589
+ padding: 16px 132px;
2590
+ margin-top: 32px;
2591
+ border: none;
2592
+ border-radius: 12px;
2593
+ font-size: 16px;
2594
+ font-weight: 520;
2595
+ background: var(--primary);
2596
+ color: white;
2597
+ cursor: pointer;
2598
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2599
+ position: relative;
2600
+ overflow: hidden;
2601
+ letter-spacing: 0.02em;
2602
+ box-shadow: 0 4px 12px rgba(0,0,0,0.1);
2603
+ }
2604
+
2605
+ .login-box button::before {
2606
+ content: '';
2607
+ position: absolute;
2608
+ top: 0;
2609
+ left: 0;
2610
+ right: 0;
2611
+ bottom: 0;
2612
+ background: linear-gradient(to right, transparent, rgba(255,255,255,0.1), transparent);
2613
+ transform: translateX(-100%);
2614
+ transition: transform 0.8s ease;
2615
+ }
2616
+
2617
+ .login-box button:hover {
2618
+ background: var(--primary-dark);
2619
+ transform: translateY(-2px);
2620
+ box-shadow: 0 8px 16px rgba(0,0,0,0.12);
2621
+ }
2622
+
2623
+ .login-box button:active {
2624
+ transform: translateY(0);
2625
+ box-shadow: 0 3px 8px rgba(0,0,0,0.08);
2626
+ background: var(--primary);
2627
+ }
2628
+
2629
+ .login-box button:hover::before {
2630
+ transform: translateX(100%);
2631
+ }
2632
+
2633
+ .error-msg {
2634
+ color: var(--danger);
2635
+ font-size: 13px;
2636
+ margin-top: 12px;
2637
+ text-align: center;
2638
+ opacity: 0;
2639
+ transform: translateY(-10px);
2640
+ animation: error-show 0.3s ease forwards;
2641
+ display: flex;
2642
+ align-items: center;
2643
+ justify-content: center;
2644
+ gap: 6px;
2645
+ }
2646
+
2647
+ .error-msg::before {
2648
+ content: '';
2649
+ width: 16px;
2650
+ height: 16px;
2651
+ background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23dc3545' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' y1='8' x2='12' y2='12'/%3E%3Cline x1='12' y1='16' x2='12.01' y2='16'/%3E%3C/svg%3E") no-repeat center;
2652
+ background-size: contain;
2653
+ }
2654
+
2655
+ @keyframes error-show {
2656
+ to {
2657
+ opacity: 1;
2658
+ transform: translateY(0);
2659
+ }
2660
+ }
2661
+
2662
+ .success-msg {
2663
+ color: var(--success);
2664
+ font-size: 13px;
2665
+ margin-top: 12px;
2666
+ text-align: center;
2667
+ display: flex;
2668
+ align-items: center;
2669
+ justify-content: center;
2670
+ gap: 6px;
2671
+ }
2672
+
2673
+ .success-msg::before {
2674
+ content: '';
2675
+ width: 16px;
2676
+ height: 16px;
2677
+ background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2328a745' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 11.08V12a10 10 0 1 1-5.93-9.14'/%3E%3Cpolyline points='22 4 12 14.01 9 11.01'/%3E%3C/svg%3E") no-repeat center;
2678
+ background-size: contain;
2679
+ }
2680
+
2681
+ .loading {
2682
+ opacity: 0.6;
2683
+ pointer-events: none;
2684
+ }
2685
+
2686
+ .status-badge {
2687
+ display: inline-flex;
2688
+ align-items: center;
2689
+ gap: 4px;
2690
+ padding: 4px 8px;
2691
+ border-radius: 12px;
2692
+ font-size: 12px;
2693
+ font-weight: 500;
2694
+ }
2695
+
2696
+ .status-badge.enabled {
2697
+ background: rgba(40,167,69,0.1);
2698
+ color: var(--success);
2699
+ }
2700
+
2701
+ .status-badge.disabled {
2702
+ background: rgba(220,53,69,0.1);
2703
+ color: var(--danger);
2704
+ }
2705
+
2706
+ /* 加载中效果 */
2707
+ .loading-overlay {
2708
+ position: fixed;
2709
+ top: 0;
2710
+ left: 0;
2711
+ width: 100%;
2712
+ height: 100%;
2713
+ background: rgba(255, 255, 255, 0.92);
2714
+ display: flex;
2715
+ flex-direction: column;
2716
+ align-items: center;
2717
+ justify-content: center;
2718
+ z-index: 9999;
2719
+ backdrop-filter: blur(1px);
2720
+ }
2721
+
2722
+ .loading-overlay.hidden {
2723
+ display: none;
2724
+ }
2725
+
2726
+ .loading-spinner {
2727
+ width: 50px;
2728
+ height: 50px;
2729
+ border: 4px solid rgba(57, 57, 57, 0.08);
2730
+ border-top: 4px solid rgba(57, 57, 57, 0.4);
2731
+ border-radius: 50%;
2732
+ animation: spin 1s linear infinite;
2733
+ margin-bottom: 20px;
2734
+ }
2735
+
2736
+ .loading-text {
2737
+ font-size: 16px;
2738
+ color: rgba(26, 26, 26, 0.7);
2739
+ font-weight: 500;
2740
+ text-align: center;
2741
+ }
2742
+
2743
+ .loading-subtext {
2744
+ font-size: 13px;
2745
+ color: rgba(108, 117, 125, 0.7);
2746
+ margin-top: 8px;
2747
+ text-align: center;
2748
+ }
2749
+
2750
+ @keyframes spin {
2751
+ 0% { transform: rotate(0deg); }
2752
+ 100% { transform: rotate(360deg); }
2753
+ }
2754
+
2755
+ .custom-blank-content {
2756
+ display: flex;
2757
+ flex-direction: column;
2758
+ width: min(1280px, 100%);
2759
+ margin: 0 auto 16px auto;
2760
+ padding: 24px;
2761
+ background: #ffffff;
2762
+ border-radius: 8px;
2763
+ box-shadow: 4px 4px 4px #ccc;
2764
+ min-height: 400px;
2765
+ }
2766
+
2767
+ .blank-placeholder {
2768
+ flex: 1;
2769
+ display: flex;
2770
+ align-items: center;
2771
+ justify-content: center;
2772
+ padding: 40px 20px;
2773
+ }
2774
+
2775
+ .blank-placeholder-body {
2776
+ text-align: center;
2777
+ color: var(--gray);
2778
+ }
2779
+
2780
+ .blank-placeholder-emoji {
2781
+ font-size: 48px;
2782
+ margin-bottom: 16px;
2783
+ }
2784
+
2785
+ .blank-placeholder-text {
2786
+ font-size: 14px;
2787
+ line-height: 1.6;
2788
+ color: var(--gray);
2789
+ }
2790
+
2791
+ #promptEditorArea {
2792
+ display: none;
2793
+ flex-direction: column;
2794
+ width: min(1280px, 100%);
2795
+ margin: 0 auto 16px auto;
2796
+ padding: 8px 15px 16px 15px;
2797
+ background: #ffffff;
2798
+ border-radius: 8px;
2799
+ box-shadow: 4px 4px 4px #ccc;
2800
+ }
2801
+
2802
+ /* 工具区域样式 */
2803
+ .tools-area {
2804
+ flex: 1;
2805
+ display: flex;
2806
+ flex-direction: column;
2807
+ background: white;
2808
+ border-left: 1px solid var(--border);
2809
+ overflow: hidden;
2810
+ }
2811
+
2812
+ /* 工具页面头部 */
2813
+ .tools-header {
2814
+ display: flex;
2815
+ justify-content: space-between;
2816
+ align-items: center;
2817
+ padding: 18px 32px;
2818
+ border-bottom: 1px solid var(--border);
2819
+ background: #fafafa;
2820
+ }
2821
+
2822
+ .tools-header-left {
2823
+ display: flex;
2824
+ align-items: center;
2825
+ gap: 24px;
2826
+ }
2827
+
2828
+ .tools-title {
2829
+ font-size: 24px;
2830
+ font-weight: 600;
2831
+ color: var(--dark);
2832
+ margin: 0;
2833
+ }
2834
+
2835
+ .skills-search,
2836
+ .tools-search {
2837
+ width: 320px;
2838
+ }
2839
+
2840
+ .skills-search .search-box,
2841
+ .tools-search .search-box {
2842
+ position: relative;
2843
+ }
2844
+
2845
+ .skills-search .search-box input,
2846
+ .tools-search .search-box input {
2847
+ width: 100%;
2848
+ padding: 10px 36px 10px 40px;
2849
+ border: 1px solid var(--border);
2850
+ border-radius: 10px;
2851
+ font-size: 14px;
2852
+ background: var(--light);
2853
+ transition: all 0.25s ease;
2854
+ }
2855
+
2856
+ .skills-search .search-box input:focus,
2857
+ .tools-search .search-box input:focus {
2858
+ outline: none;
2859
+ border-color: #6366f1;
2860
+ background: var(--white);
2861
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
2862
+ }
2863
+
2864
+ .skills-search .search-box::before,
2865
+ .tools-search .search-box::before {
2866
+ content: '';
2867
+ position: absolute;
2868
+ left: 14px;
2869
+ top: 50%;
2870
+ transform: translateY(-50%);
2871
+ width: 16px;
2872
+ height: 16px;
2873
+ background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'/%3E%3C/svg%3E") no-repeat center;
2874
+ background-size: contain;
2875
+ opacity: 0.6;
2876
+ }
2877
+
2878
+ .search-clear-btn {
2879
+ position: absolute;
2880
+ right: 8px;
2881
+ top: 50%;
2882
+ transform: translateY(-50%);
2883
+ width: 24px;
2884
+ height: 24px;
2885
+ border: none;
2886
+ background: transparent;
2887
+ cursor: pointer;
2888
+ display: none;
2889
+ align-items: center;
2890
+ justify-content: center;
2891
+ color: var(--gray);
2892
+ border-radius: 6px;
2893
+ transition: all 0.15s ease;
2894
+ }
2895
+
2896
+ .search-clear-btn:hover {
2897
+ background: rgba(0, 0, 0, 0.05);
2898
+ color: var(--dark);
2899
+ }
2900
+
2901
+ .skills-search .search-box input:not(:placeholder-shown) + .search-clear-btn,
2902
+ .tools-search .search-box input:not(:placeholder-shown) + .search-clear-btn {
2903
+ display: flex;
2904
+ }
2905
+
2906
+ .tools-header-right {
2907
+ display: flex;
2908
+ align-items: center;
2909
+ gap: 20px;
2910
+ }
2911
+
2912
+ .tools-filter {
2913
+ display: flex;
2914
+ gap: 2px;
2915
+ background: var(--light);
2916
+ padding: 3px;
2917
+ border-radius: 10px;
2918
+ }
2919
+
2920
+ .filter-btn {
2921
+ padding: 8px 16px;
2922
+ border: none;
2923
+ background: transparent;
2924
+ color: var(--gray);
2925
+ font-size: 14px;
2926
+ border-radius: 7px;
2927
+ cursor: pointer;
2928
+ transition: all 0.2s ease;
2929
+ font-weight: 500;
2930
+ white-space: nowrap;
2931
+ }
2932
+
2933
+ .filter-btn:hover {
2934
+ background: white;
2935
+ color: var(--dark);
2936
+ }
2937
+
2938
+ .filter-btn.active {
2939
+ background: white;
2940
+ color: var(--primary);
2941
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
2942
+ }
2943
+
2944
+ /* 工具内容区域 */
2945
+ .tools-content {
2946
+ flex: 1;
2947
+ overflow-y: auto;
2948
+ /* padding: 32px; */
2949
+ min-height: 0;
2950
+ }
2951
+
2952
+ /* 工具网格 */
2953
+ .tools-grid {
2954
+ display: grid;
2955
+ grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
2956
+ gap: 24px;
2957
+ animation: fadeIn 0.3s ease;
2958
+ margin: 24px;
2959
+ }
2960
+
2961
+ /* 工具卡片 */
2962
+ .tool-card {
2963
+ background: white;
2964
+ border: 1px solid var(--border);
2965
+ border-radius: 12px;
2966
+ padding: 24px;
2967
+ transition: all 0.3s ease;
2968
+ cursor: pointer;
2969
+ position: relative;
2970
+ overflow: hidden;
2971
+ height: 100%;
2972
+ display: flex;
2973
+ flex-direction: column;
2974
+ }
2975
+
2976
+ .tool-card::before {
2977
+ content: '';
2978
+ position: absolute;
2979
+ top: 0;
2980
+ left: 0;
2981
+ right: 0;
2982
+ height: 4px;
2983
+ /* background: linear-gradient(90deg, var(--primary), #6366f1); */
2984
+ background: var(--primary);
2985
+ opacity: 0;
2986
+ transition: opacity 0.3s ease;
2987
+ }
2988
+
2989
+ .tool-card:hover {
2990
+ transform: translateY(-4px);
2991
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.12);
2992
+ border-color: var(--primary);
2993
+ }
2994
+
2995
+ .tool-card:hover::before {
2996
+ opacity: 1;
2997
+ }
2998
+
2999
+ .tool-card-header {
3000
+ display: flex;
3001
+ justify-content: space-between;
3002
+ align-items: flex-start;
3003
+ margin-bottom: 16px;
3004
+ }
3005
+
3006
+ .tool-card-title {
3007
+ font-size: 18px;
3008
+ font-weight: 600;
3009
+ color: var(--dark);
3010
+ margin: 0;
3011
+ display: flex;
3012
+ align-items: center;
3013
+ gap: 10px;
3014
+ line-height: 1.3;
3015
+ flex: 1;
3016
+ }
3017
+
3018
+ .tool-card-icon {
3019
+ width: 28px;
3020
+ height: 28px;
3021
+ background: linear-gradient(135deg, var(--primary), #6366f1);
3022
+ border-radius: 8px;
3023
+ display: flex;
3024
+ align-items: center;
3025
+ justify-content: center;
3026
+ color: white;
3027
+ font-size: 14px;
3028
+ font-weight: 600;
3029
+ flex-shrink: 0;
3030
+ }
3031
+
3032
+ .tool-card-version {
3033
+ font-size: 12px;
3034
+ color: var(--gray);
3035
+ background: var(--light);
3036
+ padding: 4px 10px;
3037
+ border-radius: 6px;
3038
+ font-weight: 500;
3039
+ flex-shrink: 0;
3040
+ }
3041
+
3042
+ .tool-card-description {
3043
+ color: var(--gray);
3044
+ font-size: 14px;
3045
+ line-height: 1.6;
3046
+ /* margin-bottom: 20px; */
3047
+ display: -webkit-box;
3048
+ -webkit-line-clamp: 2;
3049
+ line-clamp: 2;
3050
+ -webkit-box-orient: vertical;
3051
+ overflow: hidden;
3052
+ text-overflow: ellipsis;
3053
+ max-height: calc(1.6em * 2); /* 2行高度:line-height * 行数 */
3054
+ flex-grow: 1;
3055
+ word-break: break-word;
3056
+ }
3057
+
3058
+ .tool-card-meta {
3059
+ display: flex;
3060
+ flex-wrap: wrap;
3061
+ gap: 8px;
3062
+ margin-bottom: 20px;
3063
+ }
3064
+
3065
+ .tool-card-category-row {
3066
+ margin-bottom: 12px;
3067
+ padding-bottom: 12px;
3068
+ border-bottom: 1px solid #f0f0f0;
3069
+ }
3070
+
3071
+ .tool-card-category {
3072
+ font-size: 14px;
3073
+ font-weight: 600;
3074
+ color: #2d3748;
3075
+ display: inline-block;
3076
+ padding: 6px 0;
3077
+ position: relative;
3078
+ }
3079
+
3080
+ .tool-card-category::before {
3081
+ content: '';
3082
+ position: absolute;
3083
+ left: -12px;
3084
+ top: 50%;
3085
+ transform: translateY(-50%);
3086
+ width: 4px;
3087
+ height: 16px;
3088
+ background: #4299e1;
3089
+ border-radius: 2px;
3090
+ }
3091
+
3092
+ .tool-card-description-wrapper {
3093
+ margin-bottom: 10px;
3094
+ padding-bottom: 10px;
3095
+ border-bottom: 1px dashed var(--gray-light);
3096
+ }
3097
+
3098
+ .tool-card-category-badge {
3099
+ display: inline-block;
3100
+ font-size: 12px;
3101
+ font-weight: 600;
3102
+ color: #838282;
3103
+ background: linear-gradient(135deg, #e3f2fd 0%, #f0f7ff 100%);
3104
+ /* border: 1px solid #90caf9; */
3105
+ border-radius: 4px;
3106
+ padding: 1px 6px;
3107
+ margin-right: 6px;
3108
+ vertical-align: baseline;
3109
+ box-shadow: 0 1px 2px rgba(66, 153, 225, 0.1);
3110
+ transition: all 0.2s ease;
3111
+ }
3112
+
3113
+ .tool-card-category-badge:hover {
3114
+ background: linear-gradient(135deg, #bbdefb 0%, #e3f2fd 100%);
3115
+ border-color: #64b5f6;
3116
+ box-shadow: 0 2px 4px rgba(66, 153, 225, 0.15);
3117
+ }
3118
+
3119
+ .tool-card-tags-row {
3120
+ position: relative;
3121
+ height: 32px;
3122
+ margin-bottom: 8px;
3123
+ overflow-y: auto;
3124
+ }
3125
+
3126
+ .tool-card-tags-container {
3127
+ display: flex;
3128
+ flex-wrap: wrap;
3129
+ gap: 8px;
3130
+ line-height: 1.2;
3131
+ max-height: 64px;
3132
+ overflow-y: auto;
3133
+ }
3134
+
3135
+ .tool-card-tags-row.expanded .tool-card-tags-container {
3136
+ max-height: 200px;
3137
+ }
3138
+
3139
+ .tool-card-tag {
3140
+ font-size: 12px;
3141
+ color: #718096;
3142
+ background: #f7fafc;
3143
+ border: 1px solid #e2e8f0;
3144
+ padding: 4px 8px;
3145
+ border-radius: 4px;
3146
+ font-weight: 400;
3147
+ transition: all 0.2s ease;
3148
+ position: relative;
3149
+ }
3150
+
3151
+ .tool-card-tag:hover {
3152
+ background: #edf2f7;
3153
+ border-color: #cbd5e0;
3154
+ color: #4a5568;
3155
+ }
3156
+
3157
+ /* 展开按钮 */
3158
+ .tool-card-footer {
3159
+ display: flex;
3160
+ justify-content: space-between;
3161
+ align-items: center;
3162
+ padding-top: 16px;
3163
+ border-top: 1px solid var(--gray-light);
3164
+ margin-top: auto;
3165
+ }
3166
+
3167
+ .tool-card-author {
3168
+ font-size: 13px;
3169
+ color: var(--gray);
3170
+ display: flex;
3171
+ align-items: center;
3172
+ gap: 8px;
3173
+ }
3174
+
3175
+ .tool-card-author::before {
3176
+ /* content: '👤'; */
3177
+ font-size: 14px;
3178
+ }
3179
+
3180
+ .tool-card-actions {
3181
+ display: flex;
3182
+ gap: 8px;
3183
+ }
3184
+
3185
+ .tool-card-action {
3186
+ padding: 6px 12px;
3187
+ font-size: 12px;
3188
+ border: 1px solid var(--border);
3189
+ background: white;
3190
+ color: var(--gray);
3191
+ border-radius: 6px;
3192
+ cursor: pointer;
3193
+ transition: all 0.2s ease;
3194
+ font-weight: 500;
3195
+ }
3196
+
3197
+ .tool-card-action:hover {
3198
+ background: var(--primary);
3199
+ color: white;
3200
+ border-color: var(--primary);
3201
+ }
3202
+
3203
+ /* 工具卡片特殊字段 - Tab设计 */
3204
+ .tool-card-meta {
3205
+ /* margin-top: 16px; */
3206
+ padding-top: 16px;
3207
+ border-top: 1px dashed var(--gray-light);
3208
+ }
3209
+
3210
+ .tool-card-meta-tabs {
3211
+ display: flex;
3212
+ border-bottom: 1px solid var(--gray-light);
3213
+ margin-bottom: 12px;
3214
+ width: 100%;
3215
+ }
3216
+
3217
+ .tool-card-meta-tab {
3218
+ padding: 6px 22px 6px 12px;
3219
+ font-size: 11px;
3220
+ font-weight: 500;
3221
+ color: var(--gray);
3222
+ background: none;
3223
+ border: none;
3224
+ border-bottom: 1px solid transparent;
3225
+ cursor: pointer;
3226
+ transition: all 0.2s ease;
3227
+ text-transform: uppercase;
3228
+ letter-spacing: 0.5px;
3229
+ display: flex;
3230
+ align-items: center;
3231
+ gap: 4px;
3232
+ /* flex: 1; */
3233
+ justify-content: center;
3234
+ }
3235
+
3236
+ .tool-card-meta-tab:hover {
3237
+ color: var(--dark);
3238
+ background: rgba(57, 57, 57, 0.04);
3239
+ border-radius: 4px 4px 0 0;
3240
+ }
3241
+
3242
+ .tool-card-meta-tab.active {
3243
+ color: var(--primary);
3244
+ border-bottom-color: var(--primary);
3245
+ }
3246
+
3247
+ .tool-card-meta-tab.scenarios-tab.active {
3248
+ color: var(--dark);
3249
+ border-bottom-color: var(--dark);
3250
+ }
3251
+
3252
+ .tool-card-meta-tab.limitations-tab.active {
3253
+ color: var(--danger);
3254
+ border-bottom-color: var(--danger);
3255
+ }
3256
+
3257
+ .tool-card-meta-content {
3258
+ min-height: 40px;
3259
+ max-height: 120px;
3260
+ overflow-y: auto;
3261
+ }
3262
+
3263
+ .tool-card-meta-panel {
3264
+ display: none;
3265
+ }
3266
+
3267
+ .tool-card-meta-panel.active {
3268
+ display: block;
3269
+ }
3270
+
3271
+ .tool-card-meta-list {
3272
+ display: flex;
3273
+ flex-wrap: wrap;
3274
+ gap: 4px;
3275
+ }
3276
+
3277
+ .tool-card-meta-item {
3278
+ font-size: 11px;
3279
+ padding: 2px 6px;
3280
+ border-radius: 3px;
3281
+ background: var(--light);
3282
+ color: var(--gray);
3283
+ border: 1px solid var(--gray-light);
3284
+ transition: all 0.2s ease;
3285
+ line-height: 1.3;
3286
+ }
3287
+
3288
+ .tool-card-meta-panel.scenarios .tool-card-meta-item {
3289
+ background: rgba(57, 57, 57, 0.06);
3290
+ color: var(--dark);
3291
+ border-color: rgba(57, 57, 57, 0.12);
3292
+ }
3293
+
3294
+ .tool-card-meta-panel.scenarios .tool-card-meta-item:hover {
3295
+ background: rgba(57, 57, 57, 0.1);
3296
+ border-color: rgba(57, 57, 57, 0.2);
3297
+ }
3298
+
3299
+ .tool-card-meta-panel.limitations .tool-card-meta-item {
3300
+ background: rgba(220, 53, 69, 0.06);
3301
+ color: var(--danger);
3302
+ border-color: rgba(220, 53, 69, 0.12);
3303
+ }
3304
+
3305
+ .tool-card-meta-panel.limitations .tool-card-meta-item:hover {
3306
+ background: rgba(220, 53, 69, 0.1);
3307
+ border-color: rgba(220, 53, 69, 0.2);
3308
+ }
3309
+
3310
+ /* 单个tab时的样式 */
3311
+ .tool-card-meta-tabs.single-tab .tool-card-meta-tab {
3312
+ border-bottom: 2px solid var(--primary);
3313
+ color: var(--primary);
3314
+ }
3315
+
3316
+ .tool-card-meta-tabs.single-tab.scenarios-only .tool-card-meta-tab {
3317
+ border-bottom-color: var(--dark);
3318
+ color: var(--dark);
3319
+ }
3320
+
3321
+ .tool-card-meta-tabs.single-tab.limitations-only .tool-card-meta-tab {
3322
+ border-bottom-color: var(--danger);
3323
+ color: var(--danger);
3324
+ }
3325
+
3326
+ /* 聚合视图样式 */
3327
+ .tools-aggregated-view {
3328
+ animation: fadeIn 0.3s ease;
3329
+ padding: 0 8px 0 0;
3330
+ height: 100%;
3331
+ overflow: hidden;
3332
+ }
3333
+
3334
+ .aggregated-view {
3335
+ width: 100%;
3336
+ height: 100%;
3337
+ display: flex;
3338
+ gap: 18px;
3339
+ }
3340
+
3341
+ .aggregated-sidebar {
3342
+ width: 280px;
3343
+ height: 100%;
3344
+ flex-shrink: 0;
3345
+ background: white;
3346
+ border-right: 1px solid var(--border);
3347
+ /* border-radius: 12px; */
3348
+ overflow: hidden;
3349
+ display: flex;
3350
+ flex-direction: column;
3351
+ }
3352
+
3353
+ .aggregated-sidebar-header {
3354
+ padding: 13px 25px;
3355
+ background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
3356
+ border-bottom: 1px solid var(--border);
3357
+ flex-shrink: 0;
3358
+ }
3359
+
3360
+ .aggregated-sidebar-header h3 {
3361
+ font-size: 16px;
3362
+ font-weight: 600;
3363
+ color: var(--dark);
3364
+ margin: 0;
3365
+ }
3366
+
3367
+ .aggregated-sidebar-list {
3368
+ flex: 1;
3369
+ overflow-y: auto;
3370
+ padding: 8px;
3371
+ }
3372
+
3373
+ .aggregated-content {
3374
+ flex: 1;
3375
+ height: 100%;
3376
+ display: flex;
3377
+ flex-direction: column;
3378
+ min-width: 0;
3379
+ overflow-y: auto;
3380
+ padding: 11px 20px 0 0;
3381
+ }
3382
+
3383
+ .aggregated-content-header {
3384
+ margin-bottom: 24px;
3385
+ padding-bottom: 16px;
3386
+ border-bottom: 2px solid var(--border);
3387
+ flex-shrink: 0;
3388
+ }
3389
+
3390
+ .aggregated-content-header h3 {
3391
+ font-size: 20px;
3392
+ font-weight: 600;
3393
+ color: var(--dark);
3394
+ margin: 0;
3395
+ }
3396
+
3397
+ .aggregated-content-grid {
3398
+ display: grid;
3399
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
3400
+ gap: 20px;
3401
+ padding-bottom: 32px;
3402
+ }
3403
+
3404
+ .aggregated-header {
3405
+ margin-bottom: 32px;
3406
+ padding-bottom: 16px;
3407
+ border-bottom: 2px solid var(--border);
3408
+ flex-shrink: 0;
3409
+ }
3410
+
3411
+ .aggregated-header h3 {
3412
+ font-size: 22px;
3413
+ font-weight: 600;
3414
+ color: var(--dark);
3415
+ margin: 0;
3416
+ }
3417
+
3418
+ /* 侧边栏列表项 */
3419
+ .sidebar-item {
3420
+ padding: 12px 16px;
3421
+ margin-bottom: 4px;
3422
+ border-radius: 8px;
3423
+ cursor: pointer;
3424
+ transition: all 0.2s ease;
3425
+ display: flex;
3426
+ align-items: center;
3427
+ gap: 12px;
3428
+ background: transparent;
3429
+ }
3430
+
3431
+ .sidebar-item:hover {
3432
+ background: #f8f9fa;
3433
+ }
3434
+
3435
+ .sidebar-item.active {
3436
+ background: linear-gradient(135deg, #f5f5f5 0%, #f0f7ff 100%);
3437
+ border-left: 3px solid var(--primary);
3438
+ padding-left: 13px;
3439
+ }
3440
+
3441
+ .sidebar-item-icon {
3442
+ width: 36px;
3443
+ height: 36px;
3444
+ border-radius: 8px;
3445
+ display: flex;
3446
+ align-items: center;
3447
+ justify-content: center;
3448
+ font-size: 18px;
3449
+ background: linear-gradient(135deg, #d6d6d6, #ffffff);
3450
+ color: white;
3451
+ flex-shrink: 0;
3452
+ border: 1px solid #e0e0e0;
3453
+ }
3454
+
3455
+ .sidebar-item.active .sidebar-item-icon {
3456
+ box-shadow: 0 2px 8px rgba(66, 153, 225, 0.3);
3457
+ }
3458
+
3459
+ .sidebar-item-content {
3460
+ flex: 1;
3461
+ min-width: 0;
3462
+ }
3463
+
3464
+ .sidebar-item-name {
3465
+ font-size: 14px;
3466
+ font-weight: 600;
3467
+ color: var(--dark);
3468
+ margin-bottom: 2px;
3469
+ white-space: nowrap;
3470
+ overflow: hidden;
3471
+ text-overflow: ellipsis;
3472
+ display: flex;
3473
+ align-items: center;
3474
+ gap: 4px;
3475
+ }
3476
+
3477
+ .sidebar-item-name .featured-badge {
3478
+ flex-shrink: 0;
3479
+ font-size: 12px;
3480
+ }
3481
+
3482
+ .sidebar-item-count {
3483
+ font-size: 12px;
3484
+ color: var(--gray);
3485
+ }
3486
+
3487
+ .sidebar-item.active .sidebar-item-name {
3488
+ color: var(--primary);
3489
+ }
3490
+
3491
+ /* 类别网格 */
3492
+ .category-grid {
3493
+ display: grid;
3494
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
3495
+ gap: 20px;
3496
+ }
3497
+
3498
+ .category-card {
3499
+ background: white;
3500
+ border: 1px solid var(--border);
3501
+ border-radius: 12px;
3502
+ padding: 24px;
3503
+ text-align: center;
3504
+ cursor: pointer;
3505
+ transition: all 0.3s ease;
3506
+ height: 100%;
3507
+ }
3508
+
3509
+ .category-card:hover {
3510
+ transform: translateY(-4px);
3511
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
3512
+ border-color: var(--primary);
3513
+ }
3514
+
3515
+ .category-icon {
3516
+ width: 56px;
3517
+ height: 56px;
3518
+ margin: 0 auto 16px;
3519
+ background: linear-gradient(135deg, var(--primary), #6366f1);
3520
+ border-radius: 16px;
3521
+ display: flex;
3522
+ align-items: center;
3523
+ justify-content: center;
3524
+ color: white;
3525
+ font-size: 24px;
3526
+ box-shadow: 0 4px 12px rgba(57, 57, 57, 0.2);
3527
+ }
3528
+
3529
+ .category-name {
3530
+ font-size: 16px;
3531
+ font-weight: 600;
3532
+ color: var(--dark);
3533
+ margin-bottom: 6px;
3534
+ }
3535
+
3536
+ .category-count {
3537
+ font-size: 13px;
3538
+ color: var(--gray);
3539
+ }
3540
+
3541
+ /* 标签视图特殊布局 */
3542
+ #tagView.aggregated-view {
3543
+ flex-direction: column;
3544
+ overflow-y: auto;
3545
+ padding: 0 20px 32px 20px;
3546
+ }
3547
+
3548
+ /* 标签云 */
3549
+ .tag-cloud {
3550
+ display: flex;
3551
+ flex-wrap: wrap;
3552
+ gap: 10px;
3553
+ margin-bottom: 32px;
3554
+ padding: 20px;
3555
+ background: var(--light);
3556
+ border-radius: 12px;
3557
+ flex-shrink: 0;
3558
+ }
3559
+
3560
+ .tag-item {
3561
+ padding: 8px 16px;
3562
+ background: white;
3563
+ border: 1px solid var(--border);
3564
+ border-radius: 10px;
3565
+ font-size: 14px;
3566
+ color: var(--gray);
3567
+ cursor: pointer;
3568
+ transition: all 0.2s ease;
3569
+ font-weight: 500;
3570
+ }
3571
+
3572
+ .tag-item:hover {
3573
+ background: var(--primary);
3574
+ color: white;
3575
+ border-color: var(--primary);
3576
+ transform: translateY(-1px);
3577
+ }
3578
+
3579
+ .tag-item.active {
3580
+ background: var(--primary);
3581
+ color: white;
3582
+ border-color: var(--primary);
3583
+ box-shadow: 0 2px 8px rgba(57, 57, 57, 0.2);
3584
+ }
3585
+
3586
+ .tag-tools-list {
3587
+ display: grid;
3588
+ grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
3589
+ gap: 20px;
3590
+ padding-bottom: 20px;
3591
+ }
3592
+
3593
+ /* 作者网格 */
3594
+ .author-grid {
3595
+ display: grid;
3596
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
3597
+ gap: 24px;
3598
+ }
3599
+
3600
+ .author-card {
3601
+ background: white;
3602
+ border: 1px solid var(--border);
3603
+ border-radius: 16px;
3604
+ padding: 28px;
3605
+ text-align: center;
3606
+ cursor: pointer;
3607
+ transition: all 0.3s ease;
3608
+ height: 100%;
3609
+ }
3610
+
3611
+ .author-card:hover {
3612
+ transform: translateY(-4px);
3613
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.12);
3614
+ border-color: var(--primary);
3615
+ }
3616
+
3617
+ .author-avatar {
3618
+ width: 72px;
3619
+ height: 72px;
3620
+ margin: 0 auto 16px;
3621
+ border-radius: 50%;
3622
+ background: linear-gradient(135deg, var(--primary), #6366f1);
3623
+ display: flex;
3624
+ align-items: center;
3625
+ justify-content: center;
3626
+ color: white;
3627
+ font-size: 28px;
3628
+ font-weight: 600;
3629
+ box-shadow: 0 4px 16px rgba(57, 57, 57, 0.2);
3630
+ }
3631
+
3632
+ .author-name {
3633
+ font-size: 18px;
3634
+ font-weight: 600;
3635
+ color: var(--dark);
3636
+ margin-bottom: 6px;
3637
+ }
3638
+
3639
+ .author-role {
3640
+ font-size: 14px;
3641
+ color: var(--gray);
3642
+ margin-bottom: 12px;
3643
+ font-weight: 500;
3644
+ }
3645
+
3646
+ .author-bio {
3647
+ font-size: 13px;
3648
+ color: var(--gray);
3649
+ line-height: 1.5;
3650
+ margin-bottom: 16px;
3651
+ }
3652
+
3653
+ .author-stats {
3654
+ display: flex;
3655
+ justify-content: center;
3656
+ gap: 24px;
3657
+ padding-top: 16px;
3658
+ border-top: 1px solid var(--gray-light);
3659
+ }
3660
+
3661
+ .author-stat {
3662
+ text-align: center;
3663
+ }
3664
+
3665
+ .author-stat-value {
3666
+ font-size: 20px;
3667
+ font-weight: 600;
3668
+ color: var(--dark);
3669
+ }
3670
+
3671
+ .author-stat-label {
3672
+ font-size: 12px;
3673
+ color: var(--gray);
3674
+ margin-top: 2px;
3675
+ }
3676
+
3677
+ /* 上传弹窗样式 */
3678
+ .upload-area {
3679
+ border: 2px dashed var(--border);
3680
+ border-radius: 12px;
3681
+ padding: 40px;
3682
+ text-align: center;
3683
+ transition: all 0.3s ease;
3684
+ margin-bottom: 24px;
3685
+ background: rgba(248, 249, 250, 0.5);
3686
+ }
3687
+
3688
+ .upload-area.dragover {
3689
+ border-color: var(--primary);
3690
+ background: rgba(57, 57, 57, 0.05);
3691
+ transform: scale(1.01);
3692
+ }
3693
+
3694
+ .upload-content {
3695
+ display: flex;
3696
+ flex-direction: column;
3697
+ align-items: center;
3698
+ gap: 20px;
3699
+ }
3700
+
3701
+ .upload-icon {
3702
+ color: var(--gray);
3703
+ opacity: 0.7;
3704
+ }
3705
+
3706
+ .upload-title {
3707
+ font-size: 16px;
3708
+ font-weight: 500;
3709
+ color: var(--dark);
3710
+ margin: 0;
3711
+ }
3712
+
3713
+ .upload-subtitle {
3714
+ font-size: 14px;
3715
+ color: var(--gray);
3716
+ margin: 0;
3717
+ line-height: 1.4;
3718
+ }
3719
+
3720
+ .upload-progress {
3721
+ margin-top: 24px;
3722
+ }
3723
+
3724
+ .progress-bar {
3725
+ width: 100%;
3726
+ height: 10px;
3727
+ background: var(--light);
3728
+ border-radius: 6px;
3729
+ overflow: hidden;
3730
+ margin-bottom: 12px;
3731
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
3732
+ }
3733
+
3734
+ .progress-fill {
3735
+ height: 100%;
3736
+ background: linear-gradient(90deg, var(--primary), #6366f1);
3737
+ width: 0%;
3738
+ transition: width 0.3s ease;
3739
+ border-radius: 6px;
3740
+ }
3741
+
3742
+ .progress-text {
3743
+ font-size: 14px;
3744
+ color: var(--gray);
3745
+ text-align: center;
3746
+ font-weight: 500;
3747
+ }
3748
+
3749
+ .upload-requirements {
3750
+ background: var(--light);
3751
+ padding: 20px;
3752
+ border-radius: 12px;
3753
+ border: 1px solid var(--gray-light);
3754
+ }
3755
+
3756
+ .upload-requirements h4 {
3757
+ font-size: 14px;
3758
+ font-weight: 600;
3759
+ color: var(--dark);
3760
+ margin-bottom: 12px;
3761
+ }
3762
+
3763
+ .upload-requirements ul {
3764
+ list-style: none;
3765
+ padding: 0;
3766
+ margin: 0;
3767
+ }
3768
+
3769
+ .upload-requirements li {
3770
+ font-size: 13px;
3771
+ color: var(--gray);
3772
+ padding: 6px 0;
3773
+ padding-left: 20px;
3774
+ position: relative;
3775
+ line-height: 1.4;
3776
+ }
3777
+
3778
+ .upload-requirements li::before {
3779
+ content: '•';
3780
+ position: absolute;
3781
+ left: 0;
3782
+ color: var(--primary);
3783
+ font-weight: bold;
3784
+ }
3785
+
3786
+ /* 工具详情弹窗样式 - 已迁移到 markdown.css */
3787
+ /* 新样式请查看 css/markdown.css 文件 */
3788
+
3789
+ /* 空状态 */
3790
+ .tools-empty {
3791
+ display: flex;
3792
+ flex-direction: column;
3793
+ align-items: center;
3794
+ justify-content: center;
3795
+ gap: 16px;
3796
+ color: var(--gray);
3797
+ padding: 60px 20px;
3798
+ }
3799
+
3800
+ .tools-empty-icon {
3801
+ font-size: 64px;
3802
+ opacity: 0.5;
3803
+ }
3804
+
3805
+ .tools-empty-text {
3806
+ font-size: 20px;
3807
+ font-weight: 500;
3808
+ color: var(--dark);
3809
+ }
3810
+
3811
+ .tools-empty-hint {
3812
+ font-size: 14px;
3813
+ color: var(--gray);
3814
+ }
3815
+
3816
+ /* 动画效果 */
3817
+ @keyframes fadeIn {
3818
+ from {
3819
+ opacity: 0;
3820
+ transform: translateY(10px);
3821
+ }
3822
+ to {
3823
+ opacity: 1;
3824
+ transform: translateY(0);
3825
+ }
3826
+ }
3827
+
3828
+ /* 响应式设计 */
3829
+ @media (max-width: 768px) {
3830
+ .tools-header {
3831
+ flex-direction: column;
3832
+ gap: 16px;
3833
+ align-items: stretch;
3834
+ }
3835
+
3836
+ .tools-header-left,
3837
+ .tools-header-right {
3838
+ flex-direction: column;
3839
+ gap: 12px;
3840
+ }
3841
+
3842
+ .skills-search,
3843
+ .tools-search {
3844
+ width: 100%;
3845
+ }
3846
+
3847
+ .tools-filter {
3848
+ justify-content: center;
3849
+ }
3850
+
3851
+ .tools-grid {
3852
+ grid-template-columns: 1fr;
3853
+ }
3854
+
3855
+ .category-grid,
3856
+ .tag-tools-list,
3857
+ .author-grid {
3858
+ grid-template-columns: 1fr;
3859
+ }
3860
+ }
3861
+
3862
+ /* 作者详情页头部样式 */
3863
+ .author-header {
3864
+ display: flex;
3865
+ align-items: center;
3866
+ gap: 16px;
3867
+ padding: 16px 20px;
3868
+ /* background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); */
3869
+ background: linear-gradient(135deg, #c6c6c6 0%, #ededed 100%);
3870
+ border-radius: 12px;
3871
+ color: white;
3872
+ margin-bottom: 20px;
3873
+ }
3874
+
3875
+ .author-header-avatar {
3876
+ width: 64px;
3877
+ height: 64px;
3878
+ border-radius: 50%;
3879
+ display: flex;
3880
+ align-items: center;
3881
+ justify-content: center;
3882
+ font-size: 28px;
3883
+ font-weight: bold;
3884
+ background: rgba(255, 255, 255, 0.2);
3885
+ flex-shrink: 0;
3886
+ border: 2px solid rgba(255, 255, 255, 0.3);
3887
+ }
3888
+
3889
+ .author-header-avatar-default {
3890
+ background: rgba(255, 255, 255, 0.2);
3891
+ }
3892
+
3893
+ .author-header-info {
3894
+ flex: 1;
3895
+ min-width: 0;
3896
+ }
3897
+
3898
+ .author-header-info h3 {
3899
+ margin: 0 0 8px 0;
3900
+ font-size: 24px;
3901
+ font-weight: 600;
3902
+ color: white;
3903
+ display: flex;
3904
+ align-items: center;
3905
+ gap: 10px;
3906
+ flex-wrap: wrap;
3907
+ }
3908
+
3909
+ .author-header-github-inline {
3910
+ display: inline-flex;
3911
+ align-items: center;
3912
+ justify-content: center;
3913
+ }
3914
+
3915
+ .author-header-github-inline .author-header-link {
3916
+ padding: 6px 10px;
3917
+ background: rgba(255, 255, 255, 0.2);
3918
+ border-radius: 8px;
3919
+ }
3920
+
3921
+ .author-header-github-inline .author-header-link:hover {
3922
+ background: rgba(255, 255, 255, 0.3);
3923
+ transform: translateY(-1px);
3924
+ }
3925
+
3926
+ .author-header-github-inline svg {
3927
+ width: 16px;
3928
+ height: 22px;
3929
+ }
3930
+
3931
+ .author-header-homepage-inline {
3932
+ display: inline-flex;
3933
+ align-items: center;
3934
+ margin-left: 12px;
3935
+ }
3936
+
3937
+ .author-header-homepage-inline .author-header-link {
3938
+ padding: 4px 8px;
3939
+ background: rgba(255, 255, 255, 0.12);
3940
+ font-size: 11px;
3941
+ }
3942
+
3943
+ .author-header-homepage-inline svg {
3944
+ width: 14px;
3945
+ height: 14px;
3946
+ }
3947
+
3948
+ .author-header-bio {
3949
+ font-size: 14px;
3950
+ color: rgba(255, 255, 255, 0.9);
3951
+ line-height: 1.5;
3952
+ margin-bottom: 8px;
3953
+ }
3954
+
3955
+ .author-header-links {
3956
+ display: flex;
3957
+ gap: 8px;
3958
+ flex-wrap: wrap;
3959
+ }
3960
+
3961
+ .author-header-link {
3962
+ display: inline-flex;
3963
+ align-items: center;
3964
+ gap: 4px;
3965
+ padding: 4px 10px;
3966
+ background: rgba(255, 255, 255, 0.15);
3967
+ border-radius: 6px;
3968
+ color: white;
3969
+ text-decoration: none;
3970
+ font-size: 12px;
3971
+ transition: all 0.2s ease;
3972
+ }
3973
+
3974
+ .author-header-link:hover {
3975
+ background: rgba(255, 255, 255, 0.25);
3976
+ transform: translateY(-1px);
3977
+ }
3978
+
3979
+ /* 作者侧边栏头像样式 */
3980
+ .sidebar-item-avatar-default {
3981
+ background: #f7f8fa;
3982
+ border: 1px solid #eceaea;
3983
+ }
3984
+
3985
+ /* 精选作者徽章 */
3986
+ .featured-badge {
3987
+ font-size: 14px;
3988
+ margin-left: 4px;
3989
+ }
3990
+
3991
+ /* 作者侧边栏头像容器 */
3992
+ .sidebar-item-avatar {
3993
+ width: 40px;
3994
+ height: 40px;
3995
+ border-radius: 50%;
3996
+ display: flex;
3997
+ align-items: center;
3998
+ justify-content: center;
3999
+ font-size: 18px;
4000
+ font-weight: bold;
4001
+ color: white;
4002
+ flex-shrink: 0;
4003
+ overflow: hidden;
4004
+ position: relative;
4005
+ border: 1px solid #eceaea;
4006
+ padding: 2px;
4007
+ }
4008
+
4009
+ .sidebar-item-avatar-img {
4010
+ width: 100%;
4011
+ height: 100%;
4012
+ object-fit: cover;
4013
+ border-radius: 50%;
4014
+ opacity: 0;
4015
+ transition: opacity 0.3s ease;
4016
+ }
4017
+
4018
+ .sidebar-item-avatar-img.loaded,
4019
+ .sidebar-item-avatar-img.hidden {
4020
+ opacity: 1;
4021
+ }
4022
+
4023
+ .sidebar-item-avatar-fallback {
4024
+ position: absolute;
4025
+ inset: 0;
4026
+ display: flex;
4027
+ align-items: center;
4028
+ justify-content: center;
4029
+ background: inherit;
4030
+ border-radius: 50%;
4031
+ font-size: 16px;
4032
+ font-weight: 600;
4033
+ z-index: 1;
4034
+ }
4035
+
4036
+ .sidebar-item-avatar-img.loaded,
4037
+ .sidebar-item-avatar-img:not(.hidden) {
4038
+ opacity: 1;
4039
+ z-index: 2;
4040
+ }
4041
+
4042
+ .sidebar-item-avatar-img.loaded ~ .sidebar-item-avatar-fallback,
4043
+ .sidebar-item-avatar-img:not(.hidden) ~ .sidebar-item-avatar-fallback {
4044
+ display: none;
4045
+ }
4046
+
4047
+ /* 作者详情页头像容器 */
4048
+ .author-header-avatar {
4049
+ width: 55px;
4050
+ height: 55px;
4051
+ border-radius: 50%;
4052
+ display: flex;
4053
+ align-items: center;
4054
+ justify-content: center;
4055
+ /* background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); */
4056
+ color: white;
4057
+ font-size: 28px;
4058
+ font-weight: bold;
4059
+ flex-shrink: 0;
4060
+ overflow: hidden;
4061
+ position: relative;
4062
+ border: 1px solid rgba(255, 255, 255, 0.3);
4063
+ padding: 2px;
4064
+ }
4065
+
4066
+ .author-header-avatar-img {
4067
+ width: 100%;
4068
+ height: 100%;
4069
+ object-fit: cover;
4070
+ border-radius: 50%;
4071
+ opacity: 0;
4072
+ transition: opacity 0.3s ease;
4073
+ }
4074
+
4075
+ .author-header-avatar-img.loaded,
4076
+ .author-header-avatar-img.hidden {
4077
+ opacity: 1;
4078
+ }
4079
+
4080
+ .author-header-avatar-fallback {
4081
+ position: absolute;
4082
+ inset: 0;
4083
+ display: flex;
4084
+ align-items: center;
4085
+ justify-content: center;
4086
+ background: inherit;
4087
+ border-radius: 50%;
4088
+ font-size: 24px;
4089
+ font-weight: 600;
4090
+ z-index: 1;
4091
+ }
4092
+
4093
+ .author-header-avatar-img.loaded,
4094
+ .author-header-avatar-img:not(.hidden) {
4095
+ opacity: 1;
4096
+ z-index: 2;
4097
+ }
4098
+
4099
+ .author-header-avatar-img.loaded ~ .author-header-avatar-fallback,
4100
+ .author-header-avatar-img:not(.hidden) ~ .author-header-avatar-fallback {
4101
+ display: none;
4102
+ }
4103
+
4104
+ /* 响应式适配 */
4105
+ @media (max-width: 768px) {
4106
+ .author-header {
4107
+ flex-direction: column;
4108
+ gap: 12px;
4109
+ padding: 20px;
4110
+ }
4111
+
4112
+ .author-header-avatar {
4113
+ width: 56px;
4114
+ height: 56px;
4115
+ font-size: 24px;
4116
+ }
4117
+
4118
+ .author-header-info h3 {
4119
+ font-size: 24px;
4120
+ }
4121
+
4122
+ .author-header-bio {
4123
+ font-size: 14px;
4124
+ }
4125
+
4126
+ .author-header-links {
4127
+ gap: 8px;
4128
+ }
4129
+
4130
+ .sidebar-item-avatar {
4131
+ width: 36px;
4132
+ height: 36px;
4133
+ font-size: 16px;
4134
+ }
4135
+ }
4136
+
4137
+ @media (max-width: 480px) {
4138
+ .author-header {
4139
+ padding: 16px;
4140
+ }
4141
+
4142
+ .author-header-avatar {
4143
+ width: 48px;
4144
+ height: 48px;
4145
+ font-size: 20px;
4146
+ }
4147
+
4148
+ .author-header-info h3 {
4149
+ font-size: 20px;
4150
+ }
4151
+
4152
+ .author-header-bio {
4153
+ font-size: 13px;
4154
+ }
4155
+
4156
+ .sidebar-item-avatar {
4157
+ width: 32px;
4158
+ height: 32px;
4159
+ font-size: 14px;
4160
+ }
4161
+ }
4162
+
4163
+ /* 工具卡片作者头像样式 */
4164
+ .tool-card-author {
4165
+ display: flex;
4166
+ align-items: center;
4167
+ gap: 8px;
4168
+ }
4169
+
4170
+ .tool-card-author-avatar {
4171
+ width: 24px;
4172
+ height: 24px;
4173
+ border-radius: 50%;
4174
+ display: flex;
4175
+ align-items: center;
4176
+ justify-content: center;
4177
+ font-size: 12px;
4178
+ font-weight: bold;
4179
+ color: white;
4180
+ /* background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); */
4181
+ background: #f7f8fa;
4182
+ overflow: hidden;
4183
+ flex-shrink: 0;
4184
+ border: 1px solid #e7e7e7;
4185
+ }
4186
+
4187
+ .tool-card-author-avatar img {
4188
+ width: 100%;
4189
+ height: 100%;
4190
+ object-fit: cover;
4191
+ border-radius: 50%;
4192
+ padding: 2px;
4193
+ }
4194
+
4195
+ .tool-card-author-avatar-default {
4196
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
4197
+ }
4198
+
4199
+ /* 作者详情页GitHub头像样式 */
4200
+ .author-header-avatar-github {
4201
+ background: transparent !important;
4202
+ border: none !important;
4203
+ box-shadow: none !important;
4204
+ }
4205
+
4206
+ .author-header-avatar-github img {
4207
+ width: 64px;
4208
+ height: 64px;
4209
+ border-radius: 50%;
4210
+ object-fit: cover;
4211
+ border: 3px solid rgba(255, 255, 255, 0.4);
4212
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.15);
4213
+ }
4214
+
4215
+ /* 作者侧边栏GitHub头像样式 */
4216
+ .sidebar-item-avatar-github {
4217
+ background: transparent !important;
4218
+ border: none !important;
4219
+ box-shadow: none !important;
4220
+ }
4221
+
4222
+ .sidebar-item-avatar-github img {
4223
+ width: 40px;
4224
+ height: 40px;
4225
+ border-radius: 50%;
4226
+ object-fit: cover;
4227
+ border: 2px solid rgba(255, 255, 255, 0.3);
4228
+ }
4229
+
4230
+ /* 响应式适配 */
4231
+ @media (max-width: 768px) {
4232
+ .tool-card-author-avatar {
4233
+ width: 20px;
4234
+ height: 20px;
4235
+ font-size: 10px;
4236
+ }
4237
+
4238
+ .sidebar-item-avatar-github img {
4239
+ width: 36px;
4240
+ height: 36px;
4241
+ }
4242
+
4243
+ .author-header-avatar-github img {
4244
+ width: 56px;
4245
+ height: 56px;
4246
+ }
4247
+ }
4248
+
4249
+ @media (max-width: 480px) {
4250
+ .tool-card-author-avatar {
4251
+ width: 18px;
4252
+ height: 18px;
4253
+ font-size: 9px;
4254
+ }
4255
+
4256
+ .sidebar-item-avatar-github img {
4257
+ width: 32px;
4258
+ height: 32px;
4259
+ }
4260
+
4261
+ .author-header-avatar-github img {
4262
+ width: 48px;
4263
+ height: 48px;
4264
+ }
4265
+ }
4266
+
4267
+ /* ===== Skills Area 主容器 ===== */
4268
+ .skills-area {
4269
+ flex: 1;
4270
+ display: flex;
4271
+ flex-direction: column;
4272
+ background: var(--light);
4273
+ border-left: 1px solid var(--border);
4274
+ overflow: hidden;
4275
+ }
4276
+
4277
+ /* ===== Skills Header ===== */
4278
+ .skills-header {
4279
+ display: flex;
4280
+ align-items: center;
4281
+ justify-content: space-between;
4282
+ padding: 20px 32px 19px;
4283
+ background: #fafafa;
4284
+ border-bottom: 1px solid var(--border);
4285
+ flex-shrink: 0;
4286
+ }
4287
+
4288
+ .skills-header-left {
4289
+ display: flex;
4290
+ align-items: center;
4291
+ gap: 24px;
4292
+ }
4293
+
4294
+ .skills-title {
4295
+ display: flex;
4296
+ align-items: center;
4297
+ gap: 10px;
4298
+ font-size: 24px;
4299
+ font-weight: 600;
4300
+ color: var(--dark);
4301
+ margin: 0;
4302
+ }
4303
+
4304
+ .skills-title-icon {
4305
+ color: #6366f1;
4306
+ }
4307
+
4308
+
4309
+ .skills-header-right {
4310
+ display: flex;
4311
+ align-items: center;
4312
+ gap: 20px;
4313
+ }
4314
+
4315
+ /* ===== Skills Filters ===== */
4316
+ .skills-filters {
4317
+ display: flex;
4318
+ align-items: center;
4319
+ justify-content: space-between;
4320
+ padding: 12px 24px;
4321
+ background: var(--white);
4322
+ border-bottom: 1px solid var(--border);
4323
+ flex-shrink: 0;
4324
+ }
4325
+
4326
+ .filter-tabs {
4327
+ display: flex;
4328
+ gap: 8px;
4329
+ }
4330
+
4331
+ .filter-tab {
4332
+ display: flex;
4333
+ align-items: center;
4334
+ gap: 6px;
4335
+ padding: 8px 16px;
4336
+ border: none;
4337
+ background: transparent;
4338
+ border-radius: 9999px;
4339
+ font-size: 14px;
4340
+ font-weight: 500;
4341
+ color: var(--gray);
4342
+ cursor: pointer;
4343
+ transition: all 0.15s ease;
4344
+ }
4345
+
4346
+ .filter-tab:hover {
4347
+ background: var(--light);
4348
+ color: var(--dark);
4349
+ }
4350
+
4351
+ .filter-tab.active {
4352
+ background: #6366f1;
4353
+ color: var(--white);
4354
+ }
4355
+
4356
+ .filter-badge {
4357
+ font-size: 11px;
4358
+ padding: 2px 8px;
4359
+ border-radius: 9999px;
4360
+ font-weight: 500;
4361
+ }
4362
+
4363
+ .filter-badge.built-in {
4364
+ background: #fef3c7;
4365
+ color: #92400e;
4366
+ }
4367
+
4368
+ .filter-badge.custom {
4369
+ background: #dcfce7;
4370
+ color: #166534;
4371
+ }
4372
+
4373
+ .filter-tab.active .filter-badge {
4374
+ background: rgba(255,255,255,0.2);
4375
+ color: var(--white);
4376
+ }
4377
+
4378
+ .view-toggle {
4379
+ display: flex;
4380
+ gap: 4px;
4381
+ padding: 4px;
4382
+ background: var(--light);
4383
+ border-radius: 10px;
4384
+ }
4385
+
4386
+ .view-btn {
4387
+ padding: 6px 10px;
4388
+ border: none;
4389
+ background: transparent;
4390
+ border-radius: 6px;
4391
+ cursor: pointer;
4392
+ color: var(--gray);
4393
+ transition: all 0.15s ease;
4394
+ }
4395
+
4396
+ .view-btn:hover {
4397
+ color: var(--dark);
4398
+ }
4399
+
4400
+ .view-btn.active {
4401
+ background: var(--white);
4402
+ color: #6366f1;
4403
+ box-shadow: 0 1px 2px rgba(0,0,0,0.05);
4404
+ }
4405
+