@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,1753 @@
1
+ /*
2
+ * skills.css - 技能编辑器样式(统一深灰主题)
3
+ */
4
+
5
+ :root {
6
+ --skill-sidebar-width: 280px;
7
+ --skill-file-tree-width: 280px; /* 宽度从 240px 增加到 280px */
8
+
9
+ /* 统一使用项目主色调 */
10
+ --skill-primary: #393939;
11
+ --skill-primary-light: #f5f5f5;
12
+ --skill-primary-dark: #1a1a1a;
13
+
14
+ /* 状态颜色 */
15
+ --skill-success: #28a745;
16
+ --skill-warning: #ffc107;
17
+ --skill-error: #dc3545;
18
+
19
+ /* 背景色 */
20
+ --skill-bg-page: #f8f9fa;
21
+ --skill-bg-sidebar: #ffffff;
22
+ --skill-bg-hover: #f0f0f0;
23
+ --skill-bg-active: rgba(57, 57, 57, 0.05);
24
+
25
+ /* 边框 */
26
+ --skill-border: #e0e0e0;
27
+ --skill-border-active: #393939;
28
+
29
+ /* 文字颜色 */
30
+ --skill-text-main: #1a1a1a;
31
+ --skill-text-muted: #6c757d;
32
+ --skill-text-label: #6b7280;
33
+
34
+ /* 字体 */
35
+ --skill-font-sans: 'Inter', system-ui, sans-serif;
36
+ --skill-font-mono: 'Fira Code', 'Menlo', 'Monaco', monospace;
37
+
38
+ /* Z-Index 规范 */
39
+ --z-dropdown: 100;
40
+ --z-modal: 200;
41
+ --z-tooltip: 300;
42
+ --z-toast: 400;
43
+ --z-overlay: 500;
44
+ }
45
+
46
+ /* 全局布局 */
47
+ .skills-layout {
48
+ display: flex;
49
+ height: 100%;
50
+ width: 100%;
51
+ background-color: var(--skill-bg-sidebar);
52
+ font-family: var(--skill-font-sans);
53
+ color: var(--skill-text-main);
54
+ overflow: hidden;
55
+ }
56
+
57
+ /* 侧边栏 */
58
+ .skills-sidebar {
59
+ width: var(--skill-sidebar-width);
60
+ height: 100%;
61
+ border-right: 1px solid var(--skill-border);
62
+ display: flex;
63
+ flex-direction: column;
64
+ flex-shrink: 0;
65
+ }
66
+
67
+ /* 侧边栏头部 */
68
+ .skill-sidebar-header {
69
+ padding: 15px;
70
+ display: flex;
71
+ flex-direction: column;
72
+ gap: 12px;
73
+ border-bottom: 1px solid var(--skill-border);
74
+ }
75
+
76
+ /* 全宽新建按钮 */
77
+ .new-skill-btn-full {
78
+ /* width: 100%; */
79
+ /* height: 48px; */
80
+ background: var(--primary);
81
+ padding: 12px 16px;
82
+ color: #ffffff;
83
+ border: none;
84
+ gap: 8px;
85
+ border-radius: 10px;
86
+ font-size: 15px;
87
+ font-weight: 500;
88
+ cursor: pointer;
89
+ transition: background-color 0.2s ease;
90
+ display: flex;
91
+ align-items: center;
92
+ justify-content: center;
93
+ box-shadow: 0 1px 2px rgba(0,0,0,0.05);
94
+ }
95
+
96
+ .new-skill-btn-full:hover {
97
+ background: #333;
98
+ transform: translateY(-1px);
99
+ box-shadow: 0 4px 12px rgba(0,0,0,0.1);
100
+ }
101
+
102
+ .new-skill-btn-full:active {
103
+ background-color: #222222;
104
+ }
105
+
106
+ .new-skill-btn-full:focus-visible {
107
+ outline: 2px solid var(--skill-primary);
108
+ outline-offset: 2px;
109
+ }
110
+
111
+ /* 统一的焦点状态 */
112
+ .new-skill-btn:focus-visible,
113
+ .folder-btn:focus-visible,
114
+ .skill-item:focus-visible,
115
+ .skill-file-item:focus-visible,
116
+ .nav-toggle-btn:focus-visible,
117
+ .publish-btn:focus-visible,
118
+ .tool-pill:focus-visible,
119
+ .sim-send-btn:focus-visible,
120
+ .skill-delete-btn:focus-visible,
121
+ .file-action-btn:focus-visible,
122
+ .clear-btn:focus-visible {
123
+ outline: 2px solid var(--skill-primary);
124
+ outline-offset: 2px;
125
+ }
126
+
127
+
128
+
129
+ .new-skill-btn.loading::after,
130
+ .publish-btn.loading::after {
131
+ content: '';
132
+ display: inline-block;
133
+ width: 14px;
134
+ height: 14px;
135
+ border: 2px solid white;
136
+ border-top-color: transparent;
137
+ border-radius: 50%;
138
+ animation: spin 0.6s linear infinite;
139
+ margin-left: 8px;
140
+ }
141
+
142
+ @keyframes spin {
143
+ to { transform: rotate(360deg); }
144
+ }
145
+
146
+
147
+
148
+
149
+
150
+ .skill-sidebar-list {
151
+ flex: 1;
152
+ overflow-y: auto;
153
+ padding: 0 16px 16px 16px;
154
+ }
155
+
156
+ .skill-sidebar-list-title {
157
+ padding: 12px 0;
158
+ font-size: 10px;
159
+ font-weight: 700;
160
+ color: var(--skill-text-label);
161
+ text-transform: uppercase;
162
+ letter-spacing: 0.1em;
163
+ }
164
+
165
+ .skill-sidebar-list-title-row {
166
+ display: flex;
167
+ justify-content: space-between;
168
+ align-items: center;
169
+ padding-right: 4px;
170
+ }
171
+
172
+ .icon-btn-small {
173
+ background: none;
174
+ border: none;
175
+ color: var(--skill-text-muted);
176
+ cursor: pointer;
177
+ display: flex;
178
+ align-items: center;
179
+ justify-content: center;
180
+ padding: 4px;
181
+ border-radius: 4px;
182
+ transition: all 0.2s;
183
+ }
184
+
185
+ .icon-btn-small:hover {
186
+ background-color: var(--skill-bg-hover);
187
+ color: var(--skill-primary);
188
+ }
189
+
190
+ .skill-item {
191
+ margin: 0;
192
+ padding: 12px;
193
+ border-radius: 8px;
194
+ display: flex;
195
+ align-items: center;
196
+ gap: 0.75rem;
197
+ cursor: pointer;
198
+ transition: all 0.2s;
199
+ border: 1px solid transparent;
200
+ }
201
+
202
+ .skill-item:hover {
203
+ transform: translateX(2px);
204
+ will-change: transform;
205
+ }
206
+
207
+ .skill-item:hover {
208
+ background-color: var(--skill-bg-hover);
209
+ }
210
+
211
+ .skill-item.active {
212
+ background-color: var(--skill-bg-active);
213
+ border-color: var(--skill-border-active);
214
+ }
215
+
216
+ .skill-item-icon-box {
217
+ width: 2.5rem;
218
+ height: 2.5rem;
219
+ background-color: #f3f4f6;
220
+ color: #9ca3af;
221
+ border-radius: 0.625rem;
222
+ display: flex;
223
+ align-items: center;
224
+ justify-content: center;
225
+ flex-shrink: 0;
226
+ }
227
+
228
+ .skill-item.active .skill-item-icon-box {
229
+ background-color: white;
230
+ color: var(--skill-primary);
231
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
232
+ }
233
+
234
+ .skill-item-info {
235
+ flex: 1;
236
+ min-width: 0;
237
+ }
238
+
239
+ .skill-item-name {
240
+ font-size: 0.875rem;
241
+ font-weight: 700;
242
+ color: #1f2937;
243
+ white-space: nowrap;
244
+ overflow: hidden;
245
+ text-overflow: ellipsis;
246
+ display: flex;
247
+ align-items: center;
248
+ gap: 0.5rem;
249
+ }
250
+
251
+ .skill-item-version {
252
+ font-size: 10px;
253
+ font-weight: 600;
254
+ background-color: #f3f4f6;
255
+ color: #6b7280;
256
+ padding: 1px 6px;
257
+ border-radius: 4px;
258
+ flex-shrink: 0;
259
+ }
260
+
261
+ .skill-item.active .skill-item-version {
262
+ background-color: var(--skill-primary-light);
263
+ color: var(--skill-primary);
264
+ }
265
+
266
+ .skill-item.active .skill-item-name {
267
+ color: var(--skill-primary);
268
+ }
269
+
270
+ .skill-item-meta {
271
+ font-size: 10px;
272
+ color: var(--skill-text-label);
273
+ margin-top: 0.125rem;
274
+ }
275
+
276
+ .skill-item-actions {
277
+ margin-left: auto;
278
+ opacity: 0;
279
+ transition: opacity 0.2s;
280
+ display: flex;
281
+ align-items: center;
282
+ }
283
+
284
+ .skill-item:hover .skill-item-actions {
285
+ opacity: 1;
286
+ }
287
+
288
+ .skill-delete-btn {
289
+ width: 24px;
290
+ height: 24px;
291
+ border-radius: 6px;
292
+ border: none;
293
+ background: transparent;
294
+ color: var(--skill-text-muted);
295
+ display: flex;
296
+ align-items: center;
297
+ justify-content: center;
298
+ cursor: pointer;
299
+ transition: all 0.2s;
300
+ }
301
+
302
+ .skill-delete-btn:hover {
303
+ background-color: #fee2e2;
304
+ color: #ef4444;
305
+ }
306
+
307
+ .active-dot {
308
+ width: 6px;
309
+ height: 6px;
310
+ background-color: var(--skill-accent);
311
+ border-radius: 50%;
312
+ }
313
+
314
+ .skill-sidebar-footer {
315
+ margin-top: auto;
316
+ padding: 16px;
317
+ border-top: 1px solid var(--skill-border);
318
+ display: flex;
319
+ align-items: center;
320
+ gap: 0.5rem;
321
+ color: var(--skill-text-label);
322
+ font-size: 12px;
323
+ font-weight: 500;
324
+ }
325
+
326
+ /* 主区域 */
327
+ .skills-main {
328
+ flex: 1;
329
+ display: flex;
330
+ flex-direction: column;
331
+ background-color: var(--skill-bg-page);
332
+ min-width: 0;
333
+ }
334
+
335
+ /* 顶部导航 */
336
+ .skill-editor-navbar {
337
+ height: 3.5rem;
338
+ background-color: white;
339
+ border-bottom: 1px solid var(--skill-border);
340
+ display: flex;
341
+ align-items: center;
342
+ justify-content: space-between;
343
+ padding: 0 1.5rem;
344
+ flex-shrink: 0;
345
+ z-index: 10;
346
+ }
347
+
348
+ .skill-navbar-left {
349
+ display: flex;
350
+ align-items: center;
351
+ gap: 0.75rem;
352
+ }
353
+
354
+ .skill-navbar-icon {
355
+ width: 2.25rem;
356
+ height: 2.25rem;
357
+ background-color: var(--skill-primary-light);
358
+ color: var(--skill-primary);
359
+ border-radius: 0.5rem;
360
+ display: flex;
361
+ align-items: center;
362
+ justify-content: center;
363
+ }
364
+
365
+ .skill-navbar-title {
366
+ font-size: 1rem;
367
+ font-weight: 700;
368
+ color: #1f2937;
369
+ }
370
+
371
+ .skill-navbar-badge {
372
+ font-size: 10px;
373
+ font-weight: 700;
374
+ padding: 0.125rem 0.5rem;
375
+ background-color: #f3f4f6;
376
+ color: var(--skill-text-muted);
377
+ border-radius: 0.25rem;
378
+ text-transform: uppercase;
379
+ }
380
+
381
+ .skill-navbar-center {
382
+ display: flex;
383
+ background-color: #f3f4f6;
384
+ padding: 0.25rem;
385
+ border-radius: 0.75rem;
386
+ }
387
+
388
+ .nav-toggle-btn {
389
+ padding: 0.375rem 1.25rem;
390
+ border-radius: 0.5rem;
391
+ font-size: 0.875rem;
392
+ font-weight: 700;
393
+ border: none;
394
+ background: none;
395
+ color: var(--skill-text-muted);
396
+ cursor: pointer;
397
+ transition: all 0.2s;
398
+ }
399
+
400
+ .nav-toggle-btn.active {
401
+ background-color: white;
402
+ color: var(--skill-primary);
403
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
404
+ }
405
+
406
+ .skill-navbar-right {
407
+ display: flex;
408
+ align-items: center;
409
+ gap: 0.75rem;
410
+ }
411
+
412
+ .publish-btn {
413
+ background-color: var(--skill-success);
414
+ color: white;
415
+ height: 2.25rem;
416
+ padding: 0 1.25rem;
417
+ border-radius: 0.625rem;
418
+ font-weight: 700;
419
+ font-size: 0.875rem;
420
+ border: none;
421
+ cursor: pointer;
422
+ box-shadow: 0 1px 2px rgba(0,0,0,0.05);
423
+ }
424
+
425
+ .publish-btn:hover {
426
+ filter: brightness(1.05);
427
+ }
428
+
429
+ .export-btn {
430
+ background-color: #f3f4f6;
431
+ color: #4b5563;
432
+ width: 2.25rem;
433
+ height: 2.25rem;
434
+ border-radius: 0.625rem;
435
+ display: flex;
436
+ align-items: center;
437
+ justify-content: center;
438
+ border: 1px solid #e5e7eb;
439
+ cursor: pointer;
440
+ transition: all 0.2s;
441
+ }
442
+
443
+ .export-btn:hover {
444
+ background-color: #e5e7eb;
445
+ color: #111827;
446
+ }
447
+
448
+ .export-btn:disabled {
449
+ opacity: 0.5;
450
+ cursor: not-allowed;
451
+ }
452
+
453
+ /* 编辑器主体容器 */
454
+ .skill-editor-body {
455
+ flex: 1;
456
+ display: flex;
457
+ overflow: hidden;
458
+ }
459
+
460
+ /* 主编辑区 */
461
+ .main-pane {
462
+ flex: 1;
463
+ display: flex;
464
+ flex-direction: column;
465
+ background-color: white;
466
+ min-width: 0;
467
+ }
468
+
469
+ /* 文件树 */
470
+ .skill-file-tree {
471
+ width: var(--skill-file-tree-width);
472
+ border-left: 1px solid var(--skill-border);
473
+ display: flex;
474
+ flex-direction: column;
475
+ background-color: #f9fafb;
476
+ order: 2;
477
+ }
478
+
479
+ .skill-file-tree-header {
480
+ padding: 0.75rem 1rem;
481
+ display: flex;
482
+ align-items: center;
483
+ justify-content: space-between;
484
+ border-bottom: 1px solid var(--skill-border);
485
+ background-color: white;
486
+ }
487
+
488
+ .skill-file-tree-header span {
489
+ font-size: 13px;
490
+ font-weight: 700;
491
+ color: var(--skill-text-label);
492
+ text-transform: uppercase;
493
+ }
494
+
495
+ /* 新增文件按钮 - 呼吸效果 */
496
+ .add-file-btn {
497
+ width: 2rem;
498
+ height: 2rem;
499
+ border: none;
500
+ background: transparent;
501
+ color: var(--skill-text-muted);
502
+ display: flex;
503
+ align-items: center;
504
+ justify-content: center;
505
+ cursor: pointer;
506
+ border-radius: 0.5rem;
507
+ padding: 0.5rem;
508
+ transition: all 0.2s ease;
509
+ }
510
+
511
+ .add-file-btn:hover {
512
+ background-color: var(--skill-bg-hover);
513
+ color: var(--skill-primary);
514
+ transform: scale(1.1);
515
+ will-change: transform;
516
+ }
517
+
518
+ .add-file-btn:focus {
519
+ /* outline: 2px solid var(--skill-primary); */
520
+ outline-offset: 2px;
521
+ }
522
+
523
+ .skill-file-list {
524
+ flex: 1;
525
+ overflow-y: auto;
526
+ padding: 0.25rem 0; /* 保持紧凑但有呼吸感 */
527
+ }
528
+
529
+ .skill-file-item {
530
+ display: flex;
531
+ align-items: center;
532
+ padding: 0.625rem 1rem;
533
+ font-size: 0.875rem;
534
+ font-weight: 500;
535
+ color: #4b5563;
536
+ cursor: pointer;
537
+ gap: 0.25rem; /* 间隙从 0.375rem 减小到 0.25rem */
538
+ min-height: 2.5rem;
539
+ position: relative;
540
+ transition: all 0.2s ease;
541
+ }
542
+
543
+ /* 渐变分割线:中间清晰,两头淡出,显得更高级、不生硬 */
544
+ .skill-file-item:not(:last-child)::after {
545
+ content: '';
546
+ position: absolute;
547
+ bottom: 0;
548
+ left: 1rem;
549
+ right: 1rem;
550
+ height: 1px;
551
+ background: linear-gradient(to right, transparent, #eeeeee 15%, #eeeeee 85%, transparent);
552
+ transition: opacity 0.2s;
553
+ }
554
+
555
+ .skill-file-item:hover {
556
+ background-color: rgba(243, 244, 246, 0.6);
557
+ color: #111827;
558
+ transform: translateX(-2px);
559
+ transition: all 0.2s ease;
560
+ }
561
+
562
+ /* 激活项采用“浮起”效果,隐藏分割线,增加左侧品牌色指示条 */
563
+ .skill-file-item.active {
564
+ background-color: white;
565
+ color: var(--skill-primary);
566
+ z-index: 1;
567
+ box-shadow: 0 4px 12px -2px rgba(0, 0, 0, 0.08), 0 2px 6px -1px rgba(0, 0, 0, 0.04);
568
+ margin-left: -0.5rem;
569
+ margin-right: -0.5rem;
570
+ padding-left: 1.5rem;
571
+ padding-right: 1.5rem;
572
+ border-left: 1px solid transparent;
573
+ }
574
+
575
+ .skill-file-item.active::before {
576
+ content: '';
577
+ position: absolute;
578
+ right: 0;
579
+ top: 0.5rem;
580
+ bottom: 0.5rem;
581
+ width: 3px;
582
+ background-color: var(--skill-primary);
583
+ border-radius: 4px 0 0 4px;
584
+ }
585
+
586
+ .skill-file-item.active::after,
587
+ .skill-file-item:hover::after {
588
+ opacity: 0; /* 选中或悬停时隐藏分割线,保持整洁 */
589
+ }
590
+
591
+ .skill-file-item-icon {
592
+ color: #9ca3af;
593
+ flex-shrink: 0;
594
+ display: flex;
595
+ align-items: center;
596
+ justify-content: center;
597
+ width: 1.25rem;
598
+ height: 1.25rem;
599
+ transition: color 0.2s;
600
+ }
601
+
602
+ .skill-file-item.active .skill-file-item-icon {
603
+ color: var(--skill-primary);
604
+ transform: scale(1.05);
605
+ }
606
+
607
+ /* 为激活项添加左侧微弱边框,增强视觉层次 */
608
+ .skill-file-item.active {
609
+ border-left: 2px solid var(--skill-primary-light);
610
+ }
611
+
612
+ .skill-file-item:hover .skill-file-item-icon {
613
+ color: #6b7280;
614
+ }
615
+
616
+ .skill-file-item-status {
617
+ margin-left: auto;
618
+ opacity: 0.4;
619
+ flex-shrink: 0;
620
+ display: flex;
621
+ align-items: center;
622
+ }
623
+
624
+ .skill-file-item-actions, .skill-folder-actions {
625
+ margin-left: auto;
626
+ display: flex;
627
+ align-items: center;
628
+ gap: 0.25rem;
629
+ opacity: 0;
630
+ transition: opacity 0.2s;
631
+ flex-shrink: 0;
632
+ }
633
+
634
+ .skill-file-item:hover .skill-file-item-actions,
635
+ .skill-folder-header:hover .skill-folder-actions {
636
+ opacity: 1;
637
+ }
638
+
639
+ .file-action-btn {
640
+ width: 20px;
641
+ height: 20px;
642
+ border-radius: 4px;
643
+ border: none;
644
+ background: transparent;
645
+ display: flex;
646
+ align-items: center;
647
+ justify-content: center;
648
+ cursor: pointer;
649
+ color: var(--skill-text-muted);
650
+ transition: all 0.2s;
651
+ }
652
+
653
+ .file-action-btn:hover {
654
+ background-color: #f3f4f6;
655
+ }
656
+
657
+ .file-action-btn.delete {
658
+ color: #ef4444;
659
+ }
660
+
661
+ .file-action-btn.delete:hover {
662
+ background-color: #fee2e2;
663
+ }
664
+
665
+ .file-action-btn.rename {
666
+ color: var(--skill-primary);
667
+ }
668
+
669
+ .file-action-btn.rename:hover {
670
+ background-color: var(--skill-primary-light);
671
+ }
672
+
673
+ .file-rename-input {
674
+ flex: 1;
675
+ border: 1px solid var(--skill-primary);
676
+ border-radius: 4px;
677
+ padding: 2px 6px;
678
+ font-size: 0.875rem;
679
+ outline: none;
680
+ background: white;
681
+ width: 0;
682
+ }
683
+
684
+ .skill-file-item.renaming {
685
+ background-color: white !important;
686
+ }
687
+
688
+ /* 属性设置区 */
689
+ .skill-meta-panel {
690
+ padding: 1.5rem 2rem;
691
+ border-bottom: 1px solid var(--skill-border);
692
+ }
693
+
694
+ .meta-row-top {
695
+ display: flex;
696
+ gap: 2rem;
697
+ margin-bottom: 1.5rem;
698
+ }
699
+
700
+ .skill-field-group {
701
+ display: flex;
702
+ flex-direction: column;
703
+ }
704
+
705
+ .skill-field-label {
706
+ font-size: 11px;
707
+ font-weight: 800;
708
+ color: var(--skill-text-label);
709
+ text-transform: uppercase;
710
+ margin-bottom: 0.5rem;
711
+ }
712
+
713
+ .skill-name-input {
714
+ font-size: 1.35rem;
715
+ font-weight: 800;
716
+ border: none;
717
+ outline: none;
718
+ color: #111827;
719
+ width: 100%;
720
+ padding: 0;
721
+ }
722
+
723
+ .version-input {
724
+ font-size: 1.25rem;
725
+ font-weight: 600;
726
+ border: none;
727
+ outline: none;
728
+ width: 80px;
729
+ text-align: right;
730
+ color: #111827;
731
+ }
732
+
733
+ .desc-input-box {
734
+ background-color: #f9fafb;
735
+ border: 1px solid var(--skill-border);
736
+ border-radius: 0.75rem;
737
+ padding: 1rem;
738
+ margin-bottom: 1.5rem;
739
+ position: relative;
740
+ }
741
+
742
+ .desc-textarea {
743
+ width: 100%;
744
+ border: none;
745
+ background: transparent;
746
+ outline: none;
747
+ font-size: 0.9375rem;
748
+ color: #374151;
749
+ resize: none;
750
+ line-height: 1.6;
751
+ }
752
+
753
+ .meta-row-bottom {
754
+ display: flex;
755
+ align-items: center;
756
+ gap: 1.5rem;
757
+ margin-top: 0.5rem;
758
+ }
759
+
760
+ .skill-checkbox-label {
761
+ display: flex;
762
+ align-items: center;
763
+ font-size: 11px;
764
+ gap: 0.625rem;
765
+ /* font-size: 0.875rem; */
766
+ font-weight: 600;
767
+ color: var(--skill-text-label);
768
+ cursor: pointer;
769
+ padding-right: 1.5rem;
770
+ border-right: 1px solid var(--skill-border);
771
+ }
772
+
773
+ .skill-tools-area {
774
+ display: flex;
775
+ flex-direction: row;
776
+ align-items: center;
777
+ gap: 1rem;
778
+ flex-wrap: nowrap;
779
+ }
780
+
781
+ .skill-tools-label {
782
+ display: flex;
783
+ align-items: center;
784
+ gap: 0.375rem;
785
+ font-size: 11px;
786
+ font-weight: 800;
787
+ color: var(--skill-text-label);
788
+ text-transform: uppercase;
789
+ white-space: nowrap;
790
+ }
791
+
792
+ .skill-tools-pill-box {
793
+ display: flex;
794
+ gap: 0.5rem;
795
+ flex-wrap: nowrap;
796
+ }
797
+
798
+ .tool-pill {
799
+ padding: 0.25rem 0.875rem;
800
+ border-radius: 9999px;
801
+ font-size: 12px;
802
+ font-weight: 600;
803
+ border: 1.5px solid var(--skill-border);
804
+ background: white;
805
+ color: #6b7280;
806
+ cursor: pointer;
807
+ transition: all 0.2s;
808
+ }
809
+
810
+ .tool-pill:hover {
811
+ transform: translateY(-1px);
812
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
813
+ will-change: transform;
814
+ }
815
+
816
+ .tool-pill.active {
817
+ background-color: var(--skill-primary);
818
+ border-color: var(--skill-primary);
819
+ color: white;
820
+ }
821
+
822
+ /* 代码编辑器区 */
823
+ .code-editor-area {
824
+ flex: 1;
825
+ display: flex;
826
+ position: relative;
827
+ overflow: hidden;
828
+ flex-direction: column; /* 确保 CodeMirror 容器纵向铺满 */
829
+ }
830
+
831
+ /* 编辑器为空时的 placeholder 提示 */
832
+ .code-editor-placeholder {
833
+ position: absolute;
834
+ top: 1rem;
835
+ left: 4rem; /* 考虑行号宽度 */
836
+ color: var(--skill-text-label);
837
+ font-size: 0.875rem;
838
+ font-weight: 400;
839
+ font-style: italic;
840
+ pointer-events: none;
841
+ z-index: 100;
842
+ opacity: 1;
843
+ transition: opacity 0.2s ease;
844
+ white-space: nowrap;
845
+ }
846
+
847
+ .code-editor-area .CodeMirror {
848
+ flex: 1;
849
+ height: 100% !important; /* 强制填满父容器 */
850
+ min-height: 0 !important; /* 彻底覆盖 main.css 中的 min-height */
851
+ font-family: 'Fira Code', var(--skill-font-mono);
852
+ font-size: 0.875rem;
853
+ line-height: 1.6;
854
+ background: white !important;
855
+ position: relative;
856
+ }
857
+
858
+ /* 自定义编辑器主题 - 掘金 (Juejin) 风格 */
859
+ .cm-s-xq-light.CodeMirror { background: #ffffff; color: #333333; }
860
+ .cm-s-xq-light .CodeMirror-gutters { background: #f8f9fa; border-right: 1px solid #f1f1f2; }
861
+ .cm-s-xq-light .CodeMirror-linenumber { color: #abb2bf; }
862
+ .cm-s-xq-light .CodeMirror-cursor { border-left: 2px solid var(--skill-primary); }
863
+ .cm-s-xq-light .CodeMirror-selected { background: var(--skill-bg-active) !important; }
864
+
865
+ .cm-s-xq-light span.cm-comment { color: #8a919f; font-style: italic; }
866
+ .cm-s-xq-light span.cm-keyword { color: #d73a49; }
867
+ .cm-s-xq-light span.cm-number { color: var(--skill-primary); }
868
+ .cm-s-xq-light span.cm-string { color: #42b983; }
869
+ .cm-s-xq-light span.cm-variable { color: #333333; }
870
+ .cm-s-xq-light span.cm-variable-2 { color: var(--skill-primary); }
871
+ .cm-s-xq-light span.cm-def { color: var(--skill-primary); font-weight: 600; }
872
+ .cm-s-xq-light span.cm-operator { color: #005cc5; }
873
+ .cm-s-xq-light span.cm-atom { color: var(--skill-primary); }
874
+ .cm-s-xq-light span.cm-meta { color: #4b5563; }
875
+ .cm-s-xq-light span.cm-tag { color: #d73a49; }
876
+ .cm-s-xq-light span.cm-attribute { color: var(--skill-primary); }
877
+ .cm-s-xq-light span.cm-header { color: var(--skill-primary); font-weight: bold; }
878
+ .cm-s-xq-light span.cm-link { color: var(--skill-primary); text-decoration: none; }
879
+ .cm-s-xq-light span.cm-builtin { color: #d73a49; }
880
+ .cm-s-xq-light span.cm-property { color: var(--skill-primary); }
881
+ .cm-s-xq-light span.cm-qualifier { color: var(--skill-primary); }
882
+ .cm-s-xq-light span.cm-string-2 { color: #42b983; }
883
+
884
+ /* Markdown 特有高亮优化 */
885
+ .cm-s-xq-light span.cm-variable-3, .cm-s-xq-light span.cm-type { color: var(--skill-primary); }
886
+ .cm-s-xq-light span.cm-quote { color: #8a919f; }
887
+ .cm-s-xq-light span.cm-hr { color: #abb2bf; }
888
+
889
+ .code-editor-area .CodeMirror-scroll {
890
+ height: 100% !important; /* 覆盖 main.css 中的 height: auto */
891
+ overflow-y: auto !important; /* 恢复内部滚动 */
892
+ padding: 0;
893
+ padding-bottom: 50px !important;
894
+ }
895
+
896
+ .code-editor-area .CodeMirror-lines {
897
+ padding: 1rem 0;
898
+ }
899
+
900
+ .code-editor-area .CodeMirror-gutters {
901
+ background-color: #f9fafb !important;
902
+ border-right: 1px solid #f3f4f6 !important;
903
+ width: 3rem;
904
+ }
905
+
906
+ .code-editor-area .CodeMirror-linenumber {
907
+ color: #d1d5db !important;
908
+ font-size: 11px;
909
+ font-weight: 700;
910
+ padding: 0 8px;
911
+ text-align: center;
912
+ }
913
+
914
+ /* 底部状态条 */
915
+ .skill-status-bar {
916
+ height: 2.5rem;
917
+ background-color: white;
918
+ border-top: 1px solid var(--skill-border);
919
+ padding: 0 1.25rem;
920
+ display: flex;
921
+ align-items: center;
922
+ justify-content: space-between;
923
+ font-size: 12px;
924
+ font-weight: 600;
925
+ flex-shrink: 0;
926
+ }
927
+
928
+ .skill-status-left {
929
+ display: flex;
930
+ gap: 1.25rem;
931
+ }
932
+
933
+ .skill-status-item {
934
+ display: flex;
935
+ align-items: center;
936
+ gap: 0.375rem;
937
+ }
938
+
939
+ .skill-status-item.error { color: var(--skill-error); }
940
+ .skill-status-item.warning { color: var(--skill-warning); }
941
+
942
+ .skill-status-right {
943
+ display: flex;
944
+ gap: 1.5rem;
945
+ color: var(--skill-text-label);
946
+ }
947
+
948
+ .latest-issue {
949
+ font-weight: 500;
950
+ }
951
+
952
+ /* 模拟器布局已在 SkillsArea.js 中自适应 */
953
+ .simulator-view {
954
+ flex: 1;
955
+ display: flex;
956
+ flex-direction: column;
957
+ padding: 2rem;
958
+ max-width: 800px;
959
+ margin: 0 auto;
960
+ height: 100%;
961
+ }
962
+
963
+ .chat-box {
964
+ flex: 1;
965
+ background: white;
966
+ border: 1px solid var(--skill-border);
967
+ border-radius: 1rem;
968
+ padding: 1.5rem;
969
+ margin-bottom: 1.5rem;
970
+ overflow-y: auto;
971
+ display: flex;
972
+ flex-direction: column;
973
+ gap: 1rem;
974
+ box-shadow: 0 1px 3px rgba(0,0,0,0.05);
975
+ }
976
+
977
+ .msg {
978
+ max-width: 85%;
979
+ padding: 0.75rem 1rem;
980
+ border-radius: 1rem;
981
+ font-size: 0.875rem;
982
+ line-height: 1.5;
983
+ }
984
+
985
+ .msg.ai {
986
+ align-self: flex-start;
987
+ background-color: #f3f4f6;
988
+ border-bottom-left-radius: 0.25rem;
989
+ }
990
+
991
+ .msg.user {
992
+ align-self: flex-end;
993
+ background-color: var(--skill-primary);
994
+ color: white;
995
+ border-bottom-right-radius: 0.25rem;
996
+ }
997
+
998
+ .trigger-indicator {
999
+ align-self: center;
1000
+ background-color: #fffbeb;
1001
+ border: 1px solid #fde68a;
1002
+ color: #92400e;
1003
+ padding: 0.5rem 1rem;
1004
+ border-radius: 0.5rem;
1005
+ font-size: 12px;
1006
+ font-weight: 700;
1007
+ display: flex;
1008
+ align-items: center;
1009
+ gap: 0.5rem;
1010
+ }
1011
+
1012
+ .sim-input-wrapper {
1013
+ display: flex;
1014
+ gap: 0.75rem;
1015
+ }
1016
+
1017
+ .sim-input {
1018
+ flex: 1;
1019
+ height: 2.75rem;
1020
+ border: 1px solid var(--skill-border);
1021
+ border-radius: 0.75rem;
1022
+ padding: 0 1rem;
1023
+ outline: none;
1024
+ font-size: 0.875rem;
1025
+ }
1026
+
1027
+ .sim-input:focus {
1028
+ border-color: var(--skill-primary);
1029
+ }
1030
+
1031
+ .sim-send-btn {
1032
+ width: 2.75rem;
1033
+ height: 2.75rem;
1034
+ background-color: var(--skill-primary);
1035
+ color: white;
1036
+ border: none;
1037
+ border-radius: 0.75rem;
1038
+ cursor: pointer;
1039
+ display: flex;
1040
+ align-items: center;
1041
+ justify-content: center;
1042
+ transition: all 0.2s;
1043
+ }
1044
+
1045
+ .sim-send-btn:hover {
1046
+ background-color: var(--skill-primary-dark);
1047
+ transform: translateY(-1px);
1048
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1049
+ will-change: transform;
1050
+ }
1051
+
1052
+ /* 空状态 */
1053
+ .skills-blank {
1054
+ flex: 1;
1055
+ display: flex;
1056
+ flex-direction: column;
1057
+ align-items: center;
1058
+ justify-content: center;
1059
+ text-align: center;
1060
+ padding: 2rem;
1061
+ background-color: white;
1062
+ }
1063
+
1064
+ .blank-icon-wrapper {
1065
+ width: 80px;
1066
+ height: 80px;
1067
+ background-color: #f3f4f6;
1068
+ border-radius: 1.25rem;
1069
+ display: flex;
1070
+ align-items: center;
1071
+ justify-content: center;
1072
+ margin-bottom: 2rem;
1073
+ color: #d1d5db;
1074
+ }
1075
+
1076
+ .skills-blank h2 {
1077
+ font-size: 1.5rem;
1078
+ font-weight: 700;
1079
+ color: #111827;
1080
+ margin: 0 0 0.75rem 0;
1081
+ }
1082
+
1083
+ .skills-blank p {
1084
+ font-size: 1rem;
1085
+ color: #6b7280;
1086
+ max-width: 420px;
1087
+ line-height: 1.6;
1088
+ margin: 0 0 2.5rem 0;
1089
+ }
1090
+
1091
+ .primary-blue-btn {
1092
+ background-color: var(--skill-primary);
1093
+ color: white;
1094
+ height: 3.25rem;
1095
+ padding: 0 2.5rem;
1096
+ border-radius: 0.875rem;
1097
+ font-weight: 700;
1098
+ font-size: 1rem;
1099
+ border: none;
1100
+ cursor: pointer;
1101
+ box-shadow: 0 4px 14px 0 rgba(57, 57, 57, 0.25);
1102
+ transition: all 0.2s;
1103
+ display: flex;
1104
+ align-items: center;
1105
+ justify-content: center;
1106
+ }
1107
+
1108
+ .primary-blue-btn:hover {
1109
+ transform: translateY(-1px);
1110
+ box-shadow: 0 6px 20px 0 rgba(57, 57, 57, 0.35);
1111
+ filter: brightness(1.1);
1112
+ will-change: transform;
1113
+ }
1114
+
1115
+ .sidebar-empty-box {
1116
+ margin: 1rem;
1117
+ padding: 2.5rem 1rem;
1118
+ border: 2px dashed #f3f4f6;
1119
+ border-radius: 0.75rem;
1120
+ text-align: center;
1121
+ color: #9ca3af;
1122
+ font-size: 0.8125rem;
1123
+ line-height: 1.6;
1124
+ display: flex;
1125
+ flex-direction: column;
1126
+ align-items: center;
1127
+ gap: 0.5rem;
1128
+ }
1129
+
1130
+ .hidden { display: none !important; }
1131
+
1132
+ /* 技能上传弹窗样式 */
1133
+ #skillsUploadModal .modal-dialog {
1134
+ max-width: 560px;
1135
+ }
1136
+
1137
+ #skillsUploadModal .upload-area {
1138
+ border: 2px dashed var(--skill-border);
1139
+ border-radius: 12px;
1140
+ padding: 40px;
1141
+ text-align: center;
1142
+ transition: all 0.3s ease;
1143
+ margin-bottom: 24px;
1144
+ background: rgba(248, 249, 250, 0.5);
1145
+ }
1146
+
1147
+ #skillsUploadModal .upload-area.dragover {
1148
+ border-color: var(--skill-primary);
1149
+ background: rgba(57, 57, 57, 0.05);
1150
+ transform: scale(1.01);
1151
+ }
1152
+
1153
+ #skillsUploadModal .upload-content {
1154
+ display: flex;
1155
+ flex-direction: column;
1156
+ align-items: center;
1157
+ gap: 20px;
1158
+ }
1159
+
1160
+ #skillsUploadModal .upload-icon {
1161
+ color: var(--skill-text-muted);
1162
+ opacity: 0.7;
1163
+ }
1164
+
1165
+ #skillsUploadModal .upload-title {
1166
+ font-size: 16px;
1167
+ font-weight: 500;
1168
+ color: var(--skill-text-main);
1169
+ margin: 0;
1170
+ }
1171
+
1172
+ #skillsUploadModal .upload-subtitle {
1173
+ font-size: 14px;
1174
+ color: var(--skill-text-muted);
1175
+ margin: 0;
1176
+ line-height: 1.4;
1177
+ }
1178
+
1179
+ #skillsUploadModal .upload-progress {
1180
+ margin-top: 24px;
1181
+ }
1182
+
1183
+ #skillsUploadModal .progress-bar {
1184
+ width: 100%;
1185
+ height: 10px;
1186
+ background: var(--skill-bg-page);
1187
+ border-radius: 6px;
1188
+ overflow: hidden;
1189
+ margin-bottom: 12px;
1190
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
1191
+ }
1192
+
1193
+ #skillsUploadModal .progress-fill {
1194
+ height: 100%;
1195
+ background: linear-gradient(90deg, var(--skill-primary), #6366f1);
1196
+ width: 0%;
1197
+ transition: width 0.3s ease;
1198
+ border-radius: 6px;
1199
+ }
1200
+
1201
+ #skillsUploadModal .progress-text {
1202
+ font-size: 14px;
1203
+ color: var(--skill-text-muted);
1204
+ text-align: center;
1205
+ font-weight: 500;
1206
+ }
1207
+
1208
+ #skillsUploadModal .upload-requirements {
1209
+ background: var(--skill-bg-page);
1210
+ padding: 20px;
1211
+ border-radius: 12px;
1212
+ border: 1px solid var(--skill-border);
1213
+ }
1214
+
1215
+ #skillsUploadModal .upload-requirements h4 {
1216
+ font-size: 14px;
1217
+ font-weight: 600;
1218
+ color: var(--skill-text-main);
1219
+ margin-bottom: 12px;
1220
+ }
1221
+
1222
+ #skillsUploadModal .upload-requirements ul {
1223
+ list-style: none;
1224
+ padding: 0;
1225
+ margin: 0;
1226
+ }
1227
+
1228
+ #skillsUploadModal .upload-requirements li {
1229
+ font-size: 13px;
1230
+ color: var(--skill-text-muted);
1231
+ padding: 6px 0;
1232
+ padding-left: 20px;
1233
+ position: relative;
1234
+ line-height: 1.4;
1235
+ }
1236
+
1237
+ #skillsUploadModal .upload-requirements li::before {
1238
+ content: '•';
1239
+ position: absolute;
1240
+ left: 0;
1241
+ color: var(--skill-primary);
1242
+ font-weight: bold;
1243
+ }
1244
+
1245
+ /* ============================================
1246
+ 优化的文件树样式
1247
+ ============================================ */
1248
+
1249
+ /* 文件树节点容器 */
1250
+ .skill-file-node {
1251
+ user-select: none;
1252
+ }
1253
+
1254
+ /* 文件夹节点 */
1255
+ .skill-folder-node {
1256
+ margin: 0.25rem 0;
1257
+ }
1258
+
1259
+ .skill-folder-header {
1260
+ display: flex;
1261
+ align-items: center;
1262
+ padding: 0.5rem 1rem;
1263
+ font-size: 0.875rem;
1264
+ font-weight: 600;
1265
+ color: #374151;
1266
+ cursor: pointer;
1267
+ gap: 0.125rem; /* 间隙从 0.25rem 减小到 0.125rem */
1268
+ min-height: 2.25rem;
1269
+ position: relative;
1270
+ transition: all 0.2s ease;
1271
+ border-radius: 0.5rem;
1272
+ margin: 0 0.5rem;
1273
+ }
1274
+
1275
+ .skill-folder-header:hover {
1276
+ background-color: rgba(243, 244, 246, 0.8);
1277
+ color: #111827;
1278
+ }
1279
+
1280
+ .skill-folder-header.active {
1281
+ background-color: white;
1282
+ color: var(--skill-primary);
1283
+ box-shadow: 0 2px 8px -2px rgba(0, 0, 0, 0.1);
1284
+ }
1285
+
1286
+ /* 文件夹展开/折叠图标 */
1287
+ .folder-chevron {
1288
+ width: 1rem;
1289
+ height: 1rem;
1290
+ color: #9ca3af;
1291
+ transition: transform 0.2s ease;
1292
+ flex-shrink: 0;
1293
+ }
1294
+
1295
+ .folder-chevron.expanded {
1296
+ transform: rotate(90deg);
1297
+ }
1298
+
1299
+ .skill-folder-header:hover .folder-chevron {
1300
+ color: #6b7280;
1301
+ }
1302
+
1303
+ .skill-folder-header.active .folder-chevron {
1304
+ color: var(--skill-primary);
1305
+ }
1306
+
1307
+ /* 文件夹图标 */
1308
+ .skill-folder-icon {
1309
+ width: 1.25rem;
1310
+ height: 1.25rem;
1311
+ color: #f59e0b;
1312
+ flex-shrink: 0;
1313
+ transition: color 0.2s;
1314
+ }
1315
+
1316
+ .skill-folder-header:hover .skill-folder-icon {
1317
+ color: #d97706;
1318
+ }
1319
+
1320
+ .skill-folder-header.active .skill-folder-icon {
1321
+ color: var(--skill-primary);
1322
+ }
1323
+
1324
+ /* 文件夹名称 */
1325
+ .skill-folder-name {
1326
+ flex: 1;
1327
+ min-width: 0;
1328
+ overflow: hidden;
1329
+ text-overflow: ellipsis;
1330
+ white-space: nowrap;
1331
+ }
1332
+
1333
+ /* 文件树内容容器 */
1334
+ .skill-folder-children {
1335
+ padding-left: 0; /* 移除固定内边距,改用递归渲染时的 padding-left */
1336
+ transition: all 0.3s ease;
1337
+ overflow: hidden;
1338
+ }
1339
+
1340
+ .skill-folder-children.collapsed {
1341
+ max-height: 0;
1342
+ opacity: 0;
1343
+ }
1344
+
1345
+ .skill-folder-children.expanded {
1346
+ max-height: 2000px; /* 增加最大高度以支持更深层级 */
1347
+ opacity: 1;
1348
+ }
1349
+
1350
+ /* 优化的文件和文件夹项样式 */
1351
+ .skill-file-item, .skill-folder-header {
1352
+ margin: 0.125rem 0.5rem;
1353
+ border-radius: 6px;
1354
+ width: calc(100% - 1rem);
1355
+ box-sizing: border-box;
1356
+ }
1357
+
1358
+ .skill-file-item.active {
1359
+ background-color: white;
1360
+ color: var(--skill-primary);
1361
+ z-index: 1;
1362
+ box-shadow: 0 2px 8px -1px rgba(0, 0, 0, 0.08);
1363
+ margin-left: 0.5rem;
1364
+ margin-right: 0.5rem;
1365
+ padding-left: inherit; /* 保持 padding-left 由 JS 动态计算 */
1366
+ padding-right: 1rem;
1367
+ border-left: none;
1368
+ }
1369
+
1370
+ .skill-file-item.active::before {
1371
+ left: 0;
1372
+ right: auto;
1373
+ width: 3px;
1374
+ background-color: var(--skill-primary);
1375
+ border-radius: 0 4px 4px 0;
1376
+ }
1377
+
1378
+ .skill-file-item:not(:last-child)::after {
1379
+ display: none; /* 移除分割线,使用间距区分 */
1380
+ }
1381
+
1382
+ /* 确保文字不会溢出 */
1383
+ .skill-file-item-name-label, .skill-folder-name {
1384
+ flex: 1;
1385
+ min-width: 0;
1386
+ overflow: hidden;
1387
+ text-overflow: ellipsis;
1388
+ white-space: nowrap;
1389
+ }
1390
+
1391
+ /* 文件夹图标微调 */
1392
+ .skill-folder-icon {
1393
+ margin-right: 2px;
1394
+ }
1395
+
1396
+ /* 悬停效果优化 */
1397
+ .skill-file-item:hover, .skill-folder-header:hover {
1398
+ transform: none; /* 移除位移,保持稳定 */
1399
+ background-color: rgba(57, 57, 57, 0.05);
1400
+ }
1401
+
1402
+ /* 文件类型图标颜色 */
1403
+ .skill-file-icon-js { color: #f59e0b; }
1404
+ .skill-file-icon-json { color: #f59e0b; }
1405
+ .skill-file-icon-md { color: #3b82f6; }
1406
+ .skill-file-icon-html { color: #ef4444; }
1407
+ .skill-file-icon-css { color: #3b82f6; }
1408
+ .skill-file-icon-py { color: #3776ab; }
1409
+ .skill-file-icon-sh { color: #89e051; }
1410
+ .skill-file-icon-yaml { color: #cb171e; }
1411
+ .skill-file-icon-yml { color: #cb171e; }
1412
+ .skill-file-icon-xml { color: #f59e0b; }
1413
+ .skill-file-icon-php { color: #4f5d95; }
1414
+ .skill-file-icon-txt { color: #6b7280; }
1415
+
1416
+ /* 拖拽相关样式 */
1417
+ .skill-file-item.dragging {
1418
+ opacity: 0.5;
1419
+ background-color: rgba(59, 130, 246, 0.1);
1420
+ border: 2px dashed var(--skill-primary);
1421
+ }
1422
+
1423
+ .skill-file-item.drag-over {
1424
+ background-color: rgba(59, 130, 246, 0.2);
1425
+ border: 2px dashed var(--skill-primary);
1426
+ }
1427
+
1428
+ .skill-folder-header.drag-over {
1429
+ background-color: rgba(59, 130, 246, 0.2);
1430
+ border: 2px dashed var(--skill-primary);
1431
+ }
1432
+
1433
+ /* 右键上下文菜单 */
1434
+ .skill-context-menu {
1435
+ position: fixed;
1436
+ background: white;
1437
+ border: 1px solid var(--skill-border);
1438
+ border-radius: 0.5rem;
1439
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1440
+ z-index: var(--z-dropdown);
1441
+ min-width: 180px;
1442
+ padding: 0.25rem 0;
1443
+ animation: contextMenuFadeIn 0.15s ease;
1444
+ }
1445
+
1446
+ @keyframes contextMenuFadeIn {
1447
+ from {
1448
+ opacity: 0;
1449
+ transform: scale(0.95);
1450
+ }
1451
+ to {
1452
+ opacity: 1;
1453
+ transform: scale(1);
1454
+ }
1455
+ }
1456
+
1457
+ .context-menu-item {
1458
+ display: flex;
1459
+ align-items: center;
1460
+ gap: 0.5rem;
1461
+ padding: 0.5rem 0.75rem;
1462
+ font-size: 0.875rem;
1463
+ font-weight: 500;
1464
+ color: #374151;
1465
+ cursor: pointer;
1466
+ transition: all 0.15s ease;
1467
+ }
1468
+
1469
+ .context-menu-item:hover {
1470
+ background-color: #f3f4f6;
1471
+ color: #111827;
1472
+ }
1473
+
1474
+ .context-menu-item.danger {
1475
+ color: #ef4444;
1476
+ }
1477
+
1478
+ .context-menu-item.danger:hover {
1479
+ background-color: #fee2e2;
1480
+ }
1481
+
1482
+ .context-menu-divider {
1483
+ height: 1px;
1484
+ background-color: var(--skill-border);
1485
+ margin: 0.25rem 0;
1486
+ }
1487
+
1488
+ .context-menu-item-icon {
1489
+ width: 1rem;
1490
+ height: 1rem;
1491
+ color: #6b7280;
1492
+ }
1493
+
1494
+ .context-menu-item:hover .context-menu-item-icon {
1495
+ color: #374151;
1496
+ }
1497
+
1498
+ .context-menu-item.danger:hover .context-menu-item-icon {
1499
+ color: #ef4444;
1500
+ }
1501
+
1502
+ /* 焦点状态增强 */
1503
+ .skill-folder-header:focus-visible,
1504
+ .skill-file-item:focus-visible {
1505
+ outline: 2px solid var(--skill-primary);
1506
+ outline-offset: -2px;
1507
+ }
1508
+
1509
+ /* 文件树滚动条美化 */
1510
+ .skill-file-list::-webkit-scrollbar {
1511
+ width: 6px;
1512
+ }
1513
+
1514
+ .skill-file-list::-webkit-scrollbar-track {
1515
+ background: transparent;
1516
+ }
1517
+
1518
+ .skill-file-list::-webkit-scrollbar-thumb {
1519
+ background-color: #d1d5db;
1520
+ border-radius: 3px;
1521
+ }
1522
+
1523
+ .skill-file-list::-webkit-scrollbar-thumb:hover {
1524
+ background-color: #9ca3af;
1525
+ }
1526
+
1527
+ /* 键盘导航支持 */
1528
+ .skill-file-item[tabindex="0"],
1529
+ .skill-folder-header[tabindex="0"] {
1530
+ cursor: pointer;
1531
+ }
1532
+
1533
+ /* 禁用状态 */
1534
+ .context-menu-item.disabled {
1535
+ opacity: 0.5;
1536
+ cursor: not-allowed;
1537
+ pointer-events: none;
1538
+ }
1539
+
1540
+ /* 技能同步弹窗特有样式 */
1541
+ .skill-sync-modal {
1542
+ max-width: 600px;
1543
+ min-width: 500px;
1544
+ }
1545
+
1546
+ .sync-info-section {
1547
+ background: #f8f9fa;
1548
+ padding: 16px;
1549
+ border-radius: 12px;
1550
+ margin-bottom: 20px;
1551
+ border: 1px solid #e9ecef;
1552
+ }
1553
+
1554
+ .sync-description-text {
1555
+ font-size: 13px;
1556
+ color: #868e96;
1557
+ margin-bottom: 20px;
1558
+ line-height: 1.5;
1559
+ }
1560
+
1561
+ .section-label {
1562
+ font-size: 12px;
1563
+ font-weight: 600;
1564
+ color: #495057;
1565
+ text-transform: uppercase;
1566
+ letter-spacing: 0.5px;
1567
+ margin-bottom: 8px;
1568
+ display: block;
1569
+ }
1570
+
1571
+ .sync-status-bar-mini {
1572
+ margin-top: 20px;
1573
+ padding-top: 12px;
1574
+ border-top: 1px solid #f1f3f5;
1575
+ display: flex;
1576
+ align-items: center;
1577
+ font-size: 12px;
1578
+ color: #adb5bd;
1579
+ }
1580
+
1581
+ .status-label {
1582
+ margin-right: 6px;
1583
+ }
1584
+
1585
+ .status-value {
1586
+ color: #868e96;
1587
+ }
1588
+
1589
+ .error-text {
1590
+ color: #fa5252;
1591
+ font-weight: 500;
1592
+ }
1593
+
1594
+
1595
+ .inline-group {
1596
+ display: flex;
1597
+ justify-content: space-between;
1598
+ align-items: center;
1599
+ padding: 12px 0;
1600
+ border-bottom: 1px solid #f8f9fa;
1601
+ margin-bottom: 16px;
1602
+ }
1603
+
1604
+ .inline-group label {
1605
+ margin-bottom: 0;
1606
+ color: #495057;
1607
+ font-weight: 500;
1608
+ }
1609
+
1610
+ .target-list-container {
1611
+ border: 1px solid #e9ecef;
1612
+ border-radius: 8px;
1613
+ overflow: hidden;
1614
+ background: #fcfcfc;
1615
+ }
1616
+
1617
+ .target-list {
1618
+ max-height: 160px;
1619
+ overflow-y: auto;
1620
+ }
1621
+
1622
+ .target-item {
1623
+ display: flex;
1624
+ justify-content: space-between;
1625
+ align-items: center;
1626
+ padding: 10px 12px;
1627
+ border-bottom: 1px solid #f1f3f5;
1628
+ transition: background 0.2s;
1629
+ }
1630
+
1631
+ .target-item:hover {
1632
+ background: #f8f9fa;
1633
+ }
1634
+
1635
+ .target-item:last-child {
1636
+ border-bottom: none;
1637
+ }
1638
+
1639
+ .target-path {
1640
+ font-size: 13px;
1641
+ color: #495057;
1642
+ font-family: var(--skill-font-mono);
1643
+ white-space: nowrap;
1644
+ overflow: hidden;
1645
+ text-overflow: ellipsis;
1646
+ flex: 1;
1647
+ margin-right: 10px;
1648
+ }
1649
+
1650
+ .remove-target-btn {
1651
+ background: none;
1652
+ border: none;
1653
+ color: #dee2e6;
1654
+ font-size: 18px;
1655
+ cursor: pointer;
1656
+ line-height: 1;
1657
+ padding: 4px;
1658
+ border-radius: 4px;
1659
+ transition: all 0.2s;
1660
+ }
1661
+
1662
+ .remove-target-btn:hover {
1663
+ color: #fa5252;
1664
+ background: #fff5f5;
1665
+ }
1666
+
1667
+ .add-target-box {
1668
+ display: flex;
1669
+ padding: 8px;
1670
+ background: #fff;
1671
+ border-top: 1px solid #e9ecef;
1672
+ gap: 8px;
1673
+ }
1674
+
1675
+ .add-target-box input {
1676
+ flex: 1;
1677
+ height: 32px;
1678
+ padding: 0 10px;
1679
+ border: 1px solid #dee2e6;
1680
+ border-radius: 6px;
1681
+ font-size: 13px;
1682
+ background: #f8f9fa;
1683
+ transition: all 0.2s;
1684
+ }
1685
+
1686
+ .add-target-box input:focus {
1687
+ background: #fff;
1688
+ border-color: var(--skill-primary);
1689
+ box-shadow: 0 0 0 3px rgba(57, 57, 57, 0.05);
1690
+ outline: none;
1691
+ }
1692
+
1693
+ /* 开关按钮样式 */
1694
+ .toggle-switch {
1695
+ position: relative;
1696
+ display: inline-block;
1697
+ width: 40px;
1698
+ height: 20px;
1699
+ }
1700
+
1701
+ .toggle-switch input {
1702
+ opacity: 0;
1703
+ width: 0;
1704
+ height: 0;
1705
+ }
1706
+
1707
+ .slider {
1708
+ position: absolute;
1709
+ cursor: pointer;
1710
+ top: 0;
1711
+ left: 0;
1712
+ right: 0;
1713
+ bottom: 0;
1714
+ background-color: #ccc;
1715
+ transition: .4s;
1716
+ border-radius: 20px;
1717
+ }
1718
+
1719
+ .slider:before {
1720
+ position: absolute;
1721
+ content: "";
1722
+ height: 16px;
1723
+ width: 16px;
1724
+ left: 2px;
1725
+ bottom: 2px;
1726
+ background-color: white;
1727
+ transition: .4s;
1728
+ border-radius: 50%;
1729
+ }
1730
+
1731
+ input:checked + .slider {
1732
+ background-color: var(--skill-primary);
1733
+ }
1734
+
1735
+ input:checked + .slider:before {
1736
+ transform: translateX(20px);
1737
+ }
1738
+
1739
+ /* 减少动画(prefers-reduced-motion) */
1740
+ @media (prefers-reduced-motion: reduce) {
1741
+ .skill-file-item,
1742
+ .skill-folder-header,
1743
+ .folder-chevron,
1744
+ .skill-context-menu,
1745
+ .add-file-btn {
1746
+ transition: none;
1747
+ }
1748
+
1749
+ .skill-file-item:hover,
1750
+ .skill-folder-header:hover {
1751
+ transform: none;
1752
+ }
1753
+ }