claudeck 1.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 (157) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/cli.js +2 -0
  4. package/config/agent-chains.json +16 -0
  5. package/config/agent-dags.json +16 -0
  6. package/config/agents.json +46 -0
  7. package/config/bot-prompt.json +3 -0
  8. package/config/folders.json +66 -0
  9. package/config/prompts.json +92 -0
  10. package/config/repos.json +86 -0
  11. package/config/telegram-config.json +17 -0
  12. package/config/workflows.json +90 -0
  13. package/db.js +1198 -0
  14. package/package.json +55 -0
  15. package/plugins/claude-editor/client.css +171 -0
  16. package/plugins/claude-editor/client.js +183 -0
  17. package/plugins/event-stream/client.css +207 -0
  18. package/plugins/event-stream/client.js +271 -0
  19. package/plugins/linear/client.css +345 -0
  20. package/plugins/linear/client.js +380 -0
  21. package/plugins/linear/config.json +5 -0
  22. package/plugins/linear/server.js +312 -0
  23. package/plugins/repos/client.css +549 -0
  24. package/plugins/repos/client.js +663 -0
  25. package/plugins/repos/server.js +232 -0
  26. package/plugins/sudoku/client.css +196 -0
  27. package/plugins/sudoku/client.js +329 -0
  28. package/plugins/tasks/client.css +414 -0
  29. package/plugins/tasks/client.js +394 -0
  30. package/plugins/tasks/server.js +116 -0
  31. package/plugins/tic-tac-toe/client.css +167 -0
  32. package/plugins/tic-tac-toe/client.js +241 -0
  33. package/public/css/core/components.css +232 -0
  34. package/public/css/core/layout.css +330 -0
  35. package/public/css/core/print.css +18 -0
  36. package/public/css/core/reset.css +36 -0
  37. package/public/css/core/responsive.css +378 -0
  38. package/public/css/core/theme.css +116 -0
  39. package/public/css/core/variables.css +93 -0
  40. package/public/css/features/agent-monitor.css +297 -0
  41. package/public/css/features/agent-sidebar.css +525 -0
  42. package/public/css/features/agents.css +996 -0
  43. package/public/css/features/analytics.css +181 -0
  44. package/public/css/features/background-sessions.css +321 -0
  45. package/public/css/features/cost-dashboard.css +168 -0
  46. package/public/css/features/home.css +313 -0
  47. package/public/css/features/retro-terminal.css +88 -0
  48. package/public/css/features/telegram.css +127 -0
  49. package/public/css/features/tour.css +148 -0
  50. package/public/css/features/voice-input.css +60 -0
  51. package/public/css/features/welcome.css +241 -0
  52. package/public/css/panels/assistant-bot.css +442 -0
  53. package/public/css/panels/dev-docs.css +292 -0
  54. package/public/css/panels/file-explorer.css +322 -0
  55. package/public/css/panels/git-panel.css +221 -0
  56. package/public/css/panels/mcp-manager.css +199 -0
  57. package/public/css/panels/tips-feed.css +353 -0
  58. package/public/css/ui/commands.css +273 -0
  59. package/public/css/ui/context-gauge.css +76 -0
  60. package/public/css/ui/file-picker.css +69 -0
  61. package/public/css/ui/image-attachments.css +106 -0
  62. package/public/css/ui/messages.css +884 -0
  63. package/public/css/ui/modals.css +122 -0
  64. package/public/css/ui/parallel.css +217 -0
  65. package/public/css/ui/permissions.css +110 -0
  66. package/public/css/ui/right-panel.css +481 -0
  67. package/public/css/ui/sessions.css +689 -0
  68. package/public/css/ui/status-bar.css +425 -0
  69. package/public/css/ui/toolbox.css +206 -0
  70. package/public/data/tips.json +218 -0
  71. package/public/icons/favicon.png +0 -0
  72. package/public/icons/icon-192.png +0 -0
  73. package/public/icons/icon-512.png +0 -0
  74. package/public/icons/whaly.png +0 -0
  75. package/public/index.html +1140 -0
  76. package/public/js/core/api.js +591 -0
  77. package/public/js/core/constants.js +3 -0
  78. package/public/js/core/dom.js +270 -0
  79. package/public/js/core/events.js +10 -0
  80. package/public/js/core/plugin-loader.js +153 -0
  81. package/public/js/core/store.js +39 -0
  82. package/public/js/core/utils.js +25 -0
  83. package/public/js/core/ws.js +64 -0
  84. package/public/js/features/agent-monitor.js +222 -0
  85. package/public/js/features/agents.js +1209 -0
  86. package/public/js/features/analytics.js +397 -0
  87. package/public/js/features/attachments.js +251 -0
  88. package/public/js/features/background-sessions.js +475 -0
  89. package/public/js/features/chat.js +589 -0
  90. package/public/js/features/cost-dashboard.js +152 -0
  91. package/public/js/features/dag-editor.js +399 -0
  92. package/public/js/features/easter-egg.js +46 -0
  93. package/public/js/features/home.js +270 -0
  94. package/public/js/features/projects.js +372 -0
  95. package/public/js/features/prompts.js +228 -0
  96. package/public/js/features/sessions.js +332 -0
  97. package/public/js/features/telegram.js +131 -0
  98. package/public/js/features/tour.js +210 -0
  99. package/public/js/features/voice-input.js +185 -0
  100. package/public/js/features/welcome.js +43 -0
  101. package/public/js/features/workflows.js +277 -0
  102. package/public/js/main.js +51 -0
  103. package/public/js/panels/assistant-bot.js +445 -0
  104. package/public/js/panels/dev-docs.js +380 -0
  105. package/public/js/panels/file-explorer.js +486 -0
  106. package/public/js/panels/git-panel.js +285 -0
  107. package/public/js/panels/mcp-manager.js +311 -0
  108. package/public/js/panels/tips-feed.js +303 -0
  109. package/public/js/ui/commands.js +114 -0
  110. package/public/js/ui/context-gauge.js +100 -0
  111. package/public/js/ui/diff.js +124 -0
  112. package/public/js/ui/disabled-tools.js +36 -0
  113. package/public/js/ui/export.js +74 -0
  114. package/public/js/ui/formatting.js +206 -0
  115. package/public/js/ui/header-dropdowns.js +72 -0
  116. package/public/js/ui/input-meta.js +71 -0
  117. package/public/js/ui/max-turns.js +21 -0
  118. package/public/js/ui/messages.js +387 -0
  119. package/public/js/ui/model-selector.js +20 -0
  120. package/public/js/ui/notifications.js +232 -0
  121. package/public/js/ui/parallel.js +176 -0
  122. package/public/js/ui/permissions.js +168 -0
  123. package/public/js/ui/right-panel.js +173 -0
  124. package/public/js/ui/shortcuts.js +143 -0
  125. package/public/js/ui/sidebar-toggle.js +29 -0
  126. package/public/js/ui/status-bar.js +172 -0
  127. package/public/js/ui/tab-sdk.js +623 -0
  128. package/public/js/ui/theme.js +38 -0
  129. package/public/manifest.json +13 -0
  130. package/public/offline.html +190 -0
  131. package/public/style.css +42 -0
  132. package/public/sw.js +91 -0
  133. package/server/agent-loop.js +385 -0
  134. package/server/dag-executor.js +265 -0
  135. package/server/orchestrator.js +514 -0
  136. package/server/paths.js +61 -0
  137. package/server/plugin-mount.js +56 -0
  138. package/server/push-sender.js +31 -0
  139. package/server/routes/agents.js +294 -0
  140. package/server/routes/bot.js +45 -0
  141. package/server/routes/exec.js +35 -0
  142. package/server/routes/files.js +218 -0
  143. package/server/routes/mcp.js +82 -0
  144. package/server/routes/messages.js +36 -0
  145. package/server/routes/notifications.js +37 -0
  146. package/server/routes/projects.js +207 -0
  147. package/server/routes/prompts.js +53 -0
  148. package/server/routes/sessions.js +103 -0
  149. package/server/routes/stats.js +143 -0
  150. package/server/routes/telegram.js +71 -0
  151. package/server/routes/tips.js +135 -0
  152. package/server/routes/workflows.js +81 -0
  153. package/server/summarizer.js +55 -0
  154. package/server/telegram-poller.js +205 -0
  155. package/server/telegram-sender.js +304 -0
  156. package/server/ws-handler.js +926 -0
  157. package/server.js +179 -0
