mcpmake 0.1.0 → 0.2.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 (385) hide show
  1. package/dist/commands/bundle.d.ts +1 -0
  2. package/dist/commands/bundle.d.ts.map +1 -0
  3. package/dist/commands/bundle.js +5 -4
  4. package/dist/commands/bundle.js.map +1 -0
  5. package/dist/commands/ci.d.ts +1 -0
  6. package/dist/commands/ci.d.ts.map +1 -0
  7. package/dist/commands/ci.js +3 -2
  8. package/dist/commands/ci.js.map +1 -0
  9. package/dist/commands/deploy.d.ts +1 -0
  10. package/dist/commands/deploy.d.ts.map +1 -0
  11. package/dist/commands/deploy.js +4 -3
  12. package/dist/commands/deploy.js.map +1 -0
  13. package/dist/commands/diff.d.ts +1 -0
  14. package/dist/commands/diff.d.ts.map +1 -0
  15. package/dist/commands/diff.js +5 -4
  16. package/dist/commands/diff.js.map +1 -0
  17. package/dist/commands/from/describe.d.ts +1 -0
  18. package/dist/commands/from/describe.d.ts.map +1 -0
  19. package/dist/commands/from/describe.js +11 -10
  20. package/dist/commands/from/describe.js.map +1 -0
  21. package/dist/commands/from/har.d.ts +1 -0
  22. package/dist/commands/from/har.d.ts.map +1 -0
  23. package/dist/commands/from/har.js +14 -13
  24. package/dist/commands/from/har.js.map +1 -0
  25. package/dist/commands/from/openapi.d.ts +1 -0
  26. package/dist/commands/from/openapi.d.ts.map +1 -0
  27. package/dist/commands/from/openapi.js +17 -16
  28. package/dist/commands/from/openapi.js.map +1 -0
  29. package/dist/commands/from/postman.d.ts +1 -0
  30. package/dist/commands/from/postman.d.ts.map +1 -0
  31. package/dist/commands/from/postman.js +13 -12
  32. package/dist/commands/from/postman.js.map +1 -0
  33. package/dist/commands/from/stainless.d.ts +110 -0
  34. package/dist/commands/from/stainless.d.ts.map +1 -0
  35. package/dist/commands/from/stainless.js +272 -0
  36. package/dist/commands/from/stainless.js.map +1 -0
  37. package/dist/commands/from/target-support.d.ts +1 -0
  38. package/dist/commands/from/target-support.d.ts.map +1 -0
  39. package/dist/commands/from/target-support.js +2 -1
  40. package/dist/commands/from/target-support.js.map +1 -0
  41. package/dist/commands/from/url.d.ts +1 -0
  42. package/dist/commands/from/url.d.ts.map +1 -0
  43. package/dist/commands/from/url.js +14 -13
  44. package/dist/commands/from/url.js.map +1 -0
  45. package/dist/commands/from/website.d.ts +1 -0
  46. package/dist/commands/from/website.d.ts.map +1 -0
  47. package/dist/commands/from/website.js +17 -16
  48. package/dist/commands/from/website.js.map +1 -0
  49. package/dist/commands/lint.d.ts +1 -0
  50. package/dist/commands/lint.d.ts.map +1 -0
  51. package/dist/commands/lint.js +6 -5
  52. package/dist/commands/lint.js.map +1 -0
  53. package/dist/commands/merge.d.ts +1 -0
  54. package/dist/commands/merge.d.ts.map +1 -0
  55. package/dist/commands/merge.js +3 -2
  56. package/dist/commands/merge.js.map +1 -0
  57. package/dist/commands/publish.d.ts +1 -0
  58. package/dist/commands/publish.d.ts.map +1 -0
  59. package/dist/commands/publish.js +4 -3
  60. package/dist/commands/publish.js.map +1 -0
  61. package/dist/commands/rescan.d.ts +1 -0
  62. package/dist/commands/rescan.d.ts.map +1 -0
  63. package/dist/commands/rescan.js +12 -11
  64. package/dist/commands/rescan.js.map +1 -0
  65. package/dist/commands/update.d.ts +1 -0
  66. package/dist/commands/update.d.ts.map +1 -0
  67. package/dist/commands/update.js +10 -9
  68. package/dist/commands/update.js.map +1 -0
  69. package/dist/commands/verify.d.ts +1 -0
  70. package/dist/commands/verify.d.ts.map +1 -0
  71. package/dist/commands/verify.js +7 -6
  72. package/dist/commands/verify.js.map +1 -0
  73. package/dist/index.d.ts +1 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +23 -2
  76. package/dist/index.js.map +1 -0
  77. package/dist/registry/official-registry.d.ts +1 -0
  78. package/dist/registry/official-registry.d.ts.map +1 -0
  79. package/dist/registry/official-registry.js +1 -0
  80. package/dist/registry/official-registry.js.map +1 -0
  81. package/package.json +24 -42
  82. package/README.md +0 -691
  83. package/dist/analyzer/auth-detector.d.ts +0 -12
  84. package/dist/analyzer/auth-detector.js +0 -142
  85. package/dist/analyzer/dom-parser.d.ts +0 -10
  86. package/dist/analyzer/dom-parser.js +0 -259
  87. package/dist/analyzer/goal-crawler.d.ts +0 -25
  88. package/dist/analyzer/goal-crawler.js +0 -177
  89. package/dist/analyzer/hybrid-detector.d.ts +0 -28
  90. package/dist/analyzer/hybrid-detector.js +0 -96
  91. package/dist/analyzer/index.d.ts +0 -12
  92. package/dist/analyzer/index.js +0 -8
  93. package/dist/analyzer/screenshot-capture.d.ts +0 -29
  94. package/dist/analyzer/screenshot-capture.js +0 -42
  95. package/dist/analyzer/selector-builder.d.ts +0 -19
  96. package/dist/analyzer/selector-builder.js +0 -199
  97. package/dist/analyzer/semantic-analyzer.d.ts +0 -13
  98. package/dist/analyzer/semantic-analyzer.js +0 -145
  99. package/dist/analyzer/site-crawler.d.ts +0 -38
  100. package/dist/analyzer/site-crawler.js +0 -235
  101. package/dist/cloud/billing/billing-engine.d.ts +0 -44
  102. package/dist/cloud/billing/billing-engine.js +0 -81
  103. package/dist/cloud/billing/credit-store.d.ts +0 -64
  104. package/dist/cloud/billing/credit-store.js +0 -168
  105. package/dist/cloud/billing/index.d.ts +0 -4
  106. package/dist/cloud/billing/index.js +0 -2
  107. package/dist/cloud/billing/usage-store.d.ts +0 -42
  108. package/dist/cloud/billing/usage-store.js +0 -85
  109. package/dist/cloud/billing/usage-tracker.d.ts +0 -38
  110. package/dist/cloud/billing/usage-tracker.js +0 -95
  111. package/dist/cloud/build-pipeline.d.ts +0 -39
  112. package/dist/cloud/build-pipeline.js +0 -310
  113. package/dist/cloud/build-queue.d.ts +0 -30
  114. package/dist/cloud/build-queue.js +0 -70
  115. package/dist/cloud/caddy-manager.d.ts +0 -18
  116. package/dist/cloud/caddy-manager.js +0 -97
  117. package/dist/cloud/container-backend.d.ts +0 -62
  118. package/dist/cloud/container-backend.js +0 -59
  119. package/dist/cloud/container-manager.d.ts +0 -64
  120. package/dist/cloud/container-manager.js +0 -301
  121. package/dist/cloud/crypto.d.ts +0 -27
  122. package/dist/cloud/crypto.js +0 -63
  123. package/dist/cloud/db/index.d.ts +0 -27
  124. package/dist/cloud/db/index.js +0 -53
  125. package/dist/cloud/db/migrations.d.ts +0 -12
  126. package/dist/cloud/db/migrations.js +0 -329
  127. package/dist/cloud/db/pg-store.d.ts +0 -45
  128. package/dist/cloud/db/pg-store.js +0 -336
  129. package/dist/cloud/failure-tracker.d.ts +0 -51
  130. package/dist/cloud/failure-tracker.js +0 -102
  131. package/dist/cloud/idle-monitor.d.ts +0 -30
  132. package/dist/cloud/idle-monitor.js +0 -70
  133. package/dist/cloud/mailer.d.ts +0 -21
  134. package/dist/cloud/mailer.js +0 -193
  135. package/dist/cloud/mcp-proxy.d.ts +0 -58
  136. package/dist/cloud/mcp-proxy.js +0 -203
  137. package/dist/cloud/metric-samples.d.ts +0 -43
  138. package/dist/cloud/metric-samples.js +0 -85
  139. package/dist/cloud/metrics.d.ts +0 -26
  140. package/dist/cloud/metrics.js +0 -59
  141. package/dist/cloud/multipart.d.ts +0 -26
  142. package/dist/cloud/multipart.js +0 -132
  143. package/dist/cloud/observability.d.ts +0 -27
  144. package/dist/cloud/observability.js +0 -98
  145. package/dist/cloud/rate-limiter.d.ts +0 -31
  146. package/dist/cloud/rate-limiter.js +0 -58
  147. package/dist/cloud/request-security.d.ts +0 -5
  148. package/dist/cloud/request-security.js +0 -74
  149. package/dist/cloud/resource-monitor.d.ts +0 -69
  150. package/dist/cloud/resource-monitor.js +0 -130
  151. package/dist/cloud/secret-store.d.ts +0 -38
  152. package/dist/cloud/secret-store.js +0 -103
  153. package/dist/cloud/security.d.ts +0 -26
  154. package/dist/cloud/security.js +0 -142
  155. package/dist/cloud/server.d.ts +0 -21
  156. package/dist/cloud/server.js +0 -1079
  157. package/dist/cloud/shared-state.d.ts +0 -72
  158. package/dist/cloud/shared-state.js +0 -159
  159. package/dist/cloud/ssrf.d.ts +0 -43
  160. package/dist/cloud/ssrf.js +0 -150
  161. package/dist/cloud/store.d.ts +0 -41
  162. package/dist/cloud/store.js +0 -75
  163. package/dist/cloud/stripe.d.ts +0 -78
  164. package/dist/cloud/stripe.js +0 -317
  165. package/dist/cloud/telemetry-store.d.ts +0 -53
  166. package/dist/cloud/telemetry-store.js +0 -108
  167. package/dist/cloud/web/auth.d.ts +0 -225
  168. package/dist/cloud/web/auth.js +0 -555
  169. package/dist/cloud/web/charts.d.ts +0 -70
  170. package/dist/cloud/web/charts.js +0 -178
  171. package/dist/cloud/web/csrf.d.ts +0 -14
  172. package/dist/cloud/web/csrf.js +0 -22
  173. package/dist/cloud/web/docs.d.ts +0 -40
  174. package/dist/cloud/web/docs.js +0 -174
  175. package/dist/cloud/web/router.d.ts +0 -25
  176. package/dist/cloud/web/router.js +0 -1921
  177. package/dist/cloud/web/static/alpine.min.js +0 -5
  178. package/dist/cloud/web/static/favicon.svg +0 -4
  179. package/dist/cloud/web/static/htmx-sse.js +0 -290
  180. package/dist/cloud/web/static/htmx.min.js +0 -1
  181. package/dist/cloud/web/static/style.css +0 -2683
  182. package/dist/cloud/web/static-server.d.ts +0 -13
  183. package/dist/cloud/web/static-server.js +0 -73
  184. package/dist/cloud/web/template-engine.d.ts +0 -27
  185. package/dist/cloud/web/template-engine.js +0 -146
  186. package/dist/cloud/web/templates/layouts/admin.hbs +0 -57
  187. package/dist/cloud/web/templates/layouts/auth.hbs +0 -138
  188. package/dist/cloud/web/templates/layouts/base.hbs +0 -16
  189. package/dist/cloud/web/templates/layouts/dashboard.hbs +0 -39
  190. package/dist/cloud/web/templates/layouts/landing.hbs +0 -82
  191. package/dist/cloud/web/templates/pages/admin/overview.hbs +0 -123
  192. package/dist/cloud/web/templates/pages/admin/servers.hbs +0 -129
  193. package/dist/cloud/web/templates/pages/admin/telemetry.hbs +0 -39
  194. package/dist/cloud/web/templates/pages/admin/user-edit.hbs +0 -91
  195. package/dist/cloud/web/templates/pages/admin/users.hbs +0 -179
  196. package/dist/cloud/web/templates/pages/auth/forgot-password.hbs +0 -25
  197. package/dist/cloud/web/templates/pages/auth/login.hbs +0 -33
  198. package/dist/cloud/web/templates/pages/auth/register.hbs +0 -32
  199. package/dist/cloud/web/templates/pages/auth/reset-password.hbs +0 -34
  200. package/dist/cloud/web/templates/pages/dashboard/billing.hbs +0 -140
  201. package/dist/cloud/web/templates/pages/dashboard/create.hbs +0 -173
  202. package/dist/cloud/web/templates/pages/dashboard/index.hbs +0 -8
  203. package/dist/cloud/web/templates/pages/dashboard/server-detail.hbs +0 -280
  204. package/dist/cloud/web/templates/pages/dashboard/server-logs.hbs +0 -35
  205. package/dist/cloud/web/templates/pages/dashboard/server-metrics.hbs +0 -63
  206. package/dist/cloud/web/templates/pages/dashboard/servers-partial.hbs +0 -21
  207. package/dist/cloud/web/templates/pages/dashboard/servers.hbs +0 -44
  208. package/dist/cloud/web/templates/pages/docs/show.hbs +0 -16
  209. package/dist/cloud/web/templates/pages/errors/404.hbs +0 -9
  210. package/dist/cloud/web/templates/pages/errors/500.hbs +0 -8
  211. package/dist/cloud/web/templates/pages/landing/index.hbs +0 -223
  212. package/dist/cloud/web/templates/pages/legal/privacy.hbs +0 -71
  213. package/dist/cloud/web/templates/pages/legal/terms.hbs +0 -73
  214. package/dist/cloud/web/templates/partials/admin-stats.hbs +0 -52
  215. package/dist/cloud/web/templates/partials/flash-message.hbs +0 -6
  216. package/dist/cloud/web/templates/partials/pricing-table.hbs +0 -103
  217. package/dist/cloud/web/templates/partials/server-card.hbs +0 -19
  218. package/dist/cloud/web/templates/partials/status-badge.hbs +0 -1
  219. package/dist/config/configurable-command.d.ts +0 -13
  220. package/dist/config/configurable-command.js +0 -70
  221. package/dist/config/mcpmake-config.d.ts +0 -68
  222. package/dist/config/mcpmake-config.js +0 -207
  223. package/dist/docs/cli.md +0 -400
  224. package/dist/docs/mcp-2026-07-28-migration.md +0 -78
  225. package/dist/docs/migrate-from-stainless.md +0 -94
  226. package/dist/docs/quickstart.md +0 -166
  227. package/dist/docs/show-hn.md +0 -26
  228. package/dist/docs/website-servers.md +0 -169
  229. package/dist/emitter/code-writer.d.ts +0 -8
  230. package/dist/emitter/code-writer.js +0 -25
  231. package/dist/emitter/index.d.ts +0 -32
  232. package/dist/emitter/index.js +0 -280
  233. package/dist/emitter/mcpb-bundler.d.ts +0 -31
  234. package/dist/emitter/mcpb-bundler.js +0 -172
  235. package/dist/emitter/project-scaffolder.d.ts +0 -4
  236. package/dist/emitter/project-scaffolder.js +0 -89
  237. package/dist/emitter/python-template-loader.d.ts +0 -4
  238. package/dist/emitter/python-template-loader.js +0 -30
  239. package/dist/emitter/python-templates/dockerfile.hbs +0 -14
  240. package/dist/emitter/python-templates/env.example.hbs +0 -6
  241. package/dist/emitter/python-templates/requirements.txt.hbs +0 -4
  242. package/dist/emitter/python-templates/server.py.hbs +0 -77
  243. package/dist/emitter/site-scaffolder.d.ts +0 -13
  244. package/dist/emitter/site-scaffolder.js +0 -70
  245. package/dist/emitter/site-template-loader.d.ts +0 -5
  246. package/dist/emitter/site-template-loader.js +0 -47
  247. package/dist/emitter/site-templates/browser-manager.ts.hbs +0 -233
  248. package/dist/emitter/site-templates/config.ts.hbs +0 -28
  249. package/dist/emitter/site-templates/dockerfile.hbs +0 -31
  250. package/dist/emitter/site-templates/env.example.hbs +0 -19
  251. package/dist/emitter/site-templates/package.json.hbs +0 -26
  252. package/dist/emitter/site-templates/server-main-http.ts.hbs +0 -108
  253. package/dist/emitter/site-templates/server-main.ts.hbs +0 -23
  254. package/dist/emitter/site-templates/tool-handler-action.ts.hbs +0 -86
  255. package/dist/emitter/site-templates/tool-handler-form.ts.hbs +0 -116
  256. package/dist/emitter/site-templates/tool-handler-lifecycle.ts.hbs +0 -146
  257. package/dist/emitter/site-templates/tool-index.ts.hbs +0 -11
  258. package/dist/emitter/template-loader.d.ts +0 -1
  259. package/dist/emitter/template-loader.js +0 -27
  260. package/dist/emitter/templates/auth-provider.ts.hbs +0 -57
  261. package/dist/emitter/templates/config.ts.hbs +0 -63
  262. package/dist/emitter/templates/discovery.ts.hbs +0 -301
  263. package/dist/emitter/templates/dockerfile.hbs +0 -34
  264. package/dist/emitter/templates/env.example.hbs +0 -28
  265. package/dist/emitter/templates/gitignore.hbs +0 -5
  266. package/dist/emitter/templates/http-executor.ts.hbs +0 -117
  267. package/dist/emitter/templates/oauth.ts.hbs +0 -188
  268. package/dist/emitter/templates/package.json.hbs +0 -25
  269. package/dist/emitter/templates/prompts.ts.hbs +0 -22
  270. package/dist/emitter/templates/readme.md.hbs +0 -123
  271. package/dist/emitter/templates/resources.ts.hbs +0 -63
  272. package/dist/emitter/templates/server-main-http.ts.hbs +0 -407
  273. package/dist/emitter/templates/server-main.ts.hbs +0 -40
  274. package/dist/emitter/templates/task-handlers.ts.hbs +0 -189
  275. package/dist/emitter/templates/task-manager.ts.hbs +0 -139
  276. package/dist/emitter/templates/task-sse.ts.hbs +0 -105
  277. package/dist/emitter/templates/tool-handler.ts.hbs +0 -124
  278. package/dist/emitter/templates/tool-index.ts.hbs +0 -11
  279. package/dist/emitter/templates/tool-test.ts.hbs +0 -57
  280. package/dist/emitter/templates/trace.ts.hbs +0 -79
  281. package/dist/emitter/templates/tsconfig.json.hbs +0 -16
  282. package/dist/emitter/templates/types.ts.hbs +0 -5
  283. package/dist/emitter/worker-template-loader.d.ts +0 -5
  284. package/dist/emitter/worker-template-loader.js +0 -33
  285. package/dist/emitter/worker-templates/config.ts.hbs +0 -54
  286. package/dist/emitter/worker-templates/dev-vars.example.hbs +0 -10
  287. package/dist/emitter/worker-templates/gitignore.hbs +0 -6
  288. package/dist/emitter/worker-templates/package.json.hbs +0 -24
  289. package/dist/emitter/worker-templates/readme.md.hbs +0 -53
  290. package/dist/emitter/worker-templates/server.test.ts.hbs +0 -20
  291. package/dist/emitter/worker-templates/tool-handler.ts.hbs +0 -85
  292. package/dist/emitter/worker-templates/tool-index.ts.hbs +0 -28
  293. package/dist/emitter/worker-templates/tsconfig.json.hbs +0 -17
  294. package/dist/emitter/worker-templates/worker.ts.hbs +0 -242
  295. package/dist/emitter/worker-templates/wrangler.toml.hbs +0 -19
  296. package/dist/generator/spec-generator.d.ts +0 -6
  297. package/dist/generator/spec-generator.js +0 -50
  298. package/dist/parser/har-filter.d.ts +0 -8
  299. package/dist/parser/har-filter.js +0 -71
  300. package/dist/parser/har-loader.d.ts +0 -2
  301. package/dist/parser/har-loader.js +0 -14
  302. package/dist/parser/har-normalizer.d.ts +0 -20
  303. package/dist/parser/har-normalizer.js +0 -78
  304. package/dist/parser/index.d.ts +0 -10
  305. package/dist/parser/index.js +0 -6
  306. package/dist/parser/openapi-loader.d.ts +0 -6
  307. package/dist/parser/openapi-loader.js +0 -308
  308. package/dist/parser/operation-extractor.d.ts +0 -13
  309. package/dist/parser/operation-extractor.js +0 -155
  310. package/dist/parser/overlay-loader.d.ts +0 -10
  311. package/dist/parser/overlay-loader.js +0 -184
  312. package/dist/parser/postman-loader.d.ts +0 -9
  313. package/dist/parser/postman-loader.js +0 -106
  314. package/dist/parser/schema-converter.d.ts +0 -12
  315. package/dist/parser/schema-converter.js +0 -117
  316. package/dist/plugins/adapter.d.ts +0 -40
  317. package/dist/plugins/adapter.js +0 -15
  318. package/dist/plugins/loader.d.ts +0 -25
  319. package/dist/plugins/loader.js +0 -58
  320. package/dist/pricing.d.ts +0 -55
  321. package/dist/pricing.js +0 -133
  322. package/dist/providers/index.d.ts +0 -15
  323. package/dist/providers/index.js +0 -56
  324. package/dist/recorder/browser-recorder.d.ts +0 -22
  325. package/dist/recorder/browser-recorder.js +0 -205
  326. package/dist/rescan/diff-engine.d.ts +0 -5
  327. package/dist/rescan/diff-engine.js +0 -312
  328. package/dist/rescan/index.d.ts +0 -3
  329. package/dist/rescan/index.js +0 -2
  330. package/dist/rescan/rescan-runner.d.ts +0 -42
  331. package/dist/rescan/rescan-runner.js +0 -69
  332. package/dist/rescan/rescan-scheduler.d.ts +0 -41
  333. package/dist/rescan/rescan-scheduler.js +0 -179
  334. package/dist/site-transformer/browser-tools.d.ts +0 -10
  335. package/dist/site-transformer/browser-tools.js +0 -59
  336. package/dist/site-transformer/index.d.ts +0 -2
  337. package/dist/site-transformer/index.js +0 -2
  338. package/dist/site-transformer/selector-healer.d.ts +0 -8
  339. package/dist/site-transformer/selector-healer.js +0 -106
  340. package/dist/site-transformer/tool-generator.d.ts +0 -13
  341. package/dist/site-transformer/tool-generator.js +0 -245
  342. package/dist/transformer/auth-detector.d.ts +0 -13
  343. package/dist/transformer/auth-detector.js +0 -90
  344. package/dist/transformer/catalog-builder.d.ts +0 -18
  345. package/dist/transformer/catalog-builder.js +0 -56
  346. package/dist/transformer/client-compat.d.ts +0 -6
  347. package/dist/transformer/client-compat.js +0 -44
  348. package/dist/transformer/har-clusterer.d.ts +0 -9
  349. package/dist/transformer/har-clusterer.js +0 -27
  350. package/dist/transformer/har-dedup.d.ts +0 -10
  351. package/dist/transformer/har-dedup.js +0 -81
  352. package/dist/transformer/har-schema-inferrer.d.ts +0 -15
  353. package/dist/transformer/har-schema-inferrer.js +0 -90
  354. package/dist/transformer/har-to-operations.d.ts +0 -13
  355. package/dist/transformer/har-to-operations.js +0 -192
  356. package/dist/transformer/index.d.ts +0 -8
  357. package/dist/transformer/index.js +0 -6
  358. package/dist/transformer/llm-namer.d.ts +0 -6
  359. package/dist/transformer/llm-namer.js +0 -59
  360. package/dist/transformer/naming.d.ts +0 -4
  361. package/dist/transformer/naming.js +0 -30
  362. package/dist/transformer/operation-filter.d.ts +0 -13
  363. package/dist/transformer/operation-filter.js +0 -52
  364. package/dist/transformer/resource-builder.d.ts +0 -12
  365. package/dist/transformer/resource-builder.js +0 -80
  366. package/dist/transformer/schema-merger.d.ts +0 -14
  367. package/dist/transformer/schema-merger.js +0 -65
  368. package/dist/transformer/tool-builder.d.ts +0 -3
  369. package/dist/transformer/tool-builder.js +0 -114
  370. package/dist/types/index.d.ts +0 -131
  371. package/dist/types/index.js +0 -1
  372. package/dist/types/site.d.ts +0 -284
  373. package/dist/types/site.js +0 -8
  374. package/dist/utils/fail.d.ts +0 -48
  375. package/dist/utils/fail.js +0 -204
  376. package/dist/utils/fs.d.ts +0 -5
  377. package/dist/utils/fs.js +0 -28
  378. package/dist/utils/interactive.d.ts +0 -6
  379. package/dist/utils/interactive.js +0 -30
  380. package/dist/utils/logger.d.ts +0 -1
  381. package/dist/utils/logger.js +0 -2
  382. package/dist/utils/sanitize.d.ts +0 -28
  383. package/dist/utils/sanitize.js +0 -44
  384. package/dist/utils/watcher.d.ts +0 -11
  385. package/dist/utils/watcher.js +0 -36
