mcp-probe-kit 1.15.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +113 -1642
  2. package/build/index.js +75 -42
  3. package/build/lib/elicitation-helper.d.ts +73 -0
  4. package/build/lib/elicitation-helper.js +130 -0
  5. package/build/lib/response.d.ts +32 -0
  6. package/build/lib/response.js +28 -0
  7. package/build/lib/tasks-manager.d.ts +116 -0
  8. package/build/lib/tasks-manager.js +217 -0
  9. package/build/lib/toolset-manager.d.ts +48 -0
  10. package/build/lib/toolset-manager.js +112 -0
  11. package/build/schemas/basic-tools.d.ts +0 -32
  12. package/build/schemas/basic-tools.js +0 -34
  13. package/build/schemas/code-analysis-tools.d.ts +0 -36
  14. package/build/schemas/code-analysis-tools.js +0 -38
  15. package/build/schemas/code-gen-tools.d.ts +0 -44
  16. package/build/schemas/code-gen-tools.js +0 -46
  17. package/build/schemas/doc-util-tools.d.ts +0 -54
  18. package/build/schemas/doc-util-tools.js +0 -58
  19. package/build/schemas/index.d.ts +0 -188
  20. package/build/schemas/orchestration-tools.d.ts +0 -22
  21. package/build/schemas/orchestration-tools.js +0 -23
  22. package/build/schemas/output/core-tools.d.ts +817 -0
  23. package/build/schemas/output/core-tools.js +421 -0
  24. package/build/schemas/output/generation-tools.d.ts +936 -0
  25. package/build/schemas/output/generation-tools.js +446 -0
  26. package/build/schemas/output/helper-tools.d.ts +243 -0
  27. package/build/schemas/output/helper-tools.js +138 -0
  28. package/build/schemas/output/index.d.ts +76 -0
  29. package/build/schemas/output/index.js +96 -0
  30. package/build/schemas/output/project-tools.d.ts +702 -0
  31. package/build/schemas/output/project-tools.js +339 -0
  32. package/build/schemas/output/ui-ux-tools.d.ts +469 -0
  33. package/build/schemas/output/ui-ux-tools.js +218 -0
  34. package/build/schemas/output/workflow-tools.d.ts +267 -0
  35. package/build/schemas/output/workflow-tools.js +179 -0
  36. package/build/schemas/structured-output.d.ts +1317 -0
  37. package/build/schemas/structured-output.js +1017 -0
  38. package/build/tools/__tests__/start_ui.integration.test.js +5 -5
  39. package/build/tools/__tests__/start_ui.property.test.js +11 -11
  40. package/build/tools/add_feature.d.ts +1 -13
  41. package/build/tools/add_feature.js +48 -13
  42. package/build/tools/analyze_project.js +57 -18
  43. package/build/tools/check_deps.d.ts +1 -13
  44. package/build/tools/check_deps.js +24 -15
  45. package/build/tools/code_review.d.ts +1 -13
  46. package/build/tools/code_review.js +19 -16
  47. package/build/tools/debug.d.ts +1 -13
  48. package/build/tools/debug.js +18 -16
  49. package/build/tools/estimate.d.ts +1 -19
  50. package/build/tools/estimate.js +36 -6
  51. package/build/tools/fix_bug.d.ts +1 -13
  52. package/build/tools/fix_bug.js +24 -6
  53. package/build/tools/gen_mock.d.ts +1 -19
  54. package/build/tools/gen_mock.js +42 -227
  55. package/build/tools/genapi.d.ts +1 -13
  56. package/build/tools/genapi.js +18 -15
  57. package/build/tools/genchangelog.d.ts +1 -13
  58. package/build/tools/genchangelog.js +36 -212
  59. package/build/tools/gencommit.d.ts +1 -7
  60. package/build/tools/gencommit.js +21 -13
  61. package/build/tools/gendoc.d.ts +1 -13
  62. package/build/tools/gendoc.js +18 -15
  63. package/build/tools/genpr.d.ts +1 -13
  64. package/build/tools/genpr.js +28 -157
  65. package/build/tools/genreadme.d.ts +1 -13
  66. package/build/tools/genreadme.js +22 -587
  67. package/build/tools/gensql.d.ts +1 -13
  68. package/build/tools/gensql.js +24 -283
  69. package/build/tools/gentest.d.ts +1 -13
  70. package/build/tools/gentest.js +49 -16
  71. package/build/tools/index.d.ts +0 -10
  72. package/build/tools/index.js +0 -10
  73. package/build/tools/init_component_catalog.d.ts +3 -20
  74. package/build/tools/init_component_catalog.js +141 -786
  75. package/build/tools/init_project.d.ts +7 -13
  76. package/build/tools/init_project.js +54 -16
  77. package/build/tools/init_project_context.d.ts +1 -13
  78. package/build/tools/init_project_context.js +41 -14
  79. package/build/tools/perf.d.ts +1 -13
  80. package/build/tools/perf.js +18 -15
  81. package/build/tools/refactor.d.ts +1 -13
  82. package/build/tools/refactor.js +54 -15
  83. package/build/tools/render_ui.d.ts +2 -19
  84. package/build/tools/render_ui.js +201 -347
  85. package/build/tools/resolve_conflict.d.ts +1 -13
  86. package/build/tools/resolve_conflict.js +18 -15
  87. package/build/tools/security_scan.d.ts +1 -13
  88. package/build/tools/security_scan.js +16 -5
  89. package/build/tools/start_api.d.ts +7 -13
  90. package/build/tools/start_api.js +69 -157
  91. package/build/tools/start_bugfix.d.ts +1 -7
  92. package/build/tools/start_bugfix.js +38 -2
  93. package/build/tools/start_doc.d.ts +7 -13
  94. package/build/tools/start_doc.js +76 -169
  95. package/build/tools/start_feature.d.ts +1 -7
  96. package/build/tools/start_feature.js +54 -2
  97. package/build/tools/start_onboard.d.ts +1 -7
  98. package/build/tools/start_onboard.js +40 -2
  99. package/build/tools/start_ralph.d.ts +1 -7
  100. package/build/tools/start_ralph.js +88 -2
  101. package/build/tools/start_refactor.d.ts +7 -13
  102. package/build/tools/start_refactor.js +75 -148
  103. package/build/tools/start_release.d.ts +7 -13
  104. package/build/tools/start_release.js +56 -131
  105. package/build/tools/start_review.d.ts +7 -13
  106. package/build/tools/start_review.js +70 -142
  107. package/build/tools/start_ui.d.ts +1 -7
  108. package/build/tools/start_ui.js +98 -8
  109. package/build/tools/ui-ux-tools.d.ts +3 -39
  110. package/build/tools/ui-ux-tools.js +201 -125
  111. package/docs/data/tools.js +864 -0
  112. package/docs/index.html +594 -0
  113. package/docs/pages/all-tools.html +649 -0
  114. package/docs/pages/examples.html +564 -0
  115. package/docs/pages/getting-started.html +529 -0
  116. package/docs/pages/migration.html +308 -0
  117. package/docs/specs/algorithm-enhancement/roadmap.md +619 -0
  118. package/docs/specs/vnext-upgrade/00-OVERVIEW.md +258 -0
  119. package/docs/specs/vnext-upgrade/BETA_RELEASE_GUIDE.md +328 -0
  120. package/docs/specs/vnext-upgrade/GITHUB_DISCUSSION_TEMPLATE.md +236 -0
  121. package/docs/specs/vnext-upgrade/M8.9-PROGRESS-UPDATE.md +248 -0
  122. package/docs/specs/vnext-upgrade/PROGRESS-SUMMARY.md +195 -0
  123. package/docs/specs/vnext-upgrade/QUICK_REFERENCE.md +338 -0
  124. package/docs/specs/vnext-upgrade/README.md +125 -0
  125. package/docs/specs/vnext-upgrade/STATUS-UPDATE-2026-01-26.md +230 -0
  126. package/docs/specs/vnext-upgrade/TOOL_CLEANUP.md +343 -0
  127. package/docs/specs/vnext-upgrade/completed/M1-M2-SUMMARY.md +27 -0
  128. package/docs/specs/vnext-upgrade/completed/M3_COMPLETION_SUMMARY.md +273 -0
  129. package/docs/specs/vnext-upgrade/completed/M4-SUMMARY.md +19 -0
  130. package/docs/specs/vnext-upgrade/completed/M5_COMPLETION_SUMMARY.md +0 -0
  131. package/docs/specs/vnext-upgrade/completed/M8.1-SUMMARY.md +247 -0
  132. package/docs/specs/vnext-upgrade/completed/M8.2-SUMMARY.md +296 -0
  133. package/docs/specs/vnext-upgrade/completed/M8.3-SUMMARY.md +241 -0
  134. package/docs/specs/vnext-upgrade/completed/M8.3-TEST-SUMMARY.md +216 -0
  135. package/docs/specs/vnext-upgrade/completed/M8.4-SUMMARY.md +217 -0
  136. package/docs/specs/vnext-upgrade/completed/M8.4-TEST-SUMMARY.md +198 -0
  137. package/docs/specs/vnext-upgrade/completed/M8.5-SUMMARY.md +202 -0
  138. package/docs/specs/vnext-upgrade/completed/M8.5-TEST-SUMMARY.md +223 -0
  139. package/docs/specs/vnext-upgrade/completed/M8.6-SUMMARY.md +299 -0
  140. package/docs/specs/vnext-upgrade/completed/M8.8-TEST-SUMMARY.md +216 -0
  141. package/docs/specs/vnext-upgrade/completed/TOOL-CLEANUP-SUMMARY.md +210 -0
  142. package/docs/specs/vnext-upgrade/design.md +848 -0
  143. package/docs/specs/vnext-upgrade/requirements.md +221 -0
  144. package/docs/specs/vnext-upgrade/tasks/00-INDEX.md +335 -0
  145. package/docs/specs/vnext-upgrade/tasks/M8.1-SCHEMA-DEFINITION.md +300 -0
  146. package/docs/specs/vnext-upgrade/tasks/M8.2-P1-TOOLS.md +249 -0
  147. package/docs/specs/vnext-upgrade/tasks/M8.3-GENERATION-TOOLS.md +49 -0
  148. package/docs/specs/vnext-upgrade/tasks/M8.4-ORCHESTRATION-TOOLS.md +28 -0
  149. package/docs/specs/vnext-upgrade/tasks/M8.5-PROJECT-TOOLS.md +29 -0
  150. package/docs/specs/vnext-upgrade/tasks/M8.6-UI-TOOLS.md +66 -0
  151. package/docs/specs/vnext-upgrade/tasks/M8.7-HELPER-TOOLS.md +24 -0
  152. package/docs/specs/vnext-upgrade/tasks/M8.8-INTEGRATION-TESTS.md +90 -0
  153. package/docs/specs/vnext-upgrade/tasks/M8.9-DOCUMENTATION.md +103 -0
  154. package/docs/styles/docs.css +556 -0
  155. package/docs/styles/page.css +815 -0
  156. package/docs/vnext/MCP_2025-11-25_GUIDE.md +276 -0
  157. package/docs/vnext/vNext-PRD.md +488 -0
  158. package/package.json +6 -6
  159. package/docs/BEST_PRACTICES.md +0 -1185
  160. package/docs/HOW_TO_TRIGGER.md +0 -1141
  161. package/docs/MCP-Probe-Kit-/344/275/277/347/224/250/346/211/213/345/206/214.html +0 -544
  162. package/docs/MCP-Probe-Kit-/344/275/277/347/224/250/346/211/213/345/206/214.md +0 -1447
