codexmate 0.0.41 → 0.0.43

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 (155) hide show
  1. package/README.md +168 -168
  2. package/README.zh.md +168 -168
  3. package/cli/agents-files.js +230 -230
  4. package/cli/analytics-export-args.js +68 -68
  5. package/cli/archive-helpers.js +453 -453
  6. package/cli/auth-profiles.js +375 -375
  7. package/cli/builtin-proxy.js +2144 -2144
  8. package/cli/claude-proxy.js +1022 -1022
  9. package/cli/config-bootstrap.js +407 -407
  10. package/cli/config-health.js +454 -454
  11. package/cli/doctor-core.js +903 -903
  12. package/cli/import-skills-url.js +356 -356
  13. package/cli/local-bridge.js +556 -556
  14. package/cli/openai-bridge.js +1984 -1984
  15. package/cli/openclaw-config.js +629 -629
  16. package/cli/session-convert-args.js +69 -69
  17. package/cli/session-convert-io.js +82 -82
  18. package/cli/session-convert.js +150 -150
  19. package/cli/session-usage.concurrent.js +28 -28
  20. package/cli/session-usage.js +304 -304
  21. package/cli/session-usage.models.js +176 -176
  22. package/cli/skills.js +1141 -1141
  23. package/cli/update.js +171 -171
  24. package/cli/zip-commands.js +510 -510
  25. package/cli.js +16495 -16458
  26. package/lib/automation.js +404 -404
  27. package/lib/cli-file-utils.js +151 -151
  28. package/lib/cli-models-utils.js +440 -440
  29. package/lib/cli-network-utils.js +190 -190
  30. package/lib/cli-path-utils.js +85 -85
  31. package/lib/cli-session-utils.js +121 -121
  32. package/lib/cli-sessions.js +427 -427
  33. package/lib/cli-utils.js +155 -155
  34. package/lib/cli-webhook.js +154 -154
  35. package/lib/download-artifacts.js +92 -92
  36. package/lib/mcp-stdio.js +453 -453
  37. package/lib/task-orchestrator.js +869 -869
  38. package/lib/text-diff.js +303 -303
  39. package/lib/win-tray.js +119 -119
  40. package/lib/workflow-engine.js +340 -340
  41. package/package.json +77 -77
  42. package/plugins/README.md +20 -20
  43. package/plugins/README.zh-CN.md +20 -20
  44. package/plugins/prompt-templates/comment-polish/index.mjs +25 -25
  45. package/plugins/prompt-templates/computed.mjs +311 -311
  46. package/plugins/prompt-templates/index.mjs +8 -8
  47. package/plugins/prompt-templates/manifest.mjs +18 -18
  48. package/plugins/prompt-templates/methods.mjs +553 -553
  49. package/plugins/prompt-templates/overview.mjs +91 -91
  50. package/plugins/prompt-templates/ownership.mjs +19 -19
  51. package/plugins/prompt-templates/rule-ack/index.mjs +21 -21
  52. package/plugins/prompt-templates/storage.mjs +64 -64
  53. package/plugins/registry.mjs +16 -16
  54. package/web-ui/app.js +705 -695
  55. package/web-ui/index.html +37 -37
  56. package/web-ui/logic.agents-diff.mjs +386 -386
  57. package/web-ui/logic.claude.mjs +172 -172
  58. package/web-ui/logic.codex.mjs +69 -69
  59. package/web-ui/logic.mjs +5 -5
  60. package/web-ui/logic.runtime.mjs +128 -128
  61. package/web-ui/logic.session-convert.mjs +70 -70
  62. package/web-ui/logic.sessions.mjs +782 -782
  63. package/web-ui/modules/api.mjs +90 -90
  64. package/web-ui/modules/app.computed.dashboard.mjs +252 -252
  65. package/web-ui/modules/app.computed.index.mjs +17 -17
  66. package/web-ui/modules/app.computed.main-tabs.mjs +214 -214
  67. package/web-ui/modules/app.computed.session.mjs +876 -876
  68. package/web-ui/modules/app.constants.mjs +15 -15
  69. package/web-ui/modules/app.methods.agents.mjs +651 -651
  70. package/web-ui/modules/app.methods.claude-config.mjs +412 -412
  71. package/web-ui/modules/app.methods.codex-config.mjs +869 -869
  72. package/web-ui/modules/app.methods.index.mjs +96 -96
  73. package/web-ui/modules/app.methods.install.mjs +205 -205
  74. package/web-ui/modules/app.methods.navigation.mjs +804 -804
  75. package/web-ui/modules/app.methods.openclaw-core.mjs +814 -814
  76. package/web-ui/modules/app.methods.openclaw-editing.mjs +420 -420
  77. package/web-ui/modules/app.methods.openclaw-persist.mjs +375 -375
  78. package/web-ui/modules/app.methods.providers.mjs +602 -601
  79. package/web-ui/modules/app.methods.runtime.mjs +426 -420
  80. package/web-ui/modules/app.methods.session-actions.mjs +617 -591
  81. package/web-ui/modules/app.methods.session-browser.mjs +1018 -1018
  82. package/web-ui/modules/app.methods.session-timeline.mjs +479 -479
  83. package/web-ui/modules/app.methods.session-trash.mjs +468 -468
  84. package/web-ui/modules/app.methods.startup-claude.mjs +557 -554
  85. package/web-ui/modules/app.methods.task-orchestration.mjs +556 -556
  86. package/web-ui/modules/app.methods.tool-config-permissions.mjs +90 -87
  87. package/web-ui/modules/app.methods.webhook.mjs +87 -87
  88. package/web-ui/modules/config-mode.computed.mjs +124 -124
  89. package/web-ui/modules/config-template-confirm-pref.mjs +33 -33
  90. package/web-ui/modules/i18n/locales/en.mjs +1187 -1140
  91. package/web-ui/modules/i18n/locales/ja.mjs +1178 -1130
  92. package/web-ui/modules/i18n/locales/vi.mjs +294 -239
  93. package/web-ui/modules/i18n/locales/zh.mjs +1190 -1143
  94. package/web-ui/modules/i18n.dict.mjs +14 -14
  95. package/web-ui/modules/i18n.mjs +111 -111
  96. package/web-ui/modules/plugins.computed.mjs +3 -3
  97. package/web-ui/modules/plugins.methods.mjs +3 -3
  98. package/web-ui/modules/plugins.storage.mjs +11 -11
  99. package/web-ui/modules/provider-url-display.mjs +17 -17
  100. package/web-ui/modules/sessions-filters-url.mjs +138 -138
  101. package/web-ui/modules/skills.computed.mjs +107 -107
  102. package/web-ui/modules/skills.methods.mjs +513 -513
  103. package/web-ui/partials/index/layout-footer.html +13 -13
  104. package/web-ui/partials/index/layout-header.html +478 -478
  105. package/web-ui/partials/index/modal-config-template-agents.html +185 -185
  106. package/web-ui/partials/index/modal-confirm-toast.html +32 -32
  107. package/web-ui/partials/index/modal-health-check.html +45 -45
  108. package/web-ui/partials/index/modal-openclaw-config.html +344 -344
  109. package/web-ui/partials/index/modal-skills.html +200 -200
  110. package/web-ui/partials/index/modal-webhook.html +42 -42
  111. package/web-ui/partials/index/modals-basic.html +263 -263
  112. package/web-ui/partials/index/panel-config-claude.html +187 -187
  113. package/web-ui/partials/index/panel-config-codex.html +205 -205
  114. package/web-ui/partials/index/panel-config-openclaw.html +89 -89
  115. package/web-ui/partials/index/panel-dashboard.html +171 -171
  116. package/web-ui/partials/index/panel-docs.html +114 -114
  117. package/web-ui/partials/index/panel-market.html +104 -104
  118. package/web-ui/partials/index/panel-orchestration.html +391 -391
  119. package/web-ui/partials/index/panel-plugins.html +253 -253
  120. package/web-ui/partials/index/panel-sessions.html +325 -319
  121. package/web-ui/partials/index/panel-settings.html +181 -181
  122. package/web-ui/partials/index/panel-trash.html +82 -82
  123. package/web-ui/partials/index/panel-usage.html +181 -181
  124. package/web-ui/res/json5.min.js +1 -1
  125. package/web-ui/res/vue.global.prod.js +13 -13
  126. package/web-ui/res/vue.runtime.global.prod.js +7 -7
  127. package/web-ui/res/web-ui-render.precompiled.js +7671 -7666
  128. package/web-ui/session-helpers.mjs +602 -602
  129. package/web-ui/source-bundle.cjs +305 -305
  130. package/web-ui/styles/base-theme.css +291 -291
  131. package/web-ui/styles/bridge-pool.css +266 -266
  132. package/web-ui/styles/controls-forms.css +532 -532
  133. package/web-ui/styles/dashboard.css +438 -438
  134. package/web-ui/styles/docs-panel.css +245 -245
  135. package/web-ui/styles/feedback.css +108 -108
  136. package/web-ui/styles/health-check-dialog.css +144 -144
  137. package/web-ui/styles/layout-shell.css +711 -711
  138. package/web-ui/styles/modals-core.css +499 -499
  139. package/web-ui/styles/navigation-panels.css +399 -399
  140. package/web-ui/styles/openclaw-structured.css +616 -616
  141. package/web-ui/styles/plugins-panel.css +564 -564
  142. package/web-ui/styles/responsive.css +501 -501
  143. package/web-ui/styles/sessions-list.css +683 -683
  144. package/web-ui/styles/sessions-preview.css +407 -407
  145. package/web-ui/styles/sessions-toolbar-trash.css +518 -518
  146. package/web-ui/styles/sessions-usage.css +849 -849
  147. package/web-ui/styles/settings-panel.css +419 -419
  148. package/web-ui/styles/skills-list.css +305 -305
  149. package/web-ui/styles/skills-market.css +723 -723
  150. package/web-ui/styles/task-orchestration.css +822 -822
  151. package/web-ui/styles/titles-cards.css +492 -486
  152. package/web-ui/styles/trash-panel.css +90 -90
  153. package/web-ui/styles/webhook.css +115 -115
  154. package/web-ui/styles.css +24 -24
  155. package/web-ui.html +17 -17
