cartethyia 2.5.2 → 2.5.4
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/dist/dashboard/assets/{BannedPage-MsQaeQTs.js → BannedPage-C2orBsI2.js} +1 -1
- package/dist/dashboard/assets/BannedPage-C2orBsI2.js.gz +0 -0
- package/dist/dashboard/assets/CliToolDetailPage-DUcZ6pMB.js +1 -0
- package/dist/dashboard/assets/CliToolDetailPage-DUcZ6pMB.js.gz +0 -0
- package/dist/dashboard/assets/{CliToolsPage-DfWHTJ7v.js → CliToolsPage-BV6pxVQo.js} +1 -1
- package/dist/dashboard/assets/CliToolsPage-BV6pxVQo.js.gz +0 -0
- package/dist/dashboard/assets/{CombosPage-BrCBQDAc.js → CombosPage-Bsan4679.js} +1 -1
- package/dist/dashboard/assets/CombosPage-Bsan4679.js.gz +0 -0
- package/dist/dashboard/assets/{ConsoleLogPage-C6Uh33er.js → ConsoleLogPage-CW-wPmJ6.js} +1 -1
- package/dist/dashboard/assets/ConsoleLogPage-CW-wPmJ6.js.gz +0 -0
- package/dist/dashboard/assets/{CustomizationPage-8aS9hyJu.js → CustomizationPage-0p8uX7vB.js} +1 -1
- package/dist/dashboard/assets/CustomizationPage-0p8uX7vB.js.gz +0 -0
- package/dist/dashboard/assets/HealthEventsModal-BjqSMfko.js +1 -0
- package/dist/dashboard/assets/HealthEventsModal-BjqSMfko.js.gz +0 -0
- package/dist/dashboard/assets/{LoginPage-C8hKyXBe.js → LoginPage-BvzCx8Kr.js} +1 -1
- package/dist/dashboard/assets/LoginPage-BvzCx8Kr.js.gz +0 -0
- package/dist/dashboard/assets/{ModelPicker-CWkTUtpX.js → ModelPicker-BY1aKEkP.js} +1 -1
- package/dist/dashboard/assets/ModelPicker-BY1aKEkP.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-DOQpy1y0.js +1 -0
- package/dist/dashboard/assets/OverviewPage-DOQpy1y0.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-ecxyUMzt.js +3 -0
- package/dist/dashboard/assets/ProviderDetailPage-ecxyUMzt.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-Js9jUPSb.js +1 -0
- package/dist/dashboard/assets/ProvidersPage-Js9jUPSb.js.gz +0 -0
- package/dist/dashboard/assets/ProxyPage-J3TBi3Kx.js +7 -0
- package/dist/dashboard/assets/ProxyPage-J3TBi3Kx.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-C1gZS6xr.js +1 -0
- package/dist/dashboard/assets/QuotaPage-C1gZS6xr.js.gz +0 -0
- package/dist/dashboard/assets/SettingsPage-CS86ho5X.js +1 -0
- package/dist/dashboard/assets/SettingsPage-CS86ho5X.js.gz +0 -0
- package/dist/dashboard/assets/{SetupPage-CXjUlfqr.js → SetupPage-DDbMQsoo.js} +1 -1
- package/dist/dashboard/assets/SetupPage-DDbMQsoo.js.gz +0 -0
- package/dist/dashboard/assets/{SortableList-C-_oD3F2.js → SortableList-CB3Z7VTf.js} +1 -1
- package/dist/dashboard/assets/SortableList-CB3Z7VTf.js.gz +0 -0
- package/dist/dashboard/assets/{StudioPage-u9IxmYOI.js → StudioPage-D95UCPHI.js} +3 -3
- package/dist/dashboard/assets/StudioPage-D95UCPHI.js.gz +0 -0
- package/dist/dashboard/assets/{UsagePage-BEVLVrwP.js → UsagePage-Cnae9SWA.js} +13 -13
- package/dist/dashboard/assets/UsagePage-Cnae9SWA.js.gz +0 -0
- package/dist/dashboard/assets/{api-keys-uNywYlfv.js → api-keys-VY68Mhd1.js} +1 -1
- package/dist/dashboard/assets/api-keys-VY68Mhd1.js.gz +0 -0
- package/dist/dashboard/assets/app-COlK95oi.css +2 -0
- package/dist/dashboard/assets/app-COlK95oi.css.gz +0 -0
- package/dist/dashboard/assets/{assert-NHwYq95t.js → assert-Chi7pCnt.js} +1 -1
- package/dist/dashboard/assets/assert-Chi7pCnt.js.gz +0 -0
- package/dist/dashboard/assets/{badge-6uzDDvqs.js → badge-D4pQapKj.js} +1 -1
- package/dist/dashboard/assets/badge-D4pQapKj.js.gz +0 -0
- package/dist/dashboard/assets/{banner-4_WNg2WZ.js → banner-DH6cg-_B.js} +1 -1
- package/dist/dashboard/assets/banner-DH6cg-_B.js.gz +0 -0
- package/dist/dashboard/assets/{card--AtFedAq.js → card-BKqlUOe4.js} +1 -1
- package/dist/dashboard/assets/card-BKqlUOe4.js.gz +0 -0
- package/dist/dashboard/assets/{cli-tools-B3e7dx3N.js → cli-tools-fTgljTGA.js} +1 -1
- package/dist/dashboard/assets/cli-tools-fTgljTGA.js.gz +0 -0
- package/dist/dashboard/assets/{clipboard-button-NreUx6c8.js → clipboard-button-D5Ys_sM0.js} +1 -1
- package/dist/dashboard/assets/clipboard-button-D5Ys_sM0.js.gz +0 -0
- package/dist/dashboard/assets/database-Dz9N3zGd.js +1 -0
- package/dist/dashboard/assets/database-Dz9N3zGd.js.gz +0 -0
- package/dist/dashboard/assets/{dialog-BtpsJU98.js → dialog-BYj-8WuK.js} +1 -1
- package/dist/dashboard/assets/dialog-BYj-8WuK.js.gz +0 -0
- package/dist/dashboard/assets/{drawer-WwwtzihF.js → drawer-CmXIZ6H1.js} +1 -1
- package/dist/dashboard/assets/drawer-CmXIZ6H1.js.gz +0 -0
- package/dist/dashboard/assets/entry-CBg5zeu8.js +1 -0
- package/dist/dashboard/assets/entry-CBg5zeu8.js.gz +0 -0
- package/dist/dashboard/assets/entry-CQBr6U9c.js +1 -0
- package/dist/dashboard/assets/entry-CQBr6U9c.js.gz +0 -0
- package/dist/dashboard/assets/entry-CgdSAzEV.js +4 -0
- package/dist/dashboard/assets/entry-CgdSAzEV.js.gz +0 -0
- package/dist/dashboard/assets/{github-badge-D_eM3IgG.js → github-badge-BlptL8Uf.js} +1 -1
- package/dist/dashboard/assets/github-badge-BlptL8Uf.js.gz +0 -0
- package/dist/dashboard/assets/{index-DCBtROoK.js → index-js6TJvdr.js} +2 -2
- package/dist/dashboard/assets/index-js6TJvdr.js.gz +0 -0
- package/dist/dashboard/assets/{inline-BcNGF8Gr.js → inline-DUWDSmDV.js} +1 -1
- package/dist/dashboard/assets/inline-DUWDSmDV.js.gz +0 -0
- package/dist/dashboard/assets/{input-BG41et9G.js → input-LVjgZq4f.js} +1 -1
- package/dist/dashboard/assets/input-LVjgZq4f.js.gz +0 -0
- package/dist/dashboard/assets/{layout-C8mer_Ak.js → layout-CPfxpsfy.js} +1 -1
- package/dist/dashboard/assets/layout-CPfxpsfy.js.gz +0 -0
- package/dist/dashboard/assets/{list-row-Gh_W4OR_.js → list-row-DupvLfDx.js} +1 -1
- package/dist/dashboard/assets/list-row-DupvLfDx.js.gz +0 -0
- package/dist/dashboard/assets/{live-BJGYRBnR.js → live-C4pEJUqI.js} +1 -1
- package/dist/dashboard/assets/live-C4pEJUqI.js.gz +0 -0
- package/dist/dashboard/assets/model-bans-BRiuufkB.js +1 -0
- package/dist/dashboard/assets/model-bans-BRiuufkB.js.gz +0 -0
- package/dist/dashboard/assets/{mutation-BkoLM5Ba.js → mutation-B4ROwk8L.js} +1 -1
- package/dist/dashboard/assets/mutation-B4ROwk8L.js.gz +0 -0
- package/dist/dashboard/assets/numbers-YNcHvRY7.js +2 -0
- package/dist/dashboard/assets/numbers-YNcHvRY7.js.gz +0 -0
- package/dist/dashboard/assets/{query-keys-D7wX2vM5.js → query-keys-gmjzC3RS.js} +1 -1
- package/dist/dashboard/assets/{query-keys-D7wX2vM5.js.gz → query-keys-gmjzC3RS.js.gz} +0 -0
- package/dist/dashboard/assets/{routing-CcusqXA7.js → routing-C7tBT5o-.js} +1 -1
- package/dist/dashboard/assets/routing-C7tBT5o-.js.gz +0 -0
- package/dist/dashboard/assets/{select-DsX5QT8K.js → select-WUCXorXw.js} +2 -2
- package/dist/dashboard/assets/select-WUCXorXw.js.gz +0 -0
- package/dist/dashboard/assets/{settings-mpmXTgUa.js → settings-C_zKl1GS.js} +1 -1
- package/dist/dashboard/assets/settings-C_zKl1GS.js.gz +0 -0
- package/dist/dashboard/assets/{stack-DwLmjUFK.js → stack-_3O0F8Xn.js} +1 -1
- package/dist/dashboard/assets/stack-_3O0F8Xn.js.gz +0 -0
- package/dist/dashboard/assets/{state-DYdQmdAl.js → state-BgTxHcJS.js} +1 -1
- package/dist/dashboard/assets/state-BgTxHcJS.js.gz +0 -0
- package/dist/dashboard/assets/switch-DEjTtOWf.js +1 -0
- package/dist/dashboard/assets/switch-DEjTtOWf.js.gz +0 -0
- package/dist/dashboard/assets/terminal-0_IjPWTk.js +1 -0
- package/dist/dashboard/assets/terminal-0_IjPWTk.js.gz +0 -0
- package/dist/dashboard/assets/{useMutation-w4u4CVue.js → useMutation-BWSC0UAS.js} +1 -1
- package/dist/dashboard/assets/useMutation-BWSC0UAS.js.gz +0 -0
- package/dist/dashboard/assets/zap-C4EeVW4q.js +1 -0
- package/dist/dashboard/assets/zap-C4EeVW4q.js.gz +0 -0
- package/dist/dashboard/donation/qris-risun-marke.png +0 -0
- package/dist/dashboard/index.html +1 -1
- package/dist/dashboard/index.html.gz +0 -0
- package/dist/dashboard/precompressed-assets.json +54 -54
- package/package.json +1 -1
- package/scripts/cli/autostart.ts +237 -0
- package/scripts/cli/command/console-menu.ts +244 -246
- package/scripts/cli/command/tray.ts +208 -204
- package/scripts/cli/command/update.ts +27 -10
- package/scripts/cli/main.ts +28 -1
- package/src/boot/app.ts +693 -693
- package/src/boot/dependencies.ts +646 -616
- package/src/config/spec.ts +81 -2
- package/src/config/telemetry.ts +46 -0
- package/src/console/api-keys/bucket-spend.ts +15 -4
- package/src/console/backup/contracts.ts +15 -2
- package/src/console/backup/routes.ts +52 -1
- package/src/console/backup/service.ts +60 -4
- package/src/console/console-router.ts +8 -0
- package/src/console/data-management/contracts.ts +93 -0
- package/src/console/data-management/operations.ts +229 -0
- package/src/console/data-management/routes.ts +104 -0
- package/src/console/domain-registration.ts +39 -0
- package/src/console/observability/contracts.ts +524 -485
- package/src/console/observability/store.ts +1115 -1018
- package/src/console/providers/catalog/contracts.ts +6 -0
- package/src/console/providers/catalog/provider-operations.ts +20 -0
- package/src/console/providers/catalog/routes.ts +7 -0
- package/src/console/providers/catalog/store.ts +22 -1
- package/src/console/quota/account-quota-shared.ts +52 -39
- package/src/console/quota/refresh.ts +441 -429
- package/src/console/routing/pools/import-parse.ts +206 -0
- package/src/console/routing/pools/operations.ts +543 -501
- package/src/console/routing/pools/routes.ts +181 -164
- package/src/console/settings/contracts.ts +37 -0
- package/src/console/settings/store.ts +51 -0
- package/src/console/share/share-router.ts +6 -9
- package/src/console/updates/routes.ts +16 -0
- package/src/main.ts +10 -0
- package/src/observability/event-compaction.ts +315 -0
- package/src/observability/event-day-index.ts +442 -0
- package/src/observability/event-log.ts +152 -3
- package/src/observability/payload-capture.ts +373 -344
- package/src/observability/payload-store.ts +440 -366
- package/src/observability/telemetry-status.ts +28 -16
- package/src/persistence/health-event-flush.ts +36 -0
- package/src/persistence/schema.ts +1402 -1360
- package/src/persistence/stores/api-key-store.ts +6 -0
- package/src/persistence/stores/share-store.ts +583 -556
- package/src/persistence/stores/telemetry-store.ts +237 -214
- package/src/protocol/codecs.ts +1 -2
- package/src/protocol/image-clamp.ts +19 -1
- package/src/protocol/registry.ts +8 -0
- package/src/protocol/request/gemini.ts +9 -2
- package/src/protocol/request/messages.ts +14 -2
- package/src/protocol/response/gemini.ts +18 -4
- package/src/providers/adapters/compatible-adapter.ts +3 -0
- package/src/providers/bundled-discovery-providers.ts +122 -119
- package/src/providers/configured-openai-providers.ts +136 -134
- package/src/providers/default-registry.ts +5 -4
- package/src/providers/discovery/openai-model-discovery.ts +5 -0
- package/src/providers/discovery/openrouter-free-roster.ts +15 -17
- package/src/providers/integrations/antigravity/antigravity-quota.ts +11 -3
- package/src/providers/integrations/buddy/buddy-catalog-shared.ts +4 -4
- package/src/providers/integrations/buddy/workbuddy/shared.ts +201 -200
- package/src/providers/integrations/cline/cline-quota.ts +132 -128
- package/src/providers/integrations/codex/codex-headers.ts +25 -39
- package/src/providers/integrations/codex/codex.ts +2 -29
- package/src/providers/integrations/cursor/cursor-quota.ts +310 -0
- package/src/providers/integrations/cursor/cursor-request.ts +616 -471
- package/src/providers/integrations/cursor/cursor-session-manager.ts +319 -281
- package/src/providers/integrations/cursor/cursor.ts +1485 -960
- package/src/providers/integrations/cursor/protocol/messages.ts +25 -0
- package/src/providers/integrations/factory/factory.ts +8 -1
- package/src/providers/integrations/gemini.ts +6 -1
- package/src/providers/integrations/grok/grok-quota.ts +279 -177
- package/src/providers/integrations/grok/grok-ratelimit-store.ts +73 -0
- package/src/providers/integrations/grok/grok-ratelimit.ts +218 -0
- package/src/providers/integrations/opencode/provider.ts +531 -532
- package/src/providers/integrations/qoder/qoder-quota.ts +192 -0
- package/src/providers/integrations/tokenharbor.ts +2 -2
- package/src/providers/integrations/trae/trae-catalog.ts +5 -3
- package/src/providers/integrations/trae/trae-quota.ts +384 -0
- package/src/providers/operations/account-health-service.ts +1523 -1457
- package/src/providers/operations/client-versions.ts +9 -2
- package/src/providers/provider-contracts.ts +7 -0
- package/src/providers/provider-metadata.ts +13 -1
- package/src/providers/quota/quota-support.ts +8 -0
- package/src/security/api-key-auth.ts +504 -494
- package/src/transport/dispatch/attempt-finalize.ts +46 -5
- package/src/transport/dispatch/generation.ts +6 -0
- package/src/transport/dispatch/proxy-request.ts +33 -1
- package/src/transport/dispatch/ratelimit-capture.ts +37 -0
- package/src/transport/dispatch/streaming/stream.ts +30 -2
- package/src/transport/dispatch/upstream.ts +9 -0
- package/src/transport/request/preparer.ts +7 -6
- package/src/transport/request/state.ts +9 -0
- package/src/transport/request/tenant-preferences.ts +60 -0
- package/src/transport/routing/route-catalog.ts +854 -799
- package/dist/dashboard/assets/BannedPage-MsQaeQTs.js.gz +0 -0
- package/dist/dashboard/assets/CliToolDetailPage-BO9nKg9w.js +0 -1
- package/dist/dashboard/assets/CliToolDetailPage-BO9nKg9w.js.gz +0 -0
- package/dist/dashboard/assets/CliToolsPage-DfWHTJ7v.js.gz +0 -0
- package/dist/dashboard/assets/CombosPage-BrCBQDAc.js.gz +0 -0
- package/dist/dashboard/assets/ConsoleLogPage-C6Uh33er.js.gz +0 -0
- package/dist/dashboard/assets/CustomizationPage-8aS9hyJu.js.gz +0 -0
- package/dist/dashboard/assets/HealthEventsModal-qomXThxX.js +0 -1
- package/dist/dashboard/assets/HealthEventsModal-qomXThxX.js.gz +0 -0
- package/dist/dashboard/assets/LoginPage-C8hKyXBe.js.gz +0 -0
- package/dist/dashboard/assets/ModelPicker-CWkTUtpX.js.gz +0 -0
- package/dist/dashboard/assets/OverviewPage-C-ExCy1V.js +0 -1
- package/dist/dashboard/assets/OverviewPage-C-ExCy1V.js.gz +0 -0
- package/dist/dashboard/assets/ProviderDetailPage-tr811uaF.js +0 -3
- package/dist/dashboard/assets/ProviderDetailPage-tr811uaF.js.gz +0 -0
- package/dist/dashboard/assets/ProvidersPage-BS9IEpvv.js +0 -1
- package/dist/dashboard/assets/ProvidersPage-BS9IEpvv.js.gz +0 -0
- package/dist/dashboard/assets/ProxyPage-Rn_qXScb.js +0 -7
- package/dist/dashboard/assets/ProxyPage-Rn_qXScb.js.gz +0 -0
- package/dist/dashboard/assets/QuotaPage-BihkgQSq.js +0 -1
- package/dist/dashboard/assets/QuotaPage-BihkgQSq.js.gz +0 -0
- package/dist/dashboard/assets/SettingsPage-DhiEjm6T.js +0 -1
- package/dist/dashboard/assets/SettingsPage-DhiEjm6T.js.gz +0 -0
- package/dist/dashboard/assets/SetupPage-CXjUlfqr.js.gz +0 -0
- package/dist/dashboard/assets/SortableList-C-_oD3F2.js.gz +0 -0
- package/dist/dashboard/assets/StudioPage-u9IxmYOI.js.gz +0 -0
- package/dist/dashboard/assets/UsagePage-BEVLVrwP.js.gz +0 -0
- package/dist/dashboard/assets/api-keys-uNywYlfv.js.gz +0 -0
- package/dist/dashboard/assets/app-DxivpfYG.css +0 -2
- package/dist/dashboard/assets/app-DxivpfYG.css.gz +0 -0
- package/dist/dashboard/assets/assert-NHwYq95t.js.gz +0 -0
- package/dist/dashboard/assets/badge-6uzDDvqs.js.gz +0 -0
- package/dist/dashboard/assets/banner-4_WNg2WZ.js.gz +0 -0
- package/dist/dashboard/assets/card--AtFedAq.js.gz +0 -0
- package/dist/dashboard/assets/cli-tools-B3e7dx3N.js.gz +0 -0
- package/dist/dashboard/assets/clipboard-button-NreUx6c8.js.gz +0 -0
- package/dist/dashboard/assets/dialog-BtpsJU98.js.gz +0 -0
- package/dist/dashboard/assets/download-A0SW9OCW.js +0 -1
- package/dist/dashboard/assets/download-A0SW9OCW.js.gz +0 -0
- package/dist/dashboard/assets/drawer-WwwtzihF.js.gz +0 -0
- package/dist/dashboard/assets/entry-Dj9AR0gY.js +0 -4
- package/dist/dashboard/assets/entry-Dj9AR0gY.js.gz +0 -0
- package/dist/dashboard/assets/entry-TJIye_jT.js +0 -1
- package/dist/dashboard/assets/entry-TJIye_jT.js.gz +0 -0
- package/dist/dashboard/assets/entry-jy9_4-Ke.js +0 -1
- package/dist/dashboard/assets/entry-jy9_4-Ke.js.gz +0 -0
- package/dist/dashboard/assets/github-badge-D_eM3IgG.js.gz +0 -0
- package/dist/dashboard/assets/index-DCBtROoK.js.gz +0 -0
- package/dist/dashboard/assets/inline-BcNGF8Gr.js.gz +0 -0
- package/dist/dashboard/assets/input-BG41et9G.js.gz +0 -0
- package/dist/dashboard/assets/layout-C8mer_Ak.js.gz +0 -0
- package/dist/dashboard/assets/list-row-Gh_W4OR_.js.gz +0 -0
- package/dist/dashboard/assets/live-BJGYRBnR.js.gz +0 -0
- package/dist/dashboard/assets/model-bans-DeVLDA7I.js +0 -1
- package/dist/dashboard/assets/model-bans-DeVLDA7I.js.gz +0 -0
- package/dist/dashboard/assets/mutation-BkoLM5Ba.js.gz +0 -0
- package/dist/dashboard/assets/numbers-Bs4LOOuf.js +0 -2
- package/dist/dashboard/assets/numbers-Bs4LOOuf.js.gz +0 -0
- package/dist/dashboard/assets/routing-CcusqXA7.js.gz +0 -0
- package/dist/dashboard/assets/select-DsX5QT8K.js.gz +0 -0
- package/dist/dashboard/assets/settings-mpmXTgUa.js.gz +0 -0
- package/dist/dashboard/assets/sparkles-BRaRUxAU.js +0 -1
- package/dist/dashboard/assets/sparkles-BRaRUxAU.js.gz +0 -0
- package/dist/dashboard/assets/stack-DwLmjUFK.js.gz +0 -0
- package/dist/dashboard/assets/state-DYdQmdAl.js.gz +0 -0
- package/dist/dashboard/assets/switch-CidSfbG7.js +0 -1
- package/dist/dashboard/assets/switch-CidSfbG7.js.gz +0 -0
- package/dist/dashboard/assets/terminal-Bd4ee8TA.js +0 -1
- package/dist/dashboard/assets/terminal-Bd4ee8TA.js.gz +0 -0
- package/dist/dashboard/assets/useMutation-w4u4CVue.js.gz +0 -0
- /package/dist/dashboard/assets/{app-CafWtVXA.js → app-DCQZRmHY.js} +0 -0
- /package/dist/dashboard/assets/{app-CafWtVXA.js.gz → app-DCQZRmHY.js.gz} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t,r as n,t as r}from"./jsx-runtime-CXUMngI_.js";import{r as i}from"./terminal-Bd4ee8TA.js";import{C as a,T as o,b as s,l as c,s as l,t as u}from"./numbers-Bs4LOOuf.js";import{t as d}from"./download-A0SW9OCW.js";import{t as f}from"./eye-off-Bk5g2luF.js";import{t as p}from"./eye-C_hawfH4.js";import{t as m}from"./gauge-BbIMy7MB.js";import{n as h,r as g,t as _}from"./state-DYdQmdAl.js";import{t as v}from"./dialog-BtpsJU98.js";import{t as y}from"./pencil-768ysRAr.js";import{t as ee}from"./plus-DIdX_g-x.js";import{t as b}from"./power-off-Yjw9GMJh.js";import{t as x}from"./rotate-ccw-CufcqITi.js";import{t as S}from"./shield-check-DVS0Foqh.js";import{t as C}from"./trash-Cppn5c3R.js";import{C as w,T,c as E,v as D,y as O}from"./assert-NHwYq95t.js";import{a as k,i as A,l as j,o as M,t as N}from"./query-keys-D7wX2vM5.js";import{t as P}from"./useMutation-w4u4CVue.js";import{R as te,rt as ne}from"./entry-Dj9AR0gY.js";import{n as re,r as ie,t as ae}from"./card--AtFedAq.js";import{n as oe}from"./download-dRFo5_Wu.js";import{t as F}from"./badge-6uzDDvqs.js";import{n as I}from"./input-BG41et9G.js";import{t as se}from"./select-DsX5QT8K.js";import{t as L}from"./switch-CidSfbG7.js";import{t as ce}from"./stack-DwLmjUFK.js";import{n as le}from"./inline-BcNGF8Gr.js";import{r as R,t as ue}from"./layout-C8mer_Ak.js";import{i as de,n as fe}from"./privacy-mode-GM8bej85.js";import{n as z}from"./live-BJGYRBnR.js";var pe=e(`cloud`,[[`path`,{d:`M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z`,key:`p7xjir`}]]),me=e(`power`,[[`path`,{d:`M12 2v10`,key:`mnfbl`}],[`path`,{d:`M18.4 6.6a9 9 0 1 1-12.77.04`,key:`obofu9`}]]),he=1e6,ge=1e8,_e=5e6,ve=`sin1`,ye=[{label:`Asia Pacific`,regions:[{id:`sin1`,label:`Singapore`},{id:`hkg1`,label:`Hong Kong`},{id:`icn1`,label:`Seoul`},{id:`hnd1`,label:`Tokyo`},{id:`kix1`,label:`Osaka`},{id:`bom1`,label:`Mumbai`},{id:`syd1`,label:`Sydney`}]},{label:`Europe`,regions:[{id:`fra1`,label:`Frankfurt`},{id:`cdg1`,label:`Paris`},{id:`lhr1`,label:`London`},{id:`arn1`,label:`Stockholm`},{id:`dub1`,label:`Dublin`}]},{label:`North America`,regions:[{id:`iad1`,label:`Washington, D.C.`},{id:`sfo1`,label:`San Francisco`},{id:`pdx1`,label:`Portland`},{id:`cle1`,label:`Cleveland`},{id:`yul1`,label:`Montréal`}]},{label:`Other`,regions:[{id:`gru1`,label:`São Paulo`},{id:`cpt1`,label:`Cape Town`},{id:`dxb1`,label:`Dubai`}]}];function be(){return w({queryKey:N.network.pools,queryFn:e=>M(`/network/pools`,{signal:D(e)}).then(E),staleTime:A.staleTime,gcTime:A.gcTime})}function xe(){let e=T();return P({mutationFn:e=>M(`/network/pools`,{method:`POST`,body:JSON.stringify(e)}),onSuccess:async()=>{await e.invalidateQueries({queryKey:N.network.pools}),l.success(`Proxy pool created`)},onError:e=>{l.error(`Could not create the proxy pool.`,j(e))}})}function Se(){let e=T();return P({mutationFn:e=>M(`/network/pools/relay/deploy`,{method:`POST`,body:JSON.stringify(e)}),onSuccess:async()=>{await e.invalidateQueries({queryKey:N.network.pools})}})}function Ce(){return P({mutationFn:e=>M(`/network/pools/test-batch`,{method:`POST`,body:JSON.stringify({targets:e})})})}function we(){let e=T();return P({mutationFn:({poolId:e,request:t})=>M(`/network/pools/${encodeURIComponent(e)}`,{method:`PATCH`,body:JSON.stringify(t)}),onSuccess:async()=>{await e.invalidateQueries({queryKey:N.network.pools}),l.success(`Proxy updated`)},onError:e=>{l.error(`Could not update the proxy pool.`,j(e))}})}function Te(e){return w({queryKey:[...N.network.pools,e,`health-events`],queryFn:t=>M(`/network/pools/${encodeURIComponent(e??``)}/health-events`,{signal:D(t)}),enabled:!!e,...A,refetchInterval:k.status})}function Ee(){let e=T();return P({mutationFn:e=>M(`/network/pools/${encodeURIComponent(e)}/recover`,{method:`POST`,body:`{}`}),onSuccess:async(t,n)=>{await Promise.all([e.invalidateQueries({queryKey:N.network.pools}),e.invalidateQueries({queryKey:[...N.network.pools,n,`health-events`]})]),l.success(`Proxy pool recovered`)},onError:e=>{l.error(`Could not recover the proxy pool.`,j(e))}})}function De(){let e=T();return P({mutationFn:e=>M(`/network/pools/${encodeURIComponent(e)}`,{method:`DELETE`}),onSuccess:async()=>{await e.invalidateQueries({queryKey:N.network.pools}),l.success(`Proxy pool deleted`)},onError:e=>{l.error(`Could not delete the proxy pool.`,j(e))}})}function Oe(){let e=T();return P({mutationFn:({poolId:e,providerId:t})=>M(`/network/pools/${encodeURIComponent(e)}/provider-probe`,{method:`POST`,body:JSON.stringify({providerId:t})}),onSuccess:async()=>{await e.invalidateQueries({queryKey:N.network.pools})}})}function ke(){return P({mutationFn:({providerId:e,targets:t})=>M(`/network/pools/test-batch/provider`,{method:`POST`,body:JSON.stringify({providerId:e,targets:t})})})}function Ae(){let e=T();return P({mutationFn:e=>M(`/network/pools/${encodeURIComponent(e)}/health-check`,{method:`POST`,body:`{}`}),onSuccess:async()=>{await e.invalidateQueries({queryKey:N.network.pools}),l.success(`Health check complete`)},onError:e=>{l.error(`Health check failed.`,j(e))}})}function je(){let e=T();return P({mutationFn:({poolId:e,bytes:t})=>M(`/network/pools/${encodeURIComponent(e)}/speed-test`,{method:`POST`,body:JSON.stringify({bytes:t})}),onSuccess:async()=>{await e.invalidateQueries({queryKey:N.network.pools})}})}function Me(){let e=T();return P({mutationFn:({poolId:e,providerId:t})=>M(`/network/pools/${encodeURIComponent(e)}/cooldowns/clear`,{method:`POST`,body:JSON.stringify(t?{providerId:t}:{})}),onSuccess:async()=>{await e.invalidateQueries({queryKey:N.network.pools}),l.success(`Provider cooldowns cleared`)},onError:e=>{l.error(`Could not clear provider cooldowns.`,j(e))}})}var B=t(n(),1),V=r(),H={cloudflare:{label:`Cloudflare Workers`,tokenLabel:`Cloudflare API token`,needsAccount:!0,host:`*.workers.dev`,hasRegion:!1},vercel:{label:`Vercel`,tokenLabel:`Vercel API token`,needsAccount:!1,host:`*.vercel.app`,hasRegion:!0},deno:{label:`Deno Deploy`,tokenLabel:`Deno Deploy token`,needsAccount:!1,host:`*.deno.dev`,hasRegion:!1}},Ne=ye.flatMap(e=>e.regions.map(t=>({value:t.id,label:`${e.label} — ${t.label}`})));function Pe({onClose:e}){let t=Se(),[n,r]=(0,B.useState)(`cloudflare`),[i,a]=(0,B.useState)(ve),[o,u]=(0,B.useState)(``),[d,f]=(0,B.useState)(``),[p,m]=(0,B.useState)(``),[h,g]=(0,B.useState)(null),_=H[n],y=o.trim().length>0&&(!_.needsAccount||d.trim().length>0);return(0,V.jsx)(v,{open:!0,onClose:e,title:`Deploy Relay`,description:`Run outbound traffic through a hosted relay (Cloudflare, Vercel, Deno).`,size:`md`,children:(0,V.jsxs)(ce,{gap:`12px`,children:[(0,V.jsxs)(`p`,{className:`text-badge text-text-tertiary m-0 flex gap-3`,children:[(0,V.jsx)(ne,{size:13,className:`shrink-0 mt-0.5`}),(0,V.jsxs)(`span`,{children:[`Deploys a small relay worker to your own `,_.label,` account and registers its URL (`,(0,V.jsx)(`code`,{children:_.host}),`) as an active HTTP pool. Your API token is used only for the deploy and is never stored.`]})]}),(0,V.jsx)(se,{label:`Relay host`,id:`relay-target`,value:n,onValueChange:e=>r(e),options:O.map(e=>({value:e,label:H[e].label}))}),(0,V.jsx)(I,{label:_.tokenLabel,id:`relay-token`,type:`password`,value:o,placeholder:`Paste a deploy token`,onChange:e=>u(e.target.value)}),_.needsAccount?(0,V.jsx)(I,{label:`Account ID`,id:`relay-account`,value:d,placeholder:`Cloudflare account id`,onChange:e=>f(e.target.value)}):null,(0,V.jsx)(I,{label:`Project name (optional)`,id:`relay-project`,value:p,placeholder:`e.g. cartethyia-relay`,onChange:e=>m(e.target.value)}),_.hasRegion?(0,V.jsx)(se,{label:`Deploy region`,id:`relay-region`,value:i,onValueChange:e=>a(e),options:Ne}):null,_.hasRegion?(0,V.jsx)(`p`,{className:`text-badge text-text-tertiary m-0`,children:`Sets the region on the Vercel project, which is what decides the country outbound traffic leaves from. A region sent on the deployment alone is accepted but does not move the Function.`}):null,(0,V.jsxs)(`div`,{className:`flex items-center gap-5`,children:[(0,V.jsx)(c,{variant:`primary`,size:`sm`,onClick:()=>{y&&t.mutate({target:n,token:o.trim(),..._.needsAccount&&d.trim()?{accountId:d.trim()}:{},...p.trim()?{projectName:p.trim()}:{},..._.hasRegion?{region:i}:{}},{onSuccess:e=>{g(e.relayUrl),u(``),l.success(`Relay deployed to ${e.relayUrl} and registered as a pool.`)},onError:e=>l.error(j(e,`Relay deploy failed.`))})},disabled:!y||t.isPending,children:t.isPending?`Deploying…`:`Deploy relay`}),h?(0,V.jsxs)(`span`,{className:`mt-1 text-badge text-text-tertiary`,children:[`Registered pool at `,(0,V.jsx)(`code`,{children:h})]}):null]}),t.isError?(0,V.jsxs)(`p`,{className:`text-badge text-red m-0 flex gap-3`,children:[(0,V.jsx)(s,{size:13,className:`shrink-0 mt-0.5`}),(0,V.jsx)(`span`,{children:j(t.error,`Relay deploy failed.`)})]}):null]})})}function Fe(e,t){if(e!==void 0)return e.endpoint===``||e.endpoint===(t??``)?e.result:void 0}function Ie(e,t,n){switch(t){case`name`:return(e.label||e.endpoint).toLowerCase();case`family`:return e.family===void 0||e.family===null||e.family===``?null:e.family.toLowerCase();case`address`:return e.egressIp??null;case`load`:return n??null}}function Le(e,t,n,r){let i=n===`asc`?1:-1;return[...e].sort((e,n)=>{let a=Ie(e,t,r(e)),o=Ie(n,t,r(n));return a===null&&o===null?0:a===null?1:o===null?-1:typeof a==`number`&&typeof o==`number`?(a-o)*i:String(a).localeCompare(String(o))*i})}function U(e,t){let n=e.filter(e=>e.status===`active`),r=n.reduce((e,t)=>e+t.maxInflight,0),i=t===void 0?n.reduce((e,t)=>e+(t.inflight??0),0):n.reduce((e,n)=>e+(t.get(n.id)??0),0),a=0,o=0;for(let e of n)(t===void 0?e.inflight??0:t.get(e.id)??0)>=e.maxInflight?o+=1:a+=1;let s=null,c=Date.now(),l=e=>{if(!e)return;let t=Date.parse(e);if(Number.isNaN(t))return;let n=t-c;n<=0||(s===null||n<s)&&(s=n)};for(let t of e){l(t.cooldownUntil);for(let e of t.providerCooldowns??[])l(e.until)}let u=n.filter(e=>e.lastLatencyMs!==void 0&&Number.isFinite(e.lastLatencyMs)),d=u.length===0?null:Math.round(u.reduce((e,t)=>e+(t.lastLatencyMs??0),0)/u.length);return{totalPools:e.length,active:n.length,cooldown:e.filter(e=>e.status===`cooldown`).length,totalMaxConcurrency:r,usedInflight:i,availableCapacity:Math.max(0,r-i),routablePools:a,saturatedPools:o,soonestCooldownMs:s,avgLatencyMs:d,measuredPools:u.length}}var W=[`http`,`https`,`socks5`];function G(e){return/^[a-z][a-z0-9+.-]*:\/\//i.test(e.trim())}function Re(e,t){let n=e.trim();return t===null||G(n)?n:`${t}://${n}`}function K(e){return e.find(e=>e.trim()!==``)}function q(e){let t=e.trim().toLowerCase();return t.startsWith(`https://`)?`https`:t.startsWith(`socks5://`)||t.startsWith(`socks://`)?`socks5`:`http`}var ze=1024**3;function Be(e){let t=e.trim();if(t===``)return null;let n=Number(t);return!Number.isFinite(n)||n<=0?null:Math.max(1,Math.round(n*ze))}function J(e,t,n){let r=new Map;if(t.trim().toLowerCase()===``||n<=0)return r;let i=Math.floor(e/n),a=e-i*n;for(let e=0;e<n;e+=1){let t=e===n-1?a:0;r.set(e,i+t)}return r}var Ve=4,He=`cartethyia_proxy_test_payload`,Ue=`cartethyia_proxy_check_results`,We=[{value:`url`,label:`Test URL`},{value:`opencode`,label:`Test OpenCode`}],Ge=`opencode`,Ke=4,qe=`Mysterious Proxy`;function Y(e){return e.avgLatencyMs===null?`no measurement yet`:`avg across ${e.measuredPools} enabled ${e.measuredPools===1?`pool`:`pools`}`}function Je(e){let t=e.endpoint||``,n=t.includes(`://`)?t:`${e.kind}://${t}`,r={"https:":`443`,"http:":`80`,"socks5:":`1080`,"socks:":`1080`};try{let e=new URL(n),t=e.port||r[e.protocol]||``,i=`${e.hostname}${t?`:${t}`:``}`;return{name:i,endpoint:`${e.protocol}//${i}${e.pathname===`/`?``:e.pathname}${e.search}`}}catch{return{name:e.label||t,endpoint:t}}}function X(e){return e.label||Je(e).name||e.id}var Z=1024**3;function Ye(e){if(e.lastSpeedtestStatus===void 0||e.lastSpeedtestAt===void 0)return;let t=e.lastSpeedtestDurationMs??0,n=e.lastSpeedtestBytes??0,r=t>0?n/(t/1e3):void 0;return{poolId:e.id,status:e.lastSpeedtestStatus,bytes:n,durationMs:t,...r===void 0?{}:{bytesPerSecond:r,megabitsPerSecond:r*8/1e6},...e.lastSpeedtestError?{errorMessage:e.lastSpeedtestError}:{},measuredAt:e.lastSpeedtestAt}}function Xe(e,t){if(!e)return t;if(!t)return e;let n=e.measuredAt?new Date(e.measuredAt).getTime():0;return(t.measuredAt?new Date(t.measuredAt).getTime():0)>=n?t:e}var Ze=[{value:String(he),label:`1 MB`},{value:String(_e),label:`5 MB`},{value:`50000000`,label:`50 MB`},{value:String(ge),label:`100 MB`}];function Qe({pool:e,onClose:t,actionsRef:n}){let r=we(),i=ke(),s=Ae(),[d,f]=(0,B.useState)(e.label??``),[p,m]=(0,B.useState)(e.family??``),[h,g]=(0,B.useState)(e.endpoint??``),[_,v]=(0,B.useState)(String(e.maxInflight??10)),[y,ee]=(0,B.useState)(String(e.weight??100)),[b,x]=(0,B.useState)(e.quotaBytes?String(Math.round(e.quotaBytes/Z*1e3)/1e3):``),[S,C]=(0,B.useState)(null),[w,T]=(0,B.useState)(!1),E=h.trim()===e.endpoint,D=async()=>{T(!0),C(null);try{if(E){let t=await s.mutateAsync(e.id),n=t.status===`healthy`||t.status===`reachable`;C({ok:n,message:t.status===`healthy`?`Connected in ${t.latencyMs??0}ms`:t.errorMessage??`Connection failed`});return}let t=[{kind:e.kind,endpoint:h.trim(),...e.family===null||e.family===void 0?{}:{family:e.family}}],[n]=await i.mutateAsync({providerId:Ge,targets:t}),r=n?.result;if(!r){C({ok:!1,message:`Probe returned no result`});return}let a=r.status===`allowed`||r.status===`throttled`;C({ok:a,message:r.reason??(r.status===`allowed`?`Reachable${r.latencyMs===void 0?``:` in ${r.latencyMs}ms`}`:r.status===`throttled`?`Reachable; rate limit spent`:`Probe could not complete`)})}catch(e){C({ok:!1,message:j(e,`Connection failed`)})}finally{T(!1)}},O=Be(b),k=async()=>{await r.mutateAsync({poolId:e.id,request:{...d.trim()===e.label?{}:{label:d.trim()||void 0},...p.trim()===(e.family??``)?{}:{family:p.trim()||null},...h.trim()!==e.endpoint&&h.trim()!==``?{endpoint:h.trim()}:{},...Number(_)===e.maxInflight?{}:{maxInflight:Number(_)},...Number(y)===e.weight?{}:{weight:Number(y)},...O===(e.quotaBytes??null)?{}:{quotaBytes:O}}}),l.success(`Proxy updated`),t()};return(0,B.useEffect)(()=>{n?.((0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(c,{variant:`secondary`,size:`sm`,onClick:t,children:`Cancel`}),(0,V.jsx)(c,{variant:`primary`,size:`sm`,disabled:r.isPending||!h.trim(),onClick:()=>void k(),children:`Save`})]}))}),(0,V.jsxs)(ce,{gap:`12px`,children:[(0,V.jsx)(`div`,{children:(0,V.jsx)(I,{label:`Name`,value:d,onChange:e=>f(e.target.value)})}),(0,V.jsx)(`div`,{children:(0,V.jsx)(I,{label:`Family`,value:p,placeholder:`e.g. residential-id`,onChange:e=>m(e.target.value)})}),(0,V.jsx)(`div`,{children:(0,V.jsx)(I,{label:`Endpoint`,value:h,onChange:e=>g(e.target.value),className:`font-mono tabular-nums`})}),(0,V.jsxs)(`div`,{className:`grid grid-cols-2 gap-5`,children:[(0,V.jsx)(`div`,{children:(0,V.jsx)(I,{label:`Max concurrent`,type:`number`,min:1,value:_,onChange:e=>v(e.target.value)})}),(0,V.jsx)(`div`,{children:(0,V.jsx)(I,{label:`Weight`,type:`number`,min:1,value:y,onChange:e=>ee(e.target.value)})})]}),(0,V.jsxs)(`div`,{children:[(0,V.jsx)(I,{label:`Bandwidth quota (GB, blank = unmetered)`,type:`number`,min:.001,step:`0.1`,value:b,onChange:e=>x(e.target.value)}),(0,V.jsx)(`div`,{className:`text-micro text-text-tertiary mt-2`,children:O===null?`No quota — the bar shows a running total only.`:`Bar turns orange at 80% and red once ${u(O)} is exceeded.`})]}),S&&(0,V.jsx)(`div`,{className:`rounded-inset px-6 py-4 text-badge font-semibold ${S.ok?`bg-green-soft text-green`:`bg-red-soft text-red`}`,children:S.message}),(0,V.jsx)(`div`,{children:(0,V.jsx)(c,{variant:`secondary`,size:`sm`,disabled:w,icon:w?(0,V.jsx)(a,{size:13,className:`animate-spin`}):(0,V.jsx)(o,{size:13}),onClick:()=>void D(),children:w?`Testing…`:`Test connection`})})]})}function $e({endpoint:e,chip:t,onChipChange:n}){return(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,role:`group`,"aria-label":`Scheme for the first endpoint`,children:[(0,V.jsx)(`span`,{className:`text-badge text-text-secondary`,children:`Scheme`}),W.map(r=>{let i=t===r;return(0,V.jsxs)(c,{type:`button`,variant:i?`primary`:`secondary`,size:`sm`,disabled:e===void 0,"aria-pressed":i,"data-scheme":r,onClick:()=>n(i?null:r),className:`font-mono`,children:[r,`://`]},r)}),t!==null&&(0,V.jsxs)(`span`,{className:`text-badge text-text-tertiary`,children:[`→ `,Re(e??``,t)]})]})}function et({onClose:e,actionsRef:t,onProbeResult:n,onHealthResult:r}){let i=xe(),a=Ce(),o=ke(),[s,u]=(0,B.useState)(``),[d,f]=(0,B.useState)(``),[p,m]=(0,B.useState)(``),[h,g]=(0,B.useState)(null),[_,v]=(0,B.useState)([]),[y,ee]=(0,B.useState)({}),[b,x]=(0,B.useState)({}),[S,C]=(0,B.useState)(!1),[w,T]=(0,B.useState)(null),E=s.split(`
|
|
2
|
-
`).map(e=>e.trim()).filter(Boolean),D=K(E),O=(0,B.useMemo)(()=>w===null||D===void 0?E:E.map((e,t)=>e===D&&t===0?Re(e,w):e),[E,w,D]),k=E.length>100,A=Be(p),M=(0,B.useMemo)(()=>O.map(e=>({kind:q(e),endpoint:e})),[O]),N=async()=>{try{let e=await navigator.clipboard.readText();e&&u(t=>t?`${t}\n${e}`:e)}catch{l.error(`Paste failed`,`Clipboard access denied`)}},P=async()=>{if(M.length!==0){v([`Testing ${M.length} proxy target(s)…`]);try{let e=await a.mutateAsync(M),t=e.map(e=>{let t=e.result.status===`healthy`||e.result.status===`reachable`,n=e.result.latencyMs===void 0?``:` · ${e.result.latencyMs}ms`,r=e.result.egressIp?` · ${e.result.egressIp}`:``,i=t?``:` · ${e.result.errorMessage??e.result.status}`;return`${t?`OK `:`FAIL`} ${e.endpoint}${n}${r}${i}`}),n=e.filter(e=>e.result.status===`healthy`||e.result.status===`reachable`).length;x(t=>{let n={...t};for(let t of e)n[t.endpoint]=t.result;return n}),v([`${n}/${e.length} reachable`,...t]),n===e.length?l.success(`All ${e.length} proxies reachable`):l.error(`${e.length-n} of ${e.length} proxies failed`)}catch(e){v([`Test failed: ${j(e,`batch probe failed`)}`]),l.error(`Test failed`,j(e,`batch probe failed`))}}},te=async()=>{if(M.length!==0){v([`Testing ${M.length} proxy target(s) against OpenCode…`]);try{let e=await o.mutateAsync({providerId:Ge,targets:M}),t=e.map(e=>{let{status:t,latencyMs:n,reason:r}=e.result,i=n===void 0?``:` · ${n}ms`,a=r===void 0?``:` · ${r}`;return`${t===`allowed`?`OK `:t===`blocked`?`BLOCK`:`FAIL`} ${e.endpoint}${i}${a}`});ee(t=>{let n={...t};for(let t of e)n[t.endpoint]=t.result;return n});let n=e.filter(e=>e.result.status===`allowed`).length,r=e.filter(e=>e.result.status===`blocked`).length;v([`${n}/${e.length} allowed · ${r} blocked`,...t]),r===0&&n===e.length?l.success(`OpenCode accepted all ${e.length} proxies`):l.error(`OpenCode: ${n} allowed · ${r} blocked`)}catch(e){v([`Test failed: ${j(e,`provider probe failed`)}`]),l.error(`Test failed`,j(e,`provider probe failed`))}}};return(0,B.useEffect)(()=>{t?.((0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(c,{variant:`secondary`,type:`button`,onClick:e,children:`Cancel`}),(0,V.jsx)(c,{variant:`primary`,type:`submit`,form:`add-proxy-form`,disabled:S||E.length===0,children:S?`Adding…`:`Add ${E.length} Prox${E.length===1?`y`:`ies`}`})]}))},[t,S,E.length,e]),(0,V.jsxs)(`form`,{id:`add-proxy-form`,onSubmit:async t=>{if(t.preventDefault(),E.length!==0){g(null),C(!0);try{let t=A===null?new Map:J(A,d,O.length),a=Array(E.length),o=0,s=async()=>{for(;o<E.length;){let e=o++,s=O[e];try{let o=await i.mutateAsync({kind:q(s),endpoint:s,...t.has(e)?{quotaBytes:t.get(e)}:{},...d.trim()===``?{}:{family:d.trim()}}),c=y[s],l=b[s];o?.id&&(l!==void 0&&r?.(o.id,l),c!==void 0&&n?.(o.id,c)),a[e]={ok:!0}}catch(t){a[e]={ok:!1,error:j(t,`Proxy pool creation failed`)}}}};await Promise.all(Array.from({length:Math.min(Ve,E.length)},()=>s()));let c=[],f=0;for(let[e,t]of a.entries())t.ok?f++:c.length<3&&c.push(`${E[e].slice(0,48)}…: ${t.error}`);let p=E.length-f,m=a.find(e=>!e.ok)?.error;f>0&&l.success(`Added ${f} proxy pool(s)`,p?`${p} failed: ${m??`see the import details`}`:void 0),p>0&&f===0&&l.error(`Failed to create pool`,m??`See the import details`),p>0&&g(c.join(`
|
|
3
|
-
`)),f>0&&(u(``),e())}finally{C(!1)}}},className:`flex flex-col gap-4`,children:[(0,V.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,V.jsx)(`label`,{htmlFor:`proxy-endpoints`,className:`text-caption font-semibold text-text-primary`,children:`Proxy endpoints`}),(0,V.jsx)(c,{variant:`secondary`,size:`sm`,type:`button`,onClick:N,children:`Paste`})]}),(0,V.jsx)(`textarea`,{id:`proxy-endpoints`,value:s,onChange:e=>u(e.target.value),placeholder:`http://proxy.example:8080
|
|
4
|
-
https://proxy.example:8443
|
|
5
|
-
socks5://proxy.example:1080`,rows:5,"aria-describedby":`proxy-format-hint proxy-line-count`,"aria-invalid":!!h,className:`w-full min-h-32 max-h-64 resize-y overflow-y-auto rounded-control border border-inner-border bg-surface-1 p-3 font-mono text-caption text-text-primary outline-none transition-[border-color,box-shadow] duration-(--dur-micro) ease-spring focus:border-accent focus:shadow-focus`}),(0,V.jsx)($e,{endpoint:D,chip:w,onChipChange:T}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-x-4 gap-y-2`,children:[(0,V.jsx)(`p`,{id:`proxy-format-hint`,className:`m-0 text-badge leading-normal text-text-secondary`,children:`HTTP, HTTPS, or SOCKS5 | one per line | authentication optional`}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,V.jsxs)(`span`,{id:`proxy-line-count`,role:`status`,"aria-live":`polite`,className:`text-badge ${k?`text-red`:`text-text-tertiary`}`,children:[E.length===1?`1 proxy detected`:`${E.length} proxies detected`,k?` · max 100 per test`:``]}),(0,V.jsx)(c,{variant:`secondary`,size:`sm`,type:`button`,onClick:()=>void P(),disabled:a.isPending||o.isPending||E.length===0||k,children:a.isPending?`Testing…`:`Test URL`}),(0,V.jsx)(c,{variant:`secondary`,size:`sm`,type:`button`,onClick:()=>void te(),disabled:a.isPending||o.isPending||E.length===0||k,children:o.isPending?`Testing…`:`Test OpenCode`})]})]}),h&&(0,V.jsx)(`div`,{role:`alert`,className:`max-h-28 overflow-y-auto rounded-inset bg-red-soft px-4 py-3 text-badge text-red whitespace-pre-wrap break-words`,children:h}),_.length>0&&(0,V.jsx)(`div`,{role:`log`,"aria-label":`Proxy test results`,"aria-live":`polite`,className:`scroll-region max-h-40 overflow-y-auto whitespace-pre-wrap break-all rounded-inset border border-inner-border bg-surface-1 px-3 py-2 font-mono text-badge leading-[1.5] text-text-secondary`,children:_.join(`
|
|
6
|
-
`)}),(0,V.jsxs)(`div`,{className:`grid grid-cols-1 gap-4 sm:grid-cols-2`,children:[(0,V.jsx)(I,{id:`proxy-family`,label:`Family`,hint:`Optional`,value:d,placeholder:`e.g. residential-id`,onChange:e=>f(e.target.value),className:`w-full`}),(0,V.jsx)(I,{id:`proxy-quota`,label:`Bandwidth quota (GB)`,hint:`Optional`,type:`number`,min:.001,step:`0.1`,value:p,onChange:e=>m(e.target.value),className:`w-full`})]})]})}function tt(e,t){if(t?.status===`healthy`||t?.status===`reachable`)return t.latencyMs;if(e.lastSuccessAt)return e.lastLatencyMs??void 0}function nt(e){if(e===`proxy_payment_required`)return`HTTP 402 Payment Required`;if(e===`proxy_auth_required`)return`HTTP 407 Proxy Authentication Required`}var Q=(0,B.createContext)({byId:new Map,live:!1});function rt({children:e}){let t=z(),n=(0,B.useMemo)(()=>new Map((t.pools??[]).map(e=>[e.poolId,e])),[t.pools]),r=(0,B.useMemo)(()=>({byId:n,live:t.live&&t.pools!==null}),[n,t.live,t.pools]);return(0,V.jsx)(Q.Provider,{value:r,children:e})}function it({pools:e}){let{byId:t,live:n}=(0,B.useContext)(Q),r=(0,B.useMemo)(()=>U(e,n?new Map([...t].map(([e,t])=>[e,t.currentInflight])):void 0),[e,t,n]),a=(0,B.useMemo)(()=>{let r=0,i=0;for(let a of e){let e=n?t.get(a.id):void 0,o=(a.bytesSentTotal??0)+(a.bytesReceivedTotal??0),s=(e?.bytesSent??0)+(e?.bytesReceived??0);r+=Math.max(o,s),a.quotaBytes&&(i+=a.quotaBytes)}return{used:r,allowance:i}},[e,t,n]);return(0,V.jsxs)(`div`,{className:`signal-grid grid gap-7 w-full min-w-0 mb-7`,children:[(0,V.jsx)(R,{label:`Enabled pool`,value:String(r.active),detail:`/ ${r.totalPools} total`,tone:`accent`,icon:(0,V.jsx)(S,{size:13})}),(0,V.jsx)(R,{label:`Route capacity`,value:String(r.totalMaxConcurrency),detail:`${r.usedInflight} inflight · ${r.availableCapacity} available`,tone:r.availableCapacity===0?`orange`:`teal`,icon:(0,V.jsx)(m,{size:13})}),(0,V.jsx)(R,{label:`Latency`,value:r.avgLatencyMs===null?`—`:`${r.avgLatencyMs}ms`,detail:Y(r),tone:r.avgLatencyMs===null?`accent`:r.avgLatencyMs>2e3?`orange`:`teal`,icon:(0,V.jsx)(i,{size:13})}),(0,V.jsx)(R,{label:`Quota usage`,value:u(a.used),detail:a.allowance>0?`of ${u(a.allowance)} allowance · ${e.length} pools`:`${e.length} pools · no allowance set`,tone:a.allowance>0&&a.used>a.allowance?`red`:a.allowance>0&&a.used/a.allowance>=.8?`orange`:`teal`,icon:(0,V.jsx)(pe,{size:13})})]})}function $(e,t,n,r,i){let a=Je(e),o=X(e),s=e.status!==`disabled`,c=nt(e.lastErrorCategory),l=e.status===`disabled`&&c!==void 0,u=e.lastSuccessAt?new Date(e.lastSuccessAt).getTime():0,d=e.lastErrorAt?new Date(e.lastErrorAt).getTime():0,f=!t&&(u>0||d>0)?u>=d:null,p=n?`default`:l?`warn`:t?t.status===`healthy`?`ok`:t.status===`reachable`?`warn`:`err`:f===!0?`ok`:f===!1?`err`:`default`,m=l?e.lastError??c:t?.errorMessage??(f===null?void 0:`last check ${(e.lastHealthCheckAt?new Date(e.lastHealthCheckAt):new Date).toLocaleString()}`),h=tt(e,t),g=r?.currentInflight??e.inflight,_=e.maxInflight>0?Math.min(1,g/e.maxInflight):1,v=e.providerCooldowns??[],y=v.filter(e=>e.blocked===!0),ee=v.filter(e=>e.blocked!==!0),b=v.slice(0,2).map(e=>e.blocked===!0?`${e.providerId} blocked: ${e.reason}`:`${e.providerId} until ${new Date(e.until).toLocaleTimeString()}: ${e.reason}`).join(` · `),x=n?`Testing…`:l?`Proxy reachable`:t?t.status===`healthy`?`Connected`:t.status===`reachable`?`Proxy reachable`:t.status===`timeout`?`Timeout`:`Unhealthy`:f===!0?`Connected`:f===!1?e.lastErrorCategory===`timeout`?`Timeout`:`Unhealthy`:`Untested`,S=(e.bytesSentTotal??0)+(e.bytesReceivedTotal??0),C=(r?.bytesSent??0)+(r?.bytesReceived??0);return{display:a,poolLabel:o,isEnabled:s,checkTone:p,checkTooltip:m,statusText:x,latency:h,inflight:g,load:_,cooldowns:v,blocked:y,cooldownOnly:ee,cooldownText:b,...i===void 0?{}:{probe:i},metered:S,session:C,used:Math.max(S,C),proxyFailureLabel:c}}function at({pool:e,view:t,maskValues:n}){return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`span`,{className:`block text-caption font-semibold overflow-hidden truncate whitespace-nowrap`,title:n?qe:t.poolLabel,children:n?qe:t.poolLabel}),(0,V.jsxs)(`div`,{className:`flex items-center gap-3 mt-1.5 min-w-0 flex-wrap`,children:[e.status===`disabled`?(0,V.jsxs)(F,{tone:`disabled`,title:e.lastError,children:[`Disabled`,t.proxyFailureLabel?` · ${t.proxyFailureLabel}`:``]}):(0,V.jsx)(F,{tone:t.checkTone,title:t.checkTooltip,children:t.latency===void 0?t.statusText:`${t.statusText} · ${t.latency}ms`}),t.blocked.length>0?(0,V.jsxs)(F,{tone:`disabled`,title:t.cooldownText,children:[t.blocked.length,` blocked`]}):null,t.probe?(0,V.jsx)(F,{tone:t.probe.status===`blocked`?`disabled`:t.probe.status===`allowed`?`ok`:`warn`,title:t.probe.reason??(t.probe.status===`allowed`?t.probe.httpStatus!==void 0&&t.probe.httpStatus>=400?`Reachable — upstream answered ${t.probe.httpStatus} for the probe body`:`OpenCode served a probe through this pool`:t.probe.status===`throttled`?`OpenCode accepted this egress; the rate is spent`:`The probe could not complete`),children:t.probe.status===`blocked`?`OpenCode blocked`:t.probe.status===`allowed`?t.probe.httpStatus!==void 0&&t.probe.httpStatus>=400?`OpenCode reachable`:`OpenCode OK`:t.probe.status===`throttled`?`OpenCode rate-limited`:`OpenCode unreachable`}):null,t.cooldownOnly.length>0?(0,V.jsxs)(F,{tone:`warn`,title:t.cooldownText,children:[t.cooldownOnly.length,` cooldown`,t.cooldownOnly.length>1?`s`:``]}):null]})]})}function ot({pool:e,view:t,speedResult:n,isSpeedTesting:r,maskIp:i}){return(0,V.jsxs)(V.Fragment,{children:[e.egressIp?(0,V.jsx)(`span`,{className:`font-mono tabular-nums block overflow-hidden text-ellipsis whitespace-nowrap text-badge`,title:i?`IP masked`:`egress ${e.egressIp} · ${t.display.endpoint}`,children:i?`IP masked`:e.egressIp}):(0,V.jsx)(`span`,{className:`text-badge text-text-tertiary`,title:`Test the pool to read its egress address`,children:`not probed`}),(r||n)&&(0,V.jsx)(`div`,{className:`mt-1.5`,children:(0,V.jsx)(F,{tone:r?`default`:n?.status===`ok`?`ok`:`err`,title:r?`Measuring download throughput`:n?.status===`ok`?`${u(n.bytes)} in ${n.durationMs}ms${n.measuredAt?` · last measured ${new Date(n.measuredAt).toLocaleString()}`:``}`:`${n?.errorMessage??`Speed test failed`}${n?.measuredAt?` · last measured ${new Date(n.measuredAt).toLocaleString()}`:``}`,children:r?`Speed…`:n?.status===`ok`?`${(n.megabitsPerSecond??0).toFixed(1)} Mbps`:`Speed failed`})})]})}function st({pool:e,view:t}){let n=e.quotaBytes,r=n&&n>0?Math.min(1,t.used/n):0,i=n!==void 0&&n>0&&t.used>n;return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{title:`${t.inflight}/${e.maxInflight} inflight`,className:`flex items-center gap-3`,children:[(0,V.jsx)(`div`,{className:`flex-1 h-3 rounded-micro overflow-hidden`,children:(0,V.jsx)(`div`,{className:`h-full rounded-micro`,style:{width:`${Math.round(t.load*100)}%`,background:t.load>=.8?`var(--orange)`:`var(--green)`}})}),(0,V.jsxs)(`span`,{className:`font-mono tabular-nums text-micro text-text-secondary whitespace-nowrap`,children:[t.inflight,`/`,e.maxInflight]})]}),(0,V.jsxs)(`div`,{title:n?`${u(t.used)} of ${u(n)} used · ${u(t.metered)} metered lifetime`:`${u(t.used)} carried (no quota set) · ${u(t.session)} this session`,className:`flex items-center gap-3 mt-2`,children:[(0,V.jsx)(`div`,{className:`flex-1 h-3 rounded-micro overflow-hidden`,children:(0,V.jsx)(`div`,{className:`h-full rounded-micro`,style:{width:`${Math.round(r*100)}%`,background:i?`var(--red)`:r>=.8?`var(--orange)`:`var(--teal)`}})}),(0,V.jsxs)(`span`,{className:`font-mono tabular-nums whitespace-nowrap text-micro ${i?`text-red`:`text-text-secondary`}`,children:[u(t.used),n?` / ${u(n)}`:``]})]})]})}function ct({pool:e,view:t,isTesting:n,onDelete:r,onEdit:s,onHealthCheck:l,onActivity:u}){let d=we(),f=Me(),p=Ee();return(0,V.jsxs)(V.Fragment,{children:[t.cooldowns.length>0&&(0,V.jsx)(c,{size:`icon`,variant:`secondary`,disabled:f.isPending,icon:f.isPending?(0,V.jsx)(a,{size:12,className:`animate-spin`}):(0,V.jsx)(x,{size:12}),onClick:()=>f.mutate({poolId:e.id}),title:`Clear provider cooldowns — ${t.cooldownText}`,label:`Clear`}),(0,V.jsx)(c,{size:`icon`,variant:`secondary`,icon:(0,V.jsx)(i,{size:12}),onClick:()=>u(e),title:`Health and error activity`,label:`Activity`}),e.status===`cooldown`&&(0,V.jsx)(c,{size:`icon`,variant:`secondary`,disabled:p.isPending,icon:(0,V.jsx)(x,{size:12,className:p.isPending?`animate-spin`:``}),onClick:()=>p.mutate(e.id),title:`Recover pool`,children:`Recover`}),!(!t.isEnabled&&t.cooldowns.length>0)&&(0,V.jsx)(c,{size:`icon`,variant:`secondary`,disabled:n,icon:n?(0,V.jsx)(a,{size:12,className:`animate-spin`}):(0,V.jsx)(o,{size:12}),onClick:()=>l(e),title:t.checkTooltip??`Run health check`,label:`Test`}),(0,V.jsx)(c,{size:`icon`,variant:`secondary`,icon:(0,V.jsx)(y,{size:12}),onClick:()=>s(e),title:`Edit pool`,label:`Edit`}),(0,V.jsx)(c,{size:`icon`,variant:`secondary`,icon:(0,V.jsx)(C,{size:12}),onClick:()=>r(e.id),title:`Delete pool`,label:`Delete`}),(0,V.jsx)(L,{className:`ml-3`,checked:t.isEnabled,disabled:d.isPending,onChange:t=>d.mutate({poolId:e.id,request:{status:t?`active`:`disabled`}})})]})}var lt=(0,B.memo)(function({pool:e,isSelected:t,onToggleSelect:n,checkResult:r,isTesting:i,onDelete:a,onEdit:o,onHealthCheck:s,onActivity:c,speedResult:l,isSpeedTesting:u,maskValues:d,maskIp:f,probe:p}){let m=(0,B.useContext)(Q),h=$(e,r,i,(m.live?m.byId.get(e.id):void 0)??null,p);return(0,V.jsxs)(`tr`,{className:h.isEnabled?``:`opacity-60`,children:[(0,V.jsx)(`td`,{className:`w-13`,children:(0,V.jsx)(`input`,{type:`checkbox`,checked:t,onChange:()=>n(e.id),"aria-label":`Select ${h.poolLabel}`})}),(0,V.jsx)(`td`,{className:`min-w-0 max-w-150`,children:(0,V.jsx)(at,{pool:e,view:h,maskValues:d})}),(0,V.jsx)(`td`,{className:`min-w-0 max-w-90`,children:e.family?(0,V.jsx)(`span`,{className:`truncate text-caption font-semibold text-text-secondary`,title:e.family,children:e.family}):(0,V.jsx)(`span`,{className:`text-badge text-text-tertiary`,children:`—`})}),(0,V.jsx)(`td`,{className:`max-w-110`,children:(0,V.jsx)(ot,{pool:e,view:h,speedResult:l,isSpeedTesting:u,maskIp:f})}),(0,V.jsx)(`td`,{className:`min-w-55`,children:(0,V.jsx)(st,{pool:e,view:h})}),(0,V.jsx)(`td`,{className:`whitespace-nowrap pl-36 text-right`,children:(0,V.jsx)(le,{gap:`4px`,justify:`end`,children:(0,V.jsx)(ct,{pool:e,view:h,isTesting:i,onDelete:a,onEdit:o,onHealthCheck:s,onActivity:c})})})]})});function ut({pool:e,onClose:t}){let n=Te(e.id),r=Ee(),i=n.data??[],a=nt(e.lastErrorCategory),o=e.status===`disabled`&&a!==void 0,s=e.status===`active`?`ok`:e.status===`disabled`?`disabled`:`warn`;return(0,V.jsx)(v,{open:!0,onClose:t,title:`Health & Activity — ${X(e)}`,children:(0,V.jsxs)(ce,{gap:`14px`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-8 rounded-panel border bg-surface-2 p-8 ${o?`border-orange`:`border-inner-border`}`,children:[(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsx)(`div`,{className:`mb-2.5 text-text-tertiary text-micro font-bold tracking-label uppercase`,children:`Proxy health`}),(0,V.jsx)(`div`,{className:`text-title font-bold leading-[1.3]`,children:o?`Proxy reachable`:`Proxy ${e.status}`}),(0,V.jsx)(`p`,{className:`mt-3 mx-0 mb-0 text-text-secondary text-caption leading-normal wrap-anywhere`,children:o?`${a} · disabled from routing`:e.lastError??`No recent proxy errors.`})]}),(0,V.jsx)(F,{tone:s,dot:!0,children:e.status})]}),e.status===`cooldown`&&(0,V.jsx)(`div`,{className:`flex justify-end`,children:(0,V.jsx)(c,{size:`sm`,variant:`secondary`,disabled:r.isPending,onClick:()=>r.mutate(e.id),icon:(0,V.jsx)(x,{size:12,className:r.isPending?`animate-spin`:``}),children:`Recover Now`})}),n.isPending?(0,V.jsx)(g,{compact:!0,label:`Loading pool activity…`}):null,n.isError?(0,V.jsx)(h,{compact:!0,message:`Failed to load pool activity`,onRetry:()=>void n.refetch()}):null,!n.isPending&&!n.isError&&i.length===0?(0,V.jsx)(_,{compact:!0,title:`No pool activity`,message:`Proxy checks, disable events, and recoveries will appear here.`}):null,i.length>0?(0,V.jsx)(`div`,{className:`grid gap-4 max-h-190 overflow-y-auto pr-1`,children:i.map(e=>(0,V.jsxs)(`div`,{className:`p-6 border border-inner-border rounded-control bg-surface-1`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-4`,children:[(0,V.jsxs)(le,{gap:`6px`,children:[(0,V.jsxs)(F,{tone:e.toStatus===`active`?`ok`:e.toStatus===`disabled`?`disabled`:`warn`,children:[e.fromStatus??`new`,` → `,e.toStatus]}),e.errorCategory?(0,V.jsx)(F,{tone:e.errorCategory.startsWith(`proxy_`)?`warn`:`err`,children:e.errorCategory}):null]}),(0,V.jsx)(`time`,{className:`text-text-tertiary text-badge tabular-nums`,children:new Date(e.createdAt).toLocaleString()})]}),(0,V.jsx)(`p`,{className:`mt-4 mx-0 mb-0 text-text-secondary text-caption leading-normal wrap-anywhere`,children:e.reason??`No additional details`})]},e.id))}):null]})})}function dt(){let e=be(),t=De(),n=we(),r=Ae(),[i,s]=(0,B.useState)(!1),u=(0,B.useCallback)(()=>s(!1),[]),[y,x]=(0,B.useState)(null),[w,T]=(0,B.useState)(null),[E,D]=(0,B.useState)(!1),[O,k]=(0,B.useState)(null),[A,M]=(0,B.useState)(new Set),N=de(),P=N.enabled,ne=fe(),I=ne.enabled,[L,R]=(0,B.useState)(new Set),[z,he]=(0,B.useState)(()=>{try{return localStorage.getItem(He)===`opencode`?`opencode`:`url`}catch{return`url`}});(0,B.useEffect)(()=>{try{localStorage.setItem(He,z)}catch{}},[z]);let[ge,ve]=(0,B.useState)(new Set),[ye,xe]=(0,B.useState)({}),Se=Oe(),Ce=je(),[Te,Ee]=(0,B.useState)(_e),[ke,Me]=(0,B.useState)(()=>{try{let e=localStorage.getItem(`cartethyia_proxy_speed_results`);return e?JSON.parse(e):{}}catch{return{}}}),[H,Ne]=(0,B.useState)(new Set),Ie=(0,B.useCallback)((e,t)=>{let n={...t,measuredAt:new Date().toISOString()};Me(t=>{let r={...t,[e]:n};try{localStorage.setItem(`cartethyia_proxy_speed_results`,JSON.stringify(r))}catch{}return r})},[]),[U,W]=(0,B.useState)(()=>{try{let e=localStorage.getItem(Ue);return e?JSON.parse(e):{}}catch{return{}}}),[G,Re]=(0,B.useState)({key:`name`,direction:`asc`}),[K,q]=(0,B.useState)(null),[ze,Be]=(0,B.useState)(null),J=e.data??[],Ve=(0,B.useMemo)(()=>Le(J,G.key,G.direction,e=>tt(e,U[e.id])),[J,G,U]),qe=(0,B.useCallback)(e=>{let t=e;Re(e=>e.key===t?{key:t,direction:e.direction===`asc`?`desc`:`asc`}:{key:t,direction:`asc`})},[]),Y=e.isPending,Z=e.isError,$e=J.length>0&&J.every(e=>A.has(e.id)),nt=()=>{M($e?new Set:new Set(J.map(e=>e.id)))},Q=(0,B.useCallback)(e=>{M(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]);(0,B.useEffect)(()=>{try{localStorage.setItem(Ue,JSON.stringify(U))}catch{}},[U]);let $=Object.values(U),at=$.length,ot=$.filter(e=>e.status===`healthy`||e.status===`reachable`).length,st=$.filter(e=>e.status!==`healthy`&&e.status!==`reachable`).length,ct=(0,B.useCallback)(e=>{R(t=>new Set(t).add(e.id)),r.mutate(e.id,{onSuccess:t=>{W(n=>({...n,[e.id]:t}));let n=X(e);t.status===`healthy`?l.success(`${n}: connected`,`${t.latencyMs??0}ms`):t.status===`reachable`?l.error(`${n}: proxy reachable · disabled`,t.errorMessage):l.error(`${n}: ${t.status===`timeout`?`timeout`:`unhealthy`}`,t.errorMessage)},onError:t=>{let n=X(e);l.error(`${n}: check failed`,j(t,`Health check failed`))},onSettled:()=>{R(t=>{let n=new Set(t);return n.delete(e.id),n})}})},[r]),dt=async()=>{let e=J;if(e.length===0)return;let t=0,n=0,i=0,a=async()=>{for(;;){let a=e[i++];if(!a)return;R(e=>new Set(e).add(a.id));try{let e=await r.mutateAsync(a.id);W(t=>({...t,[a.id]:e})),e.status===`healthy`?t+=1:n+=1}catch(e){n+=1;let t={poolId:a.id,status:`timeout`,errorMessage:j(e,`Health check failed`)};W(e=>({...e,[a.id]:t}))}finally{R(e=>{let t=new Set(e);return t.delete(a.id),t})}}};await Promise.all(Array.from({length:Math.min(8,e.length)},()=>a())),l.success(`Tested ${e.length} pools · ${t} healthy · ${n} failed`)},ft=async()=>{let e=J.filter(e=>A.has(e.id));if(e.length===0)return;let t=0,n=0,i=0,a=async()=>{for(;;){let a=e[i++];if(!a)return;R(e=>new Set(e).add(a.id));try{let e=await r.mutateAsync(a.id);W(t=>({...t,[a.id]:e})),e.status===`healthy`?t+=1:n+=1}catch(e){n+=1;let t={poolId:a.id,status:`timeout`,errorMessage:j(e,`Health check failed`)};W(e=>({...e,[a.id]:t}))}finally{R(e=>{let t=new Set(e);return t.delete(a.id),t})}}};await Promise.all(Array.from({length:Math.min(8,e.length)},()=>a())),l.success(`Tested ${e.length} pools · ${t} healthy · ${n} failed`)},pt=async()=>{let e=J.filter(e=>A.has(e.id));if(e.length===0)return;let t=0,n=0,r=0,i=0,a=0,o=async()=>{for(;;){let o=e[a++];if(!o)return;ve(e=>new Set(e).add(o.id));try{let e=await Se.mutateAsync({poolId:o.id,providerId:Ge});xe(t=>({...t,[o.id]:{endpoint:o.endpoint??``,result:e}})),e.status===`allowed`?t+=1:e.status===`blocked`?n+=1:e.status===`throttled`?r+=1:i+=1}catch(e){i+=1,xe(t=>({...t,[o.id]:{endpoint:o.endpoint??``,result:{poolId:o.id,providerId:Ge,status:`unreachable`,reason:j(e,`Provider probe failed`)}}}))}finally{ve(e=>{let t=new Set(e);return t.delete(o.id),t})}}};await Promise.all(Array.from({length:Math.min(Ke,e.length)},()=>o())),l.success(`OpenCode: ${t} allowed · ${n} blocked`+(r>0?` · ${r} rate-limited`:``)+(i>0?` · ${i} unreachable`:``))},mt=async()=>{let e=J.filter(e=>A.has(e.id));if(e.length===0)return;let t=0;await(async()=>{for(;;){let n=e[t++];if(!n)return;Ne(e=>new Set(e).add(n.id));try{let e=await Ce.mutateAsync({poolId:n.id,bytes:Te});Ie(n.id,e)}catch(e){Ie(n.id,{poolId:n.id,status:`failed`,bytes:0,durationMs:0,errorMessage:j(e,`Speed test failed`)})}finally{Ne(e=>{let t=new Set(e);return t.delete(n.id),t})}}})(),l.success(`Speed tested ${e.length} pool(s)`)},ht=async()=>{let e=J.filter(e=>A.has(e.id));e.length!==0&&(await Promise.all(e.map(e=>n.mutateAsync({poolId:e.id,request:{status:`active`}}))),M(new Set),l.success(`Enabled ${e.length} pool(s)`))},gt=async()=>{let e=J.filter(e=>A.has(e.id));e.length!==0&&(await Promise.all(e.map(e=>n.mutateAsync({poolId:e.id,request:{status:`disabled`}}))),M(new Set),l.success(`Disabled ${e.length} pool(s)`))},_t=()=>{let e=A.size>0?J.filter(e=>A.has(e.id)):J;if(e.length===0)return;let t=e.map(e=>Je(e).endpoint||e.endpoint).join(`
|
|
7
|
-
`);oe(`cartethyia-proxies.txt`,t,`text/plain;charset=utf-8`),l.success(`Exported ${e.length} pool(s)`)},vt=(0,B.useCallback)(e=>{let t=J.find(t=>t.id===e);t&&q([t])},[J]);return(0,V.jsx)(rt,{children:(0,V.jsxs)(ce,{gap:`16px`,children:[(0,V.jsx)(v,{open:i,onClose:u,title:`Add Proxy`,footer:y,children:(0,V.jsx)(et,{onClose:u,actionsRef:x,onProbeResult:(e,t)=>{let n=J.find(t=>t.id===e);xe(r=>({...r,[e]:{endpoint:n?.endpoint??``,result:t}}))},onHealthResult:(e,t)=>{W(n=>({...n,[e]:t}))}})}),(0,V.jsx)(v,{open:O!==null,onClose:()=>k(null),title:`Edit pool`,footer:w,children:O&&(0,V.jsx)(Qe,{pool:O,onClose:()=>k(null),actionsRef:T},O.id)}),(0,V.jsxs)(ae,{style:J.length===0&&!Y&&!Z?{minHeight:`min(78dvh, calc(100dvh - 160px))`,display:`flex`,flexDirection:`column`}:void 0,children:[(0,V.jsx)(ie,{title:`Proxy Pool`,subtitle:`Outbound proxy servers — HTTP, HTTPS, and SOCKS5`,icon:(0,V.jsx)(S,{size:16}),action:(0,V.jsxs)(le,{gap:`8px`,children:[(0,V.jsx)(c,{variant:`secondary`,size:`sm`,icon:(0,V.jsx)(pe,{size:13}),onClick:()=>D(!0),children:`Deploy relay`}),(0,V.jsx)(c,{variant:`primary`,size:`sm`,icon:(0,V.jsx)(ee,{size:13}),onClick:()=>s(!0),children:`Add proxies`})]})}),(0,V.jsxs)(re,{style:J.length===0&&!Y&&!Z?{flex:1,display:`flex`,flexDirection:`column`,gap:`16px`}:void 0,children:[(0,V.jsx)(it,{pools:J}),J.length>0&&(0,V.jsxs)(`div`,{className:`nested-panel flex flex-wrap items-center justify-start overflow-x-auto rounded-card border border-inner-border bg-surface-2 p-4 text-badge`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-5`,children:[(0,V.jsxs)(`label`,{className:`flex items-center gap-3 cursor-pointer text-text-secondary`,children:[(0,V.jsx)(`input`,{type:`checkbox`,checked:$e,onChange:nt,"aria-label":`Select all proxies`}),`Select all`,A.size>0&&(0,V.jsxs)(`span`,{className:`text-text-tertiary`,children:[`(`,A.size,`)`]})]}),at>0&&(0,V.jsxs)(le,{gap:`6px`,children:[(0,V.jsxs)(`span`,{className:`text-text-tertiary`,children:[`Tested `,at,`/`,J.length]}),ot>0&&(0,V.jsxs)(F,{tone:`ok`,children:[ot,` success`]}),st>0&&(0,V.jsxs)(F,{tone:`err`,children:[st,` errors`]})]})]}),(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,V.jsx)(c,{variant:`ghost`,size:`sm`,icon:P?(0,V.jsx)(f,{size:12}):(0,V.jsx)(p,{size:12}),onClick:()=>N.setEnabled(!P),title:P?`Show proxy names and addresses`:`Hide proxy names and addresses`,children:P?`Unmask`:`Mask`}),(0,V.jsx)(c,{variant:`ghost`,size:`sm`,icon:I?(0,V.jsx)(f,{size:12}):(0,V.jsx)(p,{size:12}),onClick:()=>ne.setEnabled(!I),title:I?`Show egress addresses`:`Hide egress addresses`,children:I?`Show IP`:`Mask IP`}),(0,V.jsx)(c,{variant:`secondary`,size:`sm`,disabled:L.size>0||J.length===0,icon:L.size>0?(0,V.jsx)(a,{size:12,className:`animate-spin`}):(0,V.jsx)(o,{size:12}),onClick:()=>void dt(),children:`Test all`}),(0,V.jsxs)(`div`,{className:`inline-flex items-stretch h-15`,children:[(0,V.jsx)(c,{variant:`secondary`,size:`sm`,className:`rounded-tr-none rounded-br-none`,disabled:L.size>0||ge.size>0||A.size===0,icon:L.size>0||ge.size>0?(0,V.jsx)(a,{size:12,className:`animate-spin`}):(0,V.jsx)(o,{size:12}),onClick:()=>void(z===`opencode`?pt():ft()),children:z===`opencode`?`Test OpenCode`:`Test URL`}),(0,V.jsx)(se,{"aria-label":`Test payload`,value:z,onValueChange:e=>he(e),options:We,disabled:L.size>0||ge.size>0,className:`w-auto min-w-38 h-15 rounded-tl-none rounded-bl-none -ml-0.5`})]}),(0,V.jsxs)(`div`,{className:`inline-flex items-stretch h-15`,children:[(0,V.jsx)(c,{variant:`secondary`,size:`sm`,className:`rounded-tr-none rounded-br-none`,disabled:A.size===0||H.size>0||Ce.isPending,icon:H.size>0?(0,V.jsx)(a,{size:12,className:`animate-spin`}):(0,V.jsx)(m,{size:12}),onClick:()=>void mt(),children:`Speedtest selected`}),(0,V.jsx)(se,{"aria-label":`Speed test payload size`,value:String(Te),onValueChange:e=>Ee(Number(e)),options:Ze,disabled:H.size>0||Ce.isPending,className:`w-auto min-w-38 h-15 rounded-tl-none rounded-bl-none -ml-0.5`})]}),(0,V.jsx)(c,{variant:`secondary`,size:`sm`,disabled:J.length===0,icon:(0,V.jsx)(d,{size:12}),onClick:_t,children:`Export`}),(0,V.jsx)(c,{variant:`secondary`,size:`sm`,disabled:A.size===0||n.isPending,icon:(0,V.jsx)(me,{size:12}),onClick:()=>void ht(),children:`Enable selected`}),(0,V.jsx)(c,{variant:`secondary`,size:`sm`,disabled:A.size===0||n.isPending,icon:(0,V.jsx)(b,{size:12}),onClick:()=>void gt(),children:`Disable selected`}),(0,V.jsx)(c,{variant:`danger`,size:`sm`,disabled:A.size===0||t.isPending,icon:(0,V.jsx)(C,{size:12}),onClick:()=>{let e=J.filter(e=>A.has(e.id));e.length!==0&&q(e)},children:`Delete selected`})]})]}),Y&&(0,V.jsx)(g,{}),Z&&(0,V.jsx)(h,{title:`Error`,message:`Failed to load network pools`}),!Y&&!Z&&J.length===0&&(0,V.jsx)(`div`,{className:`flex-1 flex items-center justify-center p-12 border border-dashed border-transparent rounded-card bg-transparent text-center`,children:(0,V.jsx)(_,{title:`No proxy pools configured`,message:`The summary above is empty because nothing is routing yet. Use Add proxies or Deploy relay in the header to start one.`})}),!Y&&!Z&&J.length>0&&(0,V.jsx)(`div`,{className:`proxy-table-scroll rounded-control border border-inner-border bg-surface-1`,children:(0,V.jsx)(ue,{maxHeight:460,scrollRegion:!0,headers:[``,{key:`name`,label:`Proxy`,sortable:!0},{key:`family`,label:`Family`,sortable:!0},{key:`address`,label:`Address`,sortable:!0},{key:`load`,label:`Load`,sortable:!0},`Actions`],sortKey:G.key,sortDirection:G.direction,onSort:qe,children:Ve.map(e=>(0,V.jsx)(lt,{pool:e,isSelected:A.has(e.id),onToggleSelect:Q,checkResult:U[e.id],probe:e.providerProbe===void 0?Fe(ye[e.id],e.endpoint):{poolId:e.id,providerId:e.providerProbe.providerId,status:e.providerProbe.status,...e.providerProbe.httpStatus===void 0?{}:{httpStatus:e.providerProbe.httpStatus},...e.providerProbe.reason===void 0?{}:{reason:e.providerProbe.reason},...e.providerProbe.latencyMs===void 0?{}:{latencyMs:e.providerProbe.latencyMs}},isTesting:L.has(e.id),onDelete:vt,onEdit:k,onHealthCheck:ct,onActivity:Be,speedResult:Xe(ke[e.id],Ye(e)),isSpeedTesting:H.has(e.id),maskValues:P,maskIp:I},e.id))})})]})]}),(0,V.jsx)(te,{open:K!==null,onClose:()=>q(null),onConfirm:async()=>{K&&(await Promise.all(K.map(e=>t.mutateAsync(e.id))),M(new Set),l.success(`Deleted ${K.length} pool(s)`),q(null))},title:`Delete proxy pool?`,message:K&&K.length===1?`Delete "${X(K[0])}"? This cannot be undone.`:K?`Delete ${K.length} proxy pools? This cannot be undone.`:`Delete this proxy pool? This cannot be undone.`,confirmLabel:`Delete`,danger:!0}),ze?(0,V.jsx)(ut,{pool:ze,onClose:()=>Be(null)}):null,E?(0,V.jsx)(Pe,{onClose:()=>D(!1)}):null]})})}export{et as ProxyBulkForm,rt as ProxyLiveProvider,$e as SchemeChipRow,dt as default};
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t,r as n,t as r}from"./jsx-runtime-CXUMngI_.js";import{r as i}from"./terminal-Bd4ee8TA.js";import{C as a,O as o,b as s,l as c,s as l}from"./numbers-Bs4LOOuf.js";import{t as ee}from"./chevron-right-BXIy5l3h.js";import{t as u}from"./eye-off-Bk5g2luF.js";import{i as d,n as f,r as p,t as m}from"./state-DYdQmdAl.js";import{t as h}from"./dialog-BtpsJU98.js";import{t as g}from"./refresh-cw-BqJFk4sU.js";import{t as _}from"./rotate-ccw-CufcqITi.js";import{t as te}from"./trash-Cppn5c3R.js";import{l as v}from"./query-keys-D7wX2vM5.js";import{R as y}from"./entry-Dj9AR0gY.js";import{n as b,t as ne}from"./card--AtFedAq.js";import{t as x}from"./badge-6uzDDvqs.js";import{t as S}from"./select-DsX5QT8K.js";import{t as C}from"./ProviderIcon-CmfzxpVM.js";import{t as w}from"./switch-CidSfbG7.js";import{t as T}from"./stack-DwLmjUFK.js";import{n as E}from"./inline-BcNGF8Gr.js";import{t as D}from"./layout-C8mer_Ak.js";import{a as O,i as k,n as A,o as j,r as M,s as N,t as P}from"./quota-DZGyp0N5.js";import{a as F,c as I,d as L,f as R,i as z,l as B,n as V,o as H,p as U,r as W,s as G,t as K,u as q}from"./HealthEventsModal-qomXThxX.js";var re=e(`calendar-check`,[[`path`,{d:`M8 2v3`,key:`1ioesn`}],[`path`,{d:`M16 2v3`,key:`otl347`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`m9 15 2 2 4-4`,key:`1grp1n`}]]),ie=e(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]),J=e(`clock-3`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6h4`,key:`135r8i`}]]),Y=e(`zap`,[[`path`,{d:`M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z`,key:`1v7up4`}]]),X=t(n(),1),Z=r();function Q(e){return!!(e.quota?.windows.length&&e.quota.windows.every(e=>e.remainingPercent!==null&&e.remainingPercent<=0))}function $(e){let t=e.quota?.windows.map(e=>e.resetsAt?new Date(e.resetsAt).getTime():1/0)??[];return Math.min(...t,1/0)}function ae({account:e,onClose:t}){let n=z(e.id,!0),r=q(e.id),i=n.data?.credits??[],a=e=>e?new Date(e).toLocaleString():`—`,o=e=>e?new Date(e).toLocaleString():`—`,s=e=>{if(!e)return``;let t=new Date(e).getTime()-Date.now();if(!Number.isFinite(t))return``;if(t<=0)return`expired`;let n=Math.floor(t/864e5);if(n>=1)return`in ${n}d`;let r=Math.floor(t/36e5);return r>=1?`in ${r}h`:`in ${Math.max(1,Math.floor(t/6e4))}m`};return(0,Z.jsx)(h,{open:!0,onClose:t,size:`lg`,title:`Saved Rate-Limit Resets — ${e.name}`,children:(0,Z.jsxs)(`div`,{className:`flex flex-col gap-7`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-6 rounded-control border border-inner-border bg-surface-2 px-8 py-6`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,Z.jsx)(Y,{size:14,className:`text-status-success`}),(0,Z.jsx)(`span`,{className:`text-body font-semibold`,children:`Available resets`})]}),(0,Z.jsx)(`p`,{className:`mt-2 text-text-tertiary text-badge leading-normal`,children:`Each credit lifts a spent rate-limit window before its natural reset.`})]}),(0,Z.jsxs)(x,{tone:n.data&&n.data.availableCount>0?`ok`:`disabled`,dot:!0,children:[n.data?.availableCount??0,` reset`,(n.data?.availableCount??0)===1?``:`s`]})]}),n.isPending?(0,Z.jsx)(p,{compact:!0,label:`Reading saved resets…`}):n.isError?(0,Z.jsx)(f,{compact:!0,message:`Failed to read saved resets`,onRetry:()=>void n.refetch()}):i.length===0?(0,Z.jsx)(m,{compact:!0,title:`No saved resets`,message:`This account has no saved rate-limit reset credits right now.`,icon:(0,Z.jsx)(Y,{size:20})}):(0,Z.jsx)(`div`,{className:`max-h-170 overflow-y-auto rounded-control border border-inner-border`,children:(0,Z.jsx)(D,{headers:[`Status`,`Title`,`Granted`,`Expires`,``],children:i.map(e=>{let t=(e.status??`available`)===`available`,n=s(e.expiresAt);return(0,Z.jsxs)(`tr`,{children:[(0,Z.jsx)(`td`,{className:`whitespace-nowrap align-middle`,children:(0,Z.jsx)(x,{tone:t?`ok`:e.status===`expired`?`disabled`:`warn`,children:e.status??`available`})}),(0,Z.jsx)(`td`,{className:`text-caption font-medium whitespace-nowrap align-middle text-text-primary`,children:e.title??`Rate-limit reset`}),(0,Z.jsx)(`td`,{className:`text-badge whitespace-nowrap tabular-nums align-middle text-text-secondary`,children:a(e.grantedAt)}),(0,Z.jsxs)(`td`,{className:`text-badge whitespace-nowrap tabular-nums align-middle text-text-secondary`,children:[o(e.expiresAt),n&&(0,Z.jsxs)(`span`,{className:`ml-3 text-text-tertiary`,children:[`(`,n,`)`]})]}),(0,Z.jsx)(`td`,{className:`whitespace-nowrap text-right align-middle`,children:(0,Z.jsx)(c,{size:`sm`,variant:t?`primary`:`secondary`,disabled:!t||r.isPending,onClick:()=>r.mutate({creditId:e.id},{onSuccess:e=>{e.ok?l.success(e.message??`Rate limit reset applied`):l.error(e.message??`Rate limit reset failed`)},onError:e=>{l.error(v(e,`Unable to redeem rate-limit reset`))}}),children:`Use`})})]},e.id)})})}),(0,Z.jsx)(E,{justify:`flex-end`,gap:`0px`,children:(0,Z.jsx)(c,{variant:`secondary`,size:`sm`,onClick:t,children:`Close`})})]})})}function oe({accounts:e}){let t=(0,X.useMemo)(()=>{let t=new Map;for(let n of e){if(!V(n.provider))continue;let e=t.get(n.provider);e?e.count+=1:t.set(n.provider,{id:n.provider,label:n.providerName||n.provider,count:1})}return[...t.values()]},[e]),[n,r]=(0,X.useState)(``),i=(t.find(e=>e.id===n)??t[0])?.id??``,o=R(i),s=i.length===0||o.isPending||t.length===0;return(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2.5`,"aria-label":`Daily growth actions`,children:[(0,Z.jsx)(`div`,{className:`min-w-0 w-67.5`,children:(0,Z.jsx)(S,{"aria-label":`Provider for the daily growth pass`,value:i,onValueChange:r,className:`w-full h-16`,options:t.length>0?t.map(e=>({value:e.id,label:`${e.label} · ${e.count}`})):[{value:``,label:`No buddy providers`}]})}),(0,Z.jsx)(c,{variant:`secondary`,size:`sm`,title:`Send the activity report, then claim the daily check-in, for every account of this provider`,"aria-label":`Run the daily growth pass for this provider`,disabled:s,className:`shrink-0`,icon:o.isPending?(0,Z.jsx)(a,{size:13,className:`animate-spin`}):(0,Z.jsx)(re,{size:13}),onClick:()=>o.mutate(void 0,{onSuccess:e=>{let t=e.data.filter(e=>!e.report.ok).length;t===0?l.success(e.message):l.error(`${e.message} — ${t} report${t===1?``:`s`} failed`)},onError:e=>l.error(v(e,`Unable to run the daily growth pass`))}),children:`Daily growth`})]})}function se({account:e,onToggle:t,onDelete:n,onShowHealth:r,onShowResets:o}){let u=G(e.id),d=L(e.id),f=V(e.provider),p=W(e.provider),m=z(e.id,p),h=e.quota,[g,y]=(0,X.useState)(0),b=h?.windows??[],x=j(b,g),S=x.pageCount;(0,X.useEffect)(()=>{y(e=>Math.min(e,Math.max(0,S-1)))},[S]);let T=u.isPending||d.isPending,E=m.data?.availableCount??0,[D,F]=(0,X.useState)(null),[I,R]=(0,X.useState)(!1),B=e.checkin?.attemptedToday??!1,H=`${D?D.state===`claimed`?`Checked in${D.credit===null?``:` +${D.credit}`}${D.streakDays===null?``:` · ${D.streakDays}d streak`}`:D.state===`already_claimed`?`Check-in attempted · already claimed`:D.state===`not_eligible`?`Check-in attempted · not eligible`:D.state===`event_ended`?`Check-in attempted · event ended`:`Check-in attempted · unavailable`:B?`Check-in attempted today`:`Check-in due`}${I?` · Reported today`:``}`,U=b.reduce((e,t)=>{let n=t.limit;if(typeof n!=`number`||!Number.isFinite(n))return e;let r=typeof t.remaining==`number`&&Number.isFinite(t.remaining)?t.remaining:typeof t.used==`number`&&Number.isFinite(t.used)?n-t.used:typeof t.remainingPercent==`number`&&Number.isFinite(t.remainingPercent)?n*t.remainingPercent/100:null;return r===null?e:e+Math.max(0,r)},0),K=(u.error?v(u.error,`Unable to refresh this account`):null)??h?.refreshError??h?.error??e.health?.sanitizedMessage,q=O(K),J=q===`Quota tracking is not supported for this provider`?null:q,Q=P(e.credentialHint,e.name),$=e.health?.status??`unknown`;return(0,Z.jsxs)(ne,{className:`flex h-full flex-col overflow-hidden`,"aria-busy":T,children:[(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-5 px-7 py-4`,children:[(0,Z.jsx)(C,{icon:e.providerIcon,name:e.providerName,size:32}),(0,Z.jsxs)(`div`,{className:`flex-[1_1_160px]`,children:[(0,Z.jsxs)(`div`,{className:`flex min-w-0 items-center gap-4`,children:[(0,Z.jsx)(`div`,{className:`truncate text-caption font-bold text-text-primary text-body`,children:e.providerName}),h?.plan&&(0,Z.jsx)(`span`,{className:`shrink-0 rounded-chip bg-accent-soft px-4 py-1 text-micro font-semibold text-accent`,children:h.plan})]}),(0,Z.jsx)(`div`,{className:`truncate text-badge text-text-secondary`,children:Q.primary}),Q.secondary!==null&&(0,Z.jsx)(`div`,{className:`truncate text-micro text-text-tertiary`,children:Q.secondary}),h&&(0,Z.jsx)(`div`,{className:`truncate text-micro text-text-tertiary`,children:A(h.lastSuccessAt??h.fetchedAt)}),p&&(0,Z.jsx)(`div`,{className:`truncate text-micro flex items-center gap-2 text-text-tertiary`,title:`Saved rate-limit reset credits available on this account`,children:m.isPending?`Checking saved resets…`:E>0?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(Y,{size:10,className:`text-status-success shrink-0`,"aria-hidden":`true`}),(0,Z.jsxs)(`span`,{className:`reset-credit-live`,children:[E,` rate-limit reset`,E===1?``:`s`,` available`]})]}):`No rate-limit resets available`}),f&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`div`,{title:`Daily growth state: manual pass result, else the sweep ledger for today`,className:`truncate text-micro text-text-tertiary`,children:d.isPending?`Running growth pass…`:H}),b.some(e=>typeof e.limit==`number`&&Number.isFinite(e.limit))&&(0,Z.jsxs)(`div`,{className:`truncate text-micro text-text-tertiary`,children:[`Total credits: `,U.toLocaleString(void 0,{maximumFractionDigits:2})]})]})]}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-1.75 gap-3 ml-auto`,children:[p&&(0,Z.jsx)(c,{variant:`ghost`,size:`icon`,className:`w-16 h-16 p-0`,title:m.isPending?`Checking saved rate-limit resets…`:E>0?`Saved rate-limit resets (${E} available)`:`Saved rate-limit resets`,"aria-label":`Open saved rate-limit resets for ${e.name}`,disabled:T,onClick:()=>o(e),children:(0,Z.jsx)(Y,{size:14})}),f&&(0,Z.jsx)(c,{variant:`ghost`,size:`icon`,className:`w-16 h-16 p-0`,title:`Daily growth pass (check-in + activity report) — ${H}`,"aria-label":`Run daily growth pass for ${e.name}`,disabled:T,onClick:()=>d.mutate(void 0,{onSuccess:e=>{let t=e.checkin.data;t&&F({state:t.state,credit:t.credit,streakDays:t.streakDays}),e.report.ok&&R(!0),e.ok?l.success(e.message):l.error(e.message)},onError:e=>{l.error(v(e,`Unable to run daily growth pass`))}}),children:d.isPending?(0,Z.jsx)(a,{size:14,className:`animate-spin`}):(0,Z.jsx)(re,{size:14})}),(0,Z.jsx)(c,{variant:`ghost`,size:`sm`,title:$===`active`?`Health & Error Log`:`${$} — Inspect account health details`,"aria-label":$===`active`?`Health log for ${e.name}`:`Account is ${$} — inspect health details for ${e.name}`,disabled:T,onClick:()=>r(e),icon:(0,Z.jsx)(i,{size:12})}),(0,Z.jsx)(c,{variant:`ghost`,size:`sm`,title:`Refresh quota`,"aria-label":`Refresh ${e.name} quota`,disabled:T,onClick:()=>u.mutate(),icon:u.isPending?(0,Z.jsx)(a,{size:12,className:`animate-spin`}):(0,Z.jsx)(_,{size:12})}),(0,Z.jsx)(c,{variant:`ghost`,size:`sm`,title:`Delete account`,"aria-label":`Delete ${e.name}`,onClick:()=>n(e),className:`text-red`,icon:(0,Z.jsx)(te,{size:12})}),(0,Z.jsx)(w,{checked:e.active,disabled:u.isPending,onChange:n=>t(e,n),label:``,id:`switch-${e.id}`})]})]}),J&&(0,Z.jsxs)(`div`,{className:`flex items-center justify-center gap-4 border-t border-inner-border px-8 py-5 text-center text-badge text-red`,role:`alert`,children:[(0,Z.jsx)(s,{size:13,className:`shrink-0`}),(0,Z.jsx)(`span`,{children:J})]}),h?.windows.length?(0,Z.jsxs)(`div`,{className:`quota-window-list flex flex-1 flex-col gap-4 border-t border-inner-border px-7 py-4.5`,children:[(0,Z.jsx)(`div`,{className:`quota-window-section-label text-micro font-bold tracking-label text-text-tertiary`,children:`QUOTA WINDOWS`}),x.items.map((e,t)=>{let n=e.remainingPercent??null,r=typeof e.limit==`number`&&Number.isFinite(e.limit)?e.limit:null,i=typeof e.used==`number`&&Number.isFinite(e.used)?e.used:r!==null&&e.usedPercent!==null&&e.usedPercent!==void 0?r*e.usedPercent/100:null,a=N(n),o=n===null?0:Math.max(0,Math.min(100,n)),s=e=>e.toLocaleString(void 0,{maximumFractionDigits:2}),c=e=>{let t=Math.round(e*10)/10;return t>0&&t<.1?`<0.1`:t.toLocaleString(void 0,{maximumFractionDigits:1})},l=M(e.label);return(0,Z.jsxs)(`div`,{className:`quota-window-row grid grid-cols-quota-window min-w-0 items-center gap-x-6 gap-y-2 max-small:grid-cols-[minmax(0,1fr)_auto] max-small:gap-x-4 max-small:gap-y-2.5`,children:[(0,Z.jsx)(`div`,{className:`quota-window-heading min-w-0 max-small:col-start-1`,children:(0,Z.jsx)(`span`,{className:`text-badge font-semibold text-text-primary`,children:l})}),(0,Z.jsx)(`div`,{className:`quota-bar-track quota-window-bar min-w-0 w-full h-5 rounded-tiny bg-inner-border overflow-hidden max-small:col-span-full max-small:row-start-2`,role:`progressbar`,"aria-label":`${l} remaining quota`,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":n===null?void 0:o,"aria-valuetext":n===null?`Quota only`:`${c(n)}% remaining`,children:(0,Z.jsx)(`div`,{className:`quota-bar-fill h-full rounded-tiny transition-[width] duration-(--dur-macro) ease-spring`,style:{width:`${o}%`,background:a.bar}})}),(0,Z.jsx)(`span`,{className:`quota-window-remaining whitespace-nowrap text-badge font-bold tabular-nums max-small:col-start-2 max-small:row-start-1`,style:{color:a.text},children:n===null?`—`:`${c(n)}%`}),(0,Z.jsxs)(`div`,{className:`quota-window-details col-span-full flex min-w-0 items-center justify-end gap-6 text-micro text-text-tertiary max-small:row-start-3 max-small:flex-wrap max-small:justify-between max-small:gap-4`,children:[(0,Z.jsx)(`span`,{className:`quota-window-usage mr-auto tabular-nums max-small:min-w-0`,children:i!==null&&r!==null?`${s(i)} / ${s(r)} Credits`:`Quota only`}),e.resetsAt&&(0,Z.jsx)(`span`,{className:`quota-window-reset whitespace-nowrap tabular-nums text-right max-small:ml-auto`,children:k(e.resetsAt,e.recurring)})]})]},`${e.kind??e.label}:${e.resetsAt??`none`}:${t}`)}),x.pageCount>1&&(0,Z.jsxs)(`nav`,{"aria-label":`Quota windows for ${e.name}`,className:`quota-window-pagination mt-auto flex items-center justify-between gap-4 border-t border-inner-border pt-4 max-small:flex-wrap`,children:[(0,Z.jsxs)(`span`,{"aria-live":`polite`,className:`text-micro text-text-tertiary`,children:[`Showing `,x.startIndex+1,`–`,x.startIndex+x.items.length,` of `,b.length]}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(c,{variant:`ghost`,size:`sm`,"aria-label":`Previous quota windows for ${e.name}`,disabled:x.page===0,icon:(0,Z.jsx)(ie,{size:13}),onClick:()=>y(x.page-1),className:`h-14 px-4 py-0`,children:`Previous`}),(0,Z.jsx)(c,{variant:`ghost`,size:`sm`,"aria-label":`Next quota windows for ${e.name}`,disabled:x.page>=x.pageCount-1,icon:(0,Z.jsx)(ee,{size:13}),onClick:()=>y(x.page+1),className:`h-14 px-4 py-0`,children:`Next`})]})]})]}):J?null:(0,Z.jsx)(`div`,{className:`border-t border-inner-border px-7 py-9 text-center text-badge text-text-tertiary`,children:T||e.pending?`Fetching quota…`:`No quota data`})]})}function ce(){let[e,t]=(0,X.useState)(`all`),[n,r]=(0,X.useState)(`all`),[i,a]=(0,X.useState)(!1),{data:s,isLoading:ee,isError:f,error:p,isFetching:h,dataUpdatedAt:_,refetch:te}=H(),v=(0,X.useMemo)(()=>[...s?.providers??[]].sort((e,t)=>e.name.localeCompare(t.name,void 0,{sensitivity:`base`})),[s?.providers]),x=(0,X.useMemo)(()=>s?.accounts??[],[s?.accounts]),C=s?.refreshing??0,w=I(),E=U(),D=B(),O=F(),[k,A]=(0,X.useState)(null),[j,M]=(0,X.useState)(null),[N,P]=(0,X.useState)(null),L=(0,X.useMemo)(()=>{let t=x.filter(t=>{if(e!==`all`&&t.provider!==e)return!1;let r=!!t.quota?.windows.length;return n===`untracked`?!r:!(!r||n===`active`&&!t.active||n===`disabled`&&t.active)}),r=(e,t)=>e.providerName.localeCompare(t.providerName,void 0,{sensitivity:`base`})||e.name.localeCompare(t.name,void 0,{sensitivity:`base`});return[...t].sort(i?(e,t)=>$(e)-$(t)||r(e,t):r)},[n,x,i,e]),R=async(e,t)=>{try{await E.mutateAsync({id:e.id,active:t}),l.success(`${e.name} ${t?`enabled`:`disabled`}`)}catch(e){l.error(e instanceof Error?e.message:`Unable to update account`)}},z=async()=>{let e=x.filter(e=>e.active&&Q(e));await D.mutateAsync({ids:e.map(e=>e.id),active:!1}),l.success(`Disabled ${e.length} empty accounts`)},V=async()=>{let e=x.filter(e=>!e.active&&e.quota?.windows.some(e=>e.remainingPercent!==null&&e.remainingPercent>0));await D.mutateAsync({ids:e.map(e=>e.id),active:!0}),l.success(`Enabled ${e.length} available accounts`)},W=async e=>{await O.mutateAsync(e.id),l.success(`${e.name} deleted`)},G=_>0?new Date(_).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}):`Not updated`,q=x.filter(Q).length;return(0,Z.jsxs)(T,{gap:`16px`,className:`dashboard-page min-h-0 flex-1`,children:[(0,Z.jsx)(ne,{children:(0,Z.jsxs)(b,{className:`flex flex-col gap-5`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-5`,children:[(0,Z.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-wrap items-center gap-4`,children:[(0,Z.jsx)(S,{"aria-label":`Filter quota by provider`,value:e,onValueChange:t,className:`w-full h-16 max-small:w-80`,options:[{value:`all`,label:`All Providers`},...v.map(e=>({value:e.id,label:e.name}))]}),(0,Z.jsx)(S,{"aria-label":`Filter quota by account`,value:n,onValueChange:r,className:`w-full h-16 max-small:w-67.5`,options:[{value:`all`,label:`With quota`},{value:`active`,label:`Active`},{value:`disabled`,label:`Disabled`},{value:`untracked`,label:`No quota`}]})]}),(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4`,children:[(0,Z.jsx)(c,{variant:i?`secondary`:`ghost`,size:`sm`,onClick:()=>a(e=>!e),"aria-pressed":i,icon:(0,Z.jsx)(J,{size:13}),children:`Expiring first`}),(0,Z.jsx)(c,{variant:`ghost`,size:`sm`,className:`text-red`,disabled:q===0||h,onClick:()=>void z(),icon:(0,Z.jsx)(u,{size:13}),children:`Turn off Empty`}),(0,Z.jsx)(c,{variant:`ghost`,size:`sm`,className:`text-green`,disabled:h,onClick:()=>void V(),icon:(0,Z.jsx)(o,{size:13}),children:`Turn on Available`})]})]}),(0,Z.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-4 border-t border-inner-border pt-5`,children:[(0,Z.jsxs)(`span`,{className:`text-badge text-text-tertiary`,children:[L.length,` shown`,q>0?` · ${q} empty`:``]}),(0,Z.jsxs)(`span`,{className:`flex min-w-0 flex-wrap items-center gap-x-5 gap-y-3 text-badge text-text-tertiary`,children:[C>0?`Refreshing ${C} account${C===1?``:`s`}…`:`Auto-refresh 60s · ${G}`,(0,Z.jsx)(oe,{accounts:x}),(0,Z.jsx)(c,{variant:`secondary`,size:`sm`,title:`Queue quota refresh`,"aria-label":`Queue quota refresh`,disabled:h||w.isPending||x.length===0,icon:(0,Z.jsx)(g,{size:13,className:w.isPending?`animate-spin`:void 0}),onClick:()=>w.mutate(x.map(e=>e.id),{onSuccess:e=>{l.success(e.failed===0?`Refreshed ${e.succeeded} quota${e.succeeded===1?``:`s`}`:`Refreshed ${e.succeeded}, ${e.failed} failed`)},onError:e=>l.error(e instanceof Error?e.message:`Unable to refresh quota`)}),children:`Refresh`})]})]})]})}),(0,Z.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-6`,children:ee?(0,Z.jsx)(d,{className:`min-h-0 flex flex-1 flex-col items-center justify-center`,kind:`loading`,title:`Loading quota data`,description:`Reading provider account limits…`}):f?(0,Z.jsx)(d,{className:`min-h-0 flex flex-1 flex-col items-center justify-center`,kind:`error`,title:`Unable to load quota data`,description:p instanceof Error?p.message:`Check the console session and retry.`,action:(0,Z.jsx)(c,{variant:`secondary`,onClick:()=>void te(),children:`Retry`})}):L.length===0?(0,Z.jsx)(`div`,{className:`flex-1 flex items-center justify-center p-12 border border-dashed border-transparent rounded-card bg-transparent text-center`,children:(0,Z.jsx)(m,{title:`No account quota data`,message:`Nothing is reporting a quota window yet. Add a provider account and its limits will appear here.`})}):(0,Z.jsx)(`div`,{className:`quota-account-grid scroll-region min-h-0 flex-1 gap-6 [align-content:start]`,children:L.map(e=>(0,Z.jsx)(se,{account:e,onToggle:(e,t)=>void R(e,t),onDelete:e=>A(e),onShowHealth:e=>M(e),onShowResets:e=>P(e)},e.id))})}),j&&(0,Z.jsx)(K,{summary:{providerId:j.provider,accountId:j.id,title:j.name,status:j.health?.status??`unknown`,errorCategory:j.health?.lastErrorCategory??void 0,errorMessage:j.health?.sanitizedMessage??void 0,emptyMessage:`Status transitions, rate limits, quota refreshes, check-ins, and auto-recoveries will appear here.`},onClose:()=>M(null)}),N&&(0,Z.jsx)(ae,{account:N,onClose:()=>P(null)}),(0,Z.jsx)(y,{open:k!==null,onClose:()=>A(null),onConfirm:async()=>{k&&await W(k)},title:`Delete account?`,message:`Delete "${k?.name}"? This cannot be undone.`,confirmLabel:`Delete`,danger:!0})]})}export{ce as default};
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t,r as n,t as r}from"./jsx-runtime-CXUMngI_.js";import{l as i,s as a}from"./numbers-Bs4LOOuf.js";import{t as o}from"./download-A0SW9OCW.js";import{t as s}from"./eye-C_hawfH4.js";import{n as c,r as l}from"./state-DYdQmdAl.js";import{t as u}from"./dialog-BtpsJU98.js";import{n as d,r as f,t as p}from"./settings-mpmXTgUa.js";import{t as m}from"./trash-Cppn5c3R.js";import{T as h}from"./assert-NHwYq95t.js";import{l as g,o as _,s as v}from"./query-keys-D7wX2vM5.js";import{t as y}from"./useMutation-w4u4CVue.js";import{n as b,r as x,t as S}from"./card--AtFedAq.js";import{n as C,t as w}from"./download-dRFo5_Wu.js";import{n as T}from"./input-BG41et9G.js";import{t as E}from"./select-DsX5QT8K.js";import{t as ee}from"./switch-CidSfbG7.js";import{t as D}from"./stack-DwLmjUFK.js";import{t as O}from"./banner-4_WNg2WZ.js";import{t as k}from"./backup-file-gdKIlg8U.js";var te=e(`database-backup`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 12a9 3 0 0 0 5 2.69`,key:`1ui2ym`}],[`path`,{d:`M21 9.3V5`,key:`6k6cib`}],[`path`,{d:`M3 5v14a9 3 0 0 0 6.47 2.88`,key:`i62tjy`}],[`path`,{d:`M12 12v4h4`,key:`1bxaet`}],[`path`,{d:`M13 20a5 5 0 0 0 9-3 4.5 4.5 0 0 0-4.5-4.5c-1.33 0-2.54.54-3.41 1.41L12 16`,key:`1f4ei9`}]]),ne=e(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]),A=t(n(),1);function re(){return y({mutationFn:async({password:e,sections:t,compressed:n,onProgress:r})=>{let i=new URLSearchParams({password:e});t!==void 0&&t.length>0&&i.set(`sections`,t),n===!0&&i.set(`compressed`,`1`);let a=`/backup/export?${i.toString()}`;if(n!==!0)return _(a);let o=await _(a),s=atob(o.bytes),c=Uint8Array.from(s,e=>e.charCodeAt(0));return r?.({loaded:c.byteLength,total:c.byteLength}),c}})}function ie(){let e=h();return y({mutationFn:({password:e,scopes:t})=>_(`/backup/delete-all`,{method:`POST`,body:JSON.stringify({password:e,scopes:t})}),onSuccess:async()=>{await e.invalidateQueries()}})}function j(){let e=h();return y({mutationFn:({password:e,backup:t,onProgress:n})=>v(`/backup/import`,JSON.stringify({password:e,backup:t}),n),onSuccess:async()=>{await e.invalidateQueries()}})}var M=r();function N({report:e}){let t=Object.entries(e.imported).filter(([,e])=>e>0);return(0,M.jsxs)(D,{gap:`8px`,children:[t.length>0?(0,M.jsxs)(`p`,{className:`text-caption`,children:[`Imported: `,t.map(([e,t])=>`${t} ${e}`).join(`, `)]}):null,e.remapped.length>0?(0,M.jsxs)(`p`,{className:`text-caption text-text-secondary`,children:[`Remapped provider ids: `,e.remapped.join(`, `)]}):null,e.skipped.length>0?(0,M.jsxs)(`div`,{children:[(0,M.jsxs)(`p`,{className:`text-caption text-yellow`,children:[`Skipped (`,e.skipped.length,`) — nothing was guessed:`]}),(0,M.jsx)(`ul`,{className:`text-badge text-text-tertiary mt-2 ml-8`,children:e.skipped.map(e=>(0,M.jsx)(`li`,{children:e},e))})]}):null,e.warnings.length>0?(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`p`,{className:`text-caption text-text-secondary`,children:`Warnings:`}),(0,M.jsx)(`ul`,{className:`text-badge text-text-tertiary mt-2 ml-8`,children:e.warnings.map(e=>(0,M.jsx)(`li`,{children:e},e))})]}):null]})}function P({warnings:e}){return e.length===0?null:(0,M.jsxs)(O,{tone:`warning`,surface:`raised`,live:`status`,children:[(0,M.jsxs)(`strong`,{children:[`Restore completed with `,e.length,` warning`,e.length===1?``:`s`]}),(0,M.jsx)(`ul`,{className:`mt-2 ml-8`,children:e.map((e,t)=>(0,M.jsxs)(`li`,{children:[e.table?`${e.table}${e.column?`.${e.column}`:``}: `:``,e.reason]},`${e.table??`backup`}:${e.column??`general`}:${t}`))})]})}function F(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}function I(e,t){if(e===null)return t;let n=Math.max((Date.now()-e.startedAt)/1e3,.1),r=F(e.loaded/n);return`${e.total===null?F(e.loaded):`${F(e.loaded)} / ${F(e.total)}`} · ${r}/s`}function L(){let[e,t]=(0,A.useState)(``),[n,r]=(0,A.useState)(null),[s,c]=(0,A.useState)(!0),[l,d]=(0,A.useState)(!1),[f,p]=(0,A.useState)(!0),[h,_]=(0,A.useState)(null),[v,y]=(0,A.useState)(null),[E,F]=(0,A.useState)(null),[L,R]=(0,A.useState)(null),[z,B]=(0,A.useState)(null),[V,H]=(0,A.useState)(null),[U,W]=(0,A.useState)(new Set),[G,K]=(0,A.useState)(null),q=(0,A.useRef)(null),J=re(),Y=j(),X=ie(),ae=e=>{W(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},Z=()=>{r(null),t(``)},oe=()=>{U.size!==0&&(t(``),r(`delete`))},se=async()=>{if(e.length===0)return;let t=await X.mutateAsync({password:e,scopes:[...U]});W(new Set),Z(),a.success(`Selected configuration deleted.`,Object.entries(t.deleted).map(([e,t])=>`${e}: ${t}`).join(` · `))},Q=()=>{let t=[...s?[`config`]:[],...l?[`telemetry`]:[]].join(`,`);if(t.length===0){a.error(`Select at least one backup section.`);return}J.mutate({password:e,sections:t,compressed:f,onProgress:e=>_(t=>({...e,startedAt:t?.startedAt??Date.now()}))},{onSuccess:e=>{let t=new Date().toISOString().slice(0,19).replace(/[:T]/g,`-`);e instanceof Uint8Array?w(`cartethyia_backup_${t}.json.gz`,e,`application/gzip`):C(`cartethyia_backup_${t}.json`,JSON.stringify(e,null,2),`application/json`),Z(),a.success(`Backup downloaded.`)},onError:e=>a.error(g(e,`Backup export failed.`))})},ce=e=>{K(e),y(null),F(null),R(null),B(null),H(null),t(``),r(`restore`)},le=async()=>{let t=G;if(t!==null){R(null);try{let n=await k(t),r=await Y.mutateAsync({password:e,backup:n,onProgress:e=>_(t=>({...e,startedAt:t?.startedAt??Date.now()}))});y(r.restored),F(r.warnings),B(r.report??null),H(r.format),Z(),K(null),a.success(r.warnings.length===0?`Restore complete.`:`Restore completed with warnings.`,r.warnings.length===0?null:`${r.warnings.length} item(s) need attention. See the restore report below.`)}catch(e){let t=g(e,`Backup restore failed.`);R(t),a.error(`Backup restore failed`,t)}}},$=v===null?[]:Object.entries(v);return(0,M.jsxs)(M.Fragment,{children:[(0,M.jsxs)(`div`,{className:`grid grid-cols-2 gap-8 w-full min-w-0 max-medium:grid-cols-1`,children:[(0,M.jsxs)(S,{className:`h-full`,children:[(0,M.jsx)(x,{title:`Backup`,subtitle:`Download a JSON snapshot, or restore one you already trust`,icon:(0,M.jsx)(te,{size:16})}),(0,M.jsx)(b,{className:`flex flex-1 flex-col`,children:(0,M.jsxs)(D,{gap:`14px`,className:`flex-1`,children:[(0,M.jsxs)(`fieldset`,{className:`grid grid-cols-2 gap-5 min-w-0 border-0 m-0 p-0 max-medium:grid-cols-1`,children:[(0,M.jsx)(`legend`,{className:`mb-4 text-text-secondary text-badge font-semibold`,children:`Include in the download`}),(0,M.jsxs)(`label`,{className:`flex items-start gap-5 min-h-21 px-6 py-5 border border-inner-border rounded-control bg-surface-2 text-text-primary text-caption leading-snug cursor-pointer hover:border-border-strong hover:bg-hover has-checked:border-accent has-checked:bg-accent-soft`,children:[(0,M.jsx)(`input`,{type:`checkbox`,checked:s,onChange:e=>c(e.target.checked)}),(0,M.jsxs)(`span`,{className:`flex flex-col gap-1 min-w-0`,children:[(0,M.jsx)(`strong`,{children:`Account, proxy & settings`}),(0,M.jsx)(`small`,{className:`text-text-tertiary text-badge`,children:`Credentials, API-key hashes, routing, and settings`})]})]}),(0,M.jsxs)(`label`,{className:`flex items-start gap-5 min-h-21 px-6 py-5 border border-inner-border rounded-control bg-surface-2 text-text-primary text-caption leading-snug cursor-pointer hover:border-border-strong hover:bg-hover has-checked:border-accent has-checked:bg-accent-soft`,children:[(0,M.jsx)(`input`,{type:`checkbox`,checked:l,onChange:e=>d(e.target.checked)}),(0,M.jsxs)(`span`,{className:`flex flex-col gap-1 min-w-0`,children:[(0,M.jsx)(`strong`,{children:`Telemetry history`}),(0,M.jsx)(`small`,{className:`text-text-tertiary text-badge`,children:`Status, tokens, cost, latency — never prompt bodies`})]})]})]}),(0,M.jsxs)(`div`,{className:`flex items-center justify-between gap-6 rounded-control border border-inner-border px-6 py-5`,children:[(0,M.jsxs)(`span`,{children:[(0,M.jsx)(`strong`,{className:`block text-body`,children:`Highly Compress Backup`}),(0,M.jsx)(`small`,{className:`text-badge text-text-tertiary`,children:`Makes the download smaller.`})]}),(0,M.jsx)(ee,{checked:f,onChange:p,"aria-label":`Highly Compress Backup`})]}),(0,M.jsx)(`p`,{className:`mt-1 text-badge text-text-tertiary`,children:`The file contains provider credentials. Treat it like the database. Prompt and response bodies, health-event history, and console sessions are left out.`}),(0,M.jsxs)(`div`,{className:`mt-auto flex justify-end gap-4`,children:[(0,M.jsx)(i,{variant:`primary`,size:`sm`,onClick:()=>{t(``),r(`download`)},disabled:!s&&!l,icon:(0,M.jsx)(o,{size:13}),children:`Download backup`}),(0,M.jsx)(i,{variant:`secondary`,size:`sm`,onClick:()=>q.current?.click(),icon:(0,M.jsx)(ne,{size:13}),children:`Restore from file`}),(0,M.jsx)(`input`,{ref:q,type:`file`,accept:`application/json,.json,.gz,application/gzip`,className:`sr-only`,onChange:e=>{let t=e.target.files?.[0];t&&ce(t),e.target.value=``}})]}),V===null?null:(0,M.jsxs)(`p`,{className:`mt-1 text-badge text-text-tertiary`,children:[`Detected format: `,V===`nine_router`?`router export`:`Cartethyia backup`]}),v===null?null:(0,M.jsxs)(O,{tone:`success`,surface:`raised`,live:`status`,children:[(0,M.jsx)(`strong`,{children:`Restore complete`}),$.length>0?(0,M.jsx)(`ul`,{children:$.map(([e,t])=>(0,M.jsxs)(`li`,{children:[e,`: `,t]},e))}):(0,M.jsx)(`p`,{children:`No rows were imported.`})]}),E===null?null:(0,M.jsx)(P,{warnings:E}),z===null?null:(0,M.jsx)(N,{report:z})]})})]}),(0,M.jsxs)(S,{className:`settings-danger h-full`,children:[(0,M.jsx)(x,{title:`Delete data`,subtitle:`Removes the scopes you check. Console users, sessions, and audit history stay.`,icon:(0,M.jsx)(m,{size:16})}),(0,M.jsx)(b,{className:`flex flex-1 flex-col`,children:(0,M.jsxs)(D,{gap:`12px`,className:`flex-1`,children:[(0,M.jsxs)(`fieldset`,{className:`grid grid-cols-1 gap-5 min-w-0 border-0 m-0 p-0`,children:[(0,M.jsx)(`legend`,{className:`mb-4 text-text-secondary text-badge font-semibold`,children:`Delete`}),[[`providers`,`Providers`,`Accounts, credentials, tenant models, routing, and account health`],[`proxies`,`Proxies`,`Network pools, pool settings, and pool health`],[`configuration`,`All configuration`,`Providers, proxies, aliases, combos, API keys, CLI tools, and settings`]].map(([e,t,n])=>(0,M.jsxs)(`label`,{className:`flex items-start gap-5 min-h-21 px-6 py-5 border border-inner-border rounded-control bg-surface-2 text-text-primary text-caption leading-snug cursor-pointer hover:border-border-strong hover:bg-hover has-checked:border-accent has-checked:bg-accent-soft`,children:[(0,M.jsx)(`input`,{type:`checkbox`,checked:U.has(e),onChange:()=>ae(e)}),(0,M.jsxs)(`span`,{className:`flex flex-col gap-1 min-w-0`,children:[(0,M.jsx)(`strong`,{children:t}),(0,M.jsx)(`small`,{className:`text-text-tertiary text-badge`,children:n})]})]},e))]}),(0,M.jsx)(`div`,{className:`mt-auto flex justify-end`,children:(0,M.jsx)(i,{variant:`danger`,size:`sm`,icon:(0,M.jsx)(m,{size:14}),disabled:U.size===0,onClick:oe,children:`Delete selected`})})]})})]})]}),(0,M.jsx)(u,{open:n!==null,onClose:Z,title:n===`delete`?`Confirm deletion`:n===`restore`?`Restore backup`:`Download backup`,description:`The console password is checked again before this runs.`,size:`sm`,footer:(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(i,{variant:`secondary`,size:`sm`,onClick:Z,children:`Cancel`}),(0,M.jsx)(i,{variant:n===`delete`?`danger`:`primary`,size:`sm`,loading:J.isPending||Y.isPending||X.isPending,disabled:e.length===0||J.isPending||Y.isPending||X.isPending,onClick:()=>{_(null),n===`download`?Q():n===`restore`?le():se()},children:J.isPending?I(h,`Downloading…`):Y.isPending?I(h,`Uploading…`):X.isPending?`Working…`:n===`delete`?`Delete permanently`:n===`restore`?`Restore`:`Download`})]}),children:(0,M.jsxs)(D,{gap:`10px`,children:[n===`restore`&&L!==null?(0,M.jsx)(`p`,{role:`alert`,className:`text-caption text-red`,children:L}):null,(0,M.jsx)(`p`,{className:`mt-1 text-badge text-text-tertiary`,children:n===`delete`?`This cannot be undone. The password is verified again before anything is removed.`:n===`restore`?`Restore replaces the tenant configuration in this file. Continue only if the file is trusted.`:`The export is plain JSON and contains provider credentials.`}),(0,M.jsx)(T,{label:`Console password`,type:`password`,value:e,onChange:e=>t(e.target.value),autoComplete:`current-password`,"data-autofocus":!0})]})})]})}function R(){return y({mutationFn:e=>_(`/auth/change-password`,{method:`POST`,body:JSON.stringify(e)})})}function z(){let e=p(),t=d(),n=e.data;return e.isPending?(0,M.jsx)(l,{label:`Loading privacy settings…`}):e.isError||!n?(0,M.jsx)(c,{message:g(e.error,`Failed to load runtime settings`),onRetry:()=>void e.refetch()}):(0,M.jsxs)(S,{className:`h-full`,children:[(0,M.jsx)(x,{title:`Privacy`,subtitle:`What request telemetry stores, and how client addresses are shown`,icon:(0,M.jsx)(s,{size:16})}),(0,M.jsx)(b,{children:(0,M.jsxs)(D,{gap:`16px`,children:[(0,M.jsxs)(`div`,{className:`settings-field`,children:[(0,M.jsx)(E,{label:`Telemetry payloads`,id:`privacy-payloads`,value:n.telemetryPayloads,onValueChange:e=>t.mutate({telemetryPayloads:e===`full`||e===`metadata`?e:`none`},{onSuccess:()=>a.success(`Payload capture updated`),onError:e=>a.error(g(e,`Could not update payload capture.`))}),options:[{value:`none`,label:`Off — no payload capture`},{value:`metadata`,label:`Metadata — method and headers, 15 minutes`},{value:`full`,label:`Full — redacted bodies, 15 minutes`}]}),(0,M.jsx)(`p`,{className:`mt-1 text-badge text-text-tertiary`,children:`Request metadata is always kept. Bodies stay off until you turn them on, and anything captured is redacted and deleted after 15 minutes.`})]}),n.telemetryPayloads===`full`?(0,M.jsxs)(`div`,{className:`settings-field`,children:[(0,M.jsx)(E,{label:`Capture depth`,id:`privacy-payload-depth`,value:n.telemetryPayloadDepth,onValueChange:e=>t.mutate({telemetryPayloadDepth:e===`moderate`||e===`maximum`?e:`minimum`},{onSuccess:()=>a.success(`Capture depth updated`),onError:e=>a.error(g(e,`Could not update capture depth.`))}),options:[{value:`minimum`,label:`Minimum — 1 MiB cap`},{value:`moderate`,label:`Moderate — 8 MiB cap`},{value:`maximum`,label:`Maximum — 16 MiB cap`}]}),n.telemetryPayloadDepth===`minimum`?null:(0,M.jsxs)(O,{tone:`warning`,surface:`raised`,className:`text-text-secondary`,children:[(0,M.jsx)(`strong`,{children:`High CPU and memory while this is on.`}),` Use it to debug, then switch back to Metadata or Minimum.`]})]}):null,(0,M.jsxs)(`div`,{className:`settings-field`,children:[(0,M.jsx)(E,{label:`Client IP display`,id:`privacy-ip`,value:n.privacyMode,onValueChange:e=>t.mutate({privacyMode:e===`full`?`full`:`masked`},{onSuccess:()=>a.success(`IP display updated`),onError:e=>a.error(g(e,`Could not update IP display.`))}),options:[{value:`masked`,label:`Masked — recommended`},{value:`full`,label:`Show full IP`}]}),(0,M.jsx)(`p`,{className:`mt-1 text-badge text-text-tertiary`,children:`Raw addresses stay stored. This only changes how they are shown.`})]})]})})]})}function B(){let e=R(),[t,n]=(0,A.useState)(``),[r,a]=(0,A.useState)(``),[o,s]=(0,A.useState)(``),[c,l]=(0,A.useState)(null),[u,d]=(0,A.useState)(!1);return(0,M.jsxs)(D,{gap:`12px`,className:`flex-1`,children:[(0,M.jsx)(T,{id:`current-password`,label:`Current password`,type:`password`,value:t,onChange:e=>n(e.target.value),autoComplete:`current-password`}),(0,M.jsxs)(`div`,{className:`settings-pair settings-pair-tight`,children:[(0,M.jsx)(T,{id:`new-password`,label:`New password`,type:`password`,value:r,onChange:e=>a(e.target.value),autoComplete:`new-password`}),(0,M.jsx)(T,{id:`confirm-password`,label:`Confirm new password`,type:`password`,value:o,onChange:e=>s(e.target.value),autoComplete:`new-password`})]}),c?(0,M.jsx)(`p`,{role:`alert`,className:`settings-feedback`,"data-tone":`err`,children:c}):null,u?(0,M.jsx)(`p`,{role:`status`,className:`settings-feedback`,"data-tone":`ok`,children:`Password updated.`}):null,(0,M.jsx)(`div`,{className:`mt-auto flex justify-end`,children:(0,M.jsx)(i,{variant:`primary`,size:`sm`,onClick:()=>{if(d(!1),r.length<8){l(`New password must be at least 8 characters.`);return}if(r!==o){l(`New password and confirmation do not match.`);return}l(null),e.mutate({currentPassword:t,newPassword:r},{onSuccess:()=>{d(!0),n(``),a(``),s(``)},onError:e=>l(g(e,`Password change failed.`))})},disabled:e.isPending||!t||!r||!o,children:e.isPending?`Updating…`:`Update password`})})]})}function V(){return(0,M.jsxs)(S,{children:[(0,M.jsx)(x,{title:`Settings`,subtitle:`Account security, privacy, and tenant data`,icon:(0,M.jsx)(f,{size:16})}),(0,M.jsxs)(b,{className:`flex flex-col gap-10`,children:[(0,M.jsxs)(`section`,{className:`flex flex-col gap-5`,children:[(0,M.jsx)(`h2`,{className:`text-badge font-bold uppercase tracking-label text-text-tertiary`,children:`Account`}),(0,M.jsxs)(`div`,{className:`grid grid-cols-2 gap-8 w-full min-w-0 max-medium:grid-cols-1`,children:[(0,M.jsxs)(S,{className:`h-full`,children:[(0,M.jsx)(x,{title:`Security`,subtitle:`Change the password used to sign in to this console`,icon:(0,M.jsx)(f,{size:16})}),(0,M.jsx)(b,{className:`flex flex-1 flex-col`,children:(0,M.jsx)(B,{})})]}),(0,M.jsx)(z,{})]})]}),(0,M.jsxs)(`section`,{className:`flex flex-col gap-5`,children:[(0,M.jsx)(`h2`,{className:`text-badge font-bold uppercase tracking-label text-text-tertiary`,children:`Data`}),(0,M.jsx)(L,{})]})]})]})}export{V as default};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:var(--font-mono);--color-black:#000;--color-white:#fff;--spacing:2px;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-7xl:4.5rem;--text-7xl--line-height:1;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tight:-.025em;--tracking-normal:0em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-md:12px;--blur-xl:24px;--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--text-badge:11px;--banner-line-alpha:40%;--banner-surface-alpha:8%;--radius-micro:var(--radius-micro);--radius-tiny:var(--radius-tiny);--radius-chip:var(--radius-chip);--radius-narrow:var(--radius-narrow);--radius-inset:var(--radius-inset);--radius-control:var(--radius-control);--radius-panel:var(--radius-panel);--radius-card:var(--radius-card);--radius-hero:var(--radius-hero);--radius-sidebar:var(--radius-sidebar);--radius-pill:var(--radius-pill);--radius-full:9999px;--color-story-white:var(--text-primary);--color-story-night:var(--story-night);--color-story-core:var(--story-core);--color-story-blossom:var(--story-blossom);--color-story-voices:var(--story-voices);--color-story-red:var(--story-red);--color-story-denial:var(--story-denial);--color-story-shore:var(--story-shore);--font-head:var(--font-head);--shadow-card:var(--shadow-card);--shadow-popout:var(--shadow-popout);--ease-spring:var(--ease-spring);--z-index-header:40;--z-index-mobile-overlay:45;--z-index-mobile-panel:46;--animate-message-in:message-in .15s ease-out both;--animate-typing-bounce:typing-bounce 1.2s ease-in-out infinite;--animate-stream-caret:stream-caret 1.2s ease-in-out infinite;--animate-pulse-subtle:pulse-subtle 1.6s ease-in-out infinite;--leading-chat:1.35;--container-bubble-narrow:88%;--container-bubble-form:70vw;--height-route:calc(100dvh - 104px);--grid-template-columns-quota-window:minmax(120px, auto) minmax(0, 1fr) auto;--grid-template-columns-quota-account:repeat(auto-fill, minmax(min(420px, 100%), 1fr))}}@layer base{*,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*,:before,:after{box-sizing:border-box;margin:0;padding:0}}@layer components{.app-sidebar nav,.dialog-panel .modal-body,.drawer-body,.scroll-region{scrollbar-width:thin;scrollbar-color:var(--inner-border) transparent}html{scrollbar-width:none}html::-webkit-scrollbar{display:none}.app-sidebar nav::-webkit-scrollbar{width:8px;height:8px}.dialog-panel .modal-body::-webkit-scrollbar{width:8px;height:8px}.drawer-body::-webkit-scrollbar{width:8px;height:8px}.scroll-region::-webkit-scrollbar{width:8px;height:8px}.app-sidebar nav::-webkit-scrollbar-thumb{background:var(--inner-border);border-radius:var(--radius-pill)}.dialog-panel .modal-body::-webkit-scrollbar-thumb{background:var(--inner-border);border-radius:var(--radius-pill)}.drawer-body::-webkit-scrollbar-thumb{background:var(--inner-border);border-radius:var(--radius-pill)}.scroll-region::-webkit-scrollbar-thumb{background:var(--inner-border);border-radius:var(--radius-pill)}.app-sidebar nav::-webkit-scrollbar-track{background:0 0}.dialog-panel .modal-body::-webkit-scrollbar-track{background:0 0}.drawer-body::-webkit-scrollbar-track{background:0 0}.scroll-region::-webkit-scrollbar-track{background:0 0}.scroll-region{overflow-y:auto}html{background:var(--page-bg);color:var(--text-primary);font-size:14px;font-family:var(--font-sans);-webkit-font-smoothing:antialiased;overflow:visible}body{min-height:100dvh;font-family:var(--font-sans);color:var(--text-primary);background-color:var(--page-bg);background-attachment:fixed;margin:0}html[data-ambient-glow=off] body{background-image:none}html[data-glass-depth="2"]{--glass-depth:2}#root{flex-direction:column;min-height:100dvh;display:flex}::selection{background:var(--text-primary)}@supports (color:color-mix(in lab, red, red)){::selection{background:color-mix(in srgb, var(--text-primary) 18%, transparent)}}::selection{color:var(--text-primary)}@layer base{button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:none}button:disabled{cursor:not-allowed;opacity:.55}h1,h2,h3,.topbar-title,.brand-name,.auth-title{font-family:var(--font-head);letter-spacing:-.015em;font-weight:700}pre,code{word-break:break-all}}:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.card-glass,html[data-glass-enabled=true] .card-solid{--card-glass-depth:var(--glass-depth,1);background:var(--surface-1)!important}@supports (color:color-mix(in lab, red, red)){.card-glass,html[data-glass-enabled=true] .card-solid{background:color-mix(in srgb, var(--surface-1) calc(40% + var(--blur-cards,30) * 0.55%), transparent)!important}}.card-glass,html[data-glass-enabled=true] .card-solid{-webkit-backdrop-filter:blur(calc((100 - var(--blur-cards,30)) * var(--blur-cards-depth,30) * .01px));border:1px solid var(--inner-border);box-shadow:var(--shadow-card)}html[data-glass-enabled=true] .card-solid .bg-surface-1,html[data-glass-enabled=true] .card-solid .bg-surface-2,html[data-glass-enabled=true] .card-solid .bg-surface-3,html[data-glass-enabled=true] .card-solid .bg-code-surface,html[data-glass-enabled=true] .card-solid .stat-card,html[data-glass-enabled=true] .card-solid .backup-section-option,html[data-glass-enabled=true] .card-solid .nested-panel{background-color:var(--surface-1)!important}@supports (color:color-mix(in lab, red, red)){html[data-glass-enabled=true] .card-solid .bg-surface-1,html[data-glass-enabled=true] .card-solid .bg-surface-2,html[data-glass-enabled=true] .card-solid .bg-surface-3,html[data-glass-enabled=true] .card-solid .bg-code-surface,html[data-glass-enabled=true] .card-solid .stat-card,html[data-glass-enabled=true] .card-solid .backup-section-option,html[data-glass-enabled=true] .card-solid .nested-panel{background-color:color-mix(in srgb, var(--surface-1) calc(40% + var(--blur-cards,30) * 0.55%), transparent)!important}}.card-solid .card-solid{background:var(--surface-1)!important}@supports (color:color-mix(in lab, red, red)){.card-solid .card-solid{background:color-mix(in srgb, var(--surface-1) calc(40% + var(--blur-cards,30) * 0.55%), transparent)!important}}.card-solid .card-solid{-webkit-backdrop-filter:none!important}.glass{background:var(--glass-bg);-webkit-backdrop-filter:blur(calc(10px + (var(--card-glass-depth,1) * 4px)))}.app-sidebar,.app-topbar,.app-topbar-popover{background:var(--surface-1)!important}@supports (color:color-mix(in lab, red, red)){.app-sidebar,.app-topbar,.app-topbar-popover{background:color-mix(in srgb, var(--surface-1) calc(40% + var(--blur-chrome,30) * 0.55%), transparent)!important}}.app-sidebar,.app-topbar,.app-topbar-popover{-webkit-backdrop-filter:blur(calc((100 - var(--blur-chrome,30)) * var(--blur-chrome-depth,30) * .01px))!important}html[data-blur-cards-on=false] .card-solid,html[data-blur-cards-on=false] .card-glass,html[data-blur-chrome-on=false] .app-sidebar,html[data-blur-chrome-on=false] .app-topbar,html[data-blur-chrome-on=false] .app-topbar-popover,html[data-blur-cards-on=false] .user-card-content,html[data-blur-cards-on=false] .composer-glass{-webkit-backdrop-filter:none;background:var(--surface-1)!important}.card-solid[data-depth="1"],.card-glass[data-depth="1"],.card-muted[data-depth="1"]{--card-glass-depth:1}.card-solid[data-depth="2"],.card-glass[data-depth="2"],.card-muted[data-depth="2"]{--card-glass-depth:2}.card-solid[data-depth="3"],.card-glass[data-depth="3"],.card-muted[data-depth="3"]{--card-glass-depth:3}.card-compact{line-height:1.35}.card-compact .card-body-content{padding:10px 14px}.card-compact .card-header-bar{padding:8px 14px}.card-header-bar{border-bottom:1px solid var(--inner-border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;padding:10px 14px;display:flex}.card-header-left{align-items:center;gap:10px;min-width:0;display:flex}.card-header-leading{flex-shrink:0;align-items:center;gap:2px;display:flex}.card-header-action{flex-wrap:wrap;flex-shrink:1;justify-content:flex-end;align-items:center;gap:8px;min-width:0;max-width:100%;margin-left:auto;display:flex}.card-header-icon{border-radius:var(--radius-pill);background:var(--accent-soft);width:28px;height:28px;color:var(--accent);flex-shrink:0;place-items:center;display:grid}.card-header-icon svg{width:15px;height:15px}.card-header-icon[data-tone=purple]{background:var(--purple-soft);color:var(--purple)}.card-header-icon[data-tone=orange]{background:var(--orange-soft);color:var(--orange)}.card-header-titles{min-width:0}.card-header-title{color:var(--text-primary);font-size:14px;font-weight:700}.card-header-subtitle{color:var(--text-tertiary);margin-top:1px;font-size:11.5px}.card-header-subtitle-row{flex-flow:column wrap;align-items:flex-start;gap:4px;min-width:0;margin-top:1px;display:flex}.card-header-subtitle-row .card-header-subtitle{margin:0}.card-body-content{padding:12px 14px}.btn-labeled .btn-label{white-space:nowrap}@container rule-row (width<=820px){.btn-labeled{justify-content:center;gap:0;width:30px;padding:0}.btn-labeled .btn-label{display:none}}.model-card{transition:border-color .12s}.model-card:hover{border-color:var(--border-strong)}.model-card-delete:hover{color:var(--red);background:var(--red-soft)}.form-group{flex-direction:column;gap:6px;width:100%;display:flex}.form-label{color:var(--text-primary);justify-content:space-between;align-items:center;font-size:12px;font-weight:600;display:flex}.form-hint{color:var(--text-tertiary);font-size:11px;font-weight:400}.form-error{color:var(--red);margin-top:4px;font-size:11.5px}.switch-container{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:10px;display:inline-flex}.switch-container.is-disabled{cursor:not-allowed;opacity:.55}.switch-track{border-radius:var(--radius-control);width:42px;height:24px;transition:background-color .16s var(--ease-spring), border-color .16s var(--ease-spring);background-color:var(--track);border:1px solid var(--inner-border);cursor:inherit;align-items:center;padding:2px;display:flex;position:relative}.switch-track.is-checked{background-color:var(--accent)}.switch-thumb{background-color:var(--surface-1);width:18px;height:18px;transition:transform .18s var(--ease-spring), background-color .18s var(--ease-spring);border-radius:9999px;display:block;transform:translate(0);box-shadow:0 2px 4px #0003}.switch-track.is-checked .switch-thumb{background-color:var(--accent-foreground);transform:translate(18px)}.usage-floor-switch .switch-track,.usage-floor-switch .switch-thumb{border-radius:var(--radius-tiny)}.switch-label{color:var(--text-primary);font-size:13px;font-weight:500}.data-table-container{scrollbar-width:thin;width:100%;max-width:100%;overflow-x:auto}.data-table{border-collapse:collapse;text-align:left;width:100%;min-width:100%;font-size:12.5px}.data-table th{text-transform:uppercase;letter-spacing:.07em;color:var(--text-tertiary);border-bottom:1px solid var(--inner-border);white-space:nowrap;padding:7px 10px;font-size:10.5px;font-weight:700}.data-table thead th{z-index:2;background:var(--surface-1);box-shadow:inset 0 -1px 0 var(--inner-border);position:sticky;top:0}.proxy-table-scroll{margin-top:14px;overflow:hidden;container:rule-row/inline-size}.proxy-table-scroll .data-table thead th:first-child{border-top-left-radius:var(--radius-card)}.proxy-table-scroll .data-table thead th:last-child{border-top-right-radius:var(--radius-card)}.proxy-table-scroll .data-table thead th{padding-top:16px;padding-bottom:12px}.proxy-table-scroll .data-table th:last-child,.proxy-table-scroll .data-table td:last-child{padding-left:72px}.data-table td{border-bottom:1px solid var(--inner-border);color:var(--text-secondary);vertical-align:middle;padding:7px 10px}.data-table tr:last-child td{border-bottom:none}.data-table .btn-sm{height:26px;padding:0 6px}main>.state-viewport{min-height:clamp(220px,100dvh - 270px,1000px)}.dashboard-page:only-child{min-height:clamp(240px,100dvh - 200px,1200px)}.card-body-content>.state-viewport{flex:auto;min-height:0}.state-box{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:10px;width:100%;max-width:420px;padding:32px 24px;display:flex}.state-box-icon{border-radius:var(--radius-pill);background:var(--hover);width:44px;height:44px;color:var(--text-tertiary);place-items:center;display:grid}.state-box-icon-danger{background:var(--red)}@supports (color:color-mix(in lab, red, red)){.state-box-icon-danger{background:color-mix(in srgb, var(--red) 12%, transparent)}}.state-box-icon-danger{color:var(--red)}.state-box h3{color:var(--text-primary);font-size:14px;font-weight:700}.state-box p{color:var(--text-secondary);max-width:360px;font-size:12px}.state-box-label{font-weight:500}.auth-viewport{--auth-backdrop-veil:.35;background-image:linear-gradient(var(--page-bg), var(--page-bg)), url(/assets/brand/login_register.jpg);place-items:center;min-height:100dvh;padding:24px;display:grid}@supports (color:color-mix(in lab, red, red)){.auth-viewport{background-image:linear-gradient(color-mix(in srgb, var(--page-bg) calc(var(--auth-backdrop-veil) * 100%), transparent), color-mix(in srgb, var(--page-bg) calc(var(--auth-backdrop-veil) * 100%), transparent)), url(/assets/brand/login_register.jpg)}}.auth-viewport{background-position:50%,50%;background-repeat:no-repeat,no-repeat;background-size:cover,cover;background-attachment:fixed,fixed}.app-shell-root .auth-viewport{background:0 0}[data-theme=dark] .auth-viewport{--auth-backdrop-veil:.5}.auth-window{border-radius:var(--radius-card);background:var(--surface-1);width:min(100%,420px);padding:36px 32px}@supports (color:color-mix(in lab, red, red)){.auth-window{background:color-mix(in srgb, var(--surface-1) 78%, transparent)}}.auth-window{-webkit-backdrop-filter:blur(16px)saturate(120%);box-shadow:0 18px 40px -20px #00000080}.auth-header{text-align:center;margin-bottom:24px}.auth-logo{border-radius:var(--radius-control);background:var(--accent) center / cover no-repeat url(/assets/brand/favicon.jpg);width:48px;height:48px;color:var(--accent-foreground);place-items:center;margin:0 auto 14px;font-size:22px;font-weight:800;display:grid}.auth-title{letter-spacing:-.02em;color:var(--text-primary);font-size:20px;font-weight:700}.auth-desc{color:var(--text-secondary);margin-top:4px;font-size:12.5px}.github-badge{border:1px solid var(--inner-border);background:var(--surface-2);min-height:34px;color:var(--text-secondary);border-radius:6px;align-items:center;gap:8px;padding:0 10px;text-decoration:none;transition:border-color .16s,color .16s;display:inline-flex}.github-badge:hover{border-color:var(--border-strong);color:var(--text-primary)}.github-badge:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.github-badge-metric{width:auto;height:20px;display:block}.github-split{align-items:stretch;display:inline-flex;position:relative}.github-split .github-badge{border-top-right-radius:0;border-bottom-right-radius:0}.github-split-toggle{border:1px solid var(--inner-border);background:var(--surface-2);width:34px;color:var(--text-secondary);cursor:pointer;border-left:0;border-top-right-radius:6px;border-bottom-right-radius:6px;justify-content:center;align-items:center;padding:0;transition:border-color .16s,color .16s,background-color .16s;display:inline-flex}.github-split-toggle:hover{border-color:var(--border-strong);color:var(--text-primary)}.github-split-toggle:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.github-split-toggle[aria-expanded=true]{border-color:var(--border-strong);color:var(--text-primary)}.github-split-menu{z-index:40;border:1px solid var(--border-strong);background:var(--surface-1);border-radius:8px;flex-direction:column;min-width:230px;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 12px 32px #00000052}.github-split-item{color:var(--text-secondary);border-radius:5px;align-items:center;gap:9px;padding:7px 9px;text-decoration:none;display:flex}.github-split-item:hover,.github-split-item:focus-visible{background:var(--surface-2);color:var(--text-primary)}.github-split-item:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px}.github-split-item-text{flex-direction:column;gap:1px;min-width:0;display:flex}.github-split-item-label{font-size:12px;font-weight:600;line-height:1.25}.github-split-item-hint{color:var(--text-tertiary);font-size:11px;line-height:1.25}input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent);cursor:pointer;flex:none}.toast-surface{background:var(--glass-bg-2)!important;border-color:var(--glass-border-2)!important;color:var(--text-primary)!important}.toast-surface [data-content],.toast-surface [data-description]{color:var(--text-primary)!important}.app-shell-frame{flex:1 0 auto;width:100%;display:block;container:app-shell/inline-size}.app-shell-root{z-index:10;width:100%;max-width:1560px;min-height:100vh;box-sizing:border-box;grid-template-columns:272px minmax(0,1fr);gap:16px;min-height:100dvh;margin:0 auto;padding:16px;display:grid;position:relative}.app-shell-root[data-page-scroll=contained]{grid-template-rows:minmax(0,1fr);height:100dvh;min-height:100dvh}@container app-shell (width<=860px){.app-shell-root{grid-template-columns:minmax(0,1fr);gap:12px;padding:12px}.app-shell-root[data-drawer=open] .app-main-column{z-index:1;position:relative}.app-shell-root[data-drawer=open] .app-main-column:before{content:"";z-index:50;border-radius:var(--radius-card);pointer-events:auto;background:#0000009e;position:absolute;inset:0}}.app-sidebar{border-radius:var(--radius-sidebar);z-index:30;box-sizing:border-box;flex-direction:column;align-self:start;gap:4px;width:100%;min-width:0;height:calc(100dvh - 32px);padding:18px 14px;display:flex;position:sticky;top:16px;overflow-y:auto}@container app-shell (width<=860px){.app-sidebar{z-index:80;width:min(280px,100vw - 24px);max-width:280px;height:calc(100dvh - 24px);transition:transform .28s var(--ease-spring);box-shadow:var(--shadow-popout);position:fixed;top:12px;bottom:12px;left:12px;transform:translate(calc(-100% - 24px))}.app-sidebar.is-open{transform:translate(0)}}.app-bg{z-index:-1;pointer-events:none;background:var(--page-bg);position:fixed;inset:0}.custom-background{contain:none;z-index:0;pointer-events:none;opacity:var(--bg-opacity,.4);position:fixed;inset:0;overflow:hidden}.custom-background-media{top:calc(50% + var(--bg-y,0%));left:calc(50% + var(--bg-x,0%));object-fit:cover;width:100%;height:100%;transform:translate(-50%, -50%) scale(var(--bg-scale,1));filter:blur(var(--bg-blur,0px));position:absolute}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.brand-header{border-bottom:1px solid var(--inner-border);align-items:center;gap:10px;padding:4px 8px 16px;display:flex}.brand-icon{border-radius:var(--radius-control);background:var(--accent);width:36px;height:36px;color:var(--accent-foreground);place-items:center;font-size:16px;font-weight:800;display:grid}.brand-meta{flex:1;min-width:0}.brand-name{letter-spacing:-.02em;color:var(--text-primary);align-items:center;gap:6px;font-size:15px;font-weight:700;display:flex}.brand-version-badge{color:var(--text-tertiary);align-items:center;gap:3px;margin-top:1px;font-size:10px;font-weight:600;display:inline-flex}.brand-version-link{color:inherit;text-decoration:none}.brand-version-link:hover{color:var(--text-primary)}.brand-update-badge{letter-spacing:.02em;color:var(--status-danger);background:color-mix(in srgb, var(--status-danger) 14%, transparent);transition:background var(--dur-micro) var(--ease-spring), color var(--dur-micro) var(--ease-spring);border-radius:6px;align-items:center;gap:3px;padding:1px 6px;font-size:9.5px;font-weight:700;text-decoration:none;display:inline-flex}.brand-update-badge:hover{color:var(--accent-foreground);background:var(--status-danger)}.nav-group-section{margin-top:9px}.nav-group-section:first-child{margin-top:0}.nav-group-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-tertiary);padding:3px 10px 4px;font-size:10px;font-weight:700}.nav-items-container{flex-direction:column;gap:1px;display:flex;position:relative}.sidebar-active-indicator{border-radius:var(--radius-control);border:1px solid var(--inner-border);background:var(--active-pill);transition:transform var(--dur-macro) var(--ease-spring), height var(--dur-macro) var(--ease-spring), opacity var(--dur-macro) var(--ease-spring);pointer-events:none;position:absolute;left:0;right:0;box-shadow:0 2px 8px #0000000a}.nav-link-item{border-radius:var(--radius-control);color:var(--text-secondary);transition:color var(--dur-micro) var(--ease-spring), transform var(--dur-micro) var(--ease-spring);align-items:center;gap:8px;padding:5.4px 10px;font-size:12.75px;font-weight:500;text-decoration:none;display:flex;position:relative}.nav-link-item:hover{color:var(--text-primary)}.nav-link-item.active{color:var(--text-primary);font-weight:600}.nav-link-item:active{transform:scale(.98)}.nav-link-icon{flex-shrink:0;place-items:center;width:18px;height:18px;display:grid}.nav-link-icon svg{width:16px;height:16px}.nav-link-badge{background:var(--accent-soft);color:var(--accent);border-radius:6px;margin-left:auto;padding:2px 7px;font-size:10px;font-weight:700}.sidebar-user-card{border-top:1px solid var(--inner-border);margin-top:auto;padding-top:14px}.user-card-content{border-radius:var(--radius-card);border:1px solid var(--inner-border);background:color-mix(in srgb, var(--surface-1) calc(40% + var(--blur-cards,30) * 0.55%), transparent);-webkit-backdrop-filter:blur(calc((100 - var(--blur-cards,30)) * var(--blur-cards-depth,30) * .01px));align-items:center;gap:10px;padding:8px 10px;display:flex}.user-avatar{border-radius:var(--radius-full);color:#fff;background:linear-gradient(135deg,#ff9f0a,#ff375f);flex-shrink:0;place-items:center;width:32px;height:32px;font-size:12px;font-weight:700;display:grid}.user-info{flex:1;min-width:0}.user-name{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;font-size:13px;font-weight:600;overflow:hidden}.user-role{color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.app-main-column{box-sizing:border-box;z-index:1;flex-direction:column;gap:16px;min-width:0;max-width:100%;height:100%;display:flex;position:relative}main.route-enter{flex-direction:column;flex:auto;min-width:0;min-height:calc(100dvh - 104px);display:flex}.app-shell-root[data-page-scroll=contained] .app-main-column{min-height:0}.app-shell-root[data-page-scroll=contained] main.route-enter{min-height:0;overflow:hidden}main.route-enter>:only-child,main.route-enter>:only-child>.card-solid:last-child{flex:auto}main.route-enter .card-body-content{flex-direction:column;flex:auto;min-width:0;min-height:0;display:flex}main.route-enter .card-body-content>.data-table-container{box-sizing:border-box;min-width:100%;max-width:100%}main.route-enter .state-viewport{flex:auto;min-height:clamp(220px,100dvh - 270px,1000px)}main.route-enter .state-viewport-compact{min-height:0}.dashboard-page{flex-direction:column;gap:16px;width:100%;min-width:0;max-width:100%;display:flex}.app-topbar{z-index:40;border-radius:var(--radius-card);border:1px solid var(--inner-border);box-shadow:var(--shadow-card);align-items:center;gap:12px;padding:8px 14px;display:flex;position:sticky;top:16px}.app-topbar-popover{width:min(340px,100vw - 40px);max-height:calc(100vh - 108px);flex-direction:column;max-height:calc(100dvh - 108px);display:flex;position:fixed;top:84px;right:24px;overflow:hidden}@media (max-width:640px){.app-topbar-popover{width:min(340px,100vw - 32px);right:16px}}.topbar-menu-btn{border-radius:var(--radius-control);border:1px solid var(--inner-border);background:var(--hover);width:38px;height:38px;color:var(--text-primary);flex-shrink:0;place-items:center;display:none}@container app-shell (width<=860px){.topbar-menu-btn{display:grid}.topbar-title-icon{display:none}}.topbar-meta{flex:auto;min-width:0}.topbar-title{letter-spacing:-.02em;color:var(--text-primary);align-items:center;gap:8px;font-size:16px;font-weight:700;display:flex}.topbar-title-icon{color:var(--text-tertiary);flex-shrink:0}.topbar-subtitle{color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;font-size:11.5px;overflow:hidden}.topbar-actions{align-items:center;gap:8px;display:flex}.topbar-button{border-radius:var(--radius-control);border:1px solid var(--inner-border);background:var(--hover);height:38px;color:var(--text-secondary);transition:all var(--dur-micro) var(--ease-spring);align-items:center;gap:8px;padding:0 12px;font-size:12.5px;font-weight:500;display:inline-flex}.topbar-button:hover{background:var(--active-pill);color:var(--text-primary);border-color:var(--border-strong)}.topbar-icon-button{border-radius:var(--radius-control);border:1px solid var(--inner-border);background:var(--hover);width:38px;height:38px;color:var(--text-secondary);transition:all var(--dur-micro) var(--ease-spring);place-items:center;padding:0;display:grid}.topbar-icon-button:hover{background:var(--active-pill);color:var(--text-primary)}.topbar-icon-button:active{transform:scale(.92)}@media (max-width:640px){.topbar-button span,.topbar-button kbd{display:none}.topbar-button{place-items:center;width:38px;height:38px;padding:0;display:grid}.topbar-title{font-size:14.5px}.topbar-subtitle{display:none}.section-header{flex-direction:column;align-items:flex-start;gap:8px}.section-header-action,.section-header-action button{width:100%}}.status-indicator-dot{border-radius:var(--radius-full);flex-shrink:0;width:7px;height:7px}.status-indicator-dot.online{background:var(--green)}.status-indicator-dot.offline{background:var(--red)}.status-indicator-dot.pulse{animation:1.8s infinite pulse-subtle}html[data-app=share],html[data-app=share] body{height:auto;min-height:100%;overflow:hidden auto}html[data-app=share] #root{height:auto;min-height:100vh;min-height:100dvh;overflow:visible}html[data-app=share] body{--share-backdrop-veil:.8;background:0 0}html[data-app=share] .share-backdrop{z-index:0;background-image:linear-gradient(color-mix(in srgb, var(--page-bg) calc(var(--share-backdrop-veil) * 100%), transparent), color-mix(in srgb, var(--page-bg) calc(var(--share-backdrop-veil) * 100%), transparent)), url(/assets/brand/bansos_page.png);pointer-events:none;background-position:50%,50% 28%;background-repeat:no-repeat,no-repeat;background-size:cover,cover;position:fixed;inset:0}html[data-app=share] .share-header{z-index:var(--z-index-header);background-color:var(--page-bg);justify-content:center;padding:0 24px;transition:padding .26s,background-color .26s;display:flex;position:fixed;inset:0 0 auto}html[data-app=share] .share-header[data-scrolled=true]{background-color:#0000;padding:8px 16px}html[data-app=share] .share-header-inner{justify-content:space-between;align-items:center;gap:16px;width:min(100%,960px);min-height:66px;margin-inline:auto;transition:width .26s,min-height .26s,border-radius .26s,background-color .26s,box-shadow .26s;display:flex}html[data-app=share] .share-header-inner[data-scrolled=true]{border:1px solid var(--glass-border-2);border-radius:var(--radius-pill);background-color:var(--glass-bg);-webkit-backdrop-filter:blur(12px)saturate(1.5);backdrop-filter:blur(12px)saturate(1.5);width:min(720px,100vw - 32px);min-height:56px;padding-inline:12px;box-shadow:0 12px 32px -12px #0009}html[data-app=share][data-theme=dark] body{--share-backdrop-veil:.6}html[data-app=landing]{height:auto;min-height:100%;background:var(--page-bg);min-height:100dvh;color:var(--text-primary);font-size:16px;overflow:hidden auto}html[data-app=landing] body{height:auto;min-height:100%;background:var(--page-bg);min-height:100dvh;color:var(--text-primary);background-image:none;overflow:visible}html[data-app=landing] #root{height:auto;min-height:100%;min-height:100dvh;display:block;overflow:visible}html[data-app=landing] .landing-signal-grid{border-top:1px solid color-mix(in srgb, var(--color-story-white) 18%, transparent);grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;width:100%;max-width:650px;margin-top:32px;padding-top:16px;display:grid}html[data-app=landing] .landing-signal-tile{border:1px solid color-mix(in srgb, var(--color-story-white) 16%, transparent);border-radius:var(--radius-control);background:color-mix(in srgb, var(--color-story-white) 3%, transparent);align-items:center;gap:10px;min-width:0;padding:10px 12px;display:flex}html[data-app=landing] .landing-signal-icon{border:1px solid color-mix(in srgb, var(--story-accent) 35%, transparent);border-radius:var(--radius-chip);background:color-mix(in srgb, var(--story-accent) 8%, transparent);width:28px;height:28px;color:var(--story-accent);flex:none;place-items:center;display:grid}html[data-app=landing] .landing-signal-copy{flex-direction:column;flex:1;gap:5px;min-width:0;display:flex}html[data-app=landing] .landing-signal-label{color:color-mix(in srgb, var(--color-story-white) 60%, transparent);font-family:var(--font-mono);text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap;font-size:9px;font-weight:500;line-height:1.2;overflow:hidden}html[data-app=landing] .landing-signal-value{color:var(--color-story-white);font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;font-size:12px;font-weight:700;line-height:1}html[data-app=landing] .landing-header{z-index:var(--z-index-header);background-color:var(--story-deep);justify-content:center;padding:0 24px;transition:padding .26s,background-color .26s;display:flex;position:fixed;inset:0 0 auto}html[data-app=landing] .landing-header[data-scrolled=true]{background-color:#0000;padding:8px 16px}html[data-app=landing] .landing-header-inner{box-sizing:border-box;justify-content:space-between;align-items:center;gap:16px;width:min(100%,1280px);height:72px;margin-inline:auto;transition:width .26s,height .26s,border-radius .26s,border-color .26s,background-color .26s,box-shadow .26s;display:flex;position:relative}html[data-app=landing] .landing-header-inner[data-scrolled=true]{border:1px solid color-mix(in srgb, var(--story-accent) 20%, transparent);border-radius:var(--radius-pill);background-color:var(--story-deep);width:min(720px,100vw - 32px);height:56px;box-shadow:0 12px 32px -12px #000000c2, 0 0 0 1px color-mix(in srgb, var(--story-accent) 10%, transparent);padding-inline:12px}html[data-app=landing] .landing-header-brand{color:var(--color-story-white);flex-shrink:0;align-items:center;gap:10px;text-decoration:none;display:inline-flex}html[data-app=landing] .landing-header-desktop-nav{align-items:center;gap:4px;display:none}html[data-app=landing] .landing-header-desktop-nav a,html[data-app=landing] .landing-header-desktop-nav button{border-radius:var(--radius-inset);height:36px;color:color-mix(in srgb, var(--color-story-white) 68%, transparent);font-size:var(--text-badge);cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding-inline:14px;font-family:inherit;font-weight:600;text-decoration:none;transition:color .16s,background-color .16s;display:inline-flex}html[data-app=landing] .landing-header-desktop-nav a:hover,html[data-app=landing] .landing-header-desktop-nav button:hover{background-color:color-mix(in srgb, var(--color-story-white) 10%, transparent);color:var(--color-story-white)}html[data-app=landing] .landing-header-actions{flex-shrink:0;align-items:center;gap:8px;display:flex}html[data-app=landing] .landing-header-github,html[data-app=landing] .landing-header-control,html[data-app=landing] .landing-header-menu-toggle{box-sizing:border-box;border:1px solid color-mix(in srgb, var(--color-story-white) 25%, transparent);border-radius:var(--radius-control);background-color:color-mix(in srgb, var(--color-story-white) 8%, transparent);min-height:38px;color:var(--color-story-white);font-size:var(--text-badge);flex-shrink:0;justify-content:center;align-items:center;gap:8px;padding-inline:12px;font-family:inherit;font-weight:700;text-decoration:none;transition:border-color .16s,background-color .16s,color .16s;display:inline-flex}html[data-app=landing] .landing-header-github{min-height:38px;color:var(--color-story-white);background:0 0;border:0;padding-inline:0}html[data-app=landing] .landing-header-github .github-badge{border-color:color-mix(in srgb, var(--color-story-white) 25%, transparent);background-color:color-mix(in srgb, var(--color-story-white) 8%, transparent);min-height:38px;color:var(--color-story-white)}html[data-app=landing] .landing-header-github .github-badge:hover{border-color:var(--color-story-white);background-color:var(--color-story-white);color:var(--story-deep)}html[data-app=landing] .landing-header-github .github-split-toggle{border-color:color-mix(in srgb, var(--color-story-white) 25%, transparent);background-color:color-mix(in srgb, var(--color-story-white) 8%, transparent);color:var(--color-story-white)}html[data-app=landing] .landing-header-github .github-split-toggle:hover,html[data-app=landing] .landing-header-github .github-split-toggle[aria-expanded=true],html[data-app=landing] .landing-header-control:hover{border-color:var(--color-story-white);background-color:var(--color-story-white);color:var(--story-deep)}html[data-app=landing] .landing-header-control{white-space:nowrap;cursor:pointer}html[data-app=landing] .landing-header-show-all{display:none}html[data-app=landing] .landing-header-show-all.is-active{border-color:var(--color-story-white);background-color:var(--color-story-white);color:var(--story-deep)}html[data-app=landing] .landing-header-menu-toggle{cursor:pointer;width:38px;height:38px;padding:0;display:none}html[data-app=landing] .landing-header-menu-toggle:focus-visible,html[data-app=landing] .landing-header-desktop-nav a:focus-visible,html[data-app=landing] .landing-header-desktop-nav button:focus-visible,html[data-app=landing] .landing-header-control:focus-visible{outline:2px solid var(--focus-ring);outline-offset:3px}html[data-app=landing] .landing-header-menu-overlay,html[data-app=landing] .landing-header-mobile-nav{display:none}html[data-app=landing] .landing-header-menu-overlay{z-index:var(--z-index-mobile-overlay);opacity:0;pointer-events:none;background-color:#0000009e;transition:opacity .15s;position:fixed;inset:0}html[data-app=landing] .landing-header-menu-overlay[data-open=true]{opacity:1;pointer-events:auto}html[data-app=landing] .landing-header-mobile-nav{z-index:var(--z-index-mobile-panel);box-sizing:border-box;border:1px solid color-mix(in srgb, var(--story-accent) 22%, transparent);border-radius:var(--radius-panel);background-color:var(--story-deep);opacity:0;pointer-events:none;grid-template-columns:minmax(0,1fr);gap:4px;width:min(560px,100vw - 32px);max-height:calc(100dvh - 88px);padding:10px;transition:opacity .15s,transform .15s;position:fixed;top:72px;left:50%;overflow-y:auto;transform:translate(-50%,-8px);box-shadow:0 18px 42px -16px #000000c7}html[data-app=landing] .landing-header-mobile-nav[data-open=true]{opacity:1;pointer-events:auto;transform:translate(-50%)}html[data-app=landing] .landing-header-mobile-nav>div{min-height:36px}html[data-app=landing] .landing-header-mobile-nav>button{border-radius:var(--radius-inset);min-height:44px;transition:background-color .15s,color .15s}html[data-app=landing] .landing-header-mobile-nav>button:hover,html[data-app=landing] .landing-header-mobile-nav>button:focus-visible{background-color:color-mix(in srgb, var(--color-story-white) 9%, transparent);color:var(--color-story-white)}html[data-app=landing] .landing-header-mobile-nav>button:focus-visible,html[data-app=landing] .landing-header-mobile-nav>a:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}html[data-app=landing] .landing-header-mobile-nav>a{border-radius:var(--radius-control);min-height:44px;margin-top:4px}html[data-app=landing] .landing-story-shell{width:min(calc(100% - 2 * var(--landing-story-gutter)), var(--landing-story-max-width));grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);align-items:start;column-gap:clamp(2rem,5vw,5rem);display:grid}html[data-app=landing] .landing-story-visual{height:var(--landing-story-figure-height)}@media (min-width:641px){html[data-app=landing] .landing-header-show-all{display:inline-flex}}@media (min-width:1025px){html[data-app=landing] .landing-header-desktop-nav{display:flex}html[data-app=landing] .landing-header-inner[data-scrolled=true]{width:min(900px,100vw - 32px)}}@media (max-width:1024px){html[data-app=landing] .landing-header-console{display:inline-flex}html[data-app=landing] .landing-header-show-all{display:none}}@media (max-width:640px){html[data-app=landing] .landing-header{padding-inline:16px}html[data-app=landing] .landing-header-inner{gap:8px}html[data-app=landing] .landing-header-inner[data-scrolled=true]{padding-inline:10px}html[data-app=landing] .landing-header-show-all,html[data-app=landing] .landing-header-github .github-badge-metric{display:none}html[data-app=landing] .landing-header-github{width:auto;padding-inline:0}html[data-app=landing] .landing-header-github .github-badge{padding-inline:10px}}@media (max-width:380px){html[data-app=landing] .landing-header-brand small{display:none}}@media (max-width:820px){html[data-app=landing] .landing-story-shell{width:calc(100% - 2 * var(--landing-story-tablet-gutter));align-items:stretch;gap:var(--landing-story-stack-gap);flex-direction:column;display:flex}html[data-app=landing] .landing-story-visual{height:var(--landing-story-tablet-figure-height);max-width:var(--landing-story-figure-max-width);margin-inline:auto}}@media (max-width:700px){html[data-app=landing] .landing-signal-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:18px;padding-top:10px}html[data-app=landing] .landing-signal-tile{gap:8px;padding:9px}html[data-app=landing] .landing-signal-label{font-size:10px}html[data-app=landing] main>article{align-items:flex-start;min-height:0;padding-block:80px 16px}html[data-app=landing] .landing-story-shell{width:calc(100% - 2 * var(--landing-story-mobile-gutter));gap:10px}html[data-app=landing] .landing-story-visual{aspect-ratio:2.35;height:auto}html[data-app=landing] .landing-story-shell>div>h1{letter-spacing:-.035em;max-width:15ch;margin-top:10px;font-size:clamp(29px,8vw,36px);line-height:.98}html[data-app=landing] .landing-story-description{max-width:none;margin-top:12px;font-size:clamp(15px,4vw,16px);line-height:1.5}}@media (max-width:700px) and (max-height:760px){html[data-app=landing] main>article{padding-block:80px 16px}html[data-app=landing] .landing-story-shell{gap:10px}html[data-app=landing] .landing-story-visual{aspect-ratio:2.4}html[data-app=landing] .landing-story-description{margin-top:12px}html[data-app=landing] .landing-signal-grid{gap:6px;margin-top:14px;padding-top:8px}html[data-app=landing] .landing-signal-tile{gap:6px;padding:7px}html[data-app=landing] .landing-signal-icon{width:24px;height:24px}html[data-app=landing] .landing-story-shell>div>div:last-child{margin-top:8px}}::view-transition-group(story-backdrop){animation-duration:.62s;animation-timing-function:cubic-bezier(.22,.61,.36,1)}::view-transition-group(story-copy){animation-duration:.62s;animation-timing-function:cubic-bezier(.22,.61,.36,1)}::view-transition-old(story-backdrop){animation-duration:.62s}::view-transition-new(story-backdrop){animation-duration:.62s}::view-transition-old(story-copy){animation-duration:.42s}::view-transition-new(story-copy){animation-duration:.42s}@keyframes story-reveal-up{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes motion-route-in{0%{top:6px}to{top:0}}@keyframes popout-in{0%{opacity:0;transform:translateY(-8px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes dialog-overlay-in{0%{opacity:0}to{opacity:1}}@keyframes dialog-overlay-out{0%{opacity:1}to{opacity:0}}@keyframes dialog-panel-in{0%{opacity:0;transform:translateY(12px)scale(.96)}to{opacity:1;transform:none}}@keyframes dialog-panel-out{0%{opacity:1;transform:none}to{opacity:0;transform:translateY(8px)scale(.97)}}@keyframes drawer-panel-in{0%{transform:translate(105%)}to{transform:translate(0)}}@keyframes drawer-panel-out{0%{transform:translate(0)}to{transform:translate(105%)}}@keyframes pulse-subtle{0%,to{opacity:1}50%{opacity:.45}}@keyframes message-in{0%{opacity:0}to{opacity:1}}@keyframes stream-caret{0%,to{opacity:.4;transform:translateY(0)}50%{opacity:1;transform:translateY(-1px)}}@keyframes typing-bounce{0%,60%,to{opacity:.5;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}.thinking-clamp{max-height:7.5em}.media-preview-frame{max-height:calc(100dvh - 16rem)}.svg-preview-frame{max-height:50vh}@keyframes reset-credit-sheen{0%{background-position:-160% 0}to{background-position:260% 0}}@keyframes reset-credit-glow{0%,to{filter:drop-shadow(0 0 #0000)}50%{filter:drop-shadow(0 0 4px color-mix(in srgb, var(--status-success) 55%, transparent))}}.reset-credit-live{background:linear-gradient(100deg, var(--text-tertiary) 32%, var(--status-success) 50%, var(--text-tertiary) 68%);color:#0000;background-size:220% 100%;-webkit-background-clip:text;background-clip:text;animation:2.4s linear infinite reset-credit-sheen,2.4s ease-in-out infinite reset-credit-glow;display:inline-block}@media (prefers-reduced-motion:reduce){.reset-credit-live{color:var(--status-success);-webkit-text-fill-color:currentColor;background:0 0;animation:none}}.route-enter{animation:motion-route-in var(--dur-macro) var(--ease-spring) both;position:relative}.popout-enter{animation:popout-in var(--dur-micro) var(--ease-spring) both;transform-origin:100% 0}.dialog-overlay{animation:dialog-overlay-in var(--dur-macro) var(--ease-spring) both}.dialog-overlay.closing{animation:dialog-overlay-out var(--dur-micro) var(--ease-spring) both}.dialog-panel{width:min(var(--dialog-width,520px), calc(100vw - 32px));max-height:calc(100dvh - 48px);animation:dialog-panel-in var(--dur-macro) var(--ease-spring) both}.dialog-panel.expanded{width:min(1160px,100vw - 32px)}.dialog-panel.closing{animation:dialog-panel-out var(--dur-micro) var(--ease-spring) both}@media (max-width:640px){.dialog-overlay{padding-bottom:calc(12px + env(safe-area-inset-bottom))}.dialog-panel{max-height:calc(100dvh - 24px)}.dialog-panel.expanded{width:min(1160px,100vw - 24px)}}.drawer-overlay{animation:dialog-overlay-in .18s var(--ease-spring) both}.drawer-overlay.closing,.drawer-overlay[data-state=closing]{animation:dialog-overlay-out var(--dur-micro) var(--ease-spring) both}.drawer-panel{animation:drawer-panel-in .22s var(--ease-spring) both}.drawer-panel.closing,.drawer-panel[data-state=closing]{animation:drawer-panel-out .22s var(--ease-spring) both}.composer-glass{background:color-mix(in srgb, var(--surface-1) calc(40% + var(--blur-cards,30) * 0.55%), transparent);-webkit-backdrop-filter:blur(calc((100 - var(--blur-cards,30)) * var(--blur-cards-depth,30) * .01px))}@media (max-width:640px){.studio-model-picker{max-width:calc(100vw - 210px)}}.blur-slider{appearance:none;background:linear-gradient(to right, var(--text-primary) var(--fill,0%), var(--surface-active) var(--fill,0%))}.blur-slider::-webkit-slider-thumb{appearance:none;border:3px solid var(--surface-1);border-radius:var(--radius-full);width:22px;height:22px;box-shadow:0 0 0 1px var(--inner-border);background:#fff}.blur-slider::-moz-range-thumb{border:3px solid var(--surface-1);border-radius:var(--radius-full);width:16px;height:16px;box-shadow:0 0 0 1px var(--inner-border);background:#fff}.code-chip-value{font:inherit}.metric-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,120px),1fr))}.provider-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,240px),1fr))}.routing-controls-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr))}.quota-account-grid{grid-template-columns:var(--grid-template-columns-quota-account);display:grid}}@layer utilities{.\@container,.\[container-type\:inline-size\]{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.inset-x-4{inset-inline:calc(var(--spacing) * 4)}.inset-y-4{inset-block:calc(var(--spacing) * 4)}.-top-3{top:calc(var(--spacing) * -3)}.-top-4\.5{top:calc(var(--spacing) * -4.5)}.top-0{top:0}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.top-6{top:calc(var(--spacing) * 6)}.top-9{top:calc(var(--spacing) * 9)}.top-full{top:100%}.-right-3{right:calc(var(--spacing) * -3)}.-right-11{right:calc(var(--spacing) * -11)}.right-0{right:0}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.right-5{right:calc(var(--spacing) * 5)}.right-6{right:calc(var(--spacing) * 6)}.right-auto{right:auto}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:0}.left-3{left:calc(var(--spacing) * 3)}.left-5{left:calc(var(--spacing) * 5)}.left-auto{left:auto}.z-0{z-index:0}.z-1{z-index:1}.z-2{z-index:2}.z-30{z-index:30}.z-50{z-index:50}.z-card{z-index:2}.z-chip{z-index:4}.z-drawer{z-index:1000}.z-floating{z-index:30}.z-modal{z-index:1100}.z-popover{z-index:50}.z-toast{z-index:9999}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:700px){.container{max-width:700px}}@media (min-width:820px){.container{max-width:820px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1180px){.container{max-width:1180px}}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.m-0{margin:0}.m-auto{margin:auto}.mx-0{margin-inline:0}.mx-auto{margin-inline:auto}.my-4{margin-block:calc(var(--spacing) * 4)}.-mt-3{margin-top:calc(var(--spacing) * -3)}.mt-0{margin-top:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-1\.75{margin-top:calc(var(--spacing) * 1.75)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-3\.5{margin-top:calc(var(--spacing) * 3.5)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-auto{margin-top:auto}.mt-px{margin-top:1px}.mr-1{margin-right:var(--spacing)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-auto{margin-right:auto}.mb-0{margin-bottom:0}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-7{margin-bottom:calc(var(--spacing) * 7)}.mb-10\.5{margin-bottom:calc(var(--spacing) * 10.5)}.-ml-0\.5{margin-left:calc(var(--spacing) * -.5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-2\.5{margin-left:calc(var(--spacing) * 2.5)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-6{margin-left:calc(var(--spacing) * 6)}.ml-8{margin-left:calc(var(--spacing) * 8)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.size-13{width:calc(var(--spacing) * 13);height:calc(var(--spacing) * 13)}.size-14{width:calc(var(--spacing) * 14);height:calc(var(--spacing) * 14)}.size-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-17{width:calc(var(--spacing) * 17);height:calc(var(--spacing) * 17)}.size-18{width:calc(var(--spacing) * 18);height:calc(var(--spacing) * 18)}.size-19{width:calc(var(--spacing) * 19);height:calc(var(--spacing) * 19)}.size-full{width:100%;height:100%}.h-1{height:var(--spacing)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-13{height:calc(var(--spacing) * 13)}.h-14{height:calc(var(--spacing) * 14)}.h-15{height:calc(var(--spacing) * 15)}.h-16{height:calc(var(--spacing) * 16)}.h-18{height:calc(var(--spacing) * 18)}.h-19{height:calc(var(--spacing) * 19)}.h-20{height:calc(var(--spacing) * 20)}.h-22{height:calc(var(--spacing) * 22)}.h-36{height:calc(var(--spacing) * 36)}.h-48{height:calc(var(--spacing) * 48)}.h-60{height:calc(var(--spacing) * 60)}.h-66{height:calc(var(--spacing) * 66)}.h-75{height:calc(var(--spacing) * 75)}.h-80{height:calc(var(--spacing) * 80)}.h-95{height:calc(var(--spacing) * 95)}.h-113\.5{height:calc(var(--spacing) * 113.5)}.h-\[min\(62svh\,540px\)\]{height:min(62svh,540px)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-route{height:var(--height-route)}.max-h-28{max-height:calc(var(--spacing) * 28)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-75{max-height:calc(var(--spacing) * 75)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-110{max-height:calc(var(--spacing) * 110)}.max-h-128{max-height:calc(var(--spacing) * 128)}.max-h-140{max-height:calc(var(--spacing) * 140)}.max-h-150{max-height:calc(var(--spacing) * 150)}.max-h-168{max-height:calc(var(--spacing) * 168)}.max-h-170{max-height:calc(var(--spacing) * 170)}.max-h-180{max-height:calc(var(--spacing) * 180)}.max-h-190{max-height:calc(var(--spacing) * 190)}.max-h-210{max-height:calc(var(--spacing) * 210)}.max-h-230{max-height:calc(var(--spacing) * 230)}.max-h-280{max-height:calc(var(--spacing) * 280)}.max-h-\[46vh\]{max-height:46vh}.max-h-\[min\(calc\(var\(--spacing\)\*340\)\,calc\(100dvh-var\(--spacing\)\*20\)\)\]{max-height:min(calc(var(--spacing) * 340), calc(100dvh - var(--spacing) * 20))}.max-h-\[var\(--radix-select-content-available-height\)\]{max-height:var(--radix-select-content-available-height)}.max-h-none{max-height:none}.max-h-route{max-height:var(--height-route)}.min-h-0{min-height:0}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-10\.5{min-height:calc(var(--spacing) * 10.5)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-13{min-height:calc(var(--spacing) * 13)}.min-h-14{min-height:calc(var(--spacing) * 14)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-17{min-height:calc(var(--spacing) * 17)}.min-h-18{min-height:calc(var(--spacing) * 18)}.min-h-21{min-height:calc(var(--spacing) * 21)}.min-h-22{min-height:calc(var(--spacing) * 22)}.min-h-24{min-height:calc(var(--spacing) * 24)}.min-h-32{min-height:calc(var(--spacing) * 32)}.min-h-38{min-height:calc(var(--spacing) * 38)}.min-h-65{min-height:calc(var(--spacing) * 65)}.min-h-110{min-height:calc(var(--spacing) * 110)}.min-h-160{min-height:calc(var(--spacing) * 160)}.min-h-180{min-height:calc(var(--spacing) * 180)}.min-h-dvh{min-height:100dvh}.min-h-screen{min-height:100vh}.w-1{width:var(--spacing)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-6{width:calc(var(--spacing) * 6)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-13{width:calc(var(--spacing) * 13)}.w-15{width:calc(var(--spacing) * 15)}.w-16{width:calc(var(--spacing) * 16)}.w-18{width:calc(var(--spacing) * 18)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-26{width:calc(var(--spacing) * 26)}.w-29{width:calc(var(--spacing) * 29)}.w-36{width:calc(var(--spacing) * 36)}.w-38{width:calc(var(--spacing) * 38)}.w-39{width:calc(var(--spacing) * 39)}.w-64{width:calc(var(--spacing) * 64)}.w-67\.5{width:calc(var(--spacing) * 67.5)}.w-100{width:calc(var(--spacing) * 100)}.w-128{width:calc(var(--spacing) * 128)}.w-140{width:calc(var(--spacing) * 140)}.w-224{width:calc(var(--spacing) * 224)}.w-\[66\%\]{width:66%}.w-\[calc\(100\%-4px\)\]{width:calc(100% - 4px)}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.max-w-70{max-width:calc(var(--spacing) * 70)}.max-w-90{max-width:calc(var(--spacing) * 90)}.max-w-100{max-width:calc(var(--spacing) * 100)}.max-w-105{max-width:calc(var(--spacing) * 105)}.max-w-110{max-width:calc(var(--spacing) * 110)}.max-w-120{max-width:calc(var(--spacing) * 120)}.max-w-140{max-width:calc(var(--spacing) * 140)}.max-w-150{max-width:calc(var(--spacing) * 150)}.max-w-160{max-width:calc(var(--spacing) * 160)}.max-w-260{max-width:calc(var(--spacing) * 260)}.max-w-280{max-width:calc(var(--spacing) * 280)}.max-w-380{max-width:calc(var(--spacing) * 380)}.max-w-480{max-width:calc(var(--spacing) * 480)}.max-w-640{max-width:calc(var(--spacing) * 640)}.max-w-\[545px\]{max-width:545px}.max-w-\[calc\(100\%-var\(--spacing\)\*10\)\]{max-width:calc(100% - var(--spacing) * 10)}.max-w-\[calc\(100vw-var\(--spacing\)\*8\)\]{max-width:calc(100vw - var(--spacing) * 8)}.max-w-bubble-form{max-width:var(--container-bubble-form)}.max-w-full{max-width:100%}.min-w-0{min-width:0}.min-w-8{min-width:calc(var(--spacing) * 8)}.min-w-20{min-width:calc(var(--spacing) * 20)}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-38{min-width:calc(var(--spacing) * 38)}.min-w-46{min-width:calc(var(--spacing) * 46)}.min-w-55{min-width:calc(var(--spacing) * 55)}.min-w-74{min-width:calc(var(--spacing) * 74)}.min-w-90{min-width:calc(var(--spacing) * 90)}.min-w-110{min-width:calc(var(--spacing) * 110)}.min-w-140{min-width:calc(var(--spacing) * 140)}.min-w-\[13ch\]{min-width:13ch}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.flex-\[1_1_10rem\]{flex:10rem}.flex-\[1_1_20rem\]{flex:20rem}.flex-\[1_1_160px\]{flex:160px}.flex-auto{flex:auto}.flex-none{flex:none}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-60{flex-basis:calc(var(--spacing) * 60)}.basis-110{flex-basis:calc(var(--spacing) * 110)}.basis-auto{flex-basis:auto}.basis-full{flex-basis:100%}.border-collapse{border-collapse:collapse}.translate-x-8{--tw-translate-x:calc(var(--spacing) * 8);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-108{--tw-scale-x:108%;--tw-scale-y:108%;--tw-scale-z:108%;scale:var(--tw-scale-x) var(--tw-scale-y)}.-rotate-90{rotate:-90deg}.rotate-45{rotate:45deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-message-in{animation:var(--animate-message-in)}.animate-pulse{animation:var(--animate-pulse)}.animate-pulse-subtle{animation:var(--animate-pulse-subtle)}.animate-spin{animation:var(--animate-spin)}.animate-stream-caret{animation:var(--animate-stream-caret)}.animate-typing-bounce{animation:var(--animate-typing-bounce)}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.cursor-zoom-in{cursor:zoom-in}.touch-pan-x{--tw-pan-x:pan-x;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.touch-pan-y{--tw-pan-y:pan-y;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.touch-none{touch-action:none}.resize-none{resize:none}.resize-y{resize:vertical}.list-none{list-style-type:none}.appearance-none{appearance:none}.columns-2{columns:2}.break-inside-avoid{break-inside:avoid}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-cols-quota-window{grid-template-columns:var(--grid-template-columns-quota-window)}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.\[align-content\:start\]{align-content:start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.gap-0{gap:0}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-1\.75{gap:calc(var(--spacing) * 1.75)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-4\.5{gap:calc(var(--spacing) * 4.5)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-5\.25{gap:calc(var(--spacing) * 5.25)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-7{gap:calc(var(--spacing) * 7)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-9{gap:calc(var(--spacing) * 9)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-12{gap:calc(var(--spacing) * 12)}.gap-16{gap:calc(var(--spacing) * 16)}.gap-\[8px\]{gap:8px}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-5{column-gap:calc(var(--spacing) * 5)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-8{column-gap:calc(var(--spacing) * 8)}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.gap-y-5{row-gap:calc(var(--spacing) * 5)}.self-center{align-self:center}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-clip{overflow-x:clip}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.overscroll-none{overscroll-behavior:none}.rounded{border-radius:.25rem}.rounded-\[50\%\]{border-radius:50%}.rounded-card{border-radius:var(--radius-card)}.rounded-chip{border-radius:var(--radius-chip)}.rounded-composer{border-radius:10px}.rounded-control{border-radius:var(--radius-control)}.rounded-full{border-radius:9999px}.rounded-hero{border-radius:var(--radius-hero)}.rounded-inset,.rounded-lg{border-radius:var(--radius-inset)}.rounded-md{border-radius:var(--radius-chip)}.rounded-micro{border-radius:var(--radius-micro)}.rounded-narrow{border-radius:var(--radius-narrow)}.rounded-panel{border-radius:var(--radius-panel)}.rounded-pill{border-radius:var(--radius-pill)}.rounded-sidebar{border-radius:var(--radius-sidebar)}.rounded-tiny{border-radius:var(--radius-tiny)}.rounded-xl{border-radius:var(--radius-control)}.rounded-tl-none{border-top-left-radius:0}.rounded-tr-none{border-top-right-radius:0}.rounded-br-none{border-bottom-right-radius:0}.rounded-br-tiny{border-bottom-right-radius:var(--radius-tiny)}.rounded-bl-none{border-bottom-left-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-\[color-mix\(in_srgb\,var\(--green\)_40\%\,transparent\)\]{border-color:var(--green)}@supports (color:color-mix(in lab, red, red)){.border-\[color-mix\(in_srgb\,var\(--green\)_40\%\,transparent\)\]{border-color:color-mix(in srgb,var(--green) 40%,transparent)}}.border-accent,.border-accent\/25{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.border-accent\/25{border-color:color-mix(in oklab, var(--accent) 25%, transparent)}}.border-accent\/30{border-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.border-accent\/30{border-color:color-mix(in oklab, var(--accent) 30%, transparent)}}.border-border-strong{border-color:var(--border-strong)}.border-border-subtle{border-color:var(--border-subtle)}.border-current{border-color:currentColor}.border-glass-border-2{border-color:var(--glass-border-2)}.border-inner-border{border-color:var(--inner-border)}.border-orange{border-color:var(--orange)}.border-orange-soft{border-color:var(--orange-soft)}.border-orange\/30{border-color:var(--orange)}@supports (color:color-mix(in lab, red, red)){.border-orange\/30{border-color:color-mix(in oklab, var(--orange) 30%, transparent)}}.border-red-soft{border-color:var(--red-soft)}.border-story-white\/10{border-color:var(--text-primary)}@supports (color:color-mix(in lab, red, red)){.border-story-white\/10{border-color:color-mix(in oklab, var(--text-primary) 10%, transparent)}}.border-story-white\/20{border-color:var(--text-primary)}@supports (color:color-mix(in lab, red, red)){.border-story-white\/20{border-color:color-mix(in oklab, var(--text-primary) 20%, transparent)}}.border-story-white\/25{border-color:var(--text-primary)}@supports (color:color-mix(in lab, red, red)){.border-story-white\/25{border-color:color-mix(in oklab, var(--text-primary) 25%, transparent)}}.border-teal-soft{border-color:var(--teal-soft)}.border-transparent{border-color:#0000}.border-warning-line{border-color:var(--status-warning)}@supports (color:color-mix(in lab, red, red)){.border-warning-line{border-color:color-mix(in srgb, var(--status-warning) 45%, transparent)}}.bg-\[\#090d16\]{background-color:#090d16}.bg-\[\#fff\]{background-color:#fff}.bg-\[color-mix\(in_srgb\,var\(--red\)_8\%\,transparent\)\]{background-color:var(--red)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--red\)_8\%\,transparent\)\]{background-color:color-mix(in srgb,var(--red) 8%,transparent)}}.bg-accent{background-color:var(--accent)}.bg-accent-foreground{background-color:var(--accent-foreground)}.bg-accent-soft{background-color:var(--accent-soft)}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab, red, red)){.bg-black\/70{background-color:color-mix(in oklab, var(--color-black) 70%, transparent)}}.bg-code-surface{background-color:var(--code-surface)}.bg-current{background-color:currentColor}.bg-glass-bg{background-color:var(--glass-bg)}.bg-green-soft{background-color:var(--green-soft)}.bg-hover{background-color:var(--hover)}.bg-inner-border{background-color:var(--inner-border)}.bg-input-bg{background-color:var(--input-bg)}.bg-kbd-bg{background-color:var(--kbd-bg)}.bg-orange-soft{background-color:var(--orange-soft)}.bg-overlay{background-color:#0006}.bg-popover-bg{background-color:var(--popover-bg)}.bg-red{background-color:var(--red)}.bg-red-soft{background-color:var(--red-soft)}.bg-status-danger{background-color:var(--status-danger)}.bg-status-info-soft{background-color:var(--status-info-soft)}.bg-status-success{background-color:var(--status-success)}.bg-story-deep{background-color:var(--story-deep)}.bg-story-ink{background-color:var(--story-ink)}.bg-story-surface{background-color:var(--story-surface)}.bg-story-white,.bg-story-white\/6{background-color:var(--text-primary)}@supports (color:color-mix(in lab, red, red)){.bg-story-white\/6{background-color:color-mix(in oklab, var(--text-primary) 6%, transparent)}}.bg-story-white\/8{background-color:var(--text-primary)}@supports (color:color-mix(in lab, red, red)){.bg-story-white\/8{background-color:color-mix(in oklab, var(--text-primary) 8%, transparent)}}.bg-surface-1{background-color:var(--surface-1)}.bg-surface-2{background-color:var(--surface-2)}.bg-surface-active{background-color:var(--surface-active)}.bg-surface-muted{background-color:var(--surface-muted)}.bg-teal{background-color:var(--teal)}.bg-teal-soft{background-color:var(--teal-soft)}.bg-text-primary{background-color:var(--text-primary)}.bg-text-secondary{background-color:var(--text-secondary)}.bg-text-tertiary{background-color:var(--text-tertiary)}.bg-transparent{background-color:#0000}.bg-window-close{background-color:#ff5f57}.bg-window-expand{background-color:#28c840}.bg-window-minimize{background-color:#febc2e}.bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-r{--tw-gradient-position:to right in oklab}}.bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[linear-gradient\(to_right\,color-mix\(in_srgb\,var\(--accent\)_20\%\,transparent\)\,transparent\)\]{background-image:linear-gradient(to right,var(--accent),transparent)}@supports (color:color-mix(in lab, red, red)){.bg-\[linear-gradient\(to_right\,color-mix\(in_srgb\,var\(--accent\)_20\%\,transparent\)\,transparent\)\]{background-image:linear-gradient(to right,color-mix(in srgb,var(--accent) 20%,transparent),transparent)}}.bg-\[linear-gradient\(to_right\,color-mix\(in_srgb\,var\(--story-accent\)_2\.4\%\,transparent\)_1px\,transparent_1px\)\,linear-gradient\(to_bottom\,color-mix\(in_srgb\,var\(--story-accent\)_2\.4\%\,transparent\)_1px\,transparent_1px\)\]{background-image:linear-gradient(to right,var(--story-accent) 1px,transparent 1px),linear-gradient(to bottom,var(--story-accent) 1px,transparent 1px)}@supports (color:color-mix(in lab, red, red)){.bg-\[linear-gradient\(to_right\,color-mix\(in_srgb\,var\(--story-accent\)_2\.4\%\,transparent\)_1px\,transparent_1px\)\,linear-gradient\(to_bottom\,color-mix\(in_srgb\,var\(--story-accent\)_2\.4\%\,transparent\)_1px\,transparent_1px\)\]{background-image:linear-gradient(to right,color-mix(in srgb,var(--story-accent) 2.4%,transparent) 1px,transparent 1px),linear-gradient(to bottom,color-mix(in srgb,var(--story-accent) 2.4%,transparent) 1px,transparent 1px)}}.bg-\[linear-gradient\(to_right\,red_1px\,transparent_1px\)\]{background-image:linear-gradient(90deg,red 1px,#0000 1px)}.bg-none{background-image:none}.from-orange-soft{--tw-gradient-from:var(--orange-soft);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-story-deep\/85{--tw-gradient-from:var(--story-deep)}@supports (color:color-mix(in lab, red, red)){.from-story-deep\/85{--tw-gradient-from:color-mix(in oklab, var(--story-deep) 85%, transparent)}}.from-story-deep\/85{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-surface-2{--tw-gradient-from:var(--surface-2);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-hover{--tw-gradient-via:var(--hover);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-story-deep\/10{--tw-gradient-via:var(--story-deep)}@supports (color:color-mix(in lab, red, red)){.via-story-deep\/10{--tw-gradient-via:color-mix(in oklab, var(--story-deep) 10%, transparent)}}.via-story-deep\/10{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-surface-2{--tw-gradient-to:var(--surface-2);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-\[length\:44px_100\%\,100\%_40px\]{background-size:44px 100%,100% 40px}.bg-cover{background-size:cover}.bg-center{background-position:50%}.fill-teal{fill:var(--teal)}.fill-text-primary{fill:var(--text-primary)}.fill-track{fill:var(--track)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-center{object-position:center}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-7{padding:calc(var(--spacing) * 7)}.p-8{padding:calc(var(--spacing) * 8)}.p-9{padding:calc(var(--spacing) * 9)}.p-10{padding:calc(var(--spacing) * 10)}.p-12{padding:calc(var(--spacing) * 12)}.p-16{padding:calc(var(--spacing) * 16)}.p-\[clamp\(calc\(var\(--spacing\)\*12\)\,5vw\,calc\(var\(--spacing\)\*22\)\)\]{padding:clamp(calc(var(--spacing) * 12), 5vw, calc(var(--spacing) * 22))}.px-0{padding-inline:0}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-4\.5{padding-inline:calc(var(--spacing) * 4.5)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-7{padding-inline:calc(var(--spacing) * 7)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-9{padding-inline:calc(var(--spacing) * 9)}.px-12{padding-inline:calc(var(--spacing) * 12)}.px-\[7px\]{padding-inline:7px}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-1\.75{padding-block:calc(var(--spacing) * 1.75)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-4\.5{padding-block:calc(var(--spacing) * 4.5)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-7{padding-block:calc(var(--spacing) * 7)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-9{padding-block:calc(var(--spacing) * 9)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-px{padding-block:1px}.pt-0{padding-top:0}.pt-1{padding-top:var(--spacing)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-7{padding-top:calc(var(--spacing) * 7)}.pt-9{padding-top:calc(var(--spacing) * 9)}.pt-40{padding-top:calc(var(--spacing) * 40)}.pt-44{padding-top:calc(var(--spacing) * 44)}.pr-1{padding-right:var(--spacing)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-5{padding-right:calc(var(--spacing) * 5)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pr-18{padding-right:calc(var(--spacing) * 18)}.pr-20{padding-right:calc(var(--spacing) * 20)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.pb-17\.5{padding-bottom:calc(var(--spacing) * 17.5)}.pb-24{padding-bottom:calc(var(--spacing) * 24)}.pl-0{padding-left:0}.pl-1{padding-left:var(--spacing)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-9{padding-left:calc(var(--spacing) * 9)}.pl-15{padding-left:calc(var(--spacing) * 15)}.pl-16{padding-left:calc(var(--spacing) * 16)}.pl-36{padding-left:calc(var(--spacing) * 36)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-head{font-family:var(--font-head)}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-7xl{font-size:var(--text-7xl);line-height:var(--tw-leading,var(--text-7xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[clamp\(38px\,4\.4vw\,68px\)\]{font-size:clamp(38px,4.4vw,68px)}.text-badge{font-size:11px}.text-body{font-size:13px}.text-body-lg{font-size:14px}.text-caption{font-size:12px}.text-display{font-size:21px}.text-hero{font-size:28px}.text-lead{font-size:16px}.text-micro{font-size:10px}.text-story-hero{font-size:clamp(38px,4.4vw,68px)}.text-title{font-size:18px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-14{--tw-leading:calc(var(--spacing) * 14);line-height:calc(var(--spacing) * 14)}.leading-\[0\.98\]{--tw-leading:.98;line-height:.98}.leading-\[1\.3\]{--tw-leading:1.3;line-height:1.3}.leading-\[1\.4\]{--tw-leading:1.4;line-height:1.4}.leading-\[1\.05\]{--tw-leading:1.05;line-height:1.05}.leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.leading-\[1\.15\]{--tw-leading:1.15;line-height:1.15}.leading-\[1\.35\]{--tw-leading:1.35;line-height:1.35}.leading-\[1\.55\]{--tw-leading:1.55;line-height:1.55}.leading-\[1\]{--tw-leading:1;line-height:1}.leading-chat{--tw-leading:var(--leading-chat);line-height:var(--leading-chat)}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-none{--tw-leading:1;line-height:1}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.01em\]{--tw-tracking:-.01em;letter-spacing:-.01em}.tracking-\[-0\.02em\]{--tw-tracking:-.02em;letter-spacing:-.02em}.tracking-\[-0\.03em\]{--tw-tracking:-.03em;letter-spacing:-.03em}.tracking-\[-0\.045em\]{--tw-tracking:-.045em;letter-spacing:-.045em}.tracking-\[0\.04em\]{--tw-tracking:.04em;letter-spacing:.04em}.tracking-\[0\.05em\]{--tw-tracking:.05em;letter-spacing:.05em}.tracking-\[0\.06em\]{--tw-tracking:.06em;letter-spacing:.06em}.tracking-code{--tw-tracking:.18em;letter-spacing:.18em}.tracking-label{--tw-tracking:.08em;letter-spacing:.08em}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-balance{text-wrap:balance}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.\[overflow-wrap\:break-word\],.break-words{overflow-wrap:break-word}.wrap-anywhere{overflow-wrap:anywhere}.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.\!text-red{color:var(--red)!important}.text-\[inherit\]{color:inherit}.text-accent{color:var(--accent)}.text-accent-foreground{color:var(--accent-foreground)}.text-green{color:var(--green)}.text-inherit{color:inherit}.text-orange{color:var(--orange)}.text-purple{color:var(--purple)}.text-red{color:var(--red)}.text-status-danger{color:var(--status-danger)}.text-status-info{color:var(--status-info)}.text-status-success{color:var(--status-success)}.text-status-warning{color:var(--status-warning)}.text-story-accent{color:var(--story-accent)}.text-story-deep{color:var(--story-deep)}.text-story-ink{color:var(--story-ink)}.text-story-white,.text-story-white\/50{color:var(--text-primary)}@supports (color:color-mix(in lab, red, red)){.text-story-white\/50{color:color-mix(in oklab, var(--text-primary) 50%, transparent)}}.text-story-white\/65{color:var(--text-primary)}@supports (color:color-mix(in lab, red, red)){.text-story-white\/65{color:color-mix(in oklab, var(--text-primary) 65%, transparent)}}.text-story-white\/70{color:var(--text-primary)}@supports (color:color-mix(in lab, red, red)){.text-story-white\/70{color:color-mix(in oklab, var(--text-primary) 70%, transparent)}}.text-story-white\/75{color:var(--text-primary)}@supports (color:color-mix(in lab, red, red)){.text-story-white\/75{color:color-mix(in oklab, var(--text-primary) 75%, transparent)}}.text-surface-1{color:var(--surface-1)}.text-teal{color:var(--teal)}.text-text-primary{color:var(--text-primary)}.text-text-secondary{color:var(--text-secondary)}.text-text-tertiary{color:var(--text-tertiary)}.text-white{color:var(--color-white)}.text-window-close-ink{color:#7a1c17}.text-window-expand-ink{color:#0b5a22}.text-window-minimize-ink{color:#6d4b00}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.caret-text-primary{caret-color:var(--text-primary)}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-70{opacity:.7}.opacity-72{opacity:.72}.opacity-75{opacity:.75}.opacity-100{opacity:1}.opacity-\[0\.35\]{opacity:.35}.mix-blend-screen{mix-blend-mode:screen}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_1px_2px_rgba\(…\)\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,rgba(…));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_20px_60px_rgba\(0\,0\,0\,0\.45\)\]{--tw-shadow:0 20px 60px var(--tw-shadow-color,#00000073);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-card{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-composer{--tw-shadow:0 8px 28px -18px var(--tw-shadow-color,#0000008c);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-glow-success{--tw-shadow:0 0 8px var(--tw-shadow-color,#34d399b3);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-popout{--tw-shadow:var(--shadow-popout);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-ribbon{--tw-shadow:0 1px 3px var(--tw-shadow-color,#0000001f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-window{--tw-shadow:0 24px 70px -15px var(--tw-shadow-color,#000000a6), 0 0 0 1px var(--tw-shadow-color,var(--inner-border));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-dialog{--tw-backdrop-blur:blur(6px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-saturate-150{--tw-backdrop-saturate:saturate(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[border-color\,background-color\,color\]{transition-property:border-color,background-color,color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[border-color\,background-color\]{transition-property:border-color,background-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[border-color\,box-shadow\]{transition-property:border-color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[transform\,border-color\,box-shadow\]{transition-property:transform,border-color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.delay-100{transition-delay:.1s}.delay-150{transition-delay:.15s}.delay-200{transition-delay:.2s}.delay-300{transition-delay:.3s}.duration-\(--dur-macro\){--tw-duration:var(--dur-macro);transition-duration:var(--dur-macro)}.duration-\(--dur-micro\){--tw-duration:var(--dur-micro);transition-duration:var(--dur-micro)}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-spring{--tw-ease:var(--ease-spring);transition-timing-function:var(--ease-spring)}.ease-standard{--tw-ease:ease;transition-timing-function:ease}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.\[animation-delay\:0\.3s\]{animation-delay:.3s}.\[animation-delay\:0\.15s\]{animation-delay:.15s}.\[container-name\:account-list\]{container-name:account-list}.\[user-select\:all\]{-webkit-user-select:all;user-select:all}.group-open\:rotate-180:is(:where(.group):is([open],:popover-open,:open) *){rotate:180deg}@media (hover:hover){.group-hover\:scale-104:is(:where(.group):hover *){--tw-scale-x:104%;--tw-scale-y:104%;--tw-scale-z:104%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:text-text-primary:is(:where(.group):hover *){color:var(--text-primary)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.file\:mr-4::file-selector-button{margin-right:calc(var(--spacing) * 4)}.file\:h-full::file-selector-button{height:100%}.file\:cursor-pointer::file-selector-button{cursor:pointer}.file\:rounded-l-control::file-selector-button{border-top-left-radius:var(--radius-control);border-bottom-left-radius:var(--radius-control)}.file\:rounded-r-none::file-selector-button{border-top-right-radius:0;border-bottom-right-radius:0}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:border-r::file-selector-button{border-right-style:var(--tw-border-style);border-right-width:1px}.file\:border-inner-border::file-selector-button{border-color:var(--inner-border)}.file\:bg-surface-1::file-selector-button{background-color:var(--surface-1)}.file\:px-5::file-selector-button{padding-inline:calc(var(--spacing) * 5)}.file\:py-0::file-selector-button{padding-block:0}.file\:font-sans::file-selector-button{font-family:var(--font-sans)}.file\:text-badge::file-selector-button{font-size:11px}.file\:font-semibold::file-selector-button{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.file\:text-text-primary::file-selector-button{color:var(--text-primary)}.placeholder\:text-text-tertiary::placeholder{color:var(--text-tertiary)}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-x-0:before{content:var(--tw-content);inset-inline:0}.before\:top-0:before{content:var(--tw-content);top:0}.before\:h-0\.5:before{content:var(--tw-content);height:calc(var(--spacing) * .5)}.before\:bg-accent:before{content:var(--tw-content);background-color:var(--accent)}.before\:content-\[\'\'\]:before{--tw-content:"";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-0:after{content:var(--tw-content);inset:0}.after\:bg-gradient-to-b:after{content:var(--tw-content);--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.after\:from-story-deep\/4:after{content:var(--tw-content);--tw-gradient-from:var(--story-deep)}@supports (color:color-mix(in lab, red, red)){.after\:from-story-deep\/4:after{--tw-gradient-from:color-mix(in oklab, var(--story-deep) 4%, transparent)}}.after\:from-story-deep\/4:after{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.after\:via-story-deep\/30:after{content:var(--tw-content);--tw-gradient-via:var(--story-deep)}@supports (color:color-mix(in lab, red, red)){.after\:via-story-deep\/30:after{--tw-gradient-via:color-mix(in oklab, var(--story-deep) 30%, transparent)}}.after\:via-story-deep\/30:after{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.after\:to-story-deep\/60:after{content:var(--tw-content);--tw-gradient-to:var(--story-deep)}@supports (color:color-mix(in lab, red, red)){.after\:to-story-deep\/60:after{--tw-gradient-to:color-mix(in oklab, var(--story-deep) 60%, transparent)}}.after\:to-story-deep\/60:after{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.focus-within\:border-text-tertiary:focus-within{border-color:var(--text-tertiary)}.focus-within\:opacity-100:focus-within{opacity:1}@media (hover:hover){.hover\:w-\[40px\]:hover{width:40px}.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:-translate-y-px:hover{--tw-translate-y:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:scale-112:hover{--tw-scale-x:112%;--tw-scale-y:112%;--tw-scale-z:112%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-accent:hover{border-color:var(--accent)}.hover\:border-border-strong:hover{border-color:var(--border-strong)}.hover\:border-current:hover{border-color:currentColor}.hover\:border-orange:hover{border-color:var(--orange)}.hover\:border-red:hover{border-color:var(--red)}.hover\:bg-accent-hover:hover{background-color:var(--accent-hover)}.hover\:bg-accent-soft:hover{background-color:var(--accent-soft)}.hover\:bg-active-pill:hover{background-color:var(--active-pill)}.hover\:bg-hover:hover{background-color:var(--hover)}.hover\:bg-inner-border:hover{background-color:var(--inner-border)}.hover\:bg-red-soft:hover{background-color:var(--red-soft)}.hover\:bg-story-white\/18:hover{background-color:var(--text-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-story-white\/18:hover{background-color:color-mix(in oklab, var(--text-primary) 18%, transparent)}}.hover\:bg-surface-hover:hover{background-color:var(--surface-hover)}.hover\:bg-surface-muted:hover{background-color:var(--surface-muted)}.hover\:text-red:hover{color:var(--red)}.hover\:text-text-primary:hover{color:var(--text-primary)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-card:hover{--tw-shadow:var(--shadow-card);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-window:hover{--tw-shadow:0 24px 70px -15px var(--tw-shadow-color,#000000a6), 0 0 0 1px var(--tw-shadow-color,var(--inner-border));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:brightness-110:hover{--tw-brightness:brightness(110%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.file\:hover\:bg-surface-hover::file-selector-button:hover{background-color:var(--surface-hover)}}.focus\:border-accent:focus{border-color:var(--accent)}.focus\:shadow-focus:focus{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--accent))}@supports (color:color-mix(in lab, red, red)){.focus\:shadow-focus:focus{--tw-shadow:0 0 0 2px var(--tw-shadow-color,color-mix(in srgb, var(--accent) 15%, transparent))}}.focus\:shadow-focus:focus{box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-story-white\/30:focus-visible{--tw-ring-color:var(--text-primary)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-story-white\/30:focus-visible{--tw-ring-color:color-mix(in oklab, var(--text-primary) 30%, transparent)}}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-1:focus-visible{outline-offset:1px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-accent:focus-visible{outline-color:var(--accent)}.focus-visible\:outline-current:focus-visible{outline-color:currentColor}.focus-visible\:outline-focus-ring:focus-visible{outline-color:var(--focus-ring)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:scale-97:active{--tw-scale-x:97%;--tw-scale-y:97%;--tw-scale-z:97%;scale:var(--tw-scale-x) var(--tw-scale-y)}.active\:scale-\[0\.97\]:active{scale:.97}.active\:cursor-grabbing:active{cursor:grabbing}@media (hover:hover){.enabled\:hover\:border-border-strong:enabled:hover{border-color:var(--border-strong)}}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:text-text-tertiary:disabled{color:var(--text-tertiary)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-35:disabled{opacity:.35}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:file\:cursor-not-allowed:disabled::file-selector-button{cursor:not-allowed}.has-checked\:border-accent:has(:checked){border-color:var(--accent)}.has-checked\:bg-accent-soft:has(:checked){background-color:var(--accent-soft)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:cursor-default[aria-disabled=true]{cursor:default}.aria-disabled\:opacity-70[aria-disabled=true]{opacity:.7}.data-\[disabled\]\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-\[disabled\]\:opacity-40[data-disabled]{opacity:.4}.data-\[highlighted\]\:bg-surface-hover[data-highlighted]{background-color:var(--surface-hover)}.data-\[state\=checked\]\:font-semibold[data-state=checked]{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.data-\[state\=open\]\:block[data-state=open]{display:block}@media (prefers-reduced-motion:reduce){.motion-reduce\:animate-none{animation:none}}@media not all and (min-width:1180px){.max-wide\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media not all and (min-width:820px){.max-medium\:mt-0{margin-top:0}.max-medium\:ml-0{margin-left:0}.max-medium\:grid{display:grid}.max-medium\:hidden{display:none}.max-medium\:inline-flex{display:inline-flex}.max-medium\:h-80{height:calc(var(--spacing) * 80)}.max-medium\:min-h-0{min-height:0}.max-medium\:w-\[calc\(100\%-8px\)\]{width:calc(100% - 8px)}.max-medium\:w-auto{width:auto}.max-medium\:w-full{width:100%}.max-medium\:max-w-bubble-narrow{max-width:var(--container-bubble-narrow)}.max-medium\:min-w-0{min-width:0}.max-medium\:flex-\[1_1_160px\]{flex:160px}.max-medium\:flex-auto{flex:auto}.max-medium\:flex-none{flex:none}.max-medium\:columns-1{columns:1}.max-medium\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-medium\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.max-medium\:flex-col{flex-direction:column}.max-medium\:items-start{align-items:flex-start}.max-medium\:items-stretch{align-items:stretch}.max-medium\:justify-between{justify-content:space-between}.max-medium\:gap-2{gap:calc(var(--spacing) * 2)}.max-medium\:gap-3{gap:calc(var(--spacing) * 3)}.max-medium\:gap-4{gap:calc(var(--spacing) * 4)}.max-medium\:overflow-x-auto{overflow-x:auto}.max-medium\:p-5{padding:calc(var(--spacing) * 5)}.max-medium\:px-5{padding-inline:calc(var(--spacing) * 5)}.max-medium\:py-36{padding-block:calc(var(--spacing) * 36)}}@media not all and (min-width:700px){.max-compact\:mt-5{margin-top:calc(var(--spacing) * 5)}.max-compact\:h-21{height:calc(var(--spacing) * 21)}.max-compact\:max-w-full{max-width:100%}.max-compact\:px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.max-compact\:px-8{padding-inline:calc(var(--spacing) * 8)}.max-compact\:py-52{padding-block:calc(var(--spacing) * 52)}.max-compact\:pb-16{padding-bottom:calc(var(--spacing) * 16)}.max-compact\:text-badge{font-size:11px}.max-compact\:text-body{font-size:13px}.max-compact\:text-story-hero-compact{font-size:clamp(34px,10.5vw,56px)}.max-compact\:leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}}@media not all and (min-width:640px){.max-small\:inset-0{inset:0}.max-small\:left-4{left:calc(var(--spacing) * 4)}.max-small\:col-span-full{grid-column:1/-1}.max-small\:col-start-1{grid-column-start:1}.max-small\:col-start-2{grid-column-start:2}.max-small\:row-start-1{grid-row-start:1}.max-small\:row-start-2{grid-row-start:2}.max-small\:row-start-3{grid-row-start:3}.max-small\:ml-auto{margin-left:auto}.max-small\:grid{display:grid}.max-small\:h-auto{height:auto}.max-small\:h-dvh{height:100dvh}.max-small\:max-h-dvh{max-height:100dvh}.max-small\:min-h-15{min-height:calc(var(--spacing) * 15)}.max-small\:w-67\.5{width:calc(var(--spacing) * 67.5)}.max-small\:w-80{width:calc(var(--spacing) * 80)}.max-small\:w-auto{width:auto}.max-small\:w-fit{width:-moz-fit-content;width:fit-content}.max-small\:w-full{width:100%}.max-small\:w-screen{width:100vw}.max-small\:max-w-45{max-width:calc(var(--spacing) * 45)}.max-small\:max-w-\[calc\(100\%-var\(--spacing\)\*8\)\]{max-width:calc(100% - var(--spacing) * 8)}.max-small\:max-w-full{max-width:100%}.max-small\:min-w-0{min-width:0}.max-small\:flex-none{flex:none}.max-small\:shrink-0{flex-shrink:0}.max-small\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-small\:grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.max-small\:flex-col{flex-direction:column}.max-small\:flex-nowrap{flex-wrap:nowrap}.max-small\:flex-wrap{flex-wrap:wrap}.max-small\:items-start{align-items:flex-start}.max-small\:justify-between{justify-content:space-between}.max-small\:justify-end{justify-content:flex-end}.max-small\:gap-2{gap:calc(var(--spacing) * 2)}.max-small\:gap-3{gap:calc(var(--spacing) * 3)}.max-small\:gap-4{gap:calc(var(--spacing) * 4)}.max-small\:gap-x-4{column-gap:calc(var(--spacing) * 4)}.max-small\:gap-y-2\.5{row-gap:calc(var(--spacing) * 2.5)}.max-small\:justify-self-end{justify-self:flex-end}.max-small\:rounded-none{border-radius:0}.max-small\:border-none{--tw-border-style:none;border-style:none}.max-small\:p-6{padding:calc(var(--spacing) * 6)}.max-small\:px-3{padding-inline:calc(var(--spacing) * 3)}.max-small\:px-4{padding-inline:calc(var(--spacing) * 4)}.max-small\:py-2{padding-block:calc(var(--spacing) * 2)}.max-small\:py-4{padding-block:calc(var(--spacing) * 4)}.max-small\:pt-4{padding-top:calc(var(--spacing) * 4)}.max-small\:pb-3{padding-bottom:calc(var(--spacing) * 3)}.max-small\:text-center{text-align:center}.max-small\:leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}}@media not all and (min-width:48rem){.max-md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}}@media not all and (min-width:40rem){.max-sm\:h-\[clamp\(calc\(var\(--spacing\)\*85\)\,34dvh\,calc\(var\(--spacing\)\*130\)\)\]{height:clamp(calc(var(--spacing) * 85), 34dvh, calc(var(--spacing) * 130))}.max-sm\:h-auto{height:auto}.max-sm\:max-h-130{max-height:calc(var(--spacing) * 130)}.max-sm\:max-h-\[calc\(100dvh-var\(--spacing\)\*10\)\]{max-height:calc(100dvh - var(--spacing) * 10)}.max-sm\:max-h-\[min\(52dvh\,calc\(var\(--spacing\)\*210\)\)\]{max-height:min(52dvh, calc(var(--spacing) * 210))}.max-sm\:min-h-0{min-height:0}.max-sm\:min-h-85{min-height:calc(var(--spacing) * 85)}.max-sm\:w-auto{width:auto}.max-sm\:w-full{width:100%}.max-sm\:max-w-240{max-width:calc(var(--spacing) * 240)}.max-sm\:min-w-32{min-width:calc(var(--spacing) * 32)}.max-sm\:flex-none{flex:none}.max-sm\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-sm\:flex-col{flex-direction:column}.max-sm\:place-items-end{place-items:end}.max-sm\:items-stretch{align-items:stretch}.max-sm\:gap-3{gap:calc(var(--spacing) * 3)}.max-sm\:gap-6{gap:calc(var(--spacing) * 6)}.max-sm\:self-start{align-self:flex-start}.max-sm\:rounded-card{border-radius:var(--radius-card)}.max-sm\:object-contain{object-fit:contain}.max-sm\:p-5{padding:calc(var(--spacing) * 5)}.max-sm\:p-11{padding:calc(var(--spacing) * 11)}}@media (min-width:640px){.min-\[640px\]\:inline-flex{display:inline-flex}}@media (min-width:820px){.min-\[820px\]\:w-\[40px\]{width:40px}.min-\[820px\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:40rem){.sm\:right-0{right:0}.sm\:left-auto{left:auto}.sm\:inline-flex{display:inline-flex}.sm\:w-auto{width:auto}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:justify-start{justify-content:flex-start}}@media (min-width:64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.\[\&_\.btn\]\:w-full .btn{width:100%}.\[\&_\.btn\]\:min-w-0 .btn{min-width:0}.\[\&_\.form-group\]\:gap-2 .form-group{gap:calc(var(--spacing) * 2)}.\[\&_\.radix-select-trigger\]\:bg-hover .radix-select-trigger{background-color:var(--hover)}.\[\&_\.radix-select-trigger\]\:font-semibold .radix-select-trigger{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_\.radix-select-trigger\]\:text-text-primary .radix-select-trigger{color:var(--text-primary)}.\[\&_\.state-box\]\:gap-3 .state-box{gap:calc(var(--spacing) * 3)}.\[\&_\.state-box\]\:py-4 .state-box{padding-block:calc(var(--spacing) * 4)}.\[\&_\.state-box-icon\]\:size-15 .state-box-icon{width:calc(var(--spacing) * 15);height:calc(var(--spacing) * 15)}@media not all and (min-width:640px){.max-small\:\[\&_button\]\:w-full button{width:100%}}.\[\&_code\]\:overflow-hidden code{overflow:hidden}.\[\&_code\]\:font-mono code{font-family:var(--font-mono)}.\[\&_code\]\:text-caption code{font-size:12px}.\[\&_code\]\:text-ellipsis code{text-overflow:ellipsis}.\[\&_code\]\:whitespace-nowrap code{white-space:nowrap}.\[\&_code\]\:text-text-primary code{color:var(--text-primary)}.\[\&_ol\]\:m-0 ol{margin:0}.\[\&_ol\]\:mb-4 ol{margin-bottom:calc(var(--spacing) * 4)}.\[\&_ol\:last-child\]\:mb-0 ol:last-child{margin-bottom:0}.\[\&_p\]\:m-0 p{margin:0}.\[\&_p\]\:my-2 p{margin-block:calc(var(--spacing) * 2)}.\[\&_p\]\:mb-4 p{margin-bottom:calc(var(--spacing) * 4)}.\[\&_p\:first-child\]\:mt-0 p:first-child{margin-top:0}.\[\&_p\:last-child\]\:mb-0 p:last-child{margin-bottom:0}.\[\&_pre\]\:m-0 pre{margin:0}.\[\&_pre\]\:mb-4 pre{margin-bottom:calc(var(--spacing) * 4)}.\[\&_pre\]\:overflow-x-auto pre{overflow-x:auto}.\[\&_pre\]\:rounded-control pre{border-radius:var(--radius-control)}.\[\&_pre\]\:bg-surface-muted pre{background-color:var(--surface-muted)}.\[\&_pre\]\:px-6 pre{padding-inline:calc(var(--spacing) * 6)}.\[\&_pre\]\:py-5 pre{padding-block:calc(var(--spacing) * 5)}.\[\&_pre\]\:font-mono pre{font-family:var(--font-mono)}.\[\&_pre\]\:text-caption pre{font-size:12px}.\[\&_pre\:last-child\]\:mb-0 pre:last-child{margin-bottom:0}.\[\&_span\]\:font-mono span{font-family:var(--font-mono)}.\[\&_span\]\:text-micro span{font-size:10px}.\[\&_span\]\:text-text-tertiary span{color:var(--text-tertiary)}.\[\&_strong\]\:font-semibold strong{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_svg\]\:mt-1\.5 svg{margin-top:calc(var(--spacing) * 1.5)}.\[\&_svg\]\:size-3 svg{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\]\:size-6\.5 svg{width:calc(var(--spacing) * 6.5);height:calc(var(--spacing) * 6.5)}.\[\&_svg\]\:size-7\.5 svg{width:calc(var(--spacing) * 7.5);height:calc(var(--spacing) * 7.5)}.\[\&_svg\]\:size-\[30px\] svg{width:30px;height:30px}.\[\&_svg\]\:flex-none svg{flex:none}.\[\&_svg\]\:text-text-tertiary svg{color:var(--text-tertiary)}.\[\&_svg\]\:transition-transform svg{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.\[\&_svg\]\:duration-150 svg{--tw-duration:.15s;transition-duration:.15s}.\[\&_svg\]\:ease-spring svg{--tw-ease:var(--ease-spring);transition-timing-function:var(--ease-spring)}.data-\[state\=open\]\:\[\&_svg\]\:rotate-180[data-state=open] svg,.\[\&_svg\[data-open\=true\]\]\:rotate-180 svg[data-open=true]{rotate:180deg}.\[\&_td\]\:border-b td{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_td\]\:border-surface-muted td{border-color:var(--surface-muted)}.\[\&_td\]\:px-4 td{padding-inline:calc(var(--spacing) * 4)}.\[\&_td\]\:px-5 td{padding-inline:calc(var(--spacing) * 5)}.\[\&_td\]\:py-2\.5 td{padding-block:calc(var(--spacing) * 2.5)}.\[\&_td\]\:py-4 td{padding-block:calc(var(--spacing) * 4)}.\[\&_td\]\:text-text-secondary td{color:var(--text-secondary)}.\[\&_td\]\:tabular-nums td{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.\[\&_th\]\:border-b th{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_th\]\:border-inner-border th{border-color:var(--inner-border)}.\[\&_th\]\:px-4 th{padding-inline:calc(var(--spacing) * 4)}.\[\&_th\]\:px-5 th{padding-inline:calc(var(--spacing) * 5)}.\[\&_th\]\:py-2\.5 th{padding-block:calc(var(--spacing) * 2.5)}.\[\&_th\]\:py-3 th{padding-block:calc(var(--spacing) * 3)}.\[\&_th\]\:text-left th{text-align:left}.\[\&_th\]\:font-mono th{font-family:var(--font-mono)}.\[\&_th\]\:text-micro th{font-size:10px}.\[\&_th\]\:font-bold th{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_th\]\:font-semibold th{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_th\]\:tracking-label th{--tw-tracking:.08em;letter-spacing:.08em}.\[\&_th\]\:tracking-normal th{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.\[\&_th\]\:text-text-secondary th{color:var(--text-secondary)}.\[\&_th\]\:text-text-tertiary th{color:var(--text-tertiary)}.\[\&_th\]\:normal-case th{text-transform:none}.\[\&_th\]\:uppercase th{text-transform:uppercase}.\[\&_thead_th\]\:sticky thead th{position:sticky}.\[\&_thead_th\]\:top-0 thead th{top:0}.\[\&_thead_th\]\:z-card thead th{z-index:2}.\[\&_thead_th\]\:bg-surface-2 thead th{background-color:var(--surface-2)}.\[\&_tr\:last-child_td\]\:border-b-0 tr:last-child td{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&_ul\]\:m-0 ul{margin:0}.\[\&_ul\]\:mb-4 ul{margin-bottom:calc(var(--spacing) * 4)}.\[\&_ul\:last-child\]\:mb-0 ul:last-child{margin-bottom:0}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\>\*\]\:w-full>*{width:100%}.\[\&\>\*\]\:min-w-0>*{min-width:0}.\[\&\>\*\]\:flex-auto>*{flex:auto}.\[\&\>button\]\:w-full>button{width:100%}.\[\&\>button\]\:shrink-0>button{flex-shrink:0}.\[\&\>button\]\:cursor-pointer>button{cursor:pointer}.\[\&\>button\]\:justify-between>button{justify-content:space-between}.\[\&\>code\]\:block>code{display:block}.\[\&\>code\]\:min-w-0>code{min-width:0}.\[\&\>code\]\:flex-1>code{flex:1}.\[\&\>code\]\:overflow-hidden>code{overflow:hidden}.\[\&\>code\]\:rounded-inset>code{border-radius:var(--radius-inset)}.\[\&\>code\]\:border>code{border-style:var(--tw-border-style);border-width:1px}.\[\&\>code\]\:border-inner-border>code{border-color:var(--inner-border)}.\[\&\>code\]\:bg-code-surface>code{background-color:var(--code-surface)}.\[\&\>code\]\:p-5>code{padding:calc(var(--spacing) * 5)}.\[\&\>code\]\:font-mono>code{font-family:var(--font-mono)}.\[\&\>code\]\:text-caption>code{font-size:12px}.\[\&\>code\]\:leading-normal>code{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.\[\&\>code\]\:text-ellipsis>code{text-overflow:ellipsis}.\[\&\>code\]\:whitespace-nowrap>code{white-space:nowrap}.\[\&\>code\]\:text-text-primary>code{color:var(--text-primary)}.\[\&\>div\:last-child\]\:flex-wrap>div:last-child{flex-wrap:wrap}.\[\&\>input\]\:min-h-11>input{min-height:calc(var(--spacing) * 11)}.\[\&\>input\]\:w-full>input{width:100%}.\[\&\>input\]\:rounded-control>input{border-radius:var(--radius-control)}.\[\&\>input\]\:border>input{border-style:var(--tw-border-style);border-width:1px}.\[\&\>input\]\:border-inner-border>input{border-color:var(--inner-border)}.\[\&\>input\]\:bg-surface-1>input{background-color:var(--surface-1)}.\[\&\>input\]\:px-3>input{padding-inline:calc(var(--spacing) * 3)}.\[\&\>input\]\:text-body>input{font-size:13px}.\[\&\>input\]\:font-medium>input{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&\>input\]\:text-text-primary>input{color:var(--text-primary)}.\[\&\>input\]\:focus-visible\:outline-2>input:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.\[\&\>input\]\:focus-visible\:outline-offset-2>input:focus-visible{outline-offset:2px}.\[\&\>input\]\:focus-visible\:outline-focus-ring>input:focus-visible{outline-color:var(--focus-ring)}.\[\&\>p\]\:my-0>p{margin-block:0}.\[\&\>span\]\:flex>span{display:flex}.\[\&\>span\]\:inline-flex>span{display:inline-flex}.\[\&\>span\]\:h-8>span{height:calc(var(--spacing) * 8)}.\[\&\>span\]\:items-center>span{align-items:center}.\[\&\>span\]\:gap-1>span{gap:var(--spacing)}.\[\&\>span\]\:overflow-hidden>span{overflow:hidden}.\[\&\>span\]\:border-0>span{border-style:var(--tw-border-style);border-width:0}.\[\&\>span\]\:border-r>span{border-right-style:var(--tw-border-style);border-right-width:1px}.\[\&\>span\]\:border-r-inner-border>span{border-right-color:var(--inner-border)}.\[\&\>span\]\:bg-transparent>span{background-color:#0000}.\[\&\>span\]\:px-2\.5>span{padding-inline:calc(var(--spacing) * 2.5)}.\[\&\>span\]\:font-mono>span{font-family:var(--font-mono)}.\[\&\>span\]\:font-sans>span{font-family:var(--font-sans)}.\[\&\>span\]\:text-micro>span{font-size:10px}.\[\&\>span\]\:leading-none>span{--tw-leading:1;line-height:1}.\[\&\>span\]\:text-ellipsis>span{text-overflow:ellipsis}.\[\&\>span\]\:whitespace-nowrap>span{white-space:nowrap}.\[\&\>span\]\:text-inherit>span{color:inherit}.\[\&\>span\]\:text-text-tertiary>span{color:var(--text-tertiary)}.\[\&\>span\]\:tabular-nums>span{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}@media not all and (min-width:640px){.max-small\:\[\&\>span\]\:w-fit>span{width:-moz-fit-content;width:fit-content}.max-small\:\[\&\>span\]\:max-w-full>span{max-width:100%}.max-small\:\[\&\>span\]\:text-center>span{text-align:center}.max-small\:\[\&\>span\]\:break-words>span{overflow-wrap:break-word}.max-small\:\[\&\>span\]\:whitespace-normal>span{white-space:normal}}.\[\&\>span\:last-child\]\:border-r-0>span:last-child{border-right-style:var(--tw-border-style);border-right-width:0}.\[\&\>strong\]\:font-head>strong{font-family:var(--font-head)}.\[\&\>strong\]\:font-sans>strong{font-family:var(--font-sans)}.\[\&\>strong\]\:text-body-lg>strong{font-size:14px}.\[\&\>strong\]\:font-semibold>strong{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&\>strong\]\:text-green>strong{color:var(--green)}.\[\&\>strong\]\:text-text-primary>strong{color:var(--text-primary)}.mlab-turn:focus-within .\[\.mlab-turn\:focus-within_\&\]\:opacity-100,.mlab-turn:hover .\[\.mlab-turn\:hover_\&\]\:opacity-100{opacity:1}details[open] .\[details\[open\]_\&\]\:rotate-180{rotate:180deg}}:root{--story-accent:var(--status-info);--story-ink:var(--text-primary);--story-muted:var(--text-secondary);--story-deep:var(--page-bg);--story-surface:var(--surface-1);--story-night:var(--status-info);--story-core:var(--purple);--story-blossom:var(--red);--story-voices:var(--purple);--story-red:var(--status-danger);--story-denial:var(--status-warning);--story-shore:var(--teal);--landing-story-max-width:1496px;--landing-story-gutter:96px;--landing-story-tablet-gutter:24px;--landing-story-mobile-gutter:16px;--landing-story-stack-gap:36px;--landing-story-figure-height:min(62svh, 480px);--landing-story-tablet-figure-height:min(45svh, 420px);--landing-story-figure-max-width:600px;--landing-story-mobile-aspect:3 / 2;--page-bg:#f7f3ed;--ease-spring:cubic-bezier(.32, .72, 0, 1);--dur-micro:.15s;--dur-macro:.25s;--font-sans:"Inter", -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", sans-serif;--font-mono:"Geist Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--font-head:"Space Grotesk", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--radius-micro:3px;--radius-tiny:5px;--radius-chip:6px;--radius-narrow:7px;--radius-inset:8px;--radius-control:9px;--radius-panel:10px;--radius-card:12px;--radius-hero:14px;--radius-sidebar:12px;--radius-pill:10px;--topbar-height:56px;--surface-1:#fffdf8;--surface-2:#fffefc;--surface-muted:#f3eee8;--surface-hover:#ece6de;--surface-active:#e4ddd4;--text-primary:#2d2926;--text-secondary:#5c544e;--text-tertiary:#8a8078;--border-subtle:#e4d7cb;--border-strong:#d8c7b8;--inner-border:var(--border-subtle);--glass-border:var(--border-strong);--accent:#2e2e32;--accent-soft:#eeebe7;--accent-foreground:#fff;--accent-hover:#1c1c1f;--status-success:#4c9368;--status-danger:#c95145;--status-warning:#d97706;--status-info:#3b82f6;--status-info-soft:#e8f1fe;--green:var(--status-success);--red:var(--status-danger);--orange:#e67e22;--teal:#0d9488;--purple:#8b5cf6;--green-soft:#edf5ef;--red-soft:#f7ebe8;--orange-soft:#fbf0e4;--teal-soft:#e6f6f5;--purple-soft:#f3effc;--focus-ring:#2e2e32;--track:#e5d8c9;--code-surface:#f9f5ee;--popover-bg:#fffefb;--hover:var(--surface-muted);--active-pill:var(--surface-hover);--kbd-bg:#f2e9de;--input-bg:var(--surface-2);--border-soft:var(--border-subtle);--glass-bg:#fffdf8e0;--glass-bg-2:#fffefcf0;--glass-border-2:#ffffffc7;--shadow-card:0 1px 2px #5338240a, 0 10px 28px -4px #53382414;--shadow-popout:0 20px 50px -10px #5338242e, 0 0 0 1px var(--inner-border);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--page-bg:#08080b;--surface-1:#1c1c20;--surface-2:#222228;--surface-muted:#2a2a30;--surface-hover:#313137;--surface-active:#38383f;--text-primary:#f5f5f7;--text-secondary:#c4c4c8;--text-tertiary:#8d8d93;--border-subtle:#2f2f36;--border-strong:#3a3a42;--inner-border:var(--border-subtle);--glass-border:var(--border-strong);--accent:#f5f5f7;--accent-soft:#2a2a2f;--accent-foreground:#0b0b0f;--accent-hover:#fff;--status-success:#34d399;--status-danger:#f87171;--status-warning:#fbbf24;--status-info:#60a5fa;--status-info-soft:#1e2a3d;--green:var(--status-success);--red:var(--status-danger);--orange:#fb923c;--teal:#2dd4bf;--purple:#c084fc;--green-soft:#223228;--red-soft:#332625;--orange-soft:#2f2f34;--teal-soft:#243234;--purple-soft:#2c2634;--focus-ring:#f5f5f7;--track:#2d2d34;--code-surface:#202026;--popover-bg:#1c1c20;--hover:var(--surface-muted);--active-pill:var(--surface-hover);--kbd-bg:#23232a;--glass-bg:#1c1c20bf;--glass-bg-2:#222228e0;--glass-border-2:#ffffff29;--shadow-card:0 1px 2px #0000004d, 0 16px 40px #00000073;--shadow-popout:0 24px 60px -12px #000000a6, 0 0 0 1px var(--inner-border);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@container account-list (width<=560px){.account-row{grid-template-columns:auto minmax(0,1fr);row-gap:8px}.account-row-actions{grid-column:1/-1;justify-content:flex-start}}.signal-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,110px),1fr))}.account-row-grid{grid-template-columns:auto minmax(0,1fr) auto}.popover-max{max-width:calc(100vw - 2rem)}.estimate-dot{width:13px;height:13px}.routing-slider{appearance:none;border-radius:var(--radius-control);border:1px solid var(--inner-border);background:var(--surface-2);cursor:pointer;--slider-fill:var(--accent);height:20px}.routing-slider[data-unlimited=true]{--slider-fill:var(--status-success)}.routing-slider:focus-visible{border-color:var(--accent);outline:none}.routing-slider::-webkit-slider-runnable-track{border-radius:var(--radius-control);background:linear-gradient(to right, var(--slider-fill) var(--slider-pct,0%), transparent var(--slider-pct,0%));height:20px}.routing-slider::-webkit-slider-thumb{appearance:none;background:var(--accent-foreground);width:8px;height:12px;box-shadow:0 0 0 1px color-mix(in srgb, var(--text-primary) 35%, transparent);border-radius:3px;margin-top:4px}.routing-slider::-moz-range-track{border-radius:var(--radius-control);background:0 0;height:20px}.routing-slider::-moz-range-progress{border-radius:var(--radius-control) 0 0 var(--radius-control);background:var(--slider-fill);height:20px}.routing-slider::-moz-range-thumb{background:var(--accent-foreground);width:8px;height:12px;box-shadow:0 0 0 1px color-mix(in srgb, var(--text-primary) 35%, transparent);border:none;border-radius:3px}.banner{--banner-accent:var(--status-info)}.banner[data-tone=success]{--banner-accent:var(--status-success);--banner-ink:var(--status-success)}.banner[data-tone=danger]{--banner-accent:var(--status-danger);--banner-ink:var(--status-danger)}.banner[data-tone=warning]{--banner-accent:var(--status-warning);--banner-ink:var(--text-secondary)}.banner[data-surface=page]{--banner-line:color-mix(in srgb, var(--banner-accent) var(--banner-line-alpha), transparent);--banner-surface:color-mix(in srgb, var(--banner-accent) var(--banner-surface-alpha), transparent)}.banner[data-surface=raised]{--banner-line:color-mix(in srgb, var(--banner-accent) var(--banner-line-alpha), var(--inner-border));--banner-surface:color-mix(in srgb, var(--banner-accent) var(--banner-surface-alpha), var(--surface-2))}.banner{border-color:var(--banner-line);background:var(--banner-surface);color:var(--banner-ink)}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./jsx-runtime-CXUMngI_.js";var t=e(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]);export{t};
|
|
Binary file
|
|
Binary file
|