@kafca/agentdock 0.1.43 → 0.1.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +77 -11
- package/bin/agentdock.mjs +5 -5
- package/dist/renderer/assets/{Badge-CbG6yRSm.js → Badge-BIojwD6s.js} +1 -1
- package/dist/renderer/assets/{Chat-BvNNWGGX.js → Chat-wjBR3XEX.js} +1 -1
- package/dist/renderer/assets/{ChatMarkdown-Ct-PvJB8.js → ChatMarkdown-DqszsPB_.js} +1 -1
- package/dist/renderer/assets/Config-BDCHs5A2.js +21 -0
- package/dist/renderer/assets/{CronList-Dj_3muVG.js → CronList-CEWQYTov.js} +1 -1
- package/dist/renderer/assets/Dashboard-DrWftfk3.js +26 -0
- package/dist/renderer/assets/{EmptyState-Bn2Qh14U.js → EmptyState-BqCx1oWr.js} +1 -1
- package/dist/renderer/assets/{KnowledgeDetail-Bsz6Ou41.js → KnowledgeDetail-BwK8Gpfa.js} +2 -2
- package/dist/renderer/assets/{KnowledgeHome-Cgj4XFXn.js → KnowledgeHome-hhDTZMDO.js} +3 -3
- package/dist/renderer/assets/{Logs-Dp-NF6GN.js → Logs-C9xPEhFT.js} +1 -1
- package/dist/renderer/assets/{Modal-B6YPPBN6.js → Modal-D2U4r2V0.js} +1 -1
- package/dist/renderer/assets/{MonitorList-xEZWg460.js → MonitorList-CayKbfwJ.js} +1 -1
- package/dist/renderer/assets/{Page-Bn7RjGOS.js → Page-urf5GcT_.js} +1 -1
- package/dist/renderer/assets/ProjectDetail-B1GyAr7a.js +11 -0
- package/dist/renderer/assets/{ProjectList-BDk5_gqY.js → ProjectList-BoipQypE.js} +1 -1
- package/dist/renderer/assets/{Select-xshfMIEQ.js → Select-CAscWpy5.js} +1 -1
- package/dist/renderer/assets/{SessionChat-BkHy90z3.js → SessionChat-BAVy5221.js} +1 -1
- package/dist/renderer/assets/{SessionList-BZyXT92L.js → SessionList-BZpuMvh0.js} +1 -1
- package/dist/renderer/assets/{ThreadChat-DUOIyXrS.js → ThreadChat-JX7m9biG.js} +1 -1
- package/dist/renderer/assets/Workspace-CFW8otjU.js +14 -0
- package/dist/renderer/assets/{arrow-left-C54ZI-AS.js → arrow-left-7HrNuS-V.js} +1 -1
- package/dist/renderer/assets/{book-open-Dl7GO0zn.js → book-open-BDoAu82s.js} +1 -1
- package/dist/renderer/assets/{check-CiqgtrOL.js → check-DGlyq4xX.js} +1 -1
- package/dist/renderer/assets/{chevron-down-DTL2OuVh.js → chevron-down-Bb_3EHq9.js} +1 -1
- package/dist/renderer/assets/{circle-DaVKfa3P.js → circle-DIpqZnYw.js} +1 -1
- package/dist/renderer/assets/desktop-Ci1fnRDR.js +1 -0
- package/dist/renderer/assets/{desktop-C6q6wBae.js → desktop-Do_UrC-o.js} +5 -5
- package/dist/renderer/assets/en-CmAr_0e6.js +1 -0
- package/dist/renderer/assets/es-Cs9x52ca.js +1 -0
- package/dist/renderer/assets/{funnel-CrmnLMJI.js → funnel-Bbf0ERLP.js} +1 -1
- package/dist/renderer/assets/{heart-BMfQI7y_.js → heart-CGqU-qfw.js} +1 -1
- package/dist/renderer/assets/{index-nreiKY1f.js → index-Df-Trovt.js} +2 -2
- package/dist/renderer/assets/{index-HPNb1zfx.js → index-DwhTjLA1.js} +36 -36
- package/dist/renderer/assets/index-RaTga2BC.css +11 -0
- package/dist/renderer/assets/ja-DtvtBRTW.js +1 -0
- package/dist/renderer/assets/{pencil-wTQ4l465.js → pencil-CHiy1MvK.js} +1 -1
- package/dist/renderer/assets/{play-BK--MXmw.js → play-CGYnmC4Q.js} +1 -1
- package/dist/renderer/assets/{plug-BIx9fjip.js → plug-Mexu4gyV.js} +1 -1
- package/dist/renderer/assets/{plus-Dn7JFWQ8.js → plus-B_Q5-Oj7.js} +1 -1
- package/dist/renderer/assets/projects-C6bbkC-O.js +1 -0
- package/dist/renderer/assets/{save-CC3zOSWb.js → save-CJ_QFPw0.js} +1 -1
- package/dist/renderer/assets/{search-CDTy9Czu.js → search-D8Dkhsyq.js} +1 -1
- package/dist/renderer/assets/{server-DtQk3t2a.js → server-Cd96R7WL.js} +1 -1
- package/dist/renderer/assets/{session-utils-4ep5D66T.js → session-utils-BNUbQBfF.js} +1 -1
- package/dist/renderer/assets/{sessions-Dor1LteH.js → sessions-BACfV8s1.js} +1 -1
- package/dist/renderer/assets/{shield-check-Cz2LpU6r.js → shield-check-Cnn-yQUA.js} +1 -1
- package/dist/renderer/assets/{trash-2-C2EmWFZV.js → trash-2-oWCxwQ9D.js} +1 -1
- package/dist/renderer/assets/{user-I8B-cs5A.js → user-BzE9BwsY.js} +1 -1
- package/dist/renderer/assets/{wifi-off-CPevTQJn.js → wifi-off-DHxnNkdY.js} +1 -1
- package/dist/renderer/assets/zh-CcJ9vBZj.js +1 -0
- package/dist/renderer/assets/zh-TW-elI72AC1.js +1 -0
- package/dist/renderer/index.html +2 -2
- package/dist-electron/electron/main.js +26 -1
- package/dist-electron/packages/core-sdk/src/index.js +28 -0
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-backend.js +111 -62
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-session-coordinator.js +80 -7
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-transport.js +78 -5
- package/dist-electron/services/local-ai-core/src/acp/store/external-store.js +98 -0
- package/dist-electron/services/local-ai-core/src/acp/store/local-core-acp-store.js +33 -0
- package/dist-electron/services/local-ai-core/src/acp/store/model-provider-store.js +88 -0
- package/dist-electron/services/local-ai-core/src/acp/store/schema.js +43 -0
- package/dist-electron/services/local-ai-core/src/agents/pi/launch.js +2 -119
- package/dist-electron/services/local-ai-core/src/agents/pi/provider-materializer.js +148 -0
- package/dist-electron/services/local-ai-core/src/channel/lark/config.js +2 -0
- package/dist-electron/services/local-ai-core/src/channel/lark/inbound.js +114 -0
- package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +117 -75
- package/dist-electron/services/local-ai-core/src/channel/shared/session-command-runtime.js +4 -2
- package/dist-electron/services/local-ai-core/src/channel/shared/thread-routing.js +34 -0
- package/dist-electron/services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js +151 -47
- package/dist-electron/services/local-ai-core/src/execution/agent-execution-backend.js +56 -0
- package/dist-electron/services/local-ai-core/src/kernel/bootstrap.js +18 -57
- package/dist-electron/services/local-ai-core/src/kernel/local-core-errors.js +255 -0
- package/dist-electron/services/local-ai-core/src/plugins/builtin/catalog.js +78 -0
- package/dist-electron/services/local-ai-core/src/router/workspace-route-config.js +3 -1
- package/dist-electron/services/local-ai-core/src/router/workspace-router.js +64 -9
- package/dist-electron/services/local-ai-core/src/runtime/agent-runtime-detector.js +5 -2
- package/dist-electron/services/local-ai-core/src/runtime/config-migration.js +152 -0
- package/dist-electron/services/local-ai-core/src/runtime/deployment-diagnostics.js +175 -0
- package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +330 -3
- package/dist-electron/services/local-ai-core/src/runtime/local-core-runtime-state.js +11 -2
- package/dist-electron/services/local-ai-core/src/runtime/provider-config-migration.js +32 -0
- package/dist-electron/services/local-ai-core/src/runtime/runtime-detection-service.js +76 -8
- package/dist-electron/services/local-ai-core/src/runtime/server-routes.js +62 -0
- package/dist-electron/services/local-ai-core/src/runtime/server.js +708 -4
- package/dist-electron/services/local-ai-core/src/runtime/standalone.js +13 -3
- package/dist-electron/services/local-ai-core/src/sandbox/opensandbox-client.js +113 -0
- package/dist-electron/services/local-ai-core/src/sandbox/sandbox-config.js +273 -0
- package/dist-electron/services/local-ai-core/src/sandbox/sandbox-manager.js +215 -0
- package/dist-electron/services/local-ai-core/src/sandbox/sandbox-stdio-proxy.js +188 -0
- package/dist-electron/services/local-ai-core/src/thread/slash-command-registry.js +3 -0
- package/dist-electron/services/local-ai-core/src/thread/thread-command-service.js +32 -0
- package/dist-electron/services/local-ai-core/src/thread/thread-slash-command-dispatcher.js +71 -0
- package/dist-electron/shared/desktop.js +85 -1
- package/dist-electron/tests/contracts/architecture-docs.test.js +83 -0
- package/dist-electron/tests/electron/plugin-kernel.test.js +225 -18
- package/dist-electron/tests/electron/runtime-detection-service.test.js +57 -5
- package/dist-electron/tests/electron/sandbox-config.test.js +541 -0
- package/dist-electron/tests/electron/workspace-task-store.test.js +257 -0
- package/dist-electron/tests/integration/channel-gateways.test.js +32 -0
- package/dist-electron/tests/integration/lark-gateway.test.js +1977 -0
- package/dist-electron/tests/integration/local-core-acp-progress.test.js +1772 -0
- package/dist-electron/tests/integration/local-core-refactor.test.js +775 -5156
- package/dist-electron/tests/integration/local-core-routes.test.js +238 -0
- package/dist-electron/tests/integration/weixin-gateway.test.js +927 -0
- package/package.json +2 -3
- package/dist/renderer/assets/Config-lQX2qVVV.js +0 -16
- package/dist/renderer/assets/Dashboard-eh_RhGYb.js +0 -26
- package/dist/renderer/assets/ProjectDetail-Cv_jIE61.js +0 -11
- package/dist/renderer/assets/Workspace-Dl80fNEC.js +0 -14
- package/dist/renderer/assets/desktop-jaAiayNB.js +0 -1
- package/dist/renderer/assets/en-D2SkCrhG.js +0 -1
- package/dist/renderer/assets/es-C8UBPhxM.js +0 -1
- package/dist/renderer/assets/index-CaQZSRbg.css +0 -11
- package/dist/renderer/assets/ja-ChF4vbBL.js +0 -1
- package/dist/renderer/assets/projects-brJZgwEJ.js +0 -1
- package/dist/renderer/assets/zh-DIcdHycM.js +0 -1
- package/dist/renderer/assets/zh-TW-BtRwreY_.js +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kafca/agentdock",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.45",
|
|
4
4
|
"license": "PolyForm-Noncommercial-1.0.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist-electron/electron/main.js",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"build:core": "pnpm build:electron",
|
|
35
35
|
"test": "pnpm build:renderer && pnpm build:electron && node --test dist-electron/tests/electron/*.test.js dist-electron/tests/contracts/*.test.js dist-electron/tests/integration/*.test.js dist-electron/packages/knowledge-api/test/*.test.js dist-electron/src/pages/Threads/thread-chat-permission.test.js",
|
|
36
36
|
"e2e:smoke": "pnpm build && node scripts/e2e-smoke.mjs",
|
|
37
|
+
"e2e:compose": "node scripts/e2e-compose.mjs",
|
|
37
38
|
"dist:mac": "pnpm build && electron-builder --mac dmg zip --arm64",
|
|
38
39
|
"dist:win": "pnpm build && electron-builder --win nsis zip --x64",
|
|
39
40
|
"start": "node scripts/dev.mjs",
|
|
@@ -65,14 +66,12 @@
|
|
|
65
66
|
"react-router-dom": "^7.5.0",
|
|
66
67
|
"rehype-highlight": "^7.0.2",
|
|
67
68
|
"remark-gfm": "^4.0.1",
|
|
68
|
-
"ws": "^8.18.1",
|
|
69
69
|
"zustand": "^5.0.5"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@types/node": "^24.0.0",
|
|
73
73
|
"@types/react": "^19.1.2",
|
|
74
74
|
"@types/react-dom": "^19.1.2",
|
|
75
|
-
"@types/ws": "^8.18.1",
|
|
76
75
|
"@vitejs/plugin-react": "^4.4.1",
|
|
77
76
|
"autoprefixer": "^10.4.21",
|
|
78
77
|
"electron": "^35.0.2",
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import{c as m,u as R,r as n,j as e,B as c,R as P,L as M,I as U,$ as z,a0 as K}from"./index-HPNb1zfx.js";import{g as L,k as B,m as I}from"./desktop-jaAiayNB.js";import{B as _}from"./Badge-CbG6yRSm.js";import{P as A,S as d,a as H}from"./Page-Bn7RjGOS.js";import{S as $}from"./save-CC3zOSWb.js";import{P as D}from"./plug-BIx9fjip.js";/**
|
|
2
|
-
* @license lucide-react v0.487.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const q=[["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z",key:"1mlx9k"}]],E=m("file-code",q);/**
|
|
7
|
-
* @license lucide-react v0.487.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const F=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],T=m("rotate-ccw",F);/**
|
|
12
|
-
* @license lucide-react v0.487.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const V=[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]],X=m("scroll-text",V);function G(a){return a==="api_ready"?"success":a==="error"?"danger":a==="starting"?"warning":"neutral"}function ee(){const{t:a}=R(),[s,u]=n.useState(null),[i,j]=n.useState(null),[g,h]=n.useState(""),[k,x]=n.useState(""),[w,f]=n.useState(!0),[p,y]=n.useState(!1),[v,l]=n.useState(""),r=n.useCallback(async()=>{f(!0);try{const[t,o]=await Promise.allSettled([L(),B()]);t.status==="fulfilled"&&(u(t.value),h(t.value.settings.knowledge.baseUrl||""),x(t.value.settings.knowledge.baseUrl||"")),o.status==="fulfilled"&&j(o.value)}finally{f(!1)}},[]);n.useEffect(()=>{r()},[r]);const N=async()=>{if(confirm(a("system.restartConfirm")))try{await z(),l(a("common.success")),await r()}catch(t){l(t.message)}},b=async()=>{if(confirm(a("system.reloadConfirm")))try{await K(),l(a("common.success")),await r()}catch(t){l(t.message)}},S=async()=>{y(!0);try{const t=await I({knowledge:{baseUrl:g,authMode:(s==null?void 0:s.settings.knowledge.authMode)||"none",token:(s==null?void 0:s.settings.knowledge.token)||"",headerName:(s==null?void 0:s.settings.knowledge.headerName)||"X-API-Key",defaultCollection:(s==null?void 0:s.settings.knowledge.defaultCollection)||"personal_knowledge"}});u(o=>o&&{...o,settings:t}),x(t.knowledge.baseUrl||""),l(a("common.success"))}catch(t){l(t.message)}finally{y(!1)}},C=g!==k;return e.jsxs("div",{className:"space-y-6 animate-fade-in",children:[e.jsx(A,{title:a("nav.system"),description:"Runtime health, logs, and plugin diagnostics. Advanced config is available read-only from the diagnostics drawer.",actions:e.jsxs(e.Fragment,{children:[e.jsxs(c,{variant:"secondary",onClick:b,children:[e.jsx(P,{size:16})," ",a("system.reload")]}),e.jsxs(c,{variant:"danger",onClick:N,children:[e.jsx(T,{size:16})," ",a("system.restart")]}),e.jsx(M,{to:"/system/logs",children:e.jsxs(c,{variant:"secondary",children:[e.jsx(X,{size:16})," ",a("system.logs")]})})]})}),v?e.jsx("div",{role:"status",className:"rounded-lg border border-primary/20 bg-primary/10 px-4 py-3 text-sm text-primary",children:v}):null,e.jsxs("div",{className:"grid grid-cols-1 gap-4 lg:grid-cols-3",children:[e.jsxs(d,{title:"Runtime",description:w?"Loading...":"Local service status.",children:[e.jsx(H,{tone:G(s==null?void 0:s.phase),children:(s==null?void 0:s.phase)||"unknown"}),e.jsx("p",{className:"mt-3 text-sm text-muted-foreground",children:s!=null&&s.pendingRestart?"Restart required to apply saved changes.":"No pending restart."})]}),e.jsx(d,{title:"Config",description:"Active config file location.",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(E,{size:18,className:"mt-0.5 text-primary"}),e.jsx("p",{className:"break-all font-mono text-xs leading-5 text-muted-foreground",children:(s==null?void 0:s.settings.configPath)||(s==null?void 0:s.configFile.path)||"-"})]})}),e.jsxs(d,{title:"Plugins",description:"Health summary only.",children:[e.jsx("p",{className:"text-2xl font-semibold text-foreground",children:i?`${i.enabledPluginCount}/${i.pluginCount}`:"-"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"enabled plugins"})]})]}),e.jsx(d,{title:"Knowledge",description:"System-wide knowledge API connection.",actions:e.jsxs(c,{size:"sm",onClick:()=>void S(),loading:p,disabled:!C&&!p,children:[e.jsx($,{size:14})," Save"]}),children:e.jsx(U,{label:"Knowledge base URL",value:g,onChange:t=>h(t.target.value),placeholder:"http://127.0.0.1:16007"})}),e.jsx(d,{title:a("system.plugins"),description:"Plugin state is read-only in the daily UI. Use backend config for advanced changes.",children:i?i.plugins.length===0?e.jsx("div",{className:"py-8 text-sm text-muted-foreground",children:"No plugins registered."}):e.jsx("div",{className:"divide-y divide-border",children:i.plugins.map(t=>e.jsxs("div",{className:"flex items-start justify-between gap-4 py-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(D,{size:15,className:"text-muted-foreground"}),e.jsx("p",{className:"truncate text-sm font-medium text-foreground",children:t.pluginId})]}),e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:t.health.summary||t.manifest.provides.join(", ")||"No declared capabilities"})]}),e.jsx(_,{variant:t.health.status==="healthy"?"success":t.health.status==="failed"?"danger":"warning",children:t.health.status})]},t.pluginId))}):e.jsx("div",{className:"py-8 text-sm text-muted-foreground",children:"Loading..."})})]})}export{ee as default};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import{c as j,u as te,r,a as ae,l as re,b as w,d as ie,e as ne,j as e,M as de,W as le,F as W,C as g,B as ce,R as oe,f as me,L as A,S as xe}from"./index-HPNb1zfx.js";import{B as n}from"./Badge-CbG6yRSm.js";import{E as f}from"./EmptyState-Bn2Qh14U.js";import{P as he}from"./Page-Bn7RjGOS.js";import{l as ue}from"./projects-brJZgwEJ.js";import{l as pe,r as ge,o as fe,a as je}from"./desktop-jaAiayNB.js";import{S as be,A as H}from"./server-DtQk3t2a.js";import{B as ke}from"./book-open-Dl7GO0zn.js";import{S as U}from"./shield-check-Cz2LpU6r.js";/**
|
|
2
|
-
* @license lucide-react v0.487.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const ve=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],ye=j("activity",ve);/**
|
|
7
|
-
* @license lucide-react v0.487.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const Ne=[["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M17.5 17.5 16 16.3V14",key:"akvzfd"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]],we=j("calendar-clock",Ne);/**
|
|
12
|
-
* @license lucide-react v0.487.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const Re=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],Ae=j("circle-check",Re);/**
|
|
17
|
-
* @license lucide-react v0.487.0 - ISC
|
|
18
|
-
*
|
|
19
|
-
* This source code is licensed under the ISC license.
|
|
20
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const Se=[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]],F=j("cpu",Se);/**
|
|
22
|
-
* @license lucide-react v0.487.0 - ISC
|
|
23
|
-
*
|
|
24
|
-
* This source code is licensed under the ISC license.
|
|
25
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
26
|
-
*/const _e=[["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]],Me=j("list-checks",_e);function Le({title:a,description:t,to:o,icon:h,primary:d}){return e.jsxs(A,{to:o,className:["group flex min-h-[118px] flex-col justify-between rounded-2xl p-5 transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-ring",d?"bg-black/[0.07] text-foreground hover:bg-black/[0.09] dark:bg-white/[0.10] dark:hover:bg-white/[0.13]":"bg-white/54 text-foreground hover:bg-white/72 dark:bg-white/[0.055] dark:hover:bg-white/[0.085]"].join(" "),children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsx("div",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-white/70 text-primary shadow-[0_1px_1px_rgba(0,0,0,0.04)] dark:bg-white/[0.08]",children:e.jsx(h,{size:20})}),e.jsx(H,{size:17,className:"mt-1 text-muted-foreground/45 transition-colors group-hover:text-foreground"})]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-semibold text-foreground",children:a}),e.jsx("p",{className:"mt-2 max-w-sm text-sm leading-5 text-muted-foreground",children:t})]})]})}function R({title:a,description:t,tasks:o,empty:h,urgent:d}){return e.jsxs(g,{className:"overflow-hidden p-0",children:[e.jsx("div",{className:"border-b border-black/[0.08] px-5 py-4 dark:border-white/[0.07]",children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-semibold text-foreground",children:a}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:t})]}),e.jsx(n,{variant:d&&o.length>0?"warning":"secondary",children:o.length})]})}),o.length===0?e.jsx("div",{className:"p-5",children:e.jsx(f,{message:h,icon:Me})}):e.jsx("div",{className:"divide-y divide-black/[0.08] dark:divide-white/[0.07]",children:o.map(l=>e.jsxs("div",{className:"px-5 py-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"truncate text-sm font-medium text-foreground",children:l.title}),e.jsxs("p",{className:"mt-1 truncate text-xs text-muted-foreground",children:[l.workspaceId," · ",l.runtimeId]})]}),e.jsx(n,{variant:l.status==="failed"?"danger":l.status==="completed"?"success":"info",children:l.status})]}),e.jsxs("p",{className:"mt-2 text-xs text-muted-foreground",children:["Updated ",new Date(l.updatedAt).toLocaleString()]})]},l.taskId))})]})}function ze({approvals:a}){return e.jsxs(g,{className:"overflow-hidden p-0",children:[e.jsx("div",{className:"border-b border-black/[0.08] px-5 py-4 dark:border-white/[0.07]",children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-semibold text-foreground",children:"待审批"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"高风险操作会在这里等待确认或拒绝。"})]}),e.jsx(n,{variant:a.length>0?"warning":"secondary",children:a.length})]})}),a.length===0?e.jsx("div",{className:"p-5",children:e.jsx(f,{message:"暂无待审批操作",icon:U})}):e.jsx("div",{className:"divide-y divide-black/[0.08] dark:divide-white/[0.07]",children:a.map(t=>e.jsxs("div",{className:"px-5 py-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"truncate text-sm font-medium text-foreground",children:t.title}),e.jsxs("p",{className:"mt-1 truncate text-xs text-muted-foreground",children:[t.workspaceId," · ",t.kind]})]}),e.jsx(n,{variant:t.riskLevel==="high"?"danger":"warning",children:t.riskLevel})]}),e.jsx("p",{className:"mt-2 line-clamp-2 text-xs leading-5 text-muted-foreground",children:t.description})]},t.approvalId))})]})}function Ce({events:a}){return e.jsxs(g,{className:"overflow-hidden p-0",children:[e.jsxs("div",{className:"border-b border-black/[0.08] px-5 py-4 dark:border-white/[0.07]",children:[e.jsx("h2",{className:"text-base font-semibold text-foreground",children:"审计记录"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"最近的任务、审批和权限事件。"})]}),a.length===0?e.jsx("div",{className:"p-5",children:e.jsx(f,{message:"暂无审计记录",icon:U})}):e.jsx("div",{className:"divide-y divide-black/[0.08] dark:divide-white/[0.07]",children:a.map(t=>e.jsxs("div",{className:"px-5 py-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"truncate text-sm font-medium text-foreground",children:t.summary}),e.jsxs("p",{className:"mt-1 truncate text-xs text-muted-foreground",children:[t.type," · ",t.actor||"system"]})]}),t.riskLevel?e.jsx(n,{variant:t.riskLevel==="high"?"danger":"secondary",children:t.riskLevel}):null]}),e.jsx("p",{className:"mt-2 text-xs text-muted-foreground",children:new Date(t.createdAt).toLocaleString()})]},t.auditId))})]})}function Fe(){const{t:a}=te(),[t,o]=r.useState([]),[h,d]=r.useState([]),[l,S]=r.useState([]),[V,_]=r.useState([]),[K,M]=r.useState([]),[O,L]=r.useState([]),[Q,z]=r.useState([]),[G,C]=r.useState(!0),[J,D]=r.useState(!1),[X,u]=r.useState(!1),[E,T]=r.useState(""),[P,p]=r.useState(""),{desktopRuntime:c,desktopWorkspace:I,knowledgeModule:q,schedulerModule:$}=ae(),B=h.filter(s=>s.installed),b=[{title:"继续聊天",description:"打开本地对话,继续当前项目里的 agent 线程。",to:"/chat",icon:de,primary:!0},{title:"工作区",description:"管理项目、平台、模型和本地运行配置。",to:I?"/workspace":"/projects",icon:I?le:W}];q&&b.push({title:"知识库",description:"上传文档,维护可被检索的项目资料。",to:"/knowledge",icon:ke}),$&&b.push({title:"定时任务",description:"查看和管理自动执行的计划任务。",to:"/cron",icon:we}),(!q||!$)&&b.push({title:"系统设置",description:"查看配置、日志和桌面应用偏好。",to:"/system",icon:xe});const k=r.useCallback(async()=>{var s;C(!0),T(""),p("");try{if(c){const[y,i]=await Promise.all([re(),pe().then(x=>({status:"fulfilled",runtimes:x}),x=>({status:"rejected",error:x}))]),[N,v,Z]=await Promise.all([w({status:["created","queued","running"],limit:6}),w({status:"waiting_for_user",limit:6}),w({status:["completed","failed","cancelled"],limit:6})]),[ee,se]=await Promise.all([ie({status:"pending",limit:6}),ne({limit:6})]);S(N.tasks||[]),_(v.tasks||[]),M(Z.tasks||[]),L(ee.approvals||[]),z(se.events||[]),o((y.workspaces||[]).map(x=>({name:x.name,agent_type:x.agentType,platforms:x.platforms,sessions_count:x.sessionsCount,heartbeat_enabled:x.heartbeatEnabled}))),i.status==="fulfilled"?d(i.runtimes):(d([]),p(((s=i.error)==null?void 0:s.message)||String(i.error)));return}const m=await ue();o(m.projects||[]),d([]),S([]),_([]),M([]),L([]),z([])}catch(m){T(m.message||String(m))}finally{C(!1)}},[c]),Y=r.useCallback(async()=>{D(!0),u(!0),p("");try{d(await ge())}catch(s){p(s.message||String(s))}finally{D(!1),u(!1)}},[]);return r.useEffect(()=>{k();const s=()=>k();window.addEventListener("cc:refresh",s);const m=c?fe(()=>{k()}):()=>{},y=c?je(i=>{if(i.type==="runtime.detect.started"){u(!0);return}if(i.type==="runtime.detect.completed"){u(!1),d(i.runtimes);return}if(i.type==="runtime.detect.failed"){u(!1),p(i.error);return}i.type==="runtime.status.changed"&&d(N=>N.map(v=>v.runtimeId===i.runtime.runtimeId?i.runtime:v))}):()=>{};return()=>{window.removeEventListener("cc:refresh",s),m(),y()}},[c,k]),G&&t.length===0?e.jsx("div",{className:"flex h-64 items-center justify-center text-muted-foreground",children:e.jsx(ye,{className:"animate-pulse",size:24})}):e.jsxs("div",{className:"animate-fade-in space-y-8",children:[e.jsx(he,{title:"概览",description:"继续最近的工作,或进入项目、知识和自动化配置。当前版本 v0.1.43"}),E?e.jsx("div",{role:"alert",className:"rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-700 dark:border-amber-400/20 dark:bg-amber-500/10 dark:text-amber-200",children:E}):null,e.jsxs("section",{className:"space-y-3",children:[e.jsx("div",{className:"flex items-end justify-between gap-4",children:e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold tracking-tight text-foreground",children:"快速开始"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"常用入口会保留在最前面。"})]})}),e.jsx("div",{className:"grid grid-cols-1 gap-3 lg:grid-cols-2",children:b.map(s=>e.jsx(Le,{...s},s.to))})]}),c?e.jsxs(g,{className:"overflow-hidden p-0",children:[e.jsxs("div",{className:"flex flex-col gap-3 border-b border-black/[0.08] px-5 py-4 dark:border-white/[0.07] sm:flex-row sm:items-center sm:justify-between",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-semibold text-foreground",children:"本机 Agent Runtime"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"显示本机 runtime 安装检测状态,不执行安装或登录检查。"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(n,{variant:B.length>0?"success":"default",children:[B.length," installed"]}),X?e.jsx(n,{variant:"info",children:"checking"}):null,e.jsxs(ce,{variant:"outline",size:"sm",loading:J,onClick:Y,title:"刷新 runtime 检测",children:[e.jsx(oe,{size:15}),"刷新"]})]})]}),P?e.jsxs("div",{className:"px-5 py-4 text-sm text-amber-700 dark:text-amber-200",children:["检测失败:",P]}):h.length===0?e.jsx("div",{className:"p-5",children:e.jsx(f,{message:"还没有 runtime 检测结果",icon:F})}):e.jsx("div",{className:"grid grid-cols-1 gap-3 p-5 md:grid-cols-2 xl:grid-cols-3",children:h.map(s=>e.jsxs("div",{className:"rounded-2xl border border-black/[0.08] bg-white/50 p-4 shadow-[0_8px_24px_rgba(15,23,42,0.05)] dark:border-white/[0.08] dark:bg-white/[0.055]",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[e.jsx("div",{className:["flex h-10 w-10 shrink-0 items-center justify-center rounded-xl",s.status==="installed"?"bg-emerald-500/10 text-emerald-600 dark:text-emerald-300":s.status==="error"?"bg-red-500/10 text-red-600 dark:text-red-200":"bg-amber-500/10 text-amber-700 dark:text-amber-200"].join(" "),children:e.jsx(F,{size:19})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"truncate text-sm font-semibold text-foreground",children:s.displayName}),e.jsx("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:s.agentType})]})]}),s.status==="installed"?e.jsx(Ae,{size:18,className:"mt-0.5 shrink-0 text-emerald-500"}):e.jsx(me,{size:18,className:"mt-0.5 shrink-0 text-amber-500"})]}),e.jsxs("div",{className:"mt-4 flex flex-wrap items-center gap-2",children:[e.jsx(n,{variant:s.status==="installed"?"success":s.status==="error"?"danger":"warning",children:s.status}),e.jsx(n,{children:s.source}),s.version?e.jsxs(n,{variant:"secondary",children:["v",s.version]}):null]}),e.jsx("p",{className:"mt-3 text-sm leading-5 text-muted-foreground",children:s.summary}),s.issues[0]?e.jsx("p",{className:"mt-2 text-xs leading-5 text-amber-700 dark:text-amber-200",children:s.issues[0].message}):null,s.binaryPath||s.command?e.jsx("p",{className:"mt-3 truncate rounded-lg bg-black/[0.045] px-2.5 py-2 font-mono text-xs text-muted-foreground dark:bg-white/[0.06]",children:s.binaryPath||s.command}):null,s.recommendedActions[0]?e.jsx("p",{className:"mt-3 text-xs leading-5 text-muted-foreground",children:s.recommendedActions[0].description}):null,e.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:["Last checked ",new Date(s.detectedAt).toLocaleString()]})]},s.agentType))})]}):null,c?e.jsxs("section",{className:"grid grid-cols-1 gap-4 xl:grid-cols-3",children:[e.jsx(R,{title:"运行中任务",description:"正在排队或执行的 agent 工作。",tasks:l,empty:"暂无运行中的任务"}),e.jsx(R,{title:"等待处理",description:"需要用户输入或审批的任务。",tasks:V,empty:"暂无等待处理的任务",urgent:!0}),e.jsx(R,{title:"最近完成",description:"最近结束、失败或取消的任务。",tasks:K,empty:"暂无最近任务"})]}):null,c?e.jsxs("section",{className:"grid grid-cols-1 gap-4 xl:grid-cols-2",children:[e.jsx(ze,{approvals:O}),e.jsx(Ce,{events:Q})]}):null,e.jsxs(g,{className:"p-0",children:[e.jsxs("div",{className:"flex items-center justify-between gap-4 border-b border-black/[0.08] px-5 py-4 dark:border-white/[0.07]",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-base font-semibold text-foreground",children:a("nav.projects")}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"最近配置和会话概览。"})]}),e.jsx(A,{to:c?"/workspace":"/projects",className:"text-sm font-medium text-primary transition-colors hover:text-primary/80",children:a("common.viewAll")})]}),t.length===0?e.jsx("div",{className:"p-5",children:e.jsx(f,{message:a("projects.noProjects"),icon:W})}):e.jsx("div",{className:"divide-y divide-black/[0.08] dark:divide-white/[0.07]",children:t.slice(0,6).map(s=>{var m;return e.jsxs(A,{to:c?`/workspace?project=${encodeURIComponent(s.name)}`:`/projects/${s.name}`,className:"group flex items-center justify-between gap-3 px-5 py-4 transition-colors duration-200 hover:bg-black/[0.04] dark:hover:bg-white/[0.06]",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[e.jsx("div",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-primary/10 text-primary",children:e.jsx(be,{size:17})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("p",{className:"truncate text-sm font-medium text-foreground",children:s.name}),e.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[s.agent_type," · ",((m=s.platforms)==null?void 0:m.join(", "))||"no platform"," · ",s.sessions_count," sessions"]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[s.heartbeat_enabled?e.jsx(n,{variant:"success",children:"heartbeat"}):null,e.jsx(H,{size:16,className:"text-muted-foreground/45 transition-colors group-hover:text-foreground"})]})]},s.name)})})]})]})}export{Fe as default};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{c as L,A as i,u as O,D as Q,r,j as e,L as V,B as n,Z as W,g as _,C as m,I as p,E as X,G as Y}from"./index-HPNb1zfx.js";import{B as f}from"./Badge-CbG6yRSm.js";import{M as S}from"./Modal-B6YPPBN6.js";import{E as z}from"./EmptyState-Bn2Qh14U.js";import{P as ee,S as $}from"./Page-Bn7RjGOS.js";import{g as se}from"./projects-brJZgwEJ.js";import{A as te}from"./arrow-left-C54ZI-AS.js";import{H as I}from"./heart-BMfQI7y_.js";import{P as ae}from"./plug-BIx9fjip.js";import{P as re}from"./plus-Dn7JFWQ8.js";import{C as ne}from"./check-CiqgtrOL.js";import{T as oe}from"./trash-2-C2EmWFZV.js";import{P as ie}from"./play-BK--MXmw.js";import"./index-nreiKY1f.js";/**
|
|
2
|
-
* @license lucide-react v0.487.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const le=[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]],ce=L("layers",le);/**
|
|
7
|
-
* @license lucide-react v0.487.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const de=[["rect",{x:"14",y:"4",width:"4",height:"16",rx:"1",key:"zuxfzm"}],["rect",{x:"6",y:"4",width:"4",height:"16",rx:"1",key:"1okwgv"}]],me=L("pause",de),xe=s=>i.get(`/projects/${s}/providers`),ue=(s,a)=>i.post(`/projects/${s}/providers`,a),pe=(s,a)=>i.delete(`/projects/${s}/providers/${a}`),he=(s,a)=>i.post(`/projects/${s}/providers/${a}/activate`),ve=s=>i.get(`/projects/${s}/models`),je=(s,a)=>i.post(`/projects/${s}/model`,{model:a}),fe=s=>i.get(`/projects/${s}/heartbeat`),ge=s=>i.post(`/projects/${s}/heartbeat/pause`),be=s=>i.post(`/projects/${s}/heartbeat/resume`),ye=s=>i.post(`/projects/${s}/heartbeat/run`),Ne=(s,a)=>i.post(`/projects/${s}/heartbeat/interval`,{minutes:a});function Te(){var k,C;const{t:s}=O(),{name:a}=Q(),[h,A]=r.useState("overview"),[d,M]=r.useState(null),[b,H]=r.useState([]),[we,E]=r.useState(""),[l,B]=r.useState(null),[y,T]=r.useState([]),[D,q]=r.useState(""),[R,N]=r.useState(!0),[U,v]=r.useState(!1),[c,x]=r.useState({name:"",api_key:"",base_url:"",model:""}),[Z,j]=r.useState(!1),[w,F]=r.useState("30"),o=r.useCallback(async()=>{if(a)try{N(!0);const[t,u,P,g]=await Promise.allSettled([se(a),xe(a),fe(a),ve(a)]);t.status==="fulfilled"&&M(t.value),u.status==="fulfilled"&&(H(u.value.providers||[]),E(u.value.active_provider||"")),P.status==="fulfilled"&&B(P.value),g.status==="fulfilled"&&(T(g.value.models||[]),q(g.value.current||""))}finally{N(!1)}},[a]);r.useEffect(()=>{o();const t=()=>o();return window.addEventListener("cc:refresh",t),()=>window.removeEventListener("cc:refresh",t)},[o]);const G=async()=>{!a||!c.name||(await ue(a,c),v(!1),x({name:"",api_key:"",base_url:"",model:""}),o())},K=async()=>{a&&(await Ne(a,parseInt(w)),j(!1),o())},J=[{key:"overview",icon:ce},{key:"providers",icon:W},{key:"heartbeat",icon:I}];return R&&!d?e.jsx("div",{className:"flex items-center justify-center h-64 text-muted-foreground animate-pulse",children:"Loading..."}):e.jsxs("div",{className:"space-y-6 animate-fade-in",children:[e.jsx(ee,{title:a,description:"Project overview, providers, and heartbeat status. Low-frequency settings are no longer editable in the daily UI.",actions:e.jsx(V,{to:"/projects",children:e.jsxs(n,{variant:"secondary",size:"sm",children:[e.jsx(te,{size:14})," Back"]})})}),d&&e.jsx(f,{variant:"info",children:d.agent_type}),e.jsx("div",{className:"flex gap-2",children:J.map(({key:t,icon:u})=>e.jsxs("button",{onClick:()=>A(t),className:_("flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium transition-all",h===t?"bg-primary text-primary-foreground shadow-md":"bg-secondary text-secondary-foreground hover:bg-secondary/80"),children:[e.jsx(u,{size:16}),s(`projects.tabs.${t}`)]},t))}),h==="overview"&&d&&e.jsxs("div",{className:"space-y-4",children:[e.jsx($,{title:s("projects.platforms"),children:e.jsx("div",{className:"flex flex-wrap gap-2",children:(k=d.platforms)==null?void 0:k.map(t=>e.jsxs(f,{variant:t.connected?"success":"danger",children:[e.jsx(ae,{size:12,className:"mr-1"})," ",t.type," ",t.connected?"✓":"✗"]},t.type))})}),e.jsxs($,{title:s("sessions.title"),children:[e.jsxs("p",{className:"text-sm text-muted-foreground",children:[d.sessions_count," ",s("nav.sessions").toLowerCase()]}),((C=d.active_session_keys)==null?void 0:C.length)>0&&e.jsx("div",{className:"mt-2 flex flex-wrap gap-1",children:d.active_session_keys.map(t=>e.jsx(f,{variant:"default",children:t},t))})]})]}),h==="providers"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsx("h3",{className:"text-sm font-semibold text-foreground",children:s("providers.title")}),e.jsxs(n,{size:"sm",onClick:()=>v(!0),children:[e.jsx(re,{size:14})," ",s("providers.add")]})]}),b.length===0?e.jsx(z,{message:s("common.noData")}):e.jsx("div",{className:"space-y-2",children:b.map(t=>e.jsx(m,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium text-foreground",children:t.name}),t.active&&e.jsx(f,{variant:"success",children:s("providers.active")})]}),e.jsxs("p",{className:"text-xs text-muted-foreground mt-1",children:[t.model," ",t.base_url?`· ${t.base_url}`:""]})]}),e.jsxs("div",{className:"flex gap-2",children:[!t.active&&e.jsxs(n,{size:"sm",variant:"secondary",onClick:()=>{he(a,t.name).then(o)},children:[e.jsx(ne,{size:14})," ",s("providers.activate")]}),!t.active&&e.jsx(n,{size:"sm",variant:"danger",onClick:()=>{pe(a,t.name).then(o)},children:e.jsx(oe,{size:14})})]})]})},t.name))}),y.length>0&&e.jsxs(m,{children:[e.jsx("h3",{className:"text-sm font-semibold text-foreground mb-3",children:s("providers.models")}),e.jsx("div",{className:"flex flex-wrap gap-2",children:y.map(t=>e.jsx("button",{onClick:()=>{je(a,t).then(o)},className:_("px-3 py-1.5 rounded-lg text-xs font-medium transition-all",t===D?"bg-primary/15 text-primary border border-primary/30":"bg-secondary text-secondary-foreground hover:bg-secondary/80"),children:t},t))})]}),e.jsx(S,{open:U,onClose:()=>v(!1),title:s("providers.add"),children:e.jsxs("div",{className:"space-y-3",children:[e.jsx(p,{label:s("providers.name"),value:c.name,onChange:t=>x({...c,name:t.target.value})}),e.jsx(p,{label:"API Key",type:"password",value:c.api_key,onChange:t=>x({...c,api_key:t.target.value})}),e.jsx(p,{label:s("providers.baseUrl"),value:c.base_url,onChange:t=>x({...c,base_url:t.target.value}),placeholder:"https://api.example.com"}),e.jsx(p,{label:s("providers.model"),value:c.model,onChange:t=>x({...c,model:t.target.value})}),e.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[e.jsx(n,{variant:"secondary",onClick:()=>v(!1),children:s("common.cancel")}),e.jsx(n,{onClick:G,children:s("providers.add")})]})]})})]}),h==="heartbeat"&&e.jsxs("div",{className:"space-y-4",children:[l?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[e.jsxs(m,{children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:s("heartbeat.status")}),e.jsx("p",{className:"text-lg font-bold text-foreground mt-1",children:l.paused?s("heartbeat.paused"):s("heartbeat.running")})]}),e.jsxs(m,{children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:s("heartbeat.interval")}),e.jsxs("p",{className:"text-lg font-bold text-foreground mt-1",children:[l.interval_mins,"m"]})]}),e.jsxs(m,{children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:s("heartbeat.runCount")}),e.jsx("p",{className:"text-lg font-bold text-foreground mt-1",children:l.run_count})]}),e.jsxs(m,{children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:s("heartbeat.errorCount")}),e.jsx("p",{className:"text-lg font-bold text-foreground mt-1",children:l.error_count})]})]}),e.jsx(m,{children:e.jsxs("div",{className:"space-y-2 text-sm",children:[e.jsxs("p",{className:"text-muted-foreground",children:[s("heartbeat.lastRun"),": ",e.jsx("span",{className:"text-foreground",children:X(l.last_run)})]}),e.jsxs("p",{className:"text-muted-foreground",children:[s("heartbeat.skippedBusy"),": ",e.jsx("span",{className:"text-foreground",children:l.skipped_busy})]}),l.last_error&&e.jsx("p",{className:"text-destructive",children:l.last_error})]})}),e.jsxs("div",{className:"flex gap-2",children:[l.paused?e.jsxs(n,{onClick:()=>{be(a).then(o)},children:[e.jsx(ie,{size:14})," ",s("heartbeat.resume")]}):e.jsxs(n,{variant:"secondary",onClick:()=>{ge(a).then(o)},children:[e.jsx(me,{size:14})," ",s("heartbeat.pause")]}),e.jsxs(n,{variant:"secondary",onClick:()=>{ye(a).then(o)},children:[e.jsx(I,{size:14})," ",s("heartbeat.trigger")]}),e.jsxs(n,{variant:"secondary",onClick:()=>j(!0),children:[e.jsx(Y,{size:14})," ",s("heartbeat.setInterval")]})]})]}):e.jsx(z,{message:s("common.noData")}),e.jsx(S,{open:Z,onClose:()=>j(!1),title:s("heartbeat.setInterval"),children:e.jsxs("div",{className:"space-y-3",children:[e.jsx(p,{label:`${s("heartbeat.interval")} (min)`,type:"number",value:w,onChange:t=>F(t.target.value)}),e.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[e.jsx(n,{variant:"secondary",onClick:()=>j(!1),children:s("common.cancel")}),e.jsx(n,{onClick:K,children:s("common.save")})]})]})})]})]})}export{Te as default};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import{c as Pt,z as _,x as Rt,r as N,j as r,B as I,I as z,S as At}from"./index-HPNb1zfx.js";import{M as et}from"./Modal-B6YPPBN6.js";import{S as ge}from"./Select-xshfMIEQ.js";import{E as ye}from"./EmptyState-Bn2Qh14U.js";import{P as _t,S as tt,a as nt}from"./Page-Bn7RjGOS.js";import{c as It,e as Lt,t as Ot,d as Ce,f as Tt,h as Dt,i as zt,j as st}from"./desktop-jaAiayNB.js";import{D as ke,c as lt,g as Ee,d as Ft,e as Bt}from"./desktop-C6q6wBae.js";import{T as Ne}from"./trash-2-C2EmWFZV.js";import{P as ue}from"./plus-Dn7JFWQ8.js";import{S as rt}from"./save-CC3zOSWb.js";import"./index-nreiKY1f.js";import"./chevron-down-DTL2OuVh.js";import"./check-CiqgtrOL.js";/**
|
|
2
|
-
* @license lucide-react v0.487.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const Ut=[["rect",{width:"5",height:"5",x:"3",y:"3",rx:"1",key:"1tu5fj"}],["rect",{width:"5",height:"5",x:"16",y:"3",rx:"1",key:"1v8r4q"}],["rect",{width:"5",height:"5",x:"3",y:"16",rx:"1",key:"1x03jg"}],["path",{d:"M21 16h-3a2 2 0 0 0-2 2v3",key:"177gqh"}],["path",{d:"M21 21v.01",key:"ents32"}],["path",{d:"M12 7v3a2 2 0 0 1-2 2H7",key:"8crl2c"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M12 3h.01",key:"n36tog"}],["path",{d:"M12 16v.01",key:"133mhm"}],["path",{d:"M16 12h1",key:"1slzba"}],["path",{d:"M21 12v.01",key:"1lwtk9"}],["path",{d:"M12 21v-1",key:"1880an"}]],at=Pt("qr-code",Ut);var $t=Object.defineProperty,xe=Object.getOwnPropertySymbols,ct=Object.prototype.hasOwnProperty,dt=Object.prototype.propertyIsEnumerable,ot=(c,d,i)=>d in c?$t(c,d,{enumerable:!0,configurable:!0,writable:!0,value:i}):c[d]=i,je=(c,d)=>{for(var i in d||(d={}))ct.call(d,i)&&ot(c,i,d[i]);if(xe)for(var i of xe(d))dt.call(d,i)&&ot(c,i,d[i]);return c},Pe=(c,d)=>{var i={};for(var h in c)ct.call(c,h)&&d.indexOf(h)<0&&(i[h]=c[h]);if(c!=null&&xe)for(var h of xe(c))d.indexOf(h)<0&&dt.call(c,h)&&(i[h]=c[h]);return i};/**
|
|
7
|
-
* @license QR Code generator library (TypeScript)
|
|
8
|
-
* Copyright (c) Project Nayuki.
|
|
9
|
-
* SPDX-License-Identifier: MIT
|
|
10
|
-
*/var ne;(c=>{const d=class k{constructor(e,s,n,o){if(this.version=e,this.errorCorrectionLevel=s,this.modules=[],this.isFunction=[],e<k.MIN_VERSION||e>k.MAX_VERSION)throw new RangeError("Version value out of range");if(o<-1||o>7)throw new RangeError("Mask value out of range");this.size=e*4+17;let u=[];for(let f=0;f<this.size;f++)u.push(!1);for(let f=0;f<this.size;f++)this.modules.push(u.slice()),this.isFunction.push(u.slice());this.drawFunctionPatterns();const l=this.addEccAndInterleave(n);if(this.drawCodewords(l),o==-1){let f=1e9;for(let p=0;p<8;p++){this.applyMask(p),this.drawFormatBits(p);const w=this.getPenaltyScore();w<f&&(o=p,f=w),this.applyMask(p)}}b(0<=o&&o<=7),this.mask=o,this.applyMask(o),this.drawFormatBits(o),this.isFunction=[]}static encodeText(e,s){const n=c.QrSegment.makeSegments(e);return k.encodeSegments(n,s)}static encodeBinary(e,s){const n=c.QrSegment.makeBytes(e);return k.encodeSegments([n],s)}static encodeSegments(e,s,n=1,o=40,u=-1,l=!0){if(!(k.MIN_VERSION<=n&&n<=o&&o<=k.MAX_VERSION)||u<-1||u>7)throw new RangeError("Invalid value");let f,p;for(f=n;;f++){const m=k.getNumDataCodewords(f,s)*8,E=j.getTotalBits(e,f);if(E<=m){p=E;break}if(f>=o)throw new RangeError("Data too long")}for(const m of[k.Ecc.MEDIUM,k.Ecc.QUARTILE,k.Ecc.HIGH])l&&p<=k.getNumDataCodewords(f,m)*8&&(s=m);let w=[];for(const m of e){i(m.mode.modeBits,4,w),i(m.numChars,m.mode.numCharCountBits(f),w);for(const E of m.getData())w.push(E)}b(w.length==p);const L=k.getNumDataCodewords(f,s)*8;b(w.length<=L),i(0,Math.min(4,L-w.length),w),i(0,(8-w.length%8)%8,w),b(w.length%8==0);for(let m=236;w.length<L;m^=253)i(m,8,w);let M=[];for(;M.length*8<w.length;)M.push(0);return w.forEach((m,E)=>M[E>>>3]|=m<<7-(E&7)),new k(f,s,M,u)}getModule(e,s){return 0<=e&&e<this.size&&0<=s&&s<this.size&&this.modules[s][e]}getModules(){return this.modules}drawFunctionPatterns(){for(let n=0;n<this.size;n++)this.setFunctionModule(6,n,n%2==0),this.setFunctionModule(n,6,n%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);const e=this.getAlignmentPatternPositions(),s=e.length;for(let n=0;n<s;n++)for(let o=0;o<s;o++)n==0&&o==0||n==0&&o==s-1||n==s-1&&o==0||this.drawAlignmentPattern(e[n],e[o]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(e){const s=this.errorCorrectionLevel.formatBits<<3|e;let n=s;for(let u=0;u<10;u++)n=n<<1^(n>>>9)*1335;const o=(s<<10|n)^21522;b(o>>>15==0);for(let u=0;u<=5;u++)this.setFunctionModule(8,u,h(o,u));this.setFunctionModule(8,7,h(o,6)),this.setFunctionModule(8,8,h(o,7)),this.setFunctionModule(7,8,h(o,8));for(let u=9;u<15;u++)this.setFunctionModule(14-u,8,h(o,u));for(let u=0;u<8;u++)this.setFunctionModule(this.size-1-u,8,h(o,u));for(let u=8;u<15;u++)this.setFunctionModule(8,this.size-15+u,h(o,u));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let n=0;n<12;n++)e=e<<1^(e>>>11)*7973;const s=this.version<<12|e;b(s>>>18==0);for(let n=0;n<18;n++){const o=h(s,n),u=this.size-11+n%3,l=Math.floor(n/3);this.setFunctionModule(u,l,o),this.setFunctionModule(l,u,o)}}drawFinderPattern(e,s){for(let n=-4;n<=4;n++)for(let o=-4;o<=4;o++){const u=Math.max(Math.abs(o),Math.abs(n)),l=e+o,f=s+n;0<=l&&l<this.size&&0<=f&&f<this.size&&this.setFunctionModule(l,f,u!=2&&u!=4)}}drawAlignmentPattern(e,s){for(let n=-2;n<=2;n++)for(let o=-2;o<=2;o++)this.setFunctionModule(e+o,s+n,Math.max(Math.abs(o),Math.abs(n))!=1)}setFunctionModule(e,s,n){this.modules[s][e]=n,this.isFunction[s][e]=!0}addEccAndInterleave(e){const s=this.version,n=this.errorCorrectionLevel;if(e.length!=k.getNumDataCodewords(s,n))throw new RangeError("Invalid argument");const o=k.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][s],u=k.ECC_CODEWORDS_PER_BLOCK[n.ordinal][s],l=Math.floor(k.getNumRawDataModules(s)/8),f=o-l%o,p=Math.floor(l/o);let w=[];const L=k.reedSolomonComputeDivisor(u);for(let m=0,E=0;m<o;m++){let D=e.slice(E,E+p-u+(m<f?0:1));E+=D.length;const W=k.reedSolomonComputeRemainder(D,L);m<f&&D.push(0),w.push(D.concat(W))}let M=[];for(let m=0;m<w[0].length;m++)w.forEach((E,D)=>{(m!=p-u||D>=f)&&M.push(E[m])});return b(M.length==l),M}drawCodewords(e){if(e.length!=Math.floor(k.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");let s=0;for(let n=this.size-1;n>=1;n-=2){n==6&&(n=5);for(let o=0;o<this.size;o++)for(let u=0;u<2;u++){const l=n-u,p=(n+1&2)==0?this.size-1-o:o;!this.isFunction[p][l]&&s<e.length*8&&(this.modules[p][l]=h(e[s>>>3],7-(s&7)),s++)}}b(s==e.length*8)}applyMask(e){if(e<0||e>7)throw new RangeError("Mask value out of range");for(let s=0;s<this.size;s++)for(let n=0;n<this.size;n++){let o;switch(e){case 0:o=(n+s)%2==0;break;case 1:o=s%2==0;break;case 2:o=n%3==0;break;case 3:o=(n+s)%3==0;break;case 4:o=(Math.floor(n/3)+Math.floor(s/2))%2==0;break;case 5:o=n*s%2+n*s%3==0;break;case 6:o=(n*s%2+n*s%3)%2==0;break;case 7:o=((n+s)%2+n*s%3)%2==0;break;default:throw new Error("Unreachable")}!this.isFunction[s][n]&&o&&(this.modules[s][n]=!this.modules[s][n])}}getPenaltyScore(){let e=0;for(let u=0;u<this.size;u++){let l=!1,f=0,p=[0,0,0,0,0,0,0];for(let w=0;w<this.size;w++)this.modules[u][w]==l?(f++,f==5?e+=k.PENALTY_N1:f>5&&e++):(this.finderPenaltyAddHistory(f,p),l||(e+=this.finderPenaltyCountPatterns(p)*k.PENALTY_N3),l=this.modules[u][w],f=1);e+=this.finderPenaltyTerminateAndCount(l,f,p)*k.PENALTY_N3}for(let u=0;u<this.size;u++){let l=!1,f=0,p=[0,0,0,0,0,0,0];for(let w=0;w<this.size;w++)this.modules[w][u]==l?(f++,f==5?e+=k.PENALTY_N1:f>5&&e++):(this.finderPenaltyAddHistory(f,p),l||(e+=this.finderPenaltyCountPatterns(p)*k.PENALTY_N3),l=this.modules[w][u],f=1);e+=this.finderPenaltyTerminateAndCount(l,f,p)*k.PENALTY_N3}for(let u=0;u<this.size-1;u++)for(let l=0;l<this.size-1;l++){const f=this.modules[u][l];f==this.modules[u][l+1]&&f==this.modules[u+1][l]&&f==this.modules[u+1][l+1]&&(e+=k.PENALTY_N2)}let s=0;for(const u of this.modules)s=u.reduce((l,f)=>l+(f?1:0),s);const n=this.size*this.size,o=Math.ceil(Math.abs(s*20-n*10)/n)-1;return b(0<=o&&o<=9),e+=o*k.PENALTY_N4,b(0<=e&&e<=2568888),e}getAlignmentPatternPositions(){if(this.version==1)return[];{const e=Math.floor(this.version/7)+2,s=this.version==32?26:Math.ceil((this.version*4+4)/(e*2-2))*2;let n=[6];for(let o=this.size-7;n.length<e;o-=s)n.splice(1,0,o);return n}}static getNumRawDataModules(e){if(e<k.MIN_VERSION||e>k.MAX_VERSION)throw new RangeError("Version number out of range");let s=(16*e+128)*e+64;if(e>=2){const n=Math.floor(e/7)+2;s-=(25*n-10)*n-55,e>=7&&(s-=36)}return b(208<=s&&s<=29648),s}static getNumDataCodewords(e,s){return Math.floor(k.getNumRawDataModules(e)/8)-k.ECC_CODEWORDS_PER_BLOCK[s.ordinal][e]*k.NUM_ERROR_CORRECTION_BLOCKS[s.ordinal][e]}static reedSolomonComputeDivisor(e){if(e<1||e>255)throw new RangeError("Degree out of range");let s=[];for(let o=0;o<e-1;o++)s.push(0);s.push(1);let n=1;for(let o=0;o<e;o++){for(let u=0;u<s.length;u++)s[u]=k.reedSolomonMultiply(s[u],n),u+1<s.length&&(s[u]^=s[u+1]);n=k.reedSolomonMultiply(n,2)}return s}static reedSolomonComputeRemainder(e,s){let n=s.map(o=>0);for(const o of e){const u=o^n.shift();n.push(0),s.forEach((l,f)=>n[f]^=k.reedSolomonMultiply(l,u))}return n}static reedSolomonMultiply(e,s){if(e>>>8||s>>>8)throw new RangeError("Byte out of range");let n=0;for(let o=7;o>=0;o--)n=n<<1^(n>>>7)*285,n^=(s>>>o&1)*e;return b(n>>>8==0),n}finderPenaltyCountPatterns(e){const s=e[1];b(s<=this.size*3);const n=s>0&&e[2]==s&&e[3]==s*3&&e[4]==s&&e[5]==s;return(n&&e[0]>=s*4&&e[6]>=s?1:0)+(n&&e[6]>=s*4&&e[0]>=s?1:0)}finderPenaltyTerminateAndCount(e,s,n){return e&&(this.finderPenaltyAddHistory(s,n),s=0),s+=this.size,this.finderPenaltyAddHistory(s,n),this.finderPenaltyCountPatterns(n)}finderPenaltyAddHistory(e,s){s[0]==0&&(e+=this.size),s.pop(),s.unshift(e)}};d.MIN_VERSION=1,d.MAX_VERSION=40,d.PENALTY_N1=3,d.PENALTY_N2=3,d.PENALTY_N3=40,d.PENALTY_N4=10,d.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],d.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],c.QrCode=d;function i(C,e,s){if(e<0||e>31||C>>>e)throw new RangeError("Value out of range");for(let n=e-1;n>=0;n--)s.push(C>>>n&1)}function h(C,e){return(C>>>e&1)!=0}function b(C){if(!C)throw new Error("Assertion error")}const y=class P{constructor(e,s,n){if(this.mode=e,this.numChars=s,this.bitData=n,s<0)throw new RangeError("Invalid argument");this.bitData=n.slice()}static makeBytes(e){let s=[];for(const n of e)i(n,8,s);return new P(P.Mode.BYTE,e.length,s)}static makeNumeric(e){if(!P.isNumeric(e))throw new RangeError("String contains non-numeric characters");let s=[];for(let n=0;n<e.length;){const o=Math.min(e.length-n,3);i(parseInt(e.substring(n,n+o),10),o*3+1,s),n+=o}return new P(P.Mode.NUMERIC,e.length,s)}static makeAlphanumeric(e){if(!P.isAlphanumeric(e))throw new RangeError("String contains unencodable characters in alphanumeric mode");let s=[],n;for(n=0;n+2<=e.length;n+=2){let o=P.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n))*45;o+=P.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n+1)),i(o,11,s)}return n<e.length&&i(P.ALPHANUMERIC_CHARSET.indexOf(e.charAt(n)),6,s),new P(P.Mode.ALPHANUMERIC,e.length,s)}static makeSegments(e){return e==""?[]:P.isNumeric(e)?[P.makeNumeric(e)]:P.isAlphanumeric(e)?[P.makeAlphanumeric(e)]:[P.makeBytes(P.toUtf8ByteArray(e))]}static makeEci(e){let s=[];if(e<0)throw new RangeError("ECI assignment value out of range");if(e<128)i(e,8,s);else if(e<16384)i(2,2,s),i(e,14,s);else if(e<1e6)i(6,3,s),i(e,21,s);else throw new RangeError("ECI assignment value out of range");return new P(P.Mode.ECI,0,s)}static isNumeric(e){return P.NUMERIC_REGEX.test(e)}static isAlphanumeric(e){return P.ALPHANUMERIC_REGEX.test(e)}getData(){return this.bitData.slice()}static getTotalBits(e,s){let n=0;for(const o of e){const u=o.mode.numCharCountBits(s);if(o.numChars>=1<<u)return 1/0;n+=4+u+o.bitData.length}return n}static toUtf8ByteArray(e){e=encodeURI(e);let s=[];for(let n=0;n<e.length;n++)e.charAt(n)!="%"?s.push(e.charCodeAt(n)):(s.push(parseInt(e.substring(n+1,n+3),16)),n+=2);return s}};y.NUMERIC_REGEX=/^[0-9]*$/,y.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,y.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";let j=y;c.QrSegment=y})(ne||(ne={}));(c=>{(d=>{const i=class{constructor(b,y){this.ordinal=b,this.formatBits=y}};i.LOW=new i(0,1),i.MEDIUM=new i(1,0),i.QUARTILE=new i(2,3),i.HIGH=new i(3,2),d.Ecc=i})(c.QrCode||(c.QrCode={}))})(ne||(ne={}));(c=>{(d=>{const i=class{constructor(b,y){this.modeBits=b,this.numBitsCharCount=y}numCharCountBits(b){return this.numBitsCharCount[Math.floor((b+7)/17)]}};i.NUMERIC=new i(1,[10,12,14]),i.ALPHANUMERIC=new i(2,[9,11,13]),i.BYTE=new i(4,[8,16,16]),i.KANJI=new i(8,[8,10,12]),i.ECI=new i(7,[0,0,0]),d.Mode=i})(c.QrSegment||(c.QrSegment={}))})(ne||(ne={}));var ie=ne;/**
|
|
11
|
-
* @license qrcode.react
|
|
12
|
-
* Copyright (c) Paul O'Shannessy
|
|
13
|
-
* SPDX-License-Identifier: ISC
|
|
14
|
-
*/var Qt={L:ie.QrCode.Ecc.LOW,M:ie.QrCode.Ecc.MEDIUM,Q:ie.QrCode.Ecc.QUARTILE,H:ie.QrCode.Ecc.HIGH},ut=128,mt="L",ht="#FFFFFF",ft="#000000",gt=!1,pt=1,Gt=4,Ht=0,Yt=.1;function xt(c,d=0){const i=[];return c.forEach(function(h,b){let y=null;h.forEach(function(j,C){if(!j&&y!==null){i.push(`M${y+d} ${b+d}h${C-y}v1H${y+d}z`),y=null;return}if(C===h.length-1){if(!j)return;y===null?i.push(`M${C+d},${b+d} h1v1H${C+d}z`):i.push(`M${y+d},${b+d} h${C+1-y}v1H${y+d}z`);return}j&&y===null&&(y=C)})}),i.join("")}function vt(c,d){return c.slice().map((i,h)=>h<d.y||h>=d.y+d.h?i:i.map((b,y)=>y<d.x||y>=d.x+d.w?b:!1))}function Wt(c,d,i,h){if(h==null)return null;const b=c.length+i*2,y=Math.floor(d*Yt),j=b/d,C=(h.width||y)*j,e=(h.height||y)*j,s=h.x==null?c.length/2-C/2:h.x*j,n=h.y==null?c.length/2-e/2:h.y*j,o=h.opacity==null?1:h.opacity;let u=null;if(h.excavate){let f=Math.floor(s),p=Math.floor(n),w=Math.ceil(C+s-f),L=Math.ceil(e+n-p);u={x:f,y:p,w,h:L}}const l=h.crossOrigin;return{x:s,y:n,h:e,w:C,excavation:u,opacity:o,crossOrigin:l}}function Vt(c,d){return d!=null?Math.max(Math.floor(d),0):c?Gt:Ht}function wt({value:c,level:d,minVersion:i,includeMargin:h,marginSize:b,imageSettings:y,size:j,boostLevel:C}){let e=_.useMemo(()=>{const f=(Array.isArray(c)?c:[c]).reduce((p,w)=>(p.push(...ie.QrSegment.makeSegments(w)),p),[]);return ie.QrCode.encodeSegments(f,Qt[d],i,void 0,void 0,C)},[c,d,i,C]);const{cells:s,margin:n,numCells:o,calculatedImageSettings:u}=_.useMemo(()=>{let l=e.getModules();const f=Vt(h,b),p=l.length+f*2,w=Wt(l,j,f,y);return{cells:l,margin:f,numCells:p,calculatedImageSettings:w}},[e,j,y,h,b]);return{qrcode:e,margin:n,cells:s,numCells:o,calculatedImageSettings:u}}var Kt=(function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0})(),Xt=_.forwardRef(function(d,i){const h=d,{value:b,size:y=ut,level:j=mt,bgColor:C=ht,fgColor:e=ft,includeMargin:s=gt,minVersion:n=pt,boostLevel:o,marginSize:u,imageSettings:l}=h,p=Pe(h,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","marginSize","imageSettings"]),{style:w}=p,L=Pe(p,["style"]),M=l==null?void 0:l.src,m=_.useRef(null),E=_.useRef(null),D=_.useCallback(U=>{m.current=U,typeof i=="function"?i(U):i&&(i.current=U)},[i]),[W,he]=_.useState(!1),{margin:X,cells:se,numCells:re,calculatedImageSettings:O}=wt({value:b,level:j,minVersion:n,boostLevel:o,includeMargin:s,marginSize:u,imageSettings:l,size:y});_.useEffect(()=>{if(m.current!=null){const U=m.current,$=U.getContext("2d");if(!$)return;let ce=se;const G=E.current,H=O!=null&&G!==null&&G.complete&&G.naturalHeight!==0&&G.naturalWidth!==0;H&&O.excavation!=null&&(ce=vt(se,O.excavation));const x=window.devicePixelRatio||1;U.height=U.width=y*x;const de=y/re*x;$.scale(de,de),$.fillStyle=C,$.fillRect(0,0,re,re),$.fillStyle=e,Kt?$.fill(new Path2D(xt(ce,X))):se.forEach(function(B,J){B.forEach(function(ve,ae){ve&&$.fillRect(ae+X,J+X,1,1)})}),O&&($.globalAlpha=O.opacity),H&&$.drawImage(G,O.x+X,O.y+X,O.w,O.h)}}),_.useEffect(()=>{he(!1)},[M]);const A=je({height:y,width:y},w);let le=null;return M!=null&&(le=_.createElement("img",{src:M,key:M,style:{display:"none"},onLoad:()=>{he(!0)},ref:E,crossOrigin:O==null?void 0:O.crossOrigin})),_.createElement(_.Fragment,null,_.createElement("canvas",je({style:A,height:y,width:y,ref:D,role:"img"},L)),le)});Xt.displayName="QRCodeCanvas";var Re=_.forwardRef(function(d,i){const h=d,{value:b,size:y=ut,level:j=mt,bgColor:C=ht,fgColor:e=ft,includeMargin:s=gt,minVersion:n=pt,boostLevel:o,title:u,marginSize:l,imageSettings:f}=h,p=Pe(h,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","title","marginSize","imageSettings"]),{margin:w,cells:L,numCells:M,calculatedImageSettings:m}=wt({value:b,level:j,minVersion:n,boostLevel:o,includeMargin:s,marginSize:l,imageSettings:f,size:y});let E=L,D=null;f!=null&&m!=null&&(m.excavation!=null&&(E=vt(L,m.excavation)),D=_.createElement("image",{href:f.src,height:m.h,width:m.w,x:m.x+w,y:m.y+w,preserveAspectRatio:"none",opacity:m.opacity,crossOrigin:m.crossOrigin}));const W=xt(E,w);return _.createElement("svg",je({height:y,width:y,viewBox:`0 0 ${M} ${M}`,ref:i,role:"img"},p),!!u&&_.createElement("title",null,u),_.createElement("path",{fill:C,d:`M0,0 h${M}v${M}H0z`,shapeRendering:"crispEdges"}),_.createElement("path",{fill:e,d:W,shapeRendering:"crispEdges"}),D)});Re.displayName="QRCodeSVG";const q="__custom__",Se=["weixin","lark"],Ae=[{id:"openai",label:"OpenAI",name:"openai",base_url:"https://api.openai.com/v1",model:"gpt-4.1-mini"},{id:"openrouter",label:"OpenRouter",name:"openrouter",base_url:"https://openrouter.ai/api/v1",model:"openai/gpt-4.1-mini"},{id:"anthropic",label:"Anthropic",name:"anthropic",base_url:"https://api.anthropic.com/v1",model:"claude-3-5-haiku-latest"},{id:"minimax",label:"Minimax",name:"minimax",base_url:"https://api.minimax.chat/v1",model:"MiniMax-M2.5"},{id:"ollama",label:"Ollama",name:"ollama",base_url:"http://127.0.0.1:11434/v1",model:"qwen2.5-coder:7b"}];function F(c){return JSON.parse(JSON.stringify(c))}function oe(c){return Array.isArray(c.projects)||(c.projects=[]),c.projects}function qt(c){const d=new Set(c.map(h=>h.name).filter(Boolean));let i=c.length+1;for(;d.has(`project-${i}`);)i+=1;return{name:`project-${i}`,agentType:Bt,workDir:"",model:""}}function me(c){var d,i,h,b,y;return{...c,agent:{...c.agent,options:{...((d=c.agent)==null?void 0:d.options)||{},model:lt((i=c.agent)==null?void 0:i.type,String(((b=(h=c.agent)==null?void 0:h.options)==null?void 0:b.model)||""))},providers:((y=c.agent)==null?void 0:y.providers)||[]},platforms:c.platforms||[]}}function it(c,d){return d.includes(c)?c:q}function Jt(c){var d;return((d=Ae.find(i=>c.name===i.name||i.base_url&&c.base_url===i.base_url||i.model&&c.model===i.model&&c.name===i.name))==null?void 0:d.id)||q}function Zt(c,d){const i=Ae.find(h=>h.id===d);return i?{...c,name:i.name,base_url:i.base_url,model:i.model}:c}function Me(c="weixin"){var d;return{type:c,options:{instance_id:`${c}-${((d=crypto.randomUUID)==null?void 0:d.call(crypto))||Date.now().toString(36)}`}}}function te(c){var d;return String(((d=c==null?void 0:c.options)==null?void 0:d.instance_id)||"").trim()||"default"}function pe(c){const d=c.type==="feishu"?"lark":c.type,i=c.options&&typeof c.options=="object"?{...c.options}:{};return d==="weixin"?{type:d,options:{...i,instance_id:String(i.instance_id||"").trim()}}:d==="lark"?{type:d,options:{...i,instance_id:String(i.instance_id||"").trim(),app_id:String(i.app_id||"").trim(),app_secret:String(i.app_secret||"").trim(),card_actions:i.card_actions===!0}}:{type:d,options:i}}function en(c){var d;if(c.type==="weixin")return"WeChat QR login";if(c.type==="lark"){const i=String(((d=c.options)==null?void 0:d.app_id)||"").trim();return i?`App ID ${i}`:"App ID and secret required"}return"Custom platform"}function tn(c){var h,b;const d=String(((b=(h=c.agent)==null?void 0:h.options)==null?void 0:b.work_dir)||"").trim();return d?d.replace(/\/+$/,"").split("/").filter(Boolean).pop()||d:"No work directory"}function nn(c){return c==="success"?"border-primary/20 bg-primary/10 text-primary dark:border-primary/25 dark:bg-primary/10 dark:text-blue-200":c==="warning"?"border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-400/20 dark:bg-amber-500/10 dark:text-amber-200":"border-red-200 bg-red-50 text-red-700 dark:border-red-400/20 dark:bg-red-500/10 dark:text-red-200"}function wn(){var Oe,Te,De,ze,Fe,Be,Ue,$e,Qe,Ge,He,Ye,We,Ve,Ke;const[c,d]=Rt(),i=c.get("project")||"",[h,b]=N.useState(null),[y,j]=N.useState(null),[C,e]=N.useState(0),[s,n]=N.useState("basic"),[o,u]=N.useState(null),[l,f]=N.useState(null),[p,w]=N.useState(null),[L,M]=N.useState(!1),[m,E]=N.useState(null),[D,W]=N.useState(!1),[he,X]=N.useState(!0),[se,re]=N.useState(""),[O,A]=N.useState(null),le=N.useRef(null),U=N.useRef(null),$=N.useRef(C),ce=N.useRef(""),G=N.useCallback(async(t="")=>{X(!0);try{const a=await It(),g=F(a.parsed||{});if(g.projects=oe(g).map(v=>me(v)),b(g),j(F(g)),t){const v=(g.projects||[]).findIndex(R=>R.name===t);e(v>=0?v:0)}}catch(a){A({tone:"error",message:a instanceof Error?a.message:String(a)})}finally{X(!1)}},[]);N.useEffect(()=>{G(i)},[G]);const H=(h==null?void 0:h.projects)||[],x=H[C]||null,de=JSON.stringify(h||{})!==JSON.stringify(y||{});N.useEffect(()=>{le.current=h},[h]),N.useEffect(()=>{U.current=l},[l]),N.useEffect(()=>{$.current=C,ce.current=(x==null?void 0:x.name)||""},[C,x==null?void 0:x.name]),N.useEffect(()=>{if(!h||!i)return;const t=H.findIndex(a=>a.name===i);t>=0&&t!==C&&e(t)},[h,H,i,C]);const B=N.useCallback(t=>{b(a=>{if(!a)return a;const g=F(a),v=oe(g),R=v[C];return R?(v[C]=me(t(R)),g):a})},[C]),J=N.useCallback((t,a)=>{B(g=>{const v=[...g.agent.providers||[]],R=v[t];return R?(v[t]=a(R),{...g,agent:{...g.agent,providers:v}}):g})},[B]),ve=()=>{u(qt(H))},ae=t=>{u(a=>a&&{...a,...t})},bt=()=>{if(!o)return;const t=o.name.trim(),a=o.agentType.trim(),g=o.workDir.trim(),v=o.model.trim();if(!t||!a||!g){A({tone:"warning",message:"Project name, agent type, and work directory are required."});return}if(H.some(Y=>Y.name===t)){A({tone:"warning",message:`Project "${t}" already exists.`});return}const R=me({name:t,agent:{type:a,options:{model:v||Ee(a),work_dir:g},providers:[]},platforms:[],admin_from:"",disabled_commands:[]}),V=H.length;b(Y=>{const T=F(Y||{});return oe(T).push(R),T}),e(V),d({project:t}),u(null),A(null)},yt=t=>{b(a=>{if(!a)return a;const g=F(a),v=oe(g);return v.splice(t,1),e(Math.max(0,Math.min(t,v.length-1))),g})},_e=t=>{var g;if(w(null),E(null),t===null){f({index:t,draft:Me()});return}const a=(g=x==null?void 0:x.platforms)==null?void 0:g[t];a&&f({index:t,draft:F(a)})},Z=t=>{f(a=>a&&{...a,draft:t(a.draft)})},Ct=()=>{if(!l)return;const t=pe(l.draft);B(a=>{const g=[...a.platforms||[]];return l.index===null?g.push(t):g[l.index]=t,{...a,platforms:g}}),f(null),w(null),E(null)},Ie=async()=>{if(!l||!h)return l==null?void 0:l.draft;const t=F(h),a=oe(t),g=a[C];if(!g)return l.draft;const v=[...g.platforms||[]],R=pe(l.draft);l.index===null?v.push(R):v[l.index]=R,a[C]=me({...g,platforms:v});const V=await Ce(t),Y=F(V.parsed||t);return j(Y),b(F(Y)),f(T=>T&&{index:T.index??v.length-1,draft:R}),R},kt=async()=>{if(!(!(x!=null&&x.name)||!h)){M(!0);try{await Ie();const t=await Tt(x.name,te(l==null?void 0:l.draft));w({...t,status:"wait",createdAt:Date.now()}),A(null)}catch(t){A({tone:"error",message:t instanceof Error?t.message:String(t)})}finally{M(!1)}}},Et=async()=>{if(!(!(x!=null&&x.name)||!h)){W(!0);try{await Ie();const t=await Dt(x.name,te(l==null?void 0:l.draft));E({...t,status:"wait",createdAt:Date.now()}),A(null)}catch(t){A({tone:"error",message:t instanceof Error?t.message:String(t)})}finally{W(!1)}}},Nt=async()=>{if(!(!(x!=null&&x.name)||!(p!=null&&p.ticket))){M(!0);try{const t=await zt(x.name,p.ticket,te(l==null?void 0:l.draft));w(a=>a&&{...a,status:t.status}),t.status==="confirmed"&&A({tone:"success",message:"WeChat QR code confirmed."})}catch(t){A({tone:"error",message:t instanceof Error?t.message:String(t)})}finally{M(!1)}}},Le=N.useCallback(async(t,a)=>{const g=await Lt(t,a);if(g.status!=="running"||g.connected!==!0)throw new Error(g.lastError||"Lark bot credentials were saved, but the gateway is not connected yet.");const v=await Ot(t,a);if(!v.success)throw new Error(v.error||"Lark bot credentials were saved, but the connection test failed.")},[]),we=N.useCallback(async t=>{var qe,Je,Ze;const a=ce.current,g=te((qe=U.current)==null?void 0:qe.draft),v=le.current;if(!v)return;const R=F(v),V=oe(R),Y=$.current,T=V[Y];if(!T)return;const S=[...T.platforms||[]],Q=U.current,K=(Q==null?void 0:Q.index)??S.findIndex(ee=>pe(ee).type==="lark"&&te(ee)===g),fe=K>=0?S[K]:(Q==null?void 0:Q.draft)||Me("lark"),be=pe({...fe,type:"lark",options:{...fe.options||{},instance_id:g,app_id:t.appId,app_secret:t.appSecret,verification_token:t.verificationToken||((Je=fe.options)==null?void 0:Je.verification_token)||"",encrypt_key:t.encryptKey||((Ze=fe.options)==null?void 0:Ze.encrypt_key)||"",card_actions:!0,subscribed_events:"im.message.receive_v1 card.action.trigger",subscribed_callbacks:"card.action.trigger"}});K>=0?S[K]=be:S.push(be),V[Y]=me({...T,platforms:S});const jt=await Ce(R),Xe=F(jt.parsed||R);j(Xe),b(F(Xe)),f(ee=>ee&&{...ee,index:ee.index??(K>=0?K:S.length-1),draft:be}),await Le(a,g),A({tone:"success",message:"Lark bot bound, saved, and ready to send messages."}),await G(a)},[Le,G]),St=async()=>{if(!(!(x!=null&&x.name)||!(m!=null&&m.ticket)||!h)){W(!0);try{const t=await st(x.name,m.ticket,te(l==null?void 0:l.draft));E(a=>{var g;return a&&{...a,status:t.status,botName:(g=t.credentials)==null?void 0:g.botName}}),t.status==="confirmed"&&t.credentials?await we(t.credentials):t.status==="expired"&&A({tone:"warning",message:"Lark QR code expired. Generate a new QR code and scan again."})}catch(t){A({tone:"error",message:t instanceof Error?t.message:String(t)})}finally{W(!1)}}};N.useEffect(()=>{if(!(x!=null&&x.name)||!(m!=null&&m.ticket)||(l==null?void 0:l.draft.type)!=="lark"||m.status&&!["wait","signed"].includes(m.status))return;let t=!1,a;const v=(m.createdAt||Date.now())+Math.max(m.expiresIn||0,1)*1e3,R=Math.max(3,Math.min(Number(m.interval||5)||5,15))*1e3,V=T=>{a=window.setTimeout(()=>{Y()},T)},Y=async()=>{var T;if(!t){if(Date.now()>=v){E(S=>(S==null?void 0:S.ticket)===m.ticket?{...S,status:"expired"}:S),A({tone:"warning",message:"Lark QR code expired. Generate a new QR code and scan again."});return}try{const S=await st(x.name,m.ticket,te((T=U.current)==null?void 0:T.draft));if(t)return;if(E(Q=>{var K;return(Q==null?void 0:Q.ticket)===m.ticket?{...Q,status:S.status,botName:(K=S.credentials)==null?void 0:K.botName}:Q}),S.status==="confirmed"&&S.credentials){await we(S.credentials);return}if(S.status==="expired"){A({tone:"warning",message:"Lark QR code expired. Generate a new QR code and scan again."});return}V(R)}catch(S){if(t)return;A({tone:"error",message:S instanceof Error?S.message:String(S)})}}};return V(Math.min(2e3,R)),()=>{t=!0,a&&window.clearTimeout(a)}},[m==null?void 0:m.createdAt,m==null?void 0:m.expiresIn,m==null?void 0:m.interval,m==null?void 0:m.status,m==null?void 0:m.ticket,l==null?void 0:l.draft.type,we,x==null?void 0:x.name]);const Mt=async()=>{if(h){re("config");try{const t=await Ce(h);j(F(t.parsed||h)),b(F(t.parsed||h)),A({tone:"success",message:"Project changes saved."}),await G()}catch(t){A({tone:"error",message:t instanceof Error?t.message:String(t)})}finally{re("")}}};return he&&!h?r.jsx("div",{className:"flex h-64 items-center justify-center text-sm text-slate-400 animate-pulse",children:"Loading workspace..."}):r.jsxs("div",{className:"space-y-6 animate-fade-in",children:[r.jsx(_t,{title:"工作区",description:"创建项目,配置 Agent、工作目录、Provider 和平台接入。"}),O?r.jsx("div",{role:"status",className:`rounded-xl border px-4 py-3 text-sm ${nn(O.tone)}`,children:O.message}):null,de?r.jsx("div",{className:"rounded-xl border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-700 dark:border-amber-400/20 dark:bg-amber-500/10 dark:text-amber-200",children:"You have unsaved project changes."}):null,r.jsxs("div",{className:"grid min-w-0 grid-cols-1 gap-4 lg:grid-cols-[340px_minmax(0,1fr)]",children:[r.jsx(tt,{title:"项目",actions:r.jsxs(I,{size:"sm",onClick:ve,children:[r.jsx(ue,{size:14})," 新建项目"]}),className:"lg:self-start",children:H.length===0?r.jsx(ye,{message:"还没有项目。"}):r.jsx("div",{className:"space-y-2",children:H.map((t,a)=>{var g,v;return r.jsxs("div",{className:`flex items-center justify-between gap-2 rounded-xl border px-3 py-2 transition-colors ${a===C?"border-accent/30 bg-accent/10":"border-black/10 hover:bg-black/[0.04] dark:border-white/[0.08] dark:hover:bg-white/[0.06]"}`,children:[r.jsxs("button",{type:"button",onClick:()=>{e(a),d(t.name?{project:t.name}:{})},className:"min-w-0 flex-1 text-left",children:[r.jsx("p",{className:"truncate text-sm font-medium text-slate-950 dark:text-white",children:t.name||`Project ${a+1}`}),r.jsxs("p",{className:"mt-0.5 truncate text-xs text-muted-foreground",children:[((g=t.agent)==null?void 0:g.type)||"unknown"," · ",tn(t)," · ",((v=t.platforms)==null?void 0:v.length)||0," platforms"]})]}),r.jsx(I,{variant:"ghost",size:"sm",onClick:()=>yt(a),"aria-label":`Remove ${t.name}`,children:r.jsx(Ne,{size:14})})]},`${t.name}-${a}`)})})}),r.jsx(tt,{title:(x==null?void 0:x.name)||"Project details",description:x?r.jsxs("span",{className:"break-all",children:[((Oe=x.agent)==null?void 0:Oe.type)||"unknown"," · ",String(((De=(Te=x.agent)==null?void 0:Te.options)==null?void 0:De.work_dir)||"No work directory")]}):void 0,children:x?r.jsxs("div",{className:"space-y-6",children:[r.jsx("div",{className:"flex gap-2 overflow-x-auto border-b border-black/10 pb-4 [scrollbar-width:none] dark:border-white/[0.08] [&::-webkit-scrollbar]:hidden sm:flex-wrap",children:[["basic","基本信息"],["providers","Provider"],["platforms","平台接入"]].map(([t,a])=>r.jsx("button",{type:"button",onClick:()=>n(t),className:`shrink-0 rounded-lg px-3 py-1.5 text-sm font-medium transition-colors ${s===t?"bg-accent text-white":"bg-black/[0.04] text-muted-foreground hover:bg-black/[0.07] hover:text-foreground dark:bg-white/[0.05] dark:hover:bg-white/[0.08]"}`,children:a},t))}),s==="basic"?r.jsxs("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[r.jsx(z,{label:"Project name",value:x.name,onChange:t=>B(a=>({...a,name:t.target.value}))}),r.jsxs(ge,{label:"Agent type",value:it(((ze=x.agent)==null?void 0:ze.type)||"",ke),onChange:t=>B(a=>{var v;const g=t.target.value===q?a.agent.type:t.target.value;return{...a,agent:{...a.agent,type:g,options:{...a.agent.options||{},model:lt(g,String(((v=a.agent.options)==null?void 0:v.model)||""))}}}}),children:[ke.map(t=>r.jsx("option",{value:t,children:t},t)),r.jsx("option",{value:q,children:"custom"})]}),r.jsx(z,{label:"Work directory",value:String(((Be=(Fe=x.agent)==null?void 0:Fe.options)==null?void 0:Be.work_dir)||""),onChange:t=>B(a=>({...a,agent:{...a.agent,options:{...a.agent.options||{},work_dir:t.target.value}}}))}),r.jsx(z,{label:"Default model",value:String((($e=(Ue=x.agent)==null?void 0:Ue.options)==null?void 0:$e.model)||""),onChange:t=>B(a=>({...a,agent:{...a.agent,options:{...a.agent.options||{},model:t.target.value}}})),placeholder:Ee((Qe=x.agent)==null?void 0:Qe.type)||"Use agent default model"})]}):null,s==="providers"?r.jsxs("section",{className:"space-y-3",children:[r.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[r.jsxs("div",{children:[r.jsx("h3",{className:"text-sm font-semibold text-slate-950 dark:text-white",children:"Providers"}),r.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Basic endpoint and default model only."})]}),r.jsxs(I,{size:"sm",variant:"secondary",onClick:()=>B(t=>({...t,agent:{...t.agent,providers:[...t.agent.providers||[],{name:`provider-${(t.agent.providers||[]).length+1}`}]}})),children:[r.jsx(ue,{size:14})," Provider"]})]}),(x.agent.providers||[]).length===0?r.jsxs("div",{className:"flex flex-col gap-3 rounded-xl border border-black/10 px-4 py-4 dark:border-white/[0.08] sm:flex-row sm:items-center sm:justify-between",children:[r.jsx("p",{className:"text-sm text-muted-foreground",children:"No providers configured."}),r.jsxs(I,{size:"sm",variant:"secondary",onClick:()=>B(t=>({...t,agent:{...t.agent,providers:[...t.agent.providers||[],{name:`provider-${(t.agent.providers||[]).length+1}`}]}})),children:[r.jsx(ue,{size:14})," Add provider"]})]}):r.jsx("div",{className:"space-y-3",children:(x.agent.providers||[]).map((t,a)=>r.jsx("div",{className:"rounded-xl border border-black/10 p-4 dark:border-white/[0.08]",children:r.jsxs("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:[r.jsxs(ge,{label:"Preset",value:Jt(t),onChange:g=>{g.target.value!==q&&J(a,v=>Zt(v,g.target.value))},children:[Ae.map(g=>r.jsx("option",{value:g.id,children:g.label},g.id)),r.jsx("option",{value:q,children:"custom"})]}),r.jsx(z,{label:"Name",value:t.name||"",onChange:g=>J(a,v=>({...v,name:g.target.value}))}),r.jsx(z,{label:"API key",type:"password",value:t.api_key||"",onChange:g=>J(a,v=>({...v,api_key:g.target.value}))}),r.jsx(z,{label:"Base URL",value:t.base_url||"",onChange:g=>J(a,v=>({...v,base_url:g.target.value}))}),r.jsx(z,{label:"Default model",value:t.model||"",onChange:g=>J(a,v=>({...v,model:g.target.value}))}),r.jsx("div",{className:"flex items-end",children:r.jsxs(I,{variant:"danger",size:"sm",onClick:()=>B(g=>{const v=[...g.agent.providers||[]];return v.splice(a,1),{...g,agent:{...g.agent,providers:v}}}),children:[r.jsx(Ne,{size:14})," Remove"]})})]})},`${t.name}-${a}`))})]}):null,s==="platforms"?r.jsxs("section",{className:"space-y-3",children:[r.jsxs("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[r.jsxs("div",{children:[r.jsx("h3",{className:"text-sm font-semibold text-slate-950 dark:text-white",children:"Platforms"}),r.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:"Configure each platform with its own required connection fields."})]}),r.jsxs(I,{size:"sm",variant:"secondary",onClick:()=>_e(null),children:[r.jsx(ue,{size:14})," Platform"]})]}),(x.platforms||[]).length===0?r.jsx(ye,{message:"No platforms configured."}):r.jsx("div",{className:"grid grid-cols-1 gap-3 md:grid-cols-2",children:(x.platforms||[]).map((t,a)=>r.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-black/10 p-3 dark:border-white/[0.08]",children:[r.jsxs("div",{className:"min-w-0",children:[r.jsx("p",{className:"truncate text-sm font-medium text-slate-950 dark:text-white",children:t.type}),r.jsx("p",{className:"mt-1 truncate text-xs text-muted-foreground",children:en(t)})]}),r.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[r.jsx(I,{variant:"secondary",size:"sm",onClick:()=>_e(a),"aria-label":`Configure ${t.type}`,children:r.jsx(At,{size:14})}),r.jsx(I,{variant:"danger",size:"sm",onClick:()=>B(g=>{const v=[...g.platforms||[]];return v.splice(a,1),{...g,platforms:v}}),children:r.jsx(Ne,{size:14})})]})]},`${t.type}-${a}`))})]}):null,r.jsx("div",{className:"flex flex-wrap gap-2 border-t border-black/10 pt-5 dark:border-white/[0.08]",children:r.jsxs(I,{className:"w-full sm:w-auto",onClick:()=>void Mt(),loading:se==="config",disabled:!de&&se!=="config",children:[r.jsx(rt,{size:14})," 保存更改"]})})]}):r.jsx(ye,{message:"选择或新建项目后开始配置。"})})]}),r.jsx(et,{open:!!o,onClose:()=>u(null),title:"新建项目",children:o?r.jsxs("div",{className:"space-y-4",children:[r.jsx(z,{label:"Project name",value:o.name,onChange:t=>ae({name:t.target.value}),autoFocus:!0}),r.jsx(ge,{label:"Agent type",value:o.agentType,onChange:t=>{const a=t.target.value;ae({agentType:a})},children:ke.map(t=>r.jsx("option",{value:t,children:t},t))}),r.jsx(z,{label:"Work directory",value:o.workDir,onChange:t=>ae({workDir:t.target.value}),placeholder:"/Users/yinyin/code/my-project"}),r.jsx(z,{label:"Default model",value:o.model,onChange:t=>ae({model:t.target.value}),placeholder:Ee(o.agentType)||"Use agent default model"}),r.jsxs("div",{className:"flex flex-col-reverse gap-2 pt-2 sm:flex-row sm:justify-end",children:[r.jsx(I,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>u(null),children:"Cancel"}),r.jsxs(I,{className:"w-full sm:w-auto",onClick:bt,children:[r.jsx(ue,{size:14})," 新建项目"]})]})]}):null}),r.jsx(et,{open:!!l,onClose:()=>{f(null),w(null),E(null)},title:(l==null?void 0:l.index)===null?"Add platform":"Configure platform",children:l?r.jsxs("div",{className:"space-y-4",children:[r.jsxs(ge,{label:"Platform",value:it(l.draft.type,[...Se]),onChange:t=>{const a=t.target.value===q?l.draft.type:t.target.value;Z(()=>Me(a)),w(null),E(null)},children:[Se.map(t=>r.jsx("option",{value:t,children:t},t)),Ft.filter(t=>!Se.includes(t)).map(t=>r.jsx("option",{value:t,children:t},t)),r.jsx("option",{value:q,children:"custom"})]}),l.draft.type==="lark"?r.jsxs("div",{className:"grid grid-cols-1 gap-3",children:[m!=null&&m.qrCodeUrl?r.jsxs("div",{className:"flex flex-col items-center gap-3 rounded-lg border border-black/10 p-4 dark:border-white/[0.08]",children:[r.jsx("div",{className:"rounded-lg border border-black/10 bg-white p-3",children:r.jsx(Re,{value:m.qrCodeUrl,size:176,includeMargin:!0})}),r.jsx(nt,{tone:m.status==="confirmed"?"success":m.status==="expired"?"danger":"warning",children:m.botName||m.status||"wait"})]}):null,r.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:flex-wrap",children:[r.jsxs(I,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>void Et(),loading:D,children:[r.jsx(at,{size:14})," Generate QR"]}),r.jsx(I,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>void St(),loading:D,disabled:!(m!=null&&m.ticket),children:"Check status"})]}),r.jsx(z,{label:"App ID",value:String(((Ge=l.draft.options)==null?void 0:Ge.app_id)||""),onChange:t=>Z(a=>({...a,options:{...a.options||{},app_id:t.target.value}})),placeholder:"cli_xxx"}),r.jsx(z,{label:"App Secret",type:"password",value:String(((He=l.draft.options)==null?void 0:He.app_secret)||""),onChange:t=>Z(a=>({...a,options:{...a.options||{},app_secret:t.target.value}}))}),r.jsx(z,{label:"Verification token",value:String(((Ye=l.draft.options)==null?void 0:Ye.verification_token)||""),onChange:t=>Z(a=>({...a,options:{...a.options||{},verification_token:t.target.value}}))}),r.jsx(z,{label:"Encrypt key",value:String(((We=l.draft.options)==null?void 0:We.encrypt_key)||""),onChange:t=>Z(a=>({...a,options:{...a.options||{},encrypt_key:t.target.value}}))}),r.jsxs("label",{className:"flex items-center gap-3 text-sm text-foreground",children:[r.jsx("input",{type:"checkbox",checked:((Ve=l.draft.options)==null?void 0:Ve.auto_approve)===!0,onChange:t=>Z(a=>({...a,options:{...a.options||{},auto_approve:t.target.checked}}))}),"Auto-approve Lark users"]}),r.jsxs("label",{className:"flex items-center gap-3 text-sm text-foreground",children:[r.jsx("input",{type:"checkbox",checked:((Ke=l.draft.options)==null?void 0:Ke.card_actions)===!0,onChange:t=>Z(a=>({...a,options:{...a.options||{},card_actions:t.target.checked}}))}),"Enable Lark card action buttons"]})]}):null,l.draft.type==="weixin"?r.jsxs("div",{className:"space-y-3",children:[r.jsx("div",{className:"rounded-lg border border-black/10 bg-black/[0.03] px-3 py-3 text-sm text-muted-foreground dark:border-white/[0.08] dark:bg-white/[0.04]",children:"WeChat does not need an App ID or secret. Save this platform, then generate a QR code and scan it to finish login."}),p!=null&&p.qrCodeUrl?r.jsxs("div",{className:"flex flex-col items-center gap-3 rounded-lg border border-black/10 p-4 dark:border-white/[0.08]",children:[r.jsx("div",{className:"rounded-lg border border-black/10 bg-white p-3",children:r.jsx(Re,{value:p.qrCodeUrl,size:176,includeMargin:!0})}),r.jsx(nt,{tone:p.status==="confirmed"?"success":p.status==="expired"?"danger":"warning",children:p.status||"wait"})]}):null,r.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:flex-wrap",children:[r.jsxs(I,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>void kt(),loading:L,children:[r.jsx(at,{size:14})," Generate QR"]}),r.jsx(I,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>void Nt(),loading:L,disabled:!(p!=null&&p.ticket),children:"Check status"})]})]}):null,l.draft.type!=="lark"&&l.draft.type!=="weixin"?r.jsx("div",{className:"rounded-lg border border-black/10 bg-black/[0.03] px-3 py-3 text-sm text-muted-foreground dark:border-white/[0.08] dark:bg-white/[0.04]",children:"This platform has no daily UI fields yet. Existing advanced options are preserved in config."}):null,r.jsxs("div",{className:"flex flex-col-reverse gap-2 border-t border-black/10 pt-4 dark:border-white/[0.08] sm:flex-row sm:justify-end",children:[r.jsx(I,{className:"w-full sm:w-auto",variant:"secondary",onClick:()=>f(null),children:"Cancel"}),r.jsxs(I,{className:"w-full sm:w-auto",onClick:Ct,children:[r.jsx(rt,{size:14})," Apply"]})]})]}):null})]})}export{wn as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a1 as l,s as d,a2 as c,a3 as u,a4 as h,a5 as C,a6 as k,a7 as w,a8 as p,a9 as v,aa as S,ab as m,ac as L,ad as y,ae as P,af as f,ag as R,ah as b,ai as G,aj as Q,ak as B,al as A,am as E,an as F,ao as I,ap as W,aq as D,ar as K,as as T,at as x,au as j,av as U,aw as $,o as i,m as z,ax as q,ay as _,az as M,aA as H,aB as J,aC as N,aD as O,aE as V,i as X}from"./index-HPNb1zfx.js";function s(){if(!window.desktop)throw new Error("Desktop APIs are unavailable in the browser build");return window.desktop}const Y={getRuntimeStatus:()=>s().getRuntimeStatus(),startService:()=>s().startService(),stopService:()=>s().stopService(),restartService:()=>s().restartService(),getLogs:e=>s().getLogs(e),listInstalledAgentRuntimes:()=>x().then(e=>e.runtimes),refreshInstalledAgentRuntimes:()=>T().then(e=>e.runtimes),readConfigFile:()=>s().readConfigFile(),saveRawConfigFile:e=>s().saveRawConfigFile(e),saveStructuredConfigFile:e=>s().saveStructuredConfigFile(e),getThreadKnowledgeBases:(e,a)=>s().getThreadKnowledgeBases(e,a),updateThreadKnowledgeBases:(e,a,t)=>s().updateThreadKnowledgeBases(e,a,t),deleteThreadKnowledgeBases:(e,a)=>s().deleteThreadKnowledgeBases(e,a),saveSettings:e=>s().saveSettings(e),getCapabilitySnapshot:()=>K(),getPluginDiagnostics:()=>D(),listChannelGateways:e=>W(e).then(a=>a.gateways),getChannelGatewayStatus:(e,a,t)=>I(e,a,t),testChannelConnection:(e,a,t)=>F(e,a,t),enableChannelGateway:(e,a,t)=>E(e,a,t),disableChannelGateway:(e,a,t)=>A(e,a,t),listChannelPendingPairings:(e,a)=>B(e,a).then(t=>t.pairings),approveChannelPairing:(e,a)=>Q(e,a),rejectChannelPairing:(e,a)=>G(e,a),listChannelAuthorizedUsers:(e,a)=>b(e,a).then(t=>t.users),getChannelQrCode:(e,a,t)=>R(e,a,t),checkChannelQrCodeStatus:(e,a,t,r)=>f(e,a,t,r),getWeixinQrCode:(e,a)=>P(e,a),checkWeixinQrCodeStatus:(e,a,t)=>y(e,a,t),getLarkQrCode:(e,a)=>L(e,a),checkLarkQrCodeStatus:(e,a,t)=>m(e,a,t),listLarkGateways:()=>S().then(e=>e.gateways),getLarkGatewayStatus:(e,a)=>v(e,a),testLarkConnection:(e,a)=>p(e,a),enableLarkGateway:(e,a)=>w(e,a),disableLarkGateway:(e,a)=>k(e,a),listLarkPendingPairings:e=>C(e).then(a=>a.pairings),approveLarkPairing:e=>h(e),rejectLarkPairing:e=>u(e),listLarkAuthorizedUsers:e=>c(e).then(a=>a.users),probeWorkspaceStreaming:e=>s().probeWorkspaceStreaming(e),onRuntimeEvent:e=>s().onRuntimeEvent(e),onRuntimeDetectionEvent:e=>d(a=>{(a.type.startsWith("runtime.detect.")||a.type==="runtime.status.changed")&&e(a)}),onBridgeEvent:e=>l(e)},o={getRuntimeStatus:()=>V(),startService:()=>O(),stopService:()=>N(),restartService:()=>J(),getLogs:e=>H(e),listInstalledAgentRuntimes:()=>x().then(e=>e.runtimes),refreshInstalledAgentRuntimes:()=>T().then(e=>e.runtimes),readConfigFile:()=>M(),saveRawConfigFile:e=>_(e),saveStructuredConfigFile:e=>q(e),getThreadKnowledgeBases:(e,a)=>z(a).then(t=>t.selectedKnowledgeBaseIds||[]),updateThreadKnowledgeBases:(e,a,t)=>i(a,t).then(r=>r.knowledgeBaseIds),deleteThreadKnowledgeBases:(e,a)=>i(a,[]).then(()=>({deleted:!0})),saveSettings:e=>$(e),getCapabilitySnapshot:()=>K(),getPluginDiagnostics:()=>D(),listChannelGateways:e=>W(e).then(a=>a.gateways),getChannelGatewayStatus:(e,a,t)=>I(e,a,t),testChannelConnection:(e,a,t)=>F(e,a,t),enableChannelGateway:(e,a,t)=>E(e,a,t),disableChannelGateway:(e,a,t)=>A(e,a,t),listChannelPendingPairings:(e,a)=>B(e,a).then(t=>t.pairings),approveChannelPairing:(e,a)=>Q(e,a),rejectChannelPairing:(e,a)=>G(e,a),listChannelAuthorizedUsers:(e,a)=>b(e,a).then(t=>t.users),getChannelQrCode:(e,a,t)=>R(e,a,t),checkChannelQrCodeStatus:(e,a,t,r)=>f(e,a,t,r),getWeixinQrCode:(e,a)=>P(e,a),checkWeixinQrCodeStatus:(e,a,t)=>y(e,a,t),getLarkQrCode:(e,a)=>L(e,a),checkLarkQrCodeStatus:(e,a,t)=>m(e,a,t),listLarkGateways:()=>S().then(e=>e.gateways),getLarkGatewayStatus:(e,a)=>v(e,a),testLarkConnection:(e,a)=>p(e,a),enableLarkGateway:(e,a)=>w(e,a),disableLarkGateway:(e,a)=>k(e,a),listLarkPendingPairings:e=>C(e).then(a=>a.pairings),approveLarkPairing:e=>h(e),rejectLarkPairing:e=>u(e),listLarkAuthorizedUsers:e=>c(e).then(a=>a.users),probeWorkspaceStreaming:e=>U(e),onRuntimeEvent:e=>j(e),onRuntimeDetectionEvent:e=>d(a=>{(a.type.startsWith("runtime.detect.")||a.type==="runtime.status.changed")&&e(a)}),onBridgeEvent:e=>l(e)};let g=null;function Z(e){return e==="electron"&&window.desktop?Y:o}function n(){const e=g||Z(X());if(!e)throw new Error("Managed desktop APIs are unavailable in this build");return g=e,e}const ae=()=>n().getRuntimeStatus(),te=()=>n().startService(),ne=()=>n().listInstalledAgentRuntimes(),se=()=>n().refreshInstalledAgentRuntimes(),re=()=>n().readConfigFile(),ie=e=>n().saveStructuredConfigFile(e),oe=(e,a,t)=>n().updateThreadKnowledgeBases(e,a,t),ge=e=>n().saveSettings(e),le=()=>n().getPluginDiagnostics(),de=(e,a)=>n().getWeixinQrCode(e,a),ce=(e,a,t)=>n().checkWeixinQrCodeStatus(e,a,t),ue=(e,a)=>n().getLarkQrCode(e,a),he=(e,a,t)=>n().checkLarkQrCodeStatus(e,a,t),Ce=(e,a)=>n().testLarkConnection(e,a),ke=(e,a)=>n().enableLarkGateway(e,a),we=e=>n().onRuntimeEvent(e),pe=e=>n().onRuntimeDetectionEvent(e),ve=e=>n().onBridgeEvent(e);export{pe as a,ve as b,re as c,ie as d,ke as e,de as f,ae as g,ue as h,ce as i,he as j,le as k,ne as l,ge as m,we as o,se as r,te as s,Ce as t,oe as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e={dashboard:"Dashboard",chat:"Chat",chatDesktop:"Desktop Chat",chatWeb:"Chat",workspace:"Workspace",knowledge:"Knowledge",projects:"Projects",sessions:"Sessions",cron:"Cron",monitors:"Monitors",bridge:"Bridge",system:"System"},t={title:"Dashboard",version:"Version",uptime:"Uptime",platforms:"Platforms",projects:"Projects",bridgeAdapters:"Bridge adapters",noData:"No data available"},o={title:"Projects",name:"Name",agent:"Agent",platforms:"Platforms",sessions:"Sessions",heartbeat:"Heartbeat",settings:"Settings",quiet:"Quiet mode",language:"Language",adminFrom:"Admin from",disabledCommands:"Disabled commands",save:"Save",detail:"Details",noProjects:"No projects configured",tabs:{overview:"Overview",providers:"Providers",heartbeat:"Heartbeat",settings:"Settings"}},s={title:"Sessions",id:"ID",sessionKey:"Session key",name:"Name",platform:"Platform",active:"Active",createdAt:"Created at",history:"History",send:"Send",messageInput:"Message",delete:"Delete",noSessions:"No sessions",noMessages:"No messages yet",notLiveHint:"This chat target is offline right now, so replies are temporarily unavailable. When new activity arrives, sending will become available again.",offline:"offline",justNow:"just now",allProjects:"All projects",chat:"Chat",enterSession:"Open session",newChat:"New chat",selectProject:"Select a project",projectRequired:"Choose a project before starting a chat.",noAvailableChatTarget:"There is no conversation ready to chat in this project yet. Open an available session from the sessions view first.",noReadyChats:"There are no chat-ready sessions right now. Use the Sessions page to review history.",emptyProject:"This project does not have any sessions yet.",emptySelection:"Pick a project and start a new chat to begin.",activeChat:"Active chat",sendHint:"Messages will be sent to the selected project.",waitingForReply:"Waiting for the assistant reply…",preparingChat:"Preparing the chat…",pollTimeout:"The assistant did not finish responding before the refresh timeout.",createFailed:"Failed to create a new chat session.",loadFailed:"Failed to load the selected session.",sendFailed:"Failed to send the message.",sessionUnavailable:"This chat target is offline right now, so replies are temporarily unavailable. Try again after new activity arrives.",deleteConfirmTitle:"Delete session",deleteConfirmBody:"This removes the saved conversation history for the selected session.",renameTitle:"Rename session",renamePlaceholder:"Session name",loadSession:"Open",historyTitle:"Conversation history",availableNow:"Ready to chat",waitingActivation:"Waiting to become available"},a={title:"Providers",name:"Name",model:"Model",baseUrl:"Base URL",active:"Active",add:"Add provider",remove:"Remove",activate:"Activate",setModel:"Set model",models:"Models"},i={title:"Scheduled jobs",expression:"Cron expression",prompt:"Prompt",exec:"Execute",description:"Description",enabled:"Enabled",silent:"Silent",lastRun:"Last run",lastError:"Last error",add:"Add job",delete:"Delete",noJobs:"No scheduled jobs",workDir:"Working directory",sessionKey:"Session key",project:"Project"},n={title:"Monitors",prompt:"Prompt",condition:"Condition",cooldown:"Cooldown (minutes)",enabled:"Enabled",lastRun:"Last trigger",add:"Add monitor",edit:"Edit monitor",run:"Run now",noMonitors:"No monitors",monitorTitle:"Title"},r={title:"Heartbeat",status:"Status",interval:"Interval",paused:"Paused",running:"Running",pause:"Pause",resume:"Resume",trigger:"Run now",setInterval:"Set interval",runCount:"Run count",errorCount:"Error count",skippedBusy:"Skipped (busy)",lastRun:"Last run"},l={title:"Bridge",platform:"Platform",capabilities:"Capabilities",connectedAt:"Connected at",noAdapters:"No bridge adapters"},d={title:"System",config:"Configuration",logs:"Logs",restart:"Restart",reload:"Reload config",restartConfirm:"Restart the service? Active sessions may be interrupted.",reloadConfirm:"Reload configuration from disk?",level:"Log level",limit:"Line limit"},c={title:"AgentDock",subtitle:"Connect to your AgentDock instance",token:"API token",serverUrl:"Server URL",connect:"Connect",invalidToken:"Invalid or expired token",logout:"Log out"},m={loading:"Loading…",error:"Error",success:"Success",confirm:"Confirm",cancel:"Cancel",save:"Save",delete:"Delete",back:"Back",refresh:"Refresh",search:"Search",noData:"No data",actions:"Actions",viewAll:"View all",optional:"optional",confirmDelete:"Are you sure you want to delete this?"},h={light:"Light",dark:"Dark",system:"System"},p={nav:e,dashboard:t,projects:o,sessions:s,providers:a,cron:i,monitors:n,heartbeat:r,bridge:l,system:d,login:c,common:m,theme:h};export{l as bridge,m as common,i as cron,t as dashboard,p as default,r as heartbeat,c as login,n as monitors,e as nav,o as projects,a as providers,s as sessions,d as system,h as theme};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e={dashboard:"Panel",chat:"Chat",chatDesktop:"Chat de escritorio",chatWeb:"Chat",workspace:"Espacio de trabajo",knowledge:"Conocimiento",projects:"Proyectos",sessions:"Sesiones",cron:"Cron",bridge:"Puente",system:"Sistema"},a={title:"Panel",version:"Versión",uptime:"Tiempo activo",platforms:"Plataformas",projects:"Proyectos",bridgeAdapters:"Adaptadores de puente",noData:"No hay datos disponibles"},o={title:"Proyectos",name:"Nombre",agent:"Agente",platforms:"Plataformas",sessions:"Sesiones",heartbeat:"Latido",settings:"Ajustes",quiet:"Modo silencioso",language:"Idioma",adminFrom:"Administración desde",disabledCommands:"Comandos deshabilitados",save:"Guardar",detail:"Detalles",noProjects:"No hay proyectos configurados",tabs:{overview:"Resumen",providers:"Proveedores",heartbeat:"Latido",settings:"Ajustes"}},s={title:"Sesiones",id:"ID",sessionKey:"Clave de sesión",name:"Nombre",platform:"Plataforma",active:"Activa",createdAt:"Creada el",history:"Historial",send:"Enviar",messageInput:"Mensaje",delete:"Eliminar",noSessions:"No hay sesiones",noMessages:"Sin mensajes aún",notLiveHint:"Este destino de chat está desconectado en este momento, por lo que las respuestas están temporalmente deshabilitadas. Cuando llegue nueva actividad, el envío volverá a estar disponible.",offline:"sin conexión",justNow:"ahora",allProjects:"Todos los proyectos",chat:"Chat",enterSession:"Abrir sesión",newChat:"Nuevo chat",selectProject:"Seleccionar proyecto",projectRequired:"Elija un proyecto antes de iniciar un chat.",noAvailableChatTarget:"Este proyecto todavía no tiene una conversación lista para chatear. Abra primero una sesión disponible desde la vista de sesiones.",noReadyChats:"No hay sesiones listas para chatear en este momento. Use la página de sesiones para revisar el historial.",emptyProject:"Este proyecto todavía no tiene sesiones.",emptySelection:"Seleccione un proyecto y empiece un chat nuevo.",activeChat:"Chat activo",sendHint:"Los mensajes se enviarán al proyecto seleccionado.",waitingForReply:"Esperando la respuesta del asistente…",preparingChat:"Preparando el chat…",pollTimeout:"El asistente no terminó de responder antes del tiempo límite.",createFailed:"No se pudo crear una nueva sesión de chat.",loadFailed:"No se pudo cargar la sesión seleccionada.",sendFailed:"No se pudo enviar el mensaje.",sessionUnavailable:"Este destino de chat está desconectado en este momento, por lo que las respuestas están temporalmente deshabilitadas. Inténtelo de nuevo cuando llegue nueva actividad.",deleteConfirmTitle:"Eliminar sesión",deleteConfirmBody:"Esto elimina el historial guardado de la conversación de la sesión seleccionada.",renameTitle:"Renombrar sesión",renamePlaceholder:"Nombre de la sesión",loadSession:"Abrir",historyTitle:"Historial de conversación",availableNow:"Disponible para chatear",waitingActivation:"Esperando disponibilidad"},t={title:"Proveedores",name:"Nombre",model:"Modelo",baseUrl:"URL base",active:"Activo",add:"Añadir proveedor",remove:"Quitar",activate:"Activar",setModel:"Establecer modelo",models:"Modelos disponibles"},i={title:"Tareas programadas",expression:"Expresión cron",prompt:"Indicación",exec:"Ejecutar",description:"Descripción",enabled:"Habilitada",silent:"Silenciosa",lastRun:"Última ejecución",lastError:"Último error",add:"Añadir tarea",delete:"Eliminar",noJobs:"No hay tareas programadas",workDir:"Directorio de trabajo",sessionKey:"Clave de sesión",project:"Proyecto"},n={title:"Latido",status:"Estado",interval:"Intervalo",paused:"En pausa",running:"En ejecución",pause:"Pausar",resume:"Reanudar",trigger:"Ejecutar ahora",setInterval:"Establecer intervalo",runCount:"Ejecuciones",errorCount:"Errores",skippedBusy:"Omitida (ocupado)",lastRun:"Última ejecución"},r={title:"Puente",platform:"Plataforma",capabilities:"Capacidades",connectedAt:"Conectada el",noAdapters:"No hay adaptadores de puente"},d={title:"Sistema",config:"Configuración",logs:"Registros",restart:"Reiniciar",reload:"Recargar configuración",restartConfirm:"¿Reiniciar el servicio? Las sesiones activas pueden interrumpirse.",reloadConfirm:"¿Recargar la configuración desde el disco?",level:"Nivel de registro",limit:"Límite de líneas"},l={title:"AgentDock",subtitle:"Conéctese a su instancia de AgentDock",token:"Token de API",serverUrl:"URL del servidor",connect:"Conectar",invalidToken:"Token no válido o caducado",logout:"Cerrar sesión"},c={loading:"Cargando…",error:"Error",success:"Correcto",confirm:"Confirmar",cancel:"Cancelar",save:"Guardar",delete:"Eliminar",back:"Volver",refresh:"Actualizar",search:"Buscar",noData:"Sin datos",actions:"Acciones",viewAll:"Ver todo",optional:"opcional",confirmDelete:"¿Seguro que desea eliminar esto?"},m={light:"Claro",dark:"Oscuro",system:"Sistema"},p={nav:e,dashboard:a,projects:o,sessions:s,providers:t,cron:i,heartbeat:n,bridge:r,system:d,login:l,common:c,theme:m};export{r as bridge,c as common,i as cron,a as dashboard,p as default,n as heartbeat,l as login,e as nav,o as projects,t as providers,s as sessions,d as system,m as theme};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
|
|
2
|
-
Theme: GitHub
|
|
3
|
-
Description: Light theme as seen on github.com
|
|
4
|
-
Author: github.com
|
|
5
|
-
Maintainer: @Hirse
|
|
6
|
-
Updated: 2021-05-15
|
|
7
|
-
|
|
8
|
-
Outdated base version: https://github.com/primer/github-syntax-light
|
|
9
|
-
Current colors taken from GitHub's CSS
|
|
10
|
-
*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
|
|
11
|
-
*/*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 240 20% 97%;--foreground: 240 3% 12%;--card: 0 0% 100%;--card-foreground: 240 3% 12%;--popover: 0 0% 100%;--popover-foreground: 240 3% 12%;--primary: 211 100% 50%;--primary-foreground: 0 0% 100%;--secondary: 240 11% 93%;--secondary-foreground: 240 4% 20%;--muted: 240 10% 94%;--muted-foreground: 240 4% 44%;--accent: 211 100% 50%;--accent-foreground: 0 0% 100%;--accent-dim: 211 92% 43%;--destructive: 0 72% 51%;--destructive-foreground: 0 0% 100%;--border: 240 6% 85%;--input: 240 6% 85%;--ring: 211 100% 50%;--radius: .625rem}.dark{--background: 240 4% 9%;--foreground: 240 20% 96%;--card: 240 4% 12%;--card-foreground: 240 20% 96%;--popover: 240 4% 12%;--popover-foreground: 240 20% 96%;--primary: 211 100% 60%;--primary-foreground: 0 0% 100%;--secondary: 240 4% 16%;--secondary-foreground: 240 20% 96%;--muted: 240 4% 16%;--muted-foreground: 240 5% 68%;--accent: 211 100% 60%;--accent-foreground: 0 0% 100%;--accent-dim: 211 90% 55%;--destructive: 0 63% 31%;--destructive-foreground: 0 0% 98%;--border: 240 4% 22%;--input: 240 4% 22%;--ring: 211 100% 60%}*{border-color:hsl(var(--border))}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,SF Pro Display,Inter,Segoe UI,sans-serif;background:radial-gradient(circle at 16% 0%,rgba(0,122,255,.08),transparent 34%),linear-gradient(135deg,#ffffffe0,#f2f2f7b8);color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.dark body{background:radial-gradient(circle at 16% 0%,rgba(10,132,255,.12),transparent 34%),linear-gradient(135deg,#1c1c1eeb,#0f0f11c7)}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.25em}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){display:block;margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:500;font-family:inherit;color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows),0 3px 0 var(--tw-prose-kbd-shadows);font-size:.875em;border-radius:.3125rem;padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;padding-inline-start:.375em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-inline-end:1.1428571em;padding-bottom:.8571429em;padding-inline-start:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){width:100%;table-layout:auto;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose{--tw-prose-body: #374151;--tw-prose-headings: #111827;--tw-prose-lead: #4b5563;--tw-prose-links: #111827;--tw-prose-bold: #111827;--tw-prose-counters: #6b7280;--tw-prose-bullets: #d1d5db;--tw-prose-hr: #e5e7eb;--tw-prose-quotes: #111827;--tw-prose-quote-borders: #e5e7eb;--tw-prose-captions: #6b7280;--tw-prose-kbd: #111827;--tw-prose-kbd-shadows: rgb(17 24 39 / 10%);--tw-prose-code: #111827;--tw-prose-pre-code: #e5e7eb;--tw-prose-pre-bg: #1f2937;--tw-prose-th-borders: #d1d5db;--tw-prose-td-borders: #e5e7eb;--tw-prose-invert-body: #d1d5db;--tw-prose-invert-headings: #fff;--tw-prose-invert-lead: #9ca3af;--tw-prose-invert-links: #fff;--tw-prose-invert-bold: #fff;--tw-prose-invert-counters: #9ca3af;--tw-prose-invert-bullets: #4b5563;--tw-prose-invert-hr: #374151;--tw-prose-invert-quotes: #f3f4f6;--tw-prose-invert-quote-borders: #374151;--tw-prose-invert-captions: #9ca3af;--tw-prose-invert-kbd: #fff;--tw-prose-invert-kbd-shadows: rgb(255 255 255 / 10%);--tw-prose-invert-code: #fff;--tw-prose-invert-pre-code: #d1d5db;--tw-prose-invert-pre-bg: rgb(0 0 0 / 50%);--tw-prose-invert-th-borders: #4b5563;--tw-prose-invert-td-borders: #374151;font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.5714286em;padding-inline-end:.5714286em;padding-bottom:.5714286em;padding-inline-start:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-top:.8888889em;margin-bottom:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.3333333em;margin-bottom:1.3333333em;padding-inline-start:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:2.1428571em;margin-top:0;margin-bottom:.8em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.4285714em;margin-top:1.6em;margin-bottom:.8em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:1.2857143em;margin-top:1.5555556em;margin-bottom:.4444444em;line-height:1.5555556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.4285714em;margin-bottom:.5714286em;line-height:1.4285714}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;border-radius:.3125rem;padding-top:.1428571em;padding-inline-end:.3571429em;padding-bottom:.1428571em;padding-inline-start:.3571429em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.6666667;margin-top:1.6666667em;margin-bottom:1.6666667em;border-radius:.25rem;padding-top:.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em;padding-inline-start:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;margin-bottom:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.4285714em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5714286em;margin-bottom:.5714286em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em;margin-bottom:1.1428571em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.2857143em;padding-inline-start:1.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.8571429em;margin-bottom:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.6666667em;padding-inline-end:1em;padding-bottom:.6666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.7142857em;margin-bottom:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-x-4{left:1rem;right:1rem}.bottom-0{bottom:0}.bottom-3{bottom:.75rem}.bottom-full{bottom:100%}.left-0{left:0}.left-2{left:.5rem}.left-3{left:.75rem}.right-0{right:0}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:.5rem}.top-4{top:1rem}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.order-3{order:3}.col-span-2{grid-column:span 2 / span 2}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-top:1rem;margin-bottom:1rem}.-mt-0\.5{margin-top:-.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-2\.5{margin-bottom:.625rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[100dvh\]{height:100dvh}.h-\[5\.25rem\]{height:5.25rem}.h-\[calc\(100vh-8rem\)\]{height:calc(100vh - 8rem)}.h-full{height:100%}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-96{max-height:24rem}.max-h-\[65vh\]{max-height:65vh}.max-h-\[70dvh\]{max-height:70dvh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.min-h-0{min-height:0px}.min-h-20{min-height:5rem}.min-h-64{min-height:16rem}.min-h-\[104px\]{min-height:104px}.min-h-\[118px\]{min-height:118px}.min-h-\[18rem\]{min-height:18rem}.min-h-\[2\.5rem\]{min-height:2.5rem}.min-h-\[32rem\]{min-height:32rem}.min-h-\[72px\]{min-height:72px}.min-h-\[88px\]{min-height:88px}.min-h-\[calc\(100vh-8rem\)\]{min-height:calc(100vh - 8rem)}.min-h-screen{min-height:100vh}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-3\.5{width:.875rem}.w-36{width:9rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-auto{width:auto}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-11{min-width:2.75rem}.min-w-48{min-width:12rem}.min-w-\[260px\]{min-width:260px}.min-w-\[4\.5rem\]{min-width:4.5rem}.min-w-\[8rem\]{min-width:8rem}.min-w-full{min-width:100%}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[4\.25rem\]{max-width:4.25rem}.max-w-\[70\%\]{max-width:70%}.max-w-\[85\%\]{max-width:85%}.max-w-\[calc\(100\%-2\.25rem\)\]{max-width:calc(100% - 2.25rem)}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-fade-in{animation:fadeIn .4s ease}@keyframes floatIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-float-in{animation:floatIn .4s ease}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[minmax\(0\,1\.8fr\)_120px_120px_160px_60px\]{grid-template-columns:minmax(0,1.8fr) 120px 120px 160px 60px}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-black\/\[0\.08\]>:not([hidden])~:not([hidden]){border-color:#00000014}.divide-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[20px\]{border-radius:20px}.rounded-\[22px\]{border-radius:22px}.rounded-\[24px\]{border-radius:24px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-bl-lg{border-bottom-left-radius:var(--radius)}.rounded-bl-md{border-bottom-left-radius:calc(var(--radius) - 2px)}.rounded-br-lg{border-bottom-right-radius:var(--radius)}.rounded-br-md{border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-tl-lg{border-top-left-radius:var(--radius)}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-accent\/30{border-color:hsl(var(--accent) / .3)}.border-accent\/45{border-color:hsl(var(--accent) / .45)}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-200\/80{border-color:#fde68acc}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-400\/20{border-color:#fbbf2433}.border-amber-500\/20{border-color:#f59e0b33}.border-black\/10{border-color:#0000001a}.border-black\/\[0\.08\]{border-color:#00000014}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-destructive\/20{border-color:hsl(var(--destructive) / .2)}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-200\/60{border-color:#e5e7eb99}.border-gray-200\/70{border-color:#e5e7ebb3}.border-gray-200\/80{border-color:#e5e7ebcc}.border-gray-200\/90{border-color:#e5e7ebe6}.border-gray-300\/90{border-color:#d1d5dbe6}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/25{border-color:hsl(var(--primary) / .25)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/45{border-color:hsl(var(--primary) / .45)}.border-red-100{--tw-border-opacity: 1;border-color:rgb(254 226 226 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-500\/20{border-color:#ef444433}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-200\/80{border-color:#e2e8f0cc}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-violet-200{--tw-border-opacity: 1;border-color:rgb(221 214 254 / var(--tw-border-opacity, 1))}.border-white\/55{border-color:#ffffff8c}.bg-\[\#f5f5f7\]{--tw-bg-opacity: 1;background-color:rgb(245 245 247 / var(--tw-bg-opacity, 1))}.bg-\[\#fafafa\]{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1))}.bg-accent{background-color:hsl(var(--accent))}.bg-accent\/10{background-color:hsl(var(--accent) / .1)}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-50\/90{background-color:#fffbebe6}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-background{background-color:hsl(var(--background))}.bg-background\/45{background-color:hsl(var(--background) / .45)}.bg-background\/60{background-color:hsl(var(--background) / .6)}.bg-black\/50{background-color:#00000080}.bg-black\/\[0\.03\]{background-color:#00000008}.bg-black\/\[0\.045\]{background-color:#0000000b}.bg-black\/\[0\.04\]{background-color:#0000000a}.bg-black\/\[0\.05\]{background-color:#0000000d}.bg-black\/\[0\.07\]{background-color:#00000012}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-card{background-color:hsl(var(--card))}.bg-card\/70{background-color:hsl(var(--card) / .7)}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-emerald-500\/10{background-color:#10b9811a}.bg-foreground\/15{background-color:hsl(var(--foreground) / .15)}.bg-fuchsia-500{--tw-bg-opacity: 1;background-color:rgb(217 70 239 / var(--tw-bg-opacity, 1))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.bg-gray-200\/80{background-color:#e5e7ebcc}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-50\/80{background-color:#f9fafbcc}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-50\/80{background-color:#fef2f2cc}.bg-red-500\/10{background-color:#ef44441a}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-100\/80{background-color:#f1f5f9cc}.bg-slate-50\/80{background-color:#f8fafccc}.bg-slate-50\/95{background-color:#f8fafcf2}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-violet-50{--tw-bg-opacity: 1;background-color:rgb(245 243 255 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/50{background-color:#ffffff80}.bg-white\/70{background-color:#ffffffb3}.bg-white\/85{background-color:#ffffffd9}.bg-white\/90{background-color:#ffffffe6}.bg-\[linear-gradient\(180deg\,\#fbfcfe_0\%\,\#f5f7fb_100\%\)\]{background-image:linear-gradient(180deg,#fbfcfe,#f5f7fb)}.bg-\[linear-gradient\(180deg\,\#ffffff_0\%\,\#fbfcfe_100\%\)\]{background-image:linear-gradient(180deg,#fff,#fbfcfe)}.bg-\[linear-gradient\(180deg\,rgba\(255\,255\,255\,0\.55\)\,rgba\(255\,255\,255\,0\.18\)_48\%\,rgba\(255\,255\,255\,0\.08\)\)\]{background-image:linear-gradient(180deg,#ffffff8c,#ffffff2e 48%,#ffffff14)}.bg-\[radial-gradient\(circle_at_top\,hsl\(var\(--secondary\)\)_0\,hsl\(var\(--background\)\)_42\%\,hsl\(var\(--background\)\)_78\%\)\]{background-image:radial-gradient(circle at top,hsl(var(--secondary)) 0,hsl(var(--background)) 42%,hsl(var(--background)) 78%)}.fill-current{fill:currentColor}.fill-primary{fill:hsl(var(--primary))}.stroke-black\/10{stroke:#0000001a}.stroke-black\/70{stroke:#000000b3}.stroke-white{stroke:#fff}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-0{padding-left:0;padding-right:0}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-14{padding-bottom:3.5rem}.pb-16{padding-bottom:4rem}.pb-24{padding-bottom:6rem}.pb-4{padding-bottom:1rem}.pb-\[max\(env\(safe-area-inset-bottom\)\,0\.5rem\)\]{padding-bottom:max(env(safe-area-inset-bottom),.5rem)}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pr-\[4\.5rem\]{padding-right:4.5rem}.pt-0{padding-top:0}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-7{padding-top:1.75rem}.pt-8{padding-top:2rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[0\.875em\]{font-size:.875em}.text-\[1\.7rem\]{font-size:1.7rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[17px\]{font-size:17px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-\[1\.6\]{line-height:1.6}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[0\.08em\]{letter-spacing:.08em}.tracking-\[0\.12em\]{letter-spacing:.12em}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-accent{color:hsl(var(--accent))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-700\/80{color:#b45309cc}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-amber-950{--tw-text-opacity: 1;color:rgb(69 26 3 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-500{--tw-text-opacity: 1;color:rgb(16 185 129 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-inherit{color:inherit}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/45{color:hsl(var(--muted-foreground) / .45)}.text-muted-foreground\/75{color:hsl(var(--muted-foreground) / .75)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-pink-600{--tw-text-opacity: 1;color:rgb(219 39 119 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-violet-700{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_-12px_32px_rgba\(15\,23\,42\,0\.10\)\]{--tw-shadow: 0 -12px 32px rgba(15,23,42,.1);--tw-shadow-colored: 0 -12px 32px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_20px_-12px_rgba\(139\,92\,246\,0\.55\)\]{--tw-shadow: 0 0 20px -12px rgba(139,92,246,.55);--tw-shadow-colored: 0 0 20px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_20px_-6px_hsl\(var\(--primary\)\/0\.55\)\]{--tw-shadow: 0 0 20px -6px hsl(var(--primary)/.55);--tw-shadow-colored: 0 0 20px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_26px_rgba\(180\,83\,9\,0\.08\)\]{--tw-shadow: 0 10px 26px rgba(180,83,9,.08);--tw-shadow-colored: 0 10px 26px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(15\,23\,42\,0\.04\)\]{--tw-shadow: 0 10px 30px rgba(15,23,42,.04);--tw-shadow-colored: 0 10px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_12px_34px_rgba\(15\,23\,42\,0\.08\)\]{--tw-shadow: 0 12px 34px rgba(15,23,42,.08);--tw-shadow-colored: 0 12px 34px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_14px_34px_rgba\(0\,122\,255\,0\.12\)\]{--tw-shadow: 0 14px 34px rgba(0,122,255,.12);--tw-shadow-colored: 0 14px 34px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_16px_40px_rgba\(15\,23\,42\,0\.06\)\]{--tw-shadow: 0 16px 40px rgba(15,23,42,.06);--tw-shadow-colored: 0 16px 40px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_18px_40px_rgba\(0\,0\,0\,0\.12\)\]{--tw-shadow: 0 18px 40px rgba(0,0,0,.12);--tw-shadow-colored: 0 18px 40px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_1px_1px_rgba\(0\,0\,0\,0\.04\)\]{--tw-shadow: 0 1px 1px rgba(0,0,0,.04);--tw-shadow-colored: 0 1px 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_22px_50px_rgba\(15\,23\,42\,0\.12\)\]{--tw-shadow: 0 22px 50px rgba(15,23,42,.12);--tw-shadow-colored: 0 22px 50px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_6px_18px_rgba\(15\,23\,42\,0\.03\)\]{--tw-shadow: 0 6px 18px rgba(15,23,42,.03);--tw-shadow-colored: 0 6px 18px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_6px_18px_rgba\(15\,23\,42\,0\.04\)\]{--tw-shadow: 0 6px 18px rgba(15,23,42,.04);--tw-shadow-colored: 0 6px 18px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_8px_22px_rgba\(15\,23\,42\,0\.04\)\]{--tw-shadow: 0 8px 22px rgba(15,23,42,.04);--tw-shadow-colored: 0 8px 22px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_8px_24px_rgba\(15\,23\,42\,0\.05\)\]{--tw-shadow: 0 8px 24px rgba(15,23,42,.05);--tw-shadow-colored: 0 8px 24px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[inset_-1px_0_0_rgba\(255\,255\,255\,0\.36\)\]{--tw-shadow: inset -1px 0 0 rgba(255,255,255,.36);--tw-shadow-colored: inset -1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[inset_3px_0_0_0_rgba\(0\,122\,255\,0\.9\)\]{--tw-shadow: inset 3px 0 0 0 rgba(0,122,255,.9);--tw-shadow-colored: inset 3px 0 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-primary\/10{--tw-shadow-color: hsl(var(--primary) / .1);--tw-shadow: var(--tw-shadow-colored) }.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-accent\/25{--tw-ring-color: hsl(var(--accent) / .25) }.ring-accent\/30{--tw-ring-color: hsl(var(--accent) / .3) }.drop-shadow-\[0_14px_28px_rgba\(0\,122\,255\,0\.22\)\]{--tw-drop-shadow: drop-shadow(0 14px 28px rgba(0,122,255,.22));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-2xl{--tw-backdrop-blur: blur(40px);-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-\[2px\]{--tw-backdrop-blur: blur(2px);-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-\[34px\]{--tw-backdrop-blur: blur(34px);-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-sm{--tw-backdrop-blur: blur(4px);-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,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[-webkit-app-region\:drag\]{-webkit-app-region:drag}.\[scrollbar-gutter\:stable\]{scrollbar-gutter:stable}.\[scrollbar-width\:none\]{scrollbar-width:none}.\[stop-color\:\#E5E5EA\]{stop-color:#e5e5ea}.\[stop-color\:\#F5F5F7\]{stop-color:#f5f5f7}.\[stop-color\:\#FFFFFF\]{stop-color:#fff}pre code.hljs{background:transparent;padding:0}.chat-user-glass{position:relative;isolation:isolate;overflow:hidden;border:1px solid rgba(255,255,255,.78);background:radial-gradient(circle at 16% 0%,rgba(255,255,255,.92),transparent 34%),linear-gradient(150deg,#ffffffc2,#eef8ff7a 54%,#daf9ff4d);box-shadow:0 18px 48px #0f172a21,inset 0 1px #ffffffe6,inset 0 -1px #ffffff4d;-webkit-backdrop-filter:blur(34px) saturate(180%);backdrop-filter:blur(34px) saturate(180%)}.chat-user-glass:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;background:linear-gradient(90deg,rgba(255,255,255,.38),transparent 38%),radial-gradient(circle at 100% 100%,rgba(99,214,255,.2),transparent 42%);opacity:.9}.dark .chat-user-glass{border-color:#ffffff2e;background:radial-gradient(circle at 18% 0%,rgba(255,255,255,.14),transparent 34%),linear-gradient(150deg,#545962ad,#2a30398a 56%,#141b257a);box-shadow:0 18px 52px #00000057,inset 0 1px #ffffff2e,inset 0 -1px #ffffff0f}.dark .chat-user-glass:before{background:linear-gradient(90deg,rgba(255,255,255,.1),transparent 42%),radial-gradient(circle at 100% 100%,rgba(10,132,255,.18),transparent 46%);opacity:1}.dark .hljs{color:#e6edf3}.dark .hljs-keyword,.dark .hljs-selector-tag{color:#ff7b72}.dark .hljs-string,.dark .hljs-attr{color:#a5d6ff}.dark .hljs-comment,.dark .hljs-quote{color:#8b949e;font-style:italic}.dark .hljs-number,.dark .hljs-literal{color:#79c0ff}.dark .hljs-title,.dark .hljs-title\.class_,.dark .hljs-title\.function_{color:#d2a8ff}.dark .hljs-built_in,.dark .hljs-type,.dark .hljs-params,.dark .hljs-variable,.dark .hljs-template-variable{color:#ffa657}.dark .hljs-addition{color:#aff5b4;background-color:#2ea04326}.dark .hljs-deletion{color:#ffdcd7;background-color:#f8514926}.dark .hljs-meta{color:#79c0ff}.dark .hljs-selector-class,.dark .hljs-selector-id{color:#7ee787}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#8080804d;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#80808080}.dark\:prose-invert:is(.dark *){--tw-prose-body: var(--tw-prose-invert-body);--tw-prose-headings: var(--tw-prose-invert-headings);--tw-prose-lead: var(--tw-prose-invert-lead);--tw-prose-links: var(--tw-prose-invert-links);--tw-prose-bold: var(--tw-prose-invert-bold);--tw-prose-counters: var(--tw-prose-invert-counters);--tw-prose-bullets: var(--tw-prose-invert-bullets);--tw-prose-hr: var(--tw-prose-invert-hr);--tw-prose-quotes: var(--tw-prose-invert-quotes);--tw-prose-quote-borders: var(--tw-prose-invert-quote-borders);--tw-prose-captions: var(--tw-prose-invert-captions);--tw-prose-kbd: var(--tw-prose-invert-kbd);--tw-prose-kbd-shadows: var(--tw-prose-invert-kbd-shadows);--tw-prose-code: var(--tw-prose-invert-code);--tw-prose-pre-code: var(--tw-prose-invert-pre-code);--tw-prose-pre-bg: var(--tw-prose-invert-pre-bg);--tw-prose-th-borders: var(--tw-prose-invert-th-borders);--tw-prose-td-borders: var(--tw-prose-invert-td-borders) }.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-slate-400::-moz-placeholder{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.placeholder\:text-slate-400::placeholder{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.focus-within\:opacity-100:focus-within{opacity:1}.hover\:border-accent\/30:hover{border-color:hsl(var(--accent) / .3)}.hover\:border-black\/\[0\.12\]:hover{border-color:#0000001f}.hover\:border-slate-200:hover{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.hover\:border-slate-300:hover{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.hover\:bg-accent-dim:hover{background-color:hsl(var(--accent-dim))}.hover\:bg-accent\/10:hover{background-color:hsl(var(--accent) / .1)}.hover\:bg-amber-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.hover\:bg-black\/\[0\.04\]:hover{background-color:#0000000a}.hover\:bg-black\/\[0\.05\]:hover{background-color:#0000000d}.hover\:bg-black\/\[0\.07\]:hover{background-color:#00000012}.hover\:bg-black\/\[0\.08\]:hover{background-color:#00000014}.hover\:bg-black\/\[0\.09\]:hover{background-color:#00000017}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-gray-100\/80:hover{background-color:#f3f4f6cc}.hover\:bg-gray-100\/90:hover{background-color:#f3f4f6e6}.hover\:bg-gray-200\/70:hover{background-color:#e5e7ebb3}.hover\:bg-gray-300:hover{--tw-bg-opacity: 1;background-color:rgb(209 213 219 / var(--tw-bg-opacity, 1))}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.hover\:bg-red-50:hover{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-red-700:hover{--tw-bg-opacity: 1;background-color:rgb(185 28 28 / var(--tw-bg-opacity, 1))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-100\/70:hover{background-color:#f1f5f9b3}.hover\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.hover\:text-primary\/80:hover{color:hsl(var(--primary) / .8)}.hover\:text-red-500:hover{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-slate-700:hover{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.hover\:text-slate-900:hover{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_10px_26px_rgba\(0\,0\,0\,0\.07\)\]:hover{--tw-shadow: 0 10px 26px rgba(0,0,0,.07);--tw-shadow-colored: 0 10px 26px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-xl:hover{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-black\/5:hover{--tw-shadow-color: rgb(0 0 0 / .05);--tw-shadow: var(--tw-shadow-colored) }.focus\:border-accent:focus{border-color:hsl(var(--accent))}.focus\:border-primary\/50:focus{border-color:hsl(var(--primary) / .5)}.focus\:bg-accent\/10:focus{background-color:hsl(var(--accent) / .1)}.focus\:text-foreground:focus{color:hsl(var(--foreground))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-accent\/45:focus{--tw-ring-color: hsl(var(--accent) / .45) }.focus\:ring-primary\/15:focus{--tw-ring-color: hsl(var(--primary) / .15) }.focus\:ring-primary\/20:focus{--tw-ring-color: hsl(var(--primary) / .2) }.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring)) }.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px }.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring)) }.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px }.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background)) }.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-slate-300:disabled{--tw-bg-opacity: 1;background-color:rgb(203 213 225 / var(--tw-bg-opacity, 1))}.disabled\:text-white:disabled{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.disabled\:opacity-100:disabled{opacity:1}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:text-foreground{color:hsl(var(--foreground))}.group:hover .group-hover\:opacity-100{opacity:1}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}@keyframes fadeIn{0%{opacity:0;transform:scale(.96) translateY(20px)}to{opacity:1;transform:scale(1)}}.data-\[state\=open\]\:animate-fade-in[data-state=open]{animation:fadeIn .4s ease}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.prose-headings\:font-semibold :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:600}.prose-headings\:tracking-tight :is(:where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *))){letter-spacing:-.025em}.prose-h1\:mb-3 :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){margin-bottom:.75rem}.prose-h1\:mt-5 :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:1.25rem}.prose-h1\:border-b :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){border-bottom-width:1px}.prose-h1\:border-gray-200 :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.prose-h1\:pb-1\.5 :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){padding-bottom:.375rem}.prose-h1\:text-xl :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:1.25rem;line-height:1.75rem}.prose-h2\:mb-2 :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){margin-bottom:.5rem}.prose-h2\:mt-5 :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:1.25rem}.prose-h2\:text-lg :is(:where(h2):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:1.125rem;line-height:1.75rem}.prose-h3\:mb-2 :is(:where(h3):not(:where([class~=not-prose],[class~=not-prose] *))){margin-bottom:.5rem}.prose-h3\:mt-4 :is(:where(h3):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:1rem}.prose-h3\:text-base :is(:where(h3):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:1rem;line-height:1.5rem}.prose-p\:my-2\.5 :is(:where(p):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:.625rem;margin-bottom:.625rem}.prose-p\:leading-relaxed :is(:where(p):not(:where([class~=not-prose],[class~=not-prose] *))){line-height:1.625}.prose-a\:text-accent :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){color:hsl(var(--accent))}.prose-a\:no-underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))){text-decoration-line:none}.hover\:prose-a\:underline :is(:where(a):not(:where([class~=not-prose],[class~=not-prose] *))):hover{text-decoration-line:underline}.prose-blockquote\:my-3 :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:.75rem;margin-bottom:.75rem}.prose-blockquote\:rounded-r-lg :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){border-top-right-radius:var(--radius);border-bottom-right-radius:var(--radius)}.prose-blockquote\:border-l-\[3px\] :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){border-left-width:3px}.prose-blockquote\:border-accent\/40 :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){border-color:hsl(var(--accent) / .4)}.prose-blockquote\:bg-accent\/\[0\.03\] :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){background-color:hsl(var(--accent) / .03)}.prose-blockquote\:px-4 :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){padding-left:1rem;padding-right:1rem}.prose-blockquote\:py-0\.5 :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){padding-top:.125rem;padding-bottom:.125rem}.prose-blockquote\:not-italic :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){font-style:normal}.prose-blockquote\:text-gray-600 :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.prose-strong\:font-semibold :is(:where(strong):not(:where([class~=not-prose],[class~=not-prose] *))){font-weight:600}.prose-strong\:text-gray-900 :is(:where(strong):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.prose-ol\:my-2 :is(:where(ol):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:.5rem;margin-bottom:.5rem}.prose-ul\:my-2 :is(:where(ul):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:.5rem;margin-bottom:.5rem}.prose-li\:my-0\.5 :is(:where(li):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:.125rem;margin-bottom:.125rem}.prose-table\:text-sm :is(:where(table):not(:where([class~=not-prose],[class~=not-prose] *))){font-size:.875rem;line-height:1.25rem}.prose-th\:border-gray-200 :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.prose-th\:bg-gray-50 :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.prose-th\:px-3 :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))){padding-left:.75rem;padding-right:.75rem}.prose-th\:py-2 :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))){padding-top:.5rem;padding-bottom:.5rem}.prose-td\:border-gray-200 :is(:where(td):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.prose-td\:px-3 :is(:where(td):not(:where([class~=not-prose],[class~=not-prose] *))){padding-left:.75rem;padding-right:.75rem}.prose-td\:py-2 :is(:where(td):not(:where([class~=not-prose],[class~=not-prose] *))){padding-top:.5rem;padding-bottom:.5rem}.prose-img\:rounded-lg :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){border-radius:var(--radius)}.prose-img\:shadow-sm :is(:where(img):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.prose-hr\:my-5 :is(:where(hr):not(:where([class~=not-prose],[class~=not-prose] *))){margin-top:1.25rem;margin-bottom:1.25rem}.prose-hr\:border-gray-200 :is(:where(hr):not(:where([class~=not-prose],[class~=not-prose] *))){--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.dark\:divide-white\/\[0\.07\]:is(.dark *)>:not([hidden])~:not([hidden]){border-color:#ffffff12}.dark\:border-amber-400\/15:is(.dark *){border-color:#fbbf2426}.dark\:border-amber-400\/20:is(.dark *){border-color:#fbbf2433}.dark\:border-amber-400\/30:is(.dark *){border-color:#fbbf244d}.dark\:border-amber-900\/30:is(.dark *){border-color:#78350f4d}.dark\:border-blue-400\/20:is(.dark *){border-color:#60a5fa33}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-gray-700\/40:is(.dark *){border-color:#37415166}.dark\:border-gray-700\/60:is(.dark *){border-color:#37415199}.dark\:border-primary\/25:is(.dark *){border-color:hsl(var(--primary) / .25)}.dark\:border-primary\/30:is(.dark *){border-color:hsl(var(--primary) / .3)}.dark\:border-primary\/35:is(.dark *){border-color:hsl(var(--primary) / .35)}.dark\:border-red-400\/20:is(.dark *){border-color:#f8717133}.dark\:border-red-900\/30:is(.dark *){border-color:#7f1d1d4d}.dark\:border-red-900\/40:is(.dark *){border-color:#7f1d1d66}.dark\:border-violet-900\/30:is(.dark *){border-color:#4c1d954d}.dark\:border-white\/\[0\.06\]:is(.dark *){border-color:#ffffff0f}.dark\:border-white\/\[0\.07\]:is(.dark *){border-color:#ffffff12}.dark\:border-white\/\[0\.08\]:is(.dark *){border-color:#ffffff14}.dark\:border-white\/\[0\.10\]:is(.dark *){border-color:#ffffff1a}.dark\:border-white\/\[0\.12\]:is(.dark *){border-color:#ffffff1f}.dark\:border-white\/\[0\.1\]:is(.dark *){border-color:#ffffff1a}.dark\:bg-\[\#090d12\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(9 13 18 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#0b0f14\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(11 15 20 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#0b1016\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(11 16 22 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#0c1117\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(12 17 23 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#0d1117\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(13 17 23 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#0f151c\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(15 21 28 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#111820\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 32 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#151516\]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(21 21 22 / var(--tw-bg-opacity, 1))}.dark\:bg-\[\#2c2c2e\]\/90:is(.dark *){background-color:#2c2c2ee6}.dark\:bg-\[rgba\(0\,0\,0\,0\.42\)\]:is(.dark *){background-color:#0000006b}.dark\:bg-\[rgba\(0\,0\,0\,0\.45\)\]:is(.dark *){background-color:#00000073}.dark\:bg-\[rgba\(0\,0\,0\,0\.55\)\]:is(.dark *){background-color:#0000008c}.dark\:bg-amber-400\/15:is(.dark *){background-color:#fbbf2426}.dark\:bg-amber-500\/10:is(.dark *){background-color:#f59e0b1a}.dark\:bg-amber-500\/15:is(.dark *){background-color:#f59e0b26}.dark\:bg-amber-950\/20:is(.dark *){background-color:#451a0333}.dark\:bg-black\/45:is(.dark *){background-color:#00000073}.dark\:bg-blue-500\/10:is(.dark *){background-color:#3b82f61a}.dark\:bg-blue-500\/15:is(.dark *){background-color:#3b82f626}.dark\:bg-destructive\/20:is(.dark *){background-color:hsl(var(--destructive) / .2)}.dark\:bg-gray-700\/80:is(.dark *){background-color:#374151cc}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(3 7 18 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-950\/40:is(.dark *){background-color:#03071266}.dark\:bg-primary\/10:is(.dark *){background-color:hsl(var(--primary) / .1)}.dark\:bg-primary\/15:is(.dark *){background-color:hsl(var(--primary) / .15)}.dark\:bg-red-500\/10:is(.dark *){background-color:#ef44441a}.dark\:bg-red-950\/20:is(.dark *){background-color:#450a0a33}.dark\:bg-red-950\/40:is(.dark *){background-color:#450a0a66}.dark\:bg-slate-100:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.dark\:bg-transparent:is(.dark *){background-color:transparent}.dark\:bg-violet-950\/20:is(.dark *){background-color:#2e106533}.dark\:bg-white\/\[0\.02\]:is(.dark *){background-color:#ffffff05}.dark\:bg-white\/\[0\.03\]:is(.dark *){background-color:#ffffff08}.dark\:bg-white\/\[0\.04\]:is(.dark *){background-color:#ffffff0a}.dark\:bg-white\/\[0\.055\]:is(.dark *){background-color:#ffffff0e}.dark\:bg-white\/\[0\.05\]:is(.dark *){background-color:#ffffff0d}.dark\:bg-white\/\[0\.06\]:is(.dark *){background-color:#ffffff0f}.dark\:bg-white\/\[0\.08\]:is(.dark *){background-color:#ffffff14}.dark\:bg-white\/\[0\.10\]:is(.dark *){background-color:#ffffff1a}.dark\:bg-\[linear-gradient\(180deg\,\#0d1218_0\%\,\#0a0f15_100\%\)\]:is(.dark *){background-image:linear-gradient(180deg,#0d1218,#0a0f15)}.dark\:bg-\[linear-gradient\(180deg\,\#10151c_0\%\,\#0c1016_100\%\)\]:is(.dark *){background-image:linear-gradient(180deg,#10151c,#0c1016)}.dark\:bg-\[linear-gradient\(180deg\,rgba\(255\,255\,255\,0\.08\)\,rgba\(255\,255\,255\,0\.025\)_52\%\,rgba\(255\,255\,255\,0\.015\)\)\]:is(.dark *){background-image:linear-gradient(180deg,#ffffff14,#ffffff06 52%,#ffffff04)}.dark\:stroke-black\/80:is(.dark *){stroke:#000c}.dark\:stroke-white:is(.dark *){stroke:#fff}.dark\:stroke-white\/10:is(.dark *){stroke:#ffffff1a}.dark\:text-amber-100:is(.dark *){--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity, 1))}.dark\:text-amber-100\/70:is(.dark *){color:#fef3c7b3}.dark\:text-amber-200:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-50:is(.dark *){--tw-text-opacity: 1;color:rgb(255 251 235 / var(--tw-text-opacity, 1))}.dark\:text-blue-200:is(.dark *){--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:text-pink-400:is(.dark *){--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.dark\:text-primary:is(.dark *){color:hsl(var(--primary))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-slate-100:is(.dark *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.dark\:text-slate-200:is(.dark *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.dark\:text-slate-300:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.dark\:text-slate-400:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.dark\:text-slate-50:is(.dark *){--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.dark\:text-slate-500:is(.dark *){--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.dark\:text-slate-950:is(.dark *){--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.dark\:text-violet-300:is(.dark *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:text-white\/55:is(.dark *){color:#ffffff8c}.dark\:shadow-\[0_-16px_42px_rgba\(0\,0\,0\,0\.34\)\]:is(.dark *){--tw-shadow: 0 -16px 42px rgba(0,0,0,.34);--tw-shadow-colored: 0 -16px 42px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-\[0_12px_28px_rgba\(0\,0\,0\,0\.20\)\]:is(.dark *){--tw-shadow: 0 12px 28px rgba(0,0,0,.2);--tw-shadow-colored: 0 12px 28px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-\[0_20px_70px_rgba\(0\,0\,0\,0\.28\)\]:is(.dark *){--tw-shadow: 0 20px 70px rgba(0,0,0,.28);--tw-shadow-colored: 0 20px 70px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-\[0_28px_80px_rgba\(0\,0\,0\,0\.40\)\]:is(.dark *){--tw-shadow: 0 28px 80px rgba(0,0,0,.4);--tw-shadow-colored: 0 28px 80px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-\[inset_-1px_0_0_rgba\(255\,255\,255\,0\.08\)\]:is(.dark *){--tw-shadow: inset -1px 0 0 rgba(255,255,255,.08);--tw-shadow-colored: inset -1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-none:is(.dark *){--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:\[stop-color\:\#1C1C1E\]:is(.dark *){stop-color:#1c1c1e}.dark\:\[stop-color\:\#2C2C2E\]:is(.dark *){stop-color:#2c2c2e}.dark\:\[stop-color\:\#3A3A3C\]:is(.dark *){stop-color:#3a3a3c}.dark\:placeholder\:text-slate-500:is(.dark *)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.dark\:placeholder\:text-slate-500:is(.dark *)::placeholder{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.dark\:hover\:border-white\/\[0\.08\]:hover:is(.dark *){border-color:#ffffff14}.dark\:hover\:border-white\/\[0\.10\]:hover:is(.dark *){border-color:#ffffff1a}.dark\:hover\:border-white\/\[0\.12\]:hover:is(.dark *){border-color:#ffffff1f}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-red-500\/10:hover:is(.dark *){background-color:#ef44441a}.dark\:hover\:bg-white:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-white\/\[0\.04\]:hover:is(.dark *){background-color:#ffffff0a}.dark\:hover\:bg-white\/\[0\.05\]:hover:is(.dark *){background-color:#ffffff0d}.dark\:hover\:bg-white\/\[0\.06\]:hover:is(.dark *){background-color:#ffffff0f}.dark\:hover\:bg-white\/\[0\.07\]:hover:is(.dark *){background-color:#ffffff12}.dark\:hover\:bg-white\/\[0\.085\]:hover:is(.dark *){background-color:#ffffff16}.dark\:hover\:bg-white\/\[0\.08\]:hover:is(.dark *){background-color:#ffffff14}.dark\:hover\:bg-white\/\[0\.09\]:hover:is(.dark *){background-color:#ffffff17}.dark\:hover\:bg-white\/\[0\.12\]:hover:is(.dark *){background-color:#ffffff1f}.dark\:hover\:bg-white\/\[0\.13\]:hover:is(.dark *){background-color:#ffffff21}.dark\:hover\:bg-white\/\[0\.1\]:hover:is(.dark *){background-color:#ffffff1a}.dark\:hover\:text-red-200:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:hover\:text-white:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:hover\:shadow-none:hover:is(.dark *){--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:disabled\:bg-white\/20:disabled:is(.dark *){background-color:#fff3}.dark\:disabled\:text-white\/55:disabled:is(.dark *){color:#ffffff8c}.dark\:prose-h1\:border-gray-700 :is(:where(h1):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:prose-blockquote\:text-gray-300 :is(:where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:prose-strong\:text-white :is(:where(strong):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:prose-th\:border-gray-700 :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:prose-th\:bg-gray-800 :is(:where(th):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:prose-td\:border-gray-700 :is(:where(td):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:prose-hr\:border-gray-700 :is(:where(hr):not(:where([class~=not-prose],[class~=not-prose] *))):is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}@media(min-width:640px){.sm\:left-1\/2{left:50%}.sm\:right-auto{right:auto}.sm\:order-none{order:0}.sm\:ml-0{margin-left:0}.sm\:mt-2{margin-top:.5rem}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:h-11{height:2.75rem}.sm\:h-12{height:3rem}.sm\:h-8{height:2rem}.sm\:min-h-\[112px\]{min-height:112px}.sm\:min-h-\[116px\]{min-height:116px}.sm\:min-h-\[96px\]{min-height:96px}.sm\:w-11{width:2.75rem}.sm\:w-12{width:3rem}.sm\:w-8{width:2rem}.sm\:w-\[calc\(100\%-2rem\)\]{width:calc(100% - 2rem)}.sm\:w-auto{width:auto}.sm\:min-w-0{min-width:0px}.sm\:min-w-\[118px\]{min-width:118px}.sm\:max-w-\[72\%\]{max-width:72%}.sm\:max-w-\[76\%\]{max-width:76%}.sm\:max-w-\[84\%\]{max-width:84%}.sm\:max-w-\[86\%\]{max-width:86%}.sm\:-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-wrap{flex-wrap:wrap}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.sm\:gap-3{gap:.75rem}.sm\:rounded-\[24px\]{border-radius:24px}.sm\:rounded-\[28px\]{border-radius:28px}.sm\:p-2\.5{padding:.625rem}.sm\:p-6{padding:1.5rem}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:py-4{padding-top:1rem;padding-bottom:1rem}.sm\:py-5{padding-top:1.25rem;padding-bottom:1.25rem}.sm\:pb-6{padding-bottom:1.5rem}.sm\:pt-4{padding-top:1rem}.sm\:text-\[2rem\]{font-size:2rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.sm\:leading-none{line-height:1}}@media(min-width:768px){.md\:static{position:static}.md\:z-auto{z-index:auto}.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-\[288px_minmax\(0\,1fr\)\]{grid-template-columns:288px minmax(0,1fr)}.md\:rounded-\[28px\]{border-radius:28px}.md\:border{border-width:1px}.md\:pb-3{padding-bottom:.75rem}}@media(min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[340px_minmax\(0\,1fr\)\]{grid-template-columns:340px minmax(0,1fr)}.lg\:flex-row{flex-direction:row}.lg\:items-center{align-items:center}.lg\:justify-between{justify-content:space-between}.lg\:self-start{align-self:flex-start}}@media(min-width:1280px){.xl\:h-\[calc\(100vh-8rem\)\]{height:calc(100vh - 8rem)}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-\[22rem_minmax\(0\,1fr\)\]{grid-template-columns:22rem minmax(0,1fr)}.xl\:grid-cols-\[300px_minmax\(0\,1fr\)\]{grid-template-columns:300px minmax(0,1fr)}.xl\:grid-cols-\[minmax\(0\,1\.05fr\)_minmax\(0\,0\.95fr\)\]{grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr)}.xl\:overflow-hidden{overflow:hidden}}@media(min-width:1536px){.\32xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}.\[\&\>p\]\:my-0\.5>p{margin-top:.125rem;margin-bottom:.125rem}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&_\*\]\:text-inherit *{color:inherit}.\[\&_a\]\:underline a{text-decoration-line:underline}.\[\&_code\]\:border code{border-width:1px}.\[\&_code\]\:border-black\/10 code{border-color:#0000001a}.\[\&_code\]\:bg-black\/10 code{background-color:#0000001a}.\[\&_code\]\:text-inherit code{color:inherit}.dark\:\[\&_code\]\:border-white\/10 code:is(.dark *){border-color:#ffffff1a}.\[\&_li\]\:my-0 li{margin-top:0;margin-bottom:0}
|