@undefineds.co/xpod 0.4.25 → 0.4.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/ApiServer.d.ts +1 -0
- package/dist/api/ApiServer.js +38 -0
- package/dist/api/ai-config/AiConfigStore.js +18 -6
- package/dist/api/ai-gateway/connect/index.d.ts +1 -0
- package/dist/api/ai-gateway/connect/index.js +39 -18
- package/dist/api/ai-gateway/models/ProviderModelsAdapter.js +5 -2
- package/dist/api/container/common.js +8 -2
- package/dist/api/container/index.js +2 -2
- package/dist/api/container/local.js +6 -3
- package/dist/api/handlers/AiGatewayHandler.d.ts +1 -0
- package/dist/api/handlers/AiGatewayHandler.js +53 -3
- package/dist/api/handlers/AiGatewayManagementHandler.js +9 -0
- package/dist/api/handlers/TaskHandler.js +15 -10
- package/dist/api/network/NetworkEnvironmentConfigurationStore.js +1 -1
- package/dist/api/runs/ManagedRunWorker.d.ts +0 -1
- package/dist/api/runs/ManagedRunWorker.js +2 -14
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +0 -8
- package/dist/api/runs/PiAgentRuntimeDriver.js +65 -21
- package/dist/api/runs/RunStateCenter.js +1 -0
- package/dist/api/runs/store.d.ts +1 -0
- package/dist/api/runs/store.js +13 -0
- package/dist/api/tasks/TaskMaterializer.js +13 -6
- package/dist/api/tasks/TaskResumeDiagnostics.d.ts +28 -0
- package/dist/api/tasks/TaskResumeDiagnostics.js +148 -0
- package/dist/api/tasks/TaskService.js +40 -23
- package/dist/storage/conditions/StorageETagHandler.d.ts +1 -1
- package/dist/storage/conditions/StorageETagHandler.js +13 -4
- package/dist/util/task-model-diagnostics.d.ts +67 -0
- package/dist/util/task-model-diagnostics.js +118 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.d.ts +1 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiApiKeyPool.js +2 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiConnectDialog.d.ts +1 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialPoolSection.d.ts +1 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiCredentialPoolSection.js +10 -10
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeyRow.d.ts +3 -1
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeyRow.js +2 -2
- package/node_modules/@undefineds.co/ai-connections/dist/AiGatewayKeysSection.js +77 -23
- package/node_modules/@undefineds.co/ai-connections/dist/AiProviderCard.d.ts +1 -0
- package/node_modules/@undefineds.co/ai-connections/dist/AiSortableCredentialList.js +59 -59
- package/node_modules/@undefineds.co/ai-connections/dist/collection-runtime.js +2 -0
- package/node_modules/@undefineds.co/ai-connections/dist/collections.js +14 -6
- package/node_modules/@undefineds.co/ai-connections/dist/contract/ai-connections-client.d.ts +2 -1
- package/node_modules/@undefineds.co/ai-connections/dist/contract/ai-connections-client.js +1 -0
- package/node_modules/@undefineds.co/ai-connections/dist/contract/client/gateway-model-roles.d.ts +11 -0
- package/node_modules/@undefineds.co/ai-connections/dist/contract/client/gateway-model-roles.js +11 -0
- package/node_modules/@undefineds.co/ai-connections/dist/contract/client/normalize.d.ts +2 -1
- package/node_modules/@undefineds.co/ai-connections/dist/contract/client/normalize.js +12 -5
- package/node_modules/@undefineds.co/ai-connections/dist/contract/client/request.js +10 -2
- package/node_modules/@undefineds.co/ai-connections/dist/contract/client/types.d.ts +10 -0
- package/node_modules/@undefineds.co/ai-connections/package.json +1 -1
- package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +1 -0
- package/node_modules/@undefineds.co/extension-sdk/package.json +1 -1
- package/node_modules/@undefineds.co/pod-collections/dist/index.cjs +60 -13
- package/node_modules/@undefineds.co/pod-collections/dist/mapping.d.ts +16 -1
- package/node_modules/@undefineds.co/pod-collections/dist/mapping.js +51 -0
- package/node_modules/@undefineds.co/pod-collections/dist/mutations.js +14 -18
- package/node_modules/@undefineds.co/pod-collections/package.json +1 -1
- package/node_modules/@undefineds.co/shared-ui/dist/list.d.ts +8 -1
- package/node_modules/@undefineds.co/shared-ui/dist/list.js +4 -1
- package/node_modules/@undefineds.co/shared-ui/dist/pod-sign-in/IdpChrome.d.ts +1 -1
- package/node_modules/@undefineds.co/shared-ui/dist/pod-sign-in/IdpChrome.js +2 -2
- package/node_modules/@undefineds.co/shared-ui/dist/pod-sign-in/IdpViews.js +2 -2
- package/node_modules/@undefineds.co/shared-ui/dist/pod-sign-in/PodSignInFrame.d.ts +3 -3
- package/node_modules/@undefineds.co/shared-ui/dist/pod-sign-in/PodSignInFrame.js +5 -5
- package/node_modules/@undefineds.co/shared-ui/dist/pod-sign-in/parts.d.ts +5 -5
- package/node_modules/@undefineds.co/shared-ui/dist/pod-sign-in/parts.js +5 -5
- package/node_modules/@undefineds.co/shared-ui/dist/section-header.js +1 -1
- package/node_modules/@undefineds.co/shared-ui/dist/theme.css +5 -32
- package/node_modules/@undefineds.co/shared-ui/package.json +1 -1
- package/node_modules/@undefineds.co/solid-sdk/package.json +1 -1
- package/package.json +2 -2
- package/static/app/assets/main.css +1 -1
- package/static/app/assets/main.js +1 -1
- package/static/dashboard/assets/AccountAuthBoundary-Dv52SZc6.js +1 -0
- package/static/dashboard/assets/DesktopOidcCallback-DaT_Rumf.js +1 -0
- package/static/dashboard/assets/DevicePages-HjclpIVm.js +2 -0
- package/static/dashboard/assets/ModelsPage-Be2TPd-x.js +11 -0
- package/static/dashboard/assets/{PaneListHeader-Dn5O0mwy.js → PaneListHeader-DtvnRmFq.js} +1 -1
- package/static/dashboard/assets/{PodDeletionAuthorizationPanel-D3NOG6ZM.js → PodDeletionAuthorizationPanel-BJk_8rJq.js} +3 -3
- package/static/dashboard/assets/PodPage-C4gzEspV.js +1 -0
- package/static/dashboard/assets/{SystemSettingsPage-BNQP_Yuc.js → SystemSettingsPage-HaNrP1H1.js} +1 -1
- package/static/dashboard/assets/TasksPage-BdO5K2L7.js +1 -0
- package/static/dashboard/assets/{WebDesktopEntry-vnb4CZWp.js → WebDesktopEntry-Cj9_ZfJU.js} +1 -1
- package/static/dashboard/assets/XpodAiConnectionsPodStore-B7gmXBmC.js +3 -0
- package/static/dashboard/assets/XpodShellApp-D_KY4nCW.js +4 -0
- package/static/dashboard/assets/{account-session-DCUmCop1.js → account-session-DlcKNG7k.js} +1 -1
- package/static/dashboard/assets/{button-By5Bgvmb.js → button-wslF55uZ.js} +1 -1
- package/static/dashboard/assets/collection-runtime-uxxgEu13.js +1 -0
- package/static/dashboard/assets/{createLucideIcon-bunMzPms.js → createLucideIcon-BJQl82Qk.js} +1 -1
- package/static/dashboard/assets/dashboard-CbJ-JkrI.css +1 -0
- package/static/dashboard/assets/{dashboard-mlsg3yaw.js → dashboard-Or0gnkou.js} +2 -2
- package/static/dashboard/assets/index-BqFeOML9.js +1 -0
- package/static/dashboard/assets/{index-DvMG5pHk.js → index-DgKn1twH.js} +2 -2
- package/static/dashboard/assets/{label-Bj03L9xs.js → label-CS6Sx6Zb.js} +1 -1
- package/static/dashboard/assets/list-UyhlCFKk.js +1 -0
- package/static/dashboard/assets/{nav-item-style-BNqWQY6p.js → nav-item-style-CW1Nnorq.js} +1 -1
- package/static/dashboard/assets/{pod-collections-host-KnnGFZHL.js → pod-collections-host-DjK2xf-b.js} +6 -6
- package/static/dashboard/assets/{safe-continuation-D9AhcWiB.js → safe-continuation-ClWAhcma.js} +1 -1
- package/static/dashboard/assets/{section-header-CLCzbOp_.js → section-header-CEIEcco-.js} +1 -1
- package/static/dashboard/assets/{setting-row-DTCec8A2.js → setting-row-CaYv3dfF.js} +1 -1
- package/static/dashboard/assets/xpod-remembered-login-BUF9fin1.js +310 -0
- package/static/dashboard/dashboard.html +2 -2
- package/static/settings/assets/{AccountAuthBoundary-C0og_gIA.js → AccountAuthBoundary-Chqd38oU.js} +1 -1
- package/static/settings/assets/{DesktopOidcCallback-C5q4oFZ0.js → DesktopOidcCallback-VUrOSM_q.js} +1 -1
- package/static/settings/assets/DevicePages-C6qwvWwu.js +2 -0
- package/static/settings/assets/ModelsPage-Ry_dObRQ.js +11 -0
- package/static/settings/assets/{PaneListHeader-DqVlMe2D.js → PaneListHeader-B5RkRqr4.js} +1 -1
- package/static/settings/assets/{PodDeletionAuthorizationPanel-DgVvarVY.js → PodDeletionAuthorizationPanel-DPM-5Izt.js} +3 -3
- package/static/settings/assets/PodPage-CxND6wwc.js +1 -0
- package/static/settings/assets/{SystemSettingsPage-Crzm_DrI.js → SystemSettingsPage-C8EdMkW7.js} +1 -1
- package/static/settings/assets/TasksPage-DuqptEm8.js +1 -0
- package/static/settings/assets/{WebDesktopEntry-BGC5eRF2.js → WebDesktopEntry-BRcyktkv.js} +1 -1
- package/static/settings/assets/XpodAiConnectionsPodStore-CyA_BJVC.js +3 -0
- package/static/settings/assets/XpodShellApp-CsivHJl0.js +4 -0
- package/static/settings/assets/XpodThemeProvider-CbJ-JkrI.css +1 -0
- package/static/settings/assets/{XpodThemeProvider-CB6LepTA.js → XpodThemeProvider-DK3pIdRG.js} +2 -2
- package/static/settings/assets/{account-session-BcLjCj0x.js → account-session-DJOZ03xr.js} +1 -1
- package/static/settings/assets/auth-callback-GIBYEz_7.js +1 -0
- package/static/settings/assets/{button-BObT8pTE.js → button-D3yW-2o1.js} +1 -1
- package/static/settings/assets/collection-runtime-DfGo25mh.js +1 -0
- package/static/settings/assets/{createLucideIcon-BVsUxXpZ.js → createLucideIcon-CacwLsmB.js} +1 -1
- package/static/settings/assets/{index-ktjMkj7-.js → index-r5KRYsKC.js} +1 -1
- package/static/settings/assets/{label-BrqO8_m_.js → label-MJjUmvzG.js} +1 -1
- package/static/settings/assets/list-Ce-5k1MX.js +1 -0
- package/static/settings/assets/{nav-item-style-Di2CxkDU.js → nav-item-style-ZUbL8KOZ.js} +1 -1
- package/static/settings/assets/{pod-collections-host-KnnGFZHL.js → pod-collections-host-DjK2xf-b.js} +6 -6
- package/static/settings/assets/{safe-continuation-Dx6ceJpY.js → safe-continuation-vlBZFSlU.js} +1 -1
- package/static/settings/assets/{section-header-Dtl7yjVr.js → section-header-DGJdEvQw.js} +1 -1
- package/static/settings/assets/{setting-row-BL6Hhe8N.js → setting-row-C7tuFiho.js} +1 -1
- package/static/settings/assets/{settings-DaRBxoZk.js → settings-CyQPih1O.js} +1 -1
- package/static/settings/assets/xpod-remembered-login-D-TzzT5K.js +567 -0
- package/static/settings/auth-callback.html +3 -3
- package/static/settings/settings.html +3 -3
- package/static/dashboard/assets/AccountAuthBoundary-BvoDydRz.js +0 -1
- package/static/dashboard/assets/DesktopOidcCallback-BwIj874x.js +0 -1
- package/static/dashboard/assets/DevicePages-jOjMcvsr.js +0 -2
- package/static/dashboard/assets/ModelsPage-CMTdfqBR.js +0 -11
- package/static/dashboard/assets/PodPage-BueBdJ9_.js +0 -1
- package/static/dashboard/assets/TasksPage-CxtLJiSF.js +0 -1
- package/static/dashboard/assets/XpodAiConnectionsPodStore-wx3Ttupm.js +0 -18
- package/static/dashboard/assets/XpodShellApp-5FWY8-d5.js +0 -4
- package/static/dashboard/assets/collection-runtime-BnomuB0E.js +0 -1
- package/static/dashboard/assets/dashboard-C64R553B.css +0 -1
- package/static/dashboard/assets/xpod-remembered-login-Dr69A0Rv.js +0 -295
- package/static/settings/assets/DevicePages-fyHjjucT.js +0 -2
- package/static/settings/assets/ModelsPage-EyOByLyE.js +0 -11
- package/static/settings/assets/PodPage-DY4Oi9wg.js +0 -1
- package/static/settings/assets/TasksPage-CfXJbnlt.js +0 -1
- package/static/settings/assets/XpodAiConnectionsPodStore-CXcmgKmQ.js +0 -3
- package/static/settings/assets/XpodShellApp-D1PS3Iut.js +0 -4
- package/static/settings/assets/XpodThemeProvider-C64R553B.css +0 -1
- package/static/settings/assets/auth-callback-DSPQ28ar.js +0 -1
- package/static/settings/assets/collection-runtime-DzNbdZGe.js +0 -1
- package/static/settings/assets/index-browser-3WfrNbcG.js +0 -273
- package/static/settings/assets/xpod-remembered-login-Q66DH12t.js +0 -295
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-DvMG5pHk.js","assets/xpod-remembered-login-Dr69A0Rv.js","assets/createLucideIcon-bunMzPms.js","assets/dashboard-mlsg3yaw.js","assets/dashboard-C64R553B.css","assets/button-By5Bgvmb.js","assets/PodDeletionAuthorizationPanel-D3NOG6ZM.js","assets/account-session-DCUmCop1.js","assets/safe-continuation-D9AhcWiB.js","assets/nav-item-style-BNqWQY6p.js","assets/PodPage-BueBdJ9_.js","assets/XpodAiConnectionsPodStore-wx3Ttupm.js","assets/section-header-CLCzbOp_.js","assets/setting-row-DTCec8A2.js","assets/ModelsPage-CMTdfqBR.js","assets/label-Bj03L9xs.js","assets/DevicePages-jOjMcvsr.js","assets/PaneListHeader-Dn5O0mwy.js","assets/TasksPage-CxtLJiSF.js","assets/TasksPage-DPpAgn4C.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{ag as jt,ah as ir,aq as or,ar as ds,as as us,at as Me,au as It,av as hs,aw as fs,ax as we,ay as Nt,az as ps,aA as St,aB as cr,aC as ms,C as gs,b as bs,aD as xs,aE as vs,b7 as _s,b8 as ws,b9 as V,ba as lr,o as ys,bb as Oe,r as js,k as dr,bc as Is,bd as Ns,be as Ss,bf as ut,bg as ks,e as Rs,n as Ze,j as Ps,bh as et,bi as kt,bj as Cs,p as Rt,bk as Ls,bl as Es,bm as As,bn as Ts,bo as Us,bp as Ds,bq as ur,br as Pt,bs as Ct,bt as Lt,bu as Et,a7 as At,a8 as Tt,a9 as Ut,L as Dt,bv as hr,bw as Os,bx as Fs,X as $s,aF as Bs,aG as zs,aH as Ms,aI as Xs,aJ as qs,aK as Gs,aL as Ws,aM as Hs,aN as Vs,aO as Qs,aP as Ks,aQ as Js,aR as Ys,aS as Zs,aT as en,aU as tn,aV as rn,aW as sn,aX as nn,aY as an,aZ as on,a_ as cn,a$ as ln,b0 as dn,b1 as un,b2 as hn,b3 as fn,b4 as pn,b5 as mn,b6 as gn}from"./xpod-remembered-login-Dr69A0Rv.js";import{r as d,j as n,_ as re,u as fr,X as bn,i as xn,L as tt,a as vn,b as Fe,O as ht,k as _n,N as wn,d as pe,B as yn,l as jn}from"./dashboard-mlsg3yaw.js";import{c as z,f as Ot,i as pr,a as In,B as ue,g as Nn}from"./button-By5Bgvmb.js";import{p as $e,i as Sn,I as mr,P as kn,X as Rn,R as gr,t as Pn,A as Cn}from"./PodDeletionAuthorizationPanel-D3NOG6ZM.js";import{X as ft,u as br,a as xr,r as pt,s as mt,A as gt}from"./account-session-DCUmCop1.js";import{f as Ln,g as En,r as An,A as Tn}from"./safe-continuation-D9AhcWiB.js";import{k as Un,T as vr,u as Dn,D as _r,W as On,h as Fn,l as $n}from"./nav-item-style-BNqWQY6p.js";import{c as W}from"./createLucideIcon-bunMzPms.js";const Bn=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],zn=$e("circle-check",Bn);const Mn=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],Xn=$e("circle-x",Mn);const qn=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],Gn=$e("search",qn);const Wn=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],bt=$e("triangle-alert",Wn),wr=d.forwardRef(({className:t,multiple:e,size:r,...s},a)=>n.jsx("select",{ref:a,multiple:e,size:r,className:z(Sn,!e&&(!r||r<=1)&&"min-h-10",t),...s}));wr.displayName="NativeSelect";const yr=d.forwardRef(({className:t,placeholder:e="搜索",...r},s)=>n.jsxs("div",{className:"relative min-w-0 w-full",children:[n.jsx(Gn,{"aria-hidden":"true",className:"pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground"}),n.jsx(mr,{...r,ref:s,type:"search",placeholder:e,className:z("h-auto min-h-8 rounded-lg border-border bg-card py-1 pl-8 pr-2.5 text-[13px] leading-normal",t)})]}));yr.displayName="SearchInput";const Hn={success:"bg-success",warning:"bg-warning",destructive:"bg-destructive",info:"bg-primary",neutral:"border border-muted-foreground bg-transparent"},Vn={sm:"h-1.5 w-1.5",md:"h-2 w-2"};function Qn({tone:t,label:e,size:r="md",className:s,"aria-label":a,...i}){const o=e??a,c=o?{role:"img","aria-label":o,title:o}:{"aria-hidden":!0};return n.jsx("span",{className:z("inline-block shrink-0 rounded-full",Vn[r],Hn[t],s),...i,...c})}function Kn({tone:t,children:e,dotSize:r="sm",className:s,...a}){return n.jsxs("span",{className:z("inline-flex items-center gap-1.5",s),...a,children:[n.jsx(Qn,{tone:t,size:r}),n.jsx("span",{children:e})]})}const Jn={info:"border-primary/30 bg-primary/10 text-foreground",success:"border-success/30 bg-success/10 text-foreground",warning:"border-warning/30 bg-warning/10 text-foreground",destructive:"border-destructive/30 bg-destructive/10 text-foreground",neutral:"border-border bg-muted/30 text-foreground"},Yn={info:"text-primary",success:"text-success",warning:"text-warning",destructive:"text-destructive",neutral:"text-muted-foreground"},Zn={info:jt,success:zn,warning:bt,destructive:Xn,neutral:jt};function jr({tone:t="info",title:e,icon:r,action:s,role:a="status",className:i,children:o,...c}){const l=Zn[t];return n.jsxs("div",{role:a,className:z("flex items-start gap-2.5 rounded-md border px-3 py-2.5 text-sm leading-normal",Jn[t],i),...c,children:[n.jsx("span",{"aria-hidden":"true",className:z("mt-0.5 shrink-0",Yn[t]),children:r??n.jsx(l,{className:"h-4 w-4"})}),n.jsxs("div",{className:"min-w-0 flex-1",children:[e?n.jsx("p",{className:"font-medium",children:e}):null,o]}),s?n.jsx("div",{className:"shrink-0",children:s}):null]})}const ea={label:"Restoring session…"},Xe={title:"Connecting…",detail:"Waiting for the provider",cancelLabel:"Cancel"},qe={title:"Sign-in failed",primaryLabel:"Retry",secondaryLabel:"Back"};function ce(t,e){return t?.trim()?t:e}function ta({name:t,avatarUrl:e,size:r="lg",marker:s}){const a=r==="lg"?"h-16 w-16 text-xl":"h-10 w-10 text-sm";return n.jsxs("div",{className:"relative shrink-0",children:[e?n.jsx("img",{src:e,alt:t,className:z(a,"rounded-[18%] border border-border/50 object-cover shadow-sm")}):n.jsx("div",{"aria-hidden":"true",className:z(a,"flex items-center justify-center rounded-[18%] bg-primary/10 font-semibold text-primary shadow-sm"),children:t.slice(0,1).toUpperCase()}),s?n.jsx("div",{className:"absolute -bottom-1 -right-1",children:s}):null]})}function ra({accountName:t,avatarUrl:e,label:r}){const s=ce(r,ea.label);return n.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-4 p-6",role:"status",children:[t?n.jsxs(n.Fragment,{children:[n.jsx(ta,{name:t,avatarUrl:e,size:"lg"}),n.jsx("p",{className:"text-sm font-medium text-foreground",children:t})]}):null,n.jsx(ir,{className:"h-6 w-6 animate-spin text-muted-foreground","aria-hidden":"true"}),n.jsx("p",{className:"text-xs text-muted-foreground",children:s})]})}function xc({title:t,detail:e,providerLabel:r,providerHost:s,onCancel:a,cancelLabel:i}){const o=ce(t,Xe.title),c=ce(e,Xe.detail),l=ce(i,Xe.cancelLabel);return n.jsxs("div",{className:"flex h-full flex-1 flex-col",children:[n.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center px-6 py-8 text-center",role:"status",children:[n.jsx(ir,{className:"mb-4 h-8 w-8 animate-spin text-primary","aria-hidden":"true"}),n.jsx("p",{className:"text-sm font-medium text-foreground",children:o}),n.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:c}),r||s?n.jsxs("div",{className:"mt-4 w-full max-w-[18rem] rounded-lg border border-border/60 bg-muted/30 px-3 py-2",children:[r?n.jsx("p",{className:"truncate text-xs font-medium text-foreground",children:r}):null,s?n.jsx("p",{className:"mt-0.5 truncate text-[11px] text-muted-foreground",children:s}):null]}):null]}),a?n.jsx("div",{className:"shrink-0 px-5 pb-5",children:n.jsx("button",{type:"button",onClick:a,className:z("h-9 w-full cursor-pointer rounded-md text-xs text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground",pr),children:l})}):null]})}function vc({title:t,description:e,primaryLabel:r,onPrimary:s,secondaryLabel:a,onSecondary:i}){const o=ce(t,qe.title),c=ce(r,qe.primaryLabel),l=ce(a,qe.secondaryLabel);return n.jsxs("div",{className:"flex h-full flex-1 flex-col",children:[n.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-3 px-6 pb-5 pt-7 text-center",children:[n.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-full bg-destructive/10",children:n.jsx(bt,{className:"h-6 w-6 text-destructive","aria-hidden":"true"})}),n.jsx("p",{className:"text-base font-semibold text-foreground",children:o}),e?n.jsx("p",{className:"max-w-[19rem] text-sm leading-6 text-muted-foreground",role:"alert",children:e}):null]}),n.jsxs("div",{className:"shrink-0 space-y-2 px-4 pb-5",children:[n.jsx("button",{type:"button",onClick:s,className:z("h-9 w-full cursor-pointer rounded-md bg-primary text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90 focus-visible:bg-primary/80 disabled:cursor-not-allowed disabled:opacity-50",Ot),children:c}),i?n.jsx("button",{type:"button",onClick:i,className:z("h-9 w-full cursor-pointer rounded-md border border-border/60 bg-muted/30 text-sm font-medium text-foreground transition-colors hover:bg-muted/50 focus-visible:border-ring focus-visible:bg-muted/50",Ot),children:l}):null]})]})}var sa=Object.defineProperty,Ir=(t,e)=>sa(t,"name",{value:e,configurable:!0}),Ft="horizontal",na=["horizontal","vertical"],aa=d.forwardRef(Ir(function(e,r){const{decorative:s,orientation:a=Ft,...i}=e,o=Nr(a)?a:Ft,l=s?{role:"none"}:{"aria-orientation":o==="vertical"?o:void 0,role:"separator"};return n.jsx(kn.div,{"data-orientation":o,...l,...i,ref:r})},"Separator"));function Nr(t){return na.includes(t)}Ir(Nr,"isValidOrientation");var Sr=aa;const kr=d.forwardRef(({className:t,orientation:e="horizontal",decorative:r=!0,...s},a)=>n.jsx(Sr,{ref:a,decorative:r,orientation:e,className:z("shrink-0 bg-border",e==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",t),...s}));kr.displayName=Sr.displayName;const ia=3e3,oa=In("pointer-events-auto relative flex w-full items-start justify-between gap-3 overflow-hidden rounded-md border px-4 py-3 text-sm shadow-lg transition-opacity",{variants:{variant:{default:"border-border bg-background text-foreground",destructive:"border-destructive/30 bg-destructive/10 text-destructive",success:"border-green-500/20 bg-green-500/15 text-green-600"}},defaultVariants:{variant:"default"}});let Ge=0,oe=[];const rt=new Set;function Rr(){for(const t of rt)t()}function Pr(t){const e=oe.findIndex(r=>r.id===t);e<0||(clearTimeout(oe[e].timer),oe=oe.filter(r=>r.id!==t),Rr())}function ca(t){Pr(t)}function _c(t){Ge=(Ge+1)%Number.MAX_SAFE_INTEGER;const e=Ge.toString(),r=t.duration??ia,s={id:e,title:t.title,description:t.description,variant:t.variant??"default",className:t.className,timer:setTimeout(()=>Pr(e),r)};return oe=[...oe.slice(-2),s],Rr(),e}function la(t){return rt.add(t),()=>{rt.delete(t)}}function $t(){return oe}function da({className:t}){const e=d.useSyncExternalStore(la,$t,$t);return n.jsx("div",{"aria-live":"polite",role:"status",className:z("pointer-events-none fixed bottom-4 right-4 z-[var(--layer-toast)] flex w-full max-w-sm flex-col gap-2",t),children:e.map(r=>n.jsxs("div",{className:z(oa({variant:r.variant}),r.className),children:[n.jsxs("div",{className:"min-w-0 flex-1",children:[r.title?n.jsx("p",{className:"font-medium",children:r.title}):null,r.description?n.jsx("p",{className:z(r.title?"mt-0.5":void 0),children:r.description}):null]}),n.jsx("button",{type:"button","aria-label":"关闭通知",className:z("shrink-0 rounded-sm opacity-60 transition-opacity hover:opacity-100",pr),onClick:()=>ca(r.id),children:n.jsx(Rn,{"aria-hidden":"true",className:"h-3.5 w-3.5"})})]},r.id))})}const ua=300;function ha({notice:t,developerMode:e,copy:r}){const[s,a]=d.useState(!1),i=n.jsxs("span",{className:"inline-flex items-start gap-1.5",children:[t.tone==="warning"?n.jsx(bt,{"aria-hidden":"true",className:"mt-0.5 h-3.5 w-3.5 shrink-0"}):null,n.jsx("span",{children:t.text})]}),o=t.tone==="warning"?"text-warning":"text-muted-foreground",c=t.tone==="warning"?"alert":"status",l=e?t.developerDetail:void 0;return n.jsx("div",{role:c,"data-pod-sign-in":"notice","data-tone":t.tone,className:z("text-[13px] leading-5",o),children:l?n.jsxs("details",{children:[n.jsx("summary",{title:r.noticeDetailsToggle,className:"cursor-pointer rounded focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring",children:i}),n.jsxs("div",{className:"mt-1 rounded-lg bg-muted p-2 text-foreground",children:[n.jsx("pre",{className:"whitespace-pre-wrap break-all font-mono text-xs",children:l}),n.jsx("button",{type:"button",className:"mt-1 h-9 rounded-lg px-2 text-[13px] font-medium text-primary hover:bg-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring",onClick:()=>{navigator.clipboard?.writeText(l).then(()=>a(!0),()=>{})},children:s?r.noticeCopied:r.noticeCopy})]})]}):i})}function fa({copy:t,error:e,busy:r,onSubmit:s}){const[a,i]=d.useState(""),o=c=>{c.preventDefault();const l=a.trim();l&&s&&s(l)};return n.jsxs("form",{onSubmit:o,className:"flex flex-col gap-3","data-pod-sign-in":"custom-service",children:[n.jsx(ms,{label:t.customLabel,error:e,children:c=>n.jsx(mr,{...c,name:"service",type:"text",inputMode:"url",autoComplete:"url",autoCapitalize:"none",spellCheck:!1,placeholder:t.customPlaceholder,value:a,disabled:r,className:"h-11 rounded-lg bg-card text-sm",onChange:l=>i(l.target.value)})}),n.jsx(we,{type:"submit",variant:"outline",className:cr,busy:r,disabled:!a.trim(),children:t.customSubmit})]})}function pa({app:t,brand:e,state:r,notice:s,locale:a="zh-CN",copy:i,developerMode:o=!1,primaryIcon:c,capabilities:l,onPrimary:h,onUseAnother:u,onCustomService:m,onRegister:f,onToggleCustom:x}){const p=or(a,i),g=ds(ua),[v,P]=d.useState(!1),j=e?n.jsx("div",{"data-pod-sign-in":"source",children:e}):n.jsx(us,{icon:t.icon,name:t.name});if(r.kind==="restoring"){const _=g?r.identity:void 0;return n.jsxs(Me,{"data-pod-sign-in-state":"restoring",children:[j,n.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-3 text-center",children:[_?n.jsxs(n.Fragment,{children:[n.jsx(It,{name:_.displayName,avatarUrl:_.avatarUrl,storage:_.storage}),n.jsx("h1",{className:"text-[17px] font-semibold text-foreground",children:_.displayName})]}):n.jsx("h1",{className:"sr-only",children:t.name}),n.jsx("div",{role:"status","aria-live":"polite",children:g?n.jsxs("p",{className:"flex items-center gap-2 text-[13px] text-muted-foreground",children:[n.jsx(hs,{}),p.restoring]}):null})]})]})}const b=r.busy===!0,y=s?.primaryLabel??(r.kind==="remembered"?fs(p.enterApp,{app:t.name}):r.kind==="expired"?p.reauthenticate:p.useXpod),I=s?n.jsx(ha,{notice:s,developerMode:o,copy:p}):null;if(r.kind==="remembered"||r.kind==="expired")return n.jsxs(Me,{"data-pod-sign-in-state":r.kind,actions:n.jsxs(n.Fragment,{children:[I,n.jsx(we,{className:Nt,busy:b,"data-pod-sign-in-primary":"true",onClick:h,children:y}),u?n.jsx(we,{variant:"ghost",className:z(ps,"w-full"),disabled:b,onClick:u,children:p.useAnother}):null]}),children:[j,n.jsxs("div",{className:"flex flex-1 flex-col items-center justify-center gap-3 text-center",children:[n.jsx(It,{name:r.identity.displayName,avatarUrl:r.identity.avatarUrl,storage:r.identity.storage}),n.jsx("h1",{className:"text-[17px] font-semibold text-foreground",children:r.identity.displayName}),r.kind==="expired"?n.jsx("p",{className:"text-sm text-muted-foreground",children:p.expiredLine}):null]})]});const R=l?.customService!==!1,N=l?.register!==!1&&!!f,E=R&&(r.customOpen??v),S=()=>{const _=!E;P(_),x?.(_)};return n.jsxs(Me,{"data-pod-sign-in-state":"choose-service",actions:n.jsxs(n.Fragment,{children:[I,n.jsxs(we,{className:Nt,busy:b,"data-pod-sign-in-primary":"true",onClick:h,children:[!s?.primaryLabel&&c!==null?n.jsx("span",{"aria-hidden":"true",className:"mr-2 flex",children:c??n.jsx(ft,{size:20})}):null,y]}),R?n.jsxs(n.Fragment,{children:[n.jsx(we,{variant:"outline",className:cr,disabled:b,"aria-expanded":E,onClick:S,children:p.useOtherSolid}),E?n.jsx(fa,{copy:p,error:r.customError,busy:b,onSubmit:m}):null]}):null,N?n.jsxs("p",{className:"text-center text-[13px] text-muted-foreground",children:[p.noAccount,n.jsx("button",{type:"button",className:"ml-1 h-9 rounded px-1 font-medium text-primary hover:underline focus-visible:outline focus-visible:outline-2 focus-visible:outline-ring",disabled:b,onClick:f,children:p.register})]}):null]}),children:[j,n.jsxs("div",{className:"flex flex-col gap-2",children:[n.jsx("h1",{className:"text-[17px] font-semibold text-foreground",children:p.chooseTitle}),n.jsx("p",{className:"text-sm leading-[22px] text-muted-foreground",children:p.chooseLead}),n.jsxs("div",{className:"flex flex-col",children:[n.jsx(St,{summary:p.whatIsWebId,children:p.whatIsWebIdBody}),n.jsx(St,{summary:p.whatIsPod,children:p.whatIsPodBody})]})]})]})}function ma(t){try{const e=new URL(t),r=e.pathname.split("/").filter(s=>s&&!["profile","card"].includes(s));return r[r.length-1]??e.hostname}catch{return t}}const ga=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]],ba=W("bell",ga);const xa=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],va=W("chevron-right",xa);const _a=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],wa=W("circle-check",_a);const ya=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],ja=W("copy",ya);const Ia=[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]],Na=W("inbox",Ia);const Sa=[["path",{d:"m10 17 5-5-5-5",key:"1bsop3"}],["path",{d:"M15 12H3",key:"6jk70r"}],["path",{d:"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4",key:"u53s6r"}]],ka=W("log-in",Sa);const Ra=[["path",{d:"m16 17 5-5-5-5",key:"1bji2h"}],["path",{d:"M21 12H9",key:"dn1m92"}],["path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4",key:"1uf3rs"}]],Pa=W("log-out",Ra);const Ca=[["path",{d:"M4 5h16",key:"1tepv9"}],["path",{d:"M4 12h16",key:"1lakjw"}],["path",{d:"M4 19h16",key:"1djgab"}]],La=W("menu",Ca);const Ea=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],Aa=W("monitor",Ea);const Ta=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],Cr=W("refresh-cw",Ta);const Ua=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Da=W("settings",Ua);const Oa=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],Fa=W("sparkles",Oa);const $a=[["path",{d:"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344",key:"2acyp4"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],Ba=W("square-check-big",$a);const za=[["circle",{cx:"12",cy:"8",r:"5",key:"1hypcn"}],["path",{d:"M20 21a8 8 0 0 0-16 0",key:"rfgkzh"}]],Ma=W("user-round",za);const Xa=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Lr=W("x",Xa);function qa({title:t="操作未完成",description:e,primaryLabel:r="重试",onPrimary:s,primaryDisabled:a=!1,secondaryLabel:i="返回",onSecondary:o,tertiaryLabel:c,onTertiary:l,pending:h=!1,children:u}){return n.jsxs("div",{className:"flex min-h-44 flex-col items-center justify-center gap-4 px-5 py-8 text-center",children:[n.jsx("div",{className:"flex h-11 w-11 items-center justify-center rounded-full bg-destructive/10",children:n.jsx(gs,{"aria-hidden":"true",className:"h-5 w-5 text-destructive"})}),n.jsxs("div",{className:"space-y-2",children:[n.jsx("p",{className:"text-base font-semibold text-foreground",children:t}),e?n.jsx("p",{role:"alert",className:"text-sm leading-6 text-muted-foreground",children:e}):null]}),u?n.jsx("div",{className:"w-full space-y-2 text-left sm:max-w-xs",children:u}):null,n.jsxs("div",{className:"flex w-full flex-col gap-2 sm:max-w-xs",children:[n.jsx("button",{type:"button",disabled:h||a,onClick:s,className:"h-10 rounded-xl bg-primary px-4 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90 focus:outline-none focus-visible:bg-primary/80 disabled:cursor-not-allowed disabled:opacity-50",children:r}),o?n.jsx("button",{type:"button",disabled:h,onClick:o,className:"h-9 rounded-lg border border-border bg-background px-4 text-sm font-medium text-foreground transition-colors hover:bg-muted/50 focus:outline-none focus-visible:border-ring disabled:cursor-not-allowed disabled:opacity-50",children:i}):null,l&&c?n.jsx("button",{type:"button",disabled:h,onClick:l,className:"h-9 rounded-lg px-4 text-sm text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground focus:outline-none focus-visible:bg-muted/40 disabled:cursor-not-allowed disabled:opacity-50",children:c}):null]})]})}let Er=!1,Ar={status:"idle"},De,ie;const st=new Set,Ga=()=>Er,Bt=()=>Ar;function Tr(t){return st.add(t),()=>{st.delete(t)}}function Ce(t){Ar=t,st.forEach(e=>e())}function nt(t,e,r={}){return ie||(Er=!0,De={account:t,runtime:e,solidCleared:!1,onComplete:r.onComplete},Ur())}function Ur(){if(ie)return ie;if(!De)return Promise.resolve();const t=De;return ie=(async()=>{let r=t.solidCleared?"account":"solid";Ce({status:"running",step:r});try{if(t.solidCleared||(await t.runtime?.logout(),t.solidCleared=!0),r="account",Ce({status:"running",step:r}),await t.account.logout(),t.account.isAnonymous&&!t.account.isAnonymous())throw new Error("Account sign-out did not complete")}catch(s){throw Ce({status:"error",step:r}),s}De=void 0,Ce({status:"idle"}),t.onComplete?.()})().finally(()=>{ie=void 0}),ie}const zt=d.createContext(!1);function Dr({children:t}){const e=d.useContext(zt),r=d.useSyncExternalStore(Tr,Bt,Bt);if(e)return n.jsx(n.Fragment,{children:t});const s=r.status!=="idle";return n.jsxs(zt.Provider,{value:!0,children:[s&&n.jsx(bs,{mode:"page",title:"退出 Xpod",children:r.status==="running"?n.jsx(ra,{label:"正在退出…"}):n.jsx(qa,{title:"退出未完成",description:r.step==="account"?"账号会话尚未退出,请重试完成退出。":"WebID 会话尚未退出,请重试完成退出。",primaryLabel:"重试退出",onPrimary:()=>{Ur().catch(()=>{})}})}),n.jsx("div",{className:s?"hidden":"contents","aria-hidden":s||void 0,inert:s||void 0,children:t})]})}function Wa(t){try{const r=new URL(t).pathname.split("/").filter(Boolean).map(i=>decodeURIComponent(i)),s=r.indexOf("profile");if(s>0)return r[s-1];const a=r.find(i=>i!=="profile"&&i!=="card");if(a)return a}catch{}return"there"}const wc=Object.freeze(Object.defineProperty({__proto__:null,ColumnBuilder:Bs,PodArrayColumn:zs,PodBooleanColumn:Ms,PodColumnBase:Xs,PodDateTimeColumn:qs,PodIntegerColumn:Gs,PodJsonColumn:Ws,PodObjectColumn:Hs,PodStringColumn:Vs,PodTable:Qs,PodUriColumn:Ks,SolidSchema:Js,boolean:Ys,date:Zs,generateNanoId:en,hasStringValue:tn,hasTermValue:rn,id:sn,integer:nn,isSolidSchema:an,json:on,mergeSchemaColumns:cn,object:ln,podTable:vs,real:dn,resolveTermIri:un,solidSchema:hn,string:xs,text:fn,timestamp:pn,uri:mn,validateColumnOverride:gn},Symbol.toStringTag,{value:"Module"})),xe="http://www.w3.org/1999/02/22-rdf-syntax-ns#",ve="http://www.w3.org/2001/XMLSchema#",Le="http://www.w3.org/2000/10/swap/",Z={xsd:{decimal:`${ve}decimal`,boolean:`${ve}boolean`,double:`${ve}double`,integer:`${ve}integer`,string:`${ve}string`},rdf:{type:`${xe}type`,nil:`${xe}nil`,first:`${xe}first`,rest:`${xe}rest`,langString:`${xe}langString`},owl:{sameAs:"http://www.w3.org/2002/07/owl#sameAs"},r:{forSome:`${Le}reify#forSome`,forAll:`${Le}reify#forAll`},log:{implies:`${Le}log#implies`,isImpliedBy:`${Le}log#isImpliedBy`}},{xsd:Ee}=Z,Ha=/\\u([a-fA-F0-9]{4})|\\U([a-fA-F0-9]{8})|\\([^])/g,Mt={"\\":"\\","'":"'",'"':'"',n:`
|
|
3
|
-
`,r:"\r",t:" ",f:"\f",b:"\b",_:"_","~":"~",".":".","-":"-","!":"!",$:"$","&":"&","(":"(",")":")","*":"*","+":"+",",":",",";":";","=":"=","/":"/","?":"?","#":"#","@":"@","%":"%"},Va=/[\x00-\x20<>\\"\{\}\|\^\`]/,Qa={_iri:!0,_unescapedIri:!0,_simpleQuotedString:!0,_langcode:!0,_blank:!0,_newline:!0,_comment:!0,_whitespace:!0,_endOfFile:!0},Ka=/$0^/;class Ja{constructor(e){if(this._iri=/^<((?:[^ <>{}\\]|\\[uU])+)>[ \t]*/,this._unescapedIri=/^<([^\x00-\x20<>\\"\{\}\|\^\`]*)>[ \t]*/,this._simpleQuotedString=/^"([^"\\\r\n]*)"(?=[^"])/,this._simpleApostropheString=/^'([^'\\\r\n]*)'(?=[^'])/,this._langcode=/^@([a-z]+(?:-[a-z0-9]+)*)(?=[^a-z0-9\-])/i,this._prefix=/^((?:[A-Za-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])(?:\.?[\-0-9A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])*)?:(?=[#\s<])/,this._prefixed=/^((?:[A-Za-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])(?:\.?[\-0-9A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])*)?:((?:(?:[0-:A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff]|%[0-9a-fA-F]{2}|\\[!#-\/;=?\-@_~])(?:(?:[\.\-0-:A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff]|%[0-9a-fA-F]{2}|\\[!#-\/;=?\-@_~])*(?:[\-0-:A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff]|%[0-9a-fA-F]{2}|\\[!#-\/;=?\-@_~]))?)?)(?:[ \t]+|(?=\.?[,;!\^\s#()\[\]\{\}"'<>]))/,this._variable=/^\?(?:(?:[A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])(?:[\-0-:A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])*)(?=[.,;!\^\s#()\[\]\{\}"'<>])/,this._blank=/^_:((?:[0-9A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])(?:\.?[\-0-9A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])*)(?:[ \t]+|(?=\.?[,;:\s#()\[\]\{\}"'<>]))/,this._number=/^[\-+]?(?:(\d+\.\d*|\.?\d+)[eE][\-+]?|\d*(\.)?)\d+(?=\.?[,;:\s#()\[\]\{\}"'<>])/,this._boolean=/^(?:true|false)(?=[.,;\s#()\[\]\{\}"'<>])/,this._keyword=/^@[a-z]+(?=[\s#<:])/i,this._sparqlKeyword=/^(?:PREFIX|BASE|GRAPH)(?=[\s#<])/i,this._shortPredicates=/^a(?=[\s#()\[\]\{\}"'<>])/,this._newline=/^[ \t]*(?:#[^\n\r]*)?(?:\r\n|\n|\r)[ \t]*/,this._comment=/#([^\n\r]*)/,this._whitespace=/^[ \t]+/,this._endOfFile=/^(?:#[^\n\r]*)?$/,e=e||{},this._isImpliedBy=e.isImpliedBy,this._lineMode=!!e.lineMode){this._n3Mode=!1;for(const r in this)!(r in Qa)&&this[r]instanceof RegExp&&(this[r]=Ka)}else this._n3Mode=e.n3!==!1;this.comments=!!e.comments,this._literalClosingPos=0}_tokenizeToEnd(e,r){let s=this._input,a=s.length;for(;;){let c,l;for(;c=this._newline.exec(s);)this.comments&&(l=this._comment.exec(c[0]))&&i("comment",l[1],"",this._line,c[0].length),s=s.substr(c[0].length,s.length),a=s.length,this._line++;if(!c&&(c=this._whitespace.exec(s))&&(s=s.substr(c[0].length,s.length)),this._endOfFile.test(s))return r&&(this.comments&&(l=this._comment.exec(s))&&i("comment",l[1],"",this._line,s.length),s=null,i("eof","","",this._line,0)),this._input=s;const h=this._line,u=s[0];let m="",f="",x="",p=null,g=0,v=!1;switch(u){case"^":if(s.length<3)break;if(s[1]==="^"){if(this._previousMarker="^^",s=s.substr(2),s[0]!=="<"){v=!0;break}}else{this._n3Mode&&(g=1,m="^");break}case"<":if(p=this._unescapedIri.exec(s))m="IRI",f=p[1];else if(p=this._iri.exec(s)){if(f=this._unescape(p[1]),f===null||Va.test(f))return o(this);m="IRI"}else s.length>1&&s[1]==="<"?(m="<<",g=2):this._n3Mode&&s.length>1&&s[1]==="="&&(g=2,this._isImpliedBy?(m="abbreviation",f="<"):(m="inverse",f=">"));break;case">":s.length>1&&s[1]===">"&&(m=">>",g=2);break;case"_":((p=this._blank.exec(s))||r&&(p=this._blank.exec(`${s} `)))&&(m="blank",x="_",f=p[1]);break;case'"':if(p=this._simpleQuotedString.exec(s))f=p[1];else if({value:f,matchLength:g}=this._parseLiteral(s),f===null)return o(this);(p!==null||g!==0)&&(m="literal",this._literalClosingPos=0);break;case"'":if(!this._lineMode){if(p=this._simpleApostropheString.exec(s))f=p[1];else if({value:f,matchLength:g}=this._parseLiteral(s),f===null)return o(this);(p!==null||g!==0)&&(m="literal",this._literalClosingPos=0)}break;case"?":this._n3Mode&&(p=this._variable.exec(s))&&(m="var",f=p[0]);break;case"@":this._previousMarker==="literal"&&(p=this._langcode.exec(s))?(m="langcode",f=p[1]):(p=this._keyword.exec(s))&&(m=p[0]);break;case".":if(s.length===1?r:s[1]<"0"||s[1]>"9"){m=".",g=1;break}case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case"+":case"-":(p=this._number.exec(s)||r&&(p=this._number.exec(`${s} `)))&&(m="literal",f=p[0],x=typeof p[1]=="string"?Ee.double:typeof p[2]=="string"?Ee.decimal:Ee.integer);break;case"B":case"b":case"p":case"P":case"G":case"g":(p=this._sparqlKeyword.exec(s))?m=p[0].toUpperCase():v=!0;break;case"f":case"t":(p=this._boolean.exec(s))?(m="literal",f=p[0],x=Ee.boolean):v=!0;break;case"a":(p=this._shortPredicates.exec(s))?(m="abbreviation",f="a"):v=!0;break;case"=":this._n3Mode&&s.length>1&&(m="abbreviation",s[1]!==">"?(g=1,f="="):(g=2,f=">"));break;case"!":if(!this._n3Mode)break;case",":case";":case"[":case"]":case"(":case")":case"}":this._lineMode||(g=1,m=u);break;case"{":!this._lineMode&&s.length>=2&&(s[1]==="|"?(m="{|",g=2):(m=u,g=1));break;case"|":s.length>=2&&s[1]==="}"&&(m="|}",g=2);break;default:v=!0}if(v&&((this._previousMarker==="@prefix"||this._previousMarker==="PREFIX")&&(p=this._prefix.exec(s))?(m="prefix",f=p[1]||""):((p=this._prefixed.exec(s))||r&&(p=this._prefixed.exec(`${s} `)))&&(m="prefixed",x=p[1]||"",f=this._unescape(p[2]))),this._previousMarker==="^^")switch(m){case"prefixed":m="type";break;case"IRI":m="typeIRI";break;default:m=""}if(!m)return r||!/^'''|^"""/.test(s)&&/\n|\r/.test(s)?o(this):this._input=s;const P=g||p[0].length,j=i(m,f,x,h,P);this.previousToken=j,this._previousMarker=m,s=s.substr(P,s.length)}function i(c,l,h,u,m){const f=s?a-s.length:a,x=f+m,p={type:c,value:l,prefix:h,line:u,start:f,end:x};return e(null,p),p}function o(c){e(c._syntaxError(/^\S*/.exec(s)[0]))}}_unescape(e){let r=!1;const s=e.replace(Ha,(a,i,o,c)=>{if(typeof i=="string")return String.fromCharCode(Number.parseInt(i,16));if(typeof o=="string"){let l=Number.parseInt(o,16);return l<=65535?String.fromCharCode(Number.parseInt(o,16)):String.fromCharCode(55296+((l-=65536)>>10),56320+(l&1023))}return c in Mt?Mt[c]:(r=!0,"")});return r?null:s}_parseLiteral(e){if(e.length>=3){const r=e.match(/^(?:"""|"|'''|'|)/)[0],s=r.length;let a=Math.max(this._literalClosingPos,s);for(;(a=e.indexOf(r,a))>0;){let i=0;for(;e[a-i-1]==="\\";)i++;if(i%2===0){const o=e.substring(s,a),c=o.split(/\r\n|\r|\n/).length-1,l=a+s;if(s===1&&c!==0||s===3&&this._lineMode)break;return this._line+=c,{value:this._unescape(o),matchLength:l}}a++}this._literalClosingPos=e.length-s+1}return{value:"",matchLength:0}}_syntaxError(e){this._input=null;const r=new Error(`Unexpected "${e}" on line ${this._line}.`);return r.context={token:void 0,line:this._line,previousToken:this.previousToken},r}_readStartingBom(e){return e.startsWith("\uFEFF")?e.substr(1):e}tokenize(e,r){if(this._line=1,typeof e=="string")if(this._input=this._readStartingBom(e),typeof r=="function")queueMicrotask(()=>this._tokenizeToEnd(r,!0));else{const s=[];let a;if(this._tokenizeToEnd((i,o)=>i?a=i:s.push(o),!0),a)throw a;return s}else this._pendingBuffer=null,typeof e.setEncoding=="function"&&e.setEncoding("utf8"),e.on("data",s=>{this._input!==null&&s.length!==0&&(this._pendingBuffer&&(s=_s.Buffer.concat([this._pendingBuffer,s]),this._pendingBuffer=null),s[s.length-1]&128?this._pendingBuffer=s:(typeof this._input>"u"?this._input=this._readStartingBom(typeof s=="string"?s:s.toString()):this._input+=s,this._tokenizeToEnd(r,!1)))}),e.on("end",()=>{typeof this._input=="string"&&this._tokenizeToEnd(r,!0)}),e.on("error",r)}}const{rdf:Ya,xsd:he}=Z;let ke,Za=0;const ei={namedNode:$r,blankNode:Br,variable:Mr,literal:zr,defaultGraph:ni,quad:at,triple:at,fromTerm:ye,fromQuad:Xr};class se{constructor(e){this.id=e}get value(){return this.id}equals(e){return e instanceof se?this.id===e.id:!!e&&this.termType===e.termType&&this.value===e.value}hashCode(){return 0}toJSON(){return{termType:this.termType,value:this.value}}}class Or extends se{get termType(){return"NamedNode"}}class Ne extends se{get termType(){return"Literal"}get value(){return this.id.substring(1,this.id.lastIndexOf('"'))}get language(){const e=this.id;let r=e.lastIndexOf('"')+1;return r<e.length&&e[r++]==="@"?e.substr(r).toLowerCase():""}get datatype(){return new Or(this.datatypeString)}get datatypeString(){const e=this.id,r=e.lastIndexOf('"')+1,s=r<e.length?e[r]:"";return s==="^"?e.substr(r+2):s!=="@"?he.string:Ya.langString}equals(e){return e instanceof Ne?this.id===e.id:!!e&&!!e.datatype&&this.termType===e.termType&&this.value===e.value&&this.language===e.language&&this.datatype.value===e.datatype.value}toJSON(){return{termType:this.termType,value:this.value,language:this.language,datatype:{termType:"NamedNode",value:this.datatypeString}}}}class ti extends se{constructor(e){super(`_:${e}`)}get termType(){return"BlankNode"}get value(){return this.id.substr(2)}}class ri extends se{constructor(e){super(`?${e}`)}get termType(){return"Variable"}get value(){return this.id.substr(1)}}class si extends se{constructor(){return super(""),ke||this}get termType(){return"DefaultGraph"}equals(e){return this===e||!!e&&this.termType===e.termType}}ke=new si;class Fr extends se{constructor(e,r,s,a){super(""),this._subject=e,this._predicate=r,this._object=s,this._graph=a||ke}get termType(){return"Quad"}get subject(){return this._subject}get predicate(){return this._predicate}get object(){return this._object}get graph(){return this._graph}toJSON(){return{termType:this.termType,subject:this._subject.toJSON(),predicate:this._predicate.toJSON(),object:this._object.toJSON(),graph:this._graph.toJSON()}}equals(e){return!!e&&this._subject.equals(e.subject)&&this._predicate.equals(e.predicate)&&this._object.equals(e.object)&&this._graph.equals(e.graph)}}function $r(t){return new Or(t)}function Br(t){return new ti(t||`n3-${Za++}`)}function zr(t,e){if(typeof e=="string")return new Ne(`"${t}"@${e.toLowerCase()}`);let r=e?e.value:"";return r===""&&(typeof t=="boolean"?r=he.boolean:typeof t=="number"&&(Number.isFinite(t)?r=Number.isInteger(t)?he.integer:he.double:(r=he.double,Number.isNaN(t)||(t=t>0?"INF":"-INF")))),r===""||r===he.string?new Ne(`"${t}"`):new Ne(`"${t}"^^${r}`)}function Mr(t){return new ri(t)}function ni(){return ke}function at(t,e,r,s){return new Fr(t,e,r,s)}function ye(t){if(t instanceof se)return t;switch(t.termType){case"NamedNode":return $r(t.value);case"BlankNode":return Br(t.value);case"Variable":return Mr(t.value);case"DefaultGraph":return ke;case"Literal":return zr(t.value,t.language||t.datatype);case"Quad":return Xr(t);default:throw new Error(`Unexpected termType: ${t.termType}`)}}function Xr(t){if(t instanceof Fr)return t;if(t.termType!=="Quad")throw new Error(`Unexpected termType: ${t.termType}`);return at(ye(t.subject),ye(t.predicate),ye(t.object),ye(t.graph))}let Xt=0;class qr{constructor(e){this._contextStack=[],this._graph=null,e=e||{},this._setBase(e.baseIRI),e.factory&&Gr(this,e.factory);const r=typeof e.format=="string"?e.format.match(/\w*$/)[0].toLowerCase():"",s=/turtle/.test(r),a=/trig/.test(r),i=/triple/.test(r),o=/quad/.test(r),c=this._n3Mode=/n3/.test(r),l=i||o;(this._supportsNamedGraphs=!(s||c))||(this._readPredicateOrNamedGraph=this._readPredicate),this._supportsQuads=!(s||a||i||c),this._isImpliedBy=e.isImpliedBy,this._supportsRDFStar=r===""||/star|\*$/.test(r),l&&(this._resolveRelativeIRI=h=>null),this._blankNodePrefix=typeof e.blankNodePrefix!="string"?"":e.blankNodePrefix.replace(/^(?!_:)/,"_:"),this._lexer=e.lexer||new Ja({lineMode:l,n3:c,isImpliedBy:this._isImpliedBy}),this._explicitQuantifiers=!!e.explicitQuantifiers}static _resetBlankNodePrefix(){Xt=0}_setBase(e){if(!e)this._base="",this._basePath="";else{const r=e.indexOf("#");r>=0&&(e=e.substr(0,r)),this._base=e,this._basePath=e.indexOf("/")<0?e:e.replace(/[^\/?]*(?:\?.*)?$/,""),e=e.match(/^(?:([a-z][a-z0-9+.-]*:))?(?:\/\/[^\/]*)?/i),this._baseRoot=e[0],this._baseScheme=e[1]}}_saveContext(e,r,s,a,i){const o=this._n3Mode;this._contextStack.push({type:e,subject:s,predicate:a,object:i,graph:r,inverse:o?this._inversePredicate:!1,blankPrefix:o?this._prefixes._:"",quantified:o?this._quantified:null}),o&&(this._inversePredicate=!1,this._prefixes._=this._graph?`${this._graph.value}.`:".",this._quantified=Object.create(this._quantified))}_restoreContext(e,r){const s=this._contextStack.pop();if(!s||s.type!==e)return this._error(`Unexpected ${r.type}`,r);this._subject=s.subject,this._predicate=s.predicate,this._object=s.object,this._graph=s.graph,this._n3Mode&&(this._inversePredicate=s.inverse,this._prefixes._=s.blankPrefix,this._quantified=s.quantified)}_readInTopContext(e){switch(e.type){case"eof":return this._graph!==null?this._error("Unclosed graph",e):(delete this._prefixes._,this._callback(null,null,this._prefixes));case"PREFIX":this._sparqlStyle=!0;case"@prefix":return this._readPrefix;case"BASE":this._sparqlStyle=!0;case"@base":return this._readBaseIRI;case"{":if(this._supportsNamedGraphs)return this._graph="",this._subject=null,this._readSubject;case"GRAPH":if(this._supportsNamedGraphs)return this._readNamedGraphLabel;default:return this._readSubject(e)}}_readEntity(e,r){let s;switch(e.type){case"IRI":case"typeIRI":const a=this._resolveIRI(e.value);if(a===null)return this._error("Invalid IRI",e);s=this._factory.namedNode(a);break;case"type":case"prefixed":const i=this._prefixes[e.prefix];if(i===void 0)return this._error(`Undefined prefix "${e.prefix}:"`,e);s=this._factory.namedNode(i+e.value);break;case"blank":s=this._factory.blankNode(this._prefixes[e.prefix]+e.value);break;case"var":s=this._factory.variable(e.value.substr(1));break;default:return this._error(`Expected entity but got ${e.type}`,e)}return!r&&this._n3Mode&&s.id in this._quantified&&(s=this._quantified[s.id]),s}_readSubject(e){switch(this._predicate=null,e.type){case"[":return this._saveContext("blank",this._graph,this._subject=this._factory.blankNode(),null,null),this._readBlankNodeHead;case"(":return this._saveContext("list",this._graph,this.RDF_NIL,null,null),this._subject=null,this._readListItem;case"{":return this._n3Mode?(this._saveContext("formula",this._graph,this._graph=this._factory.blankNode(),null,null),this._readSubject):this._error("Unexpected graph",e);case"}":return this._readPunctuation(e);case"@forSome":return this._n3Mode?(this._subject=null,this._predicate=this.N3_FORSOME,this._quantifier="blankNode",this._readQuantifierList):this._error('Unexpected "@forSome"',e);case"@forAll":return this._n3Mode?(this._subject=null,this._predicate=this.N3_FORALL,this._quantifier="variable",this._readQuantifierList):this._error('Unexpected "@forAll"',e);case"literal":if(!this._n3Mode)return this._error("Unexpected literal",e);if(e.prefix.length===0)return this._literalValue=e.value,this._completeSubjectLiteral;this._subject=this._factory.literal(e.value,this._factory.namedNode(e.prefix));break;case"<<":return this._supportsRDFStar?(this._saveContext("<<",this._graph,null,null,null),this._graph=null,this._readSubject):this._error("Unexpected RDF-star syntax",e);default:if((this._subject=this._readEntity(e))===void 0)return;if(this._n3Mode)return this._getPathReader(this._readPredicateOrNamedGraph)}return this._readPredicateOrNamedGraph}_readPredicate(e){const r=e.type;switch(r){case"inverse":this._inversePredicate=!0;case"abbreviation":this._predicate=this.ABBREVIATIONS[e.value];break;case".":case"]":case"}":return this._predicate===null?this._error(`Unexpected ${r}`,e):(this._subject=null,r==="]"?this._readBlankNodeTail(e):this._readPunctuation(e));case";":return this._predicate!==null?this._readPredicate:this._error("Expected predicate but got ;",e);case"[":if(this._n3Mode)return this._saveContext("blank",this._graph,this._subject,this._subject=this._factory.blankNode(),null),this._readBlankNodeHead;case"blank":if(!this._n3Mode)return this._error("Disallowed blank node as predicate",e);default:if((this._predicate=this._readEntity(e))===void 0)return}return this._readObject}_readObject(e){switch(e.type){case"literal":if(e.prefix.length===0)return this._literalValue=e.value,this._readDataTypeOrLang;this._object=this._factory.literal(e.value,this._factory.namedNode(e.prefix));break;case"[":return this._saveContext("blank",this._graph,this._subject,this._predicate,this._subject=this._factory.blankNode()),this._readBlankNodeHead;case"(":return this._saveContext("list",this._graph,this._subject,this._predicate,this.RDF_NIL),this._subject=null,this._readListItem;case"{":return this._n3Mode?(this._saveContext("formula",this._graph,this._subject,this._predicate,this._graph=this._factory.blankNode()),this._readSubject):this._error("Unexpected graph",e);case"<<":return this._supportsRDFStar?(this._saveContext("<<",this._graph,this._subject,this._predicate,null),this._graph=null,this._readSubject):this._error("Unexpected RDF-star syntax",e);default:if((this._object=this._readEntity(e))===void 0)return;if(this._n3Mode)return this._getPathReader(this._getContextEndReader())}return this._getContextEndReader()}_readPredicateOrNamedGraph(e){return e.type==="{"?this._readGraph(e):this._readPredicate(e)}_readGraph(e){return e.type!=="{"?this._error(`Expected graph but got ${e.type}`,e):(this._graph=this._subject,this._subject=null,this._readSubject)}_readBlankNodeHead(e){return e.type==="]"?(this._subject=null,this._readBlankNodeTail(e)):(this._predicate=null,this._readPredicate(e))}_readBlankNodeTail(e){if(e.type!=="]")return this._readBlankNodePunctuation(e);this._subject!==null&&this._emit(this._subject,this._predicate,this._object,this._graph);const r=this._predicate===null;return this._restoreContext("blank",e),this._object!==null?this._getContextEndReader():this._predicate!==null?this._readObject:r?this._readPredicateOrNamedGraph:this._readPredicateAfterBlank}_readPredicateAfterBlank(e){switch(e.type){case".":case"}":return this._subject=null,this._readPunctuation(e);default:return this._readPredicate(e)}}_readListItem(e){let r=null,s=null,a=this._readListItem;const i=this._subject,o=this._contextStack,c=o[o.length-1];switch(e.type){case"[":this._saveContext("blank",this._graph,s=this._factory.blankNode(),this.RDF_FIRST,this._subject=r=this._factory.blankNode()),a=this._readBlankNodeHead;break;case"(":this._saveContext("list",this._graph,s=this._factory.blankNode(),this.RDF_FIRST,this.RDF_NIL),this._subject=null;break;case")":if(this._restoreContext("list",e),o.length!==0&&o[o.length-1].type==="list"&&this._emit(this._subject,this._predicate,this._object,this._graph),this._predicate===null){if(a=this._readPredicate,this._subject===this.RDF_NIL)return a}else if(a=this._getContextEndReader(),this._object===this.RDF_NIL)return a;s=this.RDF_NIL;break;case"literal":e.prefix.length===0?(this._literalValue=e.value,a=this._readListItemDataTypeOrLang):(r=this._factory.literal(e.value,this._factory.namedNode(e.prefix)),a=this._getContextEndReader());break;case"{":return this._n3Mode?(this._saveContext("formula",this._graph,this._subject,this._predicate,this._graph=this._factory.blankNode()),this._readSubject):this._error("Unexpected graph",e);default:if((r=this._readEntity(e))===void 0)return}if(s===null&&(this._subject=s=this._factory.blankNode()),i===null?c.predicate===null?c.subject=s:c.object=s:this._emit(i,this.RDF_REST,s,this._graph),r!==null){if(this._n3Mode&&(e.type==="IRI"||e.type==="prefixed"))return this._saveContext("item",this._graph,s,this.RDF_FIRST,r),this._subject=r,this._predicate=null,this._getPathReader(this._readListItem);this._emit(s,this.RDF_FIRST,r,this._graph)}return a}_readDataTypeOrLang(e){return this._completeObjectLiteral(e,!1)}_readListItemDataTypeOrLang(e){return this._completeObjectLiteral(e,!0)}_completeLiteral(e){let r=this._factory.literal(this._literalValue);switch(e.type){case"type":case"typeIRI":const s=this._readEntity(e);if(s===void 0)return;r=this._factory.literal(this._literalValue,s),e=null;break;case"langcode":r=this._factory.literal(this._literalValue,e.value),e=null;break}return{token:e,literal:r}}_completeSubjectLiteral(e){return this._subject=this._completeLiteral(e).literal,this._readPredicateOrNamedGraph}_completeObjectLiteral(e,r){const s=this._completeLiteral(e);if(s)return this._object=s.literal,r&&this._emit(this._subject,this.RDF_FIRST,this._object,this._graph),s.token===null?this._getContextEndReader():(this._readCallback=this._getContextEndReader(),this._readCallback(s.token))}_readFormulaTail(e){return e.type!=="}"?this._readPunctuation(e):(this._subject!==null&&this._emit(this._subject,this._predicate,this._object,this._graph),this._restoreContext("formula",e),this._object===null?this._readPredicate:this._getContextEndReader())}_readPunctuation(e){let r,s=this._graph;const a=this._subject,i=this._inversePredicate;switch(e.type){case"}":if(this._graph===null)return this._error("Unexpected graph closing",e);if(this._n3Mode)return this._readFormulaTail(e);this._graph=null;case".":this._subject=null,r=this._contextStack.length?this._readSubject:this._readInTopContext,i&&(this._inversePredicate=!1);break;case";":r=this._readPredicate;break;case",":r=this._readObject;break;case"{|":if(!this._supportsRDFStar)return this._error("Unexpected RDF-star syntax",e);const o=this._predicate,c=this._object;this._subject=this._factory.quad(a,o,c,this.DEFAULTGRAPH),r=this._readPredicate;break;case"|}":if(this._subject.termType!=="Quad")return this._error("Unexpected asserted triple closing",e);this._subject=null,r=this._readPunctuation;break;default:if(this._supportsQuads&&this._graph===null&&(s=this._readEntity(e))!==void 0){r=this._readQuadPunctuation;break}return this._error(`Expected punctuation to follow "${this._object.id}"`,e)}if(a!==null){const o=this._predicate,c=this._object;i?this._emit(c,o,a,s):this._emit(a,o,c,s)}return r}_readBlankNodePunctuation(e){let r;switch(e.type){case";":r=this._readPredicate;break;case",":r=this._readObject;break;default:return this._error(`Expected punctuation to follow "${this._object.id}"`,e)}return this._emit(this._subject,this._predicate,this._object,this._graph),r}_readQuadPunctuation(e){return e.type!=="."?this._error("Expected dot to follow quad",e):this._readInTopContext}_readPrefix(e){return e.type!=="prefix"?this._error("Expected prefix to follow @prefix",e):(this._prefix=e.value,this._readPrefixIRI)}_readPrefixIRI(e){if(e.type!=="IRI")return this._error(`Expected IRI to follow prefix "${this._prefix}:"`,e);const r=this._readEntity(e);return this._prefixes[this._prefix]=r.value,this._prefixCallback(this._prefix,r),this._readDeclarationPunctuation}_readBaseIRI(e){const r=e.type==="IRI"&&this._resolveIRI(e.value);return r?(this._setBase(r),this._readDeclarationPunctuation):this._error("Expected valid IRI to follow base declaration",e)}_readNamedGraphLabel(e){switch(e.type){case"IRI":case"blank":case"prefixed":return this._readSubject(e),this._readGraph;case"[":return this._readNamedGraphBlankLabel;default:return this._error("Invalid graph label",e)}}_readNamedGraphBlankLabel(e){return e.type!=="]"?this._error("Invalid graph label",e):(this._subject=this._factory.blankNode(),this._readGraph)}_readDeclarationPunctuation(e){return this._sparqlStyle?(this._sparqlStyle=!1,this._readInTopContext(e)):e.type!=="."?this._error("Expected declaration to end with a dot",e):this._readInTopContext}_readQuantifierList(e){let r;switch(e.type){case"IRI":case"prefixed":if((r=this._readEntity(e,!0))!==void 0)break;default:return this._error(`Unexpected ${e.type}`,e)}return this._explicitQuantifiers?(this._subject===null?this._emit(this._graph||this.DEFAULTGRAPH,this._predicate,this._subject=this._factory.blankNode(),this.QUANTIFIERS_GRAPH):this._emit(this._subject,this.RDF_REST,this._subject=this._factory.blankNode(),this.QUANTIFIERS_GRAPH),this._emit(this._subject,this.RDF_FIRST,r,this.QUANTIFIERS_GRAPH)):this._quantified[r.id]=this._factory[this._quantifier](this._factory.blankNode().value),this._readQuantifierPunctuation}_readQuantifierPunctuation(e){return e.type===","?this._readQuantifierList:(this._explicitQuantifiers&&(this._emit(this._subject,this.RDF_REST,this.RDF_NIL,this.QUANTIFIERS_GRAPH),this._subject=null),this._readCallback=this._getContextEndReader(),this._readCallback(e))}_getPathReader(e){return this._afterPath=e,this._readPath}_readPath(e){switch(e.type){case"!":return this._readForwardPath;case"^":return this._readBackwardPath;default:const r=this._contextStack,s=r.length&&r[r.length-1];if(s&&s.type==="item"){const a=this._subject;this._restoreContext("item",e),this._emit(this._subject,this.RDF_FIRST,a,this._graph)}return this._afterPath(e)}}_readForwardPath(e){let r,s;const a=this._factory.blankNode();if((s=this._readEntity(e))!==void 0)return this._predicate===null?(r=this._subject,this._subject=a):(r=this._object,this._object=a),this._emit(r,s,a,this._graph),this._readPath}_readBackwardPath(e){const r=this._factory.blankNode();let s,a;if((s=this._readEntity(e))!==void 0)return this._predicate===null?(a=this._subject,this._subject=r):(a=this._object,this._object=r),this._emit(r,s,a,this._graph),this._readPath}_readRDFStarTailOrGraph(e){return e.type!==">>"?this._supportsQuads&&this._graph===null&&(this._graph=this._readEntity(e))!==void 0?this._readRDFStarTail:this._error(`Expected >> to follow "${this._object.id}"`,e):this._readRDFStarTail(e)}_readRDFStarTail(e){if(e.type!==">>")return this._error(`Expected >> but got ${e.type}`,e);const r=this._factory.quad(this._subject,this._predicate,this._object,this._graph||this.DEFAULTGRAPH);return this._restoreContext("<<",e),this._subject===null?(this._subject=r,this._readPredicate):(this._object=r,this._getContextEndReader())}_getContextEndReader(){const e=this._contextStack;if(!e.length)return this._readPunctuation;switch(e[e.length-1].type){case"blank":return this._readBlankNodeTail;case"list":return this._readListItem;case"formula":return this._readFormulaTail;case"<<":return this._readRDFStarTailOrGraph}}_emit(e,r,s,a){this._callback(null,this._factory.quad(e,r,s,a||this.DEFAULTGRAPH))}_error(e,r){const s=new Error(`${e} on line ${r.line}.`);s.context={token:r,line:r.line,previousToken:this._lexer.previousToken},this._callback(s),this._callback=Ae}_resolveIRI(e){return/^[a-z][a-z0-9+.-]*:/i.test(e)?e:this._resolveRelativeIRI(e)}_resolveRelativeIRI(e){if(!e.length)return this._base;switch(e[0]){case"#":return this._base+e;case"?":return this._base.replace(/(?:\?.*)?$/,e);case"/":return(e[1]==="/"?this._baseScheme:this._baseRoot)+this._removeDotSegments(e);default:return/^[^/:]*:/.test(e)?null:this._removeDotSegments(this._basePath+e)}}_removeDotSegments(e){if(!/(^|\/)\.\.?($|[/#?])/.test(e))return e;const r=e.length;let s="",a=-1,i=-1,o=0,c="/";for(;a<r;){switch(c){case":":if(i<0&&e[++a]==="/"&&e[++a]==="/")for(;(i=a+1)<r&&e[i]!=="/";)a=i;break;case"?":case"#":a=r;break;case"/":if(e[a+1]===".")switch(c=e[++a+1],c){case"/":s+=e.substring(o,a-1),o=a+1;break;case void 0:case"?":case"#":return s+e.substring(o,a)+e.substr(a+1);case".":if(c=e[++a+1],c===void 0||c==="/"||c==="?"||c==="#"){if(s+=e.substring(o,a-2),(o=s.lastIndexOf("/"))>=i&&(s=s.substr(0,o)),c!=="/")return`${s}/${e.substr(a+1)}`;o=a+1}}}c=e[++a]}return s+e.substring(o)}parse(e,r,s){let a,i,o;if(r&&(r.onQuad||r.onPrefix||r.onComment)?(a=r.onQuad,i=r.onPrefix,o=r.onComment):(a=r,i=s),this._readCallback=this._readInTopContext,this._sparqlStyle=!1,this._prefixes=Object.create(null),this._prefixes._=this._blankNodePrefix?this._blankNodePrefix.substr(2):`b${Xt++}_`,this._prefixCallback=i||Ae,this._inversePredicate=!1,this._quantified=Object.create(null),!a){const l=[];let h;if(this._callback=(u,m)=>{u?h=u:m&&l.push(m)},this._lexer.tokenize(e).every(u=>this._readCallback=this._readCallback(u)),h)throw h;return l}let c=(l,h)=>{l!==null?(this._callback(l),this._callback=Ae):this._readCallback&&(this._readCallback=this._readCallback(h))};o&&(this._lexer.comments=!0,c=(l,h)=>{l!==null?(this._callback(l),this._callback=Ae):this._readCallback&&(h.type==="comment"?o(h.value):this._readCallback=this._readCallback(h))}),this._callback=a,this._lexer.tokenize(e,c)}}function Ae(){}function Gr(t,e){t._factory=e,t.DEFAULTGRAPH=e.defaultGraph(),t.RDF_FIRST=e.namedNode(Z.rdf.first),t.RDF_REST=e.namedNode(Z.rdf.rest),t.RDF_NIL=e.namedNode(Z.rdf.nil),t.N3_FORALL=e.namedNode(Z.r.forAll),t.N3_FORSOME=e.namedNode(Z.r.forSome),t.ABBREVIATIONS={a:e.namedNode(Z.rdf.type),"=":e.namedNode(Z.owl.sameAs),">":e.namedNode(Z.log.implies),"<":e.namedNode(Z.log.isImpliedBy)},t.QUANTIFIERS_GRAPH=e.namedNode("urn:n3:quantifiers")}Gr(qr.prototype,ei);async function ai(t,e={}){const r=e.webId??t.info?.webId;if(!r?.trim()||typeof t.fetch!="function")return null;const s=di(r),a=await t.fetch(s,{headers:{Accept:"text/turtle, application/ld+json;q=0.9, text/n3;q=0.8, */*;q=0.1"}});if(!a.ok)throw new Error(`Failed to fetch WebID profile: ${a.status} ${a.statusText}`.trim());const i=a.headers.get("content-type")??"",o=await a.text();if(!o.trim())return qt(r,null);const c=await ii(o,{contentType:i,profileDocumentUrl:s,webId:r});return qt(r,c)}async function ii(t,e){return(e.contentType?.toLowerCase()??"").includes("application/ld+json")||t.trimStart().startsWith("{")?ci(t,e.webId):await oi(t,e)}async function oi(t,e){const r=qr,a=new r({baseIRI:e.profileDocumentUrl}).parse(t);return li(a,e.webId)}function ci(t,e){try{const r=JSON.parse(t),s=Array.isArray(r)?r:je(r)&&Array.isArray(r["@graph"])?r["@graph"]:[r],a=s.find(o=>je(o)&&o["@id"]===e),i=je(a)?a:s.find(je);return i?Wr({id:e,name:ae(i,V.fn),nick:ae(i,lr.nick),avatar:ae(i,V.hasPhoto),note:ae(i,V.note),email:ae(i,V.hasEmail),phone:ae(i,V.hasTelephone),region:ae(i,V.region),gender:ae(i,V.hasGender)}):null}catch{return null}}function li(t,e){const r={id:e};for(const s of t){if(s.subject.value!==e)continue;const a=s.predicate.value,i=s.object.value;!a||!i||(a===V.fn?r.name=i:a===lr.nick?r.nick=i:a===V.hasPhoto?r.avatar=i:a===V.note?r.note=i:a===V.hasEmail?r.email=i:a===V.hasTelephone?r.phone=i:a===V.region?r.region=i:a===V.hasGender&&(r.gender=i))}return Wr(r)}function qt(t,e){return{webId:t,profile:e,displayName:ws(e),username:Wa(t)}}function Wr(t){const e=Object.fromEntries(Object.entries(t).filter(([,r])=>typeof r=="string"&&r.trim()));return Object.keys(e).length>1?e:null}function ae(t,e){return it(t[e])}function it(t){if(typeof t=="string")return t;if(Array.isArray(t))return t.map(it).find(Boolean);if(je(t))return it(t["@value"]??t["@id"])}function di(t){const e=t.indexOf("#");return e>=0?t.slice(0,e):t}function je(t){return typeof t=="object"&&t!==null}function xt({accountIdentity:t,runtime:e}){const r=e?.state.status,s=r==="authenticated"&&e?e.webId??e.state.webId:t?.webId,a=r==="authenticated"&&s?void 0:t,i=a?.displayName,o=a?.username,c=a?.id,l=a?.webId,h=e?.fetch,u=d.useMemo(()=>ui({displayName:i,username:o,id:c},s),[i,c,o,l,s]),m=`${s??""}\0${u.displayName}\0${u.username??""}`,[f,x]=d.useState(),[p,g]=d.useState(!1);d.useEffect(()=>{const P=h;if(r!=="authenticated"||!P||!s)return;let j=!1,b;async function y(I,R){g(!0);try{const N=await ai({info:{webId:R},fetch:I});if(j||!N)return;const E=fi(N.profile?.avatar);let S=E;if(E&&(S=await hi(I,E),b=S?.startsWith("blob:")?S:void 0),j){b&&URL.revokeObjectURL(b);return}x({key:m,value:{displayName:N.displayName??N.username??u.displayName,username:N.username||u.username,avatarUrl:S??u.avatarUrl,avatarSourceUrl:E,note:N.profile?.note||u.note,region:N.profile?.region||u.region,webId:N.webId||u.webId,loading:!1,source:"webid-profile"}})}catch{j||x(void 0)}finally{j||g(!1)}}return y(P,s),()=>{j=!0,b&&URL.revokeObjectURL(b)}},[h,u,m,r,s]);const v=r==="authenticated"?p:!1;return r==="authenticated"&&f?.key===m?{...f.value,loading:v}:{...u,loading:v}}function ui(t,e){const r=t?.username||pi(e)||t?.id;return{displayName:t?.displayName||r||t?.id||"Xpod account",username:r,webId:e,loading:!1,source:"account"}}async function hi(t,e){try{const r=await t(e);if(!r.ok)return e;const s=await r.blob();return URL.createObjectURL(s)}catch{return e}}function fi(t){if(t)try{const e=new URL(t);return e.protocol==="http:"||e.protocol==="https:"?e.href:void 0}catch{return}}function pi(t){if(t)try{const e=new URL(t);return e.pathname.split("/").filter(Boolean).at(0)||e.hostname}catch{return}}const mi=d.createContext(null);function gi({value:t,children:e}){return d.createElement(mi.Provider,{value:t},e)}async function bi(t){const{Parser:e,Writer:r,DataFactory:s}=await re(async()=>{const{Parser:_,Writer:L,DataFactory:O}=await import("./index-DvMG5pHk.js");return{Parser:_,Writer:L,DataFactory:O}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),{UDFS:a,RDF:i}=await re(async()=>{const{UDFS:_,RDF:L}=await import("./xpod-remembered-login-Dr69A0Rv.js").then(O=>O.by);return{UDFS:_,RDF:L}},__vite__mapDeps([1,2,3,4,5,6,7])),o=new URL(t.approval),c=new URL(t.decisionBy);if(![o,c].every(_=>["https:","http:"].includes(_.protocol)&&!_.username&&!_.password))throw new Error("Approval and decision identity must be HTTP(S) IRIs without credentials.");if(!["approved","rejected"].includes(t.decision))throw new Error("Invalid approval decision.");const l=o.href;o.hash="";const h=o.href,u=await t.authenticatedFetch(h,{headers:{accept:"text/turtle"},cache:"no-store",redirect:"error"});if(u.status===404)return{status:"not_found"};if(!u.ok)throw new Error(`Approval read failed: HTTP ${u.status}`);const m=u.headers.get("etag"),f=await u.text();if(!m||!/^"[^"\r\n]+"$/.test(m))return{status:"unavailable",reason:"A strong ETag is required for approval decisions."};if(!u.headers.get("content-type")?.toLowerCase().includes("text/turtle"))return{status:"unavailable",reason:"The approval document must be served as Turtle."};const x=new e({baseIRI:h}).parse(f),p=_=>x.filter(L=>L.subject.termType==="NamedNode"&&L.subject.value===l&&L.predicate.value===_).map(L=>L.object);if(!p(i.type).some(_=>_.termType==="NamedNode"&&_.value===a.ApprovalRequest))return{status:"not_found"};const g=p(a.status);if(g.length!==1||g[0].termType!=="Literal"||!["pending","handling"].includes(g[0].value)||p(a.resolvedAt).length)return{status:"not_actionable",reason:"Approval is already decided or has ambiguous state."};if(p(a.assignedTo).some(_=>_.termType!=="NamedNode"||_.value!==c.href))return{status:"not_actionable",reason:"Approval belongs to another decision maker."};const P=t.now??(()=>new Date),j=()=>p(a.expiresAt).some(_=>{const L=Date.parse(_.value);return!Number.isFinite(L)||L<=P().getTime()});if(j())return{status:"not_actionable",reason:"Approval has expired."};const b=p(a.leaseOwner),y=p(a.leaseExpiresAt);if((b.length||y.length)&&(b.length!==1||b[0].termType!=="Literal"||y.length!==1||y[0].termType!=="Literal"||!Number.isFinite(Date.parse(y[0].value))||Date.parse(y[0].value)>P().getTime()))return{status:"conflict",reason:"Approval is being handled by another client."};const I=new Set([a.status,a.decisionBy,a.resolvedAt]),R=x.filter(_=>_.subject.value!==l||!I.has(_.predicate.value)),N=s.namedNode(l);R.push(s.quad(N,s.namedNode(a.status),s.literal(t.decision)),s.quad(N,s.namedNode(a.decisionBy),s.namedNode(c.href)),s.quad(N,s.namedNode(a.resolvedAt),s.literal(P().toISOString(),s.namedNode("http://www.w3.org/2001/XMLSchema#dateTime"))));const E=await new Promise((_,L)=>{const O=new r({format:"Turtle"});O.addQuads(R),O.end((U,H)=>U?L(U):_(H))});if(t.isCurrent&&!t.isCurrent())return{status:"not_actionable",reason:"The current session changed."};if(j())return{status:"not_actionable",reason:"Approval has expired."};const S=await t.authenticatedFetch(h,{method:"PUT",headers:{"content-type":"text/turtle","if-match":m},body:E,redirect:"error"});if(await S.arrayBuffer(),S.status===412)return{status:"conflict",reason:"Another client changed the approval. Refresh before deciding again."};if(!S.ok)throw new Error(`Approval decision failed: HTTP ${S.status}`);return{status:"decided"}}const Re=ys;function xi(){const t=br(),e=Re(),r=e.selectedStorage,s=xt({accountIdentity:t.identity,runtime:e}),a=e.state.status==="authenticated"?e.webId??e.state.webId:void 0,i=Oe(),o=js(t.idpIndex),c=t.isInitializing?void 0:xr(t.idpIndex),l=c?new URL(c).origin:void 0,h=l?dr(void 0,t.idpIndex):void 0,u=o===!0?h??(i&&i.issuer===l?i.account.email:void 0):void 0;return d.useEffect(()=>{!l||o===!1||!a||!r||!e.currentPod||r.webId===a&&(e.currentPod.webId!==a||e.currentPod.podUrl!==r.storageUrl||i&&!Is(i,{accountIdentity:t.identity,accountEmail:h,webId:a,selectedStorage:r})||Ns({issuer:l,account:{...u?{email:u}:{},...t.identity??{},displayName:s.displayName,...s.username?{username:s.username}:{},...s.avatarSourceUrl??i?.account.avatarUrl?{avatarUrl:s.avatarSourceUrl??i?.account.avatarUrl}:{}},webId:a,storageBinding:r,routeId:Ss}))},[t.identity,l,o,u,h,s.displayName,s.avatarSourceUrl,s.username,i,e.currentPod,r,a]),null}const vi=80,_i=2048;function wi(){const t=Re(),e=xt({runtime:t}),r=t.state.status==="authenticated"?t.webId??t.state.webId:void 0,s=t.state.status==="authenticated"?t.currentPod?.podUrl??t.podUrl??t.state.podUrl:void 0,a=d.useMemo(()=>yi({isLoggedIn:t.state.status==="authenticated",displayName:e.displayName,username:e.username,webId:r,podUrl:s}),[e.displayName,e.username,t.state.status,s,r]);return d.useEffect(()=>{globalThis.xpodDesktop?.setIdentity(a)},[a]),d.useEffect(()=>()=>{globalThis.xpodDesktop?.setIdentity(null)},[]),null}function yi({isLoggedIn:t,displayName:e,username:r,webId:s,podUrl:a}){if(!t)return null;const i=Gt(e)??Gt(r)??"WebID",o=Wt(s),c=Wt(a);return{label:i,...o?{webId:o}:{},...c?{podUrl:c}:{}}}function Gt(t){if(!t)return;const r=Array.from(t,s=>{const a=s.codePointAt(0);return ji(a)?" ":s}).join("").replace(/\s+/g," ").trim();if(r)return Array.from(r).slice(0,vi).join("").trim()}function ji(t){return t<32||t>=127&&t<=159||t>=8234&&t<=8238||t>=8294&&t<=8297}function Wt(t){if(!(!t||t.length>_i))try{const e=new URL(t);return e.protocol!=="http:"&&e.protocol!=="https:"||e.username||e.password?void 0:e.toString()}catch{return}}function Ii({children:t}){const[e,r]=d.useState(!1),s=d.useRef(()=>{});return d.useEffect(()=>{let a=!1,i,o,c=0;async function l(){if(a||i)return;clearTimeout(o);const u=new AbortController;i=u;const m=setTimeout(()=>u.abort(),5e3);let f=!0;try{const x=await fetch("/service/status",{cache:"no-store",signal:u.signal});if(f=x.status<500,x.ok){const p=await x.json().catch(()=>null);Array.isArray(p)&&(f=!p.some(g=>g&&["css","api"].includes(g.name)&&typeof g.status=="string"&&g.status!=="running")),u.signal.aborted&&(f=!1)}else await x.body?.cancel()}catch{f=!1}finally{clearTimeout(m),i=void 0}a||(c=f?0:c+1,r(!f),o=setTimeout(()=>{document.visibilityState!=="hidden"&&l()},f?1e4:Math.min(2e3*2**Math.min(c-1,4),3e4)))}const h=()=>{document.visibilityState!=="hidden"&&l()};return s.current=()=>{l()},window.addEventListener("online",h),window.addEventListener("focus",h),document.addEventListener("visibilitychange",h),l(),()=>{a=!0,clearTimeout(o),i?.abort(),s.current=()=>{},window.removeEventListener("online",h),window.removeEventListener("focus",h),document.removeEventListener("visibilitychange",h)}},[]),n.jsxs("div",{className:"flex h-dvh min-h-0 flex-col",style:{"--xpod-shell-height":"100%"},children:[e&&n.jsxs("section",{role:"alert","aria-label":"Xpod 连接中断",className:"flex shrink-0 flex-wrap items-center gap-x-4 gap-y-2 border-b border-border bg-background px-4 py-2 text-sm",children:[n.jsxs("div",{className:"min-w-0 flex-1",children:[n.jsx("span",{className:"font-medium",children:"Xpod 连接中断"}),n.jsx("span",{className:"ml-2 text-muted-foreground",children:"正在自动重连;你仍可打开这台设备和设置。"}),n.jsxs("details",{className:"text-xs text-muted-foreground",children:[n.jsx("summary",{children:"页面与未完成操作"}),"登录状态和当前页面已保留。未完成的操作不会自动重试,请在连接恢复后确认结果。"]})]}),n.jsx("button",{type:"button",onClick:()=>s.current(),className:"shrink-0 rounded-lg bg-primary px-3 py-2 text-primary-foreground",children:"立即重试"})]}),n.jsx("div",{className:"min-h-0 flex-1",children:t})]})}function Ni(){const t=fr();return d.useEffect(()=>globalThis.xpodDesktop?.onNavigate?.(e=>{const r=new URL(e,window.location.origin);r.origin===window.location.origin&&t(`${r.pathname}${r.search}${r.hash}`)}),[t]),null}const Se="/ai-connections",$={pod:"/pod/models",status:"/device/services",network:"/device/network",aiConnections:"/ai-connections"},Hr={"/dashboard":$.status,"/dashboard/overview":$.status,"/dashboard/status":$.status,"/dashboard/runtime":"/device/runtime","/dashboard/logs":"/device/logs","/dashboard/network":$.network,"/dashboard/usage":"/pod/data","/dashboard/models":$.aiConnections,"/dashboard/pod":$.pod,"/dashboard/services":$.status,"/dashboard/settings":"/device/runtime","/status":$.status,"/status/overview":$.status,"/status/services/gateway":$.status,"/status/services/solid-server":$.status,"/status/services/api-server":$.status,"/status/logs":"/device/logs","/network":$.network,"/network/overview":$.network,"/settings/models":$.aiConnections,"/settings/ai-connections":$.aiConnections,"/settings/ai-config":$.pod,"/settings/pod":$.pod,"/settings/identity-access":"/pod/apps","/settings/storage":"/pod/data","/settings/network":$.network,"/settings/services":$.status,"/settings/system":"/device/runtime","/settings/runtime":"/device/runtime","/ai-config":$.pod,"/ai-config/model-assignments":$.pod,"/ai-config/document-processing":$.pod,"/ai-config/search-indexing":"/pod/search","/ai-config/index-lifecycle":"/pod/search"},yc=[...["/dashboard","/status","/network"].map(t=>({app:"dashboard",basename:t})),...["/settings","/ai-connections","/ai-config","/tasks","/pod","/device","/inbox","/notifications"].map(t=>({app:"settings",basename:t}))];function Si(t){return Hr[t.replace(/\/$/,"")]??t}const ki="https://id.undefineds.co/app/xpod-desktop-client.json",Ri={client_id:ki},Vr=1,Pi="xpod.auth.transaction.v1",Ci=600*1e3,Qr=1,me="xpod.auth.selected-storage.v1",Li=1440*60*1e3;class T extends Error{code;constructor(e,r){super(r),this.name="XpodLoginTransactionError",this.code=e}}function jc(t,e={}){const r=e.storage??_t()??vt();if(!r)throw new T("storage_unavailable","Session storage is unavailable");const s=new URL(e.origin??wt()).origin,a=e.storageRoot??s,i=Yr(t,a,e.storageRoot===void 0),c=(e.now??(()=>Date.now()))(),l={version:Qr,createdAt:c,expiresAt:c+(e.ttlMs??Li),binding:i,...e.storageRoot===void 0?{}:{storageRoot:Zr(e.storageRoot)}};r.setItem(me,JSON.stringify(l))}function Ei(t={}){return t.storage?We(t.storage,t):We(_t(),t)??We(vt(),t)}function We(t,e){if(!t)return;const r=t.getItem(me);if(!r)return;const s=()=>t.removeItem(me);let a;try{a=JSON.parse(r)}catch{s();return}if(!Di(a)){s();return}const i=e.now??(()=>Date.now());if(a.expiresAt<=i()){s();return}let o;try{o=Yr(a.binding,a.storageRoot??new URL(e.origin??wt()).origin,a.storageRoot===void 0)}catch{s();return}if(e.webId!==void 0&&o.webId!==e.webId){s();return}return o}function He(t={}){t.storage?.removeItem(me);try{_t()?.removeItem(me),vt()?.removeItem(me)}catch{}}function Kr(){const t=globalThis.crypto;if(typeof t?.randomUUID=="function")return t.randomUUID();if(typeof t?.getRandomValues=="function"){const e=new Uint8Array(24);return t.getRandomValues(e),`xpod-${Array.from(e,r=>r.toString(16).padStart(2,"0")).join("")}`}throw new T("storage_unavailable","Secure transaction id generation is unavailable")}function Ai(t={}){const e=t.storage??Oi(),r=new URL(t.origin??wt()).origin,s=t.now??(()=>Date.now()),a=t.ttlMs??Ci,i=t.prefix??Pi,o=`${i}.active`,c=f=>`${i}.record.${f}`,l=f=>`${i}.consumed.${f}`,h=f=>{e.getItem(o)===f&&e.removeItem(o),e.removeItem(c(f))},u=(f,x=!0)=>{if(!Vt(f))throw new T("malformed","Transaction id is malformed");if(e.getItem(l(f))==="1")throw new T("consumed","Transaction has already been consumed");if(x&&e.getItem(o)!==f)throw new T("unknown","Transaction is not the active Xpod login transaction");const p=e.getItem(c(f));if(!p)throw x&&e.getItem(o)===f&&e.removeItem(o),new T("unknown","Xpod login transaction was not found");let g;try{g=JSON.parse(p)}catch{throw h(f),new T("malformed","Xpod login transaction is malformed")}if(!Ui(g)||g.transaction.id!==f)throw h(f),new T("malformed","Xpod login transaction is malformed");if(g.expiresAt<=s())throw h(f),new T("expired","Xpod login transaction has expired");try{const v=Ht({...g.transaction,authorizationSurface:"redirect",discovery:"strict"},r);return g.transaction={id:v.id,route:v.route,...v.returnTo===void 0?{}:{returnTo:v.returnTo},...v.prompt===void 0?{}:{prompt:v.prompt},...v.selectedStorage===void 0?{}:{selectedStorage:v.selectedStorage}},g}catch(v){throw h(f),v instanceof T?v:new T("malformed","Xpod login transaction is malformed")}};return{begin:f=>{const x=e.getItem(o);if(x){try{u(x)}catch(b){if(!(b instanceof T&&(b.code==="expired"||b.code==="malformed"||b.code==="unknown")))throw b}if(e.getItem(o)===x)throw new T("already_active","An Xpod login transaction is already pending in this tab")}const p=Vt(f.id)?f.id:Kr(),g=Ht({...f,id:p},r),v=s(),P=v+a,j={version:Vr,createdAt:v,expiresAt:P,transaction:{id:g.id,route:g.route,...g.returnTo===void 0?{}:{returnTo:g.returnTo},...g.prompt===void 0?{}:{prompt:g.prompt},...g.selectedStorage===void 0?{}:{selectedStorage:g.selectedStorage}}};return e.setItem(c(g.id),JSON.stringify(j)),e.setItem(o,g.id),g},readSinglePending(){const f=e.getItem(o);if(f)return Ve(u(f).transaction)},updateSelectedStorage(f,x){const p=u(f),g=Ve(p.transaction),v=Jr(x,r,g.route.storageProvider?.url),P={...p,transaction:{...p.transaction,selectedStorage:v}};e.setItem(c(f),JSON.stringify(P))},consume(f){const x=u(f),p=Ve(x.transaction);return e.removeItem(o),e.removeItem(c(f)),e.setItem(l(f),"1"),p},cancel(f){u(f),e.removeItem(o),e.removeItem(c(f)),e.setItem(l(f),"1")}}}function Ht(t,e){let r;try{r=ks(t)}catch(i){throw new T("malformed",i instanceof Error?i.message:"Transaction is malformed")}let s;try{s=Rs(r.route,e)}catch(i){throw new T("cross_origin",i instanceof Error?i.message:"Transaction route is not local")}let a;try{a=Ze(r.returnTo)}catch(i){throw new T("mismatch",i instanceof Error?i.message:"Transaction return path is unsafe")}if(r.selectedStorage!==void 0)try{const i=Jr(r.selectedStorage,e,s.storageProvider?.url);return{id:r.id,route:s,selectedStorage:i,authorizationSurface:"redirect",discovery:"strict",...a===void 0?{}:{returnTo:a},...r.prompt===void 0?{}:{prompt:r.prompt}}}catch(i){throw i instanceof T?i:new T("mismatch","Selected storage binding is invalid")}return{id:r.id,route:s,authorizationSurface:"redirect",discovery:"strict",...a===void 0?{}:{returnTo:a},...r.prompt===void 0?{}:{prompt:r.prompt}}}function Jr(t,e,r){if(!t||typeof t.storageUrl!="string"||typeof t.webId!="string"||ut(t.webId))throw new T("malformed","Selected storage binding is malformed");let s,a;try{s=new URL(t.storageUrl),a=new URL(t.webId)}catch{throw new T("malformed","Selected storage binding is malformed")}if(!["http:","https:"].includes(s.protocol)||!["http:","https:"].includes(a.protocol))throw new T("cross_origin","Selected storage binding must use web URLs");if(s.origin!==e||a.origin!==e||r&&s.origin!==new URL(r).origin)throw new T("cross_origin","Selected storage binding is not local to this Xpod");if(s.username||s.password||s.hash||a.username||a.password)throw new T("malformed","Selected storage binding contains unsafe URL data");return{storageUrl:s.href,webId:t.webId,...t.label===void 0?{}:{label:t.label}}}function Ve(t){return{id:t.id,route:t.route,authorizationSurface:"redirect",discovery:"strict",...t.returnTo===void 0?{}:{returnTo:t.returnTo},...t.prompt===void 0?{}:{prompt:t.prompt},...t.selectedStorage===void 0?{}:{selectedStorage:t.selectedStorage}}}function Yr(t,e,r){if(!t||typeof t.storageUrl!="string"||typeof t.webId!="string"||ut(t.webId))throw new T("malformed","Selected storage binding is malformed");let s,a;try{s=new URL(t.storageUrl),a=new URL(t.webId)}catch{throw new T("malformed","Selected storage binding is malformed")}if(!["http:","https:"].includes(s.protocol)||!["http:","https:"].includes(a.protocol))throw new T("cross_origin","Selected storage binding must use web URLs");if(!Ti(s,e)||r&&a.origin!==new URL(e).origin||s.username||s.password||s.hash||a.username||a.password)throw new T("cross_origin","Selected storage binding is not local to this Xpod");return{storageUrl:s.href,webId:t.webId}}function Zr(t){const e=new URL(t);return e.hash="",e.search="",e.pathname.endsWith("/")||(e.pathname+="/"),e.href}function Ti(t,e){const r=new URL(Zr(e));if(t.origin!==r.origin)return!1;const s=r.pathname;return t.pathname===s.slice(0,-1)||t.pathname.startsWith(s)}function Vt(t){return typeof t=="string"&&/^[A-Za-z0-9_-]{16,128}$/.test(t)}function Ui(t){if(!t||typeof t!="object")return!1;const e=t;return e.version===Vr&&typeof e.createdAt=="number"&&typeof e.expiresAt=="number"&&!!(e.transaction&&typeof e.transaction=="object")}function Di(t){if(!t||typeof t!="object")return!1;const e=t;return e.version===Qr&&typeof e.createdAt=="number"&&typeof e.expiresAt=="number"&&!!(e.binding&&typeof e.binding=="object")}function Oi(){try{if(typeof window<"u"&&window.sessionStorage)return window.sessionStorage}catch{}throw new T("storage_unavailable","Session storage is unavailable")}function vt(){try{if(typeof window<"u"&&window.sessionStorage)return window.sessionStorage}catch{}}function _t(){try{if(typeof window<"u"&&window.localStorage)return window.localStorage}catch{}}function wt(){return typeof window<"u"&&window.location.origin!=="null"?window.location.origin:"http://localhost"}function Fi({collection:t,assertCurrent:e,accountIndex:r,fetch:s=window.fetch.bind(window)}){const a=async(...l)=>{e();const h=await s(...l);try{e()}catch(u){throw h.body?.cancel().catch(()=>{}),u}return h},i=new Set,o=async l=>{e();const h=await pt(l,a,r);if(e(),!h||!new URL(h).pathname.startsWith("/.account/"))throw new Error("客户端凭据地址不属于可信账号服务。");return h},c=(l,h,u)=>(e(),a(l,{method:h,credentials:"include",redirect:"error",headers:mt({Accept:"application/json",...u?{"Content-Type":"application/json"}:{}},r),...u?{body:JSON.stringify(u)}:{}}));return{async create({name:l,webId:h}){if(!l.trim()||!h)throw new Error("创建客户端凭据需要名称和当前 WebID。");const u=await c(await o(t),"POST",{name:l.trim(),webId:h});if(!u.ok)throw new Error(`创建客户端凭据失败(HTTP ${u.status})。`);const m=await u.json();if(e(),typeof m.id!="string"||!m.id||m.id.includes(":")||typeof m.secret!="string"||!m.secret||typeof m.resource!="string"||!m.resource)throw new Error("账号服务未返回有效的客户端凭据。");const f=await o(m.resource),x=new TextEncoder().encode(`${m.id}:${m.secret}`),p=btoa(Array.from(x,g=>String.fromCharCode(g)).join(""));return e(),{apiKey:`sk-${p}`,resource:f}},async list(){const l=await c(await o(t),"GET");if(!l.ok)throw new Error(`读取客户端凭据失败(HTTP ${l.status})。`);const h=await l.json();e();const u=Object.entries(h.clientCredentials??{}),m=await Promise.all(u.map(async([f,x])=>({clientId:f,label:f,resource:await o(String(x))})));return e(),m},async revoke({clientId:l,resource:h,webId:u}){const m=await o(h),f=JSON.stringify([m,l,u]),x=await c(m,"GET");if(x.status===404||x.status===410){if(i.has(f))return;throw new Error("无法确认客户端凭据已撤销,请检查当前 Account 登录;Key 记录已保留。")}if(!x.ok)throw new Error(`读取客户端凭据失败(HTTP ${x.status})。`);const p=await x.json();if(e(),p.id!==l||p.webId!==u)throw new Error("客户端凭据与当前 Key 或 WebID 不匹配,未执行删除。");const g=await c(m,"DELETE");if(!g.ok)throw new Error(`撤销客户端凭据失败(HTTP ${g.status})。`);i.add(f)}}}class ee extends Error{code;constructor(e,r){super(r),this.name="AccountStorageBindingsError",this.code=e}}async function $i(t){const e=zi(t.origin),r=t.controls?.account?.bindings;if(typeof r!="string"||r.trim()==="")throw new ee("missing-control","Account storage bindings control is unavailable");const s=t.fetchImpl??fetch,a=Mi(r,e),i=a.origin===e?a.href:await pt(a.href,s,t.trustedAccountIndex);if(!i)throw new ee("cross-origin","Account storage bindings control is not hosted by this Xpod");const o=mt({Accept:"application/json",...t.headers});let c;try{c=await s(i,{headers:o,credentials:"include"})}catch(h){throw new ee("request-failed",h instanceof Error?h.message:"Failed to load Account storage bindings")}if(c.status===401||c.status===403)throw new ee("forbidden","Account storage bindings require an authenticated Account");if(!c.ok)throw new ee("request-failed",`Account storage bindings request failed (${c.status})`);let l;try{l=await c.json()}catch{throw new ee("invalid-response","Account storage bindings response is not valid JSON")}return Bi(l,a.origin,Gi(a,t.trustedAccountIndex,e))}function Bi(t,e,r=!1){if(!Qt(t)||!Array.isArray(t.bindings))throw new ee("invalid-response","Account storage bindings response is malformed");const s=[],a=new Set;for(const i of t.bindings){if(!Qt(i)||typeof i.webId!="string"||typeof i.storageUrl!="string")throw new ee("invalid-response","Account storage binding row is malformed");const o=Xi(i.webId),c=qi(i.storageUrl,r?void 0:e);if(!o||!c)throw new ee("cross-origin","Account storage binding is outside the trusted storage scope");const l={webId:o,storageUrl:c,...typeof i.label=="string"?{label:i.label}:{}},h=`${l.webId}
|
|
4
|
-
${l.storageUrl}`;a.has(h)||(a.add(h),s.push(l))}return s}function zi(t){try{return new URL(t??(typeof window>"u"?"http://localhost":window.location.origin)).origin}catch{throw new ee("cross-origin","Current Xpod origin is invalid")}}function Mi(t,e){try{const r=new URL(t,e);if(!["http:","https:"].includes(r.protocol)||r.username||r.password||r.hash)throw new Error("unsafe control URL");return r}catch{throw new ee("cross-origin","Account storage bindings control is not a valid URL")}}function Xi(t){if(!ut(t))try{const e=new URL(t);return!["http:","https:"].includes(e.protocol)||e.username||e.password?void 0:t}catch{return}}function qi(t,e){try{const r=new URL(t.trim());return e!==void 0&&r.origin!==e||!["http:","https:"].includes(r.protocol)||r.username||r.password||r.search||r.hash?void 0:(r.pathname=r.pathname.endsWith("/")?r.pathname:`${r.pathname}/`,r.href)}catch{return}}function Gi(t,e,r){if(!e)return!1;try{const s=new URL(e,r);return s.pathname.startsWith("/.account/")&&t.origin===s.origin&&t.pathname.startsWith("/.account/")}catch{return!1}}function Qt(t){return!!(t&&typeof t=="object"&&!Array.isArray(t))}function Wi(t){let e;const r=t.webId,s=t.name?.trim()||"Xpod 会话凭据";let a,i,o=!1;const c=async()=>{if(!r||o)return;const h=t.capability??await t.resolveCapability?.();if(!h||o)return;e=h;const u=await h.create({name:s,webId:r});if(o){await h.revoke({clientId:Kt(u.apiKey),resource:u.resource,webId:r}).catch(()=>{});return}return a={apiKey:u.apiKey,clientId:Kt(u.apiKey),resource:u.resource},a},l=async()=>a||(i??=c().finally(()=>{i=void 0}),await i);return{async authorization(){if(o)return;const h=await l();return!o&&h?`Bearer ${h.apiKey}`:void 0},async apiKey(){if(o)return;const h=await l();return o?void 0:h?.apiKey},clientId(){return a?.clientId},async release(){o=!0;const h=a;a=void 0;const u=e;!h||!u||!r||await u.revoke({clientId:h.clientId,resource:h.resource,webId:r})}}}function Kt(t){const e=t.startsWith("sk-")?t.slice(3):t;try{const r=atob(e),s=r.indexOf(":");return s>0?r.slice(0,s):""}catch{return""}}function Jt(t,e,r=t,s){return e?async(a,i)=>{const o=a instanceof Request?Hi(a):a,c=await t(a,i);if(!o||!Qi(a,s)||c.status!==403||!await Vi(c))return c;const l=await e().catch(()=>{});if(!l)return c;const h=new Headers(i?.headers??(a instanceof Request?a.headers:void 0));return h.set("authorization",l),h.delete("dpop"),r(o,{...i,headers:h})}:t}function Hi(t){try{return t.clone()}catch{return}}async function Vi(t){try{const e=await t.clone().json();return e?.error==="service_access_missing"||!!(e?.error&&typeof e.error=="object"&&"code"in e.error&&e.error.code==="service_access_missing")}catch{return!1}}function Qi(t,e){if(!e)return!1;try{const r=new URL(t instanceof Request?t.url:String(t),e);return r.origin===new URL(e).origin&&(r.pathname.startsWith("/api/")||r.pathname.startsWith("/v1/"))}catch{return!1}}async function Ki(t){if(!t.accountIndex||!t.webId)return;t.assertCurrent(t.webId);const e=t.binding??await Ji(t)??await Yi(t);if(t.assertCurrent(t.webId),!(!e||e.webId!==t.webId))return e.assertCurrent(),Fi({collection:e.collection,assertCurrent:()=>{t.assertCurrent(t.webId),e.assertCurrent()},accountIndex:t.accountIndex,...e.fetch?{fetch:e.fetch}:{}})}async function Ji(t){const e=t.accountIndex,r=t.webId;try{const l=new URL(e);if(!["http:","https:"].includes(l.protocol)||l.username||l.password||l.pathname!=="/.account/"||l.search||l.hash)return}catch{return}let s;try{s=await t.accountFetch(e,{headers:mt({accept:"application/json"},e),credentials:"include",redirect:"error"})}catch{return}if(!s.ok)return;const a=await s.json().catch(()=>{}),i=a?.controls?.account?.clientCredentials;if(typeof i!="string"||!i)return;try{for(const l of[i,a?.controls?.account?.bindings]){if(typeof l!="string"||!l)return;const h=new URL(l,e);if(h.origin!==new URL(e).origin||!h.pathname.startsWith("/.account/")||h.username||h.password||h.hash)return}}catch{return}const o=await $i({controls:a?.controls,fetchImpl:t.accountFetch,trustedAccountIndex:e}).catch(()=>{});if(t.assertCurrent(r),!o?.some(l=>l.webId===r))return;const c=await pt(i,t.accountFetch,e);return c?{collection:c,webId:r,assertCurrent:()=>t.assertCurrent(r),fetch:t.accountFetch}:void 0}async function Yi(t){if(!t.sessionFetch)return;const e=t.webId,r=Ln({accountIndex:t.accountIndex,fetch:t.sessionFetch,assertCurrent:()=>t.assertCurrent(e)}),s=await En({accountIndex:t.accountIndex,webId:e,fetch:r}).catch(()=>{});if(s)return{collection:s.collection,webId:s.webId,assertCurrent:()=>t.assertCurrent(s.webId),fetch:r}}function Zi({children:t,value:e}){const r=e??Ps(),s=d.useMemo(()=>r.storage??{},[r]),a=d.useMemo(()=>to(r),[r]),[i,o]=d.useState(a.snapshot),[c,l]=d.useState(a.issuer),[h,u]=d.useState(),[m,f]=d.useState(),[x,p]=d.useState(),[g,v]=d.useState(0),[P,j]=d.useState(),b=d.useRef(i),y=d.useRef(a.rejected),I=d.useRef(void 0),R=d.useCallback(async(w,k)=>y.current?Promise.reject(Yt):k===void 0?r.session.fetch(w):r.session.fetch(w,k),[r.session]),N=d.useMemo(()=>i.status==="authenticated"?r.session.createAuthenticatedFetch(i.webId):void 0,[r.session,i]),E=d.useCallback(async(w,k)=>{if(!N||y.current)throw Yt;return k===void 0?N(w):N(w,k)},[N]),S=d.useCallback(()=>{if(I.current)return I.current;const w=(async()=>{try{await r.session.logout();const k=r.session.getSnapshot();(k.status!=="authenticated"||et(k,r.getIssuer(),r.getExpectedIssuer?.()??window.location.origin))&&(y.current=!1)}catch{}finally{const k={status:"anonymous"};r.pod.clear(),He({storage:s.selectedStorage}),kt(s.issuer),r.setIssuer(void 0),b.current=k,o(k),l(void 0),u(void 0),f(void 0),p(void 0),j(void 0)}})().finally(()=>{I.current===w&&(I.current=void 0)});return I.current=w,w},[r,s.issuer,s.selectedStorage]),_=d.useContext(gt),L=_?.idpIndex,O=_?.registerAccountSession;d.useLayoutEffect(()=>{if(!(!O||i.status!=="authenticated"||!c||y.current))return O({issuer:c,fetch:E,assertCurrent:()=>{if(y.current||r.session.getSnapshot()!==i||r.getIssuer()!==c)throw new Error("Solid 会话已改变,请重新打开账号操作。")}})},[E,c,O,r,i]);const U=i.status==="authenticated"?i.webId:void 0,H=_?.controls?.account?.clientCredentials,te=_?.identity?.webId,J=_?.bindAccountCapability,Y=d.useMemo(()=>H&&te&&te===U&&J?{collection:H,webId:te,assertCurrent:J(),fetch:_e}:void 0,[H,te,J,U]),F=d.useMemo(()=>{const w=()=>{if(r.session.getSnapshot()!==i)throw new Error("Solid 会话已改变,请重新打开客户端凭据操作。")};return Wi({webId:U,resolveCapability:()=>Ki({accountIndex:L,webId:U,binding:Y,accountFetch:_e,sessionFetch:N,assertCurrent:w})})},[Y,L,N,U,r.session,i]),B=d.useRef(void 0);d.useEffect(()=>(B.current?.credential===F&&(B.current.cancelled=!0),()=>{const w={credential:F,cancelled:!1};B.current=w,queueMicrotask(()=>{w.cancelled||F.release().catch(()=>{})})}),[F]);const q=d.useCallback((w,k)=>Jt(E,()=>F.authorization(),_e,window.location.origin)(w,k),[E,F]),le=d.useCallback((w,k)=>Jt(R,()=>F.authorization(),_e,window.location.origin)(w,k),[R,F]),K=d.useMemo(()=>({...r.session,fetch:le,getSnapshot:()=>b.current}),[le,r.session]);d.useEffect(()=>{const w=D=>{const A=r.getIssuer();if(!et(D,A,r.getExpectedIssuer?.()??window.location.origin)){y.current=!0,S();return}D.status==="authenticated"&&(y.current=!1);const M=b.current;b.current=D,o(D),l(A),D.status!=="authenticated"?(r.setLocalPodRoutes?.(void 0),r.setLocalPodRoutesRefresh?.(void 0),u(void 0),D.status!=="expired"&&f(void 0),p(void 0),j(void 0),r.pod.clear()):M!==D&&(u(void 0),f(void 0),p(void 0),j(void 0),r.pod.clear(M.status==="authenticated"?{webId:M.webId}:void 0))},k=r.session.subscribe(w);return w(r.session.getSnapshot()),k},[S,r,s]),d.useEffect(()=>{y.current&&S()},[S]),d.useEffect(()=>{if(i.status!=="authenticated")return;let w=!1;const k=new AbortController,D=Ei({storage:s.selectedStorage,origin:typeof window>"u"?void 0:window.location.origin,webId:i.webId}),A={webId:i.webId,...D?{podUrl:D.storageUrl}:{},fetch:q};return(async()=>{try{const M=r.getProvisionRouteStatus?.()??await Cs(fetch,{signal:k.signal});if(w)return;r.setLocalPodRoutes?.(Rt(D?.storageUrl??M.storageRoot,M));const Q=await r.pod.open(A),ne=Rt(Q.podUrl,M);if(w)return;if(r.setLocalPodRoutes?.(ne),r.setLocalPodRoutesRefresh?.(async()=>{const Be=await Ls(Q.podUrl,fetch,{signal:k.signal});w||r.setLocalPodRoutes?.(Be)}),!w){if(D&&(Q.webId!==D.webId||!ro(Q.podUrl,D.storageUrl))){He({storage:s.selectedStorage}),u(void 0),f(void 0),p({webId:i.webId,error:new Error("Selected Pod binding mismatch")});return}u(Q),f(D??{webId:Q.webId,storageUrl:Q.podUrl}),p(void 0)}}catch(M){w||p({webId:i.webId,error:M instanceof Error?M:new Error(String(M))})}})(),()=>{w=!0,k.abort(),r.setLocalPodRoutesRefresh?.(void 0)}},[q,g,r,s.selectedStorage,i]);const ge=d.useCallback(()=>{p(void 0),v(w=>w+1)},[]),C=i.status==="authenticated"?i.webId:void 0;d.useEffect(()=>{if(!C)return;let w=!1;return so(E).then(k=>{!w&&r.session.getSnapshot().status==="authenticated"&&r.session.getSnapshot().webId===C&&j(k)}),()=>{w=!0}},[E,C,r]);const G=d.useMemo(()=>{const w=c??r.getIssuer(),k=i.status==="authenticated"&&x?.webId===i.webId?x:void 0,D=Es(i,h,w);return{session:K,pod:r.pod,fetch:q,transportFetch:r.transportFetch??_e,state:D.status==="error"?{...D,error:Ds(D.error)}:D,webId:D.webId,podUrl:D.podUrl,issuer:D.issuer,currentPod:h,selectedStorage:m,...k?{podError:k}:{},retryPodOpen:ge,aiClientConfiguration:P,resolveLocalUrl:A=>r.resolveLocalUrl(A),requestPodAuthorization:()=>F.authorization(),requestPodApiKey:()=>F.apiKey(),login:async A=>{const M=As(A),Q=await Ts(M.route.identityProvider.url,fetch),ne=Q.oidcIssuer;if(!ne)throw new TypeError("Xpod login route has no valid issuer");const Be=new URL("/auth/callback",window.location.origin),ze=globalThis.xpodDesktop?Ri.client_id:void 0;try{await r.session.login({...ze?{clientId:ze}:{},oidcIssuer:ne,redirectUrl:Be.toString(),handleRedirect:de=>{r.setIssuer(ne),l(ne);const be=new URL(de);M.prompt?be.searchParams.set("prompt",M.prompt):ze&&be.searchParams.get("prompt")==="consent"&&be.searchParams.delete("prompt"),window.location.assign(Q.provisionCode?Us(be.href,Q.provisionCode):be.href)}}),r.setIssuer(ne),l(ne)}catch(de){throw console.error("[XpodSolidRuntimeProvider] WebID login failed",de,de instanceof Error?de.cause:void 0),de}},logout:async()=>{await F.release().catch(()=>{}),await r.session.logout(),r.pod.clear(),He({storage:s.selectedStorage}),kt(s.issuer),u(void 0),f(void 0),j(void 0)}}},[P,q,h,K,c,x,F,ge,r,s,m,i]);return n.jsx(gi,{value:{session:K,pod:r.pod,currentPod:h},children:n.jsx(ur.Provider,{value:G,children:t})})}const eo={status:"anonymous"},Yt=new Error("Xpod session is unavailable"),_e=(t,e)=>globalThis.fetch(t,e);function to(t){const e=t.session.getSnapshot(),r=t.getIssuer();return et(e,r,t.getExpectedIssuer?.()??window.location.origin)?{snapshot:e,issuer:r,rejected:!1}:{snapshot:eo,issuer:void 0,rejected:!0}}function ro(t,e){try{return new URL(t).href===new URL(e).href}catch{return t===e}}async function so(t){try{const e=new URL("/api/ai/client-configuration/capability",window.location.href).toString(),r=await t(e,{method:"GET",credentials:"include",headers:{accept:"application/json"}});if(!r.ok||!r.headers.get("content-type")?.includes("application/json"))return await r.arrayBuffer().catch(()=>{}),Qe();const s=await r.json();if(no(s)&&s.available===!0&&s.authority==="local-filesystem")return{available:!0,authority:"local-filesystem",manualInstructions:typeof s.manualInstructions=="string"?s.manualInstructions:Qe().manualInstructions}}catch{}return Qe()}function Qe(){return{available:!1,manualInstructions:"manual client setup is available"}}function no(t){return!!(t&&typeof t=="object"&&!Array.isArray(t))}function ao({children:t}){return d.useContext(bn)?n.jsx(n.Fragment,{children:t}):n.jsx(xn,{children:t})}function io(t){const e=async(r,s="GET",a,i)=>{const o=await t.fetch(`${(t.baseUrl??"").replace(/\/$/,"")}/api/tasks${r}${i?`?id=${encodeURIComponent(i)}`:""}`,{method:s,headers:a===void 0?void 0:{"Content-Type":"application/json"},body:a===void 0?void 0:JSON.stringify(a)});if(!o.ok){const c=await o.json().catch(()=>{});throw new Error(o.status===401?"登录已失效,请重新登录":o.status===403?"暂时无法访问任务,请检查连接与授权":o.status>=500?"任务服务暂时不可用,请稍后重试":c?.error&&/[\u4e00-\u9fff]/.test(c.error)?c.error:"任务操作未完成,请检查输入后重试")}return o.json()};return{resumeRun:(r,s)=>e("/resume","POST",{approval:s},r),selection:r=>e("/selection","GET",void 0,r),list:()=>e(""),create:r=>e("","POST",r),update:(r,s)=>e("","PATCH",s,r),pause:(r,s)=>e("/pause","POST",{paused:s},r),run:r=>e("/run","POST",{},r),runs:r=>e("/runs","GET",void 0,r),steps:r=>e("/steps","GET",void 0,r),stop:r=>e("/stop","POST",{},r)}}const es=d.createContext(null);function ts(){return d.useContext(es)}function Pe(){const t=ts();if(!t)throw new Error("ShellStateProvider is required");return t}async function oo({webId:t,podUrl:e,authenticatedFetch:r}){const s=new URL("/",e).origin,a=await r(`${s}/api/pod/settings/status`,{method:"GET",credentials:"include",headers:{accept:"application/json"}});if(!a.ok)throw await a.arrayBuffer(),new Error("Pod settings request failed. Please try again.");if(!a.headers.get("content-type")?.includes("application/json"))throw await a.arrayBuffer(),new Error("Pod settings request failed. Please try again.");const i=await a.json();if(i.identity?.webId!==t)throw new Error("Pod settings response does not match the current Solid session.");return i}const Te=()=>({attention:[],activity:[],inProgress:[],inbox:[]});function co(t,e=Date.now()){return["pending","handling"].includes(t.status)&&(!t.expiresAt||new Date(t.expiresAt).getTime()>e)}const Ke=t=>t?new Date(t).toISOString():"",ot=t=>`/tasks?run=${encodeURIComponent(t.id)}`;function lo(t){if(!t.metadata||typeof t.metadata!="object")return;const e=t.metadata.waitingTool;if(!e||typeof e!="object")return;const r=e.requestId;return typeof r=="string"?r:void 0}function rs(t,e){return!!(t.thread&&t.toolCallId&&t.thread===e.thread&&t.toolCallId===lo(e))}function ct(t,e){return e.status==="waiting_input"&&rs(t,e)}function uo(t,e,r){const s=`approval=${encodeURIComponent(t.id)}`;if(e.some(i=>i.object===t.id))return`/inbox?${s}`;const a=r.find(i=>ct(t,i));return a?`${ot(a)}&${s}`:`/inbox?${s}`}function ho({approvals:t,inbox:e,runs:r,tasks:s}){const a=new Set(["completed","failed","cancelled"]),i=t.filter(o=>{if(!co(o))return!1;const c=r.filter(l=>rs(o,l));return c.length===0||c.some(l=>!a.has(l.status))});return{attention:[...i.map(o=>({id:o.id,approvalId:o.id,thread:o.thread||void 0,run:r.find(c=>ct(o,c))?.id,title:o.toolName||"访问申请",kind:"approval",href:uo(o,e,r),risk:o.risk,toolName:o.toolName,expiresAt:Ke(o.expiresAt)||void 0})),...r.filter(o=>["failed","waiting_input"].includes(o.status)).map(o=>{const c=t.find(l=>["approved","rejected"].includes(l.status)&&ct(l,o));return{id:o.id,run:o.id,thread:o.thread||void 0,resumeApproval:c?.id,title:o.status==="failed"?"运行失败":c?"审批已保存,运行待处理":"运行在等你确认",kind:"run",href:ot(o)}})],activity:s.map(o=>({id:`task:${o.id}`,title:`新建任务:${o.title||"未命名任务"}`,href:`/tasks?task=${encodeURIComponent(o.id)}`,createdAt:Ke(o.createdAt)})).sort((o,c)=>c.createdAt.localeCompare(o.createdAt)),inProgress:r.filter(o=>o.status==="running").map(o=>({id:o.id,title:o.prompt||"任务运行中",href:ot(o)})),inbox:e.map(o=>({id:o.id,actor:o.actor||void 0,object:o.object,createdAt:Ke(o.createdAt),approvalId:i.find(c=>c.id===o.object)?.id})).sort((o,c)=>c.createdAt.localeCompare(o.createdAt))}}function fo(t){return{...t,activity:t.activity.map(e=>({...e,read:!0}))}}async function po(t){const[e,r,s,a]=await Promise.all([t.select().from(Pt),t.select().from(Ct),t.select().from(Lt),t.select().from(Et)]);return ho({approvals:e.map(i=>({...i,id:t.resolveRowIri(Pt,{...i})})),inbox:r.map(i=>({...i,id:t.resolveRowIri(Ct,{...i})})),runs:s.map(i=>({...i,id:t.resolveRowIri(Lt,{...i})})),tasks:a.map(i=>({...i,id:t.resolveRowIri(Et,{...i})}))})}async function mo(t,e,r,s,a=()=>!0){const i=await bi({approval:e,decisionBy:r,decision:s,authenticatedFetch:t,isCurrent:a});if(i.status==="decided")return;const o={conflict:"申请已被其他入口处理,请刷新后查看。",not_found:"申请不存在,请刷新。",not_actionable:"申请已处理、过期或当前身份无权处理,请刷新。",unavailable:"此 Pod 尚不支持安全审批,请稍后重试。"};throw new Error(o[i.status])}function go({children:t}){const e=Re();return n.jsx(bo,{runtime:e,children:t},`${e.state.status}|${e.webId||""}|${e.currentPod?.podUrl||""}`)}function bo({children:t,runtime:e}){const r=d.useMemo(()=>io({fetch:e.fetch,baseUrl:window.location.origin}),[e.fetch]),[s,a]=d.useState(Te),[i,o]=d.useState(!1),[c,l]=d.useState(),[h,u]=d.useState([]),m=d.useRef(new Set),[f,x]=d.useState(0),p=d.useRef(new Set),g=d.useRef(!0),v=d.useCallback(()=>x(b=>b+1),[]);d.useEffect(()=>(g.current=!0,()=>{g.current=!1}),[]),d.useEffect(()=>{let b=!0,y=!1;async function I(){if(!y){y=!0,o(!0);try{const[N,E,S]=await Promise.allSettled([e.state.status==="authenticated"&&e.currentPod?po(e.currentPod.database):Promise.resolve(Te()),Un(),e.state.status==="authenticated"&&e.webId&&e.currentPod?oo({webId:e.webId,podUrl:e.currentPod.podUrl,authenticatedFetch:e.fetch}):Promise.resolve(null)]),_=N.status==="fulfilled"?N.value:Te();if(E.status==="fulfilled"&&E.value?.status==="fail"&&_.attention.push({id:"device:network",kind:"network",title:"设备网络需要检查",href:"/device/network"}),S.status==="fulfilled"&&S.value?.storage.status==="available"){const L=S.value.storage;L.limits.storageLimitBytes&&L.usage.storageBytes/L.limits.storageLimitBytes>=.8&&_.attention.push({id:"pod:storage",kind:"quota",title:"Pod 空间快到上限",href:"/pod/data"})}b&&(a(L=>{const O=N.status==="fulfilled"?_:{...L,attention:[...L.attention.filter(U=>U.kind!=="network"&&U.kind!=="quota"),..._.attention]};return{...O,activity:O.activity.map(U=>({...U,read:p.current.has(U.id)}))}}),l(N.status==="rejected"?"Pod 通知读取失败,请重试":void 0))}catch{b&&l("通知读取失败,请重试")}finally{y=!1,b&&o(!1)}}}I();const R=window.setInterval(()=>{I()},3e4);return window.addEventListener("focus",v),window.addEventListener("xpod:pod-changed",v),()=>{b=!1,window.clearInterval(R),window.removeEventListener("focus",v),window.removeEventListener("xpod:pod-changed",v)}},[e.currentPod,e.webId,e.fetch,e.state.status,f,v]),d.useEffect(()=>{globalThis.xpodDesktop?.publishAttention?.(s)},[s]),d.useEffect(()=>()=>{globalThis.xpodDesktop?.publishAttention?.(Te())},[]);const P=d.useCallback(async(b,y)=>{if(!(!g.current||m.current.has(b))){m.current.add(b),u(I=>I.map(R=>R.approvalId===b?{...R,busy:!0}:R));try{await r.resumeRun(y,b),g.current&&(u(I=>I.filter(R=>R.approvalId!==b)),v())}catch{g.current&&u(I=>[...I.filter(R=>R.approvalId!==b),{approvalId:b,run:y,message:"决定已保存,运行处理失败,请重试。"}])}finally{m.current.delete(b)}}},[r,v]),j=d.useCallback(async(b,y)=>{if(e.state.status!=="authenticated"||!e.currentPod||!e.webId)throw new Error("请先登录并打开 Pod。");const I=s.attention.find(R=>R.approvalId===b)?.run;await mo(e.fetch,b,e.webId,y,()=>g.current),g.current&&(a(R=>({...R,attention:R.attention.filter(N=>N.approvalId!==b),inbox:R.inbox.map(N=>N.approvalId===b?{...N,approvalId:void 0}:N)})),I&&await P(b,I),v())},[e.currentPod,e.webId,e.fetch,e.state.status,s.attention,P,v]);return d.useEffect(()=>globalThis.xpodDesktop?.onApprovalDecision?.(({approvalId:b,decision:y})=>{j(b,y).catch(I=>{g.current&&l(I instanceof Error?I.message:"决定保存失败,请重试")})}),[j]),n.jsx(es.Provider,{value:{snapshot:s,loading:i,error:c,refresh:v,decide:j,resumeFailures:h,retryResume:P,markAllRead(){s.activity.forEach(b=>p.current.add(b.id)),a(fo)}},children:t})}function Zt({item:t}){const{decide:e}=Pe(),[r,s]=d.useState(!1),[a,i]=d.useState("");async function o(c){if(t.approvalId){s(!0);try{await e(t.approvalId,c),i("决定已保存。")}catch(l){i(l instanceof Error?l.message:"保存失败,请重试。")}finally{s(!1)}}}return n.jsxs("div",{className:"space-y-2 rounded-md border border-border p-3 text-sm leading-normal",children:[n.jsx("p",{className:"font-medium",children:t.title}),n.jsxs("p",{className:"text-xs leading-normal text-muted-foreground",children:["风险:",{low:"低",medium:"中",high:"高"}[t.risk||""]||t.risk||"未说明",t.expiresAt?` · 有效至 ${new Date(t.expiresAt).toLocaleString("zh-CN")}`:""]}),n.jsxs("div",{className:"flex flex-wrap gap-2",children:[n.jsx("button",{disabled:r,onClick:()=>{o("approved")},className:"rounded bg-primary px-2 py-1 text-primary-foreground",children:"只这一次"}),n.jsx("button",{disabled:!0,title:"长期授权待接入",className:"rounded border px-2 py-1 opacity-50",children:"以后都允许 · 待接入"}),n.jsx("button",{disabled:r,onClick:()=>{o("rejected")},className:"rounded border px-2 py-1",children:"拒绝"})]}),n.jsx("p",{className:"text-xs leading-normal text-muted-foreground",children:"这次决定只对当前申请有效。"}),a&&n.jsx("p",{role:"status",children:a})]})}function ss({run:t,recoveryApproval:e}){const{snapshot:r,resumeFailures:s,retryResume:a}=Pe(),i=s.filter(c=>!t||c.run===t),o=r.attention.filter(c=>c.resumeApproval&&c.run&&(!t||c.run===t));for(const c of o)i.some(l=>l.approvalId===c.resumeApproval)||i.push({approvalId:c.resumeApproval,run:c.run,message:"审批决定已保存,可以继续处理这次运行。"});return t&&e&&!i.some(c=>c.approvalId===e)&&i.push({approvalId:e,run:t,message:"审批决定已保存,可以继续处理这次运行。"}),n.jsx(n.Fragment,{children:i.map(c=>n.jsx(jr,{tone:"neutral",role:"alert",className:"my-2",action:n.jsx("button",{disabled:c.busy,className:"underline",onClick:()=>{a(c.approvalId,c.run)},children:c.busy?"正在重试…":"重试处理运行"}),children:c.message},c.approvalId))})}function ns(){const{snapshot:t}=Pe(),[e]=vn(),r=t.attention.find(a=>a.approvalId===e.get("approval")),s=r&&!t.inbox.some(a=>a.approvalId===r.approvalId);return n.jsxs(n.Fragment,{children:[n.jsx(ss,{}),s&&n.jsx("div",{className:"mb-4",children:n.jsx(Zt,{item:r})}),t.inbox.length?n.jsx("ul",{className:"space-y-3",children:t.inbox.map(a=>{const i=t.attention.find(o=>o.approvalId===a.approvalId&&a.approvalId);return n.jsxs("li",{className:"space-y-2 border-b border-border pb-3",children:[n.jsxs("p",{className:"break-all text-xs leading-normal text-muted-foreground",children:[a.actor||"未知发送者"," · ",new Date(a.createdAt).toLocaleString("zh-CN")]}),i?n.jsx(Zt,{item:i}):n.jsx("a",{className:"break-all text-sm leading-normal underline",href:/^https?:\/\//.test(a.object)?a.object:void 0,target:"_blank",rel:"noreferrer",children:a.object})]},a.id)})}):n.jsx("p",{className:"py-6 text-sm leading-normal text-muted-foreground",children:"收件箱是空的"})]})}function as({close:t=()=>{}}){const{snapshot:e,markAllRead:r}=Pe();return n.jsxs("div",{className:"space-y-5",children:[n.jsx(ss,{}),n.jsxs("section",{children:[n.jsx("h3",{className:"mb-2 text-sm leading-normal font-medium",children:"需要你处理"}),e.attention.length?n.jsx("ul",{className:"space-y-2",children:e.attention.map(s=>n.jsx("li",{children:n.jsxs(tt,{onClick:t,to:s.href,className:"block rounded-md border border-border p-3 text-sm leading-normal hover:bg-accent",children:[s.title," ›"]})},s.id))}):n.jsx("p",{className:"text-sm leading-normal text-muted-foreground",children:"没有待处理事项"})]}),n.jsxs("section",{children:[n.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[n.jsx("h3",{className:"text-sm leading-normal font-medium",children:"动态"}),n.jsx("button",{className:"text-xs leading-normal text-muted-foreground",onClick:r,children:"全部已读"})]}),e.activity.length?n.jsx("ul",{className:"space-y-2",children:e.activity.map(s=>n.jsx("li",{children:n.jsx(tt,{to:s.href,onClick:t,className:`block text-sm leading-normal ${s.read?"text-muted-foreground":"font-medium"}`,children:s.title})},s.id))}):n.jsx("p",{className:"text-sm leading-normal text-muted-foreground",children:"暂无动态"})]})]})}function xo(){const{snapshot:t,loading:e,error:r,refresh:s}=Pe(),[a,i]=d.useState(null),o=d.useRef(null),c=d.useRef(null),l=d.useRef(null);return d.useEffect(()=>{if(!a)return;c.current?.focus();function h(m){m.key==="Escape"&&(i(null),l.current?.focus())}function u(m){o.current?.contains(m.target)||i(null)}return document.addEventListener("keydown",h),document.addEventListener("pointerdown",u),()=>{document.removeEventListener("keydown",h),document.removeEventListener("pointerdown",u)}},[a]),n.jsxs("div",{ref:o,className:"relative flex items-center gap-1",children:[n.jsx("button",{"aria-label":e?"正在同步":r||"刷新同步状态",title:r||(e?"正在同步":"刷新同步状态"),onClick:s,className:"rounded p-2 hover:bg-accent",children:n.jsx(Cr,{size:16,className:e?"animate-spin":""})}),["notifications","inbox"].map(h=>n.jsxs("button",{"aria-label":h==="notifications"?"通知":"收件箱","aria-expanded":a===h,"aria-controls":"shell-popover",onClick:u=>{l.current=u.currentTarget,i(a===h?null:h)},className:"relative rounded p-2 hover:bg-accent",children:[h==="notifications"?n.jsx(ba,{size:16}):n.jsx(Na,{size:16}),(h==="notifications"?t.attention.length+t.activity.filter(u=>!u.read).length:t.inbox.length)>0&&n.jsx("span",{className:"absolute right-1 top-1 h-1.5 w-1.5 rounded-full bg-primary"})]},h)),a&&n.jsxs("div",{id:"shell-popover",ref:c,tabIndex:-1,role:"region","aria-label":a==="notifications"?"通知中心":"收件箱",className:"absolute right-0 top-full z-50 mt-2 max-h-[70vh] w-[360px] max-w-[calc(100vw-24px)] overflow-y-auto rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-lg",children:[n.jsxs("div",{className:"mb-4 flex items-center justify-between",children:[n.jsx("h2",{className:"font-medium",children:a==="notifications"?"通知中心":"收件箱"}),n.jsx("button",{"aria-label":"关闭",onClick:()=>{i(null),l.current?.focus()},children:n.jsx(Lr,{size:16})})]}),r&&n.jsx(jr,{tone:"destructive",role:"alert",className:"mb-3",action:n.jsx("button",{onClick:s,className:"underline",children:"重试"}),children:r}),a==="notifications"?n.jsx(as,{close:()=>i(null)}):n.jsx(ns,{})]})]})}const vo=d.lazy(()=>re(()=>import("./PodPage-BueBdJ9_.js"),__vite__mapDeps([10,3,4,1,2,5,6,7,11,12,13,8,9]))),_o=[{path:"/device/network",label:"网络访问"},{path:"/device/services",label:"服务状态"},{path:"/device/runtime",label:"运行设置"},{path:"/device/logs",label:"查看日志"}],wo=[{path:"/pod/models",label:"模型设置"},{path:"/pod/search",label:"检索与索引"},{path:"/pod/apps",label:"授权应用"},{path:"/pod/data",label:"数据管理"}],yo=[{path:"/settings/appearance",label:"外观"}];function jo({items:t,query:e,label:r}){const{openMain:s}=Dn();return n.jsx("nav",{"aria-label":r,className:"p-2",children:t.filter(a=>a.label.includes(e.trim())).map(a=>n.jsx(wn,{to:a.path,onClick:s,className:({isActive:i})=>`flex min-h-11 items-center rounded-lg px-3 text-sm leading-normal ${i?"bg-accent font-medium text-primary":"hover:bg-muted"}`,children:a.label},a.path))})}function lt({subject:t}){const e=Fe(),r=t==="device"?_o:t==="pod"?wo:yo,[s,a]=d.useState(""),i=r.find(c=>c.path===e.pathname)??r[0],o=t==="device"?"这台设备":t==="pod"?"Pod":"设置";return n.jsx(vr,{mode:"auto",listHeader:n.jsx("div",{className:"flex h-full min-w-0 items-center px-3",children:n.jsx(yr,{"aria-label":"搜索页面",value:s,onChange:c=>a(c.target.value)})}),list:n.jsx(jo,{items:r,query:s,label:o}),mainHeader:n.jsx(is,{title:i.label}),main:n.jsx(ht,{})})}function is({title:t,children:e}){return n.jsxs("div",{className:"flex h-full min-w-0 items-center justify-between gap-2 px-4",children:[n.jsx("h1",{className:"min-w-0 truncate text-sm leading-normal font-semibold",children:t}),n.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[e,n.jsx(xo,{})]})]})}function er({title:t,children:e}){return n.jsx(vr,{className:"workspace-page",pageType:"collection",hasObjectCollection:!1,listHeader:null,list:null,mainHeader:n.jsx(is,{title:t}),main:n.jsx("div",{className:"p-6",children:e})})}function Io({section:t}){const e=fr(),r=Re(),s=r.issuer?new URL("/.account/account/",r.issuer).toString():void 0;return n.jsx(gr,{children:n.jsx(vo,{section:t,onSection:a=>e(`/pod/${a}`),accountUrl:s})})}function No(){const t=_n();return n.jsx("section",{className:"p-6 text-sm leading-normal",children:n.jsxs("label",{className:"flex flex-wrap items-center justify-between gap-3 border-b pb-4",children:["主题",n.jsxs(wr,{"aria-label":"主题",className:"w-auto",value:t.preference,onChange:e=>t.setPreference(e.target.value),children:[n.jsx("option",{value:"system",children:"跟随系统"}),n.jsx("option",{value:"light",children:"浅色"}),n.jsx("option",{value:"dark",children:"深色"})]})]})})}const Je=[{id:"tasks",label:"任务",labelEn:"Tasks",href:"/tasks",activePaths:["/tasks"],icon:Ba},{id:"ai",label:"AI 连接",labelEn:"AI connections",href:"/ai-connections",activePaths:["/ai-connections"],icon:Fa},{id:"pod",label:"Pod",labelEn:"Pod",href:"/pod/models",activePaths:["/pod"],icon:_r},{id:"device",label:"这台设备",labelEn:"This device",href:"/device/network",activePaths:["/device"],icon:Aa},{id:"settings",label:"设置",labelEn:"Settings",href:"/settings/appearance",activePaths:["/settings"],icon:Da}];function os(t,e){const r=e.replace(/\/+$/,"")||"/";return t.activePaths.some(s=>r===s||r.startsWith(`${s}/`))}function So(t,e,r){const i=Math.min(360,e-16),o=Math.max(8,Math.min(t.top,r-240-8));return{left:Math.max(8,Math.min(t.right+12,e-i-8)),top:o,width:i,maxHeight:Math.max(0,r-o-8)}}function ko(){const t=br(),e=d.useContext(ur),r=t.isLoggedIn&&t.accountState.status==="authenticated",s=e?.state.status==="authenticated"&&!!(e.webId??e.state.webId),a=r||s,[i,o]=d.useState(To(a)),[c,l]=d.useState(),[h,u]=d.useState(),[m,f]=d.useState(),x=d.useRef(null),p=d.useRef(null),g=d.useRef(void 0),v=d.useId(),P=t.identity,j=xr(t.idpIndex),b=!t.isInitializing&&j?new URL(j).origin:void 0,y=b?dr(void 0,t.idpIndex):void 0,I=Oe(),R=An(t.controls,P),N=b&&I?.issuer===b&&R&&I.account.id===R?I.account:void 0,E=r?Ro(P,y,N):void 0,S=xt({accountIdentity:E,runtime:s?e:void 0}),_=S.displayName,L=Co(S.displayName),O=e?.webId??(e?.state.status==="authenticated"?e.state.webId:void 0),U=e?.selectedStorage?.storageUrl??e?.podUrl,H=e?.selectedStorage,te=e?.currentPod,J=d.useMemo(()=>U?Lo(U):void 0,[U]),Y=e?.state.status==="authenticated"&&!!(O&&U&&H&&te)&&H?.webId===O&&tr(H?.storageUrl??"",U??"")&&te?.webId===O&&tr(te?.podUrl??"",U??""),F=a,B=i&&F,q=d.useCallback(C=>{o(C),C||(f(void 0),rr())},[]);d.useLayoutEffect(()=>{if(!B)return;const C=()=>{const G=p.current;G&&f(So(G.getBoundingClientRect(),window.innerWidth,window.innerHeight))};return C(),window.addEventListener("resize",C),window.addEventListener("scroll",C,!0),window.visualViewport?.addEventListener("resize",C),()=>{window.removeEventListener("resize",C),window.removeEventListener("scroll",C,!0),window.visualViewport?.removeEventListener("resize",C)}},[B]),d.useEffect(()=>{if(!F){rr();return}if(!B)return;const C=w=>{const k=w.target;k instanceof Node&&(x.current?.contains(k)||p.current?.contains(k)||q(!1))},G=w=>{w.key==="Escape"&&(q(!1),p.current?.focus())};return document.addEventListener("pointerdown",C),document.addEventListener("keydown",G),()=>{document.removeEventListener("pointerdown",C),document.removeEventListener("keydown",G)}},[F,B,q]),d.useEffect(()=>{!B||!m||x.current?.focus({preventScroll:!0})},[B,m]),d.useEffect(()=>()=>{g.current!==void 0&&window.clearTimeout(g.current)},[]);const le=async()=>{l("logout"),q(!1);try{await nt(t,e),(t.isAnonymous?.()??!0)&&q(!1)}catch{}finally{l(void 0)}},K=async()=>{l("switch"),q(!1);try{await nt(t,e,{onComplete:()=>{hr();const C=new URL(Se,window.location.origin);C.searchParams.set("xpod-login","switch"),window.location.assign(C)}}),q(!1)}catch{}finally{l(void 0)}},ge=async()=>{const C=S.webId??O;if(C){try{await navigator.clipboard.writeText(C),u("已复制")}catch{u("复制失败")}g.current!==void 0&&window.clearTimeout(g.current),g.current=window.setTimeout(()=>u(void 0),1800)}};return F?n.jsxs("div",{className:"relative",children:[n.jsxs("button",{ref:p,type:"button","aria-label":a?`打开 ${_} 的个人卡片`:"个人卡片","aria-expanded":B,"aria-controls":B?v:void 0,"data-testid":"xpod-user-card-trigger","data-pod-ready":Y?"true":"false",className:"flex h-9 w-9 items-center justify-center rounded-md text-foreground transition-colors hover:bg-accent focus:outline-none focus:ring-0 focus-visible:bg-accent",onClick:()=>q(!B),children:[n.jsxs(At,{className:"h-8 w-8 rounded-md border border-border bg-muted",children:[S.avatarUrl?n.jsx(Tt,{src:S.avatarUrl,alt:_}):null,n.jsx(Ut,{className:"rounded-md bg-muted text-xs text-muted-foreground",children:L})]}),n.jsx("span",{className:"sr-only",children:a?_:"Not signed in"})]}),B&&typeof document<"u"?Pn.createPortal(n.jsx("section",{ref:x,id:v,role:"region",tabIndex:-1,"aria-label":a?_:"Xpod account","data-avatar-card":"true","data-selected-pod-url":U,style:m,className:`fixed z-50 overflow-y-auto rounded-xl border border-border/40 bg-card text-card-foreground shadow-xl shadow-black/10 ${m?"":"invisible"}`,children:n.jsxs("div",{children:[n.jsxs("div",{className:"flex items-start gap-5 px-6 pb-5 pt-6",children:[n.jsxs(At,{"data-testid":"xpod-profile-avatar",className:"h-20 w-20 shrink-0 rounded-2xl border border-border/50 bg-primary/10 shadow-sm",children:[S.avatarUrl?n.jsx(Tt,{src:S.avatarUrl,alt:_}):null,n.jsx(Ut,{className:"rounded-2xl bg-primary/10 text-2xl font-bold text-primary",children:L})]}),n.jsxs("div",{className:"min-w-0 flex-1 py-0.5",children:[n.jsx("h2",{className:"truncate text-xl font-bold text-foreground",children:_}),n.jsxs("div",{className:"mt-1 flex min-w-0 items-center gap-1 text-sm text-muted-foreground",children:[n.jsx("span",{className:"shrink-0 opacity-70",children:"WebID"}),n.jsx("span",{className:"truncate font-mono font-medium",children:S.webId??O}),n.jsx(ue,{type:"button",variant:"ghost",size:"icon",className:"h-6 w-6 shrink-0 text-muted-foreground","aria-label":"复制 WebID",onClick:()=>{ge()},children:n.jsx(ja,{className:"h-3 w-3","aria-hidden":"true"})}),h?n.jsx("span",{role:"status",className:"shrink-0 text-xs text-primary",children:h}):null]}),n.jsx(Kn,{tone:Y?"success":"neutral",dotSize:"sm",className:z("mt-2.5 gap-1.5 rounded-full px-2 py-1 text-xs font-medium",Y?"bg-success/10 text-success":"bg-muted text-muted-foreground"),children:Y?"Pod 已就绪":"WebID 已登录"})]})]}),S.note||S.region?n.jsxs("div",{className:"px-6 pb-5 text-sm text-muted-foreground",children:[S.note?n.jsx("p",{className:"line-clamp-2 text-foreground/85",children:S.note}):null,S.region?n.jsx("p",{className:"mt-1 text-xs",children:S.region}):null]}):null,n.jsx("div",{className:"border-t border-border/40 p-2",children:n.jsx(ue,{asChild:!0,variant:"ghost",className:"h-auto min-h-14 w-full justify-start gap-3 px-3 py-2.5 font-normal",children:n.jsxs("a",{href:"/pod/models","aria-label":"Pod",children:[n.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground",children:n.jsx(_r,{className:"h-4 w-4","aria-hidden":"true"})}),n.jsxs("span",{className:"min-w-0 flex-1 text-left",children:[n.jsx("span",{className:"block truncate text-sm font-medium text-foreground",children:Eo(J)}),n.jsxs("span",{className:"mt-0.5 block truncate text-xs text-muted-foreground",children:[Ao(U)," · ",Y?"已就绪":"尚未就绪"]})]}),Y?n.jsx(wa,{className:"h-4 w-4 shrink-0 text-success","aria-label":"Pod 已就绪"}):n.jsx(va,{className:"h-4 w-4 shrink-0 text-muted-foreground","aria-hidden":"true"})]})})}),n.jsx(kr,{}),n.jsxs("div",{className:"p-2",children:[j?n.jsx(ue,{asChild:!0,variant:"ghost",className:"h-10 w-full justify-start px-3 font-normal",children:n.jsxs("a",{href:j,children:[n.jsx(Ma,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),"账号管理"]})}):null,n.jsxs(ue,{type:"button",variant:"ghost",className:"h-10 w-full justify-start px-3 font-normal",onClick:()=>{K()},disabled:c!==void 0,children:[c==="switch"?n.jsx(Dt,{className:"mr-2 h-4 w-4 animate-spin","aria-hidden":"true"}):n.jsx(Cr,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),"切换 WebID"]}),n.jsxs(ue,{type:"button",variant:"ghost",className:"h-10 w-full justify-start px-3 font-normal text-destructive hover:text-destructive",onClick:()=>{le()},disabled:c!==void 0,children:[c==="logout"?n.jsx(Dt,{className:"mr-2 h-4 w-4 animate-spin","aria-hidden":"true"}):n.jsx(Pa,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),"退出"]})]})]})}),document.body):null]}):n.jsx("a",{href:Se,"aria-label":"登录",title:"登录",className:"flex h-9 w-9 items-center justify-center rounded-lg text-muted-foreground hover:bg-accent",children:n.jsx(ka,{size:20,"aria-hidden":"true"})})}function Ro(t,e,r){if(t?.displayName||t?.username)return t;const s=e||(r&&"email"in r&&typeof r.email=="string"?r.email:void 0);if(!s&&!r)return t;const a=r?.username||Po(s);return{...r??{},...t??{},...a?{username:a}:{},...r?.displayName?{displayName:r.displayName}:{displayName:a||s||"Xpod account"}}}function Po(t){if(t)return t.split("@")[0]?.trim()||void 0}function Co(t){const e=t.trim().split(/\s+/).filter(Boolean);return e.length>=2?`${e[0][0]}${e.at(-1)[0]}`.toUpperCase():t.slice(0,2).toUpperCase()||"XP"}function Lo(t){try{return new URL(t).pathname.split("/").filter(Boolean).at(-1)}catch{return}}function Eo(t){return t?`${t} Pod`:"我的 Pod"}function Ao(t){if(!t)return"未连接 Pod";try{return new URL(t).host}catch{return"Pod"}}function tr(t,e){try{return new URL(t).href===new URL(e).href}catch{return t===e}}function To(t){return t?typeof window<"u"&&new URLSearchParams(window.location.search).get("account")==="open":!1}function rr(){if(typeof window>"u")return;const t=new URL(window.location.href);t.searchParams.get("account")==="open"&&(t.searchParams.delete("account"),window.history.replaceState(window.history.state,"",`${t.pathname}${t.search}${t.hash}`))}function sr({items:t,label:e,attentionIds:r=[]}){const a=Fe().pathname;return n.jsx("nav",{"aria-label":e,className:"flex w-full flex-col items-center gap-2",children:t.map(i=>{const o=i.icon,c=i.href??i.path??"/",l=i.activePaths?os(i,a):a===i.path||a.startsWith(`${i.path}/`);return n.jsxs(tt,{to:c,"aria-label":i.label,"aria-current":l?"page":void 0,"data-list-item":"true",title:i.label,onKeyDown:Fn,className:Nn($n(l),"text-sm"),children:[n.jsx(o,{className:"h-5 w-5 shrink-0","aria-hidden":"true"}),n.jsx("span",{className:"sr-only",children:i.label}),r.includes(i.id)?n.jsx("span",{className:"absolute right-1 top-1 h-2 w-2 rounded-full bg-destructive",role:"img","aria-label":"需要处理"}):null]},i.id)})})}function Uo({product:t}){const e=Fe(),s=ts()?.snapshot.attention.some(g=>g.kind==="network")??!1,[a,i]=d.useState({path:e.pathname,open:!1}),o=a.path===e.pathname&&a.open;a.path!==e.pathname&&i({path:e.pathname,open:!1});const c=d.useRef(null),l=d.useRef(!1),h=d.useRef(null),u=Je.find(g=>os(g,e.pathname)),f={models:"模型设置",search:"检索与索引",indexing:"检索与索引",applications:"授权应用",data:"数据管理",network:"网络访问",services:"服务状态",runtime:"运行设置",logs:"查看日志",appearance:"外观"}[e.pathname.split("/").filter(Boolean).at(-1)??""];d.useEffect(()=>{l.current&&!o&&c.current?.focus(),l.current=o},[o]),d.useEffect(()=>{const g=()=>{window.innerWidth>=768&&i(v=>({...v,open:!1}))};return window.addEventListener("resize",g),()=>window.removeEventListener("resize",g)},[]),d.useEffect(()=>{if(!o)return;const g=v=>{if(v.key==="Escape"&&(i(y=>({...y,open:!1})),c.current?.focus()),v.key!=="Tab")return;const P=Array.from(h.current?.querySelectorAll('[data-app-layout-navigation] a, [data-app-layout-navigation] button, [data-workspace-pane="list"] a, [data-workspace-pane="list"] button, [data-workspace-pane="list"] input, [data-drawer-close]')??[]).filter(y=>y.getClientRects().length&&!y.hasAttribute("disabled")),j=P[0],b=P.at(-1);v.shiftKey&&document.activeElement===j?(v.preventDefault(),b?.focus()):!v.shiftKey&&document.activeElement===b&&(v.preventDefault(),j?.focus())};return document.addEventListener("keydown",g),h.current?.querySelector("[data-drawer-close]")?.focus(),()=>document.removeEventListener("keydown",g)},[o]);const x=n.jsx("button",{ref:c,type:"button",className:"xpod-navigation-toggle","aria-label":"打开导航","aria-expanded":o,onClick:()=>i({path:e.pathname,open:!0}),children:n.jsx(La,{"aria-hidden":"true",size:20})}),p=n.jsxs(n.Fragment,{children:[x,n.jsxs("span",{className:"xpod-header-parent",children:[u?.label??"Xpod"," ›"]})]});return n.jsx(On.Provider,{value:{open:o,onClose:()=>i(g=>({...g,open:!1})),headerLeading:p},children:n.jsxs("section",{ref:h,role:o?"dialog":void 0,"aria-modal":o||void 0,"aria-label":o?"Xpod 导航":void 0,className:`xpod-desktop-shell xpod-${t}-shell`,"data-app-layout":"workspace","data-drawer-open":o,children:[n.jsxs("header",{className:"xpod-narrow-header","data-app-layout-header":!0,children:[x,n.jsxs("span",{children:[u?.label??"Xpod",f?` › ${f}`:""]})]}),o?n.jsx("button",{className:"xpod-drawer-backdrop","aria-label":"关闭导航",onClick:()=>{i(g=>({...g,open:!1})),c.current?.focus()}}):null,n.jsxs("aside",{className:"xpod-rail","data-app-layout-navigation":!0,"aria-label":"Xpod 工作区导航",onClick:g=>{g.target.closest("a")&&i(v=>({...v,open:!1}))},children:[n.jsx("div",{className:"xpod-rail-profile",children:n.jsx(ko,{})}),n.jsx(sr,{items:Je.slice(0,3),label:"应用"}),n.jsx("div",{className:"xpod-rail-host",children:n.jsx(sr,{items:Je.slice(3),label:"本机",attentionIds:s?["device"]:[]})})]}),o?n.jsx("button",{"data-drawer-close":!0,className:"xpod-drawer-close","aria-label":"收起导航",onClick:()=>{i(g=>({...g,open:!1})),c.current?.focus()},children:n.jsx(Lr,{size:18})}):null,n.jsx("div",{className:"xpod-shell-content","data-app-layout-content":!0,children:n.jsx(ht,{})})]})})}function Do({onReady:t}){const e=d.useContext(gt),r=d.useRef(!1),s=e?.isInitializing===!0;return d.useEffect(()=>{!s&&!r.current&&(r.current=!0,t())},[s,t]),null}const nr="xpod:returnTo";function Oo(){try{const t=sessionStorage.getItem(nr);return t&&sessionStorage.removeItem(nr),t}catch{return null}}const dt="xpod.auth.login-cancelled";function Ie(t){try{t?window.localStorage.setItem(dt,"1"):window.localStorage.removeItem(dt)}catch{}}function cs(t){const e=new URL(window.location.href);return e.searchParams.get("xpod-login")!==t?!1:(Ie(!0),Oo(),e.searchParams.delete("xpod-login"),window.history.replaceState(window.history.state,"",`${e.pathname}${e.search}${e.hash}`),!0)}function Fo(){return new URL(window.location.href).searchParams.get("xpod-login")==="switch"}function $o(){return cs("switch")}function Bo(){if(cs("cancelled"))return!0;try{return window.localStorage.getItem(dt)==="1"}catch{return!1}}function zo(t){const e=t.location??(typeof window>"u"?"http://localhost/":window.location),s=[Os(e)],a=Mo(e),i=t.transactionStore??Ai({origin:a}),o=u=>{if(u!==void 0)return Ze(u);const m=new URL(ls(e)),f=`${m.pathname}${m.search}`;try{return Ze(f)}catch{return}};let c=!1;const l=u=>{try{return i.begin(u)}catch(m){if(c||!(m instanceof T)||m.code!=="already_active")throw m;try{const f=i.readSinglePending();f&&i.cancel(f.id)}catch{}return i.begin(u)}},h=async(u,m,f)=>{const x=o(u),p={id:Kr(),route:s[0],authorizationSurface:"redirect",discovery:"strict",...f?{prompt:f}:{},...x===void 0?{}:{returnTo:x},...m===void 0?{}:{selectedStorage:m}},g=l(p);c=!0;try{await t.runtime.login(g)}catch(v){try{i.cancel(g.id)}catch{}throw v}finally{c=!1}return g};return{routes:s,startLogin:h,retryLogin:h,cancelLogin(){const u=i.readSinglePending();u&&i.cancel(u.id)},readPending:()=>i.readSinglePending(),callbackUrl(){return`${a}/auth/callback`}}}function Mo(t){return new URL(ls(t)).origin}function ls(t){return typeof t=="string"?t:t.href}function Xo(t){if(!t)return"cloud";let e;try{e=new URL(t).hostname.toLowerCase()}catch{return"cloud"}return e==="localhost"||e.endsWith(".localhost")||e.endsWith(".local")||e==="::1"||e==="[::1]"||/^127\./u.test(e)||/^10\./u.test(e)||/^192\.168\./u.test(e)||/^172\.(1[6-9]|2\d|3[01])\./u.test(e)?"edge":"cloud"}const X=or("zh-CN"),qo={name:"Xpod",icon:n.jsx(ft,{size:24})},Go="无法打开选中的 Pod,请重试。",Wo="操作未完成,请重试。";function Ho(t){return n.jsx(Dr,{children:n.jsx(Vo,{...t})})}function Vo({children:t,autoStart:e=!1,developerMode:r=!1}){const s=Re(),a=d.useContext(gt),i=d.useSyncExternalStore(Tr,Ga,()=>!1),o=d.useMemo(()=>zo({runtime:s}),[s]),[c]=d.useState(Fo),[l,h]=d.useState(()=>c||Bo());d.useLayoutEffect(()=>{c&&$o()},[c]),d.useEffect(()=>{if(l)try{o.cancelLogin()}catch{}},[l,o]);const u=Jo(s.state),m=Ko(s,u),f="remembered"in u?u.remembered:void 0,x=f?Qo(f):void 0,[p,g]=d.useState(f&&x?{signature:x,identity:f}:void 0);x!==void 0&&x!==p?.signature&&g({signature:x,identity:f});const v=u.status==="authenticated"&&m?.status==="ready",[P,j]=d.useState(),[b,y]=d.useState(!1),[I,R]=d.useState(c?{prompt:"login"}:void 0),N=d.useRef(0),[E,S]=d.useState(!1),_=d.useRef(!1),L=d.useRef(!1),O=d.useCallback(A=>{console.error("[WebIdAuthBoundary] authentication action failed",A),j(Wo)},[]),U=d.useCallback(A=>{const M=++N.current;j(void 0),y(!0),A().catch(Q=>{M===N.current&&O(Q)}).finally(()=>{M===N.current&&y(!1)})},[O]),H=d.useCallback(()=>{Ie(!1),h(!1),j(void 0),R({})},[]),te=d.useCallback(()=>{if(!I)return;const A=I.prompt;Ie(!1),h(!1),R(void 0),U(async()=>{c&&await s.session.initialize({restorePreviousSession:!1}),await o.startLogin(void 0,void 0,A)})},[o,I,U,s.session,c]),J=()=>{if(E){F();return}u.status==="authenticated"?s.retryPodOpen?.():H()},Y=()=>{if(!E){try{o.cancelLogin()}catch{}Ie(!0),h(!0),R(void 0),N.current+=1,y(!1),j(void 0)}},F=()=>U(async()=>{S(!0);const A=()=>{Ie(!1),h(!1),hr(),j(void 0),R({prompt:"login"}),S(!1)};a?await nt(a,s,{onComplete:A}):(await s.logout(),A())});if(d.useEffect(()=>{s.state.status!=="loading"||_.current||(_.current=!0,s.session.initialize({restorePreviousSession:!l}).catch(O))},[l,O,s.session,s.state.status]),d.useEffect(()=>{l||I||i||b||E||!e||L.current||u.status!=="anonymous"||(L.current=!0,H())},[l,i,e,b,I,H,u.status,E]),v&&!b&&!P)return n.jsx(n.Fragment,{children:t});const B=f,q=u.status==="restoring",le=b||!!I||e&&!l&&!i&&u.status==="anonymous"&&!P,K=B&&!l?Ue(B):void 0;let C=((A=!1)=>K?{kind:"remembered",identity:K,busy:A}:{kind:"choose-service",busy:A})(),G,w=H,k,D=!1;if(!l&&s.state.status==="error"&&s.state.error.name==="SolidSessionPendingError")G={tone:"warning",text:X.noticePending,primaryLabel:X.refreshPage,developerDetail:s.state.error.message},w=()=>window.location.reload();else if(P)G={tone:"warning",text:X.noticeIncomplete,primaryLabel:X.retry,developerDetail:P},w=J,k=K&&!E?F:void 0;else if(q)C={kind:"restoring",...B?{identity:Ue(B)}:{}};else if(le){const A=K??(!l&&p?Ue(p.identity):void 0);C=A?{kind:"remembered",identity:A,busy:!0}:{kind:"choose-service",busy:!0},w=()=>{},D=!E}else if(u.status==="authenticated"){const A=Ue(yt(u.webId)??{displayName:ma(u.webId),webId:u.webId});m?.status==="conflict"?(C={kind:"remembered",identity:A},G={tone:"warning",text:X.noticeIncomplete,primaryLabel:X.useAnother,developerDetail:m.message},w=F):m?.status==="error"?(C={kind:"remembered",identity:A},G={tone:"warning",text:X.noticeUnreachable,primaryLabel:X.retry,developerDetail:m.message},w=J,k=F):(C={kind:"remembered",identity:A,busy:!0},w=()=>{})}else K?(k=F,u.status==="expired"?(C={kind:"expired",identity:K},w=J):u.status==="error"&&(G={tone:"warning",text:X.noticeIncomplete,primaryLabel:X.reauthenticate,developerDetail:u.message},w=J)):!l&&(u.status==="error"||u.status==="expired")&&(G={tone:"warning",text:u.status==="expired"?X.expiredLine:X.noticeIncomplete,primaryLabel:X.reauthenticate,developerDetail:u.status==="error"?u.message:void 0},w=J);return n.jsxs(Fs,{ariaLabel:"登录 Xpod",children:[I?n.jsx(Do,{onReady:te}):null,n.jsx(pa,{app:qo,brand:n.jsx($s,{renderLogo:A=>n.jsxs("span",{className:"flex items-center gap-2",children:[n.jsx(ft,{size:24}),n.jsxs("span",{className:"flex flex-col text-left",children:[n.jsx("span",{className:"text-[13px] font-medium",children:"Xpod"}),n.jsx("span",{className:"text-[9px] leading-none text-primary",children:A})]})]})}),state:C,notice:G,locale:"zh-CN",developerMode:r,capabilities:{customService:!1,register:!1},onPrimary:w,onUseAnother:k}),D?n.jsx(ue,{type:"button",variant:"ghost",className:"mt-2 h-9 w-full rounded-lg px-2",onClick:Y,children:X.cancel}):null]})}function Ue(t){const e=Oe(),r=e&&(!t.webId||e.webId===t.webId)?e.storageBinding.storageUrl:void 0,s=Xo(r);return{displayName:t.displayName,...t.avatarUrl?{avatarUrl:t.avatarUrl}:{},...r?{storage:{kind:s,label:s==="cloud"?X.storageCloud:X.storageEdge}}:{}}}function Qo(t){return[t.routeId,t.webId??"",t.displayName,t.avatarUrl??""].join("\0")}function Ko(t,e){if(e.status!=="authenticated")return;if(t.podError?.webId===e.webId)return{status:"error",message:Go};if(t.currentPod===void 0)return{status:"waiting_for_binding"};const r=t.selectedStorage??{webId:t.currentPod.webId,storageUrl:t.currentPod.podUrl},s=t.state.status==="authenticated"?t.state.podUrl:void 0;return t.currentPod.webId===e.webId&&r.webId===t.currentPod.webId&&ar(r.storageUrl,t.currentPod.podUrl)&&(s===void 0||ar(t.currentPod.podUrl,s))?{status:"ready",selected:r}:{status:"conflict",message:"当前 WebID 已登录,但选中的 Pod 与该身份不一致。"}}function ar(t,e){try{return new URL(t).href===new URL(e).href}catch{return t===e}}function yt(t){const e=Oe();if(e&&!(t&&t!==e.webId))return{displayName:e.account.displayName??e.account.username??e.account.email??"Xpod",...e.account.avatarUrl?{avatarUrl:e.account.avatarUrl}:{},webId:e.webId,routeId:e.routeId}}function Ye(t,e){const r=yt(e);return r?{...t,remembered:r}:t}function Jo(t){switch(t.status){case"loading":return Ye({status:"restoring"});case"anonymous":return Ye({status:"anonymous"});case"expired":return Ye({status:"expired"},t.webId);case"authenticated":return{status:"authenticated",webId:t.webId};case"error":{const e=yt(t.webId);return{status:"error",message:t.error.message,retryRouteId:"xpod-current-origin",...e?{remembered:e}:{}}}}}const Yo=d.lazy(()=>re(()=>import("./ModelsPage-CMTdfqBR.js").then(t=>t.M),__vite__mapDeps([14,3,4,9,2,5,11,1,6,7,12,15]))),Zo=d.lazy(()=>re(()=>import("./DevicePages-jOjMcvsr.js"),__vite__mapDeps([16,3,4,9,2,5,17,6,12,13,1,7,8])).then(t=>({default:t.DeviceNetworkPage}))),ec=d.lazy(()=>re(()=>import("./DevicePages-jOjMcvsr.js"),__vite__mapDeps([16,3,4,9,2,5,17,6,12,13,1,7,8])).then(t=>({default:t.DeviceServicesPage}))),tc=d.lazy(()=>re(()=>import("./DevicePages-jOjMcvsr.js"),__vite__mapDeps([16,3,4,9,2,5,17,6,12,13,1,7,8])).then(t=>({default:t.DeviceRuntimePage}))),rc=d.lazy(()=>re(()=>import("./DevicePages-jOjMcvsr.js"),__vite__mapDeps([16,3,4,9,2,5,17,6,12,13,1,7,8])).then(t=>({default:t.DeviceLogsPage}))),sc=d.lazy(()=>re(()=>import("./TasksPage-CxtLJiSF.js"),__vite__mapDeps([18,3,4,6,5,9,2,1,7,8,19]))),fe=t=>n.jsx(gr,{children:t}),nc=[{path:"device",element:n.jsx(lt,{subject:"device"}),children:[{index:!0,element:n.jsx(pe,{to:"network",replace:!0})},{path:"network",element:fe(n.jsx(Zo,{}))},{path:"services",element:fe(n.jsx(ec,{}))},{path:"runtime",element:fe(n.jsx(tc,{}))},{path:"logs",element:fe(n.jsx(rc,{}))}]},{path:"settings",element:n.jsx(lt,{subject:"settings"}),children:[{index:!0,element:n.jsx(pe,{to:"appearance",replace:!0})},{path:"appearance",element:n.jsx(No,{})}]}],ac=[{element:n.jsx(Ho,{autoStart:!0,children:n.jsx(ht,{})}),children:[{path:"ai-connections",element:fe(n.jsx(Yo,{}))},{path:"pod",element:n.jsx(lt,{subject:"pod"}),children:[{index:!0,element:n.jsx(pe,{to:"models",replace:!0})},...["models","search","apps","data"].map(t=>({path:t,element:n.jsx(Io,{section:t})}))]},{path:"tasks",element:fe(n.jsx(sc,{}))},{path:"inbox",element:n.jsx(er,{title:"收件箱",children:n.jsx(ns,{})})},{path:"notifications",element:n.jsx(er,{title:"通知",children:n.jsx(as,{})})}]}],ic=[{element:n.jsx(Uo,{product:"settings"}),children:[...nc,...ac,...Object.entries(Hr).map(([t,e])=>({path:t.slice(1),element:t==="/settings/pod"?n.jsx(Cn,{to:e}):n.jsx(pe,{to:e,replace:!0})})),{index:!0,element:n.jsx(pe,{to:Se,replace:!0})},{path:"*",element:n.jsx(pe,{to:Se,replace:!0})}]}];function oc(){const t=Fe(),e=jn(ic);return d.useEffect(()=>{document.title="Xpod"},[t.pathname]),e}function cc({runtime:t,initialPathname:e}={}){const[r]=d.useState(()=>lc(e));return n.jsx(ao,{children:n.jsx(Tn,{children:n.jsxs(Zi,{value:t,children:[n.jsx(wi,{}),n.jsx(xi,{}),n.jsxs(yn,{children:[n.jsx(Ni,{}),n.jsx(Ii,{children:n.jsx(go,{children:n.jsx(Dr,{children:n.jsx(oc,{})})})}),n.jsx(da,{})]},r)]})})})}function lc(t){const r=`${Si(t??globalThis.location?.pathname??Se)}${globalThis.location?.search??""}${globalThis.location?.hash??""}`;return`${globalThis.location?.pathname??""}${globalThis.location?.search??""}${globalThis.location?.hash??""}`!==r&&globalThis.history?.replaceState(null,"",r),r}const Ic=Object.freeze(Object.defineProperty({__proto__:null,XpodShellApp:cc},Symbol.toStringTag,{value:"Module"}));export{Zt as A,ti as B,va as C,ei as D,wc as E,Ic as F,jr as I,Ne as L,qr as N,Fr as Q,Cr as R,yr as S,se as T,ri as V,Se as X,He as a,cc as b,Ai as c,si as d,Ja as e,Or as f,wr as g,Pe as h,io as i,ss as j,xo as k,oo as l,ja as m,Z as n,Qn as o,yc as p,vc as q,jc as r,Ie as s,_c as t,Re as u,xc as v,ca as w,da as x,zo as y,Fi as z};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as u,a as b}from"./xpod-remembered-login-Dr69A0Rv.js";import{c as g}from"./ModelsPage-CMTdfqBR.js";import{c as w,s as L,d as x,o as P,n as R,a as _,b as O,e as I}from"./XpodAiConnectionsPodStore-wx3Ttupm.js";import{r as K}from"./layout-DB3pMyTl.js";import"./createLucideIcon-bunMzPms.js";import"./dashboard-mlsg3yaw.js";import"./button-By5Bgvmb.js";import"./PodDeletionAuthorizationPanel-D3NOG6ZM.js";import"./account-session-DCUmCop1.js";import"./XpodShellApp-5FWY8-d5.js";import"./safe-continuation-D9AhcWiB.js";import"./nav-item-style-BNqWQY6p.js";import"./section-header-CLCzbOp_.js";import"./label-Bj03L9xs.js";import"@comunica/query-sparql-solid";async function G(o){const a=o.capabilities.podCollections;if(a)try{return a.load?{collection:await a.load(u,{table:b})}:{collection:a.define(u,{table:b})}}catch{return}}function h(o){return o.includes("#")?K(u,{id:o}):o}async function M(o,a){await o.insert(a).isPersisted.promise}async function p(o,a,i){await o.update(a,d=>{Object.assign(d,i)}).isPersisted.promise}async function C(o,a){await o.delete(a).isPersisted.promise}function U(o,a){const{provider:i}=a,d=L(i,a.offeringId??x(i,a.authMode)),c=a.baseUrl??P(i,d),f=R(a.proxyUrl);return{id:o,service:"ai",provider:i==="custom"?O(o):I(i),authMode:a.authMode,status:"active",accountLabel:a.accountLabel,label:a.accountLabel,keyVersion:"1",reauthRequired:!1,encryptionAlgorithm:"PLAINTEXT",offeringId:d,...c?{baseUrl:c}:{},...f?{proxyUrl:f}:{},metadata:_({offeringId:d,baseUrl:c})}}function H(o,a){const{collection:i}=o,d=async r=>{await C(i,r).catch(()=>{})},c=(r,t)=>{const e=i.get(r);return e?g(e,t):void 0},f=async(r,t,e,n)=>{await M(i,e);try{const s=await n(b.buildId({id:t}))??c(t,r);if(!s)throw new Error("credential_create_failed");return s}catch(l){throw await d(t),l}};return{async createApiKeyCredential(r,t){if(!a.createApiKeyCredential)throw new Error("credential_store_unavailable");const e=w(r,"apiKey"),n=t.label??r;return await f(r,e,U(e,{provider:r,authMode:"apiKey",accountLabel:n,offeringId:t.offeringId,baseUrl:t.baseUrl,proxyUrl:t.proxyUrl}),l=>a.createApiKeyCredential(r,{...t,label:n,id:l}))},async createLocalCredential(r,t){if(!a.createLocalCredential)throw new Error("credential_store_unavailable");const e=w(r,"local"),n=t.label??"Local";return await f(r,e,U(e,{provider:r,authMode:"local",accountLabel:n,offeringId:t.offeringId,baseUrl:t.baseUrl}),l=>a.createLocalCredential(r,{...t,label:n,id:l}))},async updateProviderCredential(r,t,e){const n=h(t);if(!n)throw new Error("credential_not_found");const l={...e.label===void 0?{}:{label:e.label,accountLabel:e.label},...e.enabled===void 0?{}:{status:e.enabled?"active":"disabled"}},s=i.get(n);Object.keys(l).length>0&&await p(i,n,l);const y={...e.priority===void 0?{}:{priority:e.priority},...e.baseUrl===void 0?{}:{baseUrl:e.baseUrl},...e.proxyUrl===void 0?{}:{proxyUrl:e.proxyUrl}};if(Object.keys(y).length===0)return c(n,r);if(!a.updateProviderCredential)throw new Error("credential_store_unavailable");try{return await a.updateProviderCredential(r,t,{expectedVersion:e.expectedVersion,...y})??c(n,r)}catch(m){throw s&&Object.keys(l).length>0&&await p(i,n,{...l.label===void 0?{}:{label:s.label,accountLabel:s.accountLabel},...l.status===void 0?{}:{status:s.status}}).catch(()=>{}),m}},async deleteProviderCredential(r,t){const e=h(t);if(!e)return;const n=c(e,r);return await C(i,e),n}}}export{H as collectionCredentialMutations,h as credentialRowKey,G as openCredentialCollection};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@theme inline{ --color-background: hsl(var(--background)); --color-foreground: hsl(var(--foreground)); --color-card: hsl(var(--card)); --color-card-foreground: hsl(var(--card-foreground)); --color-primary: hsl(var(--primary)); --color-primary-foreground: hsl(var(--primary-foreground)); --color-primary-hover: hsl(var(--primary-hover)); --color-primary-pressed: hsl(var(--primary-pressed)); --color-secondary: hsl(var(--secondary)); --color-secondary-foreground: hsl(var(--secondary-foreground)); --color-muted: hsl(var(--muted)); --color-muted-foreground: hsl(var(--muted-foreground)); --color-accent: hsl(var(--accent)); --color-accent-foreground: hsl(var(--accent-foreground)); --color-destructive: hsl(var(--destructive)); --color-destructive-foreground: hsl(var(--destructive-foreground)); --color-border: hsl(var(--border)); --color-input: hsl(var(--input)); --color-control-strong: hsl(var(--control-strong)); --color-ring: hsl(var(--ring)); --color-sunken: hsl(var(--sunken)); --color-success: hsl(var(--success)); --color-warning: hsl(var(--warning)); --color-layout-sidebar: hsl(var(--layout-sidebar)); --color-layout-list-header: hsl(var(--layout-list-header)); --color-layout-list-hover: hsl(var(--layout-list-hover)); --color-layout-list-item: hsl(var(--layout-list-item)); --color-layout-list-selected: hsl(var(--layout-list-selected)); --color-layout-content: hsl(var(--layout-content)); }*,: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: }*,: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,system-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:JetBrains Mono,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}input:where([type=text]),input:where(:not([type])),input:where([type=email]),input:where([type=url]),input:where([type=password]),input:where([type=number]),input:where([type=date]),input:where([type=datetime-local]),input:where([type=month]),input:where([type=search]),input:where([type=tel]),input:where([type=time]),input:where([type=week]),select:where([multiple]),textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}input:where([type=text]):focus,input:where(:not([type])):focus,input:where([type=email]):focus,input:where([type=url]):focus,input:where([type=password]):focus,input:where([type=number]):focus,input:where([type=date]):focus,input:where([type=datetime-local]):focus,input:where([type=month]):focus,input:where([type=search]):focus,input:where([type=tel]):focus,input:where([type=time]):focus,input:where([type=week]):focus,select:where([multiple]):focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--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);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}select:where([multiple]),select:where([size]:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}input:where([type=checkbox]),input:where([type=radio]){-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}input:where([type=checkbox]){border-radius:0}input:where([type=radio]){border-radius:100%}input:where([type=checkbox]):focus,input:where([type=radio]):focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--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)}input:where([type=checkbox]):checked,input:where([type=radio]):checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}input:where([type=checkbox]):checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media(forced-colors:active){input:where([type=checkbox]):checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}input:where([type=radio]):checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media(forced-colors:active){input:where([type=radio]):checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}input:where([type=checkbox]):checked:hover,input:where([type=checkbox]):checked:focus,input:where([type=radio]):checked:hover,input:where([type=radio]):checked:focus{border-color:transparent;background-color:currentColor}input:where([type=checkbox]):indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media(forced-colors:active){input:where([type=checkbox]):indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}input:where([type=checkbox]):indeterminate:hover,input:where([type=checkbox]):indeterminate:focus{border-color:transparent;background-color:currentColor}input:where([type=file]){background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}input:where([type=file]):focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}:root{color-scheme:light;--background: 42 38.5% 94.9%;--foreground: 30 13.2% 14.9%;--card: 45 33.3% 97.6%;--card-foreground: 30 13.2% 14.9%;--popover: 45 33.3% 97.6%;--popover-foreground: 30 13.2% 14.9%;--primary: 260.6 36.1% 38%;--primary-foreground: 42 38.5% 94.9%;--secondary: 0 10.2% 90.4%;--secondary-foreground: 30 13.2% 14.9%;--muted: 18 15.6% 87.5%;--muted-foreground: 33.3 9.8% 36.1%;--accent: 324 7.5% 86.9%;--accent-foreground: 30 13.2% 14.9%;--destructive: 352 43% 49%;--destructive-foreground: 0 0% 100%;--border: 36 13.5% 85.5%;--input: 36 4% 51%;--ring: 260.6 36.1% 38%;--lineage: 260.6 36.1% 38%;--lineage-foreground: 42 38.5% 94.9%;--boundary: 202 34% 37%;--boundary-foreground: 0 0% 100%;--success: 160 48% 30%;--success-foreground: 0 0% 100%;--warning: 44 72% 36%;--warning-foreground: 0 0% 100%;--radius-xs: 2px;--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--radius-2xl: 16px;--radius-3xl: 16px;--radius: .5rem;--layout-sidebar: 41.3 38.1% 91.8%;--layout-list-header: 42 38.5% 94.9%;--layout-list-hover: 0 10.2% 90.4%;--layout-list-item: 45 33.3% 97.6%;--layout-list-selected: 324 7.5% 86.9%;--layout-content: 42 38.5% 94.9%;--purple-medium: 260.6 36.1% 38%;--purple-deep: 261.2 35.7% 28%;--purple-light: 258 48% 84%;--control-strong: 33.3 9.8% 36.1%;--primary-hover: 261 35.7% 32.9%;--primary-pressed: 261.2 35.7% 28%;--sunken: 41.3 38.1% 91.8%;--action-hover: 261 35.7% 32.9%;--action-pressed: 261.2 35.7% 28%;--tint-canvas: 0 10.2% 90.4%;--tint-sunken: 18 15.6% 87.5%;--tint-badge: 324 7.5% 86.9%;--layer-base: 0;--layer-sticky: 10;--layer-popover: 20;--layer-backdrop: 30;--layer-modal: 40;--layer-toast: 50;--scrim: 30 13.8% 11.4%}.dark{color-scheme:dark;--background: 30 13.8% 11.4%;--foreground: 42 38.5% 94.9%;--card: 30 13.2% 14.9%;--card-foreground: 42 38.5% 94.9%;--popover: 30 13.2% 14.9%;--popover-foreground: 42 38.5% 94.9%;--primary: 270 16.7% 71.8%;--primary-foreground: 30 13.8% 11.4%;--secondary: 276.9 11.7% 21.8%;--secondary-foreground: 42 38.5% 94.9%;--muted: 276.9 11.7% 21.8%;--muted-foreground: 34.3 15.8% 73.9%;--accent: 276.9 11.7% 21.8%;--accent-foreground: 42 38.5% 94.9%;--destructive: 352 43% 49%;--destructive-foreground: 0 0% 100%;--border: 30 12.3% 25.5%;--input: 32.7 9.2% 53.3%;--ring: 270 16.7% 71.8%;--lineage: 270 16.7% 71.8%;--lineage-foreground: 30 13.8% 11.4%;--boundary: 202 34% 48%;--boundary-foreground: 0 0% 100%;--success: 160 48% 42%;--success-foreground: 0 0% 100%;--warning: 44 72% 48%;--warning-foreground: 0 0% 100%;--layout-sidebar: 30 13.6% 8.6%;--layout-list-header: 30 13.8% 11.4%;--layout-list-hover: 276.9 11.7% 21.8%;--layout-list-item: 30 13.2% 14.9%;--layout-list-selected: 276.9 11.7% 21.8%;--layout-content: 30 13.8% 11.4%;--control-strong: 33.9 13.6% 66.9%;--primary-hover: 271.6 16.8% 77.8%;--primary-pressed: 264.4 18.8% 66.7%;--sunken: 30 13.6% 8.6%;--action-hover: 271.6 16.8% 77.8%;--action-pressed: 264.4 18.8% 66.7%;--tint-canvas: 276.9 11.7% 21.8%;--tint-sunken: 276.9 11.7% 21.8%;--tint-badge: 276.9 11.7% 21.8%;--purple-medium: 270 16.7% 71.8%;--purple-deep: 264.4 18.8% 66.7%;--layer-base: 0;--layer-sticky: 10;--layer-popover: 20;--layer-backdrop: 30;--layer-modal: 40;--layer-toast: 50;--scrim: 30 13.8% 11.4%}.light{color-scheme:light;--background: 42 38.5% 94.9%;--foreground: 30 13.2% 14.9%;--card: 45 33.3% 97.6%;--card-foreground: 30 13.2% 14.9%;--popover: 45 33.3% 97.6%;--popover-foreground: 30 13.2% 14.9%;--primary: 260.6 36.1% 38%;--primary-foreground: 42 38.5% 94.9%;--secondary: 0 10.2% 90.4%;--secondary-foreground: 30 13.2% 14.9%;--muted: 18 15.6% 87.5%;--muted-foreground: 33.3 9.8% 36.1%;--accent: 324 7.5% 86.9%;--accent-foreground: 30 13.2% 14.9%;--destructive: 352 43% 49%;--destructive-foreground: 0 0% 100%;--border: 36 13.5% 85.5%;--input: 36 4% 51%;--ring: 260.6 36.1% 38%;--lineage: 260.6 36.1% 38%;--lineage-foreground: 42 38.5% 94.9%;--boundary: 202 34% 37%;--boundary-foreground: 0 0% 100%;--success: 160 48% 30%;--success-foreground: 0 0% 100%;--warning: 44 72% 36%;--warning-foreground: 0 0% 100%;--layout-sidebar: 41.3 38.1% 91.8%;--layout-list-header: 42 38.5% 94.9%;--layout-list-hover: 0 10.2% 90.4%;--layout-list-item: 45 33.3% 97.6%;--layout-list-selected: 324 7.5% 86.9%;--layout-content: 42 38.5% 94.9%;--purple-medium: 260.6 36.1% 38%;--purple-deep: 261.2 35.7% 28%;--purple-light: 258 48% 84%;--control-strong: 33.3 9.8% 36.1%;--primary-hover: 261 35.7% 32.9%;--primary-pressed: 261.2 35.7% 28%;--sunken: 41.3 38.1% 91.8%;--action-hover: 261 35.7% 32.9%;--action-pressed: 261.2 35.7% 28%;--tint-canvas: 0 10.2% 90.4%;--tint-sunken: 18 15.6% 87.5%;--tint-badge: 324 7.5% 86.9%;--layer-base: 0;--layer-sticky: 10;--layer-popover: 20;--layer-backdrop: 30;--layer-modal: 40;--layer-toast: 50;--scrim: 30 13.8% 11.4%}html,body{background-color:hsl(var(--background));color:hsl(var(--foreground))}html input:where(:not([type]),[type=text],[type=email],[type=password],[type=number],[type=date],[type=datetime-local],[type=month],[type=search],[type=tel],[type=time],[type=url],[type=week]),html textarea,html select{border:1px solid hsl(var(--input));border-radius:calc(var(--radius) - 2px);background-color:hsl(var(--background));color:hsl(var(--foreground));caret-color:hsl(var(--foreground));--tw-ring-offset-color: hsl(var(--background))}html input::-moz-placeholder,html textarea::-moz-placeholder{color:hsl(var(--muted-foreground));opacity:1}html input::placeholder,html textarea::placeholder{color:hsl(var(--muted-foreground));opacity:1}html input:where([type=checkbox],[type=radio]){border-color:hsl(var(--input));background-color:hsl(var(--background));color:hsl(var(--primary));accent-color:hsl(var(--primary));--tw-ring-offset-color: hsl(var(--background))}html input:focus,html textarea:focus,html select:focus{border-color:hsl(var(--ring));outline:none;box-shadow:none;--tw-ring-shadow: 0 0 #0000;--tw-ring-offset-shadow: 0 0 #0000}html button,html input,html textarea,html select{-webkit-tap-highlight-color:transparent}html button:focus,html input:focus,html textarea:focus,html select:focus,html [role=button]:focus{outline:none}html input:focus-visible,html textarea:focus-visible,html select:focus-visible{border-color:hsl(var(--ring));border-width:2px;outline:none;box-shadow:none}html input:where([type=checkbox],[type=radio]):checked:focus-visible,html input:where([type=checkbox]):indeterminate:focus-visible{border-color:hsl(var(--primary-foreground))}html input:-webkit-autofill,html input:-webkit-autofill:hover,html input:-webkit-autofill:focus,html input:-webkit-autofill:active{-webkit-box-shadow:0 0 0 30px hsl(var(--background)) inset!important;-webkit-text-fill-color:hsl(var(--foreground))!important;caret-color:hsl(var(--foreground))!important;-webkit-transition:background-color 5000s ease-in-out 0s;transition:background-color 5000s ease-in-out 0s}*{border-color:hsl(var(--border))}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}html,body,#root{min-height:100%;background-color:hsl(var(--background))}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{border-radius:9999px;background-color:hsl(var(--muted-foreground) / .2);-webkit-transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--muted-foreground) / .4)}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.pod-sign-in{font-family:PingFang SC,SF Pro Text,-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans SC,Helvetica Neue,Arial,sans-serif;font-size:14px;line-height:22px}.pod-sign-in h1{font-size:22px;line-height:1.4}@media(max-height:559px){.pod-sign-in[data-pod-sign-in-frame=window] [data-pod-sign-in=main]{gap:1rem;padding-top:1rem;padding-bottom:.5rem}.pod-sign-in[data-pod-sign-in-frame=window] [data-pod-sign-in=actions]{gap:.75rem;padding-top:.75rem;padding-bottom:1rem}}@media(min-width:400px)and (min-height:560px){.pod-sign-in[data-pod-sign-in-frame=window] [data-pod-sign-in=actions]{padding-bottom:5rem}}.pod-sign-in :focus-visible:not(input):not(textarea):not(select){outline:2px solid hsl(var(--ring));outline-offset:3px}[data-pod-sign-in-frame=window] [data-pod-sign-in-state=idp-sign-in]{overflow-y:auto}[data-pod-sign-in-frame=window] [data-pod-sign-in-state=idp-sign-in] [data-pod-sign-in=idp-chrome]{height:32px}[data-pod-sign-in-frame=window] [data-pod-sign-in-state=idp-sign-in] [data-pod-sign-in=main]{flex:1 0 auto;overflow:visible;gap:8px;padding:8px 16px}[data-pod-sign-in-frame=window] [data-pod-sign-in-state=idp-sign-in] [data-pod-sign-in=fields]{gap:8px}[data-pod-sign-in-frame=window] [data-pod-sign-in-state=idp-sign-in] [data-pod-sign-in=field]{gap:2px}[data-pod-sign-in-frame=window] [data-pod-sign-in-state=idp-sign-in] [data-pod-sign-in=actions]{gap:0;padding:8px 16px}@media(prefers-reduced-motion:reduce){.pod-sign-in,.pod-sign-in *{animation:none!important;transition:none!important}}.xpod-overlay-scrim{background-color:hsl(var(--scrim) / .45)}.warm-card{border:1px solid hsl(var(--border) / .5);border-radius:var(--radius-xl);background-color:hsl(var(--card));box-shadow:0 10px 15px -3px #0000000d,0 4px 6px -4px #0000000d;transition-property:color,background-color,border-color,box-shadow,transform;transition-duration:.3s}.type-h1{font-size:1.5rem;line-height:2rem;font-weight:600;letter-spacing:-.025em}.warm-card{border-radius:.75rem;border-width:1px;border-color:hsl(var(--border) / .5);background-color:hsl(var(--card));--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);--tw-shadow-color: rgb(0 0 0 / .05);--tw-shadow: var(--tw-shadow-colored);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;animation-duration:.3s}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.inset-y-0{top:0;bottom:0}.-bottom-0\.5{bottom:-.125rem}.-bottom-1{bottom:-.25rem}.-right-0\.5{right:-.125rem}.-right-1{right:-.25rem}.bottom-0{bottom:0}.bottom-0\.5{bottom:.125rem}.bottom-1{bottom:.25rem}.bottom-4{bottom:1rem}.left-0{left:0}.left-1\/2{left:50%}.left-1\/4{left:25%}.left-2\.5{left:.625rem}.left-3{left:.75rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-0\.5{right:.125rem}.right-1{right:.25rem}.right-1\/4{right:25%}.right-2{right:.5rem}.right-4{right:1rem}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.top-full{top:100%}.isolate{isolation:isolate}.-z-10{z-index:-10}.z-10{z-index:10}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[1\]{z-index:1}.z-\[var\(--layer-backdrop\)\]{z-index:var(--layer-backdrop)}.z-\[var\(--layer-modal\)\]{z-index:var(--layer-modal)}.z-\[var\(--layer-popover\)\]{z-index:var(--layer-popover)}.z-\[var\(--layer-sticky\)\]{z-index:var(--layer-sticky)}.z-\[var\(--layer-toast\)\]{z-index:var(--layer-toast)}.order-last{order:9999}.col-start-1{grid-column-start:1}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.m-0{margin:0}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.-ml-1{margin-left:-.25rem}.-ml-1\.5{margin-left:-.375rem}.-ml-2{margin-left:-.5rem}.mb-1{margin-bottom:.25rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-auto{margin-right:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-12{margin-top:3rem}.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}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.\!contents{display:contents!important}.contents{display:contents}.hidden{display:none}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[18px\]{height:18px}.h-\[1px\]{height:1px}.h-\[400px\]{height:400px}.h-\[600px\]{height:600px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-full{height:100%}.h-screen{height:100vh}.max-h-24{max-height:6rem}.max-h-48{max-height:12rem}.max-h-96{max-height:24rem}.max-h-\[70vh\]{max-height:70vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90dvh\]{max-height:90dvh}.max-h-\[calc\(100dvh-2rem\)\],.max-h-\[calc\(100dvh_-_2rem\)\]{max-height:calc(100dvh - 2rem)}.max-h-\[min\(70vh\,36rem\)\]{max-height:min(70vh,36rem)}.max-h-\[min\(80vh\,48rem\)\]{max-height:min(80vh,48rem)}.min-h-0{min-height:0px}.min-h-10{min-height:2.5rem}.min-h-11{min-height:2.75rem}.min-h-12{min-height:3rem}.min-h-14{min-height:3.5rem}.min-h-16{min-height:4rem}.min-h-20{min-height:5rem}.min-h-44{min-height:11rem}.min-h-6{min-height:1.5rem}.min-h-64{min-height:16rem}.min-h-7{min-height:1.75rem}.min-h-8{min-height:2rem}.min-h-9{min-height:2.25rem}.min-h-\[100dvh\]{min-height:100dvh}.min-h-\[420px\]{min-height:420px}.min-h-\[520px\]{min-height:520px}.min-h-\[min\(440px\,90dvh\)\]{min-height:min(440px,90dvh)}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[1200px\]{width:1200px}.w-\[18px\]{width:18px}.w-\[1px\]{width:1px}.w-\[280px\]{width:280px}.w-\[360px\]{width:360px}.w-\[600px\]{width:600px}.w-\[800px\]{width:800px}.w-\[calc\(100\%-2rem\)\],.w-\[calc\(100\%_-_2rem\)\]{width:calc(100% - 2rem)}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-\[min\(400px\,calc\(100vw-2rem\)\)\]{width:min(400px,calc(100vw - 2rem))}.w-\[min\(480px\,calc\(100vw-2rem\)\)\]{width:min(480px,calc(100vw - 2rem))}.w-\[min\(88vw\,320px\)\]{width:min(88vw,320px)}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-0{min-width:0px}.min-w-28{min-width:7rem}.min-w-32{min-width:8rem}.min-w-48{min-width:12rem}.min-w-\[1020px\]{min-width:1020px}.min-w-\[10ch\]{min-width:10ch}.min-w-\[10rem\]{min-width:10rem}.min-w-\[1180px\]{min-width:1180px}.min-w-\[720px\]{min-width:720px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[920px\]{min-width:920px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[13rem\]{max-width:13rem}.max-w-\[15rem\]{max-width:15rem}.max-w-\[180px\]{max-width:180px}.max-w-\[18rem\]{max-width:18rem}.max-w-\[19rem\]{max-width:19rem}.max-w-\[220px\]{max-width:220px}.max-w-\[240px\]{max-width:240px}.max-w-\[260px\]{max-width:260px}.max-w-\[300px\]{max-width:300px}.max-w-\[320px\]{max-width:320px}.max-w-\[400px\]{max-width:400px}.max-w-\[460px\]{max-width:460px}.max-w-\[480px\]{max-width:480px}.max-w-\[50\%\]{max-width:50%}.max-w-\[65ch\]{max-width:65ch}.max-w-\[70vw\]{max-width:70vw}.max-w-\[720px\]{max-width:720px}.max-w-\[880px\]{max-width:880px}.max-w-\[calc\(100vw-24px\)\]{max-width:calc(100vw - 24px)}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-\[min\(320px\,calc\(100vw-24px\)\)\]{max-width:min(320px,calc(100vw - 24px))}.max-w-full{max-width:100%}.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-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.basis-24{flex-basis:6rem}.basis-28{flex-basis:7rem}.basis-64{flex-basis:16rem}.border-collapse{border-collapse:collapse}.-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))}.-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))}.translate-x-\[-50\%\]{--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))}.translate-y-\[-50\%\]{--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))}.rotate-180{--tw-rotate: 180deg;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))}.rotate-90{--tw-rotate: 90deg;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))}.transform{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))}@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-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-y{resize:vertical}.resize{resize:both}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance: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-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[140px_1fr\]{grid-template-columns:140px 1fr}.grid-cols-\[auto_minmax\(0\,1fr\)\]{grid-template-columns:auto minmax(0,1fr)}.grid-cols-\[minmax\(0\,1\.2fr\)_minmax\(0\,1fr\)_minmax\(0\,0\.8fr\)\]{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr) minmax(0,.8fr)}.grid-cols-\[minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,1fr)}.grid-cols-\[minmax\(12rem\,15rem\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(12rem,15rem) minmax(0,1fr)}.grid-rows-\[48px_minmax\(0\,1fr\)\]{grid-template-rows:48px minmax(0,1fr)}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.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}.justify-stretch{justify-content:stretch}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-7{gap:1.75rem}.gap-8{gap:2rem}.gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-0{row-gap:0px}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.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-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * 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-border>:not([hidden])~:not([hidden]){border-color:hsl(var(--border))}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overscroll-contain{overscroll-behavior:contain}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[18\%\]{border-radius:18%}.rounded-\[3px\]{border-radius:3px}.rounded-\[6px\]{border-radius:6px}.rounded-\[7px\]{border-radius:7px}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-0{border-left-width:0px}.border-l-2{border-left-width:2px}.border-l-\[3px\]{border-left-width:3px}.border-r{border-right-width:1px}.border-r-0{border-right-width:0px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-background{border-color:hsl(var(--background))}.border-border{border-color:hsl(var(--border))}.border-border\/20{border-color:hsl(var(--border) / .2)}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/70{border-color:hsl(var(--border) / .7)}.border-destructive\/30{border-color:hsl(var(--destructive) / .3)}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-green-500\/20{border-color:#22c55e33}.border-input{border-color:hsl(var(--input))}.border-muted-foreground{border-color:hsl(var(--muted-foreground))}.border-primary{border-color:hsl(var(--primary))}.border-primary-foreground{border-color:hsl(var(--primary-foreground))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/30{border-color:hsl(var(--primary) / .3)}.border-primary\/40{border-color:hsl(var(--primary) / .4)}.border-primary\/50{border-color:hsl(var(--primary) / .5)}.border-success\/30{border-color:hsl(var(--success) / .3)}.border-success\/40{border-color:hsl(var(--success) / .4)}.border-transparent{border-color:transparent}.border-warning\/30{border-color:hsl(var(--warning) / .3)}.border-warning\/40{border-color:hsl(var(--warning) / .4)}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.border-white\/80{border-color:#fffc}.border-zinc-200{--tw-border-opacity: 1;border-color:rgb(228 228 231 / var(--tw-border-opacity, 1))}.border-zinc-200\/50{border-color:#e4e4e780}.border-l-primary{border-left-color:hsl(var(--primary))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-\[\#7C4DFF\]{--tw-bg-opacity: 1;background-color:rgb(124 77 255 / var(--tw-bg-opacity, 1))}.bg-\[\#7C4DFF\]\/10{background-color:#7c4dff1a}.bg-\[hsl\(var\(--sunken\)\)\]{background-color:hsl(var(--sunken))}.bg-accent{background-color:hsl(var(--accent))}.bg-accent\/80{background-color:hsl(var(--accent) / .8)}.bg-background{background-color:hsl(var(--background))}.bg-background\/70{background-color:hsl(var(--background) / .7)}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-black\/50{background-color:#00000080}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/5{background-color:#10b9810d}.bg-green-500\/15{background-color:#22c55e26}.bg-layout-content{background-color:hsl(var(--layout-content))}.bg-layout-sidebar{background-color:hsl(var(--layout-sidebar))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.bg-muted-foreground\/40{background-color:hsl(var(--muted-foreground) / .4)}.bg-muted-foreground\/50{background-color:hsl(var(--muted-foreground) / .5)}.bg-muted-foreground\/60{background-color:hsl(var(--muted-foreground) / .6)}.bg-muted\/10{background-color:hsl(var(--muted) / .1)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/25{background-color:hsl(var(--muted) / .25)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/40{background-color:hsl(var(--muted) / .4)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.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-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-primary\/\[0\.03\]{background-color:hsl(var(--primary) / .03)}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-success{background-color:hsl(var(--success))}.bg-success\/10{background-color:hsl(var(--success) / .1)}.bg-success\/15{background-color:hsl(var(--success) / .15)}.bg-transparent{background-color:transparent}.bg-warning{background-color:hsl(var(--warning))}.bg-warning\/10{background-color:hsl(var(--warning) / .1)}.bg-warning\/15{background-color:hsl(var(--warning) / .15)}.bg-warning\/60{background-color:hsl(var(--warning) / .6)}.bg-warning\/70{background-color:hsl(var(--warning) / .7)}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/70{background-color:#ffffffb3}.bg-zinc-100{--tw-bg-opacity: 1;background-color:rgb(244 244 245 / var(--tw-bg-opacity, 1))}.bg-zinc-50{--tw-bg-opacity: 1;background-color:rgb(250 250 250 / var(--tw-bg-opacity, 1))}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.from-\[\#7C4DFF\]\/10{--tw-gradient-from: rgb(124 77 255 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(124 77 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-\[\#7C4DFF\]\/5{--tw-gradient-to: rgb(124 77 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(124 77 255 / .05) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-zinc-50{--tw-gradient-to: #fafafa var(--tw-gradient-to-position)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-0\.5{padding:.125rem}.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}.p-\[1px\]{padding:1px}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-12{padding-left:3rem;padding-right:3rem}.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-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}.px-7{padding-left:1.75rem;padding-right:1.75rem}.px-8{padding-left:2rem;padding-right:2rem}.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-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.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-7{padding-top:1.75rem;padding-bottom:1.75rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-20{padding-bottom:5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-7{padding-bottom:1.75rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-5{padding-left:1.25rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-10{padding-right:2.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-32{padding-top:8rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-7{padding-top:1.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:JetBrains Mono,monospace}.font-sans{font-family:Inter,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-5xl{font-size:3rem;line-height:1}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[17px\]{font-size:17px}.text-\[22px\]{font-size:22px}.text-\[28px\]{font-size:28px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.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-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-\[22px\]{line-height:22px}.leading-\[38px\]{line-height:38px}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-\[\#7C4DFF\]{--tw-text-opacity: 1;color:rgb(124 77 255 / var(--tw-text-opacity, 1))}.text-accent-foreground{color:hsl(var(--accent-foreground))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-border{color:hsl(var(--border))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-cyan-500{--tw-text-opacity: 1;color:rgb(6 182 212 / var(--tw-text-opacity, 1))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-destructive\/60{color:hsl(var(--destructive) / .6)}.text-destructive\/70{color:hsl(var(--destructive) / .7)}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/70{color:hsl(var(--foreground) / .7)}.text-foreground\/80{color:hsl(var(--foreground) / .8)}.text-foreground\/85{color:hsl(var(--foreground) / .85)}.text-foreground\/90{color:hsl(var(--foreground) / .9)}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-indigo-500{--tw-text-opacity: 1;color:rgb(99 102 241 / var(--tw-text-opacity, 1))}.text-inherit{color:inherit}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/60{color:hsl(var(--muted-foreground) / .6)}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-orange-500{--tw-text-opacity: 1;color:rgb(249 115 22 / 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-primary\/80{color:hsl(var(--primary) / .8)}.text-purple-500{--tw-text-opacity: 1;color:rgb(168 85 247 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sky-500{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity, 1))}.text-success{color:hsl(var(--success))}.text-teal-500{--tw-text-opacity: 1;color:rgb(20 184 166 / var(--tw-text-opacity, 1))}.text-warning{color:hsl(var(--warning))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-zinc-400{--tw-text-opacity: 1;color:rgb(161 161 170 / var(--tw-text-opacity, 1))}.text-zinc-500{--tw-text-opacity: 1;color:rgb(113 113 122 / var(--tw-text-opacity, 1))}.text-zinc-600{--tw-text-opacity: 1;color:rgb(82 82 91 / var(--tw-text-opacity, 1))}.text-zinc-900{--tw-text-opacity: 1;color:rgb(24 24 27 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.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-\[-16px_0_30px_rgba\(15\,23\,42\,0\.08\)\]{--tw-shadow: -16px 0 30px rgba(15,23,42,.08);--tw-shadow-colored: -16px 0 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-\[16px_0_30px_rgba\(15\,23\,42\,0\.08\)\]{--tw-shadow: 16px 0 30px rgba(15,23,42,.08);--tw-shadow-colored: 16px 0 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-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-xl{--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)}.shadow-black\/10{--tw-shadow-color: rgb(0 0 0 / .1);--tw-shadow: var(--tw-shadow-colored)}.shadow-black\/5{--tw-shadow-color: rgb(0 0 0 / .05);--tw-shadow: var(--tw-shadow-colored)}.shadow-destructive\/20{--tw-shadow-color: hsl(var(--destructive) / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-primary\/20{--tw-shadow-color: hsl(var(--primary) / .2);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.outline-ring{outline-color:hsl(var(--ring))}.ring{--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(3px + 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-0{--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(0px + 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)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur-\[100px\]{--tw-blur: blur(100px);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)}.blur-\[120px\]{--tw-blur: blur(120px);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)}.blur-\[150px\]{--tw-blur: blur(150px);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-md{--tw-backdrop-blur: blur(12px);-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)}.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-\[border-color\]{transition-property:border-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[color\,font-size\,top\,transform\]{transition-property:color,font-size,top,transform;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}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.duration-150{animation-duration:.15s}.duration-200{animation-duration:.2s}.ease-out{animation-timing-function:cubic-bezier(0,0,.2,1)}.running{animation-play-state:running}.\!paused{animation-play-state:paused!important}.paused{animation-play-state:paused}.w-compact-modal{width:280px}.h-compact-modal{height:400px}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.selection\:bg-\[\#7C4DFF\]\/20 *::-moz-selection{background-color:#7c4dff33}.selection\:bg-\[\#7C4DFF\]\/20 *::selection{background-color:#7c4dff33}.selection\:bg-\[\#7C4DFF\]\/20::-moz-selection{background-color:#7c4dff33}.selection\:bg-\[\#7C4DFF\]\/20::selection{background-color:#7c4dff33}.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))}.first\:rounded-t-xl:first-child{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.first\:border-t-0:first-child{border-top-width:0px}.first\:pt-0:first-child{padding-top:0}.last\:rounded-b-xl:last-child{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.first-of-type\:rounded-t-xl:first-of-type{border-top-left-radius:.75rem;border-top-right-radius:.75rem}.last-of-type\:rounded-b-xl:last-of-type{border-bottom-right-radius:.75rem;border-bottom-left-radius:.75rem}.checked\:border-primary:checked{border-color:hsl(var(--primary))}.checked\:bg-primary:checked{background-color:hsl(var(--primary))}.checked\:bg-none:checked{background-image:none}.indeterminate\:border-primary:indeterminate{border-color:hsl(var(--primary))}.indeterminate\:bg-primary:indeterminate{background-color:hsl(var(--primary))}.indeterminate\:bg-none:indeterminate{background-image:none}.focus-within\:outline:focus-within{outline-style:solid}.focus-within\:outline-2:focus-within{outline-width:2px}.focus-within\:outline-offset-2:focus-within{outline-offset:2px}.focus-within\:outline-ring:focus-within{outline-color:hsl(var(--ring))}.hover\:border-\[\#7C4DFF\]\/50:hover{border-color:#7c4dff80}.hover\:border-border:hover{border-color:hsl(var(--border))}.hover\:border-border\/60:hover{border-color:hsl(var(--border) / .6)}.hover\:border-primary\/50:hover{border-color:hsl(var(--primary) / .5)}.hover\:bg-\[\#6B3FE8\]:hover{--tw-bg-opacity: 1;background-color:rgb(107 63 232 / var(--tw-bg-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-accent\/30:hover{background-color:hsl(var(--accent) / .3)}.hover\:bg-accent\/60:hover{background-color:hsl(var(--accent) / .6)}.hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive) / .1)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/40:hover{background-color:hsl(var(--muted) / .4)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-muted\/80:hover{background-color:hsl(var(--muted) / .8)}.hover\:bg-primary\/10:hover{background-color:hsl(var(--primary) / .1)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-transparent:hover{background-color:transparent}.hover\:bg-zinc-200:hover{--tw-bg-opacity: 1;background-color:rgb(228 228 231 / var(--tw-bg-opacity, 1))}.hover\:text-\[\#6B3FE8\]:hover{--tw-text-opacity: 1;color:rgb(107 63 232 / var(--tw-text-opacity, 1))}.hover\:text-\[\#7C4DFF\]:hover{--tw-text-opacity: 1;color:rgb(124 77 255 / var(--tw-text-opacity, 1))}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-primary\/80:hover{color:hsl(var(--primary) / .8)}.hover\:text-zinc-900:hover{--tw-text-opacity: 1;color:rgb(24 24 27 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.focus\:border-primary:focus{border-color:hsl(var(--primary))}.focus\:border-primary\/50:focus{border-color:hsl(var(--primary) / .5)}.focus\:border-ring:focus{border-color:hsl(var(--ring))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-background:focus{background-color:hsl(var(--background))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-0: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(0px + 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\:\[box-shadow\:none\]:focus{box-shadow:none}.focus\:\[outline\:none\]:focus{outline:none}.focus-visible\:border-2:focus-visible{border-width:2px}.focus-visible\:border-ring:focus-visible{border-color:hsl(var(--ring))}.focus-visible\:bg-accent:focus-visible{background-color:hsl(var(--accent))}.focus-visible\:bg-accent\/70:focus-visible{background-color:hsl(var(--accent) / .7)}.focus-visible\:bg-destructive\/80:focus-visible{background-color:hsl(var(--destructive) / .8)}.focus-visible\:bg-muted\/40:focus-visible{background-color:hsl(var(--muted) / .4)}.focus-visible\:bg-muted\/50:focus-visible{background-color:hsl(var(--muted) / .5)}.focus-visible\:bg-muted\/60:focus-visible{background-color:hsl(var(--muted) / .6)}.focus-visible\:bg-primary\/80:focus-visible{background-color:hsl(var(--primary) / .8)}.focus-visible\:bg-secondary\/70:focus-visible{background-color:hsl(var(--secondary) / .7)}.focus-visible\:text-accent-foreground:focus-visible{color:hsl(var(--accent-foreground))}.focus-visible\:text-foreground:focus-visible{color:hsl(var(--foreground))}.focus-visible\:underline:focus-visible{text-decoration-line:underline}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline:focus-visible{outline-style:solid}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-primary:focus-visible{outline-color:hsl(var(--primary))}.focus-visible\:outline-ring:focus-visible{outline-color:hsl(var(--ring))}.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-primary:focus-visible{--tw-ring-color: hsl(var(--primary))}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:\[outline\:none\]:focus-visible{outline:none}.active\:translate-y-px:active{--tw-translate-y: 1px;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))}.active\:cursor-grabbing:active{cursor:grabbing}.enabled\:cursor-grab:enabled{cursor:grab}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group[open] .group-open\:rotate-90{--tw-rotate: 90deg;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))}.group:focus-within .group-focus-within\:opacity-100{opacity:1}.group:hover .group-hover\:text-primary{color:hsl(var(--primary))}.group:hover .group-hover\:opacity-100{opacity:1}.peer:checked~.peer-checked\:block{display:block}.peer:indeterminate~.peer-indeterminate\:block{display:block}.peer:indeterminate~.peer-indeterminate\:hidden{display:none}.peer:-moz-placeholder~.peer-placeholder-shown\:top-1\/2{top:50%}.peer:placeholder-shown~.peer-placeholder-shown\:top-1\/2{top:50%}.peer:-moz-placeholder~.peer-placeholder-shown\:-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))}.peer:placeholder-shown~.peer-placeholder-shown\:-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))}.peer:-moz-placeholder~.peer-placeholder-shown\:text-sm{font-size:.875rem;line-height:1.25rem}.peer:placeholder-shown~.peer-placeholder-shown\:text-sm{font-size:.875rem;line-height:1.25rem}.peer:focus~.peer-focus\:top-0{top:0}.peer:focus~.peer-focus\:-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))}.peer:focus~.peer-focus\:text-xs{font-size:.75rem;line-height:1rem}.peer:focus~.peer-focus\:text-ring{color:hsl(var(--ring))}.peer:disabled~.peer-disabled\:opacity-50{opacity:.5}.has-\[\[data-presentation\=compact\]\]\:pt-5:has([data-presentation=compact]){padding-top:1.25rem}.aria-\[current\=page\]\:bg-accent[aria-current=page]{background-color:hsl(var(--accent))}.aria-\[current\=page\]\:font-medium[aria-current=page]{font-weight:500}.peer[aria-invalid=true]~.peer-aria-\[invalid\=true\]\:text-destructive{color:hsl(var(--destructive))}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;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))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;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))}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x: 1.25rem;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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x: 0px;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))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=unchecked\]\:bg-muted\/50[data-state=unchecked]{background-color:hsl(var(--muted) / .5)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-left-full[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-right-full[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-left-full[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-right-full[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}@media(prefers-reduced-motion:no-preference){.motion-safe\:animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.motion-safe\:fade-in-0{--tw-enter-opacity: 0}}@media(prefers-reduced-motion:reduce){.motion-reduce\:animate-none{animation:none}}.dark\:border-success\/40:is(.dark *){border-color:hsl(var(--success) / .4)}.dark\:border-warning\/40:is(.dark *){border-color:hsl(var(--warning) / .4)}.dark\:border-zinc-900\/80:is(.dark *){border-color:#18181bcc}.dark\:bg-success\/20:is(.dark *){background-color:hsl(var(--success) / .2)}.dark\:bg-success\/40:is(.dark *){background-color:hsl(var(--success) / .4)}.dark\:bg-warning\/20:is(.dark *){background-color:hsl(var(--warning) / .2)}.dark\:bg-warning\/40:is(.dark *){background-color:hsl(var(--warning) / .4)}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-primary:is(.dark *){color:hsl(var(--primary))}.dark\:text-success:is(.dark *){color:hsl(var(--success))}.dark\:text-warning:is(.dark *){color:hsl(var(--warning))}@media not all and (min-width:768px){.max-md\:inline-flex{display:inline-flex}.max-md\:hidden{display:none}.max-md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-md\:border-r-0{border-right-width:0px}}@media(min-width:400px){.min-\[400px\]\:px-8{padding-left:2rem;padding-right:2rem}.min-\[400px\]\:pb-8{padding-bottom:2rem}.min-\[400px\]\:pt-8{padding-top:2rem}}@media(min-width:640px){.sm\:not-sr-only{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.sm\:order-none{order:0}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:w-\[232px\]{width:232px}.sm\:w-auto{width:auto}.sm\:max-w-\[45\%\]{max-width:45%}.sm\:max-w-lg{max-width:32rem}.sm\:max-w-md{max-width:28rem}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xs{max-width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:grid-cols-\[180px_1fr\]{grid-template-columns:180px 1fr}.sm\:grid-cols-\[minmax\(0\,1fr\)_4\.5rem\]{grid-template-columns:minmax(0,1fr) 4.5rem}.sm\:flex-row{flex-direction:row}.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\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:self-start{align-self:flex-start}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:px-8{padding-left:2rem;padding-right:2rem}.sm\:py-8{padding-top:2rem;padding-bottom:2rem}.sm\:text-left{text-align:left}.sm\:text-right{text-align:right}}@media(min-width:768px){.md\:col-span-2{grid-column:span 2 / span 2}.md\:col-start-2{grid-column-start:2}.md\:row-start-1{grid-row-start:1}.md\:block{display:block}.md\:flex{display:flex}.md\:inline-flex{display:inline-flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[184px_minmax\(0\,1fr\)\]{grid-template-columns:184px minmax(0,1fr)}.md\:grid-rows-\[minmax\(0\,1fr\)\]{grid-template-rows:minmax(0,1fr)}.md\:border-r{border-right-width:1px}.md\:text-7xl{font-size:4.5rem;line-height:1}}@media(min-width:1024px){.lg\:mx-0{margin-left:0;margin-right:0}.lg\:block{display:block}.lg\:hidden{display:none}.lg\:shrink-0{flex-shrink:0}.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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[170px_140px_140px_1fr_auto\]{grid-template-columns:170px 140px 140px 1fr auto}.lg\:grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.lg\:grid-cols-\[minmax\(220px\,1fr\)_minmax\(320px\,440px\)\]{grid-template-columns:minmax(220px,1fr) minmax(320px,440px)}.lg\:flex-row{flex-direction:row}.lg\:items-start{align-items:flex-start}.lg\:items-end{align-items:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-16{gap:4rem}.lg\:self-start{align-self:flex-start}.lg\:p-8{padding:2rem}.lg\:text-right{text-align:right}}@media(min-width:1280px){.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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.xl\:text-3xl{font-size:1.875rem;line-height:2.25rem}}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\>div\]\:\!block>div{display:block!important}.\[\&\>div\]\:\!w-full>div{width:100%!important}.\[\&\>div\]\:\!min-w-0>div{min-width:0px!important}.\[\&\>span\+span\]\:ml-3>span+span{margin-left:.75rem}@media(pointer:coarse){.\[\@media\(pointer\:coarse\)\]\:min-h-11{min-height:2.75rem}}
|