codexmate 0.0.41 → 0.0.42

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 +16494 -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 +695 -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 +601 -601
  79. package/web-ui/modules/app.methods.runtime.mjs +420 -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 +554 -554
  85. package/web-ui/modules/app.methods.task-orchestration.mjs +556 -556
  86. package/web-ui/modules/app.methods.tool-config-permissions.mjs +87 -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 +1141 -1140
  91. package/web-ui/modules/i18n/locales/ja.mjs +1132 -1130
  92. package/web-ui/modules/i18n/locales/vi.mjs +239 -239
  93. package/web-ui/modules/i18n/locales/zh.mjs +1144 -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 +486 -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,438 +1,438 @@
1
- .doctor-hero {
2
- margin-top: 0;
3
- }
4
-
5
- .doctor-grid {
6
- display: grid;
7
- grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
8
- gap: 12px;
9
- margin-top: 12px;
10
- }
11
-
12
- .doctor-card {
13
- text-align: left;
14
- padding: 14px 14px 12px;
15
- border-radius: var(--radius-lg);
16
- border: 1px solid var(--color-border-soft);
17
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0.92) 0%, rgba(246, 240, 232, 0.9) 100%);
18
- box-shadow: var(--shadow-subtle);
19
- cursor: pointer;
20
- display: flex;
21
- flex-direction: column;
22
- gap: 8px;
23
- min-width: 0;
24
- max-width: 100%;
25
- overflow: hidden;
26
- }
27
-
28
- .doctor-card:disabled {
29
- opacity: 0.6;
30
- cursor: not-allowed;
31
- }
32
-
33
- .doctor-card-title {
34
- font-size: var(--font-size-body);
35
- font-weight: var(--font-weight-title);
36
- color: var(--color-text-primary);
37
- }
38
-
39
- .doctor-card-meta {
40
- display: flex;
41
- align-items: center;
42
- gap: 6px;
43
- font-size: var(--font-size-caption);
44
- color: var(--color-text-tertiary);
45
- white-space: nowrap;
46
- overflow: hidden;
47
- text-overflow: ellipsis;
48
- }
49
-
50
- .doctor-card-meta span {
51
- min-width: 0;
52
- }
53
-
54
- .doctor-card-meta span:not(:nth-child(2)) {
55
- flex: 1 1 auto;
56
- overflow: hidden;
57
- text-overflow: ellipsis;
58
- }
59
-
60
- .doctor-card-kv {
61
- display: grid;
62
- grid-template-columns: 92px minmax(0, 1fr);
63
- gap: 8px;
64
- align-items: baseline;
65
- font-size: var(--font-size-caption);
66
- color: var(--color-text-secondary);
67
- min-width: 0;
68
- }
69
-
70
- .doctor-card-kv > span:first-child {
71
- color: var(--color-text-tertiary);
72
- }
73
-
74
- .doctor-card-kv > span:nth-child(2) {
75
- min-width: 0;
76
- overflow: hidden;
77
- display: -webkit-box;
78
- -webkit-box-orient: vertical;
79
- -webkit-line-clamp: 2;
80
- overflow-wrap: anywhere;
81
- word-break: break-word;
82
- justify-self: start;
83
- text-align: left;
84
- }
85
-
86
- .doctor-kv-error {
87
- color: #8a2f36;
88
- overflow: hidden;
89
- text-overflow: ellipsis;
90
- white-space: nowrap;
91
- }
92
-
93
- .doctor-status-row {
94
- margin-top: 4px;
95
- display: flex;
96
- flex-wrap: wrap;
97
- gap: 10px;
98
- justify-content: flex-start;
99
- }
100
-
101
- .doctor-status-chip {
102
- display: inline-flex;
103
- align-items: center;
104
- gap: 8px;
105
- padding: 8px 10px;
106
- border-radius: 999px;
107
- border: 1px solid var(--color-border-soft);
108
- background: rgba(255, 255, 255, 0.78);
109
- font-size: var(--font-size-caption);
110
- color: var(--color-text-secondary);
111
- justify-content: center;
112
- text-align: center;
113
- }
114
-
115
- .doctor-status-chip strong {
116
- color: var(--color-text-primary);
117
- font-weight: var(--font-weight-secondary);
118
- }
119
-
120
- .doctor-status-chip.ok {
121
- border-color: rgba(57, 181, 97, 0.25);
122
- background: rgba(57, 181, 97, 0.08);
123
- color: #2b6a3b;
124
- }
125
-
126
- .doctor-status-chip.warn {
127
- border-color: rgba(246, 211, 106, 0.45);
128
- background: rgba(246, 211, 106, 0.16);
129
- color: #6f4b00;
130
- }
131
-
132
- .doctor-status-chip.error {
133
- border-color: rgba(220, 95, 108, 0.28);
134
- background: rgba(220, 95, 108, 0.08);
135
- color: #8a2f36;
136
- }
137
-
138
- .doctor-health-result {
139
- margin-top: 12px;
140
- border-radius: var(--radius-lg);
141
- border: 1px solid var(--color-border-soft);
142
- padding: 12px 12px 10px;
143
- background: rgba(255, 255, 255, 0.78);
144
- text-align: left;
145
- }
146
-
147
- .doctor-health-result.ok {
148
- border-color: rgba(57, 181, 97, 0.25);
149
- background: rgba(57, 181, 97, 0.08);
150
- color: #2b6a3b;
151
- }
152
-
153
- .doctor-health-result.error {
154
- border-color: rgba(220, 95, 108, 0.28);
155
- background: rgba(220, 95, 108, 0.08);
156
- color: #8a2f36;
157
- }
158
-
159
- .doctor-health-title {
160
- font-weight: var(--font-weight-secondary);
161
- color: var(--color-text-primary);
162
- text-align: left;
163
- }
164
-
165
- .doctor-health-issues {
166
- display: flex;
167
- flex-direction: column;
168
- gap: 6px;
169
- font-size: var(--font-size-caption);
170
- align-items: center;
171
- }
172
-
173
- .doctor-health-issue {
174
- padding: 8px 10px;
175
- border-radius: 12px;
176
- border: 1px solid rgba(220, 95, 108, 0.2);
177
- background: rgba(255, 255, 255, 0.75);
178
- color: var(--color-text-secondary);
179
- overflow-wrap: anywhere;
180
- word-break: break-word;
181
- text-align: center;
182
- width: 100%;
183
- max-width: 720px;
184
- }
185
-
186
- .doctor-action-list {
187
- margin-top: 14px;
188
- display: grid;
189
- gap: 10px;
190
- }
191
-
192
- .doctor-action-card {
193
- border-radius: var(--radius-lg);
194
- border: 1px solid var(--color-border-soft);
195
- background: rgba(255, 255, 255, 0.78);
196
- padding: 12px;
197
- overflow: hidden;
198
- text-align: left;
199
- }
200
-
201
- .doctor-action-head {
202
- display: flex;
203
- align-items: center;
204
- justify-content: space-between;
205
- gap: 10px;
206
- flex-wrap: wrap;
207
- margin-bottom: 8px;
208
- }
209
-
210
- .doctor-action-title {
211
- font-weight: var(--font-weight-secondary);
212
- color: var(--color-text-primary);
213
- min-width: 0;
214
- overflow: hidden;
215
- text-overflow: ellipsis;
216
- white-space: nowrap;
217
- max-width: 100%;
218
- flex: 1 1 220px;
219
- }
220
-
221
- .doctor-action-severity {
222
- flex: 0 0 auto;
223
- font-size: var(--font-size-caption);
224
- padding: 3px 10px;
225
- border-radius: 999px;
226
- border: 1px solid var(--color-border-soft);
227
- background: rgba(255, 255, 255, 0.85);
228
- color: var(--color-text-secondary);
229
- text-transform: uppercase;
230
- }
231
-
232
- .doctor-action-severity.error {
233
- border-color: rgba(220, 95, 108, 0.28);
234
- background: rgba(220, 95, 108, 0.08);
235
- color: #8a2f36;
236
- }
237
-
238
- .doctor-action-severity.warn {
239
- border-color: rgba(246, 211, 106, 0.45);
240
- background: rgba(246, 211, 106, 0.16);
241
- color: #6f4b00;
242
- }
243
-
244
- .doctor-action-severity.info {
245
- border-color: rgba(126, 163, 215, 0.35);
246
- background: rgba(126, 163, 215, 0.14);
247
- color: #1f3d62;
248
- }
249
-
250
- .doctor-action-impact {
251
- font-size: var(--font-size-caption);
252
- color: var(--color-text-secondary);
253
- overflow-wrap: anywhere;
254
- word-break: break-word;
255
- max-width: 920px;
256
- margin: 0 0 10px;
257
- }
258
-
259
- .doctor-action-buttons {
260
- display: flex;
261
- flex-wrap: wrap;
262
- gap: 8px;
263
- justify-content: flex-start;
264
- }
265
-
266
- .doctor-action-footer {
267
- display: flex;
268
- justify-content: flex-start;
269
- flex-wrap: wrap;
270
- gap: 8px;
271
- margin-top: 2px;
272
- }
273
-
274
- @media (max-width: 520px) {
275
- .doctor-grid {
276
- grid-template-columns: 1fr;
277
- gap: 10px;
278
- }
279
-
280
- .doctor-card {
281
- padding: 12px;
282
- gap: 6px;
283
- }
284
-
285
- .doctor-card-kv {
286
- grid-template-columns: 76px minmax(0, 1fr);
287
- }
288
-
289
- .doctor-status-row {
290
- gap: 8px;
291
- }
292
-
293
- .doctor-status-chip {
294
- flex: 1 1 120px;
295
- }
296
-
297
- .doctor-action-card {
298
- padding: 10px;
299
- }
300
-
301
- .doctor-action-buttons .btn-tool,
302
- .doctor-action-footer .btn-tool {
303
- flex: 1 1 150px;
304
- justify-content: center;
305
- }
306
- }
307
-
308
- .doctor-providers-health {
309
- margin-top: 12px;
310
- padding: 12px;
311
- border-radius: var(--radius-lg);
312
- border: 1px solid var(--color-border-soft);
313
- background: rgba(255, 255, 255, 0.78);
314
- }
315
-
316
- .doctor-providers-health-title {
317
- font-size: var(--font-size-body);
318
- font-weight: var(--font-weight-title);
319
- color: var(--color-text-primary);
320
- margin-bottom: 10px;
321
- display: flex;
322
- align-items: center;
323
- gap: 8px;
324
- }
325
-
326
- .doctor-providers-health-summary {
327
- font-size: var(--font-size-caption);
328
- font-weight: var(--font-weight-primary);
329
- color: var(--color-text-tertiary);
330
- }
331
-
332
- .doctor-providers-grid {
333
- display: flex;
334
- flex-wrap: wrap;
335
- gap: 8px;
336
- }
337
-
338
- .doctor-provider-chip {
339
- display: inline-flex;
340
- align-items: center;
341
- gap: 6px;
342
- padding: 6px 12px;
343
- border-radius: 999px;
344
- border: 1px solid var(--color-border-soft);
345
- background: rgba(255, 255, 255, 0.85);
346
- font-size: var(--font-size-caption);
347
- color: var(--color-text-secondary);
348
- max-width: 100%;
349
- overflow: hidden;
350
- }
351
-
352
- .doctor-provider-chip.green {
353
- border-color: rgba(57, 181, 97, 0.25);
354
- background: rgba(57, 181, 97, 0.08);
355
- color: #2b6a3b;
356
- }
357
-
358
- .doctor-provider-chip.yellow {
359
- border-color: rgba(246, 211, 106, 0.45);
360
- background: rgba(246, 211, 106, 0.16);
361
- color: #6f4b00;
362
- }
363
-
364
- .doctor-provider-chip.red {
365
- border-color: rgba(220, 95, 108, 0.28);
366
- background: rgba(220, 95, 108, 0.08);
367
- color: #8a2f36;
368
- }
369
-
370
- .doctor-provider-name {
371
- overflow: hidden;
372
- text-overflow: ellipsis;
373
- white-space: nowrap;
374
- }
375
-
376
- .doctor-provider-current {
377
- font-size: 0.85em;
378
- opacity: 0.7;
379
- margin-left: 2px;
380
- }
381
-
382
- .doctor-provider-status-dot {
383
- width: 8px;
384
- height: 8px;
385
- border-radius: 50%;
386
- flex-shrink: 0;
387
- }
388
-
389
- .doctor-provider-chip.green .doctor-provider-status-dot {
390
- background: rgba(57, 181, 97, 0.7);
391
- }
392
-
393
- .doctor-provider-chip.yellow .doctor-provider-status-dot {
394
- background: rgba(246, 211, 106, 0.85);
395
- }
396
-
397
- .doctor-provider-chip.red .doctor-provider-status-dot {
398
- background: rgba(220, 95, 108, 0.7);
399
- }
400
-
401
- .doctor-provider-issues {
402
- margin-top: 10px;
403
- display: flex;
404
- flex-direction: column;
405
- gap: 6px;
406
- }
407
-
408
- .doctor-provider-issue-card {
409
- padding: 8px 10px;
410
- border-radius: 10px;
411
- border: 1px solid rgba(220, 95, 108, 0.15);
412
- background: rgba(255, 255, 255, 0.7);
413
- }
414
-
415
- .doctor-provider-issue-name {
416
- font-weight: var(--font-weight-secondary);
417
- color: var(--color-text-primary);
418
- margin-bottom: 4px;
419
- }
420
-
421
- .doctor-provider-issue-row {
422
- font-size: var(--font-size-caption);
423
- color: var(--color-text-secondary);
424
- display: flex;
425
- flex-direction: column;
426
- gap: 2px;
427
- padding-left: 8px;
428
- margin-top: 4px;
429
- }
430
-
431
- .doctor-provider-issue-text {
432
- color: #8a2f36;
433
- }
434
-
435
- .doctor-provider-issue-fix {
436
- color: var(--color-text-tertiary);
437
- font-style: italic;
438
- }
1
+ .doctor-hero {
2
+ margin-top: 0;
3
+ }
4
+
5
+ .doctor-grid {
6
+ display: grid;
7
+ grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
8
+ gap: 12px;
9
+ margin-top: 12px;
10
+ }
11
+
12
+ .doctor-card {
13
+ text-align: left;
14
+ padding: 14px 14px 12px;
15
+ border-radius: var(--radius-lg);
16
+ border: 1px solid var(--color-border-soft);
17
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.92) 0%, rgba(246, 240, 232, 0.9) 100%);
18
+ box-shadow: var(--shadow-subtle);
19
+ cursor: pointer;
20
+ display: flex;
21
+ flex-direction: column;
22
+ gap: 8px;
23
+ min-width: 0;
24
+ max-width: 100%;
25
+ overflow: hidden;
26
+ }
27
+
28
+ .doctor-card:disabled {
29
+ opacity: 0.6;
30
+ cursor: not-allowed;
31
+ }
32
+
33
+ .doctor-card-title {
34
+ font-size: var(--font-size-body);
35
+ font-weight: var(--font-weight-title);
36
+ color: var(--color-text-primary);
37
+ }
38
+
39
+ .doctor-card-meta {
40
+ display: flex;
41
+ align-items: center;
42
+ gap: 6px;
43
+ font-size: var(--font-size-caption);
44
+ color: var(--color-text-tertiary);
45
+ white-space: nowrap;
46
+ overflow: hidden;
47
+ text-overflow: ellipsis;
48
+ }
49
+
50
+ .doctor-card-meta span {
51
+ min-width: 0;
52
+ }
53
+
54
+ .doctor-card-meta span:not(:nth-child(2)) {
55
+ flex: 1 1 auto;
56
+ overflow: hidden;
57
+ text-overflow: ellipsis;
58
+ }
59
+
60
+ .doctor-card-kv {
61
+ display: grid;
62
+ grid-template-columns: 92px minmax(0, 1fr);
63
+ gap: 8px;
64
+ align-items: baseline;
65
+ font-size: var(--font-size-caption);
66
+ color: var(--color-text-secondary);
67
+ min-width: 0;
68
+ }
69
+
70
+ .doctor-card-kv > span:first-child {
71
+ color: var(--color-text-tertiary);
72
+ }
73
+
74
+ .doctor-card-kv > span:nth-child(2) {
75
+ min-width: 0;
76
+ overflow: hidden;
77
+ display: -webkit-box;
78
+ -webkit-box-orient: vertical;
79
+ -webkit-line-clamp: 2;
80
+ overflow-wrap: anywhere;
81
+ word-break: break-word;
82
+ justify-self: start;
83
+ text-align: left;
84
+ }
85
+
86
+ .doctor-kv-error {
87
+ color: #8a2f36;
88
+ overflow: hidden;
89
+ text-overflow: ellipsis;
90
+ white-space: nowrap;
91
+ }
92
+
93
+ .doctor-status-row {
94
+ margin-top: 4px;
95
+ display: flex;
96
+ flex-wrap: wrap;
97
+ gap: 10px;
98
+ justify-content: flex-start;
99
+ }
100
+
101
+ .doctor-status-chip {
102
+ display: inline-flex;
103
+ align-items: center;
104
+ gap: 8px;
105
+ padding: 8px 10px;
106
+ border-radius: 999px;
107
+ border: 1px solid var(--color-border-soft);
108
+ background: rgba(255, 255, 255, 0.78);
109
+ font-size: var(--font-size-caption);
110
+ color: var(--color-text-secondary);
111
+ justify-content: center;
112
+ text-align: center;
113
+ }
114
+
115
+ .doctor-status-chip strong {
116
+ color: var(--color-text-primary);
117
+ font-weight: var(--font-weight-secondary);
118
+ }
119
+
120
+ .doctor-status-chip.ok {
121
+ border-color: rgba(57, 181, 97, 0.25);
122
+ background: rgba(57, 181, 97, 0.08);
123
+ color: #2b6a3b;
124
+ }
125
+
126
+ .doctor-status-chip.warn {
127
+ border-color: rgba(246, 211, 106, 0.45);
128
+ background: rgba(246, 211, 106, 0.16);
129
+ color: #6f4b00;
130
+ }
131
+
132
+ .doctor-status-chip.error {
133
+ border-color: rgba(220, 95, 108, 0.28);
134
+ background: rgba(220, 95, 108, 0.08);
135
+ color: #8a2f36;
136
+ }
137
+
138
+ .doctor-health-result {
139
+ margin-top: 12px;
140
+ border-radius: var(--radius-lg);
141
+ border: 1px solid var(--color-border-soft);
142
+ padding: 12px 12px 10px;
143
+ background: rgba(255, 255, 255, 0.78);
144
+ text-align: left;
145
+ }
146
+
147
+ .doctor-health-result.ok {
148
+ border-color: rgba(57, 181, 97, 0.25);
149
+ background: rgba(57, 181, 97, 0.08);
150
+ color: #2b6a3b;
151
+ }
152
+
153
+ .doctor-health-result.error {
154
+ border-color: rgba(220, 95, 108, 0.28);
155
+ background: rgba(220, 95, 108, 0.08);
156
+ color: #8a2f36;
157
+ }
158
+
159
+ .doctor-health-title {
160
+ font-weight: var(--font-weight-secondary);
161
+ color: var(--color-text-primary);
162
+ text-align: left;
163
+ }
164
+
165
+ .doctor-health-issues {
166
+ display: flex;
167
+ flex-direction: column;
168
+ gap: 6px;
169
+ font-size: var(--font-size-caption);
170
+ align-items: center;
171
+ }
172
+
173
+ .doctor-health-issue {
174
+ padding: 8px 10px;
175
+ border-radius: 12px;
176
+ border: 1px solid rgba(220, 95, 108, 0.2);
177
+ background: rgba(255, 255, 255, 0.75);
178
+ color: var(--color-text-secondary);
179
+ overflow-wrap: anywhere;
180
+ word-break: break-word;
181
+ text-align: center;
182
+ width: 100%;
183
+ max-width: 720px;
184
+ }
185
+
186
+ .doctor-action-list {
187
+ margin-top: 14px;
188
+ display: grid;
189
+ gap: 10px;
190
+ }
191
+
192
+ .doctor-action-card {
193
+ border-radius: var(--radius-lg);
194
+ border: 1px solid var(--color-border-soft);
195
+ background: rgba(255, 255, 255, 0.78);
196
+ padding: 12px;
197
+ overflow: hidden;
198
+ text-align: left;
199
+ }
200
+
201
+ .doctor-action-head {
202
+ display: flex;
203
+ align-items: center;
204
+ justify-content: space-between;
205
+ gap: 10px;
206
+ flex-wrap: wrap;
207
+ margin-bottom: 8px;
208
+ }
209
+
210
+ .doctor-action-title {
211
+ font-weight: var(--font-weight-secondary);
212
+ color: var(--color-text-primary);
213
+ min-width: 0;
214
+ overflow: hidden;
215
+ text-overflow: ellipsis;
216
+ white-space: nowrap;
217
+ max-width: 100%;
218
+ flex: 1 1 220px;
219
+ }
220
+
221
+ .doctor-action-severity {
222
+ flex: 0 0 auto;
223
+ font-size: var(--font-size-caption);
224
+ padding: 3px 10px;
225
+ border-radius: 999px;
226
+ border: 1px solid var(--color-border-soft);
227
+ background: rgba(255, 255, 255, 0.85);
228
+ color: var(--color-text-secondary);
229
+ text-transform: uppercase;
230
+ }
231
+
232
+ .doctor-action-severity.error {
233
+ border-color: rgba(220, 95, 108, 0.28);
234
+ background: rgba(220, 95, 108, 0.08);
235
+ color: #8a2f36;
236
+ }
237
+
238
+ .doctor-action-severity.warn {
239
+ border-color: rgba(246, 211, 106, 0.45);
240
+ background: rgba(246, 211, 106, 0.16);
241
+ color: #6f4b00;
242
+ }
243
+
244
+ .doctor-action-severity.info {
245
+ border-color: rgba(126, 163, 215, 0.35);
246
+ background: rgba(126, 163, 215, 0.14);
247
+ color: #1f3d62;
248
+ }
249
+
250
+ .doctor-action-impact {
251
+ font-size: var(--font-size-caption);
252
+ color: var(--color-text-secondary);
253
+ overflow-wrap: anywhere;
254
+ word-break: break-word;
255
+ max-width: 920px;
256
+ margin: 0 0 10px;
257
+ }
258
+
259
+ .doctor-action-buttons {
260
+ display: flex;
261
+ flex-wrap: wrap;
262
+ gap: 8px;
263
+ justify-content: flex-start;
264
+ }
265
+
266
+ .doctor-action-footer {
267
+ display: flex;
268
+ justify-content: flex-start;
269
+ flex-wrap: wrap;
270
+ gap: 8px;
271
+ margin-top: 2px;
272
+ }
273
+
274
+ @media (max-width: 520px) {
275
+ .doctor-grid {
276
+ grid-template-columns: 1fr;
277
+ gap: 10px;
278
+ }
279
+
280
+ .doctor-card {
281
+ padding: 12px;
282
+ gap: 6px;
283
+ }
284
+
285
+ .doctor-card-kv {
286
+ grid-template-columns: 76px minmax(0, 1fr);
287
+ }
288
+
289
+ .doctor-status-row {
290
+ gap: 8px;
291
+ }
292
+
293
+ .doctor-status-chip {
294
+ flex: 1 1 120px;
295
+ }
296
+
297
+ .doctor-action-card {
298
+ padding: 10px;
299
+ }
300
+
301
+ .doctor-action-buttons .btn-tool,
302
+ .doctor-action-footer .btn-tool {
303
+ flex: 1 1 150px;
304
+ justify-content: center;
305
+ }
306
+ }
307
+
308
+ .doctor-providers-health {
309
+ margin-top: 12px;
310
+ padding: 12px;
311
+ border-radius: var(--radius-lg);
312
+ border: 1px solid var(--color-border-soft);
313
+ background: rgba(255, 255, 255, 0.78);
314
+ }
315
+
316
+ .doctor-providers-health-title {
317
+ font-size: var(--font-size-body);
318
+ font-weight: var(--font-weight-title);
319
+ color: var(--color-text-primary);
320
+ margin-bottom: 10px;
321
+ display: flex;
322
+ align-items: center;
323
+ gap: 8px;
324
+ }
325
+
326
+ .doctor-providers-health-summary {
327
+ font-size: var(--font-size-caption);
328
+ font-weight: var(--font-weight-primary);
329
+ color: var(--color-text-tertiary);
330
+ }
331
+
332
+ .doctor-providers-grid {
333
+ display: flex;
334
+ flex-wrap: wrap;
335
+ gap: 8px;
336
+ }
337
+
338
+ .doctor-provider-chip {
339
+ display: inline-flex;
340
+ align-items: center;
341
+ gap: 6px;
342
+ padding: 6px 12px;
343
+ border-radius: 999px;
344
+ border: 1px solid var(--color-border-soft);
345
+ background: rgba(255, 255, 255, 0.85);
346
+ font-size: var(--font-size-caption);
347
+ color: var(--color-text-secondary);
348
+ max-width: 100%;
349
+ overflow: hidden;
350
+ }
351
+
352
+ .doctor-provider-chip.green {
353
+ border-color: rgba(57, 181, 97, 0.25);
354
+ background: rgba(57, 181, 97, 0.08);
355
+ color: #2b6a3b;
356
+ }
357
+
358
+ .doctor-provider-chip.yellow {
359
+ border-color: rgba(246, 211, 106, 0.45);
360
+ background: rgba(246, 211, 106, 0.16);
361
+ color: #6f4b00;
362
+ }
363
+
364
+ .doctor-provider-chip.red {
365
+ border-color: rgba(220, 95, 108, 0.28);
366
+ background: rgba(220, 95, 108, 0.08);
367
+ color: #8a2f36;
368
+ }
369
+
370
+ .doctor-provider-name {
371
+ overflow: hidden;
372
+ text-overflow: ellipsis;
373
+ white-space: nowrap;
374
+ }
375
+
376
+ .doctor-provider-current {
377
+ font-size: 0.85em;
378
+ opacity: 0.7;
379
+ margin-left: 2px;
380
+ }
381
+
382
+ .doctor-provider-status-dot {
383
+ width: 8px;
384
+ height: 8px;
385
+ border-radius: 50%;
386
+ flex-shrink: 0;
387
+ }
388
+
389
+ .doctor-provider-chip.green .doctor-provider-status-dot {
390
+ background: rgba(57, 181, 97, 0.7);
391
+ }
392
+
393
+ .doctor-provider-chip.yellow .doctor-provider-status-dot {
394
+ background: rgba(246, 211, 106, 0.85);
395
+ }
396
+
397
+ .doctor-provider-chip.red .doctor-provider-status-dot {
398
+ background: rgba(220, 95, 108, 0.7);
399
+ }
400
+
401
+ .doctor-provider-issues {
402
+ margin-top: 10px;
403
+ display: flex;
404
+ flex-direction: column;
405
+ gap: 6px;
406
+ }
407
+
408
+ .doctor-provider-issue-card {
409
+ padding: 8px 10px;
410
+ border-radius: 10px;
411
+ border: 1px solid rgba(220, 95, 108, 0.15);
412
+ background: rgba(255, 255, 255, 0.7);
413
+ }
414
+
415
+ .doctor-provider-issue-name {
416
+ font-weight: var(--font-weight-secondary);
417
+ color: var(--color-text-primary);
418
+ margin-bottom: 4px;
419
+ }
420
+
421
+ .doctor-provider-issue-row {
422
+ font-size: var(--font-size-caption);
423
+ color: var(--color-text-secondary);
424
+ display: flex;
425
+ flex-direction: column;
426
+ gap: 2px;
427
+ padding-left: 8px;
428
+ margin-top: 4px;
429
+ }
430
+
431
+ .doctor-provider-issue-text {
432
+ color: #8a2f36;
433
+ }
434
+
435
+ .doctor-provider-issue-fix {
436
+ color: var(--color-text-tertiary);
437
+ font-style: italic;
438
+ }