@@ -1,305 +1,305 @@
1
- .skills-hint-line,
2
- .hint-single-line {
3
- display: block;
4
- white-space: nowrap;
5
- overflow: hidden;
6
- text-overflow: ellipsis;
7
- max-width: 100%;
8
- }
9
-
10
- .skill-list {
11
- display: flex;
12
- flex-direction: column;
13
- gap: var(--spacing-xs);
14
- margin-bottom: var(--spacing-sm);
15
- max-height: min(52vh, 440px);
16
- overflow-y: auto;
17
- padding-right: 0;
18
- scrollbar-width: none;
19
- -ms-overflow-style: none;
20
- }
21
-
22
- .skills-manager-grid .skill-list {
23
- max-height: min(60vh, 520px);
24
- }
25
-
26
- .skills-manager-grid .skills-import-list {
27
- max-height: min(34vh, 320px);
28
- }
29
-
30
- .skill-list::-webkit-scrollbar {
31
- width: 0;
32
- height: 0;
33
- }
34
-
35
- .skill-list::-webkit-scrollbar-track {
36
- background: transparent;
37
- }
38
-
39
- .skill-list::-webkit-scrollbar-thumb {
40
- background: transparent;
41
- border: 0;
42
- }
43
-
44
- .skill-list::-webkit-scrollbar-thumb:hover {
45
- background: transparent;
46
- }
47
-
48
- .skill-item {
49
- display: flex;
50
- align-items: flex-start;
51
- gap: var(--spacing-xs);
52
- border: 1px solid var(--color-border-soft);
53
- border-radius: var(--radius-sm);
54
- padding: var(--spacing-xs);
55
- background: rgba(255,255,255,0.5);
56
- transition: all var(--transition-fast) var(--ease-spring);
57
- }
58
-
59
- .skill-item-main {
60
- min-width: 0;
61
- display: flex;
62
- flex-direction: column;
63
- gap: 6px;
64
- flex: 1;
65
- }
66
-
67
- .skill-item-title {
68
- font-size: var(--font-size-secondary);
69
- font-weight: var(--font-weight-secondary);
70
- color: var(--color-text-secondary);
71
- }
72
-
73
- .skill-item-description {
74
- font-size: var(--font-size-caption);
75
- line-height: 1.45;
76
- color: var(--color-text-tertiary);
77
- }
78
-
79
- .skill-item-meta {
80
- display: flex;
81
- flex-wrap: wrap;
82
- gap: var(--spacing-xs);
83
- align-items: center;
84
- min-width: 0;
85
- }
86
-
87
- .skill-item-path {
88
- font-family: var(--font-family-mono);
89
- font-size: var(--font-size-caption);
90
- color: var(--color-text-tertiary);
91
- word-break: break-all;
92
- }
93
-
94
- .skill-item:hover {
95
- border-color: rgba(200,121,99,0.35);
96
- background: rgba(255,243,236,0.3);
97
- }
98
-
99
- .skill-item.selected {
100
- border-color: rgba(200,121,99,0.5);
101
- background: linear-gradient(to right, rgba(255,243,236,0.7) 0%, rgba(255,255,255,0.6) 100%);
102
- box-shadow: inset 3px 0 0 var(--color-brand);
103
- }
104
-
105
- .skills-empty-state {
106
- margin-bottom: var(--spacing-sm);
107
- border: 1px solid var(--color-border-soft);
108
- border-radius: var(--radius-md);
109
- background: linear-gradient(to bottom, rgba(255,255,255,0.7) 0%, rgba(255,248,241,0.5) 100%);
110
- color: var(--color-text-tertiary);
111
- font-size: var(--font-size-secondary);
112
- text-align: center;
113
- padding: 24px var(--spacing-sm);
114
- }
115
-
116
- .skills-import-block {
117
- margin-bottom: var(--spacing-sm);
118
- }
119
-
120
- .skills-import-title {
121
- font-size: var(--font-size-body);
122
- font-weight: var(--font-weight-secondary);
123
- color: var(--color-text-secondary);
124
- }
125
-
126
- .skills-import-list {
127
- max-height: min(28vh, 260px);
128
- }
129
-
130
- .skills-import-empty {
131
- margin-bottom: 0;
132
- }
133
-
134
- .list-row {
135
- display: flex;
136
- flex-wrap: wrap;
137
- gap: var(--spacing-xs);
138
- align-items: center;
139
- margin-bottom: var(--spacing-xs);
140
- }
141
-
142
- .list-row:last-child {
143
- margin-bottom: 0;
144
- }
145
-
146
- .list-row .form-input {
147
- flex: 1;
148
- min-width: 140px;
149
- }
150
-
151
- .btn-mini {
152
- padding: 6px 10px;
153
- border-radius: var(--radius-sm);
154
- border: 1px solid var(--color-border-soft);
155
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.85) 100%);
156
- font-size: var(--font-size-caption);
157
- font-weight: var(--font-weight-secondary);
158
- color: var(--color-text-secondary);
159
- cursor: pointer;
160
- transition: all var(--transition-fast) var(--ease-spring);
161
- box-shadow: var(--shadow-subtle);
162
- }
163
-
164
- .btn-mini:hover {
165
- border-color: var(--color-brand);
166
- color: var(--color-brand);
167
- transform: translateY(-1px);
168
- }
169
-
170
- .btn-mini.delete {
171
- color: var(--color-error);
172
- border-color: rgba(193, 72, 59, 0.35);
173
- }
174
-
175
- .btn-mini.delete:hover {
176
- border-color: rgba(193, 72, 59, 0.7);
177
- color: var(--color-error);
178
- }
179
-
180
- .btn-group {
181
- display: flex;
182
- gap: var(--spacing-sm);
183
- margin-top: var(--spacing-md);
184
- }
185
-
186
- .btn {
187
- flex: 1;
188
- padding: 14px var(--spacing-sm);
189
- border-radius: var(--radius-sm);
190
- font-size: var(--font-size-body);
191
- font-weight: var(--font-weight-secondary);
192
- cursor: pointer;
193
- transition: all var(--transition-fast) var(--ease-spring);
194
- border: 1px solid var(--color-border-soft);
195
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.95) 100%);
196
- color: var(--color-text-secondary);
197
- box-shadow: var(--shadow-subtle);
198
- letter-spacing: -0.01em;
199
- }
200
-
201
- .btn:active {
202
- transform: scale(0.985);
203
- }
204
-
205
- .btn-cancel {
206
- background: linear-gradient(to bottom, var(--color-bg) 0%, rgba(247, 241, 232, 0.8) 100%);
207
- color: var(--color-text-primary);
208
- border: 1px solid var(--color-border-soft);
209
- }
210
-
211
- .btn-cancel:hover {
212
- background: linear-gradient(to bottom, var(--color-border) 0%, rgba(208, 196, 182, 0.5) 100%);
213
- }
214
-
215
- .btn-confirm {
216
- background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
217
- color: white;
218
- box-shadow: 0 2px 4px rgba(210, 107, 90, 0.2);
219
- border: none;
220
- }
221
-
222
- .btn-confirm:hover {
223
- box-shadow: 0 4px 8px rgba(210, 107, 90, 0.25);
224
- filter: brightness(1.05);
225
- }
226
-
227
- .btn-confirm.secondary {
228
- background: linear-gradient(135deg, var(--color-success) 0%, rgba(90, 139, 106, 0.85) 100%);
229
- box-shadow: 0 2px 4px rgba(90, 139, 106, 0.2);
230
- border: none;
231
- }
232
-
233
- .btn-confirm.secondary:hover {
234
- box-shadow: 0 4px 8px rgba(90, 139, 106, 0.25);
235
- filter: brightness(1.05);
236
- }
237
-
238
- .btn-confirm.btn-danger {
239
- background: linear-gradient(135deg, #c75642 0%, #9f392c 100%);
240
- box-shadow: 0 2px 4px rgba(163, 51, 38, 0.24);
241
- }
242
-
243
- .btn-confirm.btn-danger:hover {
244
- box-shadow: 0 4px 10px rgba(163, 51, 38, 0.28);
245
- filter: brightness(1.04);
246
- }
247
-
248
- /* ============================================
249
- 模型列表
250
- ============================================ */
251
- .model-list {
252
- max-height: 200px;
253
- overflow-y: auto;
254
- border: 1px solid rgba(208, 196, 182, 0.4);
255
- border-radius: var(--radius-sm);
256
- margin-bottom: var(--spacing-sm);
257
- scrollbar-width: none;
258
- background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.8) 100%);
259
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.02);
260
- }
261
-
262
- .model-list::-webkit-scrollbar {
263
- display: none;
264
- }
265
-
266
- .model-item {
267
- display: flex;
268
- justify-content: space-between;
269
- align-items: center;
270
- padding: 11px var(--spacing-sm);
271
- border-bottom: 1px solid rgba(208, 196, 182, 0.3);
272
- font-size: var(--font-size-body);
273
- color: var(--color-text-primary);
274
- transition: all var(--transition-fast) var(--ease-spring);
275
- letter-spacing: -0.005em;
276
- }
277
-
278
- .model-item:last-child {
279
- border-bottom: none;
280
- }
281
-
282
- .model-item:hover {
283
- background: linear-gradient(to right, rgba(247, 241, 232, 0.6) 0%, rgba(247, 241, 232, 0.3) 100%);
284
- }
285
-
286
- .btn-remove-model {
287
- font-size: var(--font-size-caption);
288
- font-weight: var(--font-weight-caption);
289
- color: var(--color-text-tertiary);
290
- cursor: pointer;
291
- padding: 5px 10px;
292
- border-radius: var(--radius-full);
293
- transition: all var(--transition-fast) var(--ease-spring);
294
- background: transparent;
295
- border: 1px solid rgba(139, 118, 104, 0.2);
296
- letter-spacing: 0.03em;
297
- }
298
-
299
- .btn-remove-model:hover {
300
- background: linear-gradient(135deg, var(--color-error) 0%, rgba(200, 74, 58, 0.9) 100%);
301
- color: white;
302
- transform: scale(1.08);
303
- box-shadow: 0 2px 6px rgba(200, 74, 58, 0.25);
304
- border-color: transparent;
305
- }
1
+ .skills-hint-line,
2
+ .hint-single-line {
3
+ display: block;
4
+ white-space: nowrap;
5
+ overflow: hidden;
6
+ text-overflow: ellipsis;
7
+ max-width: 100%;
8
+ }
9
+
10
+ .skill-list {
11
+ display: flex;
12
+ flex-direction: column;
13
+ gap: var(--spacing-xs);
14
+ margin-bottom: var(--spacing-sm);
15
+ max-height: min(52vh, 440px);
16
+ overflow-y: auto;
17
+ padding-right: 0;
18
+ scrollbar-width: none;
19
+ -ms-overflow-style: none;
20
+ }
21
+
22
+ .skills-manager-grid .skill-list {
23
+ max-height: min(60vh, 520px);
24
+ }
25
+
26
+ .skills-manager-grid .skills-import-list {
27
+ max-height: min(34vh, 320px);
28
+ }
29
+
30
+ .skill-list::-webkit-scrollbar {
31
+ width: 0;
32
+ height: 0;
33
+ }
34
+
35
+ .skill-list::-webkit-scrollbar-track {
36
+ background: transparent;
37
+ }
38
+
39
+ .skill-list::-webkit-scrollbar-thumb {
40
+ background: transparent;
41
+ border: 0;
42
+ }
43
+
44
+ .skill-list::-webkit-scrollbar-thumb:hover {
45
+ background: transparent;
46
+ }
47
+
48
+ .skill-item {
49
+ display: flex;
50
+ align-items: flex-start;
51
+ gap: var(--spacing-xs);
52
+ border: 1px solid var(--color-border-soft);
53
+ border-radius: var(--radius-sm);
54
+ padding: var(--spacing-xs);
55
+ background: rgba(255,255,255,0.5);
56
+ transition: all var(--transition-fast) var(--ease-spring);
57
+ }
58
+
59
+ .skill-item-main {
60
+ min-width: 0;
61
+ display: flex;
62
+ flex-direction: column;
63
+ gap: 6px;
64
+ flex: 1;
65
+ }
66
+
67
+ .skill-item-title {
68
+ font-size: var(--font-size-secondary);
69
+ font-weight: var(--font-weight-secondary);
70
+ color: var(--color-text-secondary);
71
+ }
72
+
73
+ .skill-item-description {
74
+ font-size: var(--font-size-caption);
75
+ line-height: 1.45;
76
+ color: var(--color-text-tertiary);
77
+ }
78
+
79
+ .skill-item-meta {
80
+ display: flex;
81
+ flex-wrap: wrap;
82
+ gap: var(--spacing-xs);
83
+ align-items: center;
84
+ min-width: 0;
85
+ }
86
+
87
+ .skill-item-path {
88
+ font-family: var(--font-family-mono);
89
+ font-size: var(--font-size-caption);
90
+ color: var(--color-text-tertiary);
91
+ word-break: break-all;
92
+ }
93
+
94
+ .skill-item:hover {
95
+ border-color: rgba(200,121,99,0.35);
96
+ background: rgba(255,243,236,0.3);
97
+ }
98
+
99
+ .skill-item.selected {
100
+ border-color: rgba(200,121,99,0.5);
101
+ background: linear-gradient(to right, rgba(255,243,236,0.7) 0%, rgba(255,255,255,0.6) 100%);
102
+ box-shadow: inset 3px 0 0 var(--color-brand);
103
+ }
104
+
105
+ .skills-empty-state {
106
+ margin-bottom: var(--spacing-sm);
107
+ border: 1px solid var(--color-border-soft);
108
+ border-radius: var(--radius-md);
109
+ background: linear-gradient(to bottom, rgba(255,255,255,0.7) 0%, rgba(255,248,241,0.5) 100%);
110
+ color: var(--color-text-tertiary);
111
+ font-size: var(--font-size-secondary);
112
+ text-align: center;
113
+ padding: 24px var(--spacing-sm);
114
+ }
115
+
116
+ .skills-import-block {
117
+ margin-bottom: var(--spacing-sm);
118
+ }
119
+
120
+ .skills-import-title {
121
+ font-size: var(--font-size-body);
122
+ font-weight: var(--font-weight-secondary);
123
+ color: var(--color-text-secondary);
124
+ }
125
+
126
+ .skills-import-list {
127
+ max-height: min(28vh, 260px);
128
+ }
129
+
130
+ .skills-import-empty {
131
+ margin-bottom: 0;
132
+ }
133
+
134
+ .list-row {
135
+ display: flex;
136
+ flex-wrap: wrap;
137
+ gap: var(--spacing-xs);
138
+ align-items: center;
139
+ margin-bottom: var(--spacing-xs);
140
+ }
141
+
142
+ .list-row:last-child {
143
+ margin-bottom: 0;
144
+ }
145
+
146
+ .list-row .form-input {
147
+ flex: 1;
148
+ min-width: 140px;
149
+ }
150
+
151
+ .btn-mini {
152
+ padding: 6px 10px;
153
+ border-radius: var(--radius-sm);
154
+ border: 1px solid var(--color-border-soft);
155
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.95) 0%, rgba(255, 255, 255, 0.85) 100%);
156
+ font-size: var(--font-size-caption);
157
+ font-weight: var(--font-weight-secondary);
158
+ color: var(--color-text-secondary);
159
+ cursor: pointer;
160
+ transition: all var(--transition-fast) var(--ease-spring);
161
+ box-shadow: var(--shadow-subtle);
162
+ }
163
+
164
+ .btn-mini:hover {
165
+ border-color: var(--color-brand);
166
+ color: var(--color-brand);
167
+ transform: translateY(-1px);
168
+ }
169
+
170
+ .btn-mini.delete {
171
+ color: var(--color-error);
172
+ border-color: rgba(193, 72, 59, 0.35);
173
+ }
174
+
175
+ .btn-mini.delete:hover {
176
+ border-color: rgba(193, 72, 59, 0.7);
177
+ color: var(--color-error);
178
+ }
179
+
180
+ .btn-group {
181
+ display: flex;
182
+ gap: var(--spacing-sm);
183
+ margin-top: var(--spacing-md);
184
+ }
185
+
186
+ .btn {
187
+ flex: 1;
188
+ padding: 14px var(--spacing-sm);
189
+ border-radius: var(--radius-sm);
190
+ font-size: var(--font-size-body);
191
+ font-weight: var(--font-weight-secondary);
192
+ cursor: pointer;
193
+ transition: all var(--transition-fast) var(--ease-spring);
194
+ border: 1px solid var(--color-border-soft);
195
+ background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.95) 100%);
196
+ color: var(--color-text-secondary);
197
+ box-shadow: var(--shadow-subtle);
198
+ letter-spacing: -0.01em;
199
+ }
200
+
201
+ .btn:active {
202
+ transform: scale(0.985);
203
+ }
204
+
205
+ .btn-cancel {
206
+ background: linear-gradient(to bottom, var(--color-bg) 0%, rgba(247, 241, 232, 0.8) 100%);
207
+ color: var(--color-text-primary);
208
+ border: 1px solid var(--color-border-soft);
209
+ }
210
+
211
+ .btn-cancel:hover {
212
+ background: linear-gradient(to bottom, var(--color-border) 0%, rgba(208, 196, 182, 0.5) 100%);
213
+ }
214
+
215
+ .btn-confirm {
216
+ background: linear-gradient(135deg, var(--color-brand) 0%, var(--color-brand-dark) 100%);
217
+ color: white;
218
+ box-shadow: 0 2px 4px rgba(210, 107, 90, 0.2);
219
+ border: none;
220
+ }
221
+
222
+ .btn-confirm:hover {
223
+ box-shadow: 0 4px 8px rgba(210, 107, 90, 0.25);
224
+ filter: brightness(1.05);
225
+ }
226
+
227
+ .btn-confirm.secondary {
228
+ background: linear-gradient(135deg, var(--color-success) 0%, rgba(90, 139, 106, 0.85) 100%);
229
+ box-shadow: 0 2px 4px rgba(90, 139, 106, 0.2);
230
+ border: none;
231
+ }
232
+
233
+ .btn-confirm.secondary:hover {
234
+ box-shadow: 0 4px 8px rgba(90, 139, 106, 0.25);
235
+ filter: brightness(1.05);
236
+ }
237
+
238
+ .btn-confirm.btn-danger {
239
+ background: linear-gradient(135deg, #c75642 0%, #9f392c 100%);
240
+ box-shadow: 0 2px 4px rgba(163, 51, 38, 0.24);
241
+ }
242
+
243
+ .btn-confirm.btn-danger:hover {
244
+ box-shadow: 0 4px 10px rgba(163, 51, 38, 0.28);
245
+ filter: brightness(1.04);
246
+ }
247
+
248
+ /* ============================================
249
+ 模型列表
250
+ ============================================ */
251
+ .model-list {
252
+ max-height: 200px;
253
+ overflow-y: auto;
254
+ border: 1px solid rgba(208, 196, 182, 0.4);
255
+ border-radius: var(--radius-sm);
256
+ margin-bottom: var(--spacing-sm);
257
+ scrollbar-width: none;
258
+ background: linear-gradient(to bottom, var(--color-surface) 0%, rgba(255, 255, 255, 0.8) 100%);
259
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.02);
260
+ }
261
+
262
+ .model-list::-webkit-scrollbar {
263
+ display: none;
264
+ }
265
+
266
+ .model-item {
267
+ display: flex;
268
+ justify-content: space-between;
269
+ align-items: center;
270
+ padding: 11px var(--spacing-sm);
271
+ border-bottom: 1px solid rgba(208, 196, 182, 0.3);
272
+ font-size: var(--font-size-body);
273
+ color: var(--color-text-primary);
274
+ transition: all var(--transition-fast) var(--ease-spring);
275
+ letter-spacing: -0.005em;
276
+ }
277
+
278
+ .model-item:last-child {
279
+ border-bottom: none;
280
+ }
281
+
282
+ .model-item:hover {
283
+ background: linear-gradient(to right, rgba(247, 241, 232, 0.6) 0%, rgba(247, 241, 232, 0.3) 100%);
284
+ }
285
+
286
+ .btn-remove-model {
287
+ font-size: var(--font-size-caption);
288
+ font-weight: var(--font-weight-caption);
289
+ color: var(--color-text-tertiary);
290
+ cursor: pointer;
291
+ padding: 5px 10px;
292
+ border-radius: var(--radius-full);
293
+ transition: all var(--transition-fast) var(--ease-spring);
294
+ background: transparent;
295
+ border: 1px solid rgba(139, 118, 104, 0.2);
296
+ letter-spacing: 0.03em;
297
+ }
298
+
299
+ .btn-remove-model:hover {
300
+ background: linear-gradient(135deg, var(--color-error) 0%, rgba(200, 74, 58, 0.9) 100%);
301
+ color: white;
302
+ transform: scale(1.08);
303
+ box-shadow: 0 2px 6px rgba(200, 74, 58, 0.25);
304
+ border-color: transparent;
305
+ }