@@ -0,0 +1,556 @@
1
+ /* MCP Probe Kit v2.0 - Professional Design System */
2
+
3
+ * {
4
+ margin: 0;
5
+ padding: 0;
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ :root {
10
+ /* Primary Colors - 10% 强调色 */
11
+ --primary: #2563EB;
12
+ --primary-hover: #1D4ED8;
13
+ --primary-light: #3B82F6;
14
+
15
+ /* Semantic Colors */
16
+ --success: #10B981;
17
+ --warning: #F59E0B;
18
+ --error: #EF4444;
19
+ --info: #06B6D4;
20
+
21
+ /* Text Colors - 30% 辅助中性 */
22
+ --text-primary: #0F172A;
23
+ --text-secondary: #475569;
24
+ --text-tertiary: #64748B;
25
+
26
+ /* Background Colors - 60% 背景中性 */
27
+ --bg-page: #F8FAFC;
28
+ --bg-card: #FFFFFF;
29
+ --bg-hover: #F1F5F9;
30
+
31
+ /* Border Colors */
32
+ --border: #E2E8F0;
33
+ --border-hover: #CBD5E1;
34
+
35
+ /* Shadows */
36
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
37
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07);
38
+ --shadow-lg: 0 10px 15px rgba(0, 0, 0, 0.1);
39
+ }
40
+
41
+ body {
42
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
43
+ background: var(--bg-page);
44
+ color: var(--text-primary);
45
+ line-height: 1.6;
46
+ min-height: 100vh;
47
+ display: flex;
48
+ }
49
+
50
+ /* ========== 左侧边栏 ========== */
51
+ .sidebar {
52
+ width: 260px;
53
+ background: var(--bg-card);
54
+ border-right: 1px solid var(--border);
55
+ position: fixed;
56
+ left: 0;
57
+ top: 0;
58
+ bottom: 0;
59
+ overflow-y: auto;
60
+ overflow-x: hidden;
61
+ z-index: 1000;
62
+ }
63
+
64
+ .sidebar::-webkit-scrollbar {
65
+ width: 4px;
66
+ }
67
+
68
+ .sidebar::-webkit-scrollbar-track {
69
+ background: transparent;
70
+ }
71
+
72
+ .sidebar::-webkit-scrollbar-thumb {
73
+ background: var(--border-hover);
74
+ border-radius: 2px;
75
+ }
76
+
77
+ .sidebar::-webkit-scrollbar-thumb:hover {
78
+ background: var(--border);
79
+ }
80
+
81
+ .sidebar-header {
82
+ padding: 24px 20px;
83
+ border-bottom: 1px solid var(--border);
84
+ background: linear-gradient(135deg, var(--primary) 0%, var(--primary-hover) 100%);
85
+ }
86
+
87
+ .sidebar-header h1 {
88
+ font-size: 18px;
89
+ font-weight: 600;
90
+ color: #ffffff;
91
+ margin-bottom: 4px;
92
+ }
93
+
94
+ .sidebar-header .version {
95
+ font-size: 12px;
96
+ color: rgba(255, 255, 255, 0.9);
97
+ font-weight: 400;
98
+ }
99
+
100
+ .sidebar-nav {
101
+ padding: 12px 0;
102
+ }
103
+
104
+ .nav-section {
105
+ margin-bottom: 24px;
106
+ }
107
+
108
+ .nav-section-title {
109
+ padding: 8px 20px;
110
+ font-size: 12px;
111
+ font-weight: 600;
112
+ color: var(--text-tertiary);
113
+ text-transform: uppercase;
114
+ letter-spacing: 0.5px;
115
+ }
116
+
117
+ .nav-item {
118
+ display: flex;
119
+ align-items: center;
120
+ padding: 10px 20px;
121
+ margin: 2px 12px;
122
+ color: var(--text-primary);
123
+ text-decoration: none;
124
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
125
+ border-radius: 6px;
126
+ font-size: 14px;
127
+ font-weight: 500;
128
+ }
129
+
130
+ .nav-item .icon {
131
+ margin-right: 10px;
132
+ font-size: 16px;
133
+ opacity: 0.8;
134
+ }
135
+
136
+ .nav-item:hover {
137
+ background: var(--bg-hover);
138
+ color: var(--primary);
139
+ }
140
+
141
+ .nav-item:hover .icon {
142
+ opacity: 1;
143
+ }
144
+
145
+ .nav-item.active {
146
+ background: rgba(37, 99, 235, 0.08);
147
+ color: var(--primary);
148
+ font-weight: 600;
149
+ border-left: 2px solid var(--primary);
150
+ padding-left: 18px;
151
+ }
152
+
153
+ .nav-item.active .icon {
154
+ opacity: 1;
155
+ }
156
+
157
+ /* ========== 主内容区域 ========== */
158
+ .main-wrapper {
159
+ margin-left: 260px;
160
+ flex: 1;
161
+ display: flex;
162
+ flex-direction: column;
163
+ min-height: 100vh;
164
+ }
165
+
166
+ .page-header {
167
+ background: linear-gradient(135deg, var(--primary) 0%, var(--primary-hover) 100%);
168
+ color: white;
169
+ padding: 48px 24px;
170
+ text-align: center;
171
+ }
172
+
173
+ .page-header h1 {
174
+ font-size: 36px;
175
+ font-weight: 700;
176
+ margin: 0;
177
+ }
178
+
179
+ .container {
180
+ flex: 1;
181
+ max-width: 1200px;
182
+ width: 100%;
183
+ margin: 0 auto;
184
+ padding: 48px 24px;
185
+ }
186
+
187
+ .content {
188
+ background: var(--bg-card);
189
+ border-radius: 8px;
190
+ padding: 32px;
191
+ box-shadow: var(--shadow-sm);
192
+ border: 1px solid var(--border);
193
+ }
194
+
195
+ /* ========== 排版 ========== */
196
+ h1 {
197
+ font-size: 36px;
198
+ font-weight: 700;
199
+ color: var(--text-primary);
200
+ margin-bottom: 16px;
201
+ letter-spacing: -0.02em;
202
+ }
203
+
204
+ h2 {
205
+ font-size: 28px;
206
+ font-weight: 600;
207
+ color: var(--text-primary);
208
+ margin: 32px 0 16px 0;
209
+ padding-bottom: 8px;
210
+ border-bottom: 1px solid var(--border);
211
+ }
212
+
213
+ h3 {
214
+ font-size: 20px;
215
+ font-weight: 600;
216
+ color: var(--text-primary);
217
+ margin: 24px 0 12px 0;
218
+ }
219
+
220
+ h4 {
221
+ font-size: 16px;
222
+ font-weight: 600;
223
+ color: var(--text-primary);
224
+ margin: 16px 0 8px 0;
225
+ }
226
+
227
+ p {
228
+ margin-bottom: 16px;
229
+ color: var(--text-secondary);
230
+ line-height: 1.7;
231
+ }
232
+
233
+ a {
234
+ color: var(--primary);
235
+ text-decoration: none;
236
+ transition: color 0.2s;
237
+ }
238
+
239
+ a:hover {
240
+ color: var(--primary-hover);
241
+ }
242
+
243
+ ul, ol {
244
+ margin: 16px 0;
245
+ padding-left: 24px;
246
+ }
247
+
248
+ li {
249
+ margin-bottom: 8px;
250
+ color: var(--text-secondary);
251
+ }
252
+
253
+ code {
254
+ background: var(--bg-hover);
255
+ padding: 2px 6px;
256
+ border-radius: 4px;
257
+ font-family: 'Courier New', Consolas, Monaco, monospace;
258
+ font-size: 0.9em;
259
+ color: #DB2777;
260
+ border: 1px solid var(--border);
261
+ }
262
+
263
+ pre {
264
+ background: #1e293b;
265
+ color: #e2e8f0;
266
+ padding: 16px;
267
+ border-radius: 6px;
268
+ overflow-x: auto;
269
+ margin: 16px 0;
270
+ border: 1px solid var(--border);
271
+ }
272
+
273
+ pre code {
274
+ background: none;
275
+ padding: 0;
276
+ color: inherit;
277
+ border: none;
278
+ }
279
+
280
+ table {
281
+ width: 100%;
282
+ border-collapse: collapse;
283
+ margin: 16px 0;
284
+ border: 1px solid var(--border);
285
+ border-radius: 6px;
286
+ overflow: hidden;
287
+ }
288
+
289
+ th, td {
290
+ padding: 12px;
291
+ text-align: left;
292
+ border-bottom: 1px solid var(--border);
293
+ }
294
+
295
+ th {
296
+ background: var(--bg-hover);
297
+ font-weight: 600;
298
+ color: var(--text-primary);
299
+ font-size: 14px;
300
+ }
301
+
302
+ td {
303
+ color: var(--text-secondary);
304
+ font-size: 14px;
305
+ }
306
+
307
+ tr:last-child td {
308
+ border-bottom: none;
309
+ }
310
+
311
+ tr:hover {
312
+ background: var(--bg-hover);
313
+ }
314
+
315
+ /* ========== 通知框 ========== */
316
+ .note, .info {
317
+ background: #EFF6FF;
318
+ border-left: 3px solid var(--info);
319
+ padding: 16px;
320
+ margin: 16px 0;
321
+ border-radius: 4px;
322
+ color: var(--text-primary);
323
+ }
324
+
325
+ .warning {
326
+ background: #FFFBEB;
327
+ border-left: 3px solid var(--warning);
328
+ padding: 16px;
329
+ margin: 16px 0;
330
+ border-radius: 4px;
331
+ color: var(--text-primary);
332
+ }
333
+
334
+ .success {
335
+ background: #F0FDF4;
336
+ border-left: 3px solid var(--success);
337
+ padding: 16px;
338
+ margin: 16px 0;
339
+ border-radius: 4px;
340
+ color: var(--text-primary);
341
+ }
342
+
343
+ .error {
344
+ background: #FEF2F2;
345
+ border-left: 3px solid var(--error);
346
+ padding: 16px;
347
+ margin: 16px 0;
348
+ border-radius: 4px;
349
+ color: var(--text-primary);
350
+ }
351
+
352
+ /* ========== Sidebar Footer with QR Code ========== */
353
+ .sidebar-footer {
354
+ position: sticky;
355
+ bottom: 0;
356
+ background: var(--bg-card);
357
+ border-top: 1px solid var(--border);
358
+ padding: 16px;
359
+ }
360
+
361
+ .sidebar-footer-title {
362
+ font-size: 12px;
363
+ font-weight: 600;
364
+ color: var(--text-tertiary);
365
+ margin-bottom: 8px;
366
+ }
367
+
368
+ .sidebar-footer-links {
369
+ display: flex;
370
+ flex-direction: column;
371
+ gap: 8px;
372
+ margin-bottom: 16px;
373
+ }
374
+
375
+ .sidebar-footer-link {
376
+ display: flex;
377
+ align-items: center;
378
+ gap: 8px;
379
+ color: var(--text-secondary);
380
+ text-decoration: none;
381
+ font-size: 13px;
382
+ transition: color 0.2s;
383
+ }
384
+
385
+ .sidebar-footer-link:hover {
386
+ color: var(--primary);
387
+ }
388
+
389
+ .sidebar-footer-link .external-icon {
390
+ font-size: 12px;
391
+ }
392
+
393
+ .sidebar-qrcode {
394
+ text-align: center;
395
+ padding-top: 16px;
396
+ border-top: 1px solid var(--border);
397
+ }
398
+
399
+ .sidebar-qrcode-title {
400
+ font-size: 12px;
401
+ font-weight: 600;
402
+ color: var(--text-tertiary);
403
+ margin-bottom: 8px;
404
+ }
405
+
406
+ .sidebar-qrcode img {
407
+ width: 120px;
408
+ height: 120px;
409
+ border-radius: 8px;
410
+ border: 1px solid var(--border);
411
+ transition: transform 0.2s;
412
+ }
413
+
414
+ .sidebar-qrcode img:hover {
415
+ transform: scale(1.05);
416
+ }
417
+
418
+ .sidebar-qrcode-desc {
419
+ font-size: 11px;
420
+ color: var(--text-tertiary);
421
+ margin-top: 8px;
422
+ }
423
+
424
+ /* ========== Footer ========== */
425
+ .footer {
426
+ background: var(--bg-card);
427
+ border-top: 1px solid var(--border);
428
+ padding: 24px;
429
+ margin-top: auto;
430
+ }
431
+
432
+ .footer-container {
433
+ max-width: 1200px;
434
+ margin: 0 auto;
435
+ display: flex;
436
+ justify-content: space-between;
437
+ align-items: center;
438
+ flex-wrap: wrap;
439
+ gap: 16px;
440
+ font-size: 14px;
441
+ color: var(--text-secondary);
442
+ }
443
+
444
+ .footer a {
445
+ color: var(--primary);
446
+ text-decoration: none;
447
+ transition: color 0.2s;
448
+ }
449
+
450
+ .footer a:hover {
451
+ color: var(--primary-hover);
452
+ }
453
+
454
+ /* ========== 移动端按钮 ========== */
455
+ .mobile-menu-btn {
456
+ display: none;
457
+ position: fixed;
458
+ top: 16px;
459
+ left: 16px;
460
+ z-index: 2000;
461
+ background: linear-gradient(135deg, var(--primary) 0%, var(--primary-hover) 100%);
462
+ color: white;
463
+ border: none;
464
+ padding: 10px;
465
+ border-radius: 6px;
466
+ cursor: pointer;
467
+ box-shadow: 0 2px 8px rgba(37, 99, 235, 0.25);
468
+ font-size: 18px;
469
+ transition: all 0.2s;
470
+ }
471
+
472
+ .mobile-menu-btn:hover {
473
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.35);
474
+ transform: translateY(-1px);
475
+ }
476
+
477
+ .mobile-menu-btn:active {
478
+ transform: scale(0.95);
479
+ }
480
+
481
+ /* ========== 响应式 ========== */
482
+ @media (max-width: 1023px) {
483
+ .container {
484
+ padding: 40px 20px;
485
+ }
486
+
487
+ .content {
488
+ padding: 24px;
489
+ }
490
+ }
491
+
492
+ @media (max-width: 768px) {
493
+ .sidebar {
494
+ transform: translateX(-100%);
495
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
496
+ box-shadow: 2px 0 8px rgba(0, 0, 0, 0.1);
497
+ }
498
+
499
+ .sidebar.open {
500
+ transform: translateX(0);
501
+ }
502
+
503
+ .main-wrapper {
504
+ margin-left: 0;
505
+ }
506
+
507
+ .mobile-menu-btn {
508
+ display: block;
509
+ }
510
+
511
+ .page-header {
512
+ padding: 32px 20px;
513
+ }
514
+
515
+ .page-header h1 {
516
+ font-size: 28px;
517
+ }
518
+
519
+ .container {
520
+ padding: 32px 16px;
521
+ }
522
+
523
+ .content {
524
+ padding: 20px;
525
+ }
526
+
527
+ h1 {
528
+ font-size: 28px;
529
+ }
530
+
531
+ h2 {
532
+ font-size: 24px;
533
+ }
534
+
535
+ h3 {
536
+ font-size: 18px;
537
+ }
538
+
539
+ .footer-container {
540
+ flex-direction: column;
541
+ text-align: center;
542
+ gap: 8px;
543
+ }
544
+ }
545
+
546
+ /* ========== 可访问性 ========== */
547
+ /* 保留键盘导航,移除鼠标点击的蓝色边框 */
548
+ a:focus-visible, button:focus-visible {
549
+ outline: 2px solid var(--primary);
550
+ outline-offset: 2px;
551
+ }
552
+
553
+ /* ========== 滚动行为 ========== */
554
+ html {
555
+ scroll-behavior: smooth;
556
+ }