@@ -0,0 +1,322 @@
1
+ /* ── File Explorer ────────────────────────────────────── */
2
+ .file-explorer-toolbar {
3
+ padding: 8px;
4
+ border-bottom: 1px solid var(--border);
5
+ flex-shrink: 0;
6
+ display: flex;
7
+ gap: 6px;
8
+ align-items: center;
9
+ }
10
+
11
+ .file-explorer-search {
12
+ flex: 1;
13
+ min-width: 0;
14
+ padding: 4px 8px;
15
+ background: var(--bg);
16
+ border: 1px solid var(--border);
17
+ border-radius: var(--radius);
18
+ color: var(--text);
19
+ font-size: 11px;
20
+ font-family: var(--font-mono);
21
+ outline: none;
22
+ }
23
+
24
+ .file-explorer-search:focus {
25
+ border-color: var(--accent);
26
+ }
27
+
28
+ .file-refresh-btn {
29
+ background: none;
30
+ border: 1px solid var(--border);
31
+ border-radius: var(--radius);
32
+ color: var(--text-dim);
33
+ cursor: pointer;
34
+ padding: 4px;
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ flex-shrink: 0;
39
+ transition: color 0.15s, border-color 0.15s;
40
+ }
41
+
42
+ .file-refresh-btn:hover {
43
+ color: var(--accent);
44
+ border-color: var(--accent);
45
+ }
46
+
47
+ .file-refresh-btn.spinning svg {
48
+ animation: linearSpin 0.6s linear infinite;
49
+ }
50
+
51
+ /* Tree */
52
+ .file-tree {
53
+ flex: 1;
54
+ overflow-y: auto;
55
+ padding: 4px 0;
56
+ }
57
+
58
+ .file-tree::-webkit-scrollbar {
59
+ width: 4px;
60
+ }
61
+
62
+ .file-tree::-webkit-scrollbar-thumb {
63
+ background: var(--border);
64
+ border-radius: 2px;
65
+ }
66
+
67
+ .file-tree-item {
68
+ display: flex;
69
+ align-items: center;
70
+ gap: 4px;
71
+ padding: 3px 8px;
72
+ cursor: pointer;
73
+ font-size: 12px;
74
+ color: var(--text);
75
+ transition: background 0.1s;
76
+ white-space: nowrap;
77
+ user-select: none;
78
+ }
79
+
80
+ .file-tree-item:hover {
81
+ background: var(--bg-tertiary);
82
+ }
83
+
84
+ .file-tree-item.active {
85
+ background: var(--accent-dim);
86
+ color: var(--accent);
87
+ }
88
+
89
+ .file-tree-chevron {
90
+ width: 12px;
91
+ height: 12px;
92
+ flex-shrink: 0;
93
+ transition: transform 0.15s ease;
94
+ color: var(--text-dim);
95
+ }
96
+
97
+ .file-tree-chevron.expanded {
98
+ transform: rotate(90deg);
99
+ }
100
+
101
+ .file-tree-chevron.hidden {
102
+ visibility: hidden;
103
+ }
104
+
105
+ .file-tree-icon {
106
+ width: 14px;
107
+ height: 14px;
108
+ flex-shrink: 0;
109
+ color: var(--text-dim);
110
+ }
111
+
112
+ .file-tree-icon.folder {
113
+ color: var(--accent);
114
+ }
115
+
116
+ .file-tree-name {
117
+ overflow: hidden;
118
+ text-overflow: ellipsis;
119
+ }
120
+
121
+ .file-tree-children {
122
+ display: none;
123
+ }
124
+
125
+ .file-tree-children.expanded {
126
+ display: block;
127
+ }
128
+
129
+ /* Drag state */
130
+ .file-tree-item[draggable="true"] {
131
+ cursor: grab;
132
+ }
133
+
134
+ .file-tree-item.dragging {
135
+ opacity: 0.4;
136
+ }
137
+
138
+ /* Drop target highlight on chat textarea */
139
+ textarea.file-drop-hover {
140
+ border-color: var(--accent) !important;
141
+ box-shadow: var(--glow-strong), inset 0 0 0 1px var(--accent) !important;
142
+ }
143
+
144
+ .file-tree-loading {
145
+ padding: 6px 8px;
146
+ font-size: 11px;
147
+ color: var(--text-dim);
148
+ font-style: italic;
149
+ }
150
+
151
+ .file-tree-empty {
152
+ display: flex;
153
+ flex-direction: column;
154
+ align-items: center;
155
+ justify-content: center;
156
+ padding: 32px 16px;
157
+ color: var(--text-dim);
158
+ font-size: 12px;
159
+ text-align: center;
160
+ gap: 8px;
161
+ flex: 1;
162
+ }
163
+
164
+ .file-tree-empty svg {
165
+ opacity: 0.4;
166
+ }
167
+
168
+ /* Search results (flat list) */
169
+ .file-search-result {
170
+ padding: 5px 8px;
171
+ gap: 6px;
172
+ }
173
+
174
+ .file-search-name {
175
+ font-weight: 600;
176
+ font-size: 12px;
177
+ overflow: hidden;
178
+ text-overflow: ellipsis;
179
+ flex-shrink: 0;
180
+ }
181
+
182
+ .file-search-path {
183
+ font-size: 10px;
184
+ color: var(--text-dim);
185
+ overflow: hidden;
186
+ text-overflow: ellipsis;
187
+ margin-left: auto;
188
+ padding-left: 8px;
189
+ }
190
+
191
+ /* Context menu */
192
+ .file-ctx-menu {
193
+ position: fixed;
194
+ z-index: 1000;
195
+ background: var(--bg-secondary);
196
+ border: 1px solid var(--border);
197
+ border-radius: var(--radius);
198
+ padding: 4px 0;
199
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
200
+ min-width: 160px;
201
+ }
202
+
203
+ .file-ctx-menu button {
204
+ display: block;
205
+ width: 100%;
206
+ background: none;
207
+ border: none;
208
+ color: var(--text);
209
+ font-size: 12px;
210
+ font-family: var(--font-mono);
211
+ padding: 6px 12px;
212
+ text-align: left;
213
+ cursor: pointer;
214
+ white-space: nowrap;
215
+ }
216
+
217
+ .file-ctx-menu button:hover {
218
+ background: var(--accent-dim);
219
+ color: var(--accent);
220
+ }
221
+
222
+ /* Preview */
223
+ .file-preview {
224
+ border-top: 1px solid var(--border);
225
+ display: flex;
226
+ flex-direction: column;
227
+ overflow: hidden;
228
+ flex-shrink: 0;
229
+ position: relative;
230
+ }
231
+
232
+ .file-preview-resize {
233
+ position: absolute;
234
+ top: 0;
235
+ left: 0;
236
+ right: 0;
237
+ height: 4px;
238
+ cursor: ns-resize;
239
+ z-index: 5;
240
+ }
241
+
242
+ .file-preview-resize:hover,
243
+ .file-preview-resize.dragging {
244
+ background: var(--accent);
245
+ opacity: 0.5;
246
+ }
247
+
248
+ .file-preview.hidden {
249
+ display: none;
250
+ }
251
+
252
+ .file-preview-header {
253
+ display: flex;
254
+ align-items: center;
255
+ justify-content: space-between;
256
+ padding: 6px 8px;
257
+ border-bottom: 1px solid var(--border);
258
+ flex-shrink: 0;
259
+ }
260
+
261
+ .file-preview-name {
262
+ font-size: 11px;
263
+ color: var(--accent);
264
+ font-family: var(--font-mono);
265
+ overflow: hidden;
266
+ text-overflow: ellipsis;
267
+ white-space: nowrap;
268
+ }
269
+
270
+ .file-preview-close {
271
+ background: none;
272
+ border: none;
273
+ color: var(--text-dim);
274
+ cursor: pointer;
275
+ font-size: 14px;
276
+ padding: 0 4px;
277
+ line-height: 1;
278
+ }
279
+
280
+ .file-preview-close:hover {
281
+ color: var(--text);
282
+ }
283
+
284
+ .file-preview-content {
285
+ flex: 1;
286
+ overflow: auto;
287
+ margin: 0;
288
+ padding: 8px;
289
+ font-size: 11px;
290
+ line-height: 1.5;
291
+ background: var(--bg);
292
+ }
293
+
294
+ .file-preview-content::-webkit-scrollbar {
295
+ width: 4px;
296
+ height: 4px;
297
+ }
298
+
299
+ .file-preview-content::-webkit-scrollbar-thumb {
300
+ background: var(--border);
301
+ border-radius: 2px;
302
+ }
303
+
304
+ .file-preview-content code {
305
+ font-family: var(--font-mono);
306
+ font-size: 11px;
307
+ }
308
+
309
+ .file-preview-image {
310
+ max-width: 100%;
311
+ max-height: 100%;
312
+ object-fit: contain;
313
+ margin: auto;
314
+ display: block;
315
+ flex: 1;
316
+ min-height: 0;
317
+ background: repeating-conic-gradient(#1a1a2e 0% 25%, #12121f 0% 50%) 0 0 / 16px 16px;
318
+ }
319
+
320
+ .file-preview-image.hidden {
321
+ display: none;
322
+ }
@@ -0,0 +1,221 @@
1
+ /* ── Git Panel ────────────────────────────────────────── */
2
+ .git-toolbar {
3
+ display: flex;
4
+ align-items: center;
5
+ gap: 6px;
6
+ padding: 8px;
7
+ border-bottom: 1px solid var(--border);
8
+ flex-shrink: 0;
9
+ }
10
+
11
+ .git-branch-select {
12
+ flex: 1;
13
+ padding: 6px 8px;
14
+ font-size: 11px;
15
+ font-family: var(--font-mono);
16
+ }
17
+
18
+ .git-refresh-btn {
19
+ background: none;
20
+ border: none;
21
+ color: var(--text-dim);
22
+ cursor: pointer;
23
+ padding: 2px 4px;
24
+ border-radius: var(--radius);
25
+ transition: color 0.15s, background 0.15s;
26
+ }
27
+
28
+ .git-refresh-btn:hover {
29
+ color: var(--text);
30
+ background: var(--bg-tertiary);
31
+ }
32
+
33
+ .git-refresh-btn.spinning svg {
34
+ animation: linearSpin 0.8s linear infinite;
35
+ }
36
+
37
+ /* Status list */
38
+ .git-status-list {
39
+ flex: 1;
40
+ overflow-y: auto;
41
+ padding: 4px 0;
42
+ }
43
+
44
+ .git-status-list::-webkit-scrollbar {
45
+ width: 4px;
46
+ }
47
+
48
+ .git-status-list::-webkit-scrollbar-thumb {
49
+ background: var(--border);
50
+ border-radius: 2px;
51
+ }
52
+
53
+ .git-status-group {
54
+ padding: 0;
55
+ }
56
+
57
+ .git-status-group-title {
58
+ font-size: 10px;
59
+ font-weight: 600;
60
+ color: var(--text-dim);
61
+ text-transform: uppercase;
62
+ letter-spacing: 0.05em;
63
+ padding: 6px 10px 2px;
64
+ }
65
+
66
+ .git-status-file {
67
+ display: flex;
68
+ align-items: center;
69
+ gap: 6px;
70
+ padding: 3px 10px;
71
+ font-size: 12px;
72
+ font-family: var(--font-mono);
73
+ cursor: default;
74
+ }
75
+
76
+ .git-status-file:hover {
77
+ background: var(--bg-tertiary);
78
+ }
79
+
80
+ .git-status-badge {
81
+ font-size: 10px;
82
+ font-weight: 700;
83
+ width: 14px;
84
+ text-align: center;
85
+ flex-shrink: 0;
86
+ }
87
+
88
+ .git-status-badge.modified { color: var(--warning); }
89
+ .git-status-badge.added { color: var(--accent); }
90
+ .git-status-badge.deleted { color: var(--error); }
91
+ .git-status-badge.renamed { color: var(--accent); }
92
+ .git-status-badge.untracked { color: var(--text-dim); }
93
+
94
+ .git-status-name {
95
+ flex: 1;
96
+ overflow: hidden;
97
+ text-overflow: ellipsis;
98
+ white-space: nowrap;
99
+ color: var(--text);
100
+ }
101
+
102
+ .git-status-action {
103
+ background: none;
104
+ border: none;
105
+ color: var(--text-dim);
106
+ cursor: pointer;
107
+ font-size: 14px;
108
+ line-height: 1;
109
+ padding: 0 2px;
110
+ border-radius: var(--radius);
111
+ transition: color 0.15s;
112
+ }
113
+
114
+ .git-status-action:hover {
115
+ color: var(--accent);
116
+ }
117
+
118
+ /* Commit section */
119
+ .git-commit-section {
120
+ padding: 8px;
121
+ border-top: 1px solid var(--border);
122
+ flex-shrink: 0;
123
+ }
124
+
125
+ .git-commit-msg {
126
+ width: 100%;
127
+ padding: 6px 8px;
128
+ font-size: 11px;
129
+ font-family: var(--font-mono);
130
+ min-height: auto;
131
+ }
132
+
133
+ .git-commit-btn {
134
+ width: 100%;
135
+ margin-top: 6px;
136
+ padding: 6px 0;
137
+ font-size: 11px;
138
+ }
139
+
140
+ .git-commit-error {
141
+ font-size: 10px;
142
+ color: var(--error);
143
+ margin-top: 4px;
144
+ }
145
+
146
+ /* Log section */
147
+ .git-log-section {
148
+ border-top: 1px solid var(--border);
149
+ flex-shrink: 0;
150
+ max-height: 200px;
151
+ overflow-y: auto;
152
+ }
153
+
154
+ .git-log-section::-webkit-scrollbar {
155
+ width: 4px;
156
+ }
157
+
158
+ .git-log-section::-webkit-scrollbar-thumb {
159
+ background: var(--border);
160
+ border-radius: 2px;
161
+ }
162
+
163
+ .git-log-title {
164
+ font-size: 10px;
165
+ font-weight: 600;
166
+ color: var(--text-dim);
167
+ text-transform: uppercase;
168
+ letter-spacing: 0.05em;
169
+ padding: 6px 10px 2px;
170
+ margin: 0;
171
+ }
172
+
173
+ .git-log-list {
174
+ padding: 0 0 4px;
175
+ }
176
+
177
+ .git-log-item {
178
+ display: flex;
179
+ align-items: baseline;
180
+ gap: 6px;
181
+ padding: 2px 10px;
182
+ font-size: 11px;
183
+ }
184
+
185
+ .git-log-hash {
186
+ color: var(--accent);
187
+ font-family: var(--font-mono);
188
+ flex-shrink: 0;
189
+ }
190
+
191
+ .git-log-subject {
192
+ color: var(--text);
193
+ flex: 1;
194
+ overflow: hidden;
195
+ text-overflow: ellipsis;
196
+ white-space: nowrap;
197
+ }
198
+
199
+ .git-log-time {
200
+ color: var(--text-dim);
201
+ font-size: 10px;
202
+ flex-shrink: 0;
203
+ }
204
+
205
+ /* Empty state */
206
+ .git-empty {
207
+ display: flex;
208
+ flex-direction: column;
209
+ align-items: center;
210
+ justify-content: center;
211
+ padding: 32px 16px;
212
+ color: var(--text-dim);
213
+ font-size: 12px;
214
+ text-align: center;
215
+ gap: 8px;
216
+ flex: 1;
217
+ }
218
+
219
+ .git-empty svg {
220
+ opacity: 0.4;
221
+ }
@@ -0,0 +1,199 @@
1
+ /* ── MCP Server Management ────────────────────────────── */
2
+ .mcp-modal {
3
+ max-width: 520px;
4
+ max-height: 80vh;
5
+ display: flex;
6
+ flex-direction: column;
7
+ }
8
+
9
+ .mcp-server-list {
10
+ flex: 1;
11
+ overflow-y: auto;
12
+ padding: 8px 0;
13
+ min-height: 60px;
14
+ }
15
+
16
+ .mcp-server-list::-webkit-scrollbar {
17
+ width: 4px;
18
+ }
19
+
20
+ .mcp-server-list::-webkit-scrollbar-thumb {
21
+ background: var(--border);
22
+ border-radius: 2px;
23
+ }
24
+
25
+ /* Server card */
26
+ .mcp-server-card {
27
+ display: flex;
28
+ align-items: center;
29
+ gap: 10px;
30
+ padding: 10px 16px;
31
+ border-bottom: 1px solid var(--border-subtle);
32
+ transition: background 0.1s;
33
+ }
34
+
35
+ .mcp-server-card:hover {
36
+ background: var(--bg-tertiary);
37
+ }
38
+
39
+ .mcp-server-info {
40
+ flex: 1;
41
+ min-width: 0;
42
+ }
43
+
44
+ .mcp-server-name {
45
+ font-size: 13px;
46
+ font-weight: 600;
47
+ color: var(--text);
48
+ display: flex;
49
+ align-items: center;
50
+ gap: 6px;
51
+ }
52
+
53
+ .mcp-server-type {
54
+ font-size: 9px;
55
+ font-weight: 600;
56
+ text-transform: uppercase;
57
+ padding: 1px 5px;
58
+ border-radius: 3px;
59
+ background: var(--accent-dim);
60
+ color: var(--accent);
61
+ letter-spacing: 0.05em;
62
+ }
63
+
64
+ .mcp-server-detail {
65
+ font-size: 11px;
66
+ color: var(--text-dim);
67
+ font-family: var(--font-mono);
68
+ margin-top: 2px;
69
+ overflow: hidden;
70
+ text-overflow: ellipsis;
71
+ white-space: nowrap;
72
+ }
73
+
74
+ .mcp-server-actions {
75
+ display: flex;
76
+ gap: 4px;
77
+ flex-shrink: 0;
78
+ }
79
+
80
+ .mcp-server-actions button {
81
+ background: none;
82
+ border: none;
83
+ color: var(--text-dim);
84
+ cursor: pointer;
85
+ padding: 4px 6px;
86
+ border-radius: var(--radius);
87
+ font-size: 12px;
88
+ transition: color 0.15s, background 0.15s;
89
+ }
90
+
91
+ .mcp-server-actions button:hover {
92
+ color: var(--text);
93
+ background: var(--bg-tertiary);
94
+ }
95
+
96
+ .mcp-server-actions button.delete:hover {
97
+ color: var(--error);
98
+ }
99
+
100
+ /* Empty state */
101
+ .mcp-empty {
102
+ display: flex;
103
+ flex-direction: column;
104
+ align-items: center;
105
+ padding: 24px 16px;
106
+ color: var(--text-dim);
107
+ font-size: 12px;
108
+ text-align: center;
109
+ gap: 6px;
110
+ }
111
+
112
+ /* ── Form ─────────────────────────────────────────────── */
113
+ .mcp-form-container {
114
+ padding: 16px 22px;
115
+ border-top: 1px solid var(--border);
116
+ background: var(--bg);
117
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
118
+ }
119
+
120
+ .mcp-form-container.hidden {
121
+ display: none;
122
+ }
123
+
124
+ .mcp-form-title {
125
+ font-size: 13px;
126
+ font-weight: 600;
127
+ color: var(--accent);
128
+ margin: 0 0 14px;
129
+ padding-bottom: 8px;
130
+ border-bottom: 1px solid var(--border);
131
+ }
132
+
133
+ .mcp-form-container select {
134
+ width: 100%;
135
+ box-sizing: border-box;
136
+ padding: 8px 12px;
137
+ font-size: 12px;
138
+ font-family: var(--font-mono);
139
+ margin-bottom: 12px;
140
+ }
141
+
142
+ /* Nested field groups — left accent border, no padding that eats width */
143
+ #mcp-stdio-fields,
144
+ #mcp-url-fields {
145
+ margin-top: 4px;
146
+ padding-left: 12px;
147
+ border-left: 2px solid var(--accent);
148
+ }
149
+
150
+ /* First label inside field groups needs no extra top margin */
151
+ #mcp-stdio-fields label:first-child,
152
+ #mcp-url-fields label:first-child {
153
+ margin-top: 0;
154
+ }
155
+
156
+ /* Form actions */
157
+ .mcp-form-container .modal-actions {
158
+ margin-top: 14px;
159
+ padding-top: 12px;
160
+ border-top: 1px solid var(--border);
161
+ }
162
+
163
+ /* ── Scope Headers ───────────────────────────────────── */
164
+ .mcp-scope-header {
165
+ display: flex;
166
+ align-items: center;
167
+ justify-content: space-between;
168
+ padding: 6px 16px;
169
+ font-size: 10px;
170
+ font-weight: 700;
171
+ text-transform: uppercase;
172
+ letter-spacing: 0.08em;
173
+ color: var(--text-dim);
174
+ background: var(--bg-secondary);
175
+ border-bottom: 1px solid var(--border-subtle);
176
+ }
177
+
178
+ .mcp-scope-count {
179
+ font-size: 9px;
180
+ background: var(--border);
181
+ color: var(--text-dim);
182
+ padding: 0 6px;
183
+ border-radius: 8px;
184
+ font-weight: 600;
185
+ min-width: 14px;
186
+ text-align: center;
187
+ }
188
+
189
+ .mcp-empty-compact {
190
+ padding: 12px 16px;
191
+ }
192
+
193
+ /* ── Footer ───────────────────────────────────────────── */
194
+ .mcp-modal-footer {
195
+ padding: 12px 16px;
196
+ border-top: 1px solid var(--border);
197
+ display: flex;
198
+ justify-content: flex-end;
199
+ }