@softtechai/quickmcp 1.0.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 (163) hide show
  1. package/README.md +553 -0
  2. package/dist/client/MCPClient.d.ts +24 -0
  3. package/dist/client/MCPClient.d.ts.map +1 -0
  4. package/dist/client/MCPClient.js +211 -0
  5. package/dist/client/MCPClient.js.map +1 -0
  6. package/dist/client/MCPClientUnified.d.ts +31 -0
  7. package/dist/client/MCPClientUnified.d.ts.map +1 -0
  8. package/dist/client/MCPClientUnified.js +275 -0
  9. package/dist/client/MCPClientUnified.js.map +1 -0
  10. package/dist/client/MCPTestRunner.d.ts +44 -0
  11. package/dist/client/MCPTestRunner.d.ts.map +1 -0
  12. package/dist/client/MCPTestRunner.js +220 -0
  13. package/dist/client/MCPTestRunner.js.map +1 -0
  14. package/dist/client/MCPTestRunnerUnified.d.ts +48 -0
  15. package/dist/client/MCPTestRunnerUnified.d.ts.map +1 -0
  16. package/dist/client/MCPTestRunnerUnified.js +183 -0
  17. package/dist/client/MCPTestRunnerUnified.js.map +1 -0
  18. package/dist/database/json-manager.d.ts +55 -0
  19. package/dist/database/json-manager.d.ts.map +1 -0
  20. package/dist/database/json-manager.js +128 -0
  21. package/dist/database/json-manager.js.map +1 -0
  22. package/dist/database/sqlite-manager.d.ts +53 -0
  23. package/dist/database/sqlite-manager.d.ts.map +1 -0
  24. package/dist/database/sqlite-manager.js +193 -0
  25. package/dist/database/sqlite-manager.js.map +1 -0
  26. package/dist/dynamic-mcp-executor.d.ts +14 -0
  27. package/dist/dynamic-mcp-executor.d.ts.map +1 -0
  28. package/dist/dynamic-mcp-executor.js +274 -0
  29. package/dist/dynamic-mcp-executor.js.map +1 -0
  30. package/dist/generators/MCPServerGenerator-new.d.ts +37 -0
  31. package/dist/generators/MCPServerGenerator-new.d.ts.map +1 -0
  32. package/dist/generators/MCPServerGenerator-new.js +287 -0
  33. package/dist/generators/MCPServerGenerator-new.js.map +1 -0
  34. package/dist/generators/MCPServerGenerator.d.ts +42 -0
  35. package/dist/generators/MCPServerGenerator.d.ts.map +1 -0
  36. package/dist/generators/MCPServerGenerator.js +494 -0
  37. package/dist/generators/MCPServerGenerator.js.map +1 -0
  38. package/dist/generators/database/sqlite-manager.d.ts +52 -0
  39. package/dist/generators/database/sqlite-manager.js +143 -0
  40. package/dist/generators/generators/MCPServerGenerator.d.ts +37 -0
  41. package/dist/generators/generators/MCPServerGenerator.js +396 -0
  42. package/dist/index.d.ts +7 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +23 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/integrated-mcp-server-new.d.ts +12 -0
  47. package/dist/integrated-mcp-server-new.d.ts.map +1 -0
  48. package/dist/integrated-mcp-server-new.js +253 -0
  49. package/dist/integrated-mcp-server-new.js.map +1 -0
  50. package/dist/integrated-mcp-server.d.ts +25 -0
  51. package/dist/integrated-mcp-server.d.ts.map +1 -0
  52. package/dist/integrated-mcp-server.js +541 -0
  53. package/dist/integrated-mcp-server.js.map +1 -0
  54. package/dist/mcp-inspector-server.d.ts +3 -0
  55. package/dist/mcp-inspector-server.d.ts.map +1 -0
  56. package/dist/mcp-inspector-server.js +119 -0
  57. package/dist/mcp-inspector-server.js.map +1 -0
  58. package/dist/mcp-sdk-server.d.ts +3 -0
  59. package/dist/mcp-sdk-server.d.ts.map +1 -0
  60. package/dist/mcp-sdk-server.js +90 -0
  61. package/dist/mcp-sdk-server.js.map +1 -0
  62. package/dist/mcp-server.d.ts +3 -0
  63. package/dist/mcp-server.d.ts.map +1 -0
  64. package/dist/mcp-server.js +300 -0
  65. package/dist/mcp-server.js.map +1 -0
  66. package/dist/parsers/CsvParser.d.ts +7 -0
  67. package/dist/parsers/CsvParser.d.ts.map +1 -0
  68. package/dist/parsers/CsvParser.js +98 -0
  69. package/dist/parsers/CsvParser.js.map +1 -0
  70. package/dist/parsers/DatabaseParser.d.ts +18 -0
  71. package/dist/parsers/DatabaseParser.d.ts.map +1 -0
  72. package/dist/parsers/DatabaseParser.js +372 -0
  73. package/dist/parsers/DatabaseParser.js.map +1 -0
  74. package/dist/parsers/ExcelParser.d.ts +8 -0
  75. package/dist/parsers/ExcelParser.d.ts.map +1 -0
  76. package/dist/parsers/ExcelParser.js +119 -0
  77. package/dist/parsers/ExcelParser.js.map +1 -0
  78. package/dist/parsers/index.d.ts +13 -0
  79. package/dist/parsers/index.d.ts.map +1 -0
  80. package/dist/parsers/index.js +88 -0
  81. package/dist/parsers/index.js.map +1 -0
  82. package/dist/parsers/parsers/ExcelParser.js +118 -0
  83. package/dist/parsers/types/index.js +2 -0
  84. package/dist/quickmcp-unified-bridge.d.ts +13 -0
  85. package/dist/quickmcp-unified-bridge.d.ts.map +1 -0
  86. package/dist/quickmcp-unified-bridge.js +176 -0
  87. package/dist/quickmcp-unified-bridge.js.map +1 -0
  88. package/dist/server/ServerManager.d.ts +37 -0
  89. package/dist/server/ServerManager.d.ts.map +1 -0
  90. package/dist/server/ServerManager.js +376 -0
  91. package/dist/server/ServerManager.js.map +1 -0
  92. package/dist/sqlite-manager.js +145 -0
  93. package/dist/start-new-server.d.ts +3 -0
  94. package/dist/start-new-server.d.ts.map +1 -0
  95. package/dist/start-new-server.js +10 -0
  96. package/dist/start-new-server.js.map +1 -0
  97. package/dist/test-app.d.ts +2 -0
  98. package/dist/test-app.d.ts.map +1 -0
  99. package/dist/test-app.js +119 -0
  100. package/dist/test-app.js.map +1 -0
  101. package/dist/test-new-architecture.d.ts +3 -0
  102. package/dist/test-new-architecture.d.ts.map +1 -0
  103. package/dist/test-new-architecture.js +72 -0
  104. package/dist/test-new-architecture.js.map +1 -0
  105. package/dist/transport/base-transport.d.ts +21 -0
  106. package/dist/transport/base-transport.d.ts.map +1 -0
  107. package/dist/transport/base-transport.js +16 -0
  108. package/dist/transport/base-transport.js.map +1 -0
  109. package/dist/transport/index.d.ts +10 -0
  110. package/dist/transport/index.d.ts.map +1 -0
  111. package/dist/transport/index.js +12 -0
  112. package/dist/transport/index.js.map +1 -0
  113. package/dist/transport/sse-transport.d.ts +13 -0
  114. package/dist/transport/sse-transport.d.ts.map +1 -0
  115. package/dist/transport/sse-transport.js +106 -0
  116. package/dist/transport/sse-transport.js.map +1 -0
  117. package/dist/transport/stdio-transport.d.ts +8 -0
  118. package/dist/transport/stdio-transport.d.ts.map +1 -0
  119. package/dist/transport/stdio-transport.js +53 -0
  120. package/dist/transport/stdio-transport.js.map +1 -0
  121. package/dist/transport/streamable-http-transport.d.ts +15 -0
  122. package/dist/transport/streamable-http-transport.d.ts.map +1 -0
  123. package/dist/transport/streamable-http-transport.js +151 -0
  124. package/dist/transport/streamable-http-transport.js.map +1 -0
  125. package/dist/types/index.d.ts +64 -0
  126. package/dist/types/index.d.ts.map +1 -0
  127. package/dist/types/index.js +3 -0
  128. package/dist/types/index.js.map +1 -0
  129. package/dist/web/client/MCPClient.js +348 -0
  130. package/dist/web/client/MCPTestRunner.js +317 -0
  131. package/dist/web/database/json-manager.js +124 -0
  132. package/dist/web/database/sqlite-manager.js +146 -0
  133. package/dist/web/dynamic-mcp-executor.js +443 -0
  134. package/dist/web/generators/MCPServerGenerator-new.js +284 -0
  135. package/dist/web/generators/MCPServerGenerator.js +566 -0
  136. package/dist/web/integrated-mcp-server-new.js +394 -0
  137. package/dist/web/parsers/CsvParser.js +144 -0
  138. package/dist/web/parsers/DatabaseParser.js +637 -0
  139. package/dist/web/parsers/ExcelParser.js +180 -0
  140. package/dist/web/parsers/index.js +152 -0
  141. package/dist/web/server.d.ts +3 -0
  142. package/dist/web/server.d.ts.map +1 -0
  143. package/dist/web/server.js +790 -0
  144. package/dist/web/server.js.map +1 -0
  145. package/dist/web/types/index.js +2 -0
  146. package/dist/web/web/server.js +860 -0
  147. package/package.json +68 -0
  148. package/quickmcp-direct-stdio.js +328 -0
  149. package/src/web/public/app.js +1795 -0
  150. package/src/web/public/database-tables.html +711 -0
  151. package/src/web/public/how-to-use.html +571 -0
  152. package/src/web/public/how-to-use.js +255 -0
  153. package/src/web/public/images/1-claude-quickmcp-stdio.png +0 -0
  154. package/src/web/public/images/2-claude-tools.png +0 -0
  155. package/src/web/public/images/3-claude-developer-settings.png +0 -0
  156. package/src/web/public/images/4-claude-config.png +0 -0
  157. package/src/web/public/images/5-claude-config-edit.png +0 -0
  158. package/src/web/public/index.html +626 -0
  159. package/src/web/public/manage-servers.html +198 -0
  160. package/src/web/public/modern-styles.css +946 -0
  161. package/src/web/public/shared-styles.css +2091 -0
  162. package/src/web/public/shared.js +93 -0
  163. package/src/web/public/test-servers.html +302 -0
