@forgefabrik/ff-ztn 0.3.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.
- package/README.md +149 -0
- package/dist/discover.d.ts +3 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +18 -0
- package/dist/discover.js.map +1 -0
- package/dist/genericagent.d.ts +3 -0
- package/dist/genericagent.d.ts.map +1 -0
- package/dist/genericagent.js +40 -0
- package/dist/genericagent.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/zero-token/accounts/account-repository.d.ts +7 -0
- package/dist/zero-token/accounts/account-repository.d.ts.map +1 -0
- package/dist/zero-token/accounts/account-repository.js +37 -0
- package/dist/zero-token/accounts/account-repository.js.map +1 -0
- package/dist/zero-token/accounts/account-service.d.ts +11 -0
- package/dist/zero-token/accounts/account-service.d.ts.map +1 -0
- package/dist/zero-token/accounts/account-service.js +66 -0
- package/dist/zero-token/accounts/account-service.js.map +1 -0
- package/dist/zero-token/accounts/account-types.d.ts +42 -0
- package/dist/zero-token/accounts/account-types.d.ts.map +1 -0
- package/dist/zero-token/accounts/account-types.js +2 -0
- package/dist/zero-token/accounts/account-types.js.map +1 -0
- package/dist/zero-token/accounts/account-validation.d.ts +14 -0
- package/dist/zero-token/accounts/account-validation.d.ts.map +1 -0
- package/dist/zero-token/accounts/account-validation.js +88 -0
- package/dist/zero-token/accounts/account-validation.js.map +1 -0
- package/dist/zero-token/agent/cli.d.ts +2 -0
- package/dist/zero-token/agent/cli.d.ts.map +1 -0
- package/dist/zero-token/agent/cli.js +116 -0
- package/dist/zero-token/agent/cli.js.map +1 -0
- package/dist/zero-token/agent/external-backend.d.ts +3 -0
- package/dist/zero-token/agent/external-backend.d.ts.map +1 -0
- package/dist/zero-token/agent/external-backend.js +3 -0
- package/dist/zero-token/agent/external-backend.js.map +1 -0
- package/dist/zero-token/agent/genericagent-config.d.ts +11 -0
- package/dist/zero-token/agent/genericagent-config.d.ts.map +1 -0
- package/dist/zero-token/agent/genericagent-config.js +44 -0
- package/dist/zero-token/agent/genericagent-config.js.map +1 -0
- package/dist/zero-token/agent/genericagent-runtime.d.ts +20 -0
- package/dist/zero-token/agent/genericagent-runtime.d.ts.map +1 -0
- package/dist/zero-token/agent/genericagent-runtime.js +71 -0
- package/dist/zero-token/agent/genericagent-runtime.js.map +1 -0
- package/dist/zero-token/agent/project-init.d.ts +11 -0
- package/dist/zero-token/agent/project-init.d.ts.map +1 -0
- package/dist/zero-token/agent/project-init.js +58 -0
- package/dist/zero-token/agent/project-init.js.map +1 -0
- package/dist/zero-token/agent/yoyo-adapter.d.ts +23 -0
- package/dist/zero-token/agent/yoyo-adapter.d.ts.map +1 -0
- package/dist/zero-token/agent/yoyo-adapter.js +88 -0
- package/dist/zero-token/agent/yoyo-adapter.js.map +1 -0
- package/dist/zero-token/app-meta.d.ts +7 -0
- package/dist/zero-token/app-meta.d.ts.map +1 -0
- package/dist/zero-token/app-meta.js +7 -0
- package/dist/zero-token/app-meta.js.map +1 -0
- package/dist/zero-token/cli/doctor-command.d.ts +18 -0
- package/dist/zero-token/cli/doctor-command.d.ts.map +1 -0
- package/dist/zero-token/cli/doctor-command.js +96 -0
- package/dist/zero-token/cli/doctor-command.js.map +1 -0
- package/dist/zero-token/config/config.d.ts +56 -0
- package/dist/zero-token/config/config.d.ts.map +1 -0
- package/dist/zero-token/config/config.js +98 -0
- package/dist/zero-token/config/config.js.map +1 -0
- package/dist/zero-token/config/paths.d.ts +12 -0
- package/dist/zero-token/config/paths.d.ts.map +1 -0
- package/dist/zero-token/config/paths.js +50 -0
- package/dist/zero-token/config/paths.js.map +1 -0
- package/dist/zero-token/discovery/builtin-catalog.d.ts +13 -0
- package/dist/zero-token/discovery/builtin-catalog.d.ts.map +1 -0
- package/dist/zero-token/discovery/builtin-catalog.js +25 -0
- package/dist/zero-token/discovery/builtin-catalog.js.map +1 -0
- package/dist/zero-token/discovery/candidate-evaluator.d.ts +4 -0
- package/dist/zero-token/discovery/candidate-evaluator.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-evaluator.js +132 -0
- package/dist/zero-token/discovery/candidate-evaluator.js.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-capability.d.ts +6 -0
- package/dist/zero-token/discovery/candidate-probe-capability.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-capability.js +10 -0
- package/dist/zero-token/discovery/candidate-probe-capability.js.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-evidence.d.ts +13 -0
- package/dist/zero-token/discovery/candidate-probe-evidence.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-evidence.js +53 -0
- package/dist/zero-token/discovery/candidate-probe-evidence.js.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-observer.d.ts +3 -0
- package/dist/zero-token/discovery/candidate-probe-observer.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-observer.js +36 -0
- package/dist/zero-token/discovery/candidate-probe-observer.js.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-runtime.d.ts +6 -0
- package/dist/zero-token/discovery/candidate-probe-runtime.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-runtime.js +120 -0
- package/dist/zero-token/discovery/candidate-probe-runtime.js.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-store.d.ts +9 -0
- package/dist/zero-token/discovery/candidate-probe-store.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-store.js +66 -0
- package/dist/zero-token/discovery/candidate-probe-store.js.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-types.d.ts +30 -0
- package/dist/zero-token/discovery/candidate-probe-types.d.ts.map +1 -0
- package/dist/zero-token/discovery/candidate-probe-types.js +2 -0
- package/dist/zero-token/discovery/candidate-probe-types.js.map +1 -0
- package/dist/zero-token/discovery/control-service.d.ts +8 -0
- package/dist/zero-token/discovery/control-service.d.ts.map +1 -0
- package/dist/zero-token/discovery/control-service.js +107 -0
- package/dist/zero-token/discovery/control-service.js.map +1 -0
- package/dist/zero-token/discovery/control-store.d.ts +7 -0
- package/dist/zero-token/discovery/control-store.d.ts.map +1 -0
- package/dist/zero-token/discovery/control-store.js +70 -0
- package/dist/zero-token/discovery/control-store.js.map +1 -0
- package/dist/zero-token/discovery/control-types.d.ts +39 -0
- package/dist/zero-token/discovery/control-types.d.ts.map +1 -0
- package/dist/zero-token/discovery/control-types.js +2 -0
- package/dist/zero-token/discovery/control-types.js.map +1 -0
- package/dist/zero-token/discovery/discovery-routes.d.ts +3 -0
- package/dist/zero-token/discovery/discovery-routes.d.ts.map +1 -0
- package/dist/zero-token/discovery/discovery-routes.js +130 -0
- package/dist/zero-token/discovery/discovery-routes.js.map +1 -0
- package/dist/zero-token/discovery/discovery-service.d.ts +18 -0
- package/dist/zero-token/discovery/discovery-service.d.ts.map +1 -0
- package/dist/zero-token/discovery/discovery-service.js +81 -0
- package/dist/zero-token/discovery/discovery-service.js.map +1 -0
- package/dist/zero-token/discovery/manifest.d.ts +14 -0
- package/dist/zero-token/discovery/manifest.d.ts.map +1 -0
- package/dist/zero-token/discovery/manifest.js +43 -0
- package/dist/zero-token/discovery/manifest.js.map +1 -0
- package/dist/zero-token/discovery/public-site-inspector.d.ts +10 -0
- package/dist/zero-token/discovery/public-site-inspector.d.ts.map +1 -0
- package/dist/zero-token/discovery/public-site-inspector.js +111 -0
- package/dist/zero-token/discovery/public-site-inspector.js.map +1 -0
- package/dist/zero-token/gateway/api-key-auth.d.ts +3 -0
- package/dist/zero-token/gateway/api-key-auth.d.ts.map +1 -0
- package/dist/zero-token/gateway/api-key-auth.js +59 -0
- package/dist/zero-token/gateway/api-key-auth.js.map +1 -0
- package/dist/zero-token/gateway/api-request-logger-quiet.d.ts +3 -0
- package/dist/zero-token/gateway/api-request-logger-quiet.d.ts.map +1 -0
- package/dist/zero-token/gateway/api-request-logger-quiet.js +79 -0
- package/dist/zero-token/gateway/api-request-logger-quiet.js.map +1 -0
- package/dist/zero-token/gateway/api-request-logger.d.ts +3 -0
- package/dist/zero-token/gateway/api-request-logger.d.ts.map +1 -0
- package/dist/zero-token/gateway/api-request-logger.js +67 -0
- package/dist/zero-token/gateway/api-request-logger.js.map +1 -0
- package/dist/zero-token/gateway/complete-gateway.d.ts +16 -0
- package/dist/zero-token/gateway/complete-gateway.d.ts.map +1 -0
- package/dist/zero-token/gateway/complete-gateway.js +25 -0
- package/dist/zero-token/gateway/complete-gateway.js.map +1 -0
- package/dist/zero-token/gateway/dashboard-gateway.d.ts +16 -0
- package/dist/zero-token/gateway/dashboard-gateway.d.ts.map +1 -0
- package/dist/zero-token/gateway/dashboard-gateway.js +33 -0
- package/dist/zero-token/gateway/dashboard-gateway.js.map +1 -0
- package/dist/zero-token/gateway/gateway.d.ts +2 -0
- package/dist/zero-token/gateway/gateway.d.ts.map +1 -0
- package/dist/zero-token/gateway/gateway.js +2 -0
- package/dist/zero-token/gateway/gateway.js.map +1 -0
- package/dist/zero-token/gateway/inference-dispatch.d.ts +3 -0
- package/dist/zero-token/gateway/inference-dispatch.d.ts.map +1 -0
- package/dist/zero-token/gateway/inference-dispatch.js +97 -0
- package/dist/zero-token/gateway/inference-dispatch.js.map +1 -0
- package/dist/zero-token/gateway/playground-routes.d.ts +3 -0
- package/dist/zero-token/gateway/playground-routes.d.ts.map +1 -0
- package/dist/zero-token/gateway/playground-routes.js +33 -0
- package/dist/zero-token/gateway/playground-routes.js.map +1 -0
- package/dist/zero-token/gateway/provider-runtime-routes.d.ts +3 -0
- package/dist/zero-token/gateway/provider-runtime-routes.d.ts.map +1 -0
- package/dist/zero-token/gateway/provider-runtime-routes.js +38 -0
- package/dist/zero-token/gateway/provider-runtime-routes.js.map +1 -0
- package/dist/zero-token/gateway/runtime-gateway.d.ts +20 -0
- package/dist/zero-token/gateway/runtime-gateway.d.ts.map +1 -0
- package/dist/zero-token/gateway/runtime-gateway.js +234 -0
- package/dist/zero-token/gateway/runtime-gateway.js.map +1 -0
- package/dist/zero-token/identities/google-identity-service.d.ts +27 -0
- package/dist/zero-token/identities/google-identity-service.d.ts.map +1 -0
- package/dist/zero-token/identities/google-identity-service.js +162 -0
- package/dist/zero-token/identities/google-identity-service.js.map +1 -0
- package/dist/zero-token/index.d.ts +3 -0
- package/dist/zero-token/index.d.ts.map +1 -0
- package/dist/zero-token/index.js +380 -0
- package/dist/zero-token/index.js.map +1 -0
- package/dist/zero-token/inference/browser-stream-utils.d.ts +5 -0
- package/dist/zero-token/inference/browser-stream-utils.d.ts.map +1 -0
- package/dist/zero-token/inference/browser-stream-utils.js +118 -0
- package/dist/zero-token/inference/browser-stream-utils.js.map +1 -0
- package/dist/zero-token/inference/chatgpt-browser-provider.d.ts +17 -0
- package/dist/zero-token/inference/chatgpt-browser-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/chatgpt-browser-provider.js +242 -0
- package/dist/zero-token/inference/chatgpt-browser-provider.js.map +1 -0
- package/dist/zero-token/inference/chatgpt-conversation-state.d.ts +8 -0
- package/dist/zero-token/inference/chatgpt-conversation-state.d.ts.map +1 -0
- package/dist/zero-token/inference/chatgpt-conversation-state.js +60 -0
- package/dist/zero-token/inference/chatgpt-conversation-state.js.map +1 -0
- package/dist/zero-token/inference/chatgpt-direct-provider.d.ts +15 -0
- package/dist/zero-token/inference/chatgpt-direct-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/chatgpt-direct-provider.js +348 -0
- package/dist/zero-token/inference/chatgpt-direct-provider.js.map +1 -0
- package/dist/zero-token/inference/chatgpt-provider.d.ts +32 -0
- package/dist/zero-token/inference/chatgpt-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/chatgpt-provider.js +312 -0
- package/dist/zero-token/inference/chatgpt-provider.js.map +1 -0
- package/dist/zero-token/inference/claude-browser-provider.d.ts +16 -0
- package/dist/zero-token/inference/claude-browser-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/claude-browser-provider.js +193 -0
- package/dist/zero-token/inference/claude-browser-provider.js.map +1 -0
- package/dist/zero-token/inference/claude-openclaw-provider.d.ts +14 -0
- package/dist/zero-token/inference/claude-openclaw-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/claude-openclaw-provider.js +187 -0
- package/dist/zero-token/inference/claude-openclaw-provider.js.map +1 -0
- package/dist/zero-token/inference/glm-browser-provider.d.ts +15 -0
- package/dist/zero-token/inference/glm-browser-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/glm-browser-provider.js +166 -0
- package/dist/zero-token/inference/glm-browser-provider.js.map +1 -0
- package/dist/zero-token/inference/inference-provider.d.ts +44 -0
- package/dist/zero-token/inference/inference-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/inference-provider.js +32 -0
- package/dist/zero-token/inference/inference-provider.js.map +1 -0
- package/dist/zero-token/inference/model-registry.d.ts +28 -0
- package/dist/zero-token/inference/model-registry.d.ts.map +1 -0
- package/dist/zero-token/inference/model-registry.js +48 -0
- package/dist/zero-token/inference/model-registry.js.map +1 -0
- package/dist/zero-token/inference/qwen-browser-provider.d.ts +14 -0
- package/dist/zero-token/inference/qwen-browser-provider.d.ts.map +1 -0
- package/dist/zero-token/inference/qwen-browser-provider.js +227 -0
- package/dist/zero-token/inference/qwen-browser-provider.js.map +1 -0
- package/dist/zero-token/inference/stream.d.ts +15 -0
- package/dist/zero-token/inference/stream.d.ts.map +1 -0
- package/dist/zero-token/inference/stream.js +94 -0
- package/dist/zero-token/inference/stream.js.map +1 -0
- package/dist/zero-token/inference/types.d.ts +94 -0
- package/dist/zero-token/inference/types.d.ts.map +1 -0
- package/dist/zero-token/inference/types.js +5 -0
- package/dist/zero-token/inference/types.js.map +1 -0
- package/dist/zero-token/logger.d.ts +4 -0
- package/dist/zero-token/logger.d.ts.map +1 -0
- package/dist/zero-token/logger.js +27 -0
- package/dist/zero-token/logger.js.map +1 -0
- package/dist/zero-token/logging/log-events.d.ts +17 -0
- package/dist/zero-token/logging/log-events.d.ts.map +1 -0
- package/dist/zero-token/logging/log-events.js +74 -0
- package/dist/zero-token/logging/log-events.js.map +1 -0
- package/dist/zero-token/logging/log-routes.d.ts +3 -0
- package/dist/zero-token/logging/log-routes.d.ts.map +1 -0
- package/dist/zero-token/logging/log-routes.js +68 -0
- package/dist/zero-token/logging/log-routes.js.map +1 -0
- package/dist/zero-token/models/model-cache.d.ts +7 -0
- package/dist/zero-token/models/model-cache.d.ts.map +1 -0
- package/dist/zero-token/models/model-cache.js +58 -0
- package/dist/zero-token/models/model-cache.js.map +1 -0
- package/dist/zero-token/models/model-normalization.d.ts +4 -0
- package/dist/zero-token/models/model-normalization.d.ts.map +1 -0
- package/dist/zero-token/models/model-normalization.js +33 -0
- package/dist/zero-token/models/model-normalization.js.map +1 -0
- package/dist/zero-token/models/model-service.d.ts +6 -0
- package/dist/zero-token/models/model-service.d.ts.map +1 -0
- package/dist/zero-token/models/model-service.js +110 -0
- package/dist/zero-token/models/model-service.js.map +1 -0
- package/dist/zero-token/models/model-types.d.ts +28 -0
- package/dist/zero-token/models/model-types.d.ts.map +1 -0
- package/dist/zero-token/models/model-types.js +2 -0
- package/dist/zero-token/models/model-types.js.map +1 -0
- package/dist/zero-token/multi-account/router.d.ts +43 -0
- package/dist/zero-token/multi-account/router.d.ts.map +1 -0
- package/dist/zero-token/multi-account/router.js +94 -0
- package/dist/zero-token/multi-account/router.js.map +1 -0
- package/dist/zero-token/providers/browser-bridge-jobs.d.ts +26 -0
- package/dist/zero-token/providers/browser-bridge-jobs.d.ts.map +1 -0
- package/dist/zero-token/providers/browser-bridge-jobs.js +119 -0
- package/dist/zero-token/providers/browser-bridge-jobs.js.map +1 -0
- package/dist/zero-token/providers/browser-bridge-routes.d.ts +3 -0
- package/dist/zero-token/providers/browser-bridge-routes.d.ts.map +1 -0
- package/dist/zero-token/providers/browser-bridge-routes.js +71 -0
- package/dist/zero-token/providers/browser-bridge-routes.js.map +1 -0
- package/dist/zero-token/providers/browser.d.ts +47 -0
- package/dist/zero-token/providers/browser.d.ts.map +1 -0
- package/dist/zero-token/providers/browser.js +330 -0
- package/dist/zero-token/providers/browser.js.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-account-info.d.ts +12 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-account-info.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-account-info.js +66 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-account-info.js.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-auth.d.ts +9 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-auth.js +81 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-auth.js.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-browser.d.ts +21 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-browser.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-browser.js +64 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-browser.js.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-errors.d.ts +22 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-errors.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-errors.js +44 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-errors.js.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-session.d.ts +10 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-session.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-session.js +71 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-session.js.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-types.d.ts +36 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-types.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-types.js +2 -0
- package/dist/zero-token/providers/chatgpt/chatgpt-types.js.map +1 -0
- package/dist/zero-token/providers/chatgpt-web-auth.d.ts +10 -0
- package/dist/zero-token/providers/chatgpt-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt-web-auth.js +143 -0
- package/dist/zero-token/providers/chatgpt-web-auth.js.map +1 -0
- package/dist/zero-token/providers/chatgpt-web-models.d.ts +8 -0
- package/dist/zero-token/providers/chatgpt-web-models.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt-web-models.js +99 -0
- package/dist/zero-token/providers/chatgpt-web-models.js.map +1 -0
- package/dist/zero-token/providers/chatgpt-web-validator.d.ts +8 -0
- package/dist/zero-token/providers/chatgpt-web-validator.d.ts.map +1 -0
- package/dist/zero-token/providers/chatgpt-web-validator.js +79 -0
- package/dist/zero-token/providers/chatgpt-web-validator.js.map +1 -0
- package/dist/zero-token/providers/claude-web-auth.d.ts +3 -0
- package/dist/zero-token/providers/claude-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/claude-web-auth.js +109 -0
- package/dist/zero-token/providers/claude-web-auth.js.map +1 -0
- package/dist/zero-token/providers/claude-web-models.d.ts +3 -0
- package/dist/zero-token/providers/claude-web-models.d.ts.map +1 -0
- package/dist/zero-token/providers/claude-web-models.js +71 -0
- package/dist/zero-token/providers/claude-web-models.js.map +1 -0
- package/dist/zero-token/providers/claude-web-validator.d.ts +3 -0
- package/dist/zero-token/providers/claude-web-validator.d.ts.map +1 -0
- package/dist/zero-token/providers/claude-web-validator.js +57 -0
- package/dist/zero-token/providers/claude-web-validator.js.map +1 -0
- package/dist/zero-token/providers/deepseek-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/deepseek-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/deepseek-web-auth.js +69 -0
- package/dist/zero-token/providers/deepseek-web-auth.js.map +1 -0
- package/dist/zero-token/providers/deepseek-web-validator.d.ts +3 -0
- package/dist/zero-token/providers/deepseek-web-validator.d.ts.map +1 -0
- package/dist/zero-token/providers/deepseek-web-validator.js +24 -0
- package/dist/zero-token/providers/deepseek-web-validator.js.map +1 -0
- package/dist/zero-token/providers/doubao-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/doubao-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/doubao-web-auth.js +44 -0
- package/dist/zero-token/providers/doubao-web-auth.js.map +1 -0
- package/dist/zero-token/providers/gemini-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/gemini-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/gemini-web-auth.js +47 -0
- package/dist/zero-token/providers/gemini-web-auth.js.map +1 -0
- package/dist/zero-token/providers/glm-intl-web-auth.d.ts +4 -0
- package/dist/zero-token/providers/glm-intl-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/glm-intl-web-auth.js +53 -0
- package/dist/zero-token/providers/glm-intl-web-auth.js.map +1 -0
- package/dist/zero-token/providers/glm-web-auth.d.ts +3 -0
- package/dist/zero-token/providers/glm-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/glm-web-auth.js +42 -0
- package/dist/zero-token/providers/glm-web-auth.js.map +1 -0
- package/dist/zero-token/providers/glm-web-models.d.ts +3 -0
- package/dist/zero-token/providers/glm-web-models.d.ts.map +1 -0
- package/dist/zero-token/providers/glm-web-models.js +52 -0
- package/dist/zero-token/providers/glm-web-models.js.map +1 -0
- package/dist/zero-token/providers/grok-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/grok-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/grok-web-auth.js +47 -0
- package/dist/zero-token/providers/grok-web-auth.js.map +1 -0
- package/dist/zero-token/providers/identity/chatgpt-identity.d.ts +15 -0
- package/dist/zero-token/providers/identity/chatgpt-identity.d.ts.map +1 -0
- package/dist/zero-token/providers/identity/chatgpt-identity.js +15 -0
- package/dist/zero-token/providers/identity/chatgpt-identity.js.map +1 -0
- package/dist/zero-token/providers/identity/identity-validation.d.ts +3 -0
- package/dist/zero-token/providers/identity/identity-validation.d.ts.map +1 -0
- package/dist/zero-token/providers/identity/identity-validation.js +74 -0
- package/dist/zero-token/providers/identity/identity-validation.js.map +1 -0
- package/dist/zero-token/providers/identity/provider-identity-readiness.d.ts +16 -0
- package/dist/zero-token/providers/identity/provider-identity-readiness.d.ts.map +1 -0
- package/dist/zero-token/providers/identity/provider-identity-readiness.js +56 -0
- package/dist/zero-token/providers/identity/provider-identity-readiness.js.map +1 -0
- package/dist/zero-token/providers/identity/provider-identity.d.ts +88 -0
- package/dist/zero-token/providers/identity/provider-identity.d.ts.map +1 -0
- package/dist/zero-token/providers/identity/provider-identity.js +17 -0
- package/dist/zero-token/providers/identity/provider-identity.js.map +1 -0
- package/dist/zero-token/providers/kimi-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/kimi-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/kimi-web-auth.js +50 -0
- package/dist/zero-token/providers/kimi-web-auth.js.map +1 -0
- package/dist/zero-token/providers/perplexity-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/perplexity-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/perplexity-web-auth.js +68 -0
- package/dist/zero-token/providers/perplexity-web-auth.js.map +1 -0
- package/dist/zero-token/providers/perplexity-web-validator.d.ts +3 -0
- package/dist/zero-token/providers/perplexity-web-validator.d.ts.map +1 -0
- package/dist/zero-token/providers/perplexity-web-validator.js +33 -0
- package/dist/zero-token/providers/perplexity-web-validator.js.map +1 -0
- package/dist/zero-token/providers/provider-account-resolver.d.ts +9 -0
- package/dist/zero-token/providers/provider-account-resolver.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-account-resolver.js +28 -0
- package/dist/zero-token/providers/provider-account-resolver.js.map +1 -0
- package/dist/zero-token/providers/provider-browser-profiles.d.ts +14 -0
- package/dist/zero-token/providers/provider-browser-profiles.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-browser-profiles.js +78 -0
- package/dist/zero-token/providers/provider-browser-profiles.js.map +1 -0
- package/dist/zero-token/providers/provider-catalog.d.ts +7 -0
- package/dist/zero-token/providers/provider-catalog.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-catalog.js +27 -0
- package/dist/zero-token/providers/provider-catalog.js.map +1 -0
- package/dist/zero-token/providers/provider-login-jobs.d.ts +21 -0
- package/dist/zero-token/providers/provider-login-jobs.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-login-jobs.js +185 -0
- package/dist/zero-token/providers/provider-login-jobs.js.map +1 -0
- package/dist/zero-token/providers/provider-runtime-registry.d.ts +16 -0
- package/dist/zero-token/providers/provider-runtime-registry.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-runtime-registry.js +88 -0
- package/dist/zero-token/providers/provider-runtime-registry.js.map +1 -0
- package/dist/zero-token/providers/provider-runtime-registry.test.d.ts +2 -0
- package/dist/zero-token/providers/provider-runtime-registry.test.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-runtime-registry.test.js +26 -0
- package/dist/zero-token/providers/provider-runtime-registry.test.js.map +1 -0
- package/dist/zero-token/providers/provider-types.d.ts +72 -0
- package/dist/zero-token/providers/provider-types.d.ts.map +1 -0
- package/dist/zero-token/providers/provider-types.js +2 -0
- package/dist/zero-token/providers/provider-types.js.map +1 -0
- package/dist/zero-token/providers/qwen-cn-web-auth.d.ts +4 -0
- package/dist/zero-token/providers/qwen-cn-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/qwen-cn-web-auth.js +58 -0
- package/dist/zero-token/providers/qwen-cn-web-auth.js.map +1 -0
- package/dist/zero-token/providers/qwen-web-auth.d.ts +3 -0
- package/dist/zero-token/providers/qwen-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/qwen-web-auth.js +67 -0
- package/dist/zero-token/providers/qwen-web-auth.js.map +1 -0
- package/dist/zero-token/providers/qwen-web-models.d.ts +3 -0
- package/dist/zero-token/providers/qwen-web-models.d.ts.map +1 -0
- package/dist/zero-token/providers/qwen-web-models.js +27 -0
- package/dist/zero-token/providers/qwen-web-models.js.map +1 -0
- package/dist/zero-token/providers/registry.d.ts +4 -0
- package/dist/zero-token/providers/registry.d.ts.map +1 -0
- package/dist/zero-token/providers/registry.js +39 -0
- package/dist/zero-token/providers/registry.js.map +1 -0
- package/dist/zero-token/providers/registry.next.d.ts +4 -0
- package/dist/zero-token/providers/registry.next.d.ts.map +1 -0
- package/dist/zero-token/providers/registry.next.js +30 -0
- package/dist/zero-token/providers/registry.next.js.map +1 -0
- package/dist/zero-token/providers/remote-browser-session.d.ts +7 -0
- package/dist/zero-token/providers/remote-browser-session.d.ts.map +1 -0
- package/dist/zero-token/providers/remote-browser-session.js +85 -0
- package/dist/zero-token/providers/remote-browser-session.js.map +1 -0
- package/dist/zero-token/providers/xiaomimo-web-auth.d.ts +7 -0
- package/dist/zero-token/providers/xiaomimo-web-auth.d.ts.map +1 -0
- package/dist/zero-token/providers/xiaomimo-web-auth.js +44 -0
- package/dist/zero-token/providers/xiaomimo-web-auth.js.map +1 -0
- package/dist/zero-token/quota/quota-manager.d.ts +2 -0
- package/dist/zero-token/quota/quota-manager.d.ts.map +1 -0
- package/dist/zero-token/quota/quota-manager.js +2 -0
- package/dist/zero-token/quota/quota-manager.js.map +1 -0
- package/dist/zero-token/quota/runtime-quota-manager.d.ts +19 -0
- package/dist/zero-token/quota/runtime-quota-manager.d.ts.map +1 -0
- package/dist/zero-token/quota/runtime-quota-manager.js +118 -0
- package/dist/zero-token/quota/runtime-quota-manager.js.map +1 -0
- package/dist/zero-token/session/session-service.d.ts +11 -0
- package/dist/zero-token/session/session-service.d.ts.map +1 -0
- package/dist/zero-token/session/session-service.js +169 -0
- package/dist/zero-token/session/session-service.js.map +1 -0
- package/dist/zero-token/session/session-types.d.ts +22 -0
- package/dist/zero-token/session/session-types.d.ts.map +1 -0
- package/dist/zero-token/session/session-types.js +2 -0
- package/dist/zero-token/session/session-types.js.map +1 -0
- package/dist/zero-token/storage/atomic-json-store.d.ts +10 -0
- package/dist/zero-token/storage/atomic-json-store.d.ts.map +1 -0
- package/dist/zero-token/storage/atomic-json-store.js +60 -0
- package/dist/zero-token/storage/atomic-json-store.js.map +1 -0
- package/package.json +59 -0
- package/web-console/dist/assets/index-B_4vEorW.css +1 -0
- package/web-console/dist/assets/index-DFs1Oo-1.js +27 -0
- package/web-console/dist/index.html +20 -0
- package/web-console/dist/nova-mark.svg +18 -0
- package/web-console/dist/nova-network.svg +36 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SessionStatus, AccountPlan, ProviderType } from "../accounts/account-types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Result of validating a stored provider session.
|
|
4
|
+
*/
|
|
5
|
+
export interface SessionValidationResult {
|
|
6
|
+
accountId: string;
|
|
7
|
+
provider: ProviderType;
|
|
8
|
+
valid: boolean;
|
|
9
|
+
status: SessionStatus;
|
|
10
|
+
userId?: string;
|
|
11
|
+
email?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
plan?: AccountPlan;
|
|
14
|
+
expiresAt?: string;
|
|
15
|
+
error?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Provider-specific session validation function.
|
|
19
|
+
* Returns null if validation can't be performed (e.g. network error).
|
|
20
|
+
*/
|
|
21
|
+
export type SessionValidator = (cookies: string, accessToken: string | undefined, userAgent: string | undefined) => Promise<SessionValidationResult>;
|
|
22
|
+
//# sourceMappingURL=session-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-types.d.ts","sourceRoot":"","sources":["../../../src/zero-token/session/session-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE7F;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,KAC1B,OAAO,CAAC,uBAAuB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-types.js","sourceRoot":"","sources":["../../../src/zero-token/session/session-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface StoredData<T> {
|
|
2
|
+
version: number;
|
|
3
|
+
data: T;
|
|
4
|
+
updatedAt: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function readStored<T>(filePath: string): Promise<T | null>;
|
|
7
|
+
export declare function writeStored<T>(filePath: string, data: T): Promise<void>;
|
|
8
|
+
export declare function deleteFile(filePath: string): Promise<boolean>;
|
|
9
|
+
export declare function listJsonFiles(dirPath: string): Promise<string[]>;
|
|
10
|
+
//# sourceMappingURL=atomic-json-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-json-store.d.ts","sourceRoot":"","sources":["../../../src/zero-token/storage/atomic-json-store.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;CACnB;AAUD,wBAAsB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAevE;AAED,wBAAsB,WAAW,CAAC,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,CAAC,GACN,OAAO,CAAC,IAAI,CAAC,CAef;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAWtE"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { access, chmod, constants, mkdir, readFile, rename, unlink, writeFile, } from "node:fs/promises";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
const STORAGE_VERSION = 1;
|
|
4
|
+
async function ensureDir(path) {
|
|
5
|
+
try {
|
|
6
|
+
await mkdir(path, { recursive: true, mode: 0o700 });
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export async function readStored(filePath) {
|
|
13
|
+
try {
|
|
14
|
+
await access(filePath, constants.R_OK);
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const raw = await readFile(filePath, "utf-8");
|
|
20
|
+
const parsed = JSON.parse(raw);
|
|
21
|
+
if (!parsed || typeof parsed !== "object" || typeof parsed.version !== "number") {
|
|
22
|
+
throw new Error(`Invalid storage format in ${filePath}`);
|
|
23
|
+
}
|
|
24
|
+
return parsed.data;
|
|
25
|
+
}
|
|
26
|
+
export async function writeStored(filePath, data) {
|
|
27
|
+
await ensureDir(dirname(filePath));
|
|
28
|
+
const stored = {
|
|
29
|
+
version: STORAGE_VERSION,
|
|
30
|
+
data,
|
|
31
|
+
updatedAt: new Date().toISOString(),
|
|
32
|
+
};
|
|
33
|
+
const tmpPath = `${filePath}.tmp.${process.pid}`;
|
|
34
|
+
const content = JSON.stringify(stored, null, 2) + "\n";
|
|
35
|
+
await writeFile(tmpPath, content, { encoding: "utf-8", mode: 0o600 });
|
|
36
|
+
await chmod(tmpPath, 0o600);
|
|
37
|
+
await rename(tmpPath, filePath);
|
|
38
|
+
}
|
|
39
|
+
export async function deleteFile(filePath) {
|
|
40
|
+
try {
|
|
41
|
+
await unlink(filePath);
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export async function listJsonFiles(dirPath) {
|
|
49
|
+
const { readdir } = await import("node:fs/promises");
|
|
50
|
+
try {
|
|
51
|
+
const entries = await readdir(dirPath, { withFileTypes: true });
|
|
52
|
+
return entries
|
|
53
|
+
.filter((e) => e.isFile() && e.name.endsWith(".json"))
|
|
54
|
+
.map((e) => e.name);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=atomic-json-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-json-store.js","sourceRoot":"","sources":["../../../src/zero-token/storage/atomic-json-store.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,KAAK,EACL,SAAS,EACT,KAAK,EACL,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,eAAe,GAAG,CAAC,CAAC;AAQ1B,KAAK,UAAU,SAAS,CAAC,IAAY;IACnC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAI,QAAgB;IAClD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAkB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE9C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChF,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAgB,EAChB,IAAO;IAEP,MAAM,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAkB;QAC5B,OAAO,EAAE,eAAe;QACxB,IAAI;QACJ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,QAAQ,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAEvD,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtE,MAAM,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5B,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,OAAO;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;aACrD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@forgefabrik/ff-ztn",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "ForgeFabrik Zero Token Nova – Enterprise Multi-Provider AI Control Plane",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"bin": {
|
|
9
|
+
"ztn": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"web-console/dist",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/bkgoder/zero-token.git"
|
|
22
|
+
},
|
|
23
|
+
"homepage": "https://github.com/bkgoder/zero-token#readme",
|
|
24
|
+
"bugs": {
|
|
25
|
+
"url": "https://github.com/bkgoder/zero-token/issues"
|
|
26
|
+
},
|
|
27
|
+
"engines": {
|
|
28
|
+
"node": ">=22.15.0"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc",
|
|
32
|
+
"dev": "tsx src/index.ts",
|
|
33
|
+
"start": "node dist/index.js",
|
|
34
|
+
"test": "vitest run",
|
|
35
|
+
"test:watch": "vitest",
|
|
36
|
+
"typecheck": "tsc --noEmit",
|
|
37
|
+
"lint": "tsc --noEmit",
|
|
38
|
+
"ui:build": "cd web-console && npx vite build",
|
|
39
|
+
"ui:dev": "cd web-console && npx vite dev"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@hono/node-server": "^2.0.6",
|
|
43
|
+
"hono": "^4.12.0",
|
|
44
|
+
"pino": "^10.3.0",
|
|
45
|
+
"playwright": "^1.61.0",
|
|
46
|
+
"tsx": "^4.22.4"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@semantic-release/npm": "^13.1.5",
|
|
50
|
+
"@sveltejs/vite-plugin-svelte": "^7.1.0",
|
|
51
|
+
"@types/node": ">=22.0.0",
|
|
52
|
+
"eslint": "^9.0.0",
|
|
53
|
+
"pino-pretty": "^13.1.0",
|
|
54
|
+
"svelte": "^5.56.0",
|
|
55
|
+
"typescript": ">=5.8.0",
|
|
56
|
+
"vite": "^8.1.0",
|
|
57
|
+
"vitest": "^4.1.0"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.page.svelte-118ro6e{padding:.5rem 0 2rem}.hero.svelte-118ro6e{border:1px solid var(--border);background:radial-gradient(circle at 90% 0,#43d9a31f,#0000 30%),linear-gradient(135deg,#7c6cf22b,#131c2ead);border-radius:18px;justify-content:space-between;align-items:end;gap:1.5rem;padding:1.6rem;display:flex}.eyebrow.svelte-118ro6e{color:var(--accent-secondary);text-transform:uppercase;letter-spacing:.12em;font-size:.68rem;font-weight:700;display:block}h2.svelte-118ro6e{letter-spacing:-.035em;max-width:720px;margin:.4rem 0 0;font-size:clamp(1.8rem,4vw,2.7rem)}.hero.svelte-118ro6e p:where(.svelte-118ro6e){max-width:720px;color:var(--muted);margin:.65rem 0 0;line-height:1.6}.stats.svelte-118ro6e{grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;margin:1rem 0;display:grid}.stats.svelte-118ro6e article:where(.svelte-118ro6e){border:1px solid var(--border);background:var(--card-bg);border-radius:15px;min-height:132px;padding:1rem}.stats.svelte-118ro6e article:where(.svelte-118ro6e)>span:where(.svelte-118ro6e),.stats.svelte-118ro6e small:where(.svelte-118ro6e){color:var(--muted);display:block}.stats.svelte-118ro6e article:where(.svelte-118ro6e)>span:where(.svelte-118ro6e){text-transform:uppercase;letter-spacing:.07em;font-size:.72rem}.stats.svelte-118ro6e strong:where(.svelte-118ro6e){letter-spacing:-.03em;margin-top:.45rem;font-size:1.9rem;display:block}.stats.svelte-118ro6e strong.healthy:where(.svelte-118ro6e){color:var(--success)}.stats.svelte-118ro6e small:where(.svelte-118ro6e){text-overflow:ellipsis;white-space:nowrap;margin-top:.35rem;font-size:.7rem;overflow:hidden}.dashboard-grid.svelte-118ro6e{grid-template-columns:1.3fr .9fr;gap:.8rem;display:grid}.panel.svelte-118ro6e{border:1px solid var(--border);background:var(--card-bg);border-radius:16px;padding:1.1rem}.panel.svelte-118ro6e h3:where(.svelte-118ro6e){margin:.28rem 0 0;font-size:1rem}.panel-head.svelte-118ro6e{justify-content:space-between;align-items:start;gap:1rem;margin-bottom:.8rem;display:flex}.live.svelte-118ro6e{color:var(--muted);align-items:center;gap:.4rem;font-size:.68rem;display:inline-flex}.live.svelte-118ro6e i:where(.svelte-118ro6e){background:var(--success);border-radius:50%;width:7px;height:7px}.endpoint.svelte-118ro6e{border:0;border-top:1px solid var(--border);width:100%;color:var(--muted);cursor:pointer;text-align:left;background:0 0;align-items:center;gap:.75rem;padding:.75rem 0;display:flex}.method.svelte-118ro6e{width:40px;color:var(--accent-secondary);font-size:.66rem;font-weight:700}.endpoint-copy.svelte-118ro6e{flex:1;min-width:0}.endpoint-copy.svelte-118ro6e strong:where(.svelte-118ro6e),.endpoint-copy.svelte-118ro6e code:where(.svelte-118ro6e){display:block}.endpoint-copy.svelte-118ro6e strong:where(.svelte-118ro6e){color:var(--text);font-size:.78rem}.endpoint-copy.svelte-118ro6e code:where(.svelte-118ro6e){text-overflow:ellipsis;white-space:nowrap;color:var(--muted);margin-top:.18rem;overflow:hidden}.endpoint.svelte-118ro6e>span:where(.svelte-118ro6e):last-child{font-size:.66rem}ol.svelte-118ro6e{gap:.8rem;margin:1rem 0;padding:0;list-style:none;display:grid}li.svelte-118ro6e{align-items:start;gap:.65rem;display:flex}li.svelte-118ro6e>span:where(.svelte-118ro6e){width:26px;height:26px;color:var(--accent-secondary);background:#7c6cf221;border-radius:8px;flex:none;place-items:center;font-size:.7rem;display:grid}li.svelte-118ro6e strong:where(.svelte-118ro6e),li.svelte-118ro6e small:where(.svelte-118ro6e){display:block}li.svelte-118ro6e strong:where(.svelte-118ro6e){font-size:.78rem}li.svelte-118ro6e small:where(.svelte-118ro6e){color:var(--muted);margin-top:.15rem;line-height:1.4}.command.svelte-118ro6e{border:1px solid var(--border);width:100%;color:var(--muted);cursor:pointer;background:#05091180;border-radius:10px;justify-content:space-between;gap:1rem;padding:.65rem .75rem;display:flex}.command.svelte-118ro6e code:where(.svelte-118ro6e){color:#cbd5e6}.footer-line.svelte-118ro6e{color:var(--muted);justify-content:space-between;gap:1rem;margin-top:.8rem;padding:.75rem .2rem;font-size:.7rem;display:flex}.footer-line.svelte-118ro6e strong:where(.svelte-118ro6e){color:var(--text);font-weight:500}.offline-card.svelte-118ro6e{background:#ff6f8512;border:1px solid #ff6f8540;border-radius:15px;align-items:center;gap:.8rem;margin-top:1rem;padding:1rem;display:flex}.offline-card.svelte-118ro6e>div:where(.svelte-118ro6e):nth-child(2){flex:1}.offline-card.svelte-118ro6e strong:where(.svelte-118ro6e),.offline-card.svelte-118ro6e span:where(.svelte-118ro6e){display:block}.offline-card.svelte-118ro6e span:where(.svelte-118ro6e){color:var(--muted);margin-top:.2rem;font-size:.75rem}.offline-icon.svelte-118ro6e{width:38px;height:38px;color:var(--danger);background:#ff6f851f;border-radius:11px;place-items:center;font-weight:800;display:grid}.skeleton.svelte-118ro6e{background:linear-gradient(90deg,#ffffff08,#ffffff12,#ffffff08) 0 0/200% 100%;border-radius:15px;height:132px;animation:1.2s infinite svelte-118ro6e-shimmer}@keyframes svelte-118ro6e-shimmer{to{background-position:-200% 0}}@media (width<=980px){.stats.svelte-118ro6e{grid-template-columns:repeat(2,1fr)}.dashboard-grid.svelte-118ro6e{grid-template-columns:1fr}}@media (width<=640px){.hero.svelte-118ro6e{flex-direction:column;align-items:stretch}.hero.svelte-118ro6e .btn:where(.svelte-118ro6e){width:100%}.stats.svelte-118ro6e{grid-template-columns:1fr 1fr}.stats.svelte-118ro6e article:where(.svelte-118ro6e){min-height:115px}.footer-line.svelte-118ro6e{flex-direction:column}}.pg.svelte-13r8rp8{width:100%;min-height:calc(100dvh - 7rem);padding:0}.pg.svelte-13r8rp8>header:where(.svelte-13r8rp8),.pick.svelte-13r8rp8,.compose.svelte-13r8rp8{border:1px solid var(--border);background:var(--card-bg)}.pg.svelte-13r8rp8>header:where(.svelte-13r8rp8){border-radius:10px 10px 0 0;justify-content:space-between;gap:.6rem;padding:.7rem;display:flex}.pg.svelte-13r8rp8>header:where(.svelte-13r8rp8)>div:where(.svelte-13r8rp8),.modes.svelte-13r8rp8{flex-wrap:wrap;align-items:center;gap:.4rem;display:flex}button.svelte-13r8rp8{border:1px solid var(--border);min-height:36px;color:var(--text);background:#ffffff0a;border-radius:7px;padding:0 .7rem}button.on.svelte-13r8rp8,.run.svelte-13r8rp8{background:var(--accent)}button.svelte-13r8rp8:disabled{opacity:.4}.pg.svelte-13r8rp8>header:where(.svelte-13r8rp8) span:where(.svelte-13r8rp8){color:var(--muted);font-size:.7rem}.pick.svelte-13r8rp8{border-top:0;padding:.7rem}.pick.svelte-13r8rp8 select:where(.svelte-13r8rp8),.compose.svelte-13r8rp8 textarea:where(.svelte-13r8rp8){border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text);border-radius:7px;padding:.65rem}.checks.svelte-13r8rp8{grid-template-columns:repeat(auto-fill,minmax(min(100%,180px),1fr));gap:.4rem;display:grid}.checks.svelte-13r8rp8 label:where(.svelte-13r8rp8){border:1px solid var(--border);border-radius:7px;gap:.4rem;padding:.5rem;display:flex}.checks.svelte-13r8rp8 label.on:where(.svelte-13r8rp8){border-color:var(--accent)}.checks.svelte-13r8rp8 b:where(.svelte-13r8rp8),.checks.svelte-13r8rp8 small:where(.svelte-13r8rp8){display:block}.checks.svelte-13r8rp8 small:where(.svelte-13r8rp8){color:var(--muted)}.chips.svelte-13r8rp8{flex-wrap:wrap;gap:.4rem;display:flex}.chips.svelte-13r8rp8 span:where(.svelte-13r8rp8){border:1px solid var(--border);color:var(--muted);border-radius:7px;padding:.45rem;font-size:.7rem;display:grid}.chips.svelte-13r8rp8 b:where(.svelte-13r8rp8){color:var(--text)}.compose.svelte-13r8rp8{border-top:0;border-radius:0 0 10px 10px;grid-template-columns:minmax(0,1fr) 120px;gap:.6rem;padding:.7rem;display:grid}.compose.svelte-13r8rp8 textarea:where(.svelte-13r8rp8){resize:vertical;min-height:78px}.stop.svelte-13r8rp8,.error.svelte-13r8rp8{color:#ff9aaa}main.svelte-13r8rp8{gap:.8rem;margin-top:.8rem;display:grid}.empty.svelte-13r8rp8{min-height:200px;color:var(--muted);place-items:center;gap:.3rem;display:grid}.batch.svelte-13r8rp8{border:1px solid var(--border);border-radius:10px;width:100%;min-width:0;overflow:hidden}.batchhead.svelte-13r8rp8{border-bottom:1px solid var(--border);justify-content:space-between;gap:1rem;padding:.7rem;display:flex}.batchhead.svelte-13r8rp8 b:where(.svelte-13r8rp8){overflow-wrap:anywhere;min-width:0}.batchhead.svelte-13r8rp8 time:where(.svelte-13r8rp8){color:var(--muted);white-space:nowrap;font-size:.7rem}.results.svelte-13r8rp8{grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:.6rem;padding:.6rem;display:grid}.results.svelte-13r8rp8 article:where(.svelte-13r8rp8){border:1px solid var(--border);background:var(--card-bg);border-radius:8px;min-width:0;overflow:hidden}.results.svelte-13r8rp8 article:where(.svelte-13r8rp8) header:where(.svelte-13r8rp8){border-bottom:1px solid var(--border);justify-content:space-between;gap:.5rem;padding:.6rem;display:flex}.results.svelte-13r8rp8 small:where(.svelte-13r8rp8){color:var(--muted);overflow-wrap:anywhere;display:block}.results.svelte-13r8rp8 i:where(.svelte-13r8rp8){color:var(--muted);font-style:normal}.results.svelte-13r8rp8 i.live:where(.svelte-13r8rp8){color:var(--success)}pre.svelte-13r8rp8{white-space:pre-wrap;overflow-wrap:anywhere;min-height:120px;max-height:min(56dvh,620px);font:inherit;scrollbar-gutter:stable;margin:0;padding:.7rem;line-height:1.5;overflow:auto}.results.svelte-13r8rp8 footer:where(.svelte-13r8rp8){text-align:right;color:var(--muted);padding:.35rem;font-size:.65rem}@media (width<=720px){.pg.svelte-13r8rp8>header:where(.svelte-13r8rp8){flex-direction:column;align-items:stretch}.compose.svelte-13r8rp8{grid-template-columns:1fr}.compose.svelte-13r8rp8 button:where(.svelte-13r8rp8){width:100%}.results.svelte-13r8rp8{grid-template-columns:minmax(0,1fr)}.batchhead.svelte-13r8rp8{flex-direction:column;align-items:flex-start}}.provider-page.svelte-3h3ge3{gap:.75rem;min-width:0;padding-bottom:2.4rem;display:grid}.hero-panel.svelte-3h3ge3{border:1px solid var(--border);background:linear-gradient(115deg, #ff3ba714, transparent 38%), linear-gradient(290deg, #69d9ff12, transparent 35%), var(--card-bg);border-radius:10px;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:1rem;padding:1rem 1.1rem;display:grid;position:relative;overflow:hidden}.hero-panel.svelte-3h3ge3:before{content:"";background:linear-gradient(90deg, var(--accent), var(--accent-warm), var(--accent-secondary));height:1px;position:absolute;inset:0 0 auto}.hero-copy.svelte-3h3ge3{min-width:0}.eyebrow.svelte-3h3ge3{color:var(--accent-secondary);letter-spacing:.16em;font-size:.59rem;font-weight:700}h2.svelte-3h3ge3{letter-spacing:-.035em;margin:.2rem 0 .18rem;font-size:clamp(1.25rem,2.2vw,1.75rem)}.hero-copy.svelte-3h3ge3 p:where(.svelte-3h3ge3){color:var(--muted);margin:0;font-size:.72rem}.refresh-button.svelte-3h3ge3{color:#dff8ff;cursor:pointer;background:#69d9ff0e;border:1px solid #69d9ff47;border-radius:7px;grid-template-columns:auto auto;align-items:center;gap:.45rem;min-height:36px;padding:0 .8rem;font-size:.7rem;display:inline-grid}.refresh-button.svelte-3h3ge3:hover{background:#69d9ff1a;border-color:#69d9ff8c}.refresh-button.svelte-3h3ge3:disabled{cursor:wait;opacity:.7}.spinning.svelte-3h3ge3{animation:.8s linear infinite svelte-3h3ge3-spin;display:inline-block}@keyframes svelte-3h3ge3-spin{to{transform:rotate(360deg)}}.summary-grid.svelte-3h3ge3{grid-template-columns:repeat(5,minmax(0,1fr));gap:.55rem;display:grid}.metric.svelte-3h3ge3{border:1px solid var(--border);background:linear-gradient(145deg, #ffffff06, transparent), var(--card-bg);border-radius:8px;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:.12rem .6rem;min-width:0;padding:.72rem .8rem;display:grid;position:relative;overflow:hidden}.metric.svelte-3h3ge3:after{content:"";opacity:.78;height:2px;position:absolute;inset:auto 0 0}.metric.magenta.svelte-3h3ge3:after{background:linear-gradient(90deg, var(--accent), transparent)}.metric.orange.svelte-3h3ge3:after{background:linear-gradient(90deg, var(--accent-warm), transparent)}.metric.blue.svelte-3h3ge3:after{background:linear-gradient(90deg, var(--accent-secondary), transparent)}.metric.warning.svelte-3h3ge3{border-color:#ff944d59}.metric.svelte-3h3ge3 span:where(.svelte-3h3ge3){min-width:0;color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:.66rem;overflow:hidden}.metric.svelte-3h3ge3 strong:where(.svelte-3h3ge3){font-variant-numeric:tabular-nums;grid-row:span 2;font-size:1.28rem}.metric.svelte-3h3ge3 small:where(.svelte-3h3ge3){color:#53627a;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:.56rem;overflow:hidden}.control-strip.svelte-3h3ge3{border:1px solid var(--border);background:#0b111dd1;border-radius:8px;grid-template-columns:minmax(220px,1fr) 160px 88px;align-items:center;gap:.5rem;padding:.55rem;display:grid}.search-field.svelte-3h3ge3{background:#050911a3;border:1px solid #91aed629;border-radius:6px;grid-template-columns:28px minmax(0,1fr);align-items:center;min-width:0;display:grid}.search-field.svelte-3h3ge3>span:where(.svelte-3h3ge3){color:var(--accent-secondary);place-items:center;display:grid}input.svelte-3h3ge3,select.svelte-3h3ge3{width:100%;min-width:0;min-height:34px;color:var(--text);background:0 0;border:0;outline:0;font-size:.7rem}input.svelte-3h3ge3{padding:0 .65rem 0 0}input.svelte-3h3ge3::placeholder{color:#53627a}.region-field.svelte-3h3ge3{background:#050911a3;border:1px solid #91aed629;border-radius:6px;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:.45rem;min-width:0;padding-left:.6rem;display:grid}.region-field.svelte-3h3ge3>span:where(.svelte-3h3ge3){color:#65748d;text-transform:uppercase;letter-spacing:.08em;font-size:.61rem}select.svelte-3h3ge3{padding-right:.4rem}.result-count.svelte-3h3ge3{justify-items:end;display:grid}.result-count.svelte-3h3ge3 strong:where(.svelte-3h3ge3){color:var(--accent-warm);font-variant-numeric:tabular-nums;font-size:.9rem}.result-count.svelte-3h3ge3 span:where(.svelte-3h3ge3){color:#617089;text-transform:uppercase;letter-spacing:.08em;font-size:.55rem}.error-banner.svelte-3h3ge3{color:#ffd7de;background:#ff6f8511;border:1px solid #ff6f854d;border-radius:7px;grid-template-columns:28px minmax(0,1fr);align-items:center;gap:.55rem;padding:.6rem .72rem;display:grid}.error-banner.svelte-3h3ge3>span:where(.svelte-3h3ge3){background:#ff6f851f;border-radius:6px;place-items:center;width:24px;height:24px;font-weight:800;display:grid}.error-banner.svelte-3h3ge3 strong:where(.svelte-3h3ge3),.error-banner.svelte-3h3ge3 small:where(.svelte-3h3ge3){display:block}.error-banner.svelte-3h3ge3 strong:where(.svelte-3h3ge3){font-size:.69rem}.error-banner.svelte-3h3ge3 small:where(.svelte-3h3ge3){color:#d99ba8;margin-top:.08rem;font-size:.62rem}.data-grid.svelte-3h3ge3{border:1px solid var(--border);background:#080d17e0;border-radius:9px;min-width:0;overflow:hidden;box-shadow:0 16px 48px #00000029}table.svelte-3h3ge3{table-layout:fixed;border-collapse:collapse;width:100%;min-width:0}th.svelte-3h3ge3,td.svelte-3h3ge3{text-align:left;vertical-align:middle;border-bottom:1px solid #91aed61a;border-right:1px solid #91aed617;min-width:0;padding:.56rem .62rem;overflow:hidden}th.svelte-3h3ge3:last-child,td.svelte-3h3ge3:last-child{border-right:0}th.svelte-3h3ge3:first-child,td.svelte-3h3ge3:first-child{width:42px}th.svelte-3h3ge3:nth-child(2),td.svelte-3h3ge3:nth-child(2){width:25%}th.svelte-3h3ge3:nth-child(3),td.svelte-3h3ge3:nth-child(3){width:8%}th.svelte-3h3ge3:nth-child(4),td.svelte-3h3ge3:nth-child(4){width:9%}th.svelte-3h3ge3:nth-child(5),td.svelte-3h3ge3:nth-child(5){width:7%}th.svelte-3h3ge3:nth-child(6),td.svelte-3h3ge3:nth-child(6){width:13%}th.svelte-3h3ge3:nth-child(7),td.svelte-3h3ge3:nth-child(7){width:24%}th.svelte-3h3ge3:nth-child(8),td.svelte-3h3ge3:nth-child(8){width:88px}th.svelte-3h3ge3{z-index:2;color:#8f9db3;letter-spacing:.075em;text-transform:uppercase;-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#0f1726f7;font-size:.58rem;font-weight:700;position:sticky;top:0}tbody.svelte-3h3ge3 tr:where(.svelte-3h3ge3){transition:background .14s}tbody.svelte-3h3ge3 tr:where(.svelte-3h3ge3):hover{background:#69d9ff09}tbody.svelte-3h3ge3 tr.needsAttention:where(.svelte-3h3ge3){background:#ff944d05}.index-cell.svelte-3h3ge3{color:#53627a;font-variant-numeric:tabular-nums;font-size:.62rem}.provider-cell.svelte-3h3ge3{grid-template-columns:9px minmax(0,1fr);align-items:center;gap:.5rem;min-width:0;display:grid}.provider-dot.svelte-3h3ge3{background:var(--provider-color);width:8px;height:8px;box-shadow:0 0 12px color-mix(in srgb, var(--provider-color) 58%, transparent);border-radius:50%}.provider-cell.svelte-3h3ge3 div:where(.svelte-3h3ge3){min-width:0}.provider-cell.svelte-3h3ge3 strong:where(.svelte-3h3ge3),.provider-cell.svelte-3h3ge3 small:where(.svelte-3h3ge3){text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.provider-cell.svelte-3h3ge3 strong:where(.svelte-3h3ge3){font-size:.7rem;font-weight:680}.provider-cell.svelte-3h3ge3 small:where(.svelte-3h3ge3){color:#62718a;margin-top:.1rem;font-size:.57rem}.region-tag.svelte-3h3ge3,.runtime-status.svelte-3h3ge3,.api-key-badge.svelte-3h3ge3{white-space:nowrap;border-radius:999px;align-items:center;max-width:100%;display:inline-flex}.region-tag.svelte-3h3ge3{color:#8ee4ff;background:#69d9ff12;padding:.15rem .42rem;font-size:.57rem}.region-tag.china.svelte-3h3ge3{color:#ffb37d;background:#ff944d13}.number-cell.svelte-3h3ge3{font-variant-numeric:tabular-nums;align-items:baseline;gap:.22rem;display:flex}.number-cell.svelte-3h3ge3 strong:where(.svelte-3h3ge3){font-size:.73rem}.number-cell.svelte-3h3ge3 small:where(.svelte-3h3ge3){color:#5c6b82;font-size:.56rem}.model-count.svelte-3h3ge3{font-variant-numeric:tabular-nums;font-size:.72rem}.runtime-status.svelte-3h3ge3{color:#9eabc0;background:#91a0b814;gap:.36rem;padding:.16rem .44rem;font-size:.58rem}.runtime-status.svelte-3h3ge3 i:where(.svelte-3h3ge3){opacity:.76;background:currentColor;border-radius:50%;width:6px;height:6px;box-shadow:0 0 8px}.runtime-status.healthy.svelte-3h3ge3{color:var(--success);background:#43d9a313}.runtime-status.degraded.svelte-3h3ge3,.runtime-status.login-required.svelte-3h3ge3,.runtime-status.disconnected.svelte-3h3ge3{color:var(--warning);background:#ffb35c13}.runtime-status.not-implemented.svelte-3h3ge3{color:var(--danger);background:#ff6f8513}.activity-cell.svelte-3h3ge3{min-width:0}.activity-cell.svelte-3h3ge3 span:where(.svelte-3h3ge3),.activity-cell.svelte-3h3ge3 small:where(.svelte-3h3ge3){text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.activity-cell.svelte-3h3ge3 span:where(.svelte-3h3ge3){color:#a8b4c7;font-size:.62rem}.activity-cell.svelte-3h3ge3 small:where(.svelte-3h3ge3){color:#5b6a81;margin-top:.1rem;font-size:.55rem}.login-button.svelte-3h3ge3{color:#ffc5e5;cursor:pointer;background:#ff3ba712;border:1px solid #ff3ba73d;border-radius:5px;width:100%;min-height:29px;padding:0 .52rem;font-size:.58rem}.login-button.svelte-3h3ge3:hover{background:#ff3ba721;border-color:#ff3ba77a}.login-button.svelte-3h3ge3:disabled{cursor:wait;opacity:.58}.api-key-badge.svelte-3h3ge3{color:#8ee4ff;background:#69d9ff12;padding:.18rem .4rem;font-size:.56rem}.detail-row.svelte-3h3ge3 td:where(.svelte-3h3ge3){color:#dba4ae;white-space:normal;background:#ff6f850b;padding:.45rem .62rem;font-size:.59rem}.detail-row.svelte-3h3ge3 strong:where(.svelte-3h3ge3){color:#ff8497;letter-spacing:.06em;text-transform:uppercase;margin-right:.5rem;font-size:.55rem}.empty-state.svelte-3h3ge3{color:#5c6b82;justify-items:center;gap:.25rem;padding:2.6rem 1rem;display:grid}.empty-state.svelte-3h3ge3 strong:where(.svelte-3h3ge3){color:#9ba8bc;font-size:.76rem}.empty-state.svelte-3h3ge3 span:where(.svelte-3h3ge3){font-size:.63rem}@media (width<=1180px){.summary-grid.svelte-3h3ge3{grid-template-columns:repeat(3,minmax(0,1fr))}th.svelte-3h3ge3:nth-child(3),td.svelte-3h3ge3:nth-child(3),th.svelte-3h3ge3:nth-child(5),td.svelte-3h3ge3:nth-child(5){display:none}th.svelte-3h3ge3:nth-child(2),td.svelte-3h3ge3:nth-child(2){width:30%}th.svelte-3h3ge3:nth-child(4),td.svelte-3h3ge3:nth-child(4){width:11%}th.svelte-3h3ge3:nth-child(6),td.svelte-3h3ge3:nth-child(6){width:16%}th.svelte-3h3ge3:nth-child(7),td.svelte-3h3ge3:nth-child(7){width:30%}}@media (width<=760px){.provider-page.svelte-3h3ge3{gap:.6rem}.hero-panel.svelte-3h3ge3{grid-template-columns:1fr;align-items:stretch}.refresh-button.svelte-3h3ge3{justify-self:start}.summary-grid.svelte-3h3ge3{grid-template-columns:repeat(2,minmax(0,1fr))}.control-strip.svelte-3h3ge3{grid-template-columns:1fr 120px}.result-count.svelte-3h3ge3,th.svelte-3h3ge3:nth-child(4),td.svelte-3h3ge3:nth-child(4),th.svelte-3h3ge3:nth-child(7),td.svelte-3h3ge3:nth-child(7){display:none}th.svelte-3h3ge3:nth-child(2),td.svelte-3h3ge3:nth-child(2){width:auto}th.svelte-3h3ge3:nth-child(6),td.svelte-3h3ge3:nth-child(6){width:120px}th.svelte-3h3ge3:nth-child(8),td.svelte-3h3ge3:nth-child(8){width:76px}}@media (width<=520px){.summary-grid.svelte-3h3ge3,.control-strip.svelte-3h3ge3{grid-template-columns:1fr}.region-field.svelte-3h3ge3{padding-right:.45rem}th.svelte-3h3ge3:first-child,td.svelte-3h3ge3:first-child{display:none}th.svelte-3h3ge3:nth-child(6),td.svelte-3h3ge3:nth-child(6){width:104px}.provider-cell.svelte-3h3ge3 small:where(.svelte-3h3ge3){display:none}}.panel.svelte-t3f30z{border:1px solid var(--border);background:var(--card-bg);border-radius:16px;padding:1rem}.head.svelte-t3f30z{justify-content:space-between;align-items:start;gap:1rem;display:flex}.eyebrow.svelte-t3f30z{color:var(--accent-secondary);text-transform:uppercase;letter-spacing:.12em;font-size:.68rem;font-weight:700;display:block}h3.svelte-t3f30z{margin:.3rem 0 0;font-size:1rem}.state.svelte-t3f30z{color:var(--muted);align-items:center;gap:.45rem;font-size:.68rem;display:inline-flex}.state.svelte-t3f30z i:where(.svelte-t3f30z){background:#748096;border-radius:50%;width:8px;height:8px}.state.online.svelte-t3f30z i:where(.svelte-t3f30z){background:var(--success);box-shadow:0 0 0 4px #43d9a31a}.toggles.svelte-t3f30z{grid-template-columns:repeat(2,1fr);gap:.55rem;margin:.9rem 0;display:grid}.toggles.svelte-t3f30z label:where(.svelte-t3f30z){border:1px solid var(--border);background:#05091147;border-radius:10px;align-items:flex-start;gap:.55rem;padding:.65rem;display:flex}.toggles.svelte-t3f30z input:where(.svelte-t3f30z){accent-color:var(--accent);margin-top:.18rem}.toggles.svelte-t3f30z strong:where(.svelte-t3f30z),.toggles.svelte-t3f30z small:where(.svelte-t3f30z){display:block}.toggles.svelte-t3f30z strong:where(.svelte-t3f30z){font-size:.72rem}.toggles.svelte-t3f30z small:where(.svelte-t3f30z){color:var(--muted);margin-top:.18rem;font-size:.64rem}.fields.svelte-t3f30z{grid-template-columns:1fr 1fr;gap:.65rem;display:grid}.fields.svelte-t3f30z label:where(.svelte-t3f30z),.sources.svelte-t3f30z{color:var(--muted);gap:.35rem;font-size:.7rem;display:grid}select.svelte-t3f30z,input[type=range].svelte-t3f30z,textarea.svelte-t3f30z{border:1px solid var(--border);background:var(--surface);width:100%;color:var(--text);border-radius:9px}select.svelte-t3f30z,input[type=range].svelte-t3f30z{min-height:40px;padding:0 .65rem}input[type=range].svelte-t3f30z{accent-color:var(--accent)}.sources.svelte-t3f30z{margin-top:.7rem}textarea.svelte-t3f30z{resize:vertical;padding:.65rem;font-family:SFMono-Regular,Consolas,monospace;font-size:.67rem}.sources.svelte-t3f30z small:where(.svelte-t3f30z){color:#66758d}.schedule.svelte-t3f30z{grid-template-columns:1fr 1fr;gap:.55rem;margin-top:.7rem;display:grid}.schedule.svelte-t3f30z div:where(.svelte-t3f30z){border:1px solid var(--border);border-radius:9px;padding:.6rem}.schedule.svelte-t3f30z span:where(.svelte-t3f30z),.schedule.svelte-t3f30z strong:where(.svelte-t3f30z){display:block}.schedule.svelte-t3f30z span:where(.svelte-t3f30z){color:var(--muted);font-size:.62rem}.schedule.svelte-t3f30z strong:where(.svelte-t3f30z){margin-top:.2rem;font-size:.7rem}.actions.svelte-t3f30z{justify-content:flex-end;gap:.5rem;margin-top:.75rem;display:flex}button.svelte-t3f30z{min-height:38px;color:var(--text);cursor:pointer;border-radius:9px;padding:0 .8rem}button.svelte-t3f30z:disabled{opacity:.55;cursor:wait}.secondary.svelte-t3f30z{border:1px solid var(--border);background:#ffffff09}.primary.svelte-t3f30z{background:linear-gradient(135deg,#7c6cf2,#536ff5);border:0}@media (width<=650px){.toggles.svelte-t3f30z,.fields.svelte-t3f30z,.schedule.svelte-t3f30z{grid-template-columns:1fr}}.probe.svelte-11147bh{border:1px solid var(--border);background:#05091157;border-radius:11px;gap:.55rem;padding:.7rem;display:grid}.probe.active.svelte-11147bh{border-color:#ffd1664d}.probe.verified.svelte-11147bh{background:#43d9a30a;border-color:#43d9a359}.head.svelte-11147bh{justify-content:space-between;gap:.6rem;display:flex}.head.svelte-11147bh strong:where(.svelte-11147bh),.head.svelte-11147bh small:where(.svelte-11147bh){display:block}.head.svelte-11147bh strong:where(.svelte-11147bh){font-size:.72rem}.head.svelte-11147bh small:where(.svelte-11147bh){color:var(--muted);margin-top:.18rem;font-size:.62rem;line-height:1.4}.head.svelte-11147bh>span:where(.svelte-11147bh){color:var(--muted);white-space:nowrap;font-size:.6rem}.signals.svelte-11147bh{flex-wrap:wrap;gap:.35rem;display:flex}.signals.svelte-11147bh span:where(.svelte-11147bh){border:1px solid var(--border);color:#66758d;border-radius:7px;padding:.22rem .42rem;font-size:.62rem}.signals.svelte-11147bh span.yes:where(.svelte-11147bh){color:var(--success);border-color:#43d9a338}p.svelte-11147bh{color:var(--danger);margin:0;font-size:.64rem}.evidence.svelte-11147bh{gap:.35rem;display:grid}.evidence.svelte-11147bh div:where(.svelte-11147bh){border:1px solid #97a6c41a;border-radius:8px;min-width:0;padding:.4rem}.evidence.svelte-11147bh span:where(.svelte-11147bh),.evidence.svelte-11147bh code:where(.svelte-11147bh),.evidence.svelte-11147bh small:where(.svelte-11147bh){display:block}.evidence.svelte-11147bh span:where(.svelte-11147bh),.evidence.svelte-11147bh small:where(.svelte-11147bh){color:#6f7f98;font-size:.58rem}.evidence.svelte-11147bh code:where(.svelte-11147bh){text-overflow:ellipsis;white-space:nowrap;color:#c8d2e5;margin:.15rem 0;font-size:.6rem;overflow:hidden}.actions.svelte-11147bh{justify-content:flex-end;display:flex}button.svelte-11147bh{min-height:34px;color:var(--accent-secondary);cursor:pointer;background:#7c6cf21f;border:1px solid #8f7aff52;border-radius:8px;padding:0 .65rem}button.stop.svelte-11147bh{color:var(--danger);background:#ff6f8514;border-color:#ff6f8540}button.svelte-11147bh:disabled{opacity:.5;cursor:wait}article.svelte-ee4v1j{border:1px solid var(--border);background:var(--card-bg);border-radius:15px;flex-direction:column;gap:.75rem;min-height:285px;padding:1rem;display:flex}article.valuable.svelte-ee4v1j{border-color:#43d9a347}article.rejected.svelte-ee4v1j{opacity:.62}.head.svelte-ee4v1j{align-items:center;gap:.65rem;display:flex}.score.svelte-ee4v1j{background:conic-gradient(var(--success) var(--score), #ffffff12 0);border-radius:50%;flex:none;place-items:center;width:46px;height:46px;display:grid;position:relative}.score.svelte-ee4v1j:after{content:"";background:#121a2a;border-radius:50%;position:absolute;inset:4px}.score.svelte-ee4v1j strong:where(.svelte-ee4v1j){z-index:1;font-size:.72rem;position:relative}.title.svelte-ee4v1j{flex:1;min-width:0}h4.svelte-ee4v1j{margin:0;font-size:.86rem}.title.svelte-ee4v1j code:where(.svelte-ee4v1j){text-overflow:ellipsis;color:var(--muted);margin-top:.18rem;display:block;overflow:hidden}.decision.svelte-ee4v1j{color:var(--muted);white-space:nowrap;background:#91a0b81a;border-radius:999px;padding:.22rem .45rem;font-size:.6rem}.decision-account-required.svelte-ee4v1j{color:#ffd166;background:#ffd1661a}.decision-approved.svelte-ee4v1j,.decision-account-ready.svelte-ee4v1j{color:var(--success);background:#43d9a31a}.decision-rejected.svelte-ee4v1j{color:var(--danger);background:#ff6f851a}.signals.svelte-ee4v1j,.models.svelte-ee4v1j{flex-wrap:wrap;gap:.35rem;display:flex}.signals.svelte-ee4v1j span:where(.svelte-ee4v1j),.models.svelte-ee4v1j code:where(.svelte-ee4v1j),.models.svelte-ee4v1j>span:where(.svelte-ee4v1j){border:1px solid var(--border);color:#66758d;border-radius:7px;padding:.22rem .42rem;font-size:.62rem}.signals.svelte-ee4v1j span.yes:where(.svelte-ee4v1j){color:var(--success);background:#43d9a30d;border-color:#43d9a338}.signals.svelte-ee4v1j span.alert:where(.svelte-ee4v1j){color:#ffd166;border-color:#ffd16638}.models.svelte-ee4v1j code:where(.svelte-ee4v1j){color:#c7d0e2;background:#0509116b}ul.svelte-ee4v1j{color:var(--muted);gap:.3rem;margin:0;padding-left:1rem;font-size:.67rem;line-height:1.4;display:grid}.meta.svelte-ee4v1j{color:#66758d;margin-top:auto;font-size:.62rem}.actions.svelte-ee4v1j{flex-wrap:wrap;gap:.4rem;display:flex}.actions.svelte-ee4v1j a:where(.svelte-ee4v1j),.actions.svelte-ee4v1j button:where(.svelte-ee4v1j){border:1px solid var(--border);min-height:34px;color:var(--muted);cursor:pointer;background:#ffffff09;border-radius:8px;align-items:center;padding:0 .6rem;font-size:.66rem;text-decoration:none;display:inline-flex}.actions.svelte-ee4v1j button:where(.svelte-ee4v1j):disabled{opacity:.5;cursor:wait}.actions.svelte-ee4v1j .approve:where(.svelte-ee4v1j){color:var(--success);border-color:#43d9a33d}.actions.svelte-ee4v1j .account:where(.svelte-ee4v1j){color:#ffd166;border-color:#ffd1663d}.actions.svelte-ee4v1j .reject:where(.svelte-ee4v1j){color:var(--danger);border-color:#ff6f8538}.queue-head.svelte-1kdbvr3{justify-content:space-between;align-items:end;gap:1rem;margin:1rem 0 .65rem;display:flex}.queue-head.svelte-1kdbvr3 span:where(.svelte-1kdbvr3){color:var(--accent-secondary);text-transform:uppercase;letter-spacing:.12em;font-size:.68rem;font-weight:700}h3.svelte-1kdbvr3{margin:.28rem 0 0;font-size:1rem}.tools.svelte-1kdbvr3{align-items:center;gap:.6rem;display:flex}.tools.svelte-1kdbvr3 b:where(.svelte-1kdbvr3){color:#ffd166;white-space:nowrap;font-size:.65rem}input.svelte-1kdbvr3{border:1px solid var(--border);background:var(--surface);width:min(380px,100%);min-height:40px;color:var(--text);border-radius:9px;padding:0 .7rem}.cards.svelte-1kdbvr3{grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:.75rem;display:grid}.error.svelte-1kdbvr3,.empty.svelte-1kdbvr3{border:1px dashed var(--border);color:var(--muted);border-radius:11px;padding:.8rem;font-size:.7rem}.error.svelte-1kdbvr3{color:var(--danger);border-color:#ff6f854d}@media (width<=650px){.queue-head.svelte-1kdbvr3,.tools.svelte-1kdbvr3{flex-direction:column;align-items:flex-start}.tools.svelte-1kdbvr3,input.svelte-1kdbvr3{width:100%}.cards.svelte-1kdbvr3{grid-template-columns:1fr}}.page.svelte-1pjdoh4{padding:.5rem 0 2rem}.hero.svelte-1pjdoh4{border:1px solid var(--border);background:linear-gradient(135deg,#7c6cf233,#131c2ecc);border-radius:18px;justify-content:space-between;align-items:end;gap:1rem;padding:1.4rem;display:flex}.hero.svelte-1pjdoh4 span:where(.svelte-1pjdoh4),.pipeline.svelte-1pjdoh4>span:where(.svelte-1pjdoh4){color:var(--accent-secondary);text-transform:uppercase;letter-spacing:.12em;font-size:.68rem;font-weight:700}h2.svelte-1pjdoh4{margin:.35rem 0 0;font-size:clamp(1.8rem,4vw,2.6rem)}.hero.svelte-1pjdoh4 p:where(.svelte-1pjdoh4){max-width:720px;color:var(--muted);margin:.55rem 0 0;line-height:1.55}.hero.svelte-1pjdoh4 b:where(.svelte-1pjdoh4){color:var(--muted);white-space:nowrap;font-size:.72rem}.hero.svelte-1pjdoh4 b.online:where(.svelte-1pjdoh4){color:var(--success)}.notice.svelte-1pjdoh4,.loading.svelte-1pjdoh4,footer.svelte-1pjdoh4{border:1px dashed var(--border);color:var(--muted);border-radius:12px;gap:.55rem;margin-top:.8rem;padding:.85rem;font-size:.72rem;display:flex}.notice.svelte-1pjdoh4 button:where(.svelte-1pjdoh4){color:var(--accent-secondary);cursor:pointer;background:0 0;border:0;margin-left:auto}.notice.warning.svelte-1pjdoh4{color:#ffd166;border-color:#ffd1664d}.stats.svelte-1pjdoh4{grid-template-columns:repeat(4,1fr);gap:.7rem;margin:.8rem 0;display:grid}.stats.svelte-1pjdoh4 article:where(.svelte-1pjdoh4){border:1px solid var(--border);background:var(--card-bg);border-radius:13px;padding:.85rem 1rem}.stats.svelte-1pjdoh4 span:where(.svelte-1pjdoh4),.stats.svelte-1pjdoh4 strong:where(.svelte-1pjdoh4){display:block}.stats.svelte-1pjdoh4 span:where(.svelte-1pjdoh4){color:var(--muted);text-transform:uppercase;font-size:.66rem}.stats.svelte-1pjdoh4 strong:where(.svelte-1pjdoh4){margin-top:.25rem;font-size:1.5rem}.control.svelte-1pjdoh4{grid-template-columns:minmax(0,1.4fr) minmax(270px,.7fr);gap:.8rem;display:grid}.pipeline.svelte-1pjdoh4{border:1px solid var(--border);background:var(--card-bg);border-radius:16px;padding:1rem}h3.svelte-1pjdoh4{margin:.28rem 0 0;font-size:1rem}ol.svelte-1pjdoh4{gap:.6rem;padding:0;list-style:none;display:grid}li.svelte-1pjdoh4{gap:.55rem;display:flex}li.svelte-1pjdoh4 i:where(.svelte-1pjdoh4){width:24px;height:24px;color:var(--accent-secondary);background:#7c6cf21f;border-radius:7px;flex:none;place-items:center;font-size:.66rem;font-style:normal;display:grid}li.svelte-1pjdoh4 strong:where(.svelte-1pjdoh4),li.svelte-1pjdoh4 small:where(.svelte-1pjdoh4){display:block}li.svelte-1pjdoh4 strong:where(.svelte-1pjdoh4){font-size:.7rem}li.svelte-1pjdoh4 small:where(.svelte-1pjdoh4){color:var(--muted);margin-top:.15rem;font-size:.63rem}.pipeline.svelte-1pjdoh4 p:where(.svelte-1pjdoh4){color:var(--muted);border:1px solid #43d9a32e;border-radius:9px;padding:.65rem;font-size:.65rem;line-height:1.45}footer.svelte-1pjdoh4{line-height:1.5}@media (width<=900px){.control.svelte-1pjdoh4{grid-template-columns:1fr}.stats.svelte-1pjdoh4{grid-template-columns:repeat(2,1fr)}}@media (width<=650px){.hero.svelte-1pjdoh4{flex-direction:column;align-items:flex-start}}.page.svelte-u0sly9{padding:.5rem 0 2rem}.hero.svelte-u0sly9{border:1px solid var(--border);background:radial-gradient(circle at 90% 10%,#43d9a324,#0000 30%),linear-gradient(135deg,#7c6cf233,#131c2ec7);border-radius:20px;justify-content:space-between;align-items:center;gap:2rem;padding:clamp(1.3rem,3vw,2rem);display:flex}.hero-copy.svelte-u0sly9{max-width:760px}.eyebrow.svelte-u0sly9{color:var(--accent-secondary);text-transform:uppercase;letter-spacing:.12em;font-size:.68rem;font-weight:700;display:block}h2.svelte-u0sly9{letter-spacing:-.04em;margin:.4rem 0 0;font-size:clamp(1.8rem,5vw,3rem)}.hero.svelte-u0sly9 p:where(.svelte-u0sly9){color:var(--muted);margin:.7rem 0 0;line-height:1.65}.hero.svelte-u0sly9 p:where(.svelte-u0sly9) strong:where(.svelte-u0sly9){color:var(--text)}.agent-mark.svelte-u0sly9{background:linear-gradient(145deg,#8f7aff,#43d9a3);border-radius:28px;flex:none;place-items:center;width:96px;height:96px;font-size:2.2rem;font-weight:900;display:grid;box-shadow:0 18px 50px #4f6ef740}.status-line.svelte-u0sly9{color:var(--muted);align-items:center;gap:.55rem;margin-top:1rem;font-size:.76rem;display:flex}.status-line.svelte-u0sly9 button:where(.svelte-u0sly9){color:var(--accent-secondary);cursor:pointer;background:0 0;border:0;margin-left:.25rem}.dot.svelte-u0sly9{background:#65748e;border-radius:50%;width:8px;height:8px}.dot.online.svelte-u0sly9{background:var(--success)}.dot.offline.svelte-u0sly9{background:var(--danger)}.architecture.svelte-u0sly9{grid-template-columns:1fr auto 1fr auto 1fr;align-items:center;gap:.7rem;margin:1rem 0;display:grid}.architecture.svelte-u0sly9 div:where(.svelte-u0sly9){border:1px solid var(--border);background:var(--card-bg);border-radius:13px;padding:.9rem}.architecture.svelte-u0sly9 span:where(.svelte-u0sly9),.architecture.svelte-u0sly9 strong:where(.svelte-u0sly9){display:block}.architecture.svelte-u0sly9 span:where(.svelte-u0sly9){color:var(--muted);font-size:.68rem}.architecture.svelte-u0sly9 strong:where(.svelte-u0sly9){margin-top:.25rem;font-size:.82rem}.architecture.svelte-u0sly9 i:where(.svelte-u0sly9){color:var(--accent-secondary);font-style:normal}.steps.svelte-u0sly9{gap:.75rem;display:grid}.steps.svelte-u0sly9 article:where(.svelte-u0sly9){border:1px solid var(--border);background:var(--card-bg);border-radius:15px;grid-template-columns:auto minmax(180px,1fr) minmax(300px,.9fr);align-items:center;gap:.9rem;padding:1rem;display:grid}.step-number.svelte-u0sly9{width:34px;height:34px;color:var(--accent-secondary);background:#7c6cf224;border-radius:10px;place-items:center;font-weight:800;display:grid}h3.svelte-u0sly9{margin:0;font-size:.95rem}.step-copy.svelte-u0sly9 p:where(.svelte-u0sly9),.detail-card.svelte-u0sly9 p:where(.svelte-u0sly9){color:var(--muted);margin:.3rem 0 0;font-size:.77rem;line-height:1.5}.command.svelte-u0sly9{border:1px solid var(--border);width:100%;min-width:0;color:var(--muted);cursor:pointer;text-align:left;background:#05091180;border-radius:10px;align-items:center;gap:.6rem;padding:.65rem;display:flex}.command.svelte-u0sly9 code:where(.svelte-u0sly9){text-overflow:ellipsis;white-space:nowrap;color:#d5dcef;flex:1;min-width:0;overflow:hidden}.command.svelte-u0sly9 span:where(.svelte-u0sly9){font-size:.66rem}.details-grid.svelte-u0sly9{grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin-top:1rem;display:grid}.detail-card.svelte-u0sly9{border:1px solid var(--border);background:#ffffff05;border-radius:15px;padding:1rem}.detail-card.svelte-u0sly9 h3:where(.svelte-u0sly9){margin-top:.35rem}.detail-card.svelte-u0sly9 code:where(.svelte-u0sly9){color:#d5dcef}.source-note.svelte-u0sly9{border:1px dashed var(--border);color:var(--muted);border-radius:13px;justify-content:space-between;align-items:center;gap:1rem;margin-top:1rem;padding:.9rem 1rem;display:flex}.source-note.svelte-u0sly9 strong:where(.svelte-u0sly9),.source-note.svelte-u0sly9 span:where(.svelte-u0sly9){display:block}.source-note.svelte-u0sly9 strong:where(.svelte-u0sly9){color:var(--text);font-size:.78rem}.source-note.svelte-u0sly9 span:where(.svelte-u0sly9){margin-top:.2rem;font-size:.68rem}.source-note.svelte-u0sly9 a:where(.svelte-u0sly9){color:var(--accent-secondary);font-size:.75rem;text-decoration:none}@media (width<=880px){.steps.svelte-u0sly9 article:where(.svelte-u0sly9){grid-template-columns:auto 1fr}.command.svelte-u0sly9{grid-column:1/-1}.details-grid.svelte-u0sly9{grid-template-columns:1fr}}@media (width<=640px){.agent-mark.svelte-u0sly9{display:none}.architecture.svelte-u0sly9{grid-template-columns:1fr}.architecture.svelte-u0sly9 i:where(.svelte-u0sly9){text-align:center;transform:rotate(90deg)}.source-note.svelte-u0sly9{flex-direction:column;align-items:flex-start}}.page.svelte-1ld53t8{padding:.5rem 0 2rem}.hero.svelte-1ld53t8{border:1px solid var(--border);background:linear-gradient(135deg,#7c6cf22e,#43d9a314);border-radius:18px;justify-content:space-between;align-items:end;gap:1.5rem;padding:1.5rem;display:flex}.eyebrow.svelte-1ld53t8{color:var(--accent-secondary);text-transform:uppercase;letter-spacing:.12em;font-size:.68rem;font-weight:700;display:block}h2.svelte-1ld53t8{margin:.35rem 0 0;font-size:clamp(1.7rem,4vw,2.5rem)}.hero.svelte-1ld53t8 p:where(.svelte-1ld53t8){max-width:720px;color:var(--muted);margin:.55rem 0 0;line-height:1.6}.status.svelte-1ld53t8{color:var(--muted);white-space:nowrap;align-items:center;gap:.5rem;font-size:.72rem;display:inline-flex}.status.svelte-1ld53t8 span:where(.svelte-1ld53t8){background:#748096;border-radius:50%;width:8px;height:8px}.status.svelte-1ld53t8 span.online:where(.svelte-1ld53t8){background:var(--success)}.status.svelte-1ld53t8 span.offline:where(.svelte-1ld53t8){background:var(--danger)}.flow.svelte-1ld53t8{grid-template-columns:1fr auto 1fr auto 1fr;align-items:center;gap:.65rem;margin:.9rem 0;display:grid}.flow.svelte-1ld53t8 div:where(.svelte-1ld53t8){border:1px solid var(--border);background:var(--card-bg);border-radius:12px;align-items:center;gap:.55rem;padding:.85rem;display:flex}.flow.svelte-1ld53t8 small:where(.svelte-1ld53t8){width:24px;height:24px;color:var(--accent-secondary);background:#7c6cf221;border-radius:7px;place-items:center;display:grid}.flow.svelte-1ld53t8 strong:where(.svelte-1ld53t8){font-size:.76rem}.flow.svelte-1ld53t8 i:where(.svelte-1ld53t8){color:var(--accent-secondary);font-style:normal}.commands.svelte-1ld53t8{gap:.65rem;display:grid}.commands.svelte-1ld53t8 article:where(.svelte-1ld53t8){border:1px solid var(--border);background:var(--card-bg);border-radius:13px;align-items:center;gap:1rem;padding:.85rem 1rem;display:flex}.commands.svelte-1ld53t8 article:where(.svelte-1ld53t8)>div:where(.svelte-1ld53t8){flex:1;min-width:0}h3.svelte-1ld53t8{margin:0 0 .3rem;font-size:.82rem}.commands.svelte-1ld53t8 code:where(.svelte-1ld53t8){text-overflow:ellipsis;white-space:nowrap;color:#cfd8ea;display:block;overflow:hidden}.commands.svelte-1ld53t8 button:where(.svelte-1ld53t8){border:1px solid var(--border);min-height:36px;color:var(--text);cursor:pointer;background:#7c6cf21f;border-radius:9px;padding:0 .7rem}.features.svelte-1ld53t8{grid-template-columns:repeat(3,1fr);gap:.65rem;margin-top:.9rem;display:grid}.features.svelte-1ld53t8 div:where(.svelte-1ld53t8){border:1px solid var(--border);background:#ffffff05;border-radius:13px;padding:.9rem}.features.svelte-1ld53t8 strong:where(.svelte-1ld53t8),.features.svelte-1ld53t8 span:where(.svelte-1ld53t8){display:block}.features.svelte-1ld53t8 strong:where(.svelte-1ld53t8){font-size:.78rem}.features.svelte-1ld53t8 span:where(.svelte-1ld53t8){color:var(--muted);margin-top:.3rem;font-size:.72rem;line-height:1.5}.notice.svelte-1ld53t8{border:1px dashed var(--border);color:var(--muted);border-radius:12px;justify-content:space-between;align-items:center;gap:1rem;margin-top:.9rem;padding:.85rem .95rem;display:flex}.notice.svelte-1ld53t8 strong:where(.svelte-1ld53t8),.notice.svelte-1ld53t8 span:where(.svelte-1ld53t8){display:block}.notice.svelte-1ld53t8 strong:where(.svelte-1ld53t8){color:var(--text);font-size:.76rem}.notice.svelte-1ld53t8 span:where(.svelte-1ld53t8){margin-top:.2rem;font-size:.68rem}.notice.svelte-1ld53t8 a:where(.svelte-1ld53t8){color:var(--accent-secondary);font-size:.72rem;text-decoration:none}@media (width<=760px){.hero.svelte-1ld53t8{flex-direction:column;align-items:flex-start}.flow.svelte-1ld53t8{grid-template-columns:1fr}.flow.svelte-1ld53t8 i:where(.svelte-1ld53t8){text-align:center;transform:rotate(90deg)}.features.svelte-1ld53t8{grid-template-columns:1fr}.commands.svelte-1ld53t8 article:where(.svelte-1ld53t8){flex-direction:column;align-items:stretch}.notice.svelte-1ld53t8{flex-direction:column;align-items:flex-start}}.page.svelte-srnpib{padding:.25rem 0 1rem}header.svelte-srnpib{justify-content:space-between;align-items:end;margin-bottom:.6rem;display:flex}header.svelte-srnpib small:where(.svelte-srnpib){color:var(--accent-secondary)}h2.svelte-srnpib{margin:.2rem 0}header.svelte-srnpib p:where(.svelte-srnpib){color:var(--muted);margin:0}button.svelte-srnpib,input.svelte-srnpib,select.svelte-srnpib{border:1px solid var(--border);background:var(--surface);min-height:34px;color:var(--text);border-radius:5px;padding:0 .55rem}.filters.svelte-srnpib{border:1px solid var(--border);background:var(--card-bg);border-bottom:0;grid-template-columns:minmax(0,1fr) 190px 170px;gap:.4rem;padding:.5rem;display:grid}.grid.svelte-srnpib{border:1px solid var(--border)}table.svelte-srnpib{border-collapse:collapse}th.svelte-srnpib,td.svelte-srnpib{text-align:left;border-bottom:1px solid #97a6c41f;border-right:1px solid #97a6c41f;padding:.45rem .55rem}th.svelte-srnpib{color:#b8c4d8;background:#111b2d}tbody.svelte-srnpib tr:where(.svelte-srnpib):hover{background:#8f7aff0f}td.svelte-srnpib small:where(.svelte-srnpib){color:var(--muted)}.status.svelte-srnpib{background:#91a0b81f;border-radius:999px;padding:.15rem .4rem}.status.valid.svelte-srnpib{color:var(--success)}.status.error.svelte-srnpib,.status.expired.svelte-srnpib,.status.login-required.svelte-srnpib{color:var(--danger)}td.svelte-srnpib button:where(.svelte-srnpib){margin-right:.25rem}.danger.svelte-srnpib,.error.svelte-srnpib{color:var(--danger)}@media (width<=700px){.filters.svelte-srnpib{grid-template-columns:1fr}}.page.svelte-9l45r5{padding:.25rem 0 1rem}header.svelte-9l45r5{justify-content:space-between;align-items:end;margin-bottom:.6rem;display:flex}header.svelte-9l45r5 small:where(.svelte-9l45r5){color:var(--accent-secondary)}h2.svelte-9l45r5{margin:.2rem 0}header.svelte-9l45r5 p:where(.svelte-9l45r5){color:var(--muted);margin:0}button.svelte-9l45r5,input.svelte-9l45r5,select.svelte-9l45r5{border:1px solid var(--border);background:var(--surface);min-height:34px;color:var(--text);border-radius:5px;padding:0 .55rem}.filters.svelte-9l45r5{border:1px solid var(--border);background:var(--card-bg);border-bottom:0;grid-template-columns:minmax(0,1fr) 200px;gap:.4rem;padding:.5rem;display:grid}.grid.svelte-9l45r5{border:1px solid var(--border)}table.svelte-9l45r5{border-collapse:collapse}th.svelte-9l45r5,td.svelte-9l45r5{text-align:left;border-bottom:1px solid #97a6c41f;border-right:1px solid #97a6c41f;padding:.45rem .55rem}th.svelte-9l45r5{color:#b8c4d8;background:#111b2d}tbody.svelte-9l45r5 tr:where(.svelte-9l45r5):hover{background:#8f7aff0f}code.svelte-9l45r5{color:#c8d2e4;font-size:.68rem}.active.svelte-9l45r5{color:var(--success)}.error.svelte-9l45r5{color:var(--danger)}@media (width<=700px){.filters.svelte-9l45r5{grid-template-columns:1fr}}.page.svelte-13lrjwo{padding:.25rem 0 1rem}header.svelte-13lrjwo{justify-content:space-between;align-items:end;margin-bottom:.6rem;display:flex}header.svelte-13lrjwo small:where(.svelte-13lrjwo){color:var(--accent-secondary)}h2.svelte-13lrjwo{margin:.2rem 0}header.svelte-13lrjwo p:where(.svelte-13lrjwo){color:var(--muted);margin:0}header.svelte-13lrjwo>div:where(.svelte-13lrjwo):last-child{gap:.4rem;display:flex}button.svelte-13lrjwo,input.svelte-13lrjwo,select.svelte-13lrjwo{border:1px solid var(--border);background:var(--surface);min-height:34px;color:var(--text);border-radius:5px;padding:0 .55rem}.filters.svelte-13lrjwo{border:1px solid var(--border);background:var(--card-bg);border-bottom:0;grid-template-columns:minmax(0,1fr) 150px;gap:.4rem;padding:.5rem;display:grid}.grid.svelte-13lrjwo{border:1px solid var(--border);background:#070d17}table.svelte-13lrjwo{border-collapse:collapse;font-family:SFMono-Regular,Consolas,monospace}th.svelte-13lrjwo,td.svelte-13lrjwo{text-align:left;border-bottom:1px solid #97a6c414;border-right:1px solid #97a6c41a;padding:.42rem .5rem}th.svelte-13lrjwo{color:#b8c4d8;background:#111b2d}tbody.svelte-13lrjwo tr:where(.svelte-13lrjwo){cursor:pointer}tbody.svelte-13lrjwo tr:where(.svelte-13lrjwo):hover,tbody.svelte-13lrjwo tr.selected:where(.svelte-13lrjwo){background:#8f7aff14}.level-warn.svelte-13lrjwo td:where(.svelte-13lrjwo):nth-child(3){color:#ffd166}.level-error.svelte-13lrjwo td:where(.svelte-13lrjwo):nth-child(3),.level-fatal.svelte-13lrjwo td:where(.svelte-13lrjwo):nth-child(3){color:var(--danger)}.level-info.svelte-13lrjwo td:where(.svelte-13lrjwo):nth-child(3){color:#86b7ff}code.svelte-13lrjwo{color:#93a4bc}.detail.svelte-13lrjwo{border:1px solid var(--border);background:#070d17;margin-top:.65rem}.detail.svelte-13lrjwo header:where(.svelte-13lrjwo){border-bottom:1px solid var(--border);align-items:center;margin:0;padding:.55rem .65rem}.detail.svelte-13lrjwo p:where(.svelte-13lrjwo){border-bottom:1px solid var(--border);overflow-wrap:anywhere;margin:0;padding:.65rem}.detail.svelte-13lrjwo pre:where(.svelte-13lrjwo){white-space:pre-wrap;overflow-wrap:anywhere;color:#93a4bc;max-height:180px;margin:0;padding:.65rem;overflow:auto}@media (width<=700px){.filters.svelte-13lrjwo{grid-template-columns:1fr}}.page.svelte-1ozf5k3{padding:.5rem 0 2rem}.header.svelte-1ozf5k3{justify-content:space-between;align-items:end;gap:1.5rem;margin-bottom:1rem;display:flex}.eyebrow.svelte-1ozf5k3{color:var(--accent-secondary);text-transform:uppercase;letter-spacing:.12em;font-size:.68rem;font-weight:700;display:block}h2.svelte-1ozf5k3{margin:.35rem 0 0;font-size:clamp(1.65rem,4vw,2.35rem)}.header.svelte-1ozf5k3 p:where(.svelte-1ozf5k3){color:var(--muted);margin:.55rem 0 0;line-height:1.55}.settings-grid.svelte-1ozf5k3{grid-template-columns:repeat(2,minmax(0,1fr));gap:.8rem;display:grid}.setting-card.svelte-1ozf5k3{border:1px solid var(--border);background:var(--card-bg);border-radius:16px;min-height:230px;padding:1.05rem}.setting-card.featured.svelte-1ozf5k3{background:linear-gradient(145deg,#7c6cf226,#131c2ed1)}.card-icon.svelte-1ozf5k3{width:36px;height:36px;color:var(--accent-secondary);background:#7c6cf221;border-radius:10px;place-items:center;margin-bottom:.8rem;display:grid}.card-head.svelte-1ozf5k3{justify-content:space-between;align-items:start;gap:1rem;display:flex}.card-head.svelte-1ozf5k3 span:where(.svelte-1ozf5k3){color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-size:.7rem}.card-head.svelte-1ozf5k3 h3:where(.svelte-1ozf5k3){margin:.25rem 0 0;font-size:1rem}.card-head.svelte-1ozf5k3 .status:where(.svelte-1ozf5k3){color:var(--muted);background:#91a0b81a;border-radius:999px;padding:.2rem .48rem;font-size:.62rem}.card-head.svelte-1ozf5k3 .status.enabled:where(.svelte-1ozf5k3),.featured.svelte-1ozf5k3 .status:where(.svelte-1ozf5k3){color:var(--success);background:#43d9a31a}dl.svelte-1ozf5k3{gap:0;margin:.9rem 0 0;display:grid}dl.svelte-1ozf5k3 div:where(.svelte-1ozf5k3){border-top:1px solid var(--border);justify-content:space-between;gap:1rem;padding:.55rem 0;display:flex}dt.svelte-1ozf5k3{color:var(--muted);font-size:.72rem}dd.svelte-1ozf5k3{text-align:right;margin:0;font-size:.75rem}.proxy-list.svelte-1ozf5k3{gap:.5rem;margin-top:.9rem;display:grid}.proxy-list.svelte-1ozf5k3 div:where(.svelte-1ozf5k3){border:1px solid var(--border);background:#05091159;border-radius:9px;gap:.2rem;padding:.55rem;display:grid}.proxy-list.svelte-1ozf5k3 span:where(.svelte-1ozf5k3){color:var(--muted);text-transform:capitalize;font-size:.66rem}.proxy-list.svelte-1ozf5k3 code:where(.svelte-1ozf5k3){text-overflow:ellipsis;white-space:nowrap;color:#cbd5e6;overflow:hidden}.config-file.svelte-1ozf5k3{border:1px solid var(--border);background:#ffffff05;border-radius:16px;justify-content:space-between;align-items:center;gap:1.5rem;margin-top:.8rem;padding:1.1rem;display:flex}.config-file.svelte-1ozf5k3 h3:where(.svelte-1ozf5k3){margin:.28rem 0 0;font-size:1rem}.config-file.svelte-1ozf5k3 p:where(.svelte-1ozf5k3){max-width:650px;color:var(--muted);margin:.4rem 0 0;font-size:.78rem;line-height:1.5}.config-file.svelte-1ozf5k3 button:where(.svelte-1ozf5k3){border:1px solid var(--border);min-width:270px;color:var(--muted);cursor:pointer;text-align:left;background:#05091173;border-radius:10px;gap:.3rem;padding:.75rem;display:grid}.config-file.svelte-1ozf5k3 button:where(.svelte-1ozf5k3) code:where(.svelte-1ozf5k3){color:#cbd5e6}.config-file.svelte-1ozf5k3 button:where(.svelte-1ozf5k3) span:where(.svelte-1ozf5k3){font-size:.66rem}.security-note.svelte-1ozf5k3,.state-card.svelte-1ozf5k3{border:1px dashed var(--border);color:var(--muted);border-radius:13px;flex-wrap:wrap;gap:.55rem;margin-top:.8rem;padding:.9rem 1rem;font-size:.76rem;display:flex}.security-note.svelte-1ozf5k3 strong:where(.svelte-1ozf5k3),.state-card.svelte-1ozf5k3 strong:where(.svelte-1ozf5k3){color:var(--text)}.state-card.svelte-1ozf5k3{justify-items:start;display:grid}.skeleton.svelte-1ozf5k3{background:linear-gradient(90deg,#ffffff08,#ffffff12,#ffffff08) 0 0/200% 100%;border-radius:16px;height:230px;animation:1.2s infinite svelte-1ozf5k3-shimmer}@keyframes svelte-1ozf5k3-shimmer{to{background-position:-200% 0}}@media (width<=760px){.header.svelte-1ozf5k3{flex-direction:column;align-items:stretch}.settings-grid.svelte-1ozf5k3{grid-template-columns:1fr}.config-file.svelte-1ozf5k3{flex-direction:column;align-items:stretch}.config-file.svelte-1ozf5k3 button:where(.svelte-1ozf5k3){width:100%;min-width:0}}html,body,#app{width:100%;height:100%;overflow:hidden}html{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;background:#070a12}body{color:#f4f7ff;background:radial-gradient(circle at 78% -18%,#ff32a524,#0000 33%),radial-gradient(circle at 92% 34%,#63d6ff17,#0000 28%),linear-gradient(145deg,#070a12 0%,#090e19 56%,#080b13 100%);min-width:320px;margin:0;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}body:before{content:"";pointer-events:none;opacity:.18;background-image:linear-gradient(#7e9bc60e 1px,#0000 1px),linear-gradient(90deg,#7e9bc60a 1px,#0000 1px);background-size:48px 48px;position:fixed;inset:0;-webkit-mask-image:linear-gradient(#000,#0000 78%);mask-image:linear-gradient(#000,#0000 78%)}button,input,select,textarea{font:inherit}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline-offset:2px;outline:2px solid #66d8ff}code{font-family:SFMono-Regular,Consolas,Liberation Mono,monospace;font-size:.82em}.muted{color:var(--muted)}.btn{border:1px solid var(--border);min-height:38px;color:var(--text);cursor:pointer;background:#ff39a617;border-radius:8px;padding:0 .9rem;transition:all .16s}.btn:hover{background:#ff39a629;border-color:#ff50b38c}.btn:disabled{opacity:.5;cursor:not-allowed}.card{background:var(--card-bg);border:1px solid var(--border);border-radius:12px}:root{--card-bg:#0e1522db;--surface:#0a101cf0;--surface-2:#121b2be6;--border:#91aed62b;--border-strong:#72d2ff57;--accent:#ff3ba7;--accent-secondary:#69d9ff;--accent-warm:#ff944d;--text:#f4f7ff;--muted:#8d9bb2;--success:#43d9a3;--danger:#ff6f85;--warning:#ffb35c}.app-shell.svelte-1n46o8q{isolation:isolate;grid-template-columns:248px minmax(0,1fr);height:100dvh;display:grid;position:relative;overflow:hidden}.app-shell.svelte-1n46o8q:after{content:"";z-index:80;background:linear-gradient(90deg, var(--accent), var(--accent-warm) 48%, var(--accent-secondary));height:2px;position:fixed;inset:0 0 auto;box-shadow:0 0 20px #ff3ba757}.sidebar.svelte-1n46o8q{z-index:30;border-right:1px solid var(--border);-webkit-backdrop-filter:blur(22px);backdrop-filter:blur(22px);background:linear-gradient(#080c16f7,#090e19f0);grid-template-rows:auto minmax(0,1fr) auto;min-height:0;padding:.85rem;display:grid;position:relative;overflow:hidden;box-shadow:18px 0 52px #00000038}.brand.svelte-1n46o8q{grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:.7rem;padding:.35rem .35rem .85rem;display:grid}.logo.svelte-1n46o8q{letter-spacing:-.04em;background:linear-gradient(145deg,#ff3ba7eb,#7851ffe0 54%,#69d9ffe0);border:1px solid #69d9ff6b;border-radius:9px;place-items:center;width:38px;height:38px;font-weight:900;display:grid;box-shadow:0 0 24px #ff3ba733,inset 0 0 18px #ffffff21}.brand-copy.svelte-1n46o8q{min-width:0}.brand-copy.svelte-1n46o8q strong:where(.svelte-1n46o8q),.brand-copy.svelte-1n46o8q span:where(.svelte-1n46o8q){display:block}.brand-copy.svelte-1n46o8q strong:where(.svelte-1n46o8q){letter-spacing:.025em;font-size:.88rem}.brand-copy.svelte-1n46o8q span:where(.svelte-1n46o8q){color:var(--muted);text-overflow:ellipsis;white-space:nowrap;margin-top:.12rem;font-size:.61rem;overflow:hidden}.close-nav.svelte-1n46o8q{color:var(--muted);background:0 0;border:0;font-size:1.5rem;display:none}nav.svelte-1n46o8q{align-content:start;gap:.24rem;min-height:0;display:grid;overflow:hidden}nav.svelte-1n46o8q button:where(.svelte-1n46o8q){width:100%;min-height:48px;color:var(--muted);text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;grid-template-columns:28px minmax(0,1fr) 3px;align-items:center;gap:.62rem;padding:.5rem .55rem;transition:all .16s;display:grid;position:relative;overflow:hidden}nav.svelte-1n46o8q button:where(.svelte-1n46o8q):hover{color:var(--text);background:#69d9ff0b;border-color:#69d9ff1f}nav.svelte-1n46o8q button.active:where(.svelte-1n46o8q){color:var(--text);background:linear-gradient(90deg,#ff3ba71f,#69d9ff0e);border-color:#ff52b140;box-shadow:inset 0 0 24px #ff3ba709}.nav-icon.svelte-1n46o8q{background:#ffffff06;border:1px solid #91aed621;border-radius:7px;place-items:center;width:28px;height:28px;font-size:.72rem;display:grid}nav.svelte-1n46o8q button.active:where(.svelte-1n46o8q) .nav-icon:where(.svelte-1n46o8q){color:var(--accent-secondary);background:#69d9ff12;border-color:#69d9ff47}.nav-copy.svelte-1n46o8q{min-width:0}.nav-copy.svelte-1n46o8q strong:where(.svelte-1n46o8q),.nav-copy.svelte-1n46o8q small:where(.svelte-1n46o8q){text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.nav-copy.svelte-1n46o8q strong:where(.svelte-1n46o8q){font-size:.78rem;font-weight:650}.nav-copy.svelte-1n46o8q small:where(.svelte-1n46o8q){color:#617089;margin-top:.08rem;font-size:.61rem}.nav-marker.svelte-1n46o8q{background:0 0;border-radius:999px;width:3px;height:24px}nav.svelte-1n46o8q button.active:where(.svelte-1n46o8q) .nav-marker:where(.svelte-1n46o8q){background:linear-gradient(var(--accent), var(--accent-warm));box-shadow:0 0 12px #ff3ba775}.sidebar-bottom.svelte-1n46o8q{padding-top:.7rem}.gateway-state.svelte-1n46o8q{border:1px solid var(--border);background:#ffffff06;border-radius:8px;grid-template-columns:8px minmax(0,1fr);align-items:center;gap:.6rem;padding:.65rem;display:grid}.gateway-state.svelte-1n46o8q strong:where(.svelte-1n46o8q),.gateway-state.svelte-1n46o8q span:where(.svelte-1n46o8q){text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.gateway-state.svelte-1n46o8q strong:where(.svelte-1n46o8q){font-size:.71rem}.gateway-state.svelte-1n46o8q span:where(.svelte-1n46o8q){color:var(--muted);margin-top:.1rem;font-size:.61rem}.sidebar-bottom.svelte-1n46o8q p:where(.svelte-1n46o8q){color:#4e5d75;letter-spacing:.12em;margin:.55rem .2rem 0;font-size:.56rem}.state-dot.svelte-1n46o8q{background:#65748e;border-radius:999px;flex:none;width:7px;height:7px;display:inline-block;box-shadow:0 0 0 4px #65748e14}.state-dot.online.svelte-1n46o8q{background:var(--success);box-shadow:0 0 0 4px #43d9a314,0 0 14px #43d9a347}.state-dot.offline.svelte-1n46o8q{background:var(--danger);box-shadow:0 0 0 4px #ff6f8514,0 0 14px #ff6f853d}main.svelte-1n46o8q{grid-template-rows:auto minmax(0,1fr);min-width:0;min-height:0;display:grid;overflow:hidden}.topbar.svelte-1n46o8q{z-index:20;border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);background:#070b13c2;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.85rem;min-height:74px;padding:.75rem clamp(1rem,2.6vw,2.25rem);display:grid;position:relative}.title-block.svelte-1n46o8q{min-width:0}.breadcrumb.svelte-1n46o8q{color:var(--muted);letter-spacing:.11em;text-transform:uppercase;font-size:.62rem;display:block}h1.svelte-1n46o8q{letter-spacing:-.025em;margin:.16rem 0 0;font-size:clamp(1.15rem,2vw,1.55rem)}.menu-button.svelte-1n46o8q{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;width:38px;height:38px;display:none}.topbar-status.svelte-1n46o8q{grid-template-columns:auto auto;align-items:center;gap:.7rem;display:grid}.environment.svelte-1n46o8q{color:#66748c;letter-spacing:.12em;font-size:.57rem}.health-pill.svelte-1n46o8q{border:1px solid var(--border);min-height:34px;color:var(--muted);cursor:pointer;background:#ffffff06;border-radius:999px;grid-template-columns:7px auto;align-items:center;gap:.48rem;padding:0 .7rem;font-size:.68rem;display:inline-grid}.health-pill.svelte-1n46o8q:hover{border-color:var(--border-strong);color:var(--text)}.content.svelte-1n46o8q{scrollbar-width:none;overscroll-behavior:contain;width:100%;min-width:0;min-height:0;padding:1.1rem clamp(1rem,2.6vw,2.25rem) 2rem;overflow:hidden auto}.content.svelte-1n46o8q::-webkit-scrollbar{width:0;height:0;display:none}.content.svelte-1n46o8q>*{width:min(1540px,100%);margin-inline:auto}.content.playground.svelte-1n46o8q{padding:0}.content.playground.svelte-1n46o8q>*{width:100%;max-width:none}.backdrop.svelte-1n46o8q{display:none}@media (height<=780px) and (width>=901px){.sidebar.svelte-1n46o8q{padding-block:.65rem}.brand.svelte-1n46o8q{padding-bottom:.55rem}nav.svelte-1n46o8q{gap:.12rem}nav.svelte-1n46o8q button:where(.svelte-1n46o8q){min-height:42px;padding-block:.35rem}.nav-copy.svelte-1n46o8q small:where(.svelte-1n46o8q),.sidebar-bottom.svelte-1n46o8q p:where(.svelte-1n46o8q){display:none}}@media (width<=900px){.app-shell.svelte-1n46o8q{display:block}.sidebar.svelte-1n46o8q{width:min(300px,86vw);transition:transform .2s;position:fixed;inset:0 auto 0 0;transform:translate(-102%);box-shadow:28px 0 70px #00000075}.sidebar.open.svelte-1n46o8q{transform:translate(0)}.close-nav.svelte-1n46o8q,.menu-button.svelte-1n46o8q{display:block}.backdrop.svelte-1n46o8q{z-index:25;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0009;border:0;display:block;position:fixed;inset:0}main.svelte-1n46o8q{height:100dvh}.environment.svelte-1n46o8q{display:none}}@media (width<=560px){.topbar.svelte-1n46o8q{min-height:66px;padding-inline:.75rem}.breadcrumb.svelte-1n46o8q{display:none}h1.svelte-1n46o8q{margin:0;font-size:1.1rem}.content.svelte-1n46o8q{padding:.8rem .75rem 1.4rem}}.terminal-dock.svelte-1j3lig5{background:#05080efa;border-top:1px solid #69d9ff33;height:36px;transition:height .2s;overflow:hidden}.terminal-dock.open.svelte-1j3lig5{height:var(--dock-height)}.resize.svelte-1j3lig5{z-index:4;cursor:ns-resize;background:0 0;border:0;width:100%;height:7px;position:absolute;inset:0 0 auto}.resize.svelte-1j3lig5 span:where(.svelte-1j3lig5){background:#69d9ff4d;border-radius:9px;width:48px;height:2px;margin:auto;display:block}header.svelte-1j3lig5{background:linear-gradient(90deg,#ff3ba70e,#0000 35%,#69d9ff09);border-bottom:1px solid #91aed61a;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.65rem;height:36px;padding:0 .72rem;display:grid}button.svelte-1j3lig5{font:inherit}.toggle.svelte-1j3lig5{color:#dce7f5;cursor:pointer;background:0 0;border:0;align-items:center;gap:.45rem;height:28px;padding:0 .35rem;display:flex}.toggle.svelte-1j3lig5 b:where(.svelte-1j3lig5){color:#69d9ff;font-family:monospace}.toggle.svelte-1j3lig5 strong:where(.svelte-1j3lig5){letter-spacing:.12em;font-size:.57rem}.toggle.svelte-1j3lig5 span:where(.svelte-1j3lig5){color:#64738b}nav.svelte-1j3lig5{gap:.18rem;display:flex}nav.svelte-1j3lig5 button:where(.svelte-1j3lig5){color:#65748c;cursor:pointer;letter-spacing:.08em;background:0 0;border:1px solid #0000;border-radius:4px;height:27px;padding:0 .5rem;font-size:.56rem;font-weight:700}nav.svelte-1j3lig5 button.active:where(.svelte-1j3lig5){color:#f4f7ff;background:#ff3ba714;border-color:#ff3ba738}nav.svelte-1j3lig5 i:where(.svelte-1j3lig5){background:#ffffff0f;border-radius:99px;padding:.05rem .24rem;font-style:normal}.health.svelte-1j3lig5{color:#68778e;letter-spacing:.08em;align-items:center;gap:.45rem;font-size:.52rem;display:flex}.health.svelte-1j3lig5 span:where(.svelte-1j3lig5){color:#ff6f85}.health.svelte-1j3lig5 em:where(.svelte-1j3lig5){background:#43d9a3;border-radius:50%;width:6px;height:6px;box-shadow:0 0 10px #43d9a380}.body.svelte-1j3lig5{background:#04070cf7;height:calc(100% - 36px);min-height:0;display:grid}.body.svelte-1j3lig5:has(.prompt:where(.svelte-1j3lig5)){grid-template-rows:minmax(0,1fr) auto}.output.svelte-1j3lig5{scrollbar-width:none;min-width:0;min-height:0;padding:.72rem .85rem;font:.66rem/1.55 SFMono-Regular,Consolas,monospace;overflow:auto}.output.svelte-1j3lig5::-webkit-scrollbar{display:none}pre.svelte-1j3lig5{white-space:pre-wrap;overflow-wrap:anywhere;color:#aebbd0;font:inherit;margin:0 0 .22rem}pre.command.svelte-1j3lig5{color:#69d9ff}pre.error.svelte-1j3lig5{color:#ff8497}pre.system.svelte-1j3lig5{color:#ff944d}.prompt.svelte-1j3lig5{background:#080d16f7;border-top:1px solid #91aed61a;grid-template-columns:auto minmax(0,1fr);align-items:center;gap:.55rem;min-height:36px;padding:0 .85rem;font:.64rem monospace;display:grid}.prompt.svelte-1j3lig5 span:where(.svelte-1j3lig5){color:#ff3ba7}.prompt.svelte-1j3lig5 input:where(.svelte-1j3lig5){color:#edf7ff;min-width:0;height:34px;font:inherit;caret-color:#69d9ff;background:0 0;border:0;outline:0}.log.svelte-1j3lig5{color:#9eabc0;grid-template-columns:68px 48px 92px minmax(160px,1fr);gap:.55rem;padding:.15rem 0;display:grid}.log.svelte-1j3lig5 time:where(.svelte-1j3lig5){color:#526177}.log.svelte-1j3lig5 b:where(.svelte-1j3lig5){color:#69d9ff}.log.warn.svelte-1j3lig5 b:where(.svelte-1j3lig5){color:#ff944d}.log.error.svelte-1j3lig5 b:where(.svelte-1j3lig5),.log.fatal.svelte-1j3lig5 b:where(.svelte-1j3lig5){color:#ff6f85}.log.svelte-1j3lig5 span:where(.svelte-1j3lig5){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.log.svelte-1j3lig5 p:where(.svelte-1j3lig5){color:#cbd6e5;overflow-wrap:anywhere;margin:0}.job.svelte-1j3lig5{color:#9eabc0;border-bottom:1px solid #91aed614;grid-template-columns:minmax(110px,.8fr) 130px minmax(120px,.8fr) minmax(220px,2fr);gap:.7rem;min-width:660px;padding:.35rem .45rem;display:grid}.job.head.svelte-1j3lig5{color:#607089;letter-spacing:.09em;background:#080d16;font-size:.53rem;font-weight:700;position:sticky;top:-.72rem}.job.svelte-1j3lig5 .failed:where(.svelte-1j3lig5){color:#ff6f85}.job.svelte-1j3lig5 .succeeded:where(.svelte-1j3lig5){color:#43d9a3}.empty.svelte-1j3lig5{color:#5c6a80}@media (width<=700px){.terminal-dock.open.svelte-1j3lig5{height:min(var(--dock-height),52dvh)}.health.svelte-1j3lig5{display:none}header.svelte-1j3lig5{grid-template-columns:auto minmax(0,1fr)}.toggle.svelte-1j3lig5 strong:where(.svelte-1j3lig5){display:none}nav.svelte-1j3lig5{justify-content:end}.log.svelte-1j3lig5{grid-template-columns:58px 42px minmax(0,1fr)}.log.svelte-1j3lig5>span:where(.svelte-1j3lig5){display:none}}*{box-sizing:border-box}html{font-size:15px;overflow-x:hidden}body,#app{width:100%;min-width:320px;min-height:100%;overflow-x:hidden}.app-shell{width:100%;min-height:100dvh}.app-shell>main{width:100%;min-width:0;overflow-x:hidden}.content,.content.playground{width:100%!important;max-width:1600px!important;margin-inline:auto!important;padding:clamp(10px,1.7vw,24px)!important}.pg,.page{width:100%;min-width:0;max-width:100%;margin:0 auto}.pg{min-height:calc(100dvh - 112px)!important;padding:0!important}.grid,.sheet,.sheet-wrap,.terminal{overscroll-behavior:contain;scrollbar-gutter:stable;contain:layout paint;max-height:calc(100dvh - 235px);width:100%!important;min-width:0!important;max-width:100%!important;overflow:auto!important}.grid table,.sheet table,.sheet-wrap table{table-layout:fixed!important;width:100%!important;min-width:1100px!important}table{font-size:.74rem}th,td{height:38px;text-overflow:ellipsis!important;white-space:nowrap!important;max-width:280px!important;overflow:hidden!important}th{z-index:3!important;position:sticky!important;top:0!important}td code,td small{text-overflow:ellipsis;max-width:100%;display:block;overflow:hidden;white-space:nowrap!important}.pager{border:1px solid var(--border);background:var(--card-bg);border-top:0;justify-content:flex-end;align-items:center;gap:.45rem;padding:.5rem;display:flex}.pager span{color:var(--muted);font-size:.72rem}.pager button{min-width:36px}.pager button:disabled{opacity:.4}input,select,textarea,button{font-size:.8rem}@media (width>=901px){.app-shell{grid-template-columns:240px minmax(0,1fr)!important}.topbar{min-height:76px!important;padding:.8rem 1.25rem!important}}@media (width<=900px){.content,.content.playground{max-width:none!important;padding:10px!important}.topbar{min-height:64px!important;padding:.65rem 10px!important}.topbar h1{font-size:1.2rem!important}.pg>header,.compose,.sheet-title,.page>header{flex-direction:column!important;align-items:stretch!important}.results{grid-template-columns:minmax(0,1fr)!important}.grid,.sheet,.sheet-wrap,.terminal{max-height:calc(100dvh - 205px)}.grid table,.sheet table,.sheet-wrap table{min-width:980px!important}}@media (width<=560px){html{font-size:14px}.health-pill{padding-inline:.55rem!important}.breadcrumb,.nav-copy small{display:none!important}.filters,.filter-row,.checks{grid-template-columns:minmax(0,1fr)!important}.compose button{width:100%}table{font-size:.7rem}.grid,.sheet,.sheet-wrap,.terminal{max-height:calc(100dvh - 180px)}.pager{z-index:4;justify-content:space-between;position:sticky;bottom:0}}
|