@becrafter/prompt-manager 0.2.4-dev.5 → 0.2.4

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 (59) hide show
  1. package/package.json +1 -3
  2. package/packages/web/0.26974981f2e663e001ca.js +0 -1
  3. package/packages/web/112.895e73058c36df517412.js +0 -1
  4. package/packages/web/130.2145d293d97ee88902a1.js +0 -1
  5. package/packages/web/142.4ef07b4323c04c87bd81.js +0 -1
  6. package/packages/web/165.3b013a0e62121061ce41.js +0 -2
  7. package/packages/web/165.3b013a0e62121061ce41.js.LICENSE.txt +0 -9
  8. package/packages/web/203.a3697c577f74b6538257.js +0 -1
  9. package/packages/web/241.c0b98c14268a1d46d55d.js +0 -1
  10. package/packages/web/249.e10b6b8a1ac4f66185ea.js +0 -1
  11. package/packages/web/291.8c281d2823aa37833137.js +0 -1
  12. package/packages/web/319.5b4ef8bdd727fdac0520.js +0 -1
  13. package/packages/web/32.22d5433bcd9b6b4e98f1.js +0 -1
  14. package/packages/web/325.8810a3f94093d0f19341.js +0 -1
  15. package/packages/web/366.24666676c36ca63de8e1.js +0 -1
  16. package/packages/web/378.07aa22b5f489f8f1ec36.js +0 -1
  17. package/packages/web/391.f39db51c15feb65b46cb.js +0 -1
  18. package/packages/web/393.ab70195ea156eebec40b.js +0 -1
  19. package/packages/web/412.6d38dd3b290782c51ed6.js +0 -1
  20. package/packages/web/465.fb5ab26f362d3eb53da9.js +0 -1
  21. package/packages/web/48.7643e76aedee153e680c.js +0 -1
  22. package/packages/web/480.237737e805b568087d34.js +0 -1
  23. package/packages/web/489.182e98261f30e4da62d6.js +0 -1
  24. package/packages/web/490.3f311f0c36d0c52f8b52.js +0 -1
  25. package/packages/web/492.d07d9857e3682710f3a5.js +0 -1
  26. package/packages/web/495.60324846746eea7d588b.js +0 -1
  27. package/packages/web/510.b6e2c433d2f9bc9a1edd.js +0 -1
  28. package/packages/web/543.223a1c0b8345b4e65ed3.js +0 -1
  29. package/packages/web/567.e438fd025d21373bc95b.js +0 -1
  30. package/packages/web/592.c670d3500195bdb18ca4.js +0 -1
  31. package/packages/web/616.a8b495ba380ec0bcafd9.js +0 -1
  32. package/packages/web/617.bc4db899b54108068892.js +0 -1
  33. package/packages/web/641.1e5e900d36819777d808.js +0 -1
  34. package/packages/web/672.ae0e48b24fd6863bb4d1.js +0 -1
  35. package/packages/web/731.595770c0a8f30f8c453d.js +0 -1
  36. package/packages/web/746.3faf506c16dc0e6ae25a.js +0 -1
  37. package/packages/web/756.16d54ad97aadec6eb440.js +0 -1
  38. package/packages/web/77.d3de1da7532138022a7c.js +0 -1
  39. package/packages/web/802.0a9a7f92703bd3ed0228.js +0 -1
  40. package/packages/web/815.879527c51deda81ff3e6.js +0 -1
  41. package/packages/web/821.12f33b53b488b3995bb9.js +0 -1
  42. package/packages/web/846.64e9bb4b76cae3245c47.js +0 -1
  43. package/packages/web/869.aadd9a07fd56e04ba5dd.js +0 -1
  44. package/packages/web/885.6dc8edf4c16f6b578da6.js +0 -1
  45. package/packages/web/901.45604b599d11f86ae9d8.js +0 -1
  46. package/packages/web/928.69835904eae42113a3ce.js +0 -1
  47. package/packages/web/955.827020bdb97be41eb055.js +0 -1
  48. package/packages/web/981.e4d081b9d1dac0cd275f.js +0 -1
  49. package/packages/web/992.a3843959b85c7fdc6cf9.js +0 -1
  50. package/packages/web/996.07a82c3066973c75984b.js +0 -1
  51. package/packages/web/css/codemirror-theme_xq-light.css +0 -43
  52. package/packages/web/css/codemirror.css +0 -344
  53. package/packages/web/css/main.b013c98c7a56511f8710.css +0 -9995
  54. package/packages/web/css/main.css +0 -4404
  55. package/packages/web/css/skills.css +0 -1753
  56. package/packages/web/css/terminal.css +0 -1218
  57. package/packages/web/index.html +0 -3
  58. package/packages/web/main.cf6dd52dbaa4f935d45a.js +0 -2
  59. package/packages/web/main.cf6dd52dbaa4f935d45a.js.LICENSE.txt +0 -3
@@ -1,1753 +0,0 @@
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
- }