@@ -0,0 +1,2091 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ body {
8
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
9
+ background: #f8fafc;
10
+ min-height: 100vh;
11
+ color: #1a202c;
12
+ margin: 0;
13
+ overflow-x: hidden;
14
+ }
15
+
16
+ /* Sidebar Styles */
17
+ .sidebar {
18
+ position: fixed;
19
+ left: 0;
20
+ top: 0;
21
+ width: 280px;
22
+ height: 100vh;
23
+ background: #1a202c;
24
+ transform: translateX(-100%);
25
+ transition: transform 0.3s ease;
26
+ z-index: 1000;
27
+ box-shadow: 4px 0 20px rgba(0, 0, 0, 0.1);
28
+ }
29
+
30
+ .sidebar.open {
31
+ transform: translateX(0);
32
+ }
33
+
34
+ .sidebar-header {
35
+ padding: 24px;
36
+ border-bottom: 1px solid #2d3748;
37
+ display: flex;
38
+ align-items: center;
39
+ gap: 12px;
40
+ }
41
+
42
+ .sidebar-logo {
43
+ width: 40px;
44
+ height: 40px;
45
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
46
+ border-radius: 8px;
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: center;
50
+ color: white;
51
+ font-weight: bold;
52
+ font-size: 18px;
53
+ }
54
+
55
+ .sidebar-title {
56
+ color: white;
57
+ font-size: 20px;
58
+ font-weight: 600;
59
+ }
60
+
61
+ .sidebar-nav {
62
+ padding: 16px 0;
63
+ }
64
+
65
+ .sidebar-nav-item {
66
+ display: flex;
67
+ align-items: center;
68
+ gap: 12px;
69
+ padding: 12px 24px;
70
+ color: #a0aec0;
71
+ text-decoration: none;
72
+ transition: all 0.2s;
73
+ cursor: pointer;
74
+ border: none;
75
+ background: none;
76
+ width: 100%;
77
+ text-align: left;
78
+ }
79
+
80
+ .sidebar-nav-item:hover {
81
+ background: #2d3748;
82
+ color: white;
83
+ }
84
+
85
+ .sidebar-nav-item.active {
86
+ background: #667eea;
87
+ color: white;
88
+ }
89
+
90
+ .sidebar-nav-item .icon {
91
+ width: 20px;
92
+ height: 20px;
93
+ display: flex;
94
+ align-items: center;
95
+ justify-content: center;
96
+ }
97
+
98
+ /* Main Content Styles */
99
+ .main-layout {
100
+ display: flex;
101
+ min-height: 100vh;
102
+ }
103
+
104
+ .main-content {
105
+ flex: 1;
106
+ transition: margin-left 0.3s ease;
107
+ min-height: 100vh;
108
+ }
109
+
110
+ .topbar {
111
+ background: white;
112
+ padding: 16px 24px;
113
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
114
+ display: flex;
115
+ align-items: center;
116
+ gap: 16px;
117
+ position: sticky;
118
+ top: 0;
119
+ z-index: 100;
120
+ }
121
+
122
+ .hamburger {
123
+ display: flex;
124
+ flex-direction: column;
125
+ gap: 3px;
126
+ padding: 8px;
127
+ cursor: pointer;
128
+ border: none;
129
+ background: none;
130
+ border-radius: 4px;
131
+ transition: background 0.2s;
132
+ }
133
+
134
+ .hamburger:hover {
135
+ background: #f7fafc;
136
+ }
137
+
138
+ .hamburger span {
139
+ width: 20px;
140
+ height: 2px;
141
+ background: #4a5568;
142
+ transition: all 0.2s;
143
+ }
144
+
145
+ .hamburger.active span:nth-child(1) {
146
+ transform: rotate(45deg) translate(5px, 5px);
147
+ }
148
+
149
+ .hamburger.active span:nth-child(2) {
150
+ opacity: 0;
151
+ }
152
+
153
+ .hamburger.active span:nth-child(3) {
154
+ transform: rotate(-45deg) translate(7px, -6px);
155
+ }
156
+
157
+ .topbar-title {
158
+ font-size: 24px;
159
+ font-weight: 600;
160
+ color: #1a202c;
161
+ }
162
+
163
+ .topbar-subtitle {
164
+ color: #718096;
165
+ margin-left: 8px;
166
+ }
167
+
168
+ .container {
169
+ max-width: 1200px;
170
+ margin: 0 auto;
171
+ padding: 24px;
172
+ }
173
+
174
+ .sidebar-overlay {
175
+ position: fixed;
176
+ top: 0;
177
+ left: 0;
178
+ width: 100%;
179
+ height: 100%;
180
+ background: rgba(0, 0, 0, 0.5);
181
+ z-index: 999;
182
+ opacity: 0;
183
+ visibility: hidden;
184
+ transition: all 0.3s ease;
185
+ }
186
+
187
+ .sidebar-overlay.show {
188
+ opacity: 1;
189
+ visibility: visible;
190
+ }
191
+
192
+ .card {
193
+ background: white;
194
+ border-radius: 16px;
195
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
196
+ border: 1px solid #e2e8f0;
197
+ overflow: hidden;
198
+ }
199
+
200
+ .card-header {
201
+ padding: 32px 32px 0 32px;
202
+ }
203
+
204
+ .card-content {
205
+ padding: 32px;
206
+ }
207
+
208
+ .section-title {
209
+ font-size: 28px;
210
+ font-weight: 700;
211
+ color: #1a202c;
212
+ margin-bottom: 8px;
213
+ }
214
+
215
+ .section-subtitle {
216
+ color: #718096;
217
+ font-size: 16px;
218
+ margin-bottom: 32px;
219
+ }
220
+
221
+ .tabs {
222
+ display: flex;
223
+ background: #f5f5f5;
224
+ border-radius: 8px;
225
+ padding: 4px;
226
+ margin-bottom: 20px;
227
+ }
228
+
229
+ .tab {
230
+ flex: 1;
231
+ padding: 12px 20px;
232
+ text-align: center;
233
+ border-radius: 6px;
234
+ cursor: pointer;
235
+ transition: all 0.2s;
236
+ font-weight: 500;
237
+ }
238
+
239
+ .tab.active {
240
+ background: white;
241
+ color: #667eea;
242
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
243
+ }
244
+
245
+ .tab-content {
246
+ display: none;
247
+ }
248
+
249
+ .tab-content.active {
250
+ display: block;
251
+ }
252
+
253
+ .form-group {
254
+ margin-bottom: 20px;
255
+ }
256
+
257
+ .form-group label {
258
+ display: block;
259
+ font-weight: 500;
260
+ margin-bottom: 8px;
261
+ color: #555;
262
+ }
263
+
264
+ .form-group input,
265
+ .form-group select,
266
+ .form-group textarea {
267
+ width: 100%;
268
+ padding: 12px;
269
+ border: 2px solid #e1e1e1;
270
+ border-radius: 6px;
271
+ font-size: 14px;
272
+ transition: border-color 0.2s;
273
+ }
274
+
275
+ .form-group input:focus,
276
+ .form-group select:focus,
277
+ .form-group textarea:focus {
278
+ outline: none;
279
+ border-color: #667eea;
280
+ }
281
+
282
+ .btn {
283
+ padding: 12px 24px;
284
+ border: none;
285
+ border-radius: 6px;
286
+ cursor: pointer;
287
+ font-weight: 500;
288
+ transition: all 0.2s;
289
+ text-decoration: none;
290
+ display: inline-block;
291
+ text-align: center;
292
+ }
293
+
294
+ .btn-primary {
295
+ background: #667eea;
296
+ color: white;
297
+ }
298
+
299
+ .btn-primary:hover {
300
+ background: #5a67d8;
301
+ transform: translateY(-1px);
302
+ }
303
+
304
+ .btn-secondary {
305
+ background: #e2e8f0;
306
+ color: #4a5568;
307
+ }
308
+
309
+ .btn-secondary:hover {
310
+ background: #cbd5e0;
311
+ }
312
+
313
+ .btn-danger {
314
+ background: #e53e3e;
315
+ color: white;
316
+ }
317
+
318
+ .btn-danger:hover {
319
+ background: #c53030;
320
+ }
321
+
322
+ .btn-compact {
323
+ padding: 8px 16px;
324
+ font-size: 14px;
325
+ border-radius: 8px;
326
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
327
+ color: white;
328
+ border: none;
329
+ cursor: pointer;
330
+ font-weight: 600;
331
+ transition: all 0.3s ease;
332
+ text-decoration: none;
333
+ display: inline-flex;
334
+ align-items: center;
335
+ gap: 6px;
336
+ box-shadow: 0 2px 8px rgba(102, 126, 234, 0.3);
337
+ }
338
+
339
+ .btn-compact:hover {
340
+ transform: translateY(-2px);
341
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
342
+ background: linear-gradient(135deg, #5a67d8 0%, #6b46c1 100%);
343
+ }
344
+
345
+ .btn-compact span {
346
+ font-size: 16px;
347
+ }
348
+
349
+ /* Modern Responsive Improvements */
350
+
351
+ /* Enhanced Container System */
352
+ .container {
353
+ max-width: 1200px;
354
+ margin: 0 auto;
355
+ padding: 0 20px;
356
+ }
357
+
358
+ /* Improved Grid System */
359
+ .grid {
360
+ display: grid;
361
+ gap: 24px;
362
+ }
363
+
364
+ .grid-2 {
365
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
366
+ }
367
+
368
+ .grid-3 {
369
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
370
+ }
371
+
372
+ .grid-4 {
373
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
374
+ }
375
+
376
+ /* Modern Card Enhancements */
377
+ .card {
378
+ background: #ffffff;
379
+ border-radius: 16px;
380
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
381
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
382
+ border: 1px solid rgba(226, 232, 240, 0.8);
383
+ overflow: hidden;
384
+ }
385
+
386
+ .card:hover {
387
+ transform: translateY(-2px);
388
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
389
+ }
390
+
391
+ /* Enhanced Server Cards */
392
+ .server-card {
393
+ background: linear-gradient(135deg, #ffffff 0%, #f8fafc 100%);
394
+ border: 1px solid #e2e8f0;
395
+ border-radius: 12px;
396
+ padding: 24px;
397
+ transition: all 0.3s ease;
398
+ position: relative;
399
+ overflow: hidden;
400
+ }
401
+
402
+ .server-card::before {
403
+ content: '';
404
+ position: absolute;
405
+ top: 0;
406
+ left: 0;
407
+ right: 0;
408
+ height: 4px;
409
+ background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
410
+ transform: scaleX(0);
411
+ transition: transform 0.3s ease;
412
+ }
413
+
414
+ .server-card:hover::before {
415
+ transform: scaleX(1);
416
+ }
417
+
418
+ .server-card:hover {
419
+ transform: translateY(-4px);
420
+ box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
421
+ border-color: #cbd5e0;
422
+ }
423
+
424
+ /* Server Stats Enhancement */
425
+ .server-stats {
426
+ display: flex;
427
+ flex-wrap: wrap;
428
+ gap: 12px;
429
+ margin: 16px 0;
430
+ }
431
+
432
+ .server-stats span {
433
+ background: linear-gradient(135deg, #f7fafc 0%, #edf2f7 100%);
434
+ color: #4a5568;
435
+ padding: 6px 12px;
436
+ border-radius: 20px;
437
+ font-size: 12px;
438
+ font-weight: 600;
439
+ border: 1px solid #e2e8f0;
440
+ transition: all 0.2s ease;
441
+ }
442
+
443
+ .server-stats span:hover {
444
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
445
+ color: white;
446
+ transform: scale(1.05);
447
+ }
448
+
449
+ /* Enhanced Form Elements */
450
+ .form-group {
451
+ margin-bottom: 24px;
452
+ }
453
+
454
+ .form-label {
455
+ display: block;
456
+ margin-bottom: 8px;
457
+ font-weight: 600;
458
+ color: #374151;
459
+ font-size: 14px;
460
+ }
461
+
462
+ .form-input, .form-select, .form-textarea {
463
+ width: 100%;
464
+ padding: 12px 16px;
465
+ border: 2px solid #e5e7eb;
466
+ border-radius: 8px;
467
+ font-size: 14px;
468
+ transition: all 0.2s ease;
469
+ background: #ffffff;
470
+ }
471
+
472
+ .form-input:focus, .form-select:focus, .form-textarea:focus {
473
+ outline: none;
474
+ border-color: #667eea;
475
+ box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
476
+ transform: translateY(-1px);
477
+ }
478
+
479
+ /* Modern Tab System */
480
+ .tab-nav {
481
+ display: flex;
482
+ background: #f8fafc;
483
+ border-radius: 12px;
484
+ padding: 4px;
485
+ margin-bottom: 24px;
486
+ overflow-x: auto;
487
+ }
488
+
489
+ .tab-button {
490
+ flex: 1;
491
+ min-width: max-content;
492
+ padding: 12px 24px;
493
+ border: none;
494
+ background: transparent;
495
+ color: #6b7280;
496
+ font-weight: 500;
497
+ border-radius: 8px;
498
+ cursor: pointer;
499
+ transition: all 0.2s ease;
500
+ white-space: nowrap;
501
+ }
502
+
503
+ .tab-button.active {
504
+ background: #ffffff;
505
+ color: #1f2937;
506
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
507
+ font-weight: 600;
508
+ }
509
+
510
+ .tab-button:hover:not(.active) {
511
+ background: rgba(255, 255, 255, 0.6);
512
+ color: #374151;
513
+ }
514
+
515
+ /* Enhanced Loading States */
516
+ .loading-container {
517
+ display: flex;
518
+ align-items: center;
519
+ justify-content: center;
520
+ padding: 48px;
521
+ flex-direction: column;
522
+ gap: 16px;
523
+ }
524
+
525
+ .loading-spinner {
526
+ width: 40px;
527
+ height: 40px;
528
+ border: 3px solid #e5e7eb;
529
+ border-top: 3px solid #667eea;
530
+ border-radius: 50%;
531
+ animation: spin 1s linear infinite;
532
+ }
533
+
534
+ @keyframes spin {
535
+ 0% { transform: rotate(0deg); }
536
+ 100% { transform: rotate(360deg); }
537
+ }
538
+
539
+ /* Status Indicators */
540
+ .status-badge {
541
+ display: inline-flex;
542
+ align-items: center;
543
+ gap: 6px;
544
+ padding: 4px 12px;
545
+ border-radius: 20px;
546
+ font-size: 12px;
547
+ font-weight: 600;
548
+ text-transform: uppercase;
549
+ letter-spacing: 0.5px;
550
+ }
551
+
552
+ .status-badge.success {
553
+ background: #d1fae5;
554
+ color: #065f46;
555
+ border: 1px solid #a7f3d0;
556
+ }
557
+
558
+ .status-badge.error {
559
+ background: #fee2e2;
560
+ color: #991b1b;
561
+ border: 1px solid #fca5a5;
562
+ }
563
+
564
+ .status-badge.warning {
565
+ background: #fef3c7;
566
+ color: #92400e;
567
+ border: 1px solid #fcd34d;
568
+ }
569
+
570
+ .status-badge.info {
571
+ background: #dbeafe;
572
+ color: #1e40af;
573
+ border: 1px solid #93c5fd;
574
+ }
575
+
576
+ .file-upload {
577
+ border: 2px dashed #e1e1e1;
578
+ border-radius: 6px;
579
+ padding: 40px 20px;
580
+ text-align: center;
581
+ cursor: pointer;
582
+ transition: all 0.2s;
583
+ }
584
+
585
+ .file-upload:hover {
586
+ border-color: #667eea;
587
+ background: #f7fafc;
588
+ }
589
+
590
+ .file-upload.dragover {
591
+ border-color: #667eea;
592
+ background: #ebf4ff;
593
+ }
594
+
595
+ .data-preview {
596
+ background: #f7fafc;
597
+ border-radius: 6px;
598
+ padding: 15px;
599
+ margin: 15px 0;
600
+ max-height: 300px;
601
+ overflow: auto;
602
+ }
603
+
604
+ .data-preview table {
605
+ width: 100%;
606
+ border-collapse: collapse;
607
+ }
608
+
609
+ .data-preview th,
610
+ .data-preview td {
611
+ padding: 8px;
612
+ border: 1px solid #e1e1e1;
613
+ text-align: left;
614
+ }
615
+
616
+ .data-preview th {
617
+ background: #e2e8f0;
618
+ font-weight: 500;
619
+ }
620
+
621
+ .server-list {
622
+ display: block;
623
+ gap: 20px;
624
+ }
625
+
626
+ .server-list.has-servers {
627
+ display: grid;
628
+ }
629
+
630
+ .server-card {
631
+ background: #f7fafc;
632
+ border-radius: 8px;
633
+ padding: 20px;
634
+ border: 1px solid #e1e1e1;
635
+ }
636
+
637
+ .server-card h3 {
638
+ margin-bottom: 10px;
639
+ color: #2d3748;
640
+ }
641
+
642
+ .server-stats {
643
+ display: flex;
644
+ gap: 20px;
645
+ margin: 10px 0;
646
+ font-size: 14px;
647
+ color: #718096;
648
+ }
649
+
650
+ .server-actions {
651
+ display: flex;
652
+ gap: 10px;
653
+ margin-top: 15px;
654
+ }
655
+
656
+ .test-results {
657
+ background: #f7fafc;
658
+ border-radius: 6px;
659
+ padding: 15px;
660
+ margin: 15px 0;
661
+ max-height: 400px;
662
+ overflow: auto;
663
+ font-family: 'Monaco', 'Consolas', monospace;
664
+ font-size: 12px;
665
+ white-space: pre-wrap;
666
+ }
667
+
668
+ .loading {
669
+ display: none;
670
+ text-align: center;
671
+ padding: 20px;
672
+ }
673
+
674
+ .loading.show {
675
+ display: block;
676
+ }
677
+
678
+ .error {
679
+ background: #fed7d7;
680
+ color: #c53030;
681
+ padding: 12px;
682
+ border-radius: 6px;
683
+ margin: 10px 0;
684
+ display: none;
685
+ }
686
+
687
+ .error.show {
688
+ display: block;
689
+ }
690
+
691
+ .success {
692
+ background: #c6f6d5;
693
+ color: #2f855a;
694
+ padding: 12px;
695
+ border-radius: 6px;
696
+ margin: 10px 0;
697
+ display: none;
698
+ }
699
+
700
+ .success.show {
701
+ display: block;
702
+ }
703
+
704
+ .hidden {
705
+ display: none !important;
706
+ }
707
+
708
+ /* Modal Styles */
709
+ .modal {
710
+ position: fixed;
711
+ top: 0;
712
+ left: 0;
713
+ width: 100%;
714
+ height: 100%;
715
+ z-index: 2000;
716
+ display: flex;
717
+ align-items: center;
718
+ justify-content: center;
719
+ padding: 20px;
720
+ box-sizing: border-box;
721
+ }
722
+
723
+ .modal-overlay {
724
+ position: absolute;
725
+ top: 0;
726
+ left: 0;
727
+ width: 100%;
728
+ height: 100%;
729
+ background: rgba(0, 0, 0, 0.5);
730
+ z-index: 2001;
731
+ }
732
+
733
+ .modal-content {
734
+ background: white;
735
+ border-radius: 12px;
736
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
737
+ z-index: 2002;
738
+ position: relative;
739
+ max-width: 90vw;
740
+ max-height: 90vh;
741
+ overflow: hidden;
742
+ display: flex;
743
+ flex-direction: column;
744
+ min-width: 600px;
745
+ margin: auto;
746
+ width: fit-content;
747
+ }
748
+
749
+ .modal-header {
750
+ padding: 20px 24px;
751
+ border-bottom: 1px solid #e2e8f0;
752
+ display: flex;
753
+ align-items: center;
754
+ justify-content: space-between;
755
+ background: #f8fafc;
756
+ }
757
+
758
+ .modal-header h2 {
759
+ margin: 0;
760
+ font-size: 20px;
761
+ font-weight: 600;
762
+ color: #1a202c;
763
+ }
764
+
765
+ .modal-close {
766
+ background: none;
767
+ border: none;
768
+ font-size: 24px;
769
+ cursor: pointer;
770
+ color: #718096;
771
+ padding: 0;
772
+ width: 32px;
773
+ height: 32px;
774
+ display: flex;
775
+ align-items: center;
776
+ justify-content: center;
777
+ border-radius: 4px;
778
+ transition: all 0.2s;
779
+ }
780
+
781
+ .modal-close:hover {
782
+ background: #e2e8f0;
783
+ color: #4a5568;
784
+ }
785
+
786
+ .modal-body {
787
+ padding: 24px;
788
+ overflow-y: auto;
789
+ flex: 1;
790
+ }
791
+
792
+ .server-info .info-section {
793
+ margin-bottom: 32px;
794
+ }
795
+
796
+ .server-info .info-section h3 {
797
+ font-size: 18px;
798
+ font-weight: 600;
799
+ color: #1a202c;
800
+ margin-bottom: 16px;
801
+ padding-bottom: 8px;
802
+ border-bottom: 2px solid #667eea;
803
+ }
804
+
805
+ .server-info .info-grid {
806
+ display: grid;
807
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
808
+ gap: 12px;
809
+ margin-bottom: 16px;
810
+ }
811
+
812
+ .server-info .info-grid > div {
813
+ padding: 12px;
814
+ background: #f7fafc;
815
+ border-radius: 6px;
816
+ border-left: 4px solid #667eea;
817
+ }
818
+
819
+ .data-table {
820
+ margin-bottom: 24px;
821
+ }
822
+
823
+ .data-table h4 {
824
+ font-size: 16px;
825
+ font-weight: 600;
826
+ color: #2d3748;
827
+ margin-bottom: 12px;
828
+ }
829
+
830
+ .how-to-use .section {
831
+ margin-bottom: 32px;
832
+ }
833
+
834
+ .how-to-use .section h3 {
835
+ font-size: 18px;
836
+ font-weight: 600;
837
+ color: #1a202c;
838
+ margin-bottom: 16px;
839
+ }
840
+
841
+ .code-block {
842
+ background: #2d3748;
843
+ border-radius: 8px;
844
+ overflow: hidden;
845
+ margin: 16px 0;
846
+ }
847
+
848
+ .code-block pre {
849
+ margin: 0;
850
+ padding: 16px;
851
+ color: #e2e8f0;
852
+ font-family: 'Monaco', 'Consolas', 'Liberation Mono', monospace;
853
+ font-size: 14px;
854
+ line-height: 1.5;
855
+ overflow-x: auto;
856
+ }
857
+
858
+ .how-to-use ul {
859
+ margin: 16px 0;
860
+ padding-left: 20px;
861
+ }
862
+
863
+ .how-to-use li {
864
+ margin-bottom: 8px;
865
+ }
866
+
867
+ /* Capabilities Styles */
868
+ .capabilities-list {
869
+ margin-top: 16px;
870
+ }
871
+
872
+ .capability-item {
873
+ background: #f8fafc;
874
+ border: 1px solid #e2e8f0;
875
+ border-radius: 8px;
876
+ padding: 16px;
877
+ margin-bottom: 16px;
878
+ }
879
+
880
+ .capability-header {
881
+ display: flex;
882
+ align-items: center;
883
+ justify-content: space-between;
884
+ margin-bottom: 8px;
885
+ }
886
+
887
+ .capability-type {
888
+ background: #667eea;
889
+ color: white;
890
+ padding: 2px 8px;
891
+ border-radius: 12px;
892
+ font-size: 12px;
893
+ font-weight: 500;
894
+ }
895
+
896
+ .capability-description {
897
+ color: #4a5568;
898
+ margin-bottom: 12px;
899
+ line-height: 1.5;
900
+ }
901
+
902
+ .capability-details {
903
+ background: white;
904
+ border-radius: 4px;
905
+ padding: 12px;
906
+ border-left: 3px solid #667eea;
907
+ }
908
+
909
+ .json-schema, .prompt-template {
910
+ background: #2d3748;
911
+ color: #e2e8f0;
912
+ padding: 12px;
913
+ border-radius: 4px;
914
+ font-size: 12px;
915
+ line-height: 1.4;
916
+ overflow-x: auto;
917
+ margin: 8px 0 0 0;
918
+ }
919
+
920
+ .arguments-list {
921
+ margin: 8px 0 0 0;
922
+ padding-left: 20px;
923
+ }
924
+
925
+ .arguments-list li {
926
+ margin-bottom: 4px;
927
+ }
928
+
929
+ /* Collapsible Panels */
930
+ .collapsible-panel {
931
+ border: 1px solid #e2e8f0;
932
+ border-radius: 8px;
933
+ margin-bottom: 12px;
934
+ overflow: hidden;
935
+ }
936
+
937
+ .collapsible-header {
938
+ background: #f8fafc;
939
+ padding: 12px 16px;
940
+ cursor: pointer;
941
+ display: flex;
942
+ align-items: center;
943
+ justify-content: space-between;
944
+ transition: background-color 0.2s;
945
+ user-select: none;
946
+ }
947
+
948
+ .collapsible-header:hover {
949
+ background: #edf2f7;
950
+ }
951
+
952
+ .collapsible-header.active {
953
+ background: #e6fffa;
954
+ border-bottom: 1px solid #e2e8f0;
955
+ }
956
+
957
+ .collapsible-title {
958
+ display: flex;
959
+ flex-direction: column;
960
+ gap: 4px;
961
+ }
962
+
963
+ .table-info {
964
+ font-size: 12px;
965
+ color: #718096;
966
+ font-weight: normal;
967
+ }
968
+
969
+ .collapsible-toggle {
970
+ font-size: 14px;
971
+ color: #4a5568;
972
+ transition: transform 0.2s;
973
+ }
974
+
975
+ .collapsible-header.active .collapsible-toggle {
976
+ transform: rotate(180deg);
977
+ }
978
+
979
+ .collapsible-content {
980
+ display: none;
981
+ padding: 16px;
982
+ background: white;
983
+ }
984
+
985
+ .column-type {
986
+ font-size: 11px;
987
+ color: #718096;
988
+ font-weight: normal;
989
+ }
990
+
991
+ .more-rows {
992
+ background: #f7fafc;
993
+ font-style: italic;
994
+ color: #718096;
995
+ }
996
+
997
+ .more-rows td {
998
+ text-align: center;
999
+ padding: 12px;
1000
+ }
1001
+
1002
+ /* Delete Modal Styles */
1003
+ .delete-modal {
1004
+ max-width: 500px;
1005
+ width: 500px;
1006
+ }
1007
+
1008
+ .delete-warning {
1009
+ display: flex;
1010
+ gap: 16px;
1011
+ padding: 20px;
1012
+ background: #fef2f2;
1013
+ border-radius: 8px;
1014
+ border: 1px solid #fecaca;
1015
+ margin-bottom: 24px;
1016
+ }
1017
+
1018
+ .warning-icon {
1019
+ font-size: 24px;
1020
+ flex-shrink: 0;
1021
+ }
1022
+
1023
+ .warning-content h3 {
1024
+ margin: 0 0 8px 0;
1025
+ color: #dc2626;
1026
+ font-size: 18px;
1027
+ font-weight: 600;
1028
+ }
1029
+
1030
+ .server-name-to-delete {
1031
+ font-weight: 600;
1032
+ color: #1f2937;
1033
+ background: #f3f4f6;
1034
+ padding: 4px 8px;
1035
+ border-radius: 4px;
1036
+ margin: 8px 0;
1037
+ font-family: 'Monaco', 'Consolas', monospace;
1038
+ }
1039
+
1040
+ .warning-text {
1041
+ color: #6b7280;
1042
+ margin: 0;
1043
+ font-size: 14px;
1044
+ line-height: 1.5;
1045
+ }
1046
+
1047
+ .delete-actions {
1048
+ display: flex;
1049
+ justify-content: flex-end;
1050
+ gap: 12px;
1051
+ }
1052
+
1053
+ .delete-actions .btn {
1054
+ min-width: 120px;
1055
+ }
1056
+
1057
+ .btn:disabled {
1058
+ opacity: 0.6;
1059
+ cursor: not-allowed;
1060
+ }
1061
+
1062
+ .btn-loading {
1063
+ display: inline-flex;
1064
+ align-items: center;
1065
+ gap: 8px;
1066
+ }
1067
+
1068
+ .btn-loading:before {
1069
+ content: '';
1070
+ width: 16px;
1071
+ height: 16px;
1072
+ border: 2px solid transparent;
1073
+ border-top: 2px solid currentColor;
1074
+ border-radius: 50%;
1075
+ animation: spin 1s linear infinite;
1076
+ }
1077
+
1078
+ @keyframes spin {
1079
+ to { transform: rotate(360deg); }
1080
+ }
1081
+
1082
+ /* Success Modal Styles */
1083
+ .success-modal {
1084
+ max-width: 400px;
1085
+ width: 400px;
1086
+ }
1087
+
1088
+ .success-content {
1089
+ display: flex;
1090
+ flex-direction: column;
1091
+ align-items: center;
1092
+ text-align: center;
1093
+ padding: 20px;
1094
+ }
1095
+
1096
+ .success-icon {
1097
+ font-size: 48px;
1098
+ margin-bottom: 16px;
1099
+ }
1100
+
1101
+ .success-message {
1102
+ margin-bottom: 24px;
1103
+ }
1104
+
1105
+ .success-message p {
1106
+ margin: 0;
1107
+ color: #374151;
1108
+ font-size: 16px;
1109
+ line-height: 1.5;
1110
+ }
1111
+
1112
+ .success-actions {
1113
+ display: flex;
1114
+ justify-content: center;
1115
+ }
1116
+
1117
+ .success-actions .btn {
1118
+ min-width: 100px;
1119
+ }
1120
+
1121
+ /* Error Modal Styles (reuses success modal structure) */
1122
+ .error-modal .modal-header {
1123
+ background: #fef2f2;
1124
+ border-bottom: 1px solid #fecaca;
1125
+ }
1126
+
1127
+ .error-modal .modal-header h2 {
1128
+ color: #dc2626;
1129
+ }
1130
+
1131
+ .error-modal .success-message p {
1132
+ color: #dc2626;
1133
+ }
1134
+
1135
+ /* Server Details Modal Styles */
1136
+ .server-details {
1137
+ display: flex;
1138
+ flex-direction: column;
1139
+ gap: 24px;
1140
+ }
1141
+
1142
+ .detail-section {
1143
+ background: #f8fafc;
1144
+ border-radius: 8px;
1145
+ padding: 20px;
1146
+ border: 1px solid #e2e8f0;
1147
+ }
1148
+
1149
+ .detail-section h3 {
1150
+ margin: 0 0 16px 0;
1151
+ font-size: 18px;
1152
+ font-weight: 600;
1153
+ color: #1a202c;
1154
+ border-bottom: 2px solid #667eea;
1155
+ padding-bottom: 8px;
1156
+ }
1157
+
1158
+ .detail-item {
1159
+ background: white;
1160
+ border-radius: 6px;
1161
+ padding: 16px;
1162
+ margin-bottom: 12px;
1163
+ border: 1px solid #e2e8f0;
1164
+ }
1165
+
1166
+ .detail-item strong {
1167
+ display: block;
1168
+ font-size: 16px;
1169
+ font-weight: 600;
1170
+ color: #2d3748;
1171
+ margin-bottom: 8px;
1172
+ }
1173
+
1174
+ .detail-item p {
1175
+ margin: 0 0 8px 0;
1176
+ color: #4a5568;
1177
+ line-height: 1.5;
1178
+ }
1179
+
1180
+ .detail-item small {
1181
+ color: #718096;
1182
+ font-size: 12px;
1183
+ font-family: 'Monaco', 'Consolas', monospace;
1184
+ background: #edf2f7;
1185
+ padding: 2px 6px;
1186
+ border-radius: 4px;
1187
+ }
1188
+
1189
+ .data-preview-table {
1190
+ width: 100%;
1191
+ border-collapse: collapse;
1192
+ margin-top: 12px;
1193
+ font-size: 14px;
1194
+ }
1195
+
1196
+ .data-preview-table th {
1197
+ background: #667eea;
1198
+ color: white;
1199
+ padding: 12px 8px;
1200
+ text-align: left;
1201
+ font-weight: 500;
1202
+ }
1203
+
1204
+ .data-preview-table td {
1205
+ padding: 8px;
1206
+ border-bottom: 1px solid #e2e8f0;
1207
+ }
1208
+
1209
+ .data-preview-table tr:nth-child(even) {
1210
+ background: #f7fafc;
1211
+ }
1212
+
1213
+ .table-container {
1214
+ overflow-x: auto;
1215
+ margin-top: 12px;
1216
+ border: 1px solid #e2e8f0;
1217
+ border-radius: 6px;
1218
+ }
1219
+
1220
+ .data-table h4 {
1221
+ margin: 0 0 8px 0;
1222
+ font-size: 16px;
1223
+ font-weight: 600;
1224
+ color: #2d3748;
1225
+ }
1226
+
1227
+ .data-table p {
1228
+ margin: 0 0 12px 0;
1229
+ color: #718096;
1230
+ font-size: 14px;
1231
+ }
1232
+
1233
+ /* How to Use Page Styles */
1234
+ .method-selector {
1235
+ display: grid;
1236
+ grid-template-columns: 1fr 1fr;
1237
+ gap: 20px;
1238
+ margin: 20px 0;
1239
+ }
1240
+
1241
+ .method-btn {
1242
+ background: #f8fafc;
1243
+ border: 2px solid #e2e8f0;
1244
+ border-radius: 12px;
1245
+ padding: 24px;
1246
+ cursor: pointer;
1247
+ transition: all 0.3s;
1248
+ display: flex;
1249
+ align-items: center;
1250
+ gap: 16px;
1251
+ text-align: left;
1252
+ }
1253
+
1254
+ .method-btn:hover {
1255
+ border-color: #667eea;
1256
+ background: #f7fafc;
1257
+ transform: translateY(-2px);
1258
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.1);
1259
+ }
1260
+
1261
+ .method-btn.active {
1262
+ border-color: #667eea;
1263
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1264
+ color: white;
1265
+ transform: translateY(-2px);
1266
+ box-shadow: 0 8px 25px rgba(102, 126, 234, 0.3);
1267
+ }
1268
+
1269
+ .method-icon {
1270
+ font-size: 32px;
1271
+ flex-shrink: 0;
1272
+ }
1273
+
1274
+ .method-info h3 {
1275
+ margin: 0 0 8px 0;
1276
+ font-size: 18px;
1277
+ font-weight: 600;
1278
+ }
1279
+
1280
+ .method-info p {
1281
+ margin: 0;
1282
+ opacity: 0.8;
1283
+ font-size: 14px;
1284
+ }
1285
+
1286
+ .method-content {
1287
+ animation: fadeIn 0.3s ease;
1288
+ }
1289
+
1290
+ @keyframes fadeIn {
1291
+ from { opacity: 0; transform: translateY(10px); }
1292
+ to { opacity: 1; transform: translateY(0); }
1293
+ }
1294
+
1295
+ .how-to-section {
1296
+ margin: 32px 0;
1297
+ }
1298
+
1299
+ .how-to-section h3 {
1300
+ margin: 0 0 16px 0;
1301
+ font-size: 20px;
1302
+ font-weight: 600;
1303
+ color: #1a202c;
1304
+ }
1305
+
1306
+ .advantage-list {
1307
+ list-style: none;
1308
+ padding: 0;
1309
+ margin: 16px 0;
1310
+ }
1311
+
1312
+ .advantage-list li {
1313
+ background: #f0fff4;
1314
+ border-left: 4px solid #10b981;
1315
+ padding: 12px 16px;
1316
+ margin-bottom: 8px;
1317
+ border-radius: 0 6px 6px 0;
1318
+ }
1319
+
1320
+ .advantage-list li:before {
1321
+ content: '✅ ';
1322
+ margin-right: 8px;
1323
+ }
1324
+
1325
+ .setup-steps {
1326
+ margin: 24px 0;
1327
+ }
1328
+
1329
+ .step {
1330
+ display: flex;
1331
+ gap: 20px;
1332
+ margin-bottom: 32px;
1333
+ align-items: flex-start;
1334
+ }
1335
+
1336
+ .step-number {
1337
+ width: 40px;
1338
+ height: 40px;
1339
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1340
+ color: white;
1341
+ border-radius: 50%;
1342
+ display: flex;
1343
+ align-items: center;
1344
+ justify-content: center;
1345
+ font-weight: 600;
1346
+ font-size: 18px;
1347
+ flex-shrink: 0;
1348
+ }
1349
+
1350
+ .step-content {
1351
+ flex: 1;
1352
+ }
1353
+
1354
+ .step-content h4 {
1355
+ margin: 0 0 12px 0;
1356
+ font-size: 18px;
1357
+ font-weight: 600;
1358
+ color: #1a202c;
1359
+ }
1360
+
1361
+ .step-content p {
1362
+ margin: 0 0 16px 0;
1363
+ color: #4a5568;
1364
+ line-height: 1.6;
1365
+ }
1366
+
1367
+ .status-indicator {
1368
+ display: flex;
1369
+ align-items: center;
1370
+ gap: 8px;
1371
+ margin: 12px 0;
1372
+ padding: 12px;
1373
+ background: #f8fafc;
1374
+ border-radius: 6px;
1375
+ border: 1px solid #e2e8f0;
1376
+ }
1377
+
1378
+ .status-dot {
1379
+ width: 12px;
1380
+ height: 12px;
1381
+ border-radius: 50%;
1382
+ background: #94a3b8;
1383
+ }
1384
+
1385
+ .status-dot.online {
1386
+ background: #10b981;
1387
+ box-shadow: 0 0 8px rgba(16, 185, 129, 0.3);
1388
+ }
1389
+
1390
+ .status-dot.offline {
1391
+ background: #ef4444;
1392
+ box-shadow: 0 0 8px rgba(239, 68, 68, 0.3);
1393
+ }
1394
+
1395
+ .config-block {
1396
+ position: relative;
1397
+ background: #1a202c;
1398
+ border-radius: 8px;
1399
+ overflow: hidden;
1400
+ margin: 16px 0;
1401
+ }
1402
+
1403
+ .config-block pre {
1404
+ margin: 0;
1405
+ padding: 20px;
1406
+ color: #e2e8f0;
1407
+ font-family: 'Monaco', 'Consolas', 'Liberation Mono', monospace;
1408
+ font-size: 14px;
1409
+ line-height: 1.5;
1410
+ overflow-x: auto;
1411
+ }
1412
+
1413
+ .copy-btn {
1414
+ position: absolute;
1415
+ top: 12px;
1416
+ right: 12px;
1417
+ background: #4a5568;
1418
+ color: white;
1419
+ border: none;
1420
+ padding: 8px 12px;
1421
+ border-radius: 4px;
1422
+ cursor: pointer;
1423
+ font-size: 12px;
1424
+ transition: background 0.2s;
1425
+ }
1426
+
1427
+ .copy-btn:hover {
1428
+ background: #2d3748;
1429
+ }
1430
+
1431
+ .tool-naming {
1432
+ background: #f8fafc;
1433
+ border-radius: 8px;
1434
+ padding: 20px;
1435
+ border: 1px solid #e2e8f0;
1436
+ margin: 16px 0;
1437
+ }
1438
+
1439
+ .naming-example {
1440
+ background: #1a202c;
1441
+ color: #e2e8f0;
1442
+ padding: 16px;
1443
+ border-radius: 6px;
1444
+ font-family: 'Monaco', 'Consolas', monospace;
1445
+ font-size: 16px;
1446
+ font-weight: 600;
1447
+ text-align: center;
1448
+ margin-bottom: 12px;
1449
+ }
1450
+
1451
+ .naming-description {
1452
+ color: #4a5568;
1453
+ font-size: 14px;
1454
+ line-height: 1.6;
1455
+ margin: 0;
1456
+ }
1457
+
1458
+ .troubleshooting-item {
1459
+ background: #fffbf0;
1460
+ border-left: 4px solid #f59e0b;
1461
+ padding: 20px;
1462
+ margin-bottom: 20px;
1463
+ border-radius: 0 8px 8px 0;
1464
+ }
1465
+
1466
+ .troubleshooting-item h4 {
1467
+ margin: 0 0 12px 0;
1468
+ color: #92400e;
1469
+ font-size: 16px;
1470
+ font-weight: 600;
1471
+ }
1472
+
1473
+ .troubleshooting-item ul {
1474
+ margin: 0;
1475
+ padding-left: 20px;
1476
+ color: #78350f;
1477
+ }
1478
+
1479
+ .troubleshooting-item li {
1480
+ margin-bottom: 8px;
1481
+ line-height: 1.5;
1482
+ }
1483
+
1484
+ /* Platform Tabs Styles */
1485
+ .platform-tabs {
1486
+ display: flex;
1487
+ gap: 8px;
1488
+ margin: 20px 0;
1489
+ border-bottom: 2px solid #e2e8f0;
1490
+ padding-bottom: 4px;
1491
+ }
1492
+
1493
+ .platform-tab {
1494
+ display: flex;
1495
+ align-items: center;
1496
+ gap: 8px;
1497
+ padding: 12px 20px;
1498
+ border: none;
1499
+ background: transparent;
1500
+ cursor: pointer;
1501
+ border-radius: 8px 8px 0 0;
1502
+ transition: all 0.2s;
1503
+ color: #718096;
1504
+ font-size: 14px;
1505
+ font-weight: 500;
1506
+ position: relative;
1507
+ }
1508
+
1509
+ .platform-tab img {
1510
+ width: 20px;
1511
+ height: 20px;
1512
+ opacity: 0.6;
1513
+ transition: opacity 0.2s;
1514
+ }
1515
+
1516
+ .platform-tab:hover {
1517
+ background: #f7fafc;
1518
+ color: #4a5568;
1519
+ }
1520
+
1521
+ .platform-tab:hover img {
1522
+ opacity: 0.8;
1523
+ }
1524
+
1525
+ .platform-tab.active {
1526
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1527
+ color: white;
1528
+ transform: translateY(-2px);
1529
+ }
1530
+
1531
+ .platform-tab.active img {
1532
+ opacity: 1;
1533
+ filter: brightness(0) invert(1);
1534
+ }
1535
+
1536
+ .platform-tab.active::after {
1537
+ content: '';
1538
+ position: absolute;
1539
+ bottom: -6px;
1540
+ left: 50%;
1541
+ transform: translateX(-50%);
1542
+ width: 60%;
1543
+ height: 4px;
1544
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
1545
+ border-radius: 2px;
1546
+ }
1547
+
1548
+ .platform-content {
1549
+ animation: fadeIn 0.3s ease;
1550
+ }
1551
+
1552
+ /* Config Location Styles */
1553
+ .config-location {
1554
+ background: #f0f9ff;
1555
+ border: 1px solid #bae6fd;
1556
+ border-radius: 8px;
1557
+ padding: 16px;
1558
+ margin: 16px 0;
1559
+ border-left: 4px solid #0ea5e9;
1560
+ }
1561
+
1562
+ .config-location h5 {
1563
+ margin: 0 0 12px 0;
1564
+ font-size: 14px;
1565
+ font-weight: 600;
1566
+ color: #0369a1;
1567
+ display: flex;
1568
+ align-items: center;
1569
+ gap: 8px;
1570
+ }
1571
+
1572
+ .location-list {
1573
+ margin: 0;
1574
+ padding-left: 0;
1575
+ list-style: none;
1576
+ }
1577
+
1578
+ .location-list li {
1579
+ margin-bottom: 8px;
1580
+ padding: 8px 12px;
1581
+ background: white;
1582
+ border-radius: 6px;
1583
+ border: 1px solid #e0f2fe;
1584
+ font-size: 14px;
1585
+ line-height: 1.4;
1586
+ }
1587
+
1588
+ .location-list li strong {
1589
+ color: #0369a1;
1590
+ margin-right: 8px;
1591
+ }
1592
+
1593
+ .location-list li code {
1594
+ background: #f1f5f9;
1595
+ padding: 2px 6px;
1596
+ border-radius: 4px;
1597
+ font-family: 'Monaco', 'Consolas', monospace;
1598
+ font-size: 12px;
1599
+ color: #1e293b;
1600
+ word-break: break-all;
1601
+ }
1602
+
1603
+ /* Responsive Design */
1604
+ @media (max-width: 768px) {
1605
+ .container {
1606
+ padding: 16px;
1607
+ }
1608
+
1609
+ .method-selector {
1610
+ grid-template-columns: 1fr;
1611
+ gap: 16px;
1612
+ }
1613
+
1614
+ .method-btn {
1615
+ padding: 20px;
1616
+ }
1617
+
1618
+ .step {
1619
+ gap: 16px;
1620
+ }
1621
+
1622
+ .step-number {
1623
+ width: 32px;
1624
+ height: 32px;
1625
+ font-size: 16px;
1626
+ }
1627
+
1628
+ .config-block pre {
1629
+ font-size: 12px;
1630
+ padding: 16px;
1631
+ }
1632
+
1633
+ .copy-btn {
1634
+ position: static;
1635
+ margin: 8px 0 0 0;
1636
+ width: 100%;
1637
+ }
1638
+
1639
+ .platform-tabs {
1640
+ flex-direction: column;
1641
+ gap: 4px;
1642
+ }
1643
+
1644
+ .platform-tab {
1645
+ padding: 12px 16px;
1646
+ border-radius: 6px;
1647
+ }
1648
+
1649
+ .platform-tab.active::after {
1650
+ display: none;
1651
+ }
1652
+
1653
+ .location-list li code {
1654
+ font-size: 11px;
1655
+ word-break: break-all;
1656
+ display: block;
1657
+ margin-top: 4px;
1658
+ }
1659
+
1660
+ .config-location {
1661
+ padding: 12px;
1662
+ }
1663
+ }
1664
+
1665
+ .card-header {
1666
+ padding: 24px 24px 0 24px;
1667
+ }
1668
+
1669
+ .card-content {
1670
+ padding: 24px;
1671
+ }
1672
+
1673
+ .section-title {
1674
+ font-size: 24px;
1675
+ }
1676
+
1677
+ .topbar-subtitle {
1678
+ display: none;
1679
+ }
1680
+
1681
+ .form-group {
1682
+ margin-bottom: 16px;
1683
+ }
1684
+
1685
+ .modal-content {
1686
+ min-width: 90vw;
1687
+ max-width: 95vw;
1688
+ }
1689
+
1690
+ .modal-body {
1691
+ padding: 16px;
1692
+ }
1693
+
1694
+ .server-info .info-grid {
1695
+ grid-template-columns: 1fr;
1696
+ }
1697
+
1698
+ .delete-modal, .success-modal {
1699
+ max-width: 95vw;
1700
+ width: 95vw;
1701
+ }
1702
+
1703
+ .modal-content {
1704
+ min-width: 90vw;
1705
+ }
1706
+
1707
+ .delete-warning {
1708
+ flex-direction: column;
1709
+ text-align: center;
1710
+ }
1711
+
1712
+ .delete-actions {
1713
+ flex-direction: column-reverse;
1714
+ gap: 8px;
1715
+ }
1716
+
1717
+ .delete-actions .btn {
1718
+ width: 100%;
1719
+ }
1720
+ }
1721
+
1722
+ @media (max-width: 480px) {
1723
+ .sidebar {
1724
+ width: 100%;
1725
+ }
1726
+
1727
+ .topbar-title {
1728
+ font-size: 20px;
1729
+ }
1730
+
1731
+ .section-title {
1732
+ font-size: 20px;
1733
+ }
1734
+
1735
+ .card-header {
1736
+ padding: 20px 20px 0 20px;
1737
+ }
1738
+
1739
+ .card-content {
1740
+ padding: 20px;
1741
+ }
1742
+ }
1743
+
1744
+ /* Advanced Responsive Design */
1745
+
1746
+ /* Large Desktop - 1440px+ */
1747
+ @media (min-width: 1440px) {
1748
+ .container {
1749
+ max-width: 1400px;
1750
+ padding: 0 40px;
1751
+ }
1752
+
1753
+ .grid {
1754
+ gap: 32px;
1755
+ }
1756
+
1757
+ .grid-2 {
1758
+ grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
1759
+ }
1760
+
1761
+ .grid-3 {
1762
+ grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
1763
+ }
1764
+
1765
+ .grid-4 {
1766
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
1767
+ }
1768
+ }
1769
+
1770
+ /* Desktop - 1024px to 1439px */
1771
+ @media (min-width: 1024px) and (max-width: 1439px) {
1772
+ .container {
1773
+ max-width: 1200px;
1774
+ padding: 0 32px;
1775
+ }
1776
+
1777
+ .grid-2 {
1778
+ grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
1779
+ }
1780
+
1781
+ .grid-3 {
1782
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
1783
+ }
1784
+
1785
+ .grid-4 {
1786
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
1787
+ }
1788
+ }
1789
+
1790
+ /* Tablet Landscape - 768px to 1023px */
1791
+ @media (min-width: 768px) and (max-width: 1023px) {
1792
+ .container {
1793
+ padding: 0 24px;
1794
+ }
1795
+
1796
+ .grid {
1797
+ gap: 20px;
1798
+ }
1799
+
1800
+ .grid-2 {
1801
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
1802
+ }
1803
+
1804
+ .grid-3 {
1805
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
1806
+ }
1807
+
1808
+ .grid-4 {
1809
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
1810
+ }
1811
+
1812
+ .card-header {
1813
+ padding: 20px 24px 16px 24px;
1814
+ }
1815
+
1816
+ .card-content {
1817
+ padding: 0 24px 24px 24px;
1818
+ }
1819
+
1820
+ .server-card {
1821
+ padding: 20px;
1822
+ }
1823
+
1824
+ .btn-compact {
1825
+ padding: 6px 14px;
1826
+ font-size: 13px;
1827
+ }
1828
+ }
1829
+
1830
+ /* Tablet Portrait & Large Mobile - 600px to 767px */
1831
+ @media (min-width: 600px) and (max-width: 767px) {
1832
+ .container {
1833
+ padding: 0 20px;
1834
+ }
1835
+
1836
+ .grid {
1837
+ gap: 16px;
1838
+ }
1839
+
1840
+ .grid-2, .grid-3, .grid-4 {
1841
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
1842
+ }
1843
+
1844
+ .card {
1845
+ border-radius: 12px;
1846
+ }
1847
+
1848
+ .card-header {
1849
+ padding: 16px 20px 12px 20px;
1850
+ }
1851
+
1852
+ .card-content {
1853
+ padding: 0 20px 20px 20px;
1854
+ }
1855
+
1856
+ .server-card {
1857
+ padding: 16px;
1858
+ }
1859
+
1860
+ .server-stats {
1861
+ gap: 8px;
1862
+ }
1863
+
1864
+ .server-stats span {
1865
+ padding: 4px 8px;
1866
+ font-size: 11px;
1867
+ }
1868
+
1869
+ .tab-nav {
1870
+ padding: 3px;
1871
+ margin-bottom: 16px;
1872
+ }
1873
+
1874
+ .tab-button {
1875
+ padding: 10px 16px;
1876
+ font-size: 13px;
1877
+ }
1878
+
1879
+ .btn-compact {
1880
+ padding: 8px 12px;
1881
+ font-size: 12px;
1882
+ }
1883
+
1884
+ .btn-compact span {
1885
+ font-size: 14px;
1886
+ }
1887
+ }
1888
+
1889
+ /* Mobile Landscape - 480px to 599px */
1890
+ @media (min-width: 480px) and (max-width: 599px) {
1891
+ .container {
1892
+ padding: 0 16px;
1893
+ }
1894
+
1895
+ .grid {
1896
+ gap: 12px;
1897
+ }
1898
+
1899
+ .grid-2, .grid-3, .grid-4 {
1900
+ grid-template-columns: 1fr;
1901
+ }
1902
+
1903
+ .card {
1904
+ border-radius: 10px;
1905
+ }
1906
+
1907
+ .card-header {
1908
+ padding: 12px 16px 8px 16px;
1909
+ }
1910
+
1911
+ .card-content {
1912
+ padding: 0 16px 16px 16px;
1913
+ }
1914
+
1915
+ .server-card {
1916
+ padding: 12px;
1917
+ }
1918
+
1919
+ .server-stats {
1920
+ flex-direction: column;
1921
+ gap: 6px;
1922
+ }
1923
+
1924
+ .server-stats span {
1925
+ text-align: center;
1926
+ padding: 6px 12px;
1927
+ }
1928
+
1929
+ .section-title {
1930
+ font-size: 18px;
1931
+ }
1932
+
1933
+ .tab-nav {
1934
+ flex-direction: column;
1935
+ gap: 2px;
1936
+ }
1937
+
1938
+ .tab-button {
1939
+ padding: 12px;
1940
+ text-align: center;
1941
+ }
1942
+
1943
+ .btn-compact {
1944
+ width: 100%;
1945
+ justify-content: center;
1946
+ padding: 10px 16px;
1947
+ }
1948
+
1949
+ .form-input, .form-select, .form-textarea {
1950
+ padding: 10px 12px;
1951
+ }
1952
+ }
1953
+
1954
+ /* Mobile Portrait - up to 479px */
1955
+ @media (max-width: 479px) {
1956
+ .container {
1957
+ padding: 0 12px;
1958
+ }
1959
+
1960
+ .grid {
1961
+ gap: 8px;
1962
+ }
1963
+
1964
+ .card {
1965
+ border-radius: 8px;
1966
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
1967
+ }
1968
+
1969
+ .card-header {
1970
+ padding: 8px 12px 4px 12px;
1971
+ }
1972
+
1973
+ .card-content {
1974
+ padding: 0 12px 12px 12px;
1975
+ }
1976
+
1977
+ .server-card {
1978
+ padding: 8px;
1979
+ }
1980
+
1981
+ .server-stats span {
1982
+ font-size: 10px;
1983
+ padding: 3px 6px;
1984
+ }
1985
+
1986
+ .section-title {
1987
+ font-size: 16px;
1988
+ }
1989
+
1990
+ .btn-compact {
1991
+ padding: 8px 12px;
1992
+ font-size: 11px;
1993
+ }
1994
+
1995
+ .btn-compact span {
1996
+ font-size: 12px;
1997
+ }
1998
+
1999
+ .form-input, .form-select, .form-textarea {
2000
+ padding: 8px 10px;
2001
+ font-size: 13px;
2002
+ }
2003
+
2004
+ .loading-container {
2005
+ padding: 24px;
2006
+ }
2007
+
2008
+ .loading-spinner {
2009
+ width: 30px;
2010
+ height: 30px;
2011
+ }
2012
+ }
2013
+
2014
+ /* Dark Mode Support */
2015
+ @media (prefers-color-scheme: dark) {
2016
+ body {
2017
+ background: #0f172a;
2018
+ color: #f1f5f9;
2019
+ }
2020
+
2021
+ .card {
2022
+ background: #1e293b;
2023
+ border-color: #334155;
2024
+ }
2025
+
2026
+ .server-card {
2027
+ background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
2028
+ border-color: #334155;
2029
+ }
2030
+
2031
+ .server-stats span {
2032
+ background: linear-gradient(135deg, #334155 0%, #475569 100%);
2033
+ color: #cbd5e1;
2034
+ border-color: #475569;
2035
+ }
2036
+
2037
+ .form-input, .form-select, .form-textarea {
2038
+ background: #1e293b;
2039
+ border-color: #334155;
2040
+ color: #f1f5f9;
2041
+ }
2042
+
2043
+ .tab-nav {
2044
+ background: #1e293b;
2045
+ }
2046
+
2047
+ .tab-button {
2048
+ color: #94a3b8;
2049
+ }
2050
+
2051
+ .tab-button.active {
2052
+ background: #334155;
2053
+ color: #f1f5f9;
2054
+ }
2055
+ }
2056
+
2057
+ /* High Contrast Mode */
2058
+ @media (prefers-contrast: high) {
2059
+ .card {
2060
+ border: 2px solid #000;
2061
+ }
2062
+
2063
+ .btn-compact {
2064
+ border: 2px solid #000;
2065
+ }
2066
+
2067
+ .form-input, .form-select, .form-textarea {
2068
+ border: 2px solid #000;
2069
+ }
2070
+ }
2071
+
2072
+ /* Reduced Motion */
2073
+ @media (prefers-reduced-motion: reduce) {
2074
+ * {
2075
+ animation-duration: 0.01ms !important;
2076
+ animation-iteration-count: 1 !important;
2077
+ transition-duration: 0.01ms !important;
2078
+ }
2079
+
2080
+ .loading-spinner {
2081
+ animation: none;
2082
+ }
2083
+
2084
+ .card:hover,
2085
+ .server-card:hover,
2086
+ .btn-compact:hover {
2087
+ transform: none;
2088
+ }
2089
+ }
2090
+ </style>
2091
+ </head>