@profoundlogic/coderflow-server 0.7.6 → 0.7.8

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 (188) hide show
  1. package/dist/base-image/agent-wrapper.sh +3 -1
  2. package/dist/coder-server.js +1 -1
  3. package/dist/config.js +1 -1
  4. package/dist/lib/agent-keepalive.js +1 -1
  5. package/dist/lib/agent-models.js +1 -1
  6. package/dist/lib/api-keys.js +1 -1
  7. package/dist/lib/apiKeys.js +1 -1
  8. package/dist/lib/app-server-ports.js +1 -1
  9. package/dist/lib/auto-judge.js +1 -1
  10. package/dist/lib/automation-service.js +1 -1
  11. package/dist/lib/basic-auth.js +1 -1
  12. package/dist/lib/bindings.js +1 -1
  13. package/dist/lib/build-history.js +1 -1
  14. package/dist/lib/build-output-service.js +1 -1
  15. package/dist/lib/build-scheduler.js +1 -1
  16. package/dist/lib/build-service.js +1 -1
  17. package/dist/lib/ca-certificates.js +1 -1
  18. package/dist/lib/claude-oauth-refresh.js +1 -1
  19. package/dist/lib/cli/build.js +1 -1
  20. package/dist/lib/cli/cleanup-users.js +1 -1
  21. package/dist/lib/cli/config-command.js +1 -1
  22. package/dist/lib/cli/config.js +1 -1
  23. package/dist/lib/cli/create-user.js +1 -1
  24. package/dist/lib/cli/grant-admin.js +1 -1
  25. package/dist/lib/cli/init.js +1 -1
  26. package/dist/lib/cli/jira.js +1 -1
  27. package/dist/lib/cli/license.js +1 -1
  28. package/dist/lib/cli/list-roles.js +1 -1
  29. package/dist/lib/cli/list-users.js +1 -1
  30. package/dist/lib/cli/server-manager.js +1 -1
  31. package/dist/lib/cli/set-password.js +1 -1
  32. package/dist/lib/compression-filter.js +1 -0
  33. package/dist/lib/config-migration.js +1 -1
  34. package/dist/lib/container-credential-sync.js +1 -1
  35. package/dist/lib/container-tokens.js +1 -1
  36. package/dist/lib/data-dir.js +1 -1
  37. package/dist/lib/deployment-history.js +1 -1
  38. package/dist/lib/deployment-service.js +1 -1
  39. package/dist/lib/docker-utils.js +1 -1
  40. package/dist/lib/email.js +1 -1
  41. package/dist/lib/emailTemplates.js +1 -1
  42. package/dist/lib/entitlement.js +1 -1
  43. package/dist/lib/external-connections.js +1 -1
  44. package/dist/lib/fetch-utils.js +1 -1
  45. package/dist/lib/git-commit-details-route.js +1 -1
  46. package/dist/lib/git-history-diff-guardrails.js +1 -1
  47. package/dist/lib/git-provider-service.js +1 -1
  48. package/dist/lib/git-provider-setup/github-setup-handler.js +1 -1
  49. package/dist/lib/git-provider-setup/index.js +1 -1
  50. package/dist/lib/git-provider-setup/setup-factory.js +1 -1
  51. package/dist/lib/git-provider-setup/setup-interface.js +1 -1
  52. package/dist/lib/git-providers/azure-devops-provider.js +1 -1
  53. package/dist/lib/git-providers/github-app-provider.js +1 -1
  54. package/dist/lib/git-providers/index.js +1 -1
  55. package/dist/lib/git-providers/provider-factory.js +1 -1
  56. package/dist/lib/git-providers/provider-interface.js +1 -1
  57. package/dist/lib/github-urls.js +1 -1
  58. package/dist/lib/group-objective-linking.js +1 -1
  59. package/dist/lib/ibmi-sync.js +1 -1
  60. package/dist/lib/jira-client.js +1 -1
  61. package/dist/lib/judge-blinding.js +1 -1
  62. package/dist/lib/logger.js +1 -1
  63. package/dist/lib/memory-utils.js +1 -1
  64. package/dist/lib/migration-to-scoped-rbac.js +1 -1
  65. package/dist/lib/model-fetcher.js +1 -1
  66. package/dist/lib/notifications.js +1 -1
  67. package/dist/lib/objective-context.js +1 -1
  68. package/dist/lib/oidc-auth.js +1 -1
  69. package/dist/lib/oidc-device-flow.js +1 -1
  70. package/dist/lib/passwordTokens.js +1 -1
  71. package/dist/lib/permission-resolver.js +1 -1
  72. package/dist/lib/pin-cascade.js +1 -1
  73. package/dist/lib/provider-accounts.js +1 -1
  74. package/dist/lib/provider-oauth.js +1 -1
  75. package/dist/lib/provider-profile.js +1 -1
  76. package/dist/lib/provider-token-refresh.js +1 -1
  77. package/dist/lib/rbac-user-state.js +1 -1
  78. package/dist/lib/request-url.js +1 -1
  79. package/dist/lib/rewind.js +1 -1
  80. package/dist/lib/role-definitions.js +1 -1
  81. package/dist/lib/roles.js +1 -1
  82. package/dist/lib/secrets.js +1 -1
  83. package/dist/lib/setup-repo-git-auth.js +1 -1
  84. package/dist/lib/state-capture.js +1 -1
  85. package/dist/lib/static-files.js +1 -1
  86. package/dist/lib/task-aliases.js +1 -1
  87. package/dist/lib/task-name-format.js +1 -1
  88. package/dist/lib/task-name-generator.js +1 -1
  89. package/dist/lib/task-source-metadata.js +1 -1
  90. package/dist/lib/teams.js +1 -1
  91. package/dist/lib/user-git-oauth.js +1 -1
  92. package/dist/lib/user-git-tokens.js +1 -1
  93. package/dist/lib/users.js +1 -1
  94. package/dist/middleware/requireAuth.js +1 -1
  95. package/dist/middleware/requireInit.js +1 -1
  96. package/dist/middleware/requirePermission.js +1 -1
  97. package/dist/package.json +1 -1
  98. package/dist/playwright.config.js +1 -1
  99. package/dist/playwright.task-terminal.config.js +1 -1
  100. package/dist/routes/apiKeys.js +1 -1
  101. package/dist/routes/auth-oidc.js +1 -1
  102. package/dist/routes/auth.js +1 -1
  103. package/dist/routes/automations.js +1 -1
  104. package/dist/routes/bindings.js +1 -1
  105. package/dist/routes/build.js +1 -1
  106. package/dist/routes/containers.js +1 -1
  107. package/dist/routes/deploy-task.js +1 -1
  108. package/dist/routes/environment-management.js +1 -1
  109. package/dist/routes/environments.js +1 -1
  110. package/dist/routes/external-skills.js +1 -1
  111. package/dist/routes/git-credentials.js +1 -1
  112. package/dist/routes/git-oauth.js +1 -1
  113. package/dist/routes/git-provider-setup.js +1 -1
  114. package/dist/routes/health.js +1 -1
  115. package/dist/routes/jira.js +1 -1
  116. package/dist/routes/logs.js +1 -0
  117. package/dist/routes/objective-management.js +1 -1
  118. package/dist/routes/password.js +1 -1
  119. package/dist/routes/prompt.js +1 -1
  120. package/dist/routes/provider-auth.js +1 -1
  121. package/dist/routes/qa.js +1 -1
  122. package/dist/routes/roles.js +1 -1
  123. package/dist/routes/settings.js +1 -1
  124. package/dist/routes/skill-management.js +1 -1
  125. package/dist/routes/skills.js +1 -1
  126. package/dist/routes/stats.js +1 -0
  127. package/dist/routes/tasks.js +1 -1
  128. package/dist/routes/teams.js +1 -1
  129. package/dist/routes/templates.js +1 -1
  130. package/dist/routes/test-task.js +1 -1
  131. package/dist/routes/test.js +1 -1
  132. package/dist/routes/users.js +1 -1
  133. package/dist/routes/visualizations.js +1 -1
  134. package/dist/scripts/create-user.js +1 -1
  135. package/dist/scripts/migrate-config-to-data-dir.js +1 -1
  136. package/dist/start.js +1 -1
  137. package/dist/web-ui/public/activity-detail-modal.js +1 -1
  138. package/dist/web-ui/public/activity-feed.js +1 -1
  139. package/dist/web-ui/public/activity-formatters.js +1 -1
  140. package/dist/web-ui/public/admin.css +575 -0
  141. package/dist/web-ui/public/admin.html +636 -0
  142. package/dist/web-ui/public/admin.js +1 -0
  143. package/dist/web-ui/public/agent-event-parser.js +1 -1
  144. package/dist/web-ui/public/app.js +1 -1
  145. package/dist/web-ui/public/approve-dialog.js +1 -1
  146. package/dist/web-ui/public/automation-links.js +1 -1
  147. package/dist/web-ui/public/automation-schedule.js +1 -1
  148. package/dist/web-ui/public/comments-widget.js +1 -1
  149. package/dist/web-ui/public/diff-utils.js +1 -1
  150. package/dist/web-ui/public/environments.html +2 -2
  151. package/dist/web-ui/public/environments.js +1 -1
  152. package/dist/web-ui/public/feedback-widget.js +1 -1
  153. package/dist/web-ui/public/file-selection-tree.js +1 -1
  154. package/dist/web-ui/public/git-history-lazy-utils.js +1 -1
  155. package/dist/web-ui/public/git-history.html +2 -2
  156. package/dist/web-ui/public/git-history.js +1 -1
  157. package/dist/web-ui/public/git-status.js +1 -1
  158. package/dist/web-ui/public/ibmi-file-filter.js +1 -1
  159. package/dist/web-ui/public/index.html +2 -170
  160. package/dist/web-ui/public/index.js +1 -1
  161. package/dist/web-ui/public/login.js +1 -1
  162. package/dist/web-ui/public/markdown-editor.js +1 -1
  163. package/dist/web-ui/public/markdown-file-editor.js +1 -1
  164. package/dist/web-ui/public/modal-maximize.js +1 -1
  165. package/dist/web-ui/public/notifications.js +1 -1
  166. package/dist/web-ui/public/permissions.js +1 -1
  167. package/dist/web-ui/public/pr-dialog.js +1 -1
  168. package/dist/web-ui/public/roles.html +2 -2
  169. package/dist/web-ui/public/roles.js +1 -1
  170. package/dist/web-ui/public/settings.html +66 -4
  171. package/dist/web-ui/public/settings.js +1 -1
  172. package/dist/web-ui/public/setup-password.js +1 -1
  173. package/dist/web-ui/public/skills.html +2 -2
  174. package/dist/web-ui/public/skills.js +1 -1
  175. package/dist/web-ui/public/sse-client.js +1 -1
  176. package/dist/web-ui/public/sse-shared-worker.js +1 -1
  177. package/dist/web-ui/public/styles.css +1 -1
  178. package/dist/web-ui/public/task-judging-helpers.js +1 -1
  179. package/dist/web-ui/public/task.js +1 -1
  180. package/dist/web-ui/public/teams.html +2 -2
  181. package/dist/web-ui/public/teams.js +1 -1
  182. package/dist/web-ui/public/terminal.js +1 -1
  183. package/dist/web-ui/public/theme.js +1 -1
  184. package/dist/web-ui/public/users.html +2 -2
  185. package/dist/web-ui/public/users.js +1 -1
  186. package/dist/web-ui/public/variant-grouping.js +1 -1
  187. package/package.json +1 -1
  188. package/dist/web-ui/public/server-health.js +0 -1