@@ -1,2683 +0,0 @@
1
- /* =========================================================================
2
- mcpmake Cloud — Styles
3
- ========================================================================= */
4
-
5
- /* --- Reset --- */
6
-
7
- *,
8
- *::before,
9
- *::after {
10
- box-sizing: border-box;
11
- margin: 0;
12
- padding: 0;
13
- }
14
-
15
- html {
16
- -webkit-text-size-adjust: 100%;
17
- scroll-behavior: smooth;
18
- }
19
-
20
- body {
21
- font-family:
22
- -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell,
23
- 'Helvetica Neue', sans-serif;
24
- line-height: 1.6;
25
- color: #e4e4e7;
26
- background: #0a0a0f;
27
- -webkit-font-smoothing: antialiased;
28
- }
29
-
30
- a {
31
- color: inherit;
32
- text-decoration: none;
33
- }
34
-
35
- img,
36
- svg {
37
- display: block;
38
- max-width: 100%;
39
- }
40
-
41
- /* --- Custom Properties --- */
42
-
43
- :root {
44
- --color-bg-dark: #0a0a0f;
45
- --color-bg-dark-end: #12121f;
46
- --color-bg-light: #fafafa;
47
- --color-text-dark: #e4e4e7;
48
- --color-text-light: #1a1a2e;
49
- --color-text-muted: #a1a1aa;
50
- --color-primary: #7c3aed;
51
- --color-primary-hover: #8b5cf6;
52
- --color-primary-subtle: rgba(124, 58, 237, 0.12);
53
- --color-border: #27272a;
54
- --color-border-subtle: #1e1e24;
55
- --color-surface: #18181b;
56
- --color-surface-hover: #1f1f23;
57
- --color-success: #10b981;
58
- --color-warning: #f59e0b;
59
- --color-error: #ef4444;
60
- --nav-height: 64px;
61
- --max-width: 1200px;
62
- --section-padding: 96px;
63
- --radius-sm: 6px;
64
- --radius-md: 10px;
65
- --radius-lg: 16px;
66
- }
67
-
68
- /* --- Nav --- */
69
-
70
- .nav {
71
- position: sticky;
72
- top: 0;
73
- z-index: 100;
74
- height: var(--nav-height);
75
- background: rgba(10, 10, 15, 0.85);
76
- backdrop-filter: blur(12px);
77
- border-bottom: 1px solid var(--color-border);
78
- }
79
-
80
- .nav-inner {
81
- display: flex;
82
- align-items: center;
83
- justify-content: space-between;
84
- max-width: var(--max-width);
85
- margin: 0 auto;
86
- padding: 0 24px;
87
- height: 100%;
88
- }
89
-
90
- .nav-logo {
91
- font-size: 1.125rem;
92
- font-weight: 700;
93
- letter-spacing: -0.02em;
94
- color: #fff;
95
- }
96
-
97
- .nav-links {
98
- display: flex;
99
- align-items: center;
100
- gap: 24px;
101
- font-size: 0.875rem;
102
- }
103
-
104
- .nav-links a {
105
- color: var(--color-text-muted);
106
- transition: color 0.15s;
107
- }
108
-
109
- .nav-links a:hover {
110
- color: #fff;
111
- }
112
-
113
- .nav-link-subtle {
114
- color: var(--color-text-muted);
115
- }
116
-
117
- /* --- Buttons --- */
118
-
119
- .btn {
120
- display: inline-flex;
121
- align-items: center;
122
- justify-content: center;
123
- padding: 12px 24px;
124
- font-size: 0.9375rem;
125
- font-weight: 600;
126
- border-radius: 8px;
127
- border: 1px solid transparent;
128
- cursor: pointer;
129
- transition:
130
- background 0.15s,
131
- border-color 0.15s,
132
- transform 0.1s,
133
- box-shadow 0.15s;
134
- text-decoration: none;
135
- }
136
-
137
- .btn:active {
138
- transform: scale(0.98);
139
- }
140
-
141
- .btn-primary {
142
- background: var(--color-primary);
143
- color: #fff;
144
- border-color: var(--color-primary);
145
- }
146
-
147
- .btn-primary:hover {
148
- background: var(--color-primary-hover);
149
- border-color: var(--color-primary-hover);
150
- box-shadow: 0 0 20px rgba(124, 58, 237, 0.3);
151
- }
152
-
153
- .btn-secondary {
154
- background: transparent;
155
- color: var(--color-text-dark);
156
- border-color: var(--color-border);
157
- }
158
-
159
- .btn-secondary:hover {
160
- border-color: var(--color-text-muted);
161
- }
162
-
163
- .btn-sm {
164
- padding: 6px 16px;
165
- font-size: 0.8125rem;
166
- border-radius: var(--radius-sm);
167
- }
168
-
169
- .btn-lg {
170
- padding: 16px 36px;
171
- font-size: 1.0625rem;
172
- border-radius: var(--radius-md);
173
- }
174
-
175
- .btn-block {
176
- width: 100%;
177
- }
178
-
179
- /* --- Hero --- */
180
-
181
- .hero {
182
- display: flex;
183
- align-items: center;
184
- justify-content: center;
185
- min-height: calc(100vh - var(--nav-height));
186
- background: linear-gradient(170deg, var(--color-bg-dark) 0%, var(--color-bg-dark-end) 100%);
187
- text-align: center;
188
- padding: 80px 24px 60px;
189
- position: relative;
190
- overflow: hidden;
191
- }
192
-
193
- .hero::before {
194
- content: '';
195
- position: absolute;
196
- top: -50%;
197
- left: 50%;
198
- width: 800px;
199
- height: 800px;
200
- transform: translateX(-50%);
201
- background: radial-gradient(circle, rgba(124, 58, 237, 0.08) 0%, transparent 70%);
202
- pointer-events: none;
203
- }
204
-
205
- .hero-inner {
206
- max-width: 720px;
207
- position: relative;
208
- z-index: 1;
209
- }
210
-
211
- .hero h1 {
212
- font-size: clamp(2rem, 5vw, 3.5rem);
213
- font-weight: 800;
214
- line-height: 1.12;
215
- letter-spacing: -0.035em;
216
- color: #fff;
217
- margin-bottom: 20px;
218
- }
219
-
220
- .hero-sub {
221
- font-size: 1.125rem;
222
- color: var(--color-text-muted);
223
- line-height: 1.7;
224
- margin-bottom: 36px;
225
- max-width: 540px;
226
- margin-left: auto;
227
- margin-right: auto;
228
- }
229
-
230
- .hero-ctas {
231
- display: flex;
232
- gap: 12px;
233
- justify-content: center;
234
- flex-wrap: wrap;
235
- margin-bottom: 48px;
236
- }
237
-
238
- /* --- Terminal --- */
239
-
240
- .terminal {
241
- background: #0d0d14;
242
- border: 1px solid var(--color-border);
243
- border-radius: var(--radius-lg);
244
- text-align: left;
245
- overflow: hidden;
246
- box-shadow:
247
- 0 4px 24px rgba(0, 0, 0, 0.4),
248
- 0 0 0 1px rgba(255, 255, 255, 0.03);
249
- max-width: 620px;
250
- margin: 0 auto;
251
- }
252
-
253
- .terminal-titlebar {
254
- display: flex;
255
- align-items: center;
256
- gap: 8px;
257
- padding: 12px 16px;
258
- background: #141420;
259
- border-bottom: 1px solid var(--color-border);
260
- }
261
-
262
- .terminal-dot {
263
- width: 12px;
264
- height: 12px;
265
- border-radius: 50%;
266
- display: inline-block;
267
- }
268
-
269
- .terminal-dot--red {
270
- background: #ff5f57;
271
- }
272
- .terminal-dot--yellow {
273
- background: #febc2e;
274
- }
275
- .terminal-dot--green {
276
- background: #28c840;
277
- }
278
-
279
- .terminal-title {
280
- flex: 1;
281
- text-align: center;
282
- font-size: 0.75rem;
283
- color: var(--color-text-muted);
284
- margin-right: 44px; /* offset for dots to center */
285
- }
286
-
287
- .terminal-body {
288
- padding: 20px 24px;
289
- overflow-x: auto;
290
- }
291
-
292
- .terminal-body pre {
293
- margin: 0;
294
- font-size: 0.8125rem;
295
- line-height: 1.7;
296
- }
297
-
298
- .terminal-body code {
299
- font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', 'JetBrains Mono', Menlo, monospace;
300
- color: #d4d4d8;
301
- }
302
-
303
- .terminal-prompt {
304
- color: var(--color-success);
305
- font-weight: 700;
306
- }
307
-
308
- .terminal-muted {
309
- color: #71717a;
310
- }
311
-
312
- .terminal-success {
313
- color: var(--color-success);
314
- }
315
-
316
- /* --- Social Proof --- */
317
-
318
- .social-proof {
319
- background: #111116;
320
- border-top: 1px solid var(--color-border);
321
- border-bottom: 1px solid var(--color-border);
322
- padding: 40px 24px;
323
- }
324
-
325
- .social-proof-inner {
326
- display: flex;
327
- align-items: center;
328
- justify-content: center;
329
- gap: 48px;
330
- max-width: var(--max-width);
331
- margin: 0 auto;
332
- flex-wrap: wrap;
333
- }
334
-
335
- .social-proof-stat {
336
- display: flex;
337
- flex-direction: column;
338
- align-items: center;
339
- gap: 4px;
340
- }
341
-
342
- .social-proof-number {
343
- font-size: 1.75rem;
344
- font-weight: 800;
345
- color: #fff;
346
- letter-spacing: -0.02em;
347
- }
348
-
349
- .social-proof-label {
350
- font-size: 0.8125rem;
351
- color: var(--color-text-muted);
352
- text-transform: uppercase;
353
- letter-spacing: 0.05em;
354
- }
355
-
356
- .social-proof-divider {
357
- width: 1px;
358
- height: 40px;
359
- background: var(--color-border);
360
- }
361
-
362
- /* --- Sections --- */
363
-
364
- .section {
365
- max-width: var(--max-width);
366
- margin: 0 auto;
367
- padding: var(--section-padding) 24px;
368
- }
369
-
370
- .section--dark {
371
- max-width: none;
372
- background: linear-gradient(180deg, #0e0e16 0%, var(--color-bg-dark) 100%);
373
- }
374
-
375
- .section--dark > h2,
376
- .section--dark > .bento-grid,
377
- .section--dark > .pricing-grid {
378
- max-width: var(--max-width);
379
- margin-left: auto;
380
- margin-right: auto;
381
- }
382
-
383
- .section h2 {
384
- font-size: clamp(1.5rem, 3vw, 2rem);
385
- font-weight: 700;
386
- text-align: center;
387
- margin-bottom: 56px;
388
- color: #fff;
389
- letter-spacing: -0.02em;
390
- }
391
-
392
- /* --- Steps (How it works) --- */
393
-
394
- .steps {
395
- display: grid;
396
- grid-template-columns: repeat(3, 1fr);
397
- gap: 32px;
398
- }
399
-
400
- .step {
401
- background: var(--color-surface);
402
- border: 1px solid var(--color-border);
403
- border-radius: var(--radius-lg);
404
- padding: 36px 28px;
405
- text-align: center;
406
- transition:
407
- border-color 0.2s,
408
- transform 0.2s;
409
- }
410
-
411
- .step:hover {
412
- border-color: #3f3f46;
413
- transform: translateY(-2px);
414
- }
415
-
416
- .step-icon {
417
- display: flex;
418
- align-items: center;
419
- justify-content: center;
420
- width: 48px;
421
- height: 48px;
422
- border-radius: 12px;
423
- background: var(--color-primary-subtle);
424
- color: var(--color-primary-hover);
425
- margin: 0 auto 16px;
426
- }
427
-
428
- .step-num {
429
- display: inline-flex;
430
- align-items: center;
431
- justify-content: center;
432
- width: 36px;
433
- height: 36px;
434
- border-radius: 50%;
435
- background: var(--color-primary);
436
- color: #fff;
437
- font-weight: 700;
438
- font-size: 0.875rem;
439
- margin-bottom: 16px;
440
- }
441
-
442
- .step h3 {
443
- font-size: 1.125rem;
444
- font-weight: 600;
445
- margin-bottom: 8px;
446
- color: #fff;
447
- }
448
-
449
- .step p {
450
- font-size: 0.9375rem;
451
- color: var(--color-text-muted);
452
- line-height: 1.6;
453
- }
454
-
455
- /* --- Bento Feature Grid --- */
456
-
457
- .bento-grid {
458
- display: grid;
459
- grid-template-columns: repeat(3, 1fr);
460
- gap: 20px;
461
- padding: 0 24px;
462
- }
463
-
464
- .bento-card {
465
- background: var(--color-surface);
466
- border: 1px solid var(--color-border);
467
- border-radius: var(--radius-lg);
468
- padding: 32px 28px;
469
- transition:
470
- border-color 0.2s,
471
- transform 0.2s,
472
- box-shadow 0.2s;
473
- }
474
-
475
- .bento-card:hover {
476
- border-color: #3f3f46;
477
- transform: translateY(-3px);
478
- box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
479
- }
480
-
481
- .bento-icon {
482
- display: flex;
483
- align-items: center;
484
- justify-content: center;
485
- width: 44px;
486
- height: 44px;
487
- border-radius: var(--radius-md);
488
- background: var(--color-primary-subtle);
489
- color: var(--color-primary-hover);
490
- margin-bottom: 20px;
491
- }
492
-
493
- .bento-card h3 {
494
- font-size: 1.0625rem;
495
- font-weight: 600;
496
- color: #fff;
497
- margin-bottom: 8px;
498
- }
499
-
500
- .bento-card p {
501
- font-size: 0.875rem;
502
- color: var(--color-text-muted);
503
- line-height: 1.65;
504
- }
505
-
506
- /* --- Comparison Table --- */
507
-
508
- .comparison-wrapper {
509
- max-width: 800px;
510
- margin: 0 auto;
511
- overflow-x: auto;
512
- -webkit-overflow-scrolling: touch;
513
- }
514
-
515
- .comparison-table {
516
- width: 100%;
517
- border-collapse: collapse;
518
- font-size: 0.9375rem;
519
- }
520
-
521
- .comparison-table thead th {
522
- text-align: left;
523
- font-size: 0.75rem;
524
- font-weight: 600;
525
- text-transform: uppercase;
526
- letter-spacing: 0.06em;
527
- color: var(--color-text-muted);
528
- padding: 12px 20px;
529
- border-bottom: 1px solid var(--color-border);
530
- }
531
-
532
- .comparison-table tbody td {
533
- padding: 16px 20px;
534
- color: var(--color-text-dark);
535
- border-bottom: 1px solid var(--color-border-subtle);
536
- }
537
-
538
- .comparison-table tbody tr:last-child td {
539
- border-bottom: none;
540
- }
541
-
542
- .comparison-name {
543
- font-weight: 500;
544
- color: #fff;
545
- }
546
-
547
- .comparison-highlight {
548
- background: var(--color-primary-subtle);
549
- border-radius: var(--radius-md);
550
- }
551
-
552
- .comparison-highlight td {
553
- border-bottom-color: transparent;
554
- }
555
-
556
- .comparison-highlight td:first-child {
557
- border-radius: var(--radius-md) 0 0 var(--radius-md);
558
- }
559
-
560
- .comparison-highlight td:last-child {
561
- border-radius: 0 var(--radius-md) var(--radius-md) 0;
562
- color: var(--color-success);
563
- }
564
-
565
- /* --- Pricing --- */
566
-
567
- .pricing-grid {
568
- display: grid;
569
- grid-template-columns: repeat(4, 1fr);
570
- gap: 20px;
571
- padding: 0 24px;
572
- }
573
-
574
- .pricing-card {
575
- background: var(--color-surface);
576
- border: 1px solid var(--color-border);
577
- border-radius: var(--radius-lg);
578
- padding: 32px 24px;
579
- display: flex;
580
- flex-direction: column;
581
- position: relative;
582
- transition:
583
- border-color 0.2s,
584
- transform 0.2s;
585
- }
586
-
587
- .pricing-card:hover {
588
- border-color: #3f3f46;
589
- transform: translateY(-2px);
590
- }
591
-
592
- .pricing-card--featured {
593
- border-color: var(--color-primary);
594
- box-shadow: 0 0 30px rgba(124, 58, 237, 0.15);
595
- }
596
-
597
- .pricing-card--featured:hover {
598
- border-color: var(--color-primary-hover);
599
- }
600
-
601
- .pricing-badge {
602
- position: absolute;
603
- top: -12px;
604
- left: 50%;
605
- transform: translateX(-50%);
606
- background: var(--color-primary);
607
- color: #fff;
608
- font-size: 0.6875rem;
609
- font-weight: 700;
610
- text-transform: uppercase;
611
- letter-spacing: 0.06em;
612
- padding: 4px 14px;
613
- border-radius: 20px;
614
- }
615
-
616
- .pricing-card-header {
617
- text-align: center;
618
- margin-bottom: 24px;
619
- padding-bottom: 24px;
620
- border-bottom: 1px solid var(--color-border-subtle);
621
- }
622
-
623
- .pricing-tier-name {
624
- font-size: 0.9375rem;
625
- font-weight: 600;
626
- color: var(--color-text-muted);
627
- margin-bottom: 12px;
628
- text-transform: uppercase;
629
- letter-spacing: 0.04em;
630
- }
631
-
632
- .pricing-amount {
633
- color: #fff;
634
- margin-bottom: 8px;
635
- }
636
-
637
- .pricing-currency {
638
- font-size: 1.25rem;
639
- font-weight: 600;
640
- vertical-align: top;
641
- position: relative;
642
- top: 6px;
643
- }
644
-
645
- .pricing-value {
646
- font-size: 3rem;
647
- font-weight: 800;
648
- letter-spacing: -0.03em;
649
- line-height: 1;
650
- }
651
-
652
- .pricing-period {
653
- font-size: 0.9375rem;
654
- color: var(--color-text-muted);
655
- font-weight: 400;
656
- }
657
-
658
- .pricing-tagline {
659
- font-size: 0.8125rem;
660
- color: var(--color-text-muted);
661
- }
662
-
663
- .pricing-features {
664
- list-style: none;
665
- flex: 1;
666
- margin-bottom: 28px;
667
- }
668
-
669
- .pricing-features li {
670
- font-size: 0.875rem;
671
- color: var(--color-text-dark);
672
- padding: 7px 0;
673
- padding-left: 22px;
674
- position: relative;
675
- line-height: 1.5;
676
- }
677
-
678
- .pricing-features li::before {
679
- content: '';
680
- position: absolute;
681
- left: 0;
682
- top: 12px;
683
- width: 14px;
684
- height: 14px;
685
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2310b981' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
686
- background-size: contain;
687
- background-repeat: no-repeat;
688
- }
689
-
690
- .pricing-card-footer {
691
- text-align: center;
692
- }
693
-
694
- .pricing-note {
695
- font-size: 0.75rem;
696
- color: var(--color-text-muted);
697
- margin-top: 10px;
698
- }
699
-
700
- /* --- CTA Section --- */
701
-
702
- .cta-section {
703
- background: linear-gradient(170deg, #12121f 0%, var(--color-bg-dark) 100%);
704
- padding: var(--section-padding) 24px;
705
- text-align: center;
706
- position: relative;
707
- overflow: hidden;
708
- }
709
-
710
- .cta-section::before {
711
- content: '';
712
- position: absolute;
713
- bottom: -30%;
714
- left: 50%;
715
- width: 600px;
716
- height: 600px;
717
- transform: translateX(-50%);
718
- background: radial-gradient(circle, rgba(124, 58, 237, 0.06) 0%, transparent 70%);
719
- pointer-events: none;
720
- }
721
-
722
- .cta-inner {
723
- max-width: 600px;
724
- margin: 0 auto;
725
- position: relative;
726
- z-index: 1;
727
- }
728
-
729
- .cta-section h2 {
730
- font-size: clamp(1.5rem, 4vw, 2.25rem);
731
- font-weight: 800;
732
- color: #fff;
733
- margin-bottom: 16px;
734
- letter-spacing: -0.03em;
735
- }
736
-
737
- .cta-sub {
738
- font-size: 1.0625rem;
739
- color: var(--color-text-muted);
740
- line-height: 1.7;
741
- margin-bottom: 36px;
742
- }
743
-
744
- /* --- Footer --- */
745
-
746
- .footer {
747
- border-top: 1px solid var(--color-border);
748
- padding: 64px 24px 32px;
749
- background: var(--color-bg-dark);
750
- }
751
-
752
- .footer-inner {
753
- display: grid;
754
- grid-template-columns: repeat(3, 1fr);
755
- gap: 32px;
756
- max-width: var(--max-width);
757
- margin: 0 auto;
758
- }
759
-
760
- .footer-col h4 {
761
- font-size: 0.8125rem;
762
- font-weight: 600;
763
- text-transform: uppercase;
764
- letter-spacing: 0.05em;
765
- color: var(--color-text-muted);
766
- margin-bottom: 12px;
767
- }
768
-
769
- .footer-col a {
770
- display: block;
771
- font-size: 0.875rem;
772
- color: var(--color-text-dark);
773
- padding: 4px 0;
774
- transition: color 0.15s;
775
- }
776
-
777
- .footer-col a:hover {
778
- color: var(--color-primary-hover);
779
- }
780
-
781
- .footer-copy {
782
- grid-column: 1 / -1;
783
- text-align: center;
784
- font-size: 0.75rem;
785
- color: var(--color-text-muted);
786
- margin-top: 24px;
787
- }
788
-
789
- /* --- Status Colors (used by dashboard) --- */
790
-
791
- .status-green {
792
- color: #22c55e;
793
- }
794
- .status-gray {
795
- color: #71717a;
796
- }
797
- .status-red {
798
- color: var(--color-error);
799
- }
800
- .status-yellow {
801
- color: #eab308;
802
- }
803
-
804
- /* =========================================================================
805
- Admin Panel
806
- ========================================================================= */
807
-
808
- /* --- Admin Shell (sidebar + main) --- */
809
-
810
- .admin-shell {
811
- display: flex;
812
- min-height: 100vh;
813
- }
814
-
815
- .admin-sidebar {
816
- width: 240px;
817
- flex-shrink: 0;
818
- background: var(--color-surface);
819
- border-right: 1px solid var(--color-border);
820
- display: flex;
821
- flex-direction: column;
822
- position: fixed;
823
- top: 0;
824
- left: 0;
825
- bottom: 0;
826
- z-index: 50;
827
- }
828
-
829
- .admin-sidebar-header {
830
- padding: 20px 20px 16px;
831
- border-bottom: 1px solid var(--color-border);
832
- }
833
-
834
- .admin-sidebar-logo {
835
- display: block;
836
- font-size: 1rem;
837
- font-weight: 700;
838
- color: #fff;
839
- margin-bottom: 4px;
840
- }
841
-
842
- .admin-sidebar-logo:hover {
843
- color: var(--color-primary-hover);
844
- }
845
-
846
- .admin-sidebar-label {
847
- display: inline-block;
848
- font-size: 0.6875rem;
849
- font-weight: 600;
850
- text-transform: uppercase;
851
- letter-spacing: 0.08em;
852
- color: var(--color-primary-hover);
853
- background: var(--color-primary-subtle);
854
- padding: 2px 8px;
855
- border-radius: 4px;
856
- }
857
-
858
- .admin-sidebar-nav {
859
- flex: 1;
860
- padding: 12px 8px;
861
- display: flex;
862
- flex-direction: column;
863
- gap: 2px;
864
- }
865
-
866
- .admin-nav-link {
867
- display: flex;
868
- align-items: center;
869
- gap: 10px;
870
- padding: 8px 12px;
871
- border-radius: var(--radius-sm);
872
- font-size: 0.875rem;
873
- color: var(--color-text-muted);
874
- transition:
875
- background 0.12s,
876
- color 0.12s;
877
- }
878
-
879
- .admin-nav-link:hover {
880
- background: var(--color-surface-hover);
881
- color: #fff;
882
- }
883
-
884
- .admin-nav-link.active {
885
- background: var(--color-primary-subtle);
886
- color: var(--color-primary-hover);
887
- }
888
-
889
- .admin-nav-link svg {
890
- flex-shrink: 0;
891
- opacity: 0.7;
892
- }
893
-
894
- .admin-nav-link.active svg {
895
- opacity: 1;
896
- }
897
-
898
- .admin-nav-link--back {
899
- margin-top: auto;
900
- }
901
-
902
- .admin-sidebar-footer {
903
- padding: 12px 8px 16px;
904
- border-top: 1px solid var(--color-border);
905
- }
906
-
907
- .admin-sidebar-user {
908
- padding: 8px 12px;
909
- margin-top: 8px;
910
- }
911
-
912
- .admin-sidebar-email {
913
- display: block;
914
- font-size: 0.8125rem;
915
- color: var(--color-text-muted);
916
- overflow: hidden;
917
- text-overflow: ellipsis;
918
- white-space: nowrap;
919
- margin-bottom: 4px;
920
- }
921
-
922
- .admin-signout-btn {
923
- background: none;
924
- border: none;
925
- color: var(--color-text-muted);
926
- font-size: 0.75rem;
927
- cursor: pointer;
928
- padding: 0;
929
- transition: color 0.12s;
930
- }
931
-
932
- .admin-signout-btn:hover {
933
- color: var(--color-error);
934
- }
935
-
936
- .admin-main {
937
- flex: 1;
938
- margin-left: 240px;
939
- padding: 32px 40px;
940
- min-width: 0;
941
- }
942
-
943
- /* --- Admin Page Structures --- */
944
-
945
- .admin-page-header {
946
- display: flex;
947
- align-items: baseline;
948
- gap: 12px;
949
- margin-bottom: 28px;
950
- }
951
-
952
- .admin-page-header h1 {
953
- font-size: 1.5rem;
954
- font-weight: 700;
955
- color: #fff;
956
- letter-spacing: -0.02em;
957
- }
958
-
959
- .admin-page-count {
960
- font-size: 0.875rem;
961
- color: var(--color-text-muted);
962
- }
963
-
964
- /* --- Stats Grid --- */
965
-
966
- .admin-stats {
967
- display: grid;
968
- grid-template-columns: repeat(4, 1fr);
969
- gap: 16px;
970
- margin-bottom: 32px;
971
- }
972
-
973
- .stat-card {
974
- background: var(--color-surface);
975
- border: 1px solid var(--color-border);
976
- border-radius: var(--radius-md);
977
- padding: 24px;
978
- display: flex;
979
- flex-direction: column;
980
- gap: 4px;
981
- }
982
-
983
- .stat-card-value {
984
- font-size: 2rem;
985
- font-weight: 800;
986
- color: #fff;
987
- letter-spacing: -0.03em;
988
- line-height: 1.1;
989
- }
990
-
991
- .stat-card-label {
992
- font-size: 0.8125rem;
993
- color: var(--color-text-muted);
994
- text-transform: uppercase;
995
- letter-spacing: 0.04em;
996
- }
997
-
998
- /* --- System Info --- */
999
-
1000
- .system-info {
1001
- background: var(--color-surface);
1002
- border: 1px solid var(--color-border);
1003
- border-radius: var(--radius-md);
1004
- padding: 24px;
1005
- }
1006
-
1007
- .system-info h2 {
1008
- font-size: 1.125rem;
1009
- font-weight: 600;
1010
- color: #fff;
1011
- margin-bottom: 16px;
1012
- text-align: left;
1013
- }
1014
-
1015
- .system-info-list {
1016
- display: flex;
1017
- flex-direction: column;
1018
- gap: 0;
1019
- }
1020
-
1021
- .system-info-row {
1022
- display: flex;
1023
- justify-content: space-between;
1024
- align-items: center;
1025
- padding: 10px 0;
1026
- border-bottom: 1px solid var(--color-border-subtle);
1027
- }
1028
-
1029
- .system-info-row:last-child {
1030
- border-bottom: none;
1031
- }
1032
-
1033
- .system-info-row dt {
1034
- font-size: 0.875rem;
1035
- color: var(--color-text-muted);
1036
- }
1037
-
1038
- .system-info-row dd {
1039
- font-size: 0.875rem;
1040
- color: var(--color-text-dark);
1041
- font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', Menlo, monospace;
1042
- }
1043
-
1044
- /* --- Admin Table --- */
1045
-
1046
- .admin-table-wrap {
1047
- overflow-x: auto;
1048
- -webkit-overflow-scrolling: touch;
1049
- }
1050
-
1051
- .admin-table {
1052
- width: 100%;
1053
- border-collapse: collapse;
1054
- font-size: 0.875rem;
1055
- background: var(--color-surface);
1056
- border: 1px solid var(--color-border);
1057
- border-radius: var(--radius-md);
1058
- overflow: hidden;
1059
- }
1060
-
1061
- .admin-table thead th {
1062
- text-align: left;
1063
- font-size: 0.75rem;
1064
- font-weight: 600;
1065
- text-transform: uppercase;
1066
- letter-spacing: 0.05em;
1067
- color: var(--color-text-muted);
1068
- padding: 12px 16px;
1069
- border-bottom: 1px solid var(--color-border);
1070
- white-space: nowrap;
1071
- user-select: none;
1072
- }
1073
-
1074
- .admin-table thead th.sortable {
1075
- cursor: pointer;
1076
- transition: color 0.12s;
1077
- }
1078
-
1079
- .admin-table thead th.sortable:hover {
1080
- color: #fff;
1081
- }
1082
-
1083
- .admin-table thead th.sorted-asc::after {
1084
- content: ' \2191';
1085
- }
1086
-
1087
- .admin-table thead th.sorted-desc::after {
1088
- content: ' \2193';
1089
- }
1090
-
1091
- .admin-table tbody td {
1092
- padding: 10px 16px;
1093
- border-bottom: 1px solid var(--color-border-subtle);
1094
- color: var(--color-text-dark);
1095
- vertical-align: middle;
1096
- }
1097
-
1098
- .admin-table tbody tr:last-child td {
1099
- border-bottom: none;
1100
- }
1101
-
1102
- .admin-table tbody tr:hover {
1103
- background: var(--color-surface-hover);
1104
- }
1105
-
1106
- .admin-table code {
1107
- font-family: 'SF Mono', 'Fira Code', Menlo, monospace;
1108
- font-size: 0.8125rem;
1109
- color: var(--color-primary-hover);
1110
- }
1111
-
1112
- .admin-table-empty {
1113
- text-align: center;
1114
- padding: 32px 16px !important;
1115
- color: var(--color-text-muted);
1116
- }
1117
-
1118
- .admin-actions {
1119
- display: flex;
1120
- align-items: center;
1121
- gap: 8px;
1122
- white-space: nowrap;
1123
- }
1124
-
1125
- /* --- Search Input --- */
1126
-
1127
- .search-input {
1128
- width: 100%;
1129
- padding: 10px 14px;
1130
- margin-bottom: 16px;
1131
- border: 1px solid var(--color-border);
1132
- border-radius: var(--radius-sm);
1133
- background: var(--color-surface);
1134
- color: var(--color-text-dark);
1135
- font-size: 0.875rem;
1136
- outline: none;
1137
- transition: border-color 0.15s;
1138
- }
1139
-
1140
- .search-input:focus {
1141
- border-color: var(--color-primary);
1142
- }
1143
-
1144
- .search-input::placeholder {
1145
- color: var(--color-text-muted);
1146
- }
1147
-
1148
- /* --- Plan Badge --- */
1149
-
1150
- .plan-badge {
1151
- display: inline-block;
1152
- padding: 2px 8px;
1153
- border-radius: 4px;
1154
- font-size: 0.75rem;
1155
- font-weight: 600;
1156
- text-transform: uppercase;
1157
- letter-spacing: 0.03em;
1158
- }
1159
-
1160
- .plan-badge--free {
1161
- background: rgba(113, 113, 122, 0.15);
1162
- color: #a1a1aa;
1163
- }
1164
-
1165
- .plan-badge--hobbyist {
1166
- background: rgba(59, 130, 246, 0.12);
1167
- color: #60a5fa;
1168
- }
1169
-
1170
- .plan-badge--pro {
1171
- background: rgba(139, 92, 246, 0.12);
1172
- color: #a78bfa;
1173
- }
1174
-
1175
- .plan-badge--team {
1176
- background: rgba(245, 158, 11, 0.12);
1177
- color: #fbbf24;
1178
- }
1179
-
1180
- .plan-badge--enterprise {
1181
- background: rgba(16, 185, 129, 0.12);
1182
- color: #34d399;
1183
- }
1184
-
1185
- /* --- Admin Badge --- */
1186
-
1187
- .admin-badge {
1188
- display: inline-block;
1189
- padding: 2px 8px;
1190
- border-radius: 4px;
1191
- font-size: 0.6875rem;
1192
- font-weight: 700;
1193
- text-transform: uppercase;
1194
- letter-spacing: 0.04em;
1195
- background: rgba(239, 68, 68, 0.12);
1196
- color: #f87171;
1197
- }
1198
-
1199
- /* --- Admin Select & Danger Button --- */
1200
-
1201
- .admin-select {
1202
- padding: 4px 8px;
1203
- border: 1px solid var(--color-border);
1204
- border-radius: var(--radius-sm);
1205
- background: var(--color-bg-dark);
1206
- color: var(--color-text-dark);
1207
- font-size: 0.8125rem;
1208
- cursor: pointer;
1209
- outline: none;
1210
- }
1211
-
1212
- .admin-select:focus {
1213
- border-color: var(--color-primary);
1214
- }
1215
-
1216
- .btn-danger {
1217
- background: rgba(239, 68, 68, 0.1);
1218
- color: #f87171;
1219
- border-color: rgba(239, 68, 68, 0.3);
1220
- }
1221
-
1222
- .btn-danger:hover {
1223
- background: rgba(239, 68, 68, 0.2);
1224
- border-color: rgba(239, 68, 68, 0.5);
1225
- }
1226
-
1227
- .inline-action {
1228
- display: inline-flex;
1229
- }
1230
-
1231
- /* --- Status dot in table --- */
1232
-
1233
- .status-dot {
1234
- font-weight: 600;
1235
- font-size: 0.8125rem;
1236
- }
1237
-
1238
- /* --- Admin links (row + back) --- */
1239
-
1240
- .admin-row-link {
1241
- color: var(--color-text-dark);
1242
- text-decoration: none;
1243
- font-weight: 500;
1244
- }
1245
-
1246
- .admin-row-link:hover {
1247
- color: var(--color-primary-hover);
1248
- text-decoration: underline;
1249
- }
1250
-
1251
- .admin-back-link {
1252
- font-size: 0.8125rem;
1253
- color: var(--color-text-muted);
1254
- text-decoration: none;
1255
- }
1256
-
1257
- .admin-back-link:hover {
1258
- color: #fff;
1259
- }
1260
-
1261
- /* --- Health panel --- */
1262
-
1263
- .health-panel,
1264
- .chart-panel,
1265
- .credit-panel {
1266
- background: var(--color-surface);
1267
- border: 1px solid var(--color-border);
1268
- border-radius: var(--radius-md);
1269
- padding: 24px;
1270
- margin-bottom: 24px;
1271
- }
1272
-
1273
- .health-panel h2,
1274
- .chart-panel h2,
1275
- .credit-panel h2 {
1276
- font-size: 1.125rem;
1277
- font-weight: 600;
1278
- color: #fff;
1279
- margin-bottom: 16px;
1280
- }
1281
-
1282
- .health-grid {
1283
- display: grid;
1284
- grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
1285
- gap: 12px;
1286
- }
1287
-
1288
- .health-item {
1289
- display: flex;
1290
- align-items: center;
1291
- gap: 12px;
1292
- padding: 12px;
1293
- border: 1px solid var(--color-border-subtle);
1294
- border-radius: var(--radius-sm);
1295
- }
1296
-
1297
- .health-badge {
1298
- flex-shrink: 0;
1299
- font-size: 0.75rem;
1300
- font-weight: 700;
1301
- padding: 4px 8px;
1302
- border-radius: var(--radius-sm);
1303
- text-transform: uppercase;
1304
- letter-spacing: 0.03em;
1305
- }
1306
-
1307
- .health-badge--ok {
1308
- background: rgba(16, 185, 129, 0.15);
1309
- color: #34d399;
1310
- }
1311
-
1312
- .health-badge--bad {
1313
- background: rgba(239, 68, 68, 0.15);
1314
- color: #f87171;
1315
- }
1316
-
1317
- .health-badge--neutral {
1318
- background: var(--color-surface-hover);
1319
- color: var(--color-text-dark);
1320
- text-transform: none;
1321
- }
1322
-
1323
- .health-meta {
1324
- display: flex;
1325
- flex-direction: column;
1326
- min-width: 0;
1327
- }
1328
-
1329
- .health-name {
1330
- font-size: 0.875rem;
1331
- color: #fff;
1332
- }
1333
-
1334
- .health-sub {
1335
- font-size: 0.75rem;
1336
- color: var(--color-text-muted);
1337
- }
1338
-
1339
- .health-alerts {
1340
- margin-top: 16px;
1341
- padding: 12px 16px;
1342
- list-style: disc inside;
1343
- background: rgba(239, 68, 68, 0.08);
1344
- border: 1px solid rgba(239, 68, 68, 0.25);
1345
- border-radius: var(--radius-sm);
1346
- color: #f87171;
1347
- font-size: 0.8125rem;
1348
- }
1349
-
1350
- /* --- Chart panels --- */
1351
-
1352
- .chart-panel-header {
1353
- display: flex;
1354
- align-items: baseline;
1355
- gap: 12px;
1356
- margin-bottom: 16px;
1357
- }
1358
-
1359
- .chart-panel-header h2 {
1360
- margin-bottom: 0;
1361
- }
1362
-
1363
- .chart-panel-meta {
1364
- font-size: 0.8125rem;
1365
- color: var(--color-text-muted);
1366
- }
1367
-
1368
- .failure-rate-grid {
1369
- display: grid;
1370
- grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
1371
- gap: 16px;
1372
- margin-bottom: 20px;
1373
- }
1374
-
1375
- .chart-grid {
1376
- display: grid;
1377
- grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
1378
- gap: 20px;
1379
- }
1380
-
1381
- .chart-box {
1382
- display: flex;
1383
- flex-direction: column;
1384
- gap: 8px;
1385
- padding: 16px;
1386
- border: 1px solid var(--color-border-subtle);
1387
- border-radius: var(--radius-sm);
1388
- background: var(--color-bg-dark);
1389
- }
1390
-
1391
- .chart-box-label {
1392
- font-size: 0.8125rem;
1393
- color: var(--color-text-muted);
1394
- text-transform: uppercase;
1395
- letter-spacing: 0.04em;
1396
- }
1397
-
1398
- .chart {
1399
- width: 100%;
1400
- height: auto;
1401
- display: block;
1402
- overflow: visible;
1403
- }
1404
-
1405
- .chart--sparkline {
1406
- height: 48px;
1407
- }
1408
-
1409
- .chart--bars {
1410
- height: 80px;
1411
- }
1412
-
1413
- .chart--dual {
1414
- height: 140px;
1415
- }
1416
-
1417
- .chart-legend {
1418
- display: flex;
1419
- gap: 16px;
1420
- flex-wrap: wrap;
1421
- }
1422
-
1423
- .chart-legend-item {
1424
- display: inline-flex;
1425
- align-items: center;
1426
- gap: 6px;
1427
- font-size: 0.75rem;
1428
- color: var(--color-text-muted);
1429
- }
1430
-
1431
- .chart-swatch {
1432
- width: 12px;
1433
- height: 3px;
1434
- border-radius: 2px;
1435
- display: inline-block;
1436
- }
1437
-
1438
- .chart-swatch--a {
1439
- background: var(--color-primary-hover);
1440
- }
1441
-
1442
- .chart-swatch--b {
1443
- background: var(--color-error);
1444
- }
1445
-
1446
- .chart-empty {
1447
- padding: 24px;
1448
- text-align: center;
1449
- color: var(--color-text-muted);
1450
- font-size: 0.875rem;
1451
- border: 1px dashed var(--color-border);
1452
- border-radius: var(--radius-sm);
1453
- }
1454
-
1455
- .chart-empty code {
1456
- font-family: var(--font-mono, monospace);
1457
- color: var(--color-text-dark);
1458
- }
1459
-
1460
- /* --- Credit form --- */
1461
-
1462
- .credit-form {
1463
- margin-top: 16px;
1464
- }
1465
-
1466
- .credit-form-row {
1467
- display: flex;
1468
- align-items: flex-end;
1469
- gap: 16px;
1470
- flex-wrap: wrap;
1471
- }
1472
-
1473
- .credit-form-field {
1474
- display: flex;
1475
- flex-direction: column;
1476
- gap: 6px;
1477
- font-size: 0.8125rem;
1478
- color: var(--color-text-muted);
1479
- }
1480
-
1481
- .credit-form-field .search-input {
1482
- width: 200px;
1483
- margin-bottom: 0;
1484
- }
1485
-
1486
- .credit-form-actions {
1487
- display: flex;
1488
- gap: 8px;
1489
- }
1490
-
1491
- .ledger-heading {
1492
- font-size: 1.125rem;
1493
- font-weight: 600;
1494
- color: #fff;
1495
- margin-bottom: 12px;
1496
- }
1497
-
1498
- /* --- Telemetry --- */
1499
-
1500
- .telemetry-count {
1501
- font-weight: 700;
1502
- color: #fff;
1503
- }
1504
-
1505
- .telemetry-error {
1506
- max-width: 360px;
1507
- font-size: 0.8125rem;
1508
- color: var(--color-text-muted);
1509
- word-break: break-word;
1510
- }
1511
-
1512
- /* =========================================================================
1513
- Dashboard
1514
- ========================================================================= */
1515
-
1516
- /* --- Dashboard Shell (sidebar + main) --- */
1517
-
1518
- .dashboard-body {
1519
- margin: 0;
1520
- display: flex;
1521
- min-height: 100vh;
1522
- }
1523
-
1524
- .sidebar {
1525
- width: 240px;
1526
- flex-shrink: 0;
1527
- background: var(--color-surface);
1528
- border-right: 1px solid var(--color-border);
1529
- display: flex;
1530
- flex-direction: column;
1531
- position: fixed;
1532
- top: 0;
1533
- left: 0;
1534
- bottom: 0;
1535
- z-index: 50;
1536
- }
1537
-
1538
- .sidebar-logo {
1539
- display: block;
1540
- padding: 20px 20px 16px;
1541
- font-size: 1.1rem;
1542
- font-weight: 700;
1543
- color: #fff;
1544
- border-bottom: 1px solid var(--color-border);
1545
- }
1546
-
1547
- .sidebar-logo:hover {
1548
- color: var(--color-primary-hover);
1549
- }
1550
-
1551
- .sidebar-nav {
1552
- flex: 1;
1553
- padding: 12px 8px;
1554
- display: flex;
1555
- flex-direction: column;
1556
- gap: 2px;
1557
- }
1558
-
1559
- .sidebar-link {
1560
- display: block;
1561
- padding: 8px 12px;
1562
- border-radius: var(--radius-sm);
1563
- font-size: 0.875rem;
1564
- color: var(--color-text-muted);
1565
- transition:
1566
- background 0.12s,
1567
- color 0.12s;
1568
- }
1569
-
1570
- .sidebar-link:hover {
1571
- background: var(--color-surface-hover);
1572
- color: #fff;
1573
- }
1574
-
1575
- .sidebar-link.active {
1576
- background: var(--color-primary-subtle);
1577
- color: var(--color-primary-hover);
1578
- }
1579
-
1580
- .sidebar-divider {
1581
- border: none;
1582
- border-top: 1px solid var(--color-border);
1583
- margin: 8px 12px;
1584
- }
1585
-
1586
- .sidebar-footer {
1587
- padding: 12px 16px 16px;
1588
- border-top: 1px solid var(--color-border);
1589
- }
1590
-
1591
- .sidebar-email {
1592
- display: block;
1593
- font-size: 0.8125rem;
1594
- color: var(--color-text-muted);
1595
- overflow: hidden;
1596
- text-overflow: ellipsis;
1597
- white-space: nowrap;
1598
- margin-bottom: 6px;
1599
- }
1600
-
1601
- .sidebar-logout {
1602
- background: none;
1603
- border: none;
1604
- color: var(--color-text-muted);
1605
- font-size: 0.75rem;
1606
- cursor: pointer;
1607
- padding: 0;
1608
- transition: color 0.12s;
1609
- }
1610
-
1611
- .sidebar-logout:hover {
1612
- color: var(--color-error);
1613
- }
1614
-
1615
- .dashboard-main {
1616
- flex: 1;
1617
- margin-left: 240px;
1618
- padding: 32px 40px;
1619
- min-width: 0;
1620
- }
1621
-
1622
- /* --- Dashboard Header --- */
1623
-
1624
- .dashboard-header {
1625
- display: flex;
1626
- align-items: center;
1627
- justify-content: space-between;
1628
- gap: 16px;
1629
- margin-bottom: 28px;
1630
- flex-wrap: wrap;
1631
- }
1632
-
1633
- .dashboard-header h1 {
1634
- font-size: 1.5rem;
1635
- font-weight: 700;
1636
- color: #fff;
1637
- letter-spacing: -0.02em;
1638
- margin: 0;
1639
- }
1640
-
1641
- .dashboard-header-left {
1642
- display: flex;
1643
- align-items: center;
1644
- gap: 8px;
1645
- }
1646
-
1647
- .dashboard-header-actions {
1648
- display: flex;
1649
- align-items: center;
1650
- gap: 8px;
1651
- }
1652
-
1653
- .breadcrumb-link {
1654
- font-size: 0.875rem;
1655
- color: var(--color-text-muted);
1656
- transition: color 0.12s;
1657
- }
1658
-
1659
- .breadcrumb-link:hover {
1660
- color: var(--color-primary-hover);
1661
- }
1662
-
1663
- .breadcrumb-sep {
1664
- color: var(--color-text-muted);
1665
- font-size: 0.875rem;
1666
- }
1667
-
1668
- /* --- Server Cards --- */
1669
-
1670
- .server-grid {
1671
- display: grid;
1672
- grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
1673
- gap: 16px;
1674
- }
1675
-
1676
- .server-card {
1677
- background: var(--color-surface);
1678
- border: 1px solid var(--color-border);
1679
- border-radius: var(--radius-md);
1680
- padding: 20px;
1681
- transition:
1682
- border-color 0.15s,
1683
- transform 0.15s;
1684
- }
1685
-
1686
- .server-card:hover {
1687
- border-color: #3f3f46;
1688
- transform: translateY(-1px);
1689
- }
1690
-
1691
- .server-card-header {
1692
- display: flex;
1693
- align-items: center;
1694
- justify-content: space-between;
1695
- gap: 12px;
1696
- margin-bottom: 12px;
1697
- }
1698
-
1699
- .server-card-name {
1700
- font-size: 1rem;
1701
- font-weight: 600;
1702
- color: #fff;
1703
- overflow: hidden;
1704
- text-overflow: ellipsis;
1705
- white-space: nowrap;
1706
- transition: color 0.12s;
1707
- }
1708
-
1709
- .server-card-name:hover {
1710
- color: var(--color-primary-hover);
1711
- }
1712
-
1713
- .server-card-meta {
1714
- display: flex;
1715
- gap: 16px;
1716
- font-size: 0.8125rem;
1717
- color: var(--color-text-muted);
1718
- margin-bottom: 16px;
1719
- }
1720
-
1721
- .server-card-actions {
1722
- display: flex;
1723
- align-items: center;
1724
- gap: 8px;
1725
- }
1726
-
1727
- .server-card-actions form {
1728
- display: inline;
1729
- }
1730
-
1731
- /* --- Status Badge --- */
1732
-
1733
- .status-badge {
1734
- display: inline-flex;
1735
- align-items: center;
1736
- padding: 2px 10px;
1737
- border-radius: 12px;
1738
- font-size: 0.75rem;
1739
- font-weight: 600;
1740
- text-transform: capitalize;
1741
- letter-spacing: 0.02em;
1742
- }
1743
-
1744
- .status-running {
1745
- background: rgba(16, 185, 129, 0.12);
1746
- color: #34d399;
1747
- }
1748
-
1749
- .status-stopped {
1750
- background: rgba(113, 113, 122, 0.15);
1751
- color: #a1a1aa;
1752
- }
1753
-
1754
- .status-error {
1755
- background: rgba(239, 68, 68, 0.12);
1756
- color: #f87171;
1757
- }
1758
-
1759
- .status-building {
1760
- background: rgba(245, 158, 11, 0.12);
1761
- color: #fbbf24;
1762
- }
1763
-
1764
- /* --- Empty State --- */
1765
-
1766
- .empty-state {
1767
- text-align: center;
1768
- padding: 64px 24px;
1769
- color: var(--color-text-muted);
1770
- }
1771
-
1772
- .empty-state-icon {
1773
- margin-bottom: 16px;
1774
- color: var(--color-text-muted);
1775
- opacity: 0.5;
1776
- }
1777
-
1778
- .empty-state-icon svg {
1779
- display: inline-block;
1780
- }
1781
-
1782
- .empty-state h2 {
1783
- font-size: 1.25rem;
1784
- font-weight: 600;
1785
- color: #fff;
1786
- margin-bottom: 8px;
1787
- }
1788
-
1789
- .empty-state p {
1790
- font-size: 0.9375rem;
1791
- margin-bottom: 24px;
1792
- }
1793
-
1794
- /* --- Detail Page --- */
1795
-
1796
- .detail-grid {
1797
- display: grid;
1798
- grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1799
- gap: 16px;
1800
- margin-bottom: 32px;
1801
- }
1802
-
1803
- .detail-card {
1804
- background: var(--color-surface);
1805
- border: 1px solid var(--color-border);
1806
- border-radius: var(--radius-md);
1807
- padding: 20px;
1808
- }
1809
-
1810
- .detail-card h3 {
1811
- font-size: 0.75rem;
1812
- font-weight: 600;
1813
- text-transform: uppercase;
1814
- letter-spacing: 0.05em;
1815
- color: var(--color-text-muted);
1816
- margin-bottom: 8px;
1817
- }
1818
-
1819
- .detail-value {
1820
- font-size: 1.125rem;
1821
- font-weight: 600;
1822
- color: #fff;
1823
- }
1824
-
1825
- .detail-value-lg {
1826
- font-size: 2rem;
1827
- font-weight: 800;
1828
- letter-spacing: -0.03em;
1829
- }
1830
-
1831
- .detail-section {
1832
- margin-bottom: 32px;
1833
- }
1834
-
1835
- .detail-section h2 {
1836
- font-size: 1.125rem;
1837
- font-weight: 600;
1838
- color: #fff;
1839
- margin-bottom: 16px;
1840
- text-align: left;
1841
- }
1842
-
1843
- /* --- Endpoint --- */
1844
-
1845
- .endpoint-row {
1846
- display: flex;
1847
- align-items: center;
1848
- gap: 12px;
1849
- background: var(--color-surface);
1850
- border: 1px solid var(--color-border);
1851
- border-radius: var(--radius-sm);
1852
- padding: 12px 16px;
1853
- }
1854
-
1855
- .endpoint-url {
1856
- flex: 1;
1857
- font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', Menlo, monospace;
1858
- font-size: 0.875rem;
1859
- color: var(--color-primary-hover);
1860
- overflow: hidden;
1861
- text-overflow: ellipsis;
1862
- white-space: nowrap;
1863
- }
1864
-
1865
- .token-display {
1866
- font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', Menlo, monospace;
1867
- font-size: 0.8125rem;
1868
- background: rgba(0, 0, 0, 0.3);
1869
- padding: 4px 8px;
1870
- border-radius: 4px;
1871
- word-break: break-all;
1872
- }
1873
-
1874
- /* --- Config Tabs --- */
1875
-
1876
- .config-tabs {
1877
- display: flex;
1878
- gap: 0;
1879
- border-bottom: 1px solid var(--color-border);
1880
- margin-bottom: 0;
1881
- }
1882
-
1883
- .config-tab {
1884
- padding: 10px 20px;
1885
- background: none;
1886
- border: none;
1887
- border-bottom: 2px solid transparent;
1888
- color: var(--color-text-muted);
1889
- font-size: 0.875rem;
1890
- font-weight: 500;
1891
- cursor: pointer;
1892
- transition:
1893
- color 0.12s,
1894
- border-color 0.12s;
1895
- }
1896
-
1897
- .config-tab:hover {
1898
- color: #fff;
1899
- }
1900
-
1901
- .config-tab.active {
1902
- color: var(--color-primary-hover);
1903
- border-bottom-color: var(--color-primary);
1904
- }
1905
-
1906
- .config-content {
1907
- position: relative;
1908
- background: #0d0d14;
1909
- border: 1px solid var(--color-border);
1910
- border-top: none;
1911
- border-radius: 0 0 var(--radius-md) var(--radius-md);
1912
- padding: 20px;
1913
- }
1914
-
1915
- .config-content pre {
1916
- margin: 0;
1917
- font-size: 0.8125rem;
1918
- line-height: 1.7;
1919
- overflow-x: auto;
1920
- }
1921
-
1922
- .config-content code {
1923
- font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', Menlo, monospace;
1924
- color: #d4d4d8;
1925
- }
1926
-
1927
- .config-copy {
1928
- position: absolute;
1929
- top: 12px;
1930
- right: 12px;
1931
- }
1932
-
1933
- /* --- Log Viewer --- */
1934
-
1935
- .log-viewer-wrapper {
1936
- margin-top: 8px;
1937
- }
1938
-
1939
- .log-viewer {
1940
- background: #0d0d14;
1941
- border: 1px solid var(--color-border);
1942
- border-radius: var(--radius-md);
1943
- padding: 16px 20px;
1944
- max-height: 600px;
1945
- overflow-y: auto;
1946
- font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', Menlo, monospace;
1947
- font-size: 0.8125rem;
1948
- line-height: 1.7;
1949
- color: #d4d4d8;
1950
- }
1951
-
1952
- .log-viewer div {
1953
- padding: 1px 0;
1954
- }
1955
-
1956
- .log-connecting {
1957
- color: var(--color-text-muted);
1958
- font-style: italic;
1959
- }
1960
-
1961
- /* --- Metrics --- */
1962
-
1963
- .metrics-table {
1964
- width: 100%;
1965
- border-collapse: collapse;
1966
- font-size: 0.875rem;
1967
- background: var(--color-surface);
1968
- border: 1px solid var(--color-border);
1969
- border-radius: var(--radius-md);
1970
- overflow: hidden;
1971
- margin-top: 16px;
1972
- }
1973
-
1974
- .metrics-table thead th {
1975
- text-align: left;
1976
- font-size: 0.75rem;
1977
- font-weight: 600;
1978
- text-transform: uppercase;
1979
- letter-spacing: 0.05em;
1980
- color: var(--color-text-muted);
1981
- padding: 12px 16px;
1982
- border-bottom: 1px solid var(--color-border);
1983
- }
1984
-
1985
- .metrics-table tbody td {
1986
- padding: 10px 16px;
1987
- border-bottom: 1px solid var(--color-border-subtle);
1988
- color: var(--color-text-dark);
1989
- }
1990
-
1991
- .metrics-table tbody tr:last-child td {
1992
- border-bottom: none;
1993
- }
1994
-
1995
- /* --- Bar Chart --- */
1996
-
1997
- .bar-chart {
1998
- display: flex;
1999
- flex-direction: column;
2000
- gap: 8px;
2001
- }
2002
-
2003
- .bar-chart-row {
2004
- display: flex;
2005
- align-items: center;
2006
- gap: 12px;
2007
- }
2008
-
2009
- .bar-chart-label {
2010
- flex: 0 0 140px;
2011
- font-size: 0.8125rem;
2012
- color: var(--color-text-dark);
2013
- overflow: hidden;
2014
- text-overflow: ellipsis;
2015
- white-space: nowrap;
2016
- font-family: 'SF Mono', 'Fira Code', Menlo, monospace;
2017
- }
2018
-
2019
- .bar-chart-track {
2020
- flex: 1;
2021
- height: 20px;
2022
- background: var(--color-surface);
2023
- border-radius: 4px;
2024
- overflow: hidden;
2025
- }
2026
-
2027
- .bar {
2028
- height: 100%;
2029
- background: var(--color-primary);
2030
- border-radius: 4px;
2031
- min-width: 4px;
2032
- transition: width 0.3s ease;
2033
- }
2034
-
2035
- .bar-chart-value {
2036
- flex: 0 0 48px;
2037
- text-align: right;
2038
- font-size: 0.8125rem;
2039
- font-weight: 600;
2040
- color: #fff;
2041
- }
2042
-
2043
- /* --- Create Form --- */
2044
-
2045
- .create-form-wrapper {
2046
- max-width: 560px;
2047
- }
2048
-
2049
- .create-form .form-group {
2050
- margin-bottom: 1.25rem;
2051
- }
2052
-
2053
- .create-form .form-group label {
2054
- display: block;
2055
- font-size: 0.875rem;
2056
- font-weight: 500;
2057
- margin-bottom: 0.4rem;
2058
- color: var(--color-text-dark);
2059
- }
2060
-
2061
- .create-form .form-group input[type='text'] {
2062
- width: 100%;
2063
- padding: 0.6rem 0.75rem;
2064
- border: 1px solid var(--color-border);
2065
- border-radius: var(--radius-sm);
2066
- background: var(--color-bg-dark);
2067
- color: var(--color-text-dark);
2068
- font-size: 0.9375rem;
2069
- outline: none;
2070
- transition: border-color 0.15s;
2071
- }
2072
-
2073
- .create-form .form-group input[type='text']:focus {
2074
- border-color: var(--color-primary);
2075
- }
2076
-
2077
- .form-hint {
2078
- font-size: 0.8rem;
2079
- color: var(--color-text-muted);
2080
- margin-top: 0.3rem;
2081
- }
2082
-
2083
- .form-hint-inline {
2084
- font-weight: 400;
2085
- color: var(--color-text-muted);
2086
- font-size: 0.85em;
2087
- }
2088
-
2089
- /* --- Dropzone --- */
2090
-
2091
- .dropzone {
2092
- position: relative;
2093
- border: 2px dashed var(--color-border);
2094
- border-radius: var(--radius-md);
2095
- padding: 32px 24px;
2096
- text-align: center;
2097
- transition:
2098
- border-color 0.15s,
2099
- background 0.15s;
2100
- cursor: pointer;
2101
- }
2102
-
2103
- .dropzone:hover,
2104
- .dropzone-active {
2105
- border-color: var(--color-primary);
2106
- background: var(--color-primary-subtle);
2107
- }
2108
-
2109
- .dropzone-input {
2110
- position: absolute;
2111
- inset: 0;
2112
- width: 100%;
2113
- height: 100%;
2114
- opacity: 0;
2115
- cursor: pointer;
2116
- }
2117
-
2118
- .dropzone-content {
2119
- pointer-events: none;
2120
- }
2121
-
2122
- .dropzone-content svg {
2123
- display: inline-block;
2124
- margin-bottom: 8px;
2125
- color: var(--color-text-muted);
2126
- }
2127
-
2128
- .dropzone-content p {
2129
- font-size: 0.875rem;
2130
- color: var(--color-text-muted);
2131
- margin-bottom: 4px;
2132
- }
2133
-
2134
- .dropzone-link {
2135
- color: var(--color-primary-hover);
2136
- font-weight: 500;
2137
- }
2138
-
2139
- .dropzone-selected {
2140
- display: flex;
2141
- align-items: center;
2142
- gap: 8px;
2143
- justify-content: center;
2144
- color: var(--color-text-dark);
2145
- font-size: 0.875rem;
2146
- pointer-events: none;
2147
- }
2148
-
2149
- .dropzone-selected svg {
2150
- color: var(--color-primary-hover);
2151
- }
2152
-
2153
- .dropzone-clear {
2154
- pointer-events: all;
2155
- background: none;
2156
- border: none;
2157
- color: var(--color-text-muted);
2158
- font-size: 1.125rem;
2159
- cursor: pointer;
2160
- padding: 0 4px;
2161
- line-height: 1;
2162
- }
2163
-
2164
- .dropzone-clear:hover {
2165
- color: var(--color-error);
2166
- }
2167
-
2168
- /* --- Flash Messages --- */
2169
-
2170
- .flash-message {
2171
- padding: 12px 16px;
2172
- border-radius: var(--radius-sm);
2173
- font-size: 0.875rem;
2174
- margin-bottom: 20px;
2175
- }
2176
-
2177
- .flash-success {
2178
- background: rgba(16, 185, 129, 0.1);
2179
- border: 1px solid rgba(16, 185, 129, 0.3);
2180
- color: #6ee7b7;
2181
- }
2182
-
2183
- .flash-error {
2184
- background: rgba(239, 68, 68, 0.1);
2185
- border: 1px solid rgba(239, 68, 68, 0.3);
2186
- color: #fca5a5;
2187
- }
2188
-
2189
- /* --- Focus States --- */
2190
-
2191
- :focus-visible {
2192
- outline: 2px solid var(--color-primary);
2193
- outline-offset: 2px;
2194
- }
2195
-
2196
- /* --- Skip to Content --- */
2197
-
2198
- .skip-to-content {
2199
- position: absolute;
2200
- left: -9999px;
2201
- top: auto;
2202
- width: 1px;
2203
- height: 1px;
2204
- overflow: hidden;
2205
- }
2206
-
2207
- .skip-to-content:focus {
2208
- position: static;
2209
- width: auto;
2210
- height: auto;
2211
- padding: 8px 16px;
2212
- background: var(--color-primary);
2213
- color: white;
2214
- z-index: 1000;
2215
- display: block;
2216
- text-align: center;
2217
- }
2218
-
2219
- /* --- Error Pages --- */
2220
-
2221
- .error-page {
2222
- text-align: center;
2223
- padding: 120px 24px 80px;
2224
- max-width: 520px;
2225
- margin: 0 auto;
2226
- }
2227
-
2228
- .error-page h1 {
2229
- font-size: clamp(4rem, 10vw, 8rem);
2230
- font-weight: 800;
2231
- letter-spacing: -0.04em;
2232
- color: var(--color-primary);
2233
- line-height: 1;
2234
- margin-bottom: 8px;
2235
- }
2236
-
2237
- .error-page h2 {
2238
- font-size: 1.5rem;
2239
- font-weight: 700;
2240
- color: #fff;
2241
- margin-bottom: 12px;
2242
- }
2243
-
2244
- .error-page p {
2245
- font-size: 1rem;
2246
- color: var(--color-text-muted);
2247
- line-height: 1.6;
2248
- margin-bottom: 32px;
2249
- }
2250
-
2251
- .error-actions {
2252
- display: flex;
2253
- gap: 12px;
2254
- justify-content: center;
2255
- flex-wrap: wrap;
2256
- }
2257
-
2258
- /* --- Alpine.js cloak --- */
2259
-
2260
- [x-cloak] {
2261
- display: none !important;
2262
- }
2263
-
2264
- /* =========================================================================
2265
- Responsive
2266
- ========================================================================= */
2267
-
2268
- @media (max-width: 1024px) {
2269
- .bento-grid {
2270
- grid-template-columns: repeat(2, 1fr);
2271
- }
2272
-
2273
- .pricing-grid {
2274
- grid-template-columns: repeat(2, 1fr);
2275
- }
2276
-
2277
- .admin-stats {
2278
- grid-template-columns: repeat(2, 1fr);
2279
- }
2280
-
2281
- .server-grid {
2282
- grid-template-columns: 1fr;
2283
- }
2284
-
2285
- .detail-grid {
2286
- grid-template-columns: repeat(2, 1fr);
2287
- }
2288
- }
2289
-
2290
- @media (max-width: 768px) {
2291
- :root {
2292
- --section-padding: 64px;
2293
- }
2294
-
2295
- .sidebar {
2296
- position: static;
2297
- width: 100%;
2298
- border-right: none;
2299
- border-bottom: 1px solid var(--color-border);
2300
- }
2301
-
2302
- .dashboard-body {
2303
- flex-direction: column;
2304
- }
2305
-
2306
- .dashboard-main {
2307
- margin-left: 0;
2308
- padding: 24px 20px;
2309
- }
2310
-
2311
- .sidebar-nav {
2312
- flex-direction: row;
2313
- flex-wrap: wrap;
2314
- gap: 4px;
2315
- padding: 8px;
2316
- }
2317
-
2318
- .sidebar-footer {
2319
- display: flex;
2320
- align-items: center;
2321
- gap: 12px;
2322
- padding: 8px 12px;
2323
- }
2324
-
2325
- .sidebar-divider {
2326
- display: none;
2327
- }
2328
-
2329
- .detail-grid {
2330
- grid-template-columns: 1fr;
2331
- }
2332
-
2333
- .bar-chart-label {
2334
- flex: 0 0 100px;
2335
- }
2336
-
2337
- .admin-sidebar {
2338
- width: 200px;
2339
- }
2340
-
2341
- .admin-main {
2342
- margin-left: 200px;
2343
- padding: 24px 20px;
2344
- }
2345
-
2346
- .admin-stats {
2347
- grid-template-columns: 1fr;
2348
- }
2349
-
2350
- .admin-page-header h1 {
2351
- font-size: 1.25rem;
2352
- }
2353
-
2354
- .stat-card-value {
2355
- font-size: 1.5rem;
2356
- }
2357
-
2358
- .nav-links {
2359
- gap: 16px;
2360
- }
2361
-
2362
- .hero {
2363
- min-height: auto;
2364
- padding: 48px 20px 40px;
2365
- }
2366
-
2367
- .hero h1 {
2368
- font-size: 1.75rem;
2369
- }
2370
-
2371
- .hero-ctas {
2372
- margin-bottom: 36px;
2373
- }
2374
-
2375
- .terminal-body {
2376
- padding: 16px;
2377
- }
2378
-
2379
- .terminal-body pre {
2380
- font-size: 0.6875rem;
2381
- }
2382
-
2383
- .steps {
2384
- grid-template-columns: 1fr;
2385
- }
2386
-
2387
- .bento-grid {
2388
- grid-template-columns: 1fr;
2389
- padding: 0;
2390
- }
2391
-
2392
- .pricing-grid {
2393
- grid-template-columns: 1fr;
2394
- max-width: 380px;
2395
- margin-left: auto;
2396
- margin-right: auto;
2397
- padding: 0;
2398
- }
2399
-
2400
- .comparison-table {
2401
- font-size: 0.8125rem;
2402
- }
2403
-
2404
- .comparison-table thead th,
2405
- .comparison-table tbody td {
2406
- padding: 12px 14px;
2407
- }
2408
-
2409
- .footer-inner {
2410
- grid-template-columns: 1fr;
2411
- text-align: center;
2412
- }
2413
-
2414
- .social-proof-inner {
2415
- gap: 32px;
2416
- }
2417
-
2418
- .social-proof-divider {
2419
- display: none;
2420
- }
2421
-
2422
- .social-proof-number {
2423
- font-size: 1.5rem;
2424
- }
2425
- }
2426
-
2427
- @media (max-width: 480px) {
2428
- .nav-links a:not(.btn) {
2429
- display: none;
2430
- }
2431
-
2432
- .hero-sub {
2433
- font-size: 1rem;
2434
- }
2435
-
2436
- .terminal {
2437
- border-radius: var(--radius-md);
2438
- }
2439
-
2440
- .pricing-value {
2441
- font-size: 2.5rem;
2442
- }
2443
-
2444
- .admin-sidebar {
2445
- position: static;
2446
- width: 100%;
2447
- border-right: none;
2448
- border-bottom: 1px solid var(--color-border);
2449
- }
2450
-
2451
- .admin-shell {
2452
- flex-direction: column;
2453
- }
2454
-
2455
- .admin-main {
2456
- margin-left: 0;
2457
- padding: 16px;
2458
- }
2459
-
2460
- .admin-sidebar-nav {
2461
- flex-direction: row;
2462
- flex-wrap: wrap;
2463
- gap: 4px;
2464
- padding: 8px;
2465
- }
2466
-
2467
- .admin-nav-link--back {
2468
- margin-top: 0;
2469
- }
2470
-
2471
- .admin-sidebar-footer {
2472
- display: flex;
2473
- align-items: center;
2474
- gap: 12px;
2475
- padding: 8px 12px;
2476
- }
2477
-
2478
- .admin-sidebar-user {
2479
- margin-top: 0;
2480
- padding: 0;
2481
- display: flex;
2482
- align-items: center;
2483
- gap: 8px;
2484
- }
2485
-
2486
- .admin-sidebar-email {
2487
- margin-bottom: 0;
2488
- }
2489
- }
2490
-
2491
- /* ===========================================================================
2492
- Documentation pages (/docs)
2493
- =========================================================================== */
2494
-
2495
- .docs-layout {
2496
- display: flex;
2497
- gap: 40px;
2498
- align-items: flex-start;
2499
- max-width: var(--max-width);
2500
- margin: 0 auto;
2501
- padding: 40px 24px 80px;
2502
- background: #ffffff;
2503
- color: var(--color-text-light);
2504
- min-height: calc(100vh - var(--nav-height));
2505
- }
2506
-
2507
- .docs-sidebar {
2508
- position: sticky;
2509
- top: calc(var(--nav-height) + 24px);
2510
- flex: 0 0 232px;
2511
- width: 232px;
2512
- display: flex;
2513
- flex-direction: column;
2514
- gap: 4px;
2515
- font-size: 0.92rem;
2516
- }
2517
-
2518
- .docs-sidebar-home {
2519
- font-weight: 600;
2520
- color: var(--color-text-light);
2521
- text-decoration: none;
2522
- padding: 6px 10px;
2523
- border-radius: var(--radius-sm);
2524
- }
2525
-
2526
- .docs-sidebar-group {
2527
- margin-top: 18px;
2528
- display: flex;
2529
- flex-direction: column;
2530
- gap: 2px;
2531
- }
2532
-
2533
- .docs-sidebar-cat {
2534
- text-transform: uppercase;
2535
- letter-spacing: 0.06em;
2536
- font-size: 0.72rem;
2537
- font-weight: 700;
2538
- color: var(--color-text-muted);
2539
- padding: 4px 10px;
2540
- }
2541
-
2542
- .docs-sidebar-link {
2543
- color: #3f3f52;
2544
- text-decoration: none;
2545
- padding: 6px 10px;
2546
- border-radius: var(--radius-sm);
2547
- border-left: 2px solid transparent;
2548
- }
2549
-
2550
- .docs-sidebar-link:hover,
2551
- .docs-sidebar-home:hover {
2552
- background: var(--color-primary-subtle);
2553
- color: var(--color-primary);
2554
- }
2555
-
2556
- .docs-sidebar-link.active,
2557
- .docs-sidebar-home.active {
2558
- background: var(--color-primary-subtle);
2559
- color: var(--color-primary);
2560
- border-left-color: var(--color-primary);
2561
- font-weight: 600;
2562
- }
2563
-
2564
- .docs-content {
2565
- flex: 1 1 auto;
2566
- min-width: 0;
2567
- max-width: 820px;
2568
- line-height: 1.7;
2569
- }
2570
-
2571
- /* Prose */
2572
- .prose h1 { font-size: 2rem; margin: 0 0 16px; line-height: 1.2; }
2573
- .prose h2 { font-size: 1.5rem; margin: 40px 0 14px; padding-top: 8px; border-top: 1px solid #ececf1; }
2574
- .prose h3 { font-size: 1.2rem; margin: 28px 0 10px; }
2575
- .prose h4 { font-size: 1.02rem; margin: 22px 0 8px; }
2576
- .prose p { margin: 0 0 16px; }
2577
- .prose ul, .prose ol { margin: 0 0 16px; padding-left: 24px; }
2578
- .prose li { margin: 4px 0; }
2579
- .prose li > ul, .prose li > ol { margin: 4px 0; }
2580
- .prose a { color: var(--color-primary); text-decoration: none; }
2581
- .prose a:hover { text-decoration: underline; }
2582
- .prose strong { font-weight: 700; }
2583
- .prose hr { border: none; border-top: 1px solid #ececf1; margin: 32px 0; }
2584
-
2585
- .prose code {
2586
- font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
2587
- font-size: 0.88em;
2588
- background: #f3f3f7;
2589
- color: #5b21b6;
2590
- padding: 2px 6px;
2591
- border-radius: 4px;
2592
- }
2593
-
2594
- .prose pre {
2595
- background: #14141c;
2596
- color: #e4e4e7;
2597
- padding: 16px 18px;
2598
- border-radius: var(--radius-md);
2599
- overflow-x: auto;
2600
- margin: 0 0 18px;
2601
- font-size: 0.86rem;
2602
- line-height: 1.55;
2603
- }
2604
-
2605
- .prose pre code {
2606
- background: none;
2607
- color: inherit;
2608
- padding: 0;
2609
- font-size: inherit;
2610
- }
2611
-
2612
- .prose blockquote {
2613
- margin: 0 0 16px;
2614
- padding: 8px 16px;
2615
- border-left: 3px solid var(--color-primary);
2616
- background: var(--color-primary-subtle);
2617
- border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
2618
- color: #3f3f52;
2619
- }
2620
-
2621
- .prose table {
2622
- width: 100%;
2623
- border-collapse: collapse;
2624
- margin: 0 0 20px;
2625
- font-size: 0.9rem;
2626
- display: block;
2627
- overflow-x: auto;
2628
- }
2629
-
2630
- .prose th, .prose td {
2631
- border: 1px solid #e4e4ea;
2632
- padding: 8px 12px;
2633
- text-align: left;
2634
- vertical-align: top;
2635
- }
2636
-
2637
- .prose thead th {
2638
- background: #f7f7fa;
2639
- font-weight: 700;
2640
- }
2641
-
2642
- /* Docs index cards */
2643
- .docs-card-grid {
2644
- display: grid;
2645
- grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
2646
- gap: 16px;
2647
- margin: 0 0 28px;
2648
- }
2649
-
2650
- .docs-card {
2651
- display: block;
2652
- padding: 18px;
2653
- border: 1px solid #e4e4ea;
2654
- border-radius: var(--radius-md);
2655
- text-decoration: none;
2656
- color: var(--color-text-light);
2657
- transition: border-color 0.15s, box-shadow 0.15s;
2658
- }
2659
-
2660
- .docs-card:hover {
2661
- border-color: var(--color-primary);
2662
- box-shadow: 0 4px 16px rgba(124, 58, 237, 0.12);
2663
- }
2664
-
2665
- .docs-card h3 { margin: 0 0 6px; font-size: 1.05rem; color: var(--color-primary); }
2666
- .docs-card p { margin: 0; font-size: 0.9rem; color: var(--color-text-muted); line-height: 1.5; }
2667
-
2668
- @media (max-width: 860px) {
2669
- .docs-layout { flex-direction: column; gap: 8px; padding: 24px 16px 56px; }
2670
- .docs-sidebar {
2671
- position: static;
2672
- width: 100%;
2673
- flex-basis: auto;
2674
- flex-direction: row;
2675
- flex-wrap: wrap;
2676
- gap: 8px;
2677
- padding-bottom: 12px;
2678
- border-bottom: 1px solid #ececf1;
2679
- margin-bottom: 16px;
2680
- }
2681
- .docs-sidebar-group { margin-top: 0; flex-direction: row; flex-wrap: wrap; align-items: center; }
2682
- .docs-sidebar-cat { display: none; }
2683
- }