@@ -0,0 +1,575 @@
1
+ /* Server Administration Page */
2
+
3
+ .admin-panel-header {
4
+ align-items: flex-start;
5
+ gap: 16px;
6
+ }
7
+
8
+ .admin-panel-subtitle {
9
+ margin: 6px 0 0;
10
+ font-size: 13px;
11
+ color: var(--color-text-muted);
12
+ line-height: 1.5;
13
+ }
14
+
15
+ .admin-panel-actions {
16
+ display: flex;
17
+ flex-wrap: wrap;
18
+ align-items: center;
19
+ justify-content: flex-end;
20
+ gap: 10px;
21
+ }
22
+
23
+ .admin-toggle-row {
24
+ display: inline-flex;
25
+ align-items: center;
26
+ gap: 8px;
27
+ font-size: 12px;
28
+ color: var(--color-text-muted);
29
+ white-space: nowrap;
30
+ }
31
+
32
+ .admin-toggle-row input {
33
+ margin: 0;
34
+ }
35
+
36
+ .admin-version-card {
37
+ display: flex;
38
+ align-items: flex-start;
39
+ justify-content: space-between;
40
+ gap: 16px;
41
+ margin-bottom: 20px;
42
+ padding: 18px 20px;
43
+ border: 1px solid var(--color-border);
44
+ border-radius: var(--radius-medium);
45
+ background: linear-gradient(135deg, rgba(63, 114, 255, 0.08), rgba(63, 114, 255, 0.03));
46
+ }
47
+
48
+ .admin-version-values {
49
+ display: flex;
50
+ align-items: center;
51
+ gap: 8px;
52
+ margin-top: 6px;
53
+ font-size: 20px;
54
+ font-weight: 700;
55
+ color: var(--color-text);
56
+ }
57
+
58
+ .admin-version-arrow {
59
+ color: var(--color-text-muted);
60
+ }
61
+
62
+ .admin-version-actions {
63
+ display: flex;
64
+ flex-wrap: wrap;
65
+ gap: 8px;
66
+ }
67
+
68
+ .admin-install-command {
69
+ margin-bottom: 20px;
70
+ padding: 12px 14px;
71
+ border-radius: var(--radius-medium);
72
+ background: var(--color-surface-muted);
73
+ border: 1px solid var(--color-border);
74
+ overflow-x: auto;
75
+ }
76
+
77
+ .admin-install-command code {
78
+ font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
79
+ font-size: 12px;
80
+ color: var(--color-text);
81
+ }
82
+
83
+ .admin-toolbar {
84
+ display: flex;
85
+ flex-wrap: wrap;
86
+ align-items: end;
87
+ gap: 12px;
88
+ margin-bottom: 16px;
89
+ }
90
+
91
+ .admin-toolbar-group {
92
+ display: flex;
93
+ flex-wrap: wrap;
94
+ gap: 8px;
95
+ }
96
+
97
+ .admin-toolbar-search {
98
+ flex: 1 1 260px;
99
+ }
100
+
101
+ .admin-toolbar-search .form-input {
102
+ margin: 0;
103
+ }
104
+
105
+ .admin-toolbar-select {
106
+ display: flex;
107
+ flex-direction: column;
108
+ gap: 6px;
109
+ min-width: 220px;
110
+ }
111
+
112
+ .admin-toolbar-select label {
113
+ font-size: 12px;
114
+ font-weight: 600;
115
+ color: var(--color-text-muted);
116
+ text-transform: uppercase;
117
+ letter-spacing: 0.04em;
118
+ }
119
+
120
+ .admin-toolbar-select .form-input {
121
+ margin: 0;
122
+ }
123
+
124
+ .admin-filter-btn {
125
+ display: inline-flex;
126
+ align-items: center;
127
+ justify-content: center;
128
+ min-height: 34px;
129
+ padding: 0 12px;
130
+ border: 1px solid var(--color-border);
131
+ border-radius: 999px;
132
+ background: var(--color-surface);
133
+ color: var(--color-text-muted);
134
+ font-size: 13px;
135
+ font-weight: 600;
136
+ cursor: pointer;
137
+ transition: all 0.2s ease;
138
+ }
139
+
140
+ .admin-filter-btn:hover {
141
+ border-color: var(--color-accent);
142
+ color: var(--color-text);
143
+ }
144
+
145
+ .admin-filter-btn.active {
146
+ border-color: var(--color-accent);
147
+ background: rgba(63, 114, 255, 0.12);
148
+ color: var(--color-accent);
149
+ }
150
+
151
+ .admin-stream-indicator {
152
+ display: inline-flex;
153
+ align-items: center;
154
+ min-height: 30px;
155
+ padding: 0 10px;
156
+ border-radius: 999px;
157
+ background: var(--color-surface-muted);
158
+ color: var(--color-text-muted);
159
+ font-size: 12px;
160
+ font-weight: 700;
161
+ letter-spacing: 0.04em;
162
+ text-transform: uppercase;
163
+ }
164
+
165
+ .admin-stream-indicator.live {
166
+ background: rgba(46, 182, 125, 0.14);
167
+ color: var(--color-success);
168
+ }
169
+
170
+ .admin-stream-indicator.error {
171
+ background: rgba(229, 83, 104, 0.12);
172
+ color: var(--color-danger);
173
+ }
174
+
175
+ .admin-log-meta,
176
+ .admin-usage-period {
177
+ margin-bottom: 14px;
178
+ font-size: 13px;
179
+ }
180
+
181
+ .admin-log-container {
182
+ max-height: 70vh;
183
+ overflow: auto;
184
+ border: 1px solid var(--color-border);
185
+ border-radius: var(--radius-medium);
186
+ background: #0f172a;
187
+ color: #e2e8f0;
188
+ }
189
+
190
+ .admin-log-entry {
191
+ padding: 12px 14px;
192
+ font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
193
+ font-size: 12px;
194
+ line-height: 1.6;
195
+ }
196
+
197
+ .admin-log-entry + .admin-log-entry {
198
+ border-top: 1px solid rgba(148, 163, 184, 0.16);
199
+ }
200
+
201
+ .admin-log-header {
202
+ display: flex;
203
+ flex-wrap: wrap;
204
+ align-items: center;
205
+ gap: 8px;
206
+ }
207
+
208
+ .admin-log-timestamp {
209
+ color: #94a3b8;
210
+ }
211
+
212
+ .admin-log-level {
213
+ display: inline-flex;
214
+ align-items: center;
215
+ padding: 2px 8px;
216
+ border-radius: 999px;
217
+ font-size: 11px;
218
+ font-weight: 700;
219
+ letter-spacing: 0.04em;
220
+ text-transform: uppercase;
221
+ }
222
+
223
+ .admin-log-level.level-debug {
224
+ background: rgba(34, 211, 238, 0.16);
225
+ color: #22d3ee;
226
+ }
227
+
228
+ .admin-log-level.level-info {
229
+ background: rgba(34, 197, 94, 0.16);
230
+ color: #4ade80;
231
+ }
232
+
233
+ .admin-log-level.level-warn {
234
+ background: rgba(245, 158, 11, 0.16);
235
+ color: #fbbf24;
236
+ }
237
+
238
+ .admin-log-level.level-error {
239
+ background: rgba(248, 113, 113, 0.16);
240
+ color: #f87171;
241
+ }
242
+
243
+ .admin-log-message {
244
+ margin-top: 6px;
245
+ color: #f8fafc;
246
+ white-space: pre-wrap;
247
+ word-break: break-word;
248
+ }
249
+
250
+ .admin-log-context {
251
+ margin-top: 8px;
252
+ }
253
+
254
+ .admin-log-context summary {
255
+ cursor: pointer;
256
+ color: #93c5fd;
257
+ }
258
+
259
+ .admin-log-context pre {
260
+ margin: 8px 0 0;
261
+ padding: 10px 12px;
262
+ border-radius: var(--radius-small);
263
+ background: rgba(15, 23, 42, 0.9);
264
+ color: #cbd5e1;
265
+ overflow: auto;
266
+ white-space: pre-wrap;
267
+ word-break: break-word;
268
+ }
269
+
270
+ .admin-summary-grid {
271
+ display: grid;
272
+ grid-template-columns: repeat(4, minmax(0, 1fr));
273
+ gap: 16px;
274
+ margin-bottom: 20px;
275
+ }
276
+
277
+ .admin-summary-card,
278
+ .admin-usage-section,
279
+ .admin-code-card {
280
+ border: 1px solid var(--color-border);
281
+ border-radius: var(--radius-medium);
282
+ background: var(--color-surface);
283
+ }
284
+
285
+ .admin-summary-card {
286
+ padding: 18px;
287
+ }
288
+
289
+ .admin-summary-label {
290
+ font-size: 12px;
291
+ font-weight: 700;
292
+ color: var(--color-text-muted);
293
+ text-transform: uppercase;
294
+ letter-spacing: 0.05em;
295
+ }
296
+
297
+ .admin-summary-value {
298
+ margin-top: 10px;
299
+ font-size: 28px;
300
+ font-weight: 700;
301
+ color: var(--color-text);
302
+ }
303
+
304
+ .admin-summary-value.status-good {
305
+ color: var(--color-success);
306
+ }
307
+
308
+ .admin-summary-value.status-warn {
309
+ color: var(--color-warning, #f59e0b);
310
+ }
311
+
312
+ .admin-summary-value.status-bad {
313
+ color: var(--color-danger);
314
+ }
315
+
316
+ .admin-summary-meta {
317
+ margin-top: 8px;
318
+ font-size: 13px;
319
+ color: var(--color-text-muted);
320
+ }
321
+
322
+ .admin-usage-grid {
323
+ display: grid;
324
+ grid-template-columns: repeat(2, minmax(0, 1fr));
325
+ gap: 16px;
326
+ }
327
+
328
+ .admin-usage-section {
329
+ padding: 18px;
330
+ }
331
+
332
+ .admin-usage-section .section-header {
333
+ margin-bottom: 14px;
334
+ }
335
+
336
+ .admin-table-wrap {
337
+ overflow-x: auto;
338
+ }
339
+
340
+ .admin-data-table {
341
+ width: 100%;
342
+ border-collapse: collapse;
343
+ font-size: 13px;
344
+ }
345
+
346
+ .admin-data-table th,
347
+ .admin-data-table td {
348
+ padding: 10px 0;
349
+ border-bottom: 1px solid var(--color-border);
350
+ text-align: left;
351
+ }
352
+
353
+ .admin-data-table th {
354
+ font-size: 12px;
355
+ color: var(--color-text-muted);
356
+ font-weight: 700;
357
+ text-transform: uppercase;
358
+ letter-spacing: 0.04em;
359
+ }
360
+
361
+ .admin-data-table tbody tr:last-child td {
362
+ border-bottom: none;
363
+ }
364
+
365
+ .admin-bar-list {
366
+ display: flex;
367
+ flex-direction: column;
368
+ gap: 12px;
369
+ }
370
+
371
+ .admin-bar-row {
372
+ display: grid;
373
+ grid-template-columns: 120px 1fr auto;
374
+ gap: 12px;
375
+ align-items: center;
376
+ }
377
+
378
+ .admin-bar-label {
379
+ font-size: 13px;
380
+ font-weight: 600;
381
+ color: var(--color-text);
382
+ }
383
+
384
+ .admin-bar-track {
385
+ height: 10px;
386
+ border-radius: 999px;
387
+ background: var(--color-surface-muted);
388
+ overflow: hidden;
389
+ }
390
+
391
+ .admin-bar-fill {
392
+ height: 100%;
393
+ border-radius: inherit;
394
+ background: var(--color-accent);
395
+ }
396
+
397
+ .admin-bar-fill.status-completed {
398
+ background: var(--color-success);
399
+ }
400
+
401
+ .admin-bar-fill.status-failed,
402
+ .admin-bar-fill.status-rejected {
403
+ background: var(--color-danger);
404
+ }
405
+
406
+ .admin-bar-fill.status-interrupted {
407
+ background: var(--color-warning, #f59e0b);
408
+ }
409
+
410
+ .admin-bar-fill.status-running,
411
+ .admin-bar-fill.status-queued,
412
+ .admin-bar-fill.status-staged {
413
+ background: var(--color-accent);
414
+ }
415
+
416
+ .admin-bar-value {
417
+ font-size: 12px;
418
+ color: var(--color-text-muted);
419
+ }
420
+
421
+ .admin-code-grid {
422
+ display: grid;
423
+ grid-template-columns: repeat(2, minmax(0, 1fr));
424
+ gap: 12px;
425
+ }
426
+
427
+ .admin-code-card {
428
+ padding: 14px 16px;
429
+ }
430
+
431
+ .admin-code-card strong {
432
+ display: block;
433
+ margin-top: 8px;
434
+ font-size: 24px;
435
+ color: var(--color-text);
436
+ }
437
+
438
+ .admin-code-label {
439
+ font-size: 12px;
440
+ font-weight: 700;
441
+ color: var(--color-text-muted);
442
+ text-transform: uppercase;
443
+ letter-spacing: 0.05em;
444
+ }
445
+
446
+ .settings-nav-item svg {
447
+ flex-shrink: 0;
448
+ }
449
+
450
+ @media (max-width: 1100px) {
451
+ .admin-summary-grid,
452
+ .admin-usage-grid {
453
+ grid-template-columns: repeat(2, minmax(0, 1fr));
454
+ }
455
+ }
456
+
457
+ @media (max-width: 768px) {
458
+ .admin-panel-header,
459
+ .admin-version-card {
460
+ flex-direction: column;
461
+ }
462
+
463
+ .admin-panel-actions,
464
+ .admin-version-actions {
465
+ justify-content: flex-start;
466
+ }
467
+
468
+ .admin-bar-row {
469
+ grid-template-columns: 1fr;
470
+ gap: 6px;
471
+ }
472
+
473
+ .admin-summary-grid,
474
+ .admin-usage-grid,
475
+ .admin-code-grid {
476
+ grid-template-columns: 1fr;
477
+ }
478
+ }
479
+
480
+ #health-content {
481
+ position: relative;
482
+ }
483
+
484
+ .admin-update-output {
485
+ margin-bottom: 20px;
486
+ border: 1px solid var(--color-border);
487
+ border-radius: var(--radius-medium);
488
+ overflow: hidden;
489
+ }
490
+
491
+ .admin-update-output-header {
492
+ display: flex;
493
+ align-items: center;
494
+ justify-content: space-between;
495
+ gap: 12px;
496
+ padding: 10px 14px;
497
+ background: var(--color-surface-muted);
498
+ border-bottom: 1px solid var(--color-border);
499
+ }
500
+
501
+ .admin-update-output-label {
502
+ font-size: 12px;
503
+ font-weight: 700;
504
+ color: var(--color-text-muted);
505
+ text-transform: uppercase;
506
+ letter-spacing: 0.04em;
507
+ }
508
+
509
+ .admin-update-status {
510
+ font-size: 12px;
511
+ font-weight: 600;
512
+ padding: 2px 10px;
513
+ border-radius: 999px;
514
+ }
515
+
516
+ .admin-update-status.success {
517
+ background: rgba(46, 182, 125, 0.14);
518
+ color: var(--color-success);
519
+ }
520
+
521
+ .admin-update-status.error {
522
+ background: rgba(229, 83, 104, 0.12);
523
+ color: var(--color-danger);
524
+ }
525
+
526
+ .admin-update-status.in-progress {
527
+ background: rgba(63, 114, 255, 0.12);
528
+ color: var(--color-accent);
529
+ }
530
+
531
+ .admin-update-output-pre {
532
+ margin: 0;
533
+ padding: 12px 14px;
534
+ font-family: 'Monaco', 'Menlo', 'Consolas', monospace;
535
+ font-size: 12px;
536
+ line-height: 1.6;
537
+ color: #e2e8f0;
538
+ background: #0f172a;
539
+ max-height: 300px;
540
+ overflow: auto;
541
+ white-space: pre-wrap;
542
+ word-break: break-word;
543
+ }
544
+
545
+ .admin-restart-overlay {
546
+ position: absolute;
547
+ inset: 0;
548
+ display: flex;
549
+ align-items: center;
550
+ justify-content: center;
551
+ background: rgba(255, 255, 255, 0.9);
552
+ z-index: 100;
553
+ border-radius: var(--radius-medium);
554
+ }
555
+
556
+ [data-theme="dark"] .admin-restart-overlay {
557
+ background: rgba(15, 23, 42, 0.9);
558
+ }
559
+
560
+ .admin-restart-overlay-content {
561
+ text-align: center;
562
+ max-width: 400px;
563
+ padding: 40px 24px;
564
+ }
565
+
566
+ .admin-restart-overlay-content h3 {
567
+ margin: 16px 0 8px;
568
+ font-size: 18px;
569
+ font-weight: 600;
570
+ color: var(--color-text);
571
+ }
572
+
573
+ .admin-restart-overlay-content p {
574
+ margin: 0 0 16px;
575
+ }