@chenpu17/cc-gw 0.7.19 → 0.7.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/package.json +1 -1
  2. package/src/web/dist/assets/{About-BA_VxEEw.js → About-CE2fqYju.js} +2 -2
  3. package/src/web/dist/assets/ApiKeys-jnqKcfat.js +16 -0
  4. package/src/web/dist/assets/{Dashboard-BV9q_ZEH.js → Dashboard-B61eM9AQ.js} +1 -1
  5. package/src/web/dist/assets/{Events-CVDX7Sdl.js → Events-DXUNZen5.js} +1 -1
  6. package/src/web/dist/assets/{Help-Q8aahW1e.js → Help-DTQVUeCR.js} +1 -1
  7. package/src/web/dist/assets/{Login-Cc9PcXNz.js → Login-BcTP1zb_.js} +1 -1
  8. package/src/web/dist/assets/{Logs-EvCIbsmH.js → Logs-Cy6rL2PL.js} +1 -1
  9. package/src/web/dist/assets/{ModelManagement-Bb8NWZJD.js → ModelManagement-D2ZQEDua.js} +1 -1
  10. package/src/web/dist/assets/{PageHeader-DE87PlB_.js → PageHeader-D2Zq1K4t.js} +1 -1
  11. package/src/web/dist/assets/{PageSection-BW4UtaTE.js → PageSection-wWtyIp2D.js} +1 -1
  12. package/src/web/dist/assets/{Settings-hk35KMN5.js → Settings-Bz_Hag2N.js} +1 -1
  13. package/src/web/dist/assets/{Skeleton-DKmc2Oau.js → Skeleton-BRSmcxNh.js} +1 -1
  14. package/src/web/dist/assets/{card-B5QaMdIj.js → card-Dl49soGw.js} +1 -1
  15. package/src/web/dist/assets/{dialog-Bl93c96O.js → dialog-CW6Z62O9.js} +1 -1
  16. package/src/web/dist/assets/index-B1EJcuR-.css +1 -0
  17. package/src/web/dist/assets/{index-iaYfODK6.js → index-Bdp0nMlR.js} +2 -2
  18. package/src/web/dist/assets/{index-Bkl9YQUf.js → index-Cu1IXjrr.js} +1 -1
  19. package/src/web/dist/assets/{info-Dtepvi_0.js → info-Yuz8DmBH.js} +1 -1
  20. package/src/web/dist/assets/{input-CRfONI49.js → input-B6w5gzdL.js} +1 -1
  21. package/src/web/dist/assets/{label-sf3QNge5.js → label-CuU6RIsU.js} +1 -1
  22. package/src/web/dist/assets/{refresh-cw-ZDTq8wum.js → refresh-cw-Duv0QKyb.js} +1 -1
  23. package/src/web/dist/assets/{select-DfAJfUCL.js → select-Cfzsn-JK.js} +1 -1
  24. package/src/web/dist/assets/{shield-wbL9EF4o.js → shield--mDWO-No.js} +1 -1
  25. package/src/web/dist/assets/{switch-DTxmu4vA.js → switch-DoT-Ur3p.js} +1 -1
  26. package/src/web/dist/assets/{useApiQuery-LZxVJXA3.js → useApiQuery-CL9_n4sn.js} +1 -1
  27. package/src/web/dist/index.html +2 -2
  28. package/src/web/dist/assets/ApiKeys-9iuHXiuE.js +0 -16
  29. package/src/web/dist/assets/index-DDEa11GU.css +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chenpu17/cc-gw",
3
- "version": "0.7.19",
3
+ "version": "0.7.20",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,6 +1,6 @@
1
- import{c as j,u as g,b as v,r as i,j as e,e as d,aa as N}from"./index-iaYfODK6.js";import{u as y}from"./useApiQuery-LZxVJXA3.js";import{P as E}from"./PageHeader-DE87PlB_.js";import{P as n}from"./PageSection-BW4UtaTE.js";import{C as m,a as p}from"./card-B5QaMdIj.js";import{I}from"./info-Dtepvi_0.js";import{R as T}from"./refresh-cw-ZDTq8wum.js";/**
1
+ import{c as j,u as g,b as v,r as i,j as e,e as d,aa as N}from"./index-Bdp0nMlR.js";import{u as y}from"./useApiQuery-CL9_n4sn.js";import{P as E}from"./PageHeader-D2Zq1K4t.js";import{P as n}from"./PageSection-wWtyIp2D.js";import{C as m,a as p}from"./card-Dl49soGw.js";import{I}from"./info-Yuz8DmBH.js";import{R as T}from"./refresh-cw-Duv0QKyb.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
5
5
  * See the LICENSE file in the root directory of this source tree.
6
- */const k=j("Sparkles",[["path",{d:"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z",key:"17u4zn"}],["path",{d:"M5 3v4",key:"bklmnn"}],["path",{d:"M19 17v4",key:"iiml17"}],["path",{d:"M3 5h4",key:"nem4j1"}],["path",{d:"M17 19h4",key:"lbex7p"}]]),_="0.7.19",w={version:_},L={VITE_BUILD_TIME:"2026-02-14T02:57:33.049Z",VITE_NODE_VERSION:"v22.16.0"};function u({items:t}){return t.length===0?null:e.jsx("dl",{className:"grid gap-4 sm:grid-cols-2",children:t.map(a=>e.jsx(m,{children:e.jsxs(p,{className:"pt-4",children:[e.jsx("dt",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:a.label}),e.jsx("dd",{className:"mt-1 text-sm font-semibold",children:a.value}),a.hint&&e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:a.hint})]})},a.label))})}function D(){const{t}=g(),{pushToast:a}=v(),s=y(["status","gateway"],{url:"/api/status",method:"GET"},{staleTime:6e4});i.useEffect(()=>{s.isError&&s.error&&a({title:t("about.toast.statusError.title"),description:s.error.message,variant:"error"})},[s.isError,s.error,a,t]);const o=w.version,r=i.useMemo(()=>{const c=L,b=c.VITE_BUILD_TIME,f=c.VITE_NODE_VERSION;return{buildTime:b,nodeVersion:f}},[]),x=i.useMemo(()=>[{label:t("about.app.labels.name"),value:e.jsx("span",{className:"font-mono",children:"cc-gw"})},{label:t("about.app.labels.version"),value:e.jsxs("span",{className:"font-mono text-primary",children:["v",o]})},{label:t("about.app.labels.buildTime"),value:r.buildTime,hint:t("about.app.hint.buildTime")},{label:t("about.app.labels.node"),value:e.jsx("span",{className:"font-mono",children:r.nodeVersion})}],[o,r.buildTime,r.nodeVersion,t]),l=i.useMemo(()=>s.data?[{label:t("about.status.labels.host"),value:s.data.host??"127.0.0.1"},{label:t("about.status.labels.port"),value:s.data.port.toLocaleString()},{label:t("about.status.labels.providers"),value:s.data.providers.toLocaleString()},{label:t("about.status.labels.active"),value:(s.data.activeRequests??0).toLocaleString(),hint:t("about.status.hint.active")}]:[],[s.data,t]),h=()=>{a({title:t("about.toast.updatesPlanned"),variant:"info"})};return e.jsxs("div",{className:"space-y-6",children:[e.jsx(E,{icon:e.jsx(I,{className:"h-5 w-5","aria-hidden":"true"}),title:t("about.title"),description:t("about.description"),badge:`v${o}`,actions:e.jsxs(d,{onClick:h,children:[e.jsx(k,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),t("about.support.actions.checkUpdates")]})}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-2",children:[e.jsx(n,{title:t("about.app.title"),description:t("about.app.subtitle"),children:e.jsx(u,{items:x})}),e.jsx(n,{title:t("about.status.title"),description:t("about.status.subtitle"),actions:e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>s.refetch(),disabled:s.isFetching,children:[e.jsx(T,{className:`mr-2 h-4 w-4 ${s.isFetching?"animate-spin":""}`,"aria-hidden":"true"}),s.isFetching?t("common.actions.refreshing"):t("common.actions.refresh")]}),children:s.isLoading?e.jsxs("div",{className:"flex h-32 flex-col items-center justify-center gap-2 text-center",children:[e.jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("about.status.loading")})]}):l.length>0?e.jsx(u,{items:l}):e.jsxs("div",{className:"flex h-32 flex-col items-center justify-center gap-1 rounded-lg border border-dashed p-6 text-center",children:[e.jsx("p",{className:"text-sm font-medium",children:t("about.status.empty")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("common.actions.refresh")})]})})]}),e.jsx(n,{title:t("about.support.title"),description:e.jsxs("span",{className:"space-y-1",children:[e.jsx("span",{className:"block text-sm font-medium text-primary",children:t("about.support.subtitle")}),e.jsx("span",{children:t("about.support.description")})]}),children:e.jsx(m,{children:e.jsxs(p,{className:"flex flex-col gap-4 pt-4",children:[e.jsxs("div",{className:"flex flex-wrap items-start gap-4",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 text-primary",children:e.jsx(N,{className:"h-5 w-5","aria-hidden":"true"})}),e.jsx("p",{className:"flex-1 text-sm text-muted-foreground",children:t("about.support.tip")})]}),e.jsx("code",{className:"inline-flex self-start rounded-md bg-muted px-3 py-1.5 text-xs font-medium",children:"~/.cc-gw/config.json"})]})})})]})}export{D as default};
6
+ */const k=j("Sparkles",[["path",{d:"m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z",key:"17u4zn"}],["path",{d:"M5 3v4",key:"bklmnn"}],["path",{d:"M19 17v4",key:"iiml17"}],["path",{d:"M3 5h4",key:"nem4j1"}],["path",{d:"M17 19h4",key:"lbex7p"}]]),_="0.7.20",w={version:_},L={VITE_BUILD_TIME:"2026-02-14T03:02:35.091Z",VITE_NODE_VERSION:"v22.16.0"};function u({items:t}){return t.length===0?null:e.jsx("dl",{className:"grid gap-4 sm:grid-cols-2",children:t.map(a=>e.jsx(m,{children:e.jsxs(p,{className:"pt-4",children:[e.jsx("dt",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:a.label}),e.jsx("dd",{className:"mt-1 text-sm font-semibold",children:a.value}),a.hint&&e.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:a.hint})]})},a.label))})}function D(){const{t}=g(),{pushToast:a}=v(),s=y(["status","gateway"],{url:"/api/status",method:"GET"},{staleTime:6e4});i.useEffect(()=>{s.isError&&s.error&&a({title:t("about.toast.statusError.title"),description:s.error.message,variant:"error"})},[s.isError,s.error,a,t]);const o=w.version,r=i.useMemo(()=>{const c=L,b=c.VITE_BUILD_TIME,f=c.VITE_NODE_VERSION;return{buildTime:b,nodeVersion:f}},[]),x=i.useMemo(()=>[{label:t("about.app.labels.name"),value:e.jsx("span",{className:"font-mono",children:"cc-gw"})},{label:t("about.app.labels.version"),value:e.jsxs("span",{className:"font-mono text-primary",children:["v",o]})},{label:t("about.app.labels.buildTime"),value:r.buildTime,hint:t("about.app.hint.buildTime")},{label:t("about.app.labels.node"),value:e.jsx("span",{className:"font-mono",children:r.nodeVersion})}],[o,r.buildTime,r.nodeVersion,t]),l=i.useMemo(()=>s.data?[{label:t("about.status.labels.host"),value:s.data.host??"127.0.0.1"},{label:t("about.status.labels.port"),value:s.data.port.toLocaleString()},{label:t("about.status.labels.providers"),value:s.data.providers.toLocaleString()},{label:t("about.status.labels.active"),value:(s.data.activeRequests??0).toLocaleString(),hint:t("about.status.hint.active")}]:[],[s.data,t]),h=()=>{a({title:t("about.toast.updatesPlanned"),variant:"info"})};return e.jsxs("div",{className:"space-y-6",children:[e.jsx(E,{icon:e.jsx(I,{className:"h-5 w-5","aria-hidden":"true"}),title:t("about.title"),description:t("about.description"),badge:`v${o}`,actions:e.jsxs(d,{onClick:h,children:[e.jsx(k,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),t("about.support.actions.checkUpdates")]})}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-2",children:[e.jsx(n,{title:t("about.app.title"),description:t("about.app.subtitle"),children:e.jsx(u,{items:x})}),e.jsx(n,{title:t("about.status.title"),description:t("about.status.subtitle"),actions:e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>s.refetch(),disabled:s.isFetching,children:[e.jsx(T,{className:`mr-2 h-4 w-4 ${s.isFetching?"animate-spin":""}`,"aria-hidden":"true"}),s.isFetching?t("common.actions.refreshing"):t("common.actions.refresh")]}),children:s.isLoading?e.jsxs("div",{className:"flex h-32 flex-col items-center justify-center gap-2 text-center",children:[e.jsx("div",{className:"h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("about.status.loading")})]}):l.length>0?e.jsx(u,{items:l}):e.jsxs("div",{className:"flex h-32 flex-col items-center justify-center gap-1 rounded-lg border border-dashed p-6 text-center",children:[e.jsx("p",{className:"text-sm font-medium",children:t("about.status.empty")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("common.actions.refresh")})]})})]}),e.jsx(n,{title:t("about.support.title"),description:e.jsxs("span",{className:"space-y-1",children:[e.jsx("span",{className:"block text-sm font-medium text-primary",children:t("about.support.subtitle")}),e.jsx("span",{children:t("about.support.description")})]}),children:e.jsx(m,{children:e.jsxs(p,{className:"flex flex-col gap-4 pt-4",children:[e.jsxs("div",{className:"flex flex-wrap items-start gap-4",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 text-primary",children:e.jsx(N,{className:"h-5 w-5","aria-hidden":"true"})}),e.jsx("p",{className:"flex-1 text-sm text-muted-foreground",children:t("about.support.tip")})]}),e.jsx("code",{className:"inline-flex self-start rounded-md bg-muted px-3 py-1.5 text-xs font-medium",children:"~/.cc-gw/config.json"})]})})})]})}export{D as default};
@@ -0,0 +1,16 @@
1
+ import{c as z,r as n,j as e,a as ne,u as q,b as Ne,W as be,e as c,Y as we,Z as ke,d as v,t as b}from"./index-Bdp0nMlR.js";import{E as Ee}from"./index-Cu1IXjrr.js";import{u as L}from"./useApiQuery-CL9_n4sn.js";import{P as Ce,B as C}from"./PageHeader-D2Zq1K4t.js";import{P as ee}from"./PageSection-wWtyIp2D.js";import{c as Se}from"./clipboard-CALi6bTW.js";import{I as De}from"./input-B6w5gzdL.js";import{L as M}from"./label-CuU6RIsU.js";import{C as H,a as U}from"./card-Dl49soGw.js";import{P as Te,D as O,a as W,b as P,c as R,d as se,e as F}from"./dialog-CW6Z62O9.js";import{C as ae,S as Ae}from"./shield--mDWO-No.js";/**
2
+ * @license lucide-react v0.344.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const Le=z("EyeOff",[["path",{d:"M9.88 9.88a3 3 0 1 0 4.24 4.24",key:"1jxqfv"}],["path",{d:"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68",key:"9wicm4"}],["path",{d:"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61",key:"1jreej"}],["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}]]);/**
7
+ * @license lucide-react v0.344.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const Me=z("Eye",[["path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z",key:"rwhkz3"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/**
12
+ * @license lucide-react v0.344.0 - ISC
13
+ *
14
+ * This source code is licensed under the ISC license.
15
+ * See the LICENSE file in the root directory of this source tree.
16
+ */const Oe=z("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]),re=n.forwardRef(({className:s,...i},o)=>e.jsx("textarea",{className:ne("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",s),ref:o,...i}));re.displayName="Textarea";function We(){const[s,i]=n.useState([]);return n.useEffect(()=>{const o=[{id:"anthropic",label:"Anthropic"},{id:"openai",label:"OpenAI"}];v.get("/api/custom-endpoints").then(m=>{const u=(m.data.endpoints??[]).map(d=>({id:d.id,label:d.label}));i([...o,...u])}).catch(()=>{i(o)})},[]),s}function te({available:s,selected:i,onChange:o,hint:m}){const{t:u}=q(),d=i.length===0,w=()=>{o([])},f=l=>{i.includes(l)?o(i.filter(K=>K!==l)):o([...i,l])};return e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:m}),e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 rounded-md border px-3 py-2 transition-colors hover:bg-muted/50",children:[e.jsx("input",{type:"checkbox",checked:d,onChange:w,className:"h-4 w-4 rounded border-input accent-primary"}),e.jsx("span",{className:"text-sm font-medium",children:u("apiKeys.allEndpoints")})]}),e.jsx("div",{className:"grid max-h-40 gap-1 overflow-y-auto",children:s.map(l=>e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 rounded-md border px-3 py-2 transition-colors hover:bg-muted/50",children:[e.jsx("input",{type:"checkbox",checked:!d&&i.includes(l.id),onChange:()=>f(l.id),className:"h-4 w-4 rounded border-input accent-primary"}),e.jsx("span",{className:"text-sm",children:l.label}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:["(",l.id,")"]})]},l.id))})]})}const Pe=[{value:1,labelKey:"apiKeys.analytics.range.today"},{value:7,labelKey:"apiKeys.analytics.range.week"},{value:30,labelKey:"apiKeys.analytics.range.month"}];function Be(){const{t:s}=q(),{pushToast:i}=Ne(),[o,m]=n.useState(!1),[u,d]=n.useState(""),[w,f]=n.useState(""),[l,K]=n.useState([]),[p,S]=n.useState(null),[le,V]=n.useState(null),[h,ce]=n.useState(7),[G,Q]=n.useState(new Map),[oe,$]=n.useState(null),[y,k]=n.useState(null),[D,B]=n.useState([]),Z=We(),g=L(["api-keys"],{url:"/api/keys",method:"GET"}),E=L(["api-keys","overview",h],{url:"/api/stats/api-keys/overview",method:"GET",params:{days:h}}),N=L(["api-keys","usage",h],{url:"/api/stats/api-keys/usage",method:"GET",params:{days:h,limit:10}}),T=g.data??[],j=E.data,x=N.data??[],de=T.some(a=>a.isWildcard),pe=j?j.totalKeys.toLocaleString():"-",me=j?j.enabledKeys.toLocaleString():"-",ue=j?j.activeKeys.toLocaleString():"-",Y=async()=>{if(!u.trim()){i({title:s("apiKeys.errors.nameRequired"),variant:"error"});return}try{const a=await v.post("/api/keys",{name:u.trim(),description:w.trim()||void 0,allowedEndpoints:l.length>0?l:void 0});S(a.data),m(!1),d(""),f(""),K([]),g.refetch(),E.refetch(),N.refetch(),i({title:s("apiKeys.toast.keyCreated"),variant:"success"})}catch(a){const t=b(a);i({title:s("apiKeys.toast.createFailure",{message:t.message}),variant:"error"})}},xe=async(a,t)=>{try{await v.patch(`/api/keys/${a}`,{enabled:!t}),g.refetch(),E.refetch(),i({title:s("apiKeys.toast.keyUpdated"),variant:"success"})}catch(r){const A=b(r);i({title:s("apiKeys.toast.updateFailure",{message:A.message}),variant:"error"})}},he=async a=>{if(confirm(s("apiKeys.confirmDelete"))){V(a);try{await v.delete(`/api/keys/${a}`),g.refetch(),E.refetch(),N.refetch(),i({title:s("apiKeys.toast.keyDeleted"),variant:"success"})}catch(t){const r=b(t);i({title:s("apiKeys.toast.deleteFailure",{message:r.message}),variant:"error"})}finally{V(null)}}},ye=async a=>{if(!G.has(a)){$(a);try{const t=await v.get(`/api/keys/${a}/reveal`);Q(r=>new Map(r).set(a,t.data.key))}catch(t){const r=b(t);i({title:s("apiKeys.toast.revealFailure"),description:r.message,variant:"error"})}finally{$(null)}}},ge=a=>{Q(t=>{const r=new Map(t);return r.delete(a),r})},_=async a=>{try{await Se(a),i({title:s("apiKeys.toast.keyCopied"),variant:"success"})}catch(t){i({title:s("apiKeys.toast.copyFailure"),description:t instanceof Error?t.message:s("common.unknownError"),variant:"error"})}},je=n.useCallback(a=>{k(a),B(a.allowedEndpoints??[])},[]),ve=async()=>{if(y)try{await v.patch(`/api/keys/${y.id}`,{allowedEndpoints:D.length>0?D:null}),k(null),g.refetch(),i({title:s("apiKeys.toast.keyUpdated"),variant:"success"})}catch(a){const t=b(a);i({title:s("apiKeys.toast.updateFailure",{message:t.message}),variant:"error"})}},J=a=>a?new Date(a).toLocaleString():s("common.noData"),fe=n.useMemo(()=>{const a=x.map(t=>t.apiKeyName??s("apiKeys.analytics.unknownKey"));return{tooltip:{trigger:"axis"},grid:{left:60,right:20,top:40,bottom:40},xAxis:{type:"category",data:a,axisLabel:{interval:0,rotate:20}},yAxis:{type:"value"},series:[{name:s("apiKeys.analytics.requestsSeries"),type:"bar",data:x.map(t=>t.requests),itemStyle:{color:"hsl(var(--primary))"}}]}},[x,s]),Ke=n.useMemo(()=>{const a=x.map(t=>t.apiKeyName??s("apiKeys.analytics.unknownKey"));return{tooltip:{trigger:"axis"},legend:{data:[s("apiKeys.analytics.tokens.input"),s("apiKeys.analytics.tokens.output")]},grid:{left:60,right:20,top:50,bottom:40},xAxis:{type:"category",data:a,axisLabel:{interval:0,rotate:20}},yAxis:{type:"value"},series:[{name:s("apiKeys.analytics.tokens.input"),type:"bar",stack:"tokens",itemStyle:{color:"#22c55e"},data:x.map(t=>t.inputTokens)},{name:s("apiKeys.analytics.tokens.output"),type:"bar",stack:"tokens",itemStyle:{color:"#0ea5e9"},data:x.map(t=>t.outputTokens)}]}},[x,s]);return g.isLoading?e.jsx(be,{}):e.jsxs("div",{className:"flex flex-col gap-6",children:[e.jsx(Ce,{icon:e.jsx(we,{className:"h-5 w-5","aria-hidden":"true"}),title:s("apiKeys.title"),description:s("apiKeys.description"),actions:e.jsxs(c,{onClick:()=>m(!0),children:[e.jsx(Te,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),s("apiKeys.createNew")]})}),e.jsx(ee,{title:s("apiKeys.analytics.title"),description:s("apiKeys.analytics.description",{days:h}),actions:e.jsx("div",{className:"flex items-center gap-1 rounded-lg border p-1",children:Pe.map(a=>{const t=h===a.value;return e.jsx("button",{type:"button",onClick:()=>ce(a.value),className:ne("inline-flex h-7 items-center rounded-md px-3 text-xs font-medium transition-colors",t?"bg-primary text-primary-foreground":"text-muted-foreground hover:bg-muted"),children:s(a.labelKey)},a.value)})}),children:e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 xl:grid-cols-3",children:[e.jsx(I,{label:s("apiKeys.analytics.cards.total"),value:pe}),e.jsx(I,{label:s("apiKeys.analytics.cards.enabled"),value:me}),e.jsx(I,{label:s("apiKeys.analytics.cards.active",{days:h}),value:ue})]}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-2",children:[e.jsx(ie,{title:s("apiKeys.analytics.charts.requests"),loading:N.isLoading,empty:x.length===0,emptyText:s("apiKeys.analytics.empty"),option:fe}),e.jsx(ie,{title:s("apiKeys.analytics.charts.tokens"),loading:N.isLoading,empty:x.length===0,emptyText:s("apiKeys.analytics.empty"),option:Ke})]})]})}),e.jsx(ee,{title:s("apiKeys.list.title"),description:de?s("apiKeys.wildcardHint"):void 0,children:T.length===0?e.jsx("div",{className:"flex h-32 items-center justify-center rounded-lg border border-dashed",children:e.jsx("p",{className:"text-sm text-muted-foreground",children:s("apiKeys.list.empty")})}):e.jsx("div",{className:"grid gap-4",children:T.map(a=>{const t=(a.totalInputTokens+a.totalOutputTokens).toLocaleString(),r=G.get(a.id),A=oe===a.id;return e.jsx(H,{children:e.jsx(U,{className:"space-y-4 pt-4",children:e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-4",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("h3",{className:"text-base font-semibold",children:a.name}),a.isWildcard&&e.jsx(C,{variant:"secondary",children:s("apiKeys.wildcard")}),e.jsx(C,{variant:a.enabled?"default":"outline",children:a.enabled?s("apiKeys.status.enabled"):s("apiKeys.status.disabled")}),!a.isWildcard&&a.allowedEndpoints&&a.allowedEndpoints.length>0?a.allowedEndpoints.map(X=>e.jsx(C,{variant:"outline",className:"text-xs",children:X},X)):a.isWildcard?null:e.jsx(C,{variant:"secondary",className:"text-xs opacity-60",children:s("apiKeys.allEndpoints")})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("code",{className:"rounded-md bg-muted px-3 py-1.5 font-mono text-sm",children:a.isWildcard?s("apiKeys.wildcard"):r??a.maskedKey??"********"}),!a.isWildcard&&e.jsx("div",{className:"flex items-center gap-1",children:r?e.jsxs(e.Fragment,{children:[e.jsx(c,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>void _(r),"aria-label":s("common.actions.copy"),title:s("common.actions.copy"),children:e.jsx(ae,{className:"h-4 w-4","aria-hidden":"true"})}),e.jsx(c,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>ge(a.id),"aria-label":s("apiKeys.actions.hide"),title:s("apiKeys.actions.hide"),children:e.jsx(Le,{className:"h-4 w-4","aria-hidden":"true"})})]}):e.jsx(c,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>void ye(a.id),disabled:A,"aria-label":s("apiKeys.actions.reveal"),title:s("apiKeys.actions.reveal"),children:e.jsx(Me,{className:"h-4 w-4","aria-hidden":"true"})})})]}),a.isWildcard?e.jsx("p",{className:"text-sm text-muted-foreground",children:s("apiKeys.wildcardHint")}):a.description?e.jsx("p",{className:"whitespace-pre-wrap text-sm text-muted-foreground",children:a.description}):null,e.jsxs("div",{className:"grid gap-3 text-sm sm:grid-cols-2",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx("span",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:s("apiKeys.created")}),e.jsx("p",{className:"font-medium",children:J(a.createdAt)})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("span",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:s("apiKeys.lastUsed")}),e.jsx("p",{className:"font-medium",children:J(a.lastUsedAt)})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("span",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:s("apiKeys.requestCount")}),e.jsx("p",{className:"font-medium",children:a.requestCount.toLocaleString()})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("span",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:s("apiKeys.totalTokens")}),e.jsx("p",{className:"font-medium",children:t})]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[!a.isWildcard&&e.jsxs(c,{variant:"outline",size:"sm",onClick:()=>je(a),children:[e.jsx(Ae,{className:"mr-1 h-3.5 w-3.5","aria-hidden":"true"}),s("apiKeys.editEndpoints")]}),e.jsx(c,{variant:a.enabled?"outline":"default",size:"sm",onClick:()=>xe(a.id,a.enabled),children:a.enabled?s("apiKeys.actions.disable"):s("apiKeys.actions.enable")}),!a.isWildcard&&e.jsx(c,{variant:"ghost",size:"icon",className:"h-8 w-8 text-destructive hover:bg-destructive/10 hover:text-destructive",onClick:()=>he(a.id),disabled:le===a.id,"aria-label":s("apiKeys.actions.delete"),children:e.jsx(Oe,{className:"h-4 w-4","aria-hidden":"true"})})]})]})})},a.id)})})}),e.jsx(O,{open:o,onOpenChange:m,children:e.jsxs(W,{children:[e.jsxs(P,{children:[e.jsx(R,{children:s("apiKeys.createNew")}),e.jsx(se,{children:s("apiKeys.createDescription")})]}),e.jsxs("div",{className:"min-h-0 space-y-4 overflow-y-auto",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(M,{htmlFor:"keyName",children:[s("apiKeys.keyNamePlaceholder")," *"]}),e.jsx(De,{id:"keyName",value:u,onChange:a=>d(a.target.value),placeholder:s("apiKeys.keyNamePlaceholder"),onKeyDown:a=>{a.key==="Enter"&&(a.preventDefault(),Y())}})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(M,{htmlFor:"keyDescription",children:s("apiKeys.descriptionLabel")}),e.jsx(re,{id:"keyDescription",value:w,onChange:a=>f(a.target.value),placeholder:s("apiKeys.keyDescriptionPlaceholder"),rows:3})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(M,{children:s("apiKeys.allowedEndpoints")}),e.jsx(te,{available:Z,selected:l,onChange:K,hint:s("apiKeys.selectEndpoints")})]})]}),e.jsxs(F,{children:[e.jsx(c,{variant:"outline",onClick:()=>{m(!1),d(""),f(""),K([])},children:s("common.actions.cancel")}),e.jsx(c,{onClick:()=>void Y(),children:s("apiKeys.createAction")})]})]})}),e.jsx(O,{open:!!p,onOpenChange:()=>S(null),children:e.jsxs(W,{children:[e.jsx(P,{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-10 w-10 items-center justify-center rounded-full bg-emerald-500/10 text-emerald-600",children:e.jsx(ke,{className:"h-5 w-5","aria-hidden":"true"})}),e.jsx(R,{children:s("apiKeys.keyCreated")})]})}),e.jsx("p",{className:"text-sm font-medium text-amber-600 dark:text-amber-400",children:s("apiKeys.saveKeyWarning")}),e.jsx("div",{className:"rounded-md bg-muted px-4 py-3 font-mono text-sm",children:p==null?void 0:p.key}),(p==null?void 0:p.description)&&e.jsx("p",{className:"whitespace-pre-wrap text-sm text-muted-foreground",children:p.description}),e.jsxs(F,{children:[e.jsxs(c,{onClick:()=>void _((p==null?void 0:p.key)??""),children:[e.jsx(ae,{className:"mr-2 h-4 w-4","aria-hidden":"true"}),s("common.actions.copy")]}),e.jsx(c,{variant:"outline",onClick:()=>S(null),children:s("common.actions.close")})]})]})}),e.jsx(O,{open:!!y,onOpenChange:a=>{a||k(null)},children:e.jsxs(W,{children:[e.jsxs(P,{children:[e.jsx(R,{children:s("apiKeys.editEndpoints")}),e.jsx(se,{children:y==null?void 0:y.name})]}),e.jsx("div",{className:"min-h-0 overflow-y-auto",children:e.jsx(te,{available:Z,selected:D,onChange:B,hint:s("apiKeys.selectEndpoints")})}),e.jsxs(F,{children:[e.jsx(c,{variant:"outline",onClick:()=>k(null),children:s("common.actions.cancel")}),e.jsx(c,{onClick:()=>void ve(),children:s("common.save")})]})]})})]})}function I({label:s,value:i}){return e.jsx(H,{children:e.jsxs(U,{className:"pt-4",children:[e.jsx("p",{className:"text-xs font-medium uppercase tracking-wide text-muted-foreground",children:s}),e.jsx("p",{className:"mt-2 text-2xl font-semibold",children:i})]})})}function ie({title:s,option:i,loading:o,empty:m,emptyText:u}){const{t:d}=q();return e.jsx(H,{children:e.jsxs(U,{className:"space-y-4 pt-4",children:[e.jsx("h3",{className:"text-base font-semibold",children:s}),o?e.jsx("div",{className:"flex h-[280px] items-center justify-center",children:e.jsx("span",{className:"text-sm text-muted-foreground",children:d("common.loadingShort")})}):m?e.jsx("div",{className:"flex h-[280px] items-center justify-center rounded-lg border border-dashed",children:e.jsx("span",{className:"text-sm text-muted-foreground",children:u})}):e.jsx(Ee,{option:i,style:{height:280},notMerge:!0,lazyUpdate:!0})]})})}export{Be as default};
@@ -1,4 +1,4 @@
1
- import{c as _,r as n,j as e,a as y,u as D,b as le,d as ce,t as me,B as I,e as he}from"./index-iaYfODK6.js";import{E as ue}from"./index-Bkl9YQUf.js";import{S as xe,C as pe,T as be}from"./Skeleton-DKmc2Oau.js";import{P as X,B as w}from"./PageHeader-DE87PlB_.js";import{P as Z}from"./PageSection-BW4UtaTE.js";import{u as k}from"./useApiQuery-LZxVJXA3.js";import{C as G,a as Q}from"./card-B5QaMdIj.js";import{S as ge,a as fe,b as ye,c as je,d as M}from"./select-DfAJfUCL.js";/**
1
+ import{c as _,r as n,j as e,a as y,u as D,b as le,d as ce,t as me,B as I,e as he}from"./index-Bdp0nMlR.js";import{E as ue}from"./index-Cu1IXjrr.js";import{S as xe,C as pe,T as be}from"./Skeleton-BRSmcxNh.js";import{P as X,B as w}from"./PageHeader-D2Zq1K4t.js";import{P as Z}from"./PageSection-wWtyIp2D.js";import{u as k}from"./useApiQuery-CL9_n4sn.js";import{C as G,a as Q}from"./card-Dl49soGw.js";import{S as ge,a as fe,b as ye,c as je,d as M}from"./select-Cfzsn-JK.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as N,u as L,b as E,r as i,j as e,e as h,C as R,a as $,L as I,g as T,t as P}from"./index-iaYfODK6.js";import{P as z,B as j}from"./PageHeader-DE87PlB_.js";import{I as F}from"./input-CRfONI49.js";import{C as w,a as C,b as V}from"./card-B5QaMdIj.js";import{S as B,a as D,b as K,c as H,d as f}from"./select-DfAJfUCL.js";import{R as J}from"./refresh-cw-ZDTq8wum.js";/**
1
+ import{c as N,u as L,b as E,r as i,j as e,e as h,C as R,a as $,L as I,g as T,t as P}from"./index-Bdp0nMlR.js";import{P as z,B as j}from"./PageHeader-D2Zq1K4t.js";import{I as F}from"./input-B6w5gzdL.js";import{C as w,a as C,b as V}from"./card-Dl49soGw.js";import{S as B,a as D,b as K,c as H,d as f}from"./select-Cfzsn-JK.js";import{R as J}from"./refresh-cw-Duv0QKyb.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as x,u,r as g,j as e,e as h}from"./index-iaYfODK6.js";import{P as N}from"./PageHeader-DE87PlB_.js";import{P as d}from"./PageSection-BW4UtaTE.js";import{c as p}from"./clipboard-CALi6bTW.js";import{C as j,a as f}from"./card-B5QaMdIj.js";import{I as v}from"./info-Dtepvi_0.js";/**
1
+ import{c as x,u,r as g,j as e,e as h}from"./index-Bdp0nMlR.js";import{P as N}from"./PageHeader-D2Zq1K4t.js";import{P as d}from"./PageSection-wWtyIp2D.js";import{c as p}from"./clipboard-CALi6bTW.js";import{C as j,a as f}from"./card-Dl49soGw.js";import{I as v}from"./info-Yuz8DmBH.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{u as C,an as E,ao as F,ap as S,r as n,j as e,W as L,e as k}from"./index-iaYfODK6.js";import{I as j}from"./input-CRfONI49.js";import{L as b}from"./label-sf3QNge5.js";import{C as v,a as w,b as P,c as T,d as A,e as D}from"./card-B5QaMdIj.js";function G(){const{t:s}=C(),l=E(),u=F(),{authEnabled:i,isAuthenticated:m,loading:o,login:N,error:x}=S(),[t,f]=n.useState({username:"",password:""}),[p,d]=n.useState(null),[h,g]=n.useState(!1),c=n.useMemo(()=>{var r;const a=u.state;return((r=a==null?void 0:a.from)==null?void 0:r.pathname)??"/"},[u.state]);n.useEffect(()=>{if(!i&&!o){l(c,{replace:!0});return}i&&m&&!o&&l(c,{replace:!0})},[i,m,o,l,c]);const y=async a=>{if(a.preventDefault(),d(null),!t.username.trim()||!t.password){d(s("login.validation.required"));return}g(!0);try{await N(t.username.trim(),t.password),l(c,{replace:!0})}catch(r){d(r instanceof Error?r.message:s("login.validation.failed"))}finally{g(!1)}};return o?e.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background",children:e.jsx(v,{className:"w-full max-w-md",children:e.jsx(w,{className:"flex min-h-[320px] items-center justify-center",children:e.jsx(L,{})})})}):i?e.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background px-4",children:e.jsxs(v,{className:"w-full max-w-md",children:[e.jsxs(P,{className:"text-center",children:[e.jsx("div",{className:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-xl bg-primary text-lg font-bold text-primary-foreground",children:"GW"}),e.jsx(T,{className:"text-2xl",children:s("login.title")}),e.jsx(A,{className:"text-sm",children:s("login.description")})]}),e.jsx(w,{children:e.jsxs("form",{className:"space-y-4",onSubmit:y,children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{htmlFor:"username",children:s("login.fields.username")}),e.jsx(j,{id:"username",value:t.username,autoComplete:"username",autoFocus:!0,onChange:a=>f(r=>({...r,username:a.target.value})),placeholder:s("login.fields.usernamePlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{htmlFor:"password",children:s("login.fields.password")}),e.jsx(j,{id:"password",type:"password",value:t.password,autoComplete:"current-password",onChange:a=>f(r=>({...r,password:a.target.value})),placeholder:s("login.fields.passwordPlaceholder")})]}),(p||x)&&e.jsx("div",{className:"rounded-md border border-destructive/50 bg-destructive/10 px-4 py-3 text-sm text-destructive",children:p||x}),e.jsx(k,{type:"submit",className:"w-full",disabled:h,children:s(h?"common.actions.loading":"login.actions.submit")})]})}),e.jsx(D,{className:"justify-center",children:e.jsx("p",{className:"text-center text-xs text-muted-foreground",children:s("login.hint")})})]})}):null}export{G as default};
1
+ import{u as C,an as E,ao as F,ap as S,r as n,j as e,W as L,e as k}from"./index-Bdp0nMlR.js";import{I as j}from"./input-B6w5gzdL.js";import{L as b}from"./label-CuU6RIsU.js";import{C as v,a as w,b as P,c as T,d as A,e as D}from"./card-Dl49soGw.js";function G(){const{t:s}=C(),l=E(),u=F(),{authEnabled:i,isAuthenticated:m,loading:o,login:N,error:x}=S(),[t,f]=n.useState({username:"",password:""}),[p,d]=n.useState(null),[h,g]=n.useState(!1),c=n.useMemo(()=>{var r;const a=u.state;return((r=a==null?void 0:a.from)==null?void 0:r.pathname)??"/"},[u.state]);n.useEffect(()=>{if(!i&&!o){l(c,{replace:!0});return}i&&m&&!o&&l(c,{replace:!0})},[i,m,o,l,c]);const y=async a=>{if(a.preventDefault(),d(null),!t.username.trim()||!t.password){d(s("login.validation.required"));return}g(!0);try{await N(t.username.trim(),t.password),l(c,{replace:!0})}catch(r){d(r instanceof Error?r.message:s("login.validation.failed"))}finally{g(!1)}};return o?e.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background",children:e.jsx(v,{className:"w-full max-w-md",children:e.jsx(w,{className:"flex min-h-[320px] items-center justify-center",children:e.jsx(L,{})})})}):i?e.jsx("div",{className:"flex min-h-screen items-center justify-center bg-background px-4",children:e.jsxs(v,{className:"w-full max-w-md",children:[e.jsxs(P,{className:"text-center",children:[e.jsx("div",{className:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-xl bg-primary text-lg font-bold text-primary-foreground",children:"GW"}),e.jsx(T,{className:"text-2xl",children:s("login.title")}),e.jsx(A,{className:"text-sm",children:s("login.description")})]}),e.jsx(w,{children:e.jsxs("form",{className:"space-y-4",onSubmit:y,children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{htmlFor:"username",children:s("login.fields.username")}),e.jsx(j,{id:"username",value:t.username,autoComplete:"username",autoFocus:!0,onChange:a=>f(r=>({...r,username:a.target.value})),placeholder:s("login.fields.usernamePlaceholder")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(b,{htmlFor:"password",children:s("login.fields.password")}),e.jsx(j,{id:"password",type:"password",value:t.password,autoComplete:"current-password",onChange:a=>f(r=>({...r,password:a.target.value})),placeholder:s("login.fields.passwordPlaceholder")})]}),(p||x)&&e.jsx("div",{className:"rounded-md border border-destructive/50 bg-destructive/10 px-4 py-3 text-sm text-destructive",children:p||x}),e.jsx(k,{type:"submit",className:"w-full",disabled:h,children:s(h?"common.actions.loading":"login.actions.submit")})]})}),e.jsx(D,{className:"justify-center",children:e.jsx("p",{className:"text-center text-xs text-muted-foreground",children:s("login.hint")})})]})}):null}export{G as default};
@@ -1,4 +1,4 @@
1
- import{c as $e,u as H,b as ve,r,d as Fe,t as Ke,j as e,e as k,a as D,F as Me,X as Ne,f as Ae}from"./index-iaYfODK6.js";import{u as M}from"./useApiQuery-LZxVJXA3.js";import{T as Pe,a as K}from"./Skeleton-DKmc2Oau.js";import{P as ze,B as ee}from"./PageHeader-DE87PlB_.js";import{c as Oe}from"./clipboard-CALi6bTW.js";import{I as Z}from"./input-CRfONI49.js";import{L as C}from"./label-sf3QNge5.js";import{C as he,a as fe}from"./card-B5QaMdIj.js";import{C as Ie,e as qe,S as I,a as q,b as U,c as B,d as w}from"./select-DfAJfUCL.js";import{R as Ue}from"./refresh-cw-ZDTq8wum.js";/**
1
+ import{c as $e,u as H,b as ve,r,d as Fe,t as Ke,j as e,e as k,a as D,F as Me,X as Ne,f as Ae}from"./index-Bdp0nMlR.js";import{u as M}from"./useApiQuery-CL9_n4sn.js";import{T as Pe,a as K}from"./Skeleton-BRSmcxNh.js";import{P as ze,B as ee}from"./PageHeader-D2Zq1K4t.js";import{c as Oe}from"./clipboard-CALi6bTW.js";import{I as Z}from"./input-B6w5gzdL.js";import{L as C}from"./label-CuU6RIsU.js";import{C as he,a as fe}from"./card-Dl49soGw.js";import{C as Ie,e as qe,S as I,a as q,b as U,c as B,d as w}from"./select-Cfzsn-JK.js";import{R as Ue}from"./refresh-cw-Duv0QKyb.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- var dt=t=>{throw TypeError(t)};var Ve=(t,a,o)=>a.has(t)||dt("Cannot "+o);var O=(t,a,o)=>(Ve(t,a,"read from private field"),o?o.call(t):a.get(t)),ue=(t,a,o)=>a.has(t)?dt("Cannot add the same private member more than once"):a instanceof WeakSet?a.add(t):a.set(t,o),me=(t,a,o,c)=>(Ve(t,a,"write to private field"),c?c.call(t,o):a.set(t,o),o),pe=(t,a,o)=>(Ve(t,a,"access private method"),o);import{c as vs,S as js,s as ys,h as ct,i as Ns,n as bt,k as vt,r as f,l as ks,m as ws,o as jt,p as Ms,j as e,R as Cs,q as Es,v as Ps,w as yt,P as Nt,x as Ne,A as kt,y as wt,z as Rs,D as Ss,E as Ds,G as Os,H as As,I as Ts,J as Is,K as Us,M as Fs,a as ke,u as ge,b as Mt,e as I,N as _s,X as Te,d as W,O as we,t as Ie,C as Ls,T as $s,Q as Ks,U as zs,V as Bs}from"./index-iaYfODK6.js";import{u as Vs,a as qs}from"./useApiQuery-LZxVJXA3.js";import{P as Hs,B as Q}from"./PageHeader-DE87PlB_.js";import{I as xe}from"./input-CRfONI49.js";import{L as de}from"./label-sf3QNge5.js";import{C as qe,a as He}from"./card-B5QaMdIj.js";import{S as Ct}from"./switch-DTxmu4vA.js";import{S as Gs,a as Qs,b as Js,c as Xs,d as ut,e as Ws}from"./select-DfAJfUCL.js";import{P as Je,D as Et,a as Pt,b as Rt,c as St,d as Dt,e as Ot}from"./dialog-Bl93c96O.js";import{R as Ys}from"./refresh-cw-ZDTq8wum.js";/**
1
+ var dt=t=>{throw TypeError(t)};var Ve=(t,a,o)=>a.has(t)||dt("Cannot "+o);var O=(t,a,o)=>(Ve(t,a,"read from private field"),o?o.call(t):a.get(t)),ue=(t,a,o)=>a.has(t)?dt("Cannot add the same private member more than once"):a instanceof WeakSet?a.add(t):a.set(t,o),me=(t,a,o,c)=>(Ve(t,a,"write to private field"),c?c.call(t,o):a.set(t,o),o),pe=(t,a,o)=>(Ve(t,a,"access private method"),o);import{c as vs,S as js,s as ys,h as ct,i as Ns,n as bt,k as vt,r as f,l as ks,m as ws,o as jt,p as Ms,j as e,R as Cs,q as Es,v as Ps,w as yt,P as Nt,x as Ne,A as kt,y as wt,z as Rs,D as Ss,E as Ds,G as Os,H as As,I as Ts,J as Is,K as Us,M as Fs,a as ke,u as ge,b as Mt,e as I,N as _s,X as Te,d as W,O as we,t as Ie,C as Ls,T as $s,Q as Ks,U as zs,V as Bs}from"./index-Bdp0nMlR.js";import{u as Vs,a as qs}from"./useApiQuery-CL9_n4sn.js";import{P as Hs,B as Q}from"./PageHeader-D2Zq1K4t.js";import{I as xe}from"./input-B6w5gzdL.js";import{L as de}from"./label-CuU6RIsU.js";import{C as qe,a as He}from"./card-Dl49soGw.js";import{S as Ct}from"./switch-DoT-Ur3p.js";import{S as Gs,a as Qs,b as Js,c as Xs,d as ut,e as Ws}from"./select-Cfzsn-JK.js";import{P as Je,D as Et,a as Pt,b as Rt,c as St,d as Dt,e as Ot}from"./dialog-CW6Z62O9.js";import{R as Ys}from"./refresh-cw-Duv0QKyb.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{j as r,a as s,am as n}from"./index-iaYfODK6.js";const l=n("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 shadow-sm",{variants:{variant:{default:"border-primary/20 bg-primary/10 text-primary hover:bg-primary/15 dark:border-primary/30 dark:bg-primary/20 dark:text-primary-foreground",secondary:"border-slate-200 bg-slate-100 text-slate-700 hover:bg-slate-200 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300",destructive:"border-red-200 bg-gradient-to-r from-red-50 to-red-100 text-red-700 hover:from-red-100 hover:to-red-150 dark:border-red-800 dark:from-red-950 dark:to-red-900 dark:text-red-300",outline:"border-slate-300 bg-transparent text-slate-600 hover:bg-slate-50 dark:border-slate-600 dark:text-slate-400 dark:hover:bg-slate-800",success:"border-emerald-200 bg-gradient-to-r from-emerald-50 to-emerald-100 text-emerald-700 hover:from-emerald-100 hover:to-emerald-150 dark:border-emerald-800 dark:from-emerald-950 dark:to-emerald-900 dark:text-emerald-300",warning:"border-amber-200 bg-gradient-to-r from-amber-50 to-amber-100 text-amber-700 hover:from-amber-100 hover:to-amber-150 dark:border-amber-800 dark:from-amber-950 dark:to-amber-900 dark:text-amber-300",info:"border-cyan-200 bg-gradient-to-r from-cyan-50 to-cyan-100 text-cyan-700 hover:from-cyan-100 hover:to-cyan-150 dark:border-cyan-800 dark:from-cyan-950 dark:to-cyan-900 dark:text-cyan-300",purple:"border-violet-200 bg-gradient-to-r from-violet-50 to-violet-100 text-violet-700 hover:from-violet-100 hover:to-violet-150 dark:border-violet-800 dark:from-violet-950 dark:to-violet-900 dark:text-violet-300",pink:"border-pink-200 bg-gradient-to-r from-pink-50 to-pink-100 text-pink-700 hover:from-pink-100 hover:to-pink-150 dark:border-pink-800 dark:from-pink-950 dark:to-pink-900 dark:text-pink-300"}},defaultVariants:{variant:"default"}});function m({className:e,variant:t,...a}){return r.jsx("div",{className:s(l({variant:t}),e),...a})}function f({icon:e,title:t,description:a,badge:o,actions:d,className:i}){return r.jsxs("div",{className:s("flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",i),children:[r.jsxs("div",{className:"flex flex-1 flex-wrap items-start gap-4",children:[e&&r.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-lg bg-primary/10 text-primary",children:e}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[r.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:t}),o&&r.jsx(m,{variant:"secondary",children:o})]}),a&&r.jsx("p",{className:"max-w-2xl text-sm text-muted-foreground",children:a})]})]}),d&&r.jsx("div",{className:"flex shrink-0 flex-wrap items-center gap-2",children:d})]})}export{m as B,f as P};
1
+ import{j as r,a as s,am as n}from"./index-Bdp0nMlR.js";const l=n("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 shadow-sm",{variants:{variant:{default:"border-primary/20 bg-primary/10 text-primary hover:bg-primary/15 dark:border-primary/30 dark:bg-primary/20 dark:text-primary-foreground",secondary:"border-slate-200 bg-slate-100 text-slate-700 hover:bg-slate-200 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300",destructive:"border-red-200 bg-gradient-to-r from-red-50 to-red-100 text-red-700 hover:from-red-100 hover:to-red-150 dark:border-red-800 dark:from-red-950 dark:to-red-900 dark:text-red-300",outline:"border-slate-300 bg-transparent text-slate-600 hover:bg-slate-50 dark:border-slate-600 dark:text-slate-400 dark:hover:bg-slate-800",success:"border-emerald-200 bg-gradient-to-r from-emerald-50 to-emerald-100 text-emerald-700 hover:from-emerald-100 hover:to-emerald-150 dark:border-emerald-800 dark:from-emerald-950 dark:to-emerald-900 dark:text-emerald-300",warning:"border-amber-200 bg-gradient-to-r from-amber-50 to-amber-100 text-amber-700 hover:from-amber-100 hover:to-amber-150 dark:border-amber-800 dark:from-amber-950 dark:to-amber-900 dark:text-amber-300",info:"border-cyan-200 bg-gradient-to-r from-cyan-50 to-cyan-100 text-cyan-700 hover:from-cyan-100 hover:to-cyan-150 dark:border-cyan-800 dark:from-cyan-950 dark:to-cyan-900 dark:text-cyan-300",purple:"border-violet-200 bg-gradient-to-r from-violet-50 to-violet-100 text-violet-700 hover:from-violet-100 hover:to-violet-150 dark:border-violet-800 dark:from-violet-950 dark:to-violet-900 dark:text-violet-300",pink:"border-pink-200 bg-gradient-to-r from-pink-50 to-pink-100 text-pink-700 hover:from-pink-100 hover:to-pink-150 dark:border-pink-800 dark:from-pink-950 dark:to-pink-900 dark:text-pink-300"}},defaultVariants:{variant:"default"}});function m({className:e,variant:t,...a}){return r.jsx("div",{className:s(l({variant:t}),e),...a})}function f({icon:e,title:t,description:a,badge:o,actions:d,className:i}){return r.jsxs("div",{className:s("flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",i),children:[r.jsxs("div",{className:"flex flex-1 flex-wrap items-start gap-4",children:[e&&r.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-lg bg-primary/10 text-primary",children:e}),r.jsxs("div",{className:"space-y-1",children:[r.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[r.jsx("h1",{className:"text-2xl font-semibold tracking-tight",children:t}),o&&r.jsx(m,{variant:"secondary",children:o})]}),a&&r.jsx("p",{className:"max-w-2xl text-sm text-muted-foreground",children:a})]})]}),d&&r.jsx("div",{className:"flex shrink-0 flex-wrap items-center gap-2",children:d})]})}export{m as B,f as P};
@@ -1 +1 @@
1
- import{j as s,a as d}from"./index-iaYfODK6.js";import{C as m,b as l,c as i,d as j,a as f}from"./card-B5QaMdIj.js";function p({title:a,description:e,actions:r,className:n,contentClassName:x,children:c}){const t=a||e||r;return s.jsxs(m,{className:n,children:[t&&s.jsxs(l,{className:"flex flex-row items-start justify-between space-y-0",children:[s.jsxs("div",{className:"space-y-1.5",children:[typeof a=="string"?s.jsx(i,{className:"text-base",children:a}):a,e&&(typeof e=="string"?s.jsx(j,{children:e}):s.jsx("div",{className:"text-sm text-muted-foreground",children:e}))]}),r&&s.jsx("div",{className:"flex shrink-0 items-center gap-2",children:r})]}),s.jsx(f,{className:d(!t&&"pt-6",x),children:c})]})}export{p as P};
1
+ import{j as s,a as d}from"./index-Bdp0nMlR.js";import{C as m,b as l,c as i,d as j,a as f}from"./card-Dl49soGw.js";function p({title:a,description:e,actions:r,className:n,contentClassName:x,children:c}){const t=a||e||r;return s.jsxs(m,{className:n,children:[t&&s.jsxs(l,{className:"flex flex-row items-start justify-between space-y-0",children:[s.jsxs("div",{className:"space-y-1.5",children:[typeof a=="string"?s.jsx(i,{className:"text-base",children:a}):a,e&&(typeof e=="string"?s.jsx(j,{children:e}):s.jsx("div",{className:"text-sm text-muted-foreground",children:e}))]}),r&&s.jsx("div",{className:"flex shrink-0 items-center gap-2",children:r})]}),s.jsx(f,{className:d(!t&&"pt-6",x),children:c})]})}export{p as P};
@@ -1,4 +1,4 @@
1
- import{c as Oe,u as Be,b as _e,r as m,j as e,e as S,a3 as Ge,W as be,a as Qe,d as O}from"./index-iaYfODK6.js";import{u as fe}from"./useApiQuery-LZxVJXA3.js";import{P as We}from"./PageHeader-DE87PlB_.js";import{c as ze}from"./clipboard-CALi6bTW.js";import{I as j}from"./input-CRfONI49.js";import{L as c}from"./label-sf3QNge5.js";import{C as E,a as F}from"./card-B5QaMdIj.js";import{S as L}from"./switch-DTxmu4vA.js";import{S as $e,a as Je,b as Ue,c as Xe,d as Ye}from"./select-DfAJfUCL.js";import{S as Ze,C as et}from"./shield-wbL9EF4o.js";/**
1
+ import{c as Oe,u as Be,b as _e,r as m,j as e,e as S,a3 as Ge,W as be,a as Qe,d as O}from"./index-Bdp0nMlR.js";import{u as fe}from"./useApiQuery-CL9_n4sn.js";import{P as We}from"./PageHeader-D2Zq1K4t.js";import{c as ze}from"./clipboard-CALi6bTW.js";import{I as j}from"./input-B6w5gzdL.js";import{L as c}from"./label-CuU6RIsU.js";import{C as E,a as F}from"./card-Dl49soGw.js";import{S as L}from"./switch-DoT-Ur3p.js";import{S as $e,a as Je,b as Ue,c as Xe,d as Ye}from"./select-Cfzsn-JK.js";import{S as Ze,C as et}from"./shield--mDWO-No.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{j as s,a as n}from"./index-iaYfODK6.js";function e({className:a}){return s.jsx("div",{role:"status","aria-label":"Loading",className:n("animate-pulse rounded-md bg-muted",a)})}function d(){return s.jsxs("div",{className:"rounded-xl border bg-card p-5 space-y-3",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(e,{className:"h-3 w-24"}),s.jsx(e,{className:"h-10 w-10 rounded-xl"})]}),s.jsx(e,{className:"h-8 w-32"})]})}function o(){return s.jsxs("div",{className:"rounded-xl border bg-card p-4 space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(e,{className:"h-4 w-32"}),s.jsx(e,{className:"h-3 w-48"})]}),s.jsx(e,{className:"h-[320px] w-full rounded-lg"})]})}function m({columns:a=6}){const r=["w-24","w-16","w-20","w-28","w-14","w-12","w-20","w-16","w-14","w-12"];return s.jsx("tr",{className:"border-b",children:Array.from({length:a}).map((t,l)=>s.jsx("td",{className:"px-3 py-3",children:s.jsx(e,{className:n("h-4",r[l%r.length])})},l))})}export{o as C,d as S,m as T,e as a};
1
+ import{j as s,a as n}from"./index-Bdp0nMlR.js";function e({className:a}){return s.jsx("div",{role:"status","aria-label":"Loading",className:n("animate-pulse rounded-md bg-muted",a)})}function d(){return s.jsxs("div",{className:"rounded-xl border bg-card p-5 space-y-3",children:[s.jsxs("div",{className:"flex items-center justify-between",children:[s.jsx(e,{className:"h-3 w-24"}),s.jsx(e,{className:"h-10 w-10 rounded-xl"})]}),s.jsx(e,{className:"h-8 w-32"})]})}function o(){return s.jsxs("div",{className:"rounded-xl border bg-card p-4 space-y-4",children:[s.jsxs("div",{className:"space-y-2",children:[s.jsx(e,{className:"h-4 w-32"}),s.jsx(e,{className:"h-3 w-48"})]}),s.jsx(e,{className:"h-[320px] w-full rounded-lg"})]})}function m({columns:a=6}){const r=["w-24","w-16","w-20","w-28","w-14","w-12","w-20","w-16","w-14","w-12"];return s.jsx("tr",{className:"border-b",children:Array.from({length:a}).map((t,l)=>s.jsx("td",{className:"px-3 py-3",children:s.jsx(e,{className:n("h-4",r[l%r.length])})},l))})}export{o as C,d as S,m as T,e as a};
@@ -1 +1 @@
1
- import{r as s,j as t,a as d,am as n}from"./index-iaYfODK6.js";const i=n("rounded-xl border bg-card text-card-foreground transition-all duration-200",{variants:{variant:{default:"shadow-sm hover:shadow-md",elevated:"shadow-md hover:shadow-lg",outline:"shadow-none border-2",ghost:"border-transparent shadow-none bg-transparent",interactive:"shadow-sm hover:shadow-lg hover:-translate-y-0.5 cursor-pointer"}},defaultVariants:{variant:"default"}}),l=s.forwardRef(({className:a,variant:e,...r},o)=>t.jsx("div",{ref:o,className:d(i({variant:e}),a),...r}));l.displayName="Card";const c=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("flex flex-col space-y-1.5 p-5",a),...e}));c.displayName="CardHeader";const m=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("text-lg font-semibold leading-none tracking-tight",a),...e}));m.displayName="CardTitle";const f=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("text-sm text-muted-foreground",a),...e}));f.displayName="CardDescription";const p=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("p-5 pt-0",a),...e}));p.displayName="CardContent";const x=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("flex items-center p-5 pt-0",a),...e}));x.displayName="CardFooter";export{l as C,p as a,c as b,m as c,f as d,x as e};
1
+ import{r as s,j as t,a as d,am as n}from"./index-Bdp0nMlR.js";const i=n("rounded-xl border bg-card text-card-foreground transition-all duration-200",{variants:{variant:{default:"shadow-sm hover:shadow-md",elevated:"shadow-md hover:shadow-lg",outline:"shadow-none border-2",ghost:"border-transparent shadow-none bg-transparent",interactive:"shadow-sm hover:shadow-lg hover:-translate-y-0.5 cursor-pointer"}},defaultVariants:{variant:"default"}}),l=s.forwardRef(({className:a,variant:e,...r},o)=>t.jsx("div",{ref:o,className:d(i({variant:e}),a),...r}));l.displayName="Card";const c=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("flex flex-col space-y-1.5 p-5",a),...e}));c.displayName="CardHeader";const m=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("text-lg font-semibold leading-none tracking-tight",a),...e}));m.displayName="CardTitle";const f=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("text-sm text-muted-foreground",a),...e}));f.displayName="CardDescription";const p=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("p-5 pt-0",a),...e}));p.displayName="CardContent";const x=s.forwardRef(({className:a,...e},r)=>t.jsx("div",{ref:r,className:d("flex items-center p-5 pt-0",a),...e}));x.displayName="CardFooter";export{l as C,p as a,c as b,m as c,f as d,x as e};
@@ -1,4 +1,4 @@
1
- import{c as J,r as i,p as K,j as n,q as U,v as y,y as N,z as X,P as x,x as m,w as C,D as Y,E as Z,G as Q,H as ee,I as te,J as oe,a2 as ae,a as p,X as ne}from"./index-iaYfODK6.js";/**
1
+ import{c as J,r as i,p as K,j as n,q as U,v as y,y as N,z as X,P as x,x as m,w as C,D as Y,E as Z,G as Q,H as ee,I as te,J as oe,a2 as ae,a as p,X as ne}from"./index-Bdp0nMlR.js";/**
2
2
  * @license lucide-react v0.344.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -0,0 +1 @@
1
+ *,: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,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 220 25% 97%;--foreground: 222 47% 11%;--card: 0 0% 100%;--card-foreground: 222 47% 11%;--popover: 0 0% 100%;--popover-foreground: 222 47% 11%;--primary: 239 84% 67%;--primary-foreground: 0 0% 100%;--secondary: 220 14% 96%;--secondary-foreground: 222 47% 11%;--muted: 220 14% 96%;--muted-foreground: 220 9% 46%;--accent: 239 84% 97%;--accent-foreground: 239 84% 50%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 100%;--border: 220 13% 91%;--input: 220 13% 91%;--ring: 239 84% 67%;--radius: .625rem;--chart-1: 239 84% 67%;--chart-2: 142 71% 45%;--chart-3: 38 92% 50%;--chart-4: 280 67% 55%;--chart-5: 340 75% 55%;--success: 142 71% 45%;--success-foreground: 0 0% 100%;--warning: 38 92% 50%;--warning-foreground: 0 0% 100%;--info: 199 89% 48%;--info-foreground: 0 0% 100%;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .05);--shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1)}.dark,[data-theme=dark]{--background: 224 71% 4%;--foreground: 213 31% 91%;--card: 224 71% 7%;--card-foreground: 213 31% 91%;--popover: 224 71% 7%;--popover-foreground: 213 31% 91%;--primary: 239 84% 67%;--primary-foreground: 0 0% 100%;--secondary: 215 28% 17%;--secondary-foreground: 213 31% 91%;--muted: 215 28% 17%;--muted-foreground: 215 20% 65%;--accent: 239 40% 20%;--accent-foreground: 239 84% 75%;--destructive: 0 63% 31%;--destructive-foreground: 0 0% 100%;--border: 215 28% 17%;--input: 215 28% 17%;--ring: 239 84% 67%;--chart-1: 239 84% 67%;--chart-2: 142 71% 50%;--chart-3: 38 92% 55%;--chart-4: 280 67% 60%;--chart-5: 340 75% 60%;--success: 142 71% 50%;--success-foreground: 0 0% 100%;--warning: 38 92% 55%;--warning-foreground: 0 0% 100%;--info: 199 89% 55%;--info-foreground: 0 0% 100%;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .3);--shadow: 0 1px 3px 0 rgb(0 0 0 / .4), 0 1px 2px -1px rgb(0 0 0 / .3);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .4), 0 2px 4px -2px rgb(0 0 0 / .3);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .4), 0 4px 6px -4px rgb(0 0 0 / .3)}*{border-color:hsl(var(--border))}html,body,#root{height:100%;width:100%;overflow-x:hidden;max-width:100vw}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-feature-settings:"rlig" 1,"calt" 1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}@media (min-width: 1400px){.container{max-width:1400px}}.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}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{top:0;bottom:0}.-right-1{right:-.25rem}.-right-2{right:-.5rem}.-top-1{top:-.25rem}.-top-2{top:-.5rem}.left-0{left:0}.left-2{left:.5rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-2{right:.5rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-1\/2{top:50%}.top-2{top:.5rem}.top-20{top:5rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[50\%\]{top:50%}.top-full{top:100%}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.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-\[1px\]{height:1px}.h-\[280px\]{height:280px}.h-\[320px\]{height:320px}.h-\[40vh\]{height:40vh}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.max-h-40{max-height:10rem}.max-h-56{max-height:14rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[420px\]{max-height:420px}.max-h-\[85vh\]{max-height:85vh}.max-h-screen{max-height:100vh}.min-h-0{min-height:0px}.min-h-\[120px\]{min-height:120px}.min-h-\[200px\]{min-height:200px}.min-h-\[220px\]{min-height:220px}.min-h-\[280px\]{min-height:280px}.min-h-\[320px\]{min-height:320px}.min-h-\[80px\]{min-height:80px}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-1\/2{width:50%}.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-3\/4{width:75%}.w-32{width:8rem}.w-4{width:1rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[140px\]{width:140px}.w-\[180px\]{width:180px}.w-\[1px\]{width:1px}.w-\[80px\]{width:80px}.w-\[var\(--radix-popover-trigger-width\)\]{width:var(--radix-popover-trigger-width)}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-\[1200px\]{min-width:1200px}.min-w-\[200px\]{min-width:200px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-7xl{max-width:80rem}.max-w-\[100px\]{max-width:100px}.max-w-\[120px\]{max-width:120px}.max-w-\[90px\]{max-width:90px}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.-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))}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[minmax\(0\,1fr\)_auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr) auto}.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}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-3{row-gap:.75rem}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.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))}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.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-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-r-full{border-top-right-radius:9999px;border-bottom-right-radius:9999px}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-cyan-200{--tw-border-opacity: 1;border-color:rgb(165 243 252 / var(--tw-border-opacity, 1))}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-emerald-300{--tw-border-opacity: 1;border-color:rgb(110 231 183 / var(--tw-border-opacity, 1))}.border-emerald-500\/50{border-color:#10b98180}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-input{border-color:hsl(var(--input))}.border-pink-200{--tw-border-opacity: 1;border-color:rgb(251 207 232 / var(--tw-border-opacity, 1))}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-violet-200{--tw-border-opacity: 1;border-color:rgb(221 214 254 / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-100\/80{background-color:#fef3c7cc}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/15{background-color:#f59e0b26}.bg-background{background-color:hsl(var(--background))}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-black\/80{background-color:#000c}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-50\/50{background-color:#eff6ff80}.bg-blue-500\/15{background-color:#3b82f626}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-cyan-500\/15{background-color:#06b6d426}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.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\/15{background-color:#10b98126}.bg-emerald-500\/5{background-color:#10b9810d}.bg-green-50\/50{background-color:#f0fdf480}.bg-muted{background-color:hsl(var(--muted))}.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-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-rose-500\/15{background-color:#f43f5e26}.bg-secondary{background-color:hsl(var(--secondary))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-slate-900\/60{background-color:#0f172a99}.bg-transparent{background-color:transparent}.bg-violet-500\/15{background-color:#8b5cf626}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-amber-50{--tw-gradient-from: #fffbeb var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 251 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-amber-500\/10{--tw-gradient-from: rgb(245 158 11 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-500\/10{--tw-gradient-from: rgb(59 130 246 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-50{--tw-gradient-from: #ecfeff var(--tw-gradient-from-position);--tw-gradient-to: rgb(236 254 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-cyan-500\/10{--tw-gradient-from: rgb(6 182 212 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-50{--tw-gradient-from: #ecfdf5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(236 253 245 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-emerald-500\/10{--tw-gradient-from: rgb(16 185 129 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-pink-50{--tw-gradient-from: #fdf2f8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(253 242 248 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-primary{--tw-gradient-from: hsl(var(--primary)) var(--tw-gradient-from-position);--tw-gradient-to: hsl(var(--primary) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-red-50{--tw-gradient-from: #fef2f2 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 242 242 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-rose-500\/10{--tw-gradient-from: rgb(244 63 94 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(244 63 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-50{--tw-gradient-from: #f5f3ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 243 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-violet-500\/10{--tw-gradient-from: rgb(139 92 246 / .1) var(--tw-gradient-from-position);--tw-gradient-to: rgb(139 92 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-amber-500\/5{--tw-gradient-to: rgb(245 158 11 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(245 158 11 / .05) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-blue-500\/5{--tw-gradient-to: rgb(59 130 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(59 130 246 / .05) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-cyan-500\/5{--tw-gradient-to: rgb(6 182 212 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(6 182 212 / .05) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-emerald-500\/5{--tw-gradient-to: rgb(16 185 129 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(16 185 129 / .05) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-rose-500\/5{--tw-gradient-to: rgb(244 63 94 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(244 63 94 / .05) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-violet-500\/5{--tw-gradient-to: rgb(139 92 246 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(139 92 246 / .05) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-amber-100{--tw-gradient-to: #fef3c7 var(--tw-gradient-to-position)}.to-cyan-100{--tw-gradient-to: #cffafe var(--tw-gradient-to-position)}.to-emerald-100{--tw-gradient-to: #d1fae5 var(--tw-gradient-to-position)}.to-pink-100{--tw-gradient-to: #fce7f3 var(--tw-gradient-to-position)}.to-primary\/80{--tw-gradient-to: hsl(var(--primary) / .8) var(--tw-gradient-to-position)}.to-red-100{--tw-gradient-to: #fee2e2 var(--tw-gradient-to-position)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.to-violet-100{--tw-gradient-to: #ede9fe var(--tw-gradient-to-position)}.to-yellow-50{--tw-gradient-to: #fefce8 var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.p-0{padding:0}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-12{padding:3rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.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-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-6{padding-left:1.5rem;padding-right:1.5rem}.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-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-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-8{padding-top:2rem;padding-bottom:2rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-8{padding-left:2rem}.pr-2{padding-right:.5rem}.pr-8{padding-right:2rem}.pt-0{padding-top:0}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[11px\]{font-size:11px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-cyan-600{--tw-text-opacity: 1;color:rgb(8 145 178 / var(--tw-text-opacity, 1))}.text-cyan-700{--tw-text-opacity: 1;color:rgb(14 116 144 / var(--tw-text-opacity, 1))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-emerald-800{--tw-text-opacity: 1;color:rgb(6 95 70 / var(--tw-text-opacity, 1))}.text-emerald-900{--tw-text-opacity: 1;color:rgb(6 78 59 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/50{color:hsl(var(--foreground) / .5)}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/50{color:hsl(var(--muted-foreground) / .5)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-pink-700{--tw-text-opacity: 1;color:rgb(190 24 93 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-red-900{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity, 1))}.text-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-violet-600{--tw-text-opacity: 1;color:rgb(124 58 237 / var(--tw-text-opacity, 1))}.text-violet-700{--tw-text-opacity: 1;color:rgb(109 40 217 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.line-through{text-decoration-line:line-through}.underline-offset-4{text-underline-offset:4px}.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-90{opacity:.9}.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)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.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)}.ring-2{--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)}.ring-ring{--tw-ring-color: hsl(var(--ring))}.ring-offset-2{--tw-ring-offset-width: 2px}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.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-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-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}.duration-300{transition-duration:.3s}@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,.fade-in-0{--tw-enter-opacity: 0}.zoom-in-95{--tw-enter-scale: .95}.slide-in-from-bottom-4{--tw-enter-translate-y: 1rem}.slide-in-from-left{--tw-enter-translate-x: -100%}.slide-in-from-right{--tw-enter-translate-x: 100%}.slide-in-from-top-2{--tw-enter-translate-y: -.5rem}.duration-150{animation-duration:.15s}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.running{animation-play-state:running}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background-color:transparent}::-webkit-scrollbar-thumb{border-radius:9999px;background-color:hsl(var(--muted-foreground) / .2)}::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--muted-foreground) / .4)}*:focus-visible{outline:2px solid transparent;outline-offset:2px;--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);--tw-ring-color: hsl(var(--ring));--tw-ring-offset-width: 2px;--tw-ring-offset-color: hsl(var(--background))}::-moz-selection{background-color:hsl(var(--primary) / .2);color:hsl(var(--foreground))}::selection{background-color:hsl(var(--primary) / .2);color:hsl(var(--foreground))}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}@keyframes slideIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-slide-in{animation:slideIn .3s ease-out}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:fadeIn .2s ease-out}@keyframes scaleIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.animate-scale-in{animation:scaleIn .2s ease-out}@keyframes pulse-subtle{0%,to{opacity:1}50%{opacity:.7}}.animate-pulse-subtle{animation:pulse-subtle 2s ease-in-out infinite}.table-container{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-container::-webkit-scrollbar{height:6px}.table-container::-webkit-scrollbar-track{background-color:transparent}.table-container::-webkit-scrollbar-thumb{border-radius:9999px;background-color:hsl(var(--muted-foreground) / .2)}.table-container::-webkit-scrollbar-thumb:hover{background-color:hsl(var(--muted-foreground) / .4)}@media (hover: none) and (pointer: coarse){button,a,[role=button]{min-height:44px}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.card-hover{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}.card-hover:hover{--tw-translate-y: -.125rem;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));--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)}.nav-active-indicator{position:absolute;left:0;top:50%;height:1.5rem;width:.25rem;--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));border-top-right-radius:9999px;border-bottom-right-radius:9999px;background-color:hsl(var(--primary))}html{transition:background-color .3s ease,color .3s ease}@keyframes toastIn{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes toastOut{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}.animate-toast-in{animation:toastIn .3s ease-out}.animate-toast-out{animation:toastOut .2s ease-in forwards}.table-scroll-hint{pointer-events:none;position:absolute;right:0;top:0;bottom:0;width:2rem;background:linear-gradient(to left,hsl(var(--background)),transparent)}.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}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.hover\:-translate-y-0\.5:hover{--tw-translate-y: -.125rem;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))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.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\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/15:hover{background-color:hsl(var(--primary) / .15)}.hover\:bg-primary\/5:hover{background-color:hsl(var(--primary) / .05)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-200:hover{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-50:hover{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.hover\:from-amber-100:hover{--tw-gradient-from: #fef3c7 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 243 199 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-cyan-100:hover{--tw-gradient-from: #cffafe var(--tw-gradient-from-position);--tw-gradient-to: rgb(207 250 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-emerald-100:hover{--tw-gradient-from: #d1fae5 var(--tw-gradient-from-position);--tw-gradient-to: rgb(209 250 229 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-pink-100:hover{--tw-gradient-from: #fce7f3 var(--tw-gradient-from-position);--tw-gradient-to: rgb(252 231 243 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-red-100:hover{--tw-gradient-from: #fee2e2 var(--tw-gradient-from-position);--tw-gradient-to: rgb(254 226 226 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:from-violet-100:hover{--tw-gradient-from: #ede9fe var(--tw-gradient-from-position);--tw-gradient-to: rgb(237 233 254 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.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-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-slate-900:hover{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-lg:hover{--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)}.hover\:shadow-md:hover{--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)}.focus\:not-sr-only:focus{position:static;width:auto;height:auto;padding:0;margin:0;overflow:visible;clip:auto;white-space:normal}.focus\:absolute:focus{position:absolute}.focus\:z-50:focus{z-index:50}.focus\:m-4:focus{margin:1rem}.focus\:rounded-md:focus{border-radius:calc(var(--radius) - 2px)}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-primary:focus{background-color:hsl(var(--primary))}.focus\:px-4:focus{padding-left:1rem;padding-right:1rem}.focus\:py-2:focus{padding-top:.5rem;padding-bottom:.5rem}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-primary-foreground:focus{color:hsl(var(--primary-foreground))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-blue-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1))}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-slate-100:disabled{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.disabled\:text-slate-400:disabled{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group:hover .group-hover\:text-foreground{color:hsl(var(--foreground))}.group:hover .group-hover\:opacity-100{opacity:1}.group.destructive .group-\[\.destructive\]\:border-muted\/40{border-color:hsl(var(--muted) / .4)}.group.destructive .group-\[\.destructive\]\:text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:hover\:border-destructive\/30:hover{border-color:hsl(var(--destructive) / .3)}.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive:hover{background-color:hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover{color:hsl(var(--destructive-foreground))}.group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover{--tw-text-opacity: 1;color:rgb(254 242 242 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus{--tw-ring-color: hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus{--tw-ring-offset-color: #dc2626}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.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],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--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-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x: var(--radix-toast-swipe-end-x);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-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x: var(--radix-toast-swipe-move-x);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\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.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\=selected\]\:bg-primary\/10[data-state=selected]{background-color:hsl(var(--primary) / .1)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.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],.data-\[swipe\=end\]\:animate-out[data-swipe=end]{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\=closed\]\:fade-out-80[data-state=closed]{--tw-exit-opacity: .8}.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-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-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-top-full[data-state=open]{--tw-enter-translate-y: -100%}.dark\:border-amber-600\/60:is([data-theme=dark] *){border-color:#d9770699}.dark\:border-amber-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.dark\:border-amber-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(146 64 14 / var(--tw-border-opacity, 1))}.dark\:border-blue-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.dark\:border-cyan-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(21 94 117 / var(--tw-border-opacity, 1))}.dark\:border-emerald-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(4 120 87 / var(--tw-border-opacity, 1))}.dark\:border-emerald-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(6 95 70 / var(--tw-border-opacity, 1))}.dark\:border-green-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(22 101 52 / var(--tw-border-opacity, 1))}.dark\:border-pink-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(157 23 77 / var(--tw-border-opacity, 1))}.dark\:border-primary\/30:is([data-theme=dark] *){border-color:hsl(var(--primary) / .3)}.dark\:border-red-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(185 28 28 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:border-slate-600:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.dark\:border-slate-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.dark\:border-slate-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.dark\:border-violet-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(91 33 182 / var(--tw-border-opacity, 1))}.dark\:bg-amber-800\/40:is([data-theme=dark] *){background-color:#92400e66}.dark\:bg-amber-900:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(120 53 15 / var(--tw-bg-opacity, 1))}.dark\:bg-amber-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(69 26 3 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(23 37 84 / var(--tw-bg-opacity, 1))}.dark\:bg-blue-950\/50:is([data-theme=dark] *){background-color:#17255480}.dark\:bg-emerald-500\/10:is([data-theme=dark] *){background-color:#10b9811a}.dark\:bg-emerald-900\/40:is([data-theme=dark] *){background-color:#064e3b66}.dark\:bg-emerald-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(2 44 34 / var(--tw-bg-opacity, 1))}.dark\:bg-green-950\/50:is([data-theme=dark] *){background-color:#052e1680}.dark\:bg-primary\/20:is([data-theme=dark] *){background-color:hsl(var(--primary) / .2)}.dark\:bg-red-900\/40:is([data-theme=dark] *){background-color:#7f1d1d66}.dark\:bg-red-950:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(69 10 10 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-800:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-800\/40:is([data-theme=dark] *){background-color:#1e293b66}.dark\:bg-slate-900:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:from-amber-900\/20:is([data-theme=dark] *){--tw-gradient-from: rgb(120 53 15 / .2) var(--tw-gradient-from-position);--tw-gradient-to: rgb(120 53 15 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-amber-950:is([data-theme=dark] *){--tw-gradient-from: #451a03 var(--tw-gradient-from-position);--tw-gradient-to: rgb(69 26 3 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-cyan-950:is([data-theme=dark] *){--tw-gradient-from: #083344 var(--tw-gradient-from-position);--tw-gradient-to: rgb(8 51 68 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-emerald-950:is([data-theme=dark] *){--tw-gradient-from: #022c22 var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 44 34 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-pink-950:is([data-theme=dark] *){--tw-gradient-from: #500724 var(--tw-gradient-from-position);--tw-gradient-to: rgb(80 7 36 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-red-950:is([data-theme=dark] *){--tw-gradient-from: #450a0a var(--tw-gradient-from-position);--tw-gradient-to: rgb(69 10 10 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-violet-950:is([data-theme=dark] *){--tw-gradient-from: #2e1065 var(--tw-gradient-from-position);--tw-gradient-to: rgb(46 16 101 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:to-amber-900:is([data-theme=dark] *){--tw-gradient-to: #78350f var(--tw-gradient-to-position)}.dark\:to-cyan-900:is([data-theme=dark] *){--tw-gradient-to: #164e63 var(--tw-gradient-to-position)}.dark\:to-emerald-900:is([data-theme=dark] *){--tw-gradient-to: #064e3b var(--tw-gradient-to-position)}.dark\:to-pink-900:is([data-theme=dark] *){--tw-gradient-to: #831843 var(--tw-gradient-to-position)}.dark\:to-red-900:is([data-theme=dark] *){--tw-gradient-to: #7f1d1d var(--tw-gradient-to-position)}.dark\:to-violet-900:is([data-theme=dark] *){--tw-gradient-to: #4c1d95 var(--tw-gradient-to-position)}.dark\:to-yellow-900\/20:is([data-theme=dark] *){--tw-gradient-to: rgb(113 63 18 / .2) var(--tw-gradient-to-position)}.dark\:text-amber-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity, 1))}.dark\:text-amber-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-amber-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-blue-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-blue-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.dark\:text-cyan-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.dark\:text-cyan-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.dark\:text-emerald-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(209 250 229 / var(--tw-text-opacity, 1))}.dark\:text-emerald-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-green-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(187 247 208 / var(--tw-text-opacity, 1))}.dark\:text-green-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-pink-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(249 168 212 / var(--tw-text-opacity, 1))}.dark\:text-primary-foreground:is([data-theme=dark] *){color:hsl(var(--primary-foreground))}.dark\:text-red-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-rose-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.dark\:text-slate-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.dark\:text-slate-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.dark\:text-slate-50:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.dark\:text-violet-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.dark\:text-violet-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(167 139 250 / var(--tw-text-opacity, 1))}.dark\:hover\:bg-slate-800:hover:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.dark\:hover\:text-slate-100:hover:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.dark\:focus\:border-blue-400:focus:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.dark\:focus\:ring-blue-400\/40:focus:is([data-theme=dark] *){--tw-ring-color: rgb(96 165 250 / .4)}.dark\:disabled\:bg-slate-800\/60:disabled:is([data-theme=dark] *){background-color:#1e293b99}@media (min-width: 640px){.sm\:bottom-0{bottom:0}.sm\:right-0{right:0}.sm\:top-auto{top:auto}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:inline{display:inline}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:flex-col{flex-direction:column}.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\:rounded-lg{border-radius:var(--radius)}.sm\:text-left{text-align:left}.data-\[state\=open\]\:sm\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y: 100%}}@media (min-width: 768px){.md\:col-span-2{grid-column:span 2 / span 2}.md\:w-48{width:12rem}.md\:max-w-\[420px\]{max-width:420px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 1024px){.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.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-\[minmax\(0\,1fr\)_minmax\(0\,0\.85fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,.85fr)}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:py-8{padding-top:2rem;padding-bottom:2rem}}@media (min-width: 1280px){.xl\:block{display:block}.xl\:flex{display:flex}.xl\:hidden{display:none}.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-\[200px_1fr\]{grid-template-columns:200px 1fr}}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}.\[\&_tr\]\:border-border\/60 tr{border-color:hsl(var(--border) / .6)}
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Dashboard-BV9q_ZEH.js","assets/index-Bkl9YQUf.js","assets/Skeleton-DKmc2Oau.js","assets/PageHeader-DE87PlB_.js","assets/PageSection-BW4UtaTE.js","assets/card-B5QaMdIj.js","assets/useApiQuery-LZxVJXA3.js","assets/select-DfAJfUCL.js","assets/Logs-EvCIbsmH.js","assets/clipboard-CALi6bTW.js","assets/input-CRfONI49.js","assets/label-sf3QNge5.js","assets/refresh-cw-ZDTq8wum.js","assets/Events-CVDX7Sdl.js","assets/ModelManagement-Bb8NWZJD.js","assets/switch-DTxmu4vA.js","assets/dialog-Bl93c96O.js","assets/ApiKeys-9iuHXiuE.js","assets/shield-wbL9EF4o.js","assets/Settings-hk35KMN5.js","assets/About-BA_VxEEw.js","assets/info-Dtepvi_0.js","assets/Help-Q8aahW1e.js","assets/Login-Cc9PcXNz.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Dashboard-B61eM9AQ.js","assets/index-Cu1IXjrr.js","assets/Skeleton-BRSmcxNh.js","assets/PageHeader-D2Zq1K4t.js","assets/PageSection-wWtyIp2D.js","assets/card-Dl49soGw.js","assets/useApiQuery-CL9_n4sn.js","assets/select-Cfzsn-JK.js","assets/Logs-Cy6rL2PL.js","assets/clipboard-CALi6bTW.js","assets/input-B6w5gzdL.js","assets/label-CuU6RIsU.js","assets/refresh-cw-Duv0QKyb.js","assets/Events-DXUNZen5.js","assets/ModelManagement-D2ZQEDua.js","assets/switch-DoT-Ur3p.js","assets/dialog-CW6Z62O9.js","assets/ApiKeys-jnqKcfat.js","assets/shield--mDWO-No.js","assets/Settings-Bz_Hag2N.js","assets/About-CE2fqYju.js","assets/info-Yuz8DmBH.js","assets/Help-DTQVUeCR.js","assets/Login-BcTP1zb_.js"])))=>i.map(i=>d[i]);
2
2
  var z0=Object.defineProperty;var sf=e=>{throw TypeError(e)};var $0=(e,t,n)=>t in e?z0(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var af=(e,t,n)=>$0(e,typeof t!="symbol"?t+"":t,n),Sl=(e,t,n)=>t.has(e)||sf("Cannot "+n);var A=(e,t,n)=>(Sl(e,t,"read from private field"),n?n.call(e):t.get(e)),Z=(e,t,n)=>t.has(e)?sf("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),B=(e,t,n,r)=>(Sl(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),Ie=(e,t,n)=>(Sl(e,t,"access private method"),n);var ei=(e,t,n,r)=>({set _(o){B(e,t,o,n)},get _(){return A(e,t,r)}});function B0(e,t){for(var n=0;n<t.length;n++){const r=t[n];if(typeof r!="string"&&!Array.isArray(r)){for(const o in r)if(o!=="default"&&!(o in e)){const s=Object.getOwnPropertyDescriptor(r,o);s&&Object.defineProperty(e,o,s.get?s:{enumerable:!0,get:()=>r[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const i of s.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function r(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();function nm(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var rm={exports:{}},_a={},om={exports:{}},X={};/**
3
3
  * @license React
4
4
  * react.production.min.js
@@ -277,4 +277,4 @@ env_key = "cc_gw_key"
277
277
  "protocol": "anthropic"
278
278
  }
279
279
  \`\`\`
280
- After configuration, clients access via \`http://127.0.0.1:4100/claude/v1/messages\` (path auto-expansion).`,'Enable "Store request/response bodies" to copy raw payloads from the log drawer when troubleshooting.',"Turn off request or response logs individually to keep the console quiet while preserving metrics and database records.","Use **routing presets** to save common routing configurations and quickly switch between different provider setups.","If you edit ~/.cc-gw/config.json manually, refresh the Settings page or restart cc-gw so the UI reflects the latest configuration."]}},faq:{title:"Frequently asked questions",items:[{q:"How can I change the default model for each endpoint?",a:'Go to "Model Management → Routing" and choose defaults for /anthropic and /openai. Saving applies the change right away.'},{q:"How do I use custom endpoints?",a:'Create a custom endpoint in the "Model Management" page by configuring a base path (e.g., `/my-endpoint`) and protocol type. The system automatically registers full API paths based on the protocol. For example, after configuring `/claude` + `anthropic` protocol, clients access via `http://127.0.0.1:4100/claude/v1/messages`.\n\nIf you encounter 404 errors, check:\n1) Is the endpoint enabled?\n2) Are clients using the complete path (including protocol subpath)?\n3) Check server logs to confirm route registration'},{q:"Why are cached token numbers missing?",a:"Upstream providers must return cached_tokens or input_tokens_details.cached_tokens. Enable cache metrics on the provider if supported."},{q:"How can I use different models for different clients?",a:'Create separate API keys for each client and configure different routing rules in "Model Management → Routing". You can also create dedicated custom endpoints for different clients.'}]}},apiKeys:{title:"API Keys Management",description:"Create and manage API keys for gateway access",createNew:"Create New Key",createAction:"Create",createDescription:"Create a new API key for authentication and optionally add a description.",descriptionLabel:"Key description (optional)",keyDescriptionPlaceholder:"e.g. Internal staging access only",keyNamePlaceholder:"Enter key name",keyCreated:"API Key Created",saveKeyWarning:"Keep this key secure. You can also reveal the full key anytime from the key list.",wildcard:"Any Key",wildcardHint:"When enabled, any custom key — including an empty key — is accepted. Disable this key to enforce strict authentication.",status:{enabled:"Enabled",disabled:"Disabled"},actions:{enable:"Enable",disable:"Disable",delete:"Delete",reveal:"Reveal key",hide:"Hide key"},created:"Created",lastUsed:"Last Used",requestCount:"Requests",totalTokens:"Total Tokens",confirmDelete:"Are you sure you want to delete this API key? This action cannot be undone.",errors:{nameRequired:"Key name is required"},analytics:{title:"Key Usage Analytics",description:"Highlights for the past {{days}} days of API key activity",range:{today:"Today",week:"Last 7 days",month:"Last 30 days"},cards:{total:"Total keys",enabled:"Enabled keys",active:"Active keys ({{days}} days)"},charts:{requests:"Top 10 keys by request count",tokens:"Top 10 keys by token usage"},tokens:{input:"Input tokens",output:"Output tokens"},requestsSeries:"Requests",empty:"No activity for the selected range.",unknownKey:"Unknown key"},list:{title:"Key Inventory",empty:"No API keys found. Use the button above to create one."},toast:{keyCreated:"API key created successfully",keyUpdated:"API key updated successfully",keyDeleted:"API key deleted successfully",keyCopied:"Key copied to clipboard",createFailure:"Failed to create: {{message}}",updateFailure:"Failed to update: {{message}}",deleteFailure:"Failed to delete: {{message}}",revealFailure:"Failed to reveal key",copyFailure:"Failed to copy"},allowedEndpoints:"Allowed Endpoints",allEndpoints:"All endpoints (unrestricted)",editEndpoints:"Edit Endpoint Access",endpointRestricted:"Restricted",selectEndpoints:"Select which endpoints this key can access. Leave empty to allow all."},about:{title:"About",description:"Review cc-gw version details, build metadata, and current runtime status.",app:{title:"Application",subtitle:"Gateway build metadata at a glance.",labels:{name:"Name",version:"Version",buildTime:"Build time",node:"Node version"},hint:{buildTime:"Timestamps are recorded in UTC so you can trace deployments easily."}},status:{title:"Runtime status",subtitle:"Live metrics reported by the running gateway.",loading:"Fetching status...",empty:"Unable to retrieve status information.",labels:{host:"Listen host",port:"Listen port",providers:"Providers configured",active:"Active requests"},hint:{active:"Active request totals refresh roughly every minute."}},support:{title:"Operational notes",subtitle:"Maintenance guidance",description:"Manage providers, routing, and logs in the Web UI; advanced settings live in ~/.cc-gw/config.json.",tip:"Consider keeping ~/.cc-gw/config.json under version control or managing it via automation scripts.",actions:{checkUpdates:"Check for updates"}},toast:{statusError:{title:"Failed to load status"},updatesPlanned:"Update checks will arrive in a future release."}},endpoints:{title:"Custom Endpoints",description:"Manage custom API endpoints with multiple protocol support.",createButton:"Add Endpoint",createTitle:"Create Endpoint",editTitle:"Edit Endpoint",emptyTitle:"No custom endpoints",emptyDescription:'Click "Add Endpoint" to create your first custom endpoint.',loadError:"Failed to load endpoints",id:"ID",path:"Path",disabled:"Disabled",hasRouting:"Routing configured",protocols:{anthropic:"Anthropic Protocol","openai-chat":"OpenAI Chat","openai-responses":"OpenAI Responses"},protocolHints:{anthropic:"Anthropic Messages API protocol (/v1/messages)","openai-chat":"OpenAI Chat Completions API protocol (/v1/chat/completions)","openai-responses":"OpenAI Responses API protocol (/v1/responses)"},form:{id:"Endpoint ID",idPlaceholder:"e.g. custom-api",idHint:"ID cannot be changed after creation, used for internal identification.",label:"Display Name",labelPlaceholder:"e.g. My Custom API",path:"Access Path",pathPlaceholder:"e.g. /custom/api",pathHint:"Path must start with /. Changes take effect immediately.",protocol:"Protocol Type",enabled:"Enable this endpoint"},routing:{title:"Routing Configuration (Optional)",modelRoutes:"Model Routing Rules",addRoute:"Add Rule",noRoutes:"No routing rules",sourceModelPlaceholder:"Source model (e.g. claude-3-5-sonnet-20241022)",targetPlaceholder:"Target (e.g. anthropic:claude-3-5-sonnet-20241022)",modelRoutesHint:"Format: source model → provider:model, wildcards supported (e.g. gpt-* → openai:*)",defaults:"Default Model Configuration",defaultCompletion:"Default for completion tasks",defaultReasoning:"Default for reasoning tasks",defaultBackground:"Default for background tasks",longContextThreshold:"Long context threshold (tokens)",defaultPlaceholder:"e.g. anthropic:claude-3-5-sonnet-20241022"},createSuccess:"Endpoint created successfully",createError:"Failed to create: {{error}}",updateSuccess:"Endpoint updated successfully",updateError:"Failed to update: {{error}}",deleteSuccess:"Endpoint deleted successfully",deleteError:"Failed to delete: {{error}}",deleteConfirm:'Are you sure you want to delete endpoint "{{label}}"? This action cannot be undone.',validationError:"Please fill in all required fields"}}}};ke.isInitialized||ke.use(_C).init({resources:g2,lng:"zh",fallbackLng:"en",interpolation:{escapeValue:!1}});const I0=p.createContext(void 0);function y2(){return`toast_${Math.random().toString(36).slice(2)}`}function v2({children:e}){const[t,n]=p.useState([]),r=p.useCallback(a=>{n(l=>l.filter(u=>u.id!==a))},[]),o=p.useCallback(a=>{n(l=>l.map(u=>u.id===a?{...u,dismissing:!0}:u)),setTimeout(()=>r(a),200)},[r]),s=p.useCallback(a=>{const l=a.id??y2();n(c=>[...c,{...a,id:l}]);const u=a.durationMs??3e3;u>0&&setTimeout(()=>o(l),u)},[o]),i=p.useMemo(()=>({toasts:t,pushToast:s,dismissToast:o}),[t,o,s]);return C.jsxs(I0.Provider,{value:i,children:[e,C.jsx("div",{"aria-live":"polite","aria-atomic":"false",className:"fixed right-6 top-6 z-50 flex w-80 flex-col gap-3",children:t.map(a=>C.jsx("div",{role:"alert",className:`rounded-md border border-slate-200 bg-white p-4 shadow-lg dark:border-slate-700 dark:bg-slate-800 ${a.dismissing?"animate-toast-out":"animate-toast-in"} ${a.variant==="error"?"border-red-200 bg-red-50 text-red-900 dark:border-red-700 dark:bg-red-900/40 dark:text-red-200":a.variant==="success"?"border-emerald-200 bg-emerald-50 text-emerald-900 dark:border-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-200":""}`,children:C.jsxs("div",{className:"flex items-start justify-between gap-4",children:[C.jsxs("div",{children:[C.jsx("p",{className:"text-sm font-semibold",children:a.title}),a.description?C.jsx("p",{className:"mt-1 text-sm opacity-75",children:a.description}):null]}),C.jsx("button",{type:"button","aria-label":"Dismiss",className:"text-sm text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-slate-100",onClick:()=>a.id&&o(a.id),children:"×"})]})},a.id))})]})}function oN(){const e=p.useContext(I0);if(!e)throw new Error("useToast must be used within ToastProvider");return e}function w2({children:e}){const[t]=p.useState(()=>new KO);return C.jsx(WO,{client:t,children:C.jsx(UC,{i18n:ke,children:C.jsx(rb,{children:C.jsx(v2,{children:C.jsx(yO,{children:e})})})})})}function M0(){const{t:e}=Er();return C.jsx("div",{className:"flex h-full items-center justify-center p-12",role:"status","aria-live":"polite",children:C.jsxs("div",{className:"flex flex-col items-center gap-4",children:[C.jsx("div",{className:"h-12 w-12 animate-spin rounded-full border-4 border-primary border-t-transparent"}),C.jsx("p",{className:"text-sm text-slate-500 dark:text-slate-400",children:e("common.loading")})]})})}function sN(){const{t:e}=Er();return C.jsxs("div",{className:"flex items-center gap-3 text-sm text-slate-500 dark:text-slate-400",children:[C.jsx("div",{className:"h-4 w-4 animate-spin rounded-full border-2 border-slate-300 border-t-transparent dark:border-slate-600"}),C.jsx("span",{children:e("common.loading")})]})}const x2=p.lazy(()=>fn(()=>import("./Dashboard-BV9q_ZEH.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]))),S2=p.lazy(()=>fn(()=>import("./Logs-EvCIbsmH.js"),__vite__mapDeps([8,6,2,3,9,10,11,5,7,12]))),C2=p.lazy(()=>fn(()=>import("./Events-CVDX7Sdl.js"),__vite__mapDeps([13,3,10,5,7,12]))),Wh=p.lazy(()=>fn(()=>import("./ModelManagement-Bb8NWZJD.js"),__vite__mapDeps([14,6,3,10,11,5,15,7,16,12]))),b2=p.lazy(()=>fn(()=>import("./ApiKeys-9iuHXiuE.js"),__vite__mapDeps([17,1,6,3,4,5,9,10,11,16,18]))),E2=p.lazy(()=>fn(()=>import("./Settings-hk35KMN5.js"),__vite__mapDeps([19,6,3,9,10,11,5,15,7,18]))),k2=p.lazy(()=>fn(()=>import("./About-BA_VxEEw.js"),__vite__mapDeps([20,6,3,4,5,21,12]))),P2=p.lazy(()=>fn(()=>import("./Help-Q8aahW1e.js"),__vite__mapDeps([22,3,4,5,9,21]))),R2=p.lazy(()=>fn(()=>import("./Login-Cc9PcXNz.js"),__vite__mapDeps([23,10,11,5])));function T2({children:e}){const{authEnabled:t,isAuthenticated:n,loading:r}=C0(),o=Yn();return r?C.jsx(M0,{}):!t||n?e:C.jsx(Py,{to:"/login",replace:!0,state:{from:o}})}function A2(){return C.jsx(w2,{children:C.jsx(gC,{basename:typeof window<"u"&&window.location.pathname.startsWith("/ui")?"/ui":"/",children:C.jsx(p.Suspense,{fallback:C.jsx(M0,{}),children:C.jsxs(lC,{children:[C.jsxs(tt,{path:"/",element:C.jsx(T2,{children:C.jsx(wO,{})}),children:[C.jsx(tt,{index:!0,element:C.jsx(x2,{})}),C.jsx(tt,{path:"logs",element:C.jsx(S2,{})}),C.jsx(tt,{path:"events",element:C.jsx(C2,{})}),C.jsx(tt,{path:"models",element:C.jsx(Wh,{})}),C.jsx(tt,{path:"providers",element:C.jsx(Wh,{})}),C.jsx(tt,{path:"api-keys",element:C.jsx(b2,{})}),C.jsx(tt,{path:"settings",element:C.jsx(E2,{})}),C.jsx(tt,{path:"about",element:C.jsx(k2,{})}),C.jsx(tt,{path:"help",element:C.jsx(P2,{})})]}),C.jsx(tt,{path:"/login",element:C.jsx(R2,{})}),C.jsx(tt,{path:"*",element:C.jsx(Py,{to:"/",replace:!0})})]})})})})}const _0=document.getElementById("root");if(!_0)throw new Error("Root element #root not found");pu.createRoot(_0).render(C.jsx(Yt.StrictMode,{children:C.jsx(A2,{})}));export{nm as $,Rv as A,HC as B,KC as C,yP as D,Vv as E,GC as F,Sa as G,bE as H,rv as I,Ld as J,Tv as K,sN as L,Av as M,XC as N,J2 as O,Ne as P,$T as Q,Pv as R,vl as S,zT as T,BT as U,Yw as V,M0 as W,Tp as X,QC as Y,VC as Z,L2 as _,et as a,zt as a0,Yt as a1,N2 as a2,tb as a3,Kk as a4,ev as a5,Zy as a6,Vn as a7,yT as a8,ln as a9,JC as aa,IO as ab,PO as ac,Ac as ad,wl as ae,EO as af,kO as ag,Tc as ah,P0 as ai,UO as aj,AO as ak,tN as al,hb as am,Cy as an,Yn as ao,C0 as ap,oN as b,Oe as c,kt as d,eo as e,Ja as f,Z2 as g,Ls as h,BO as i,C as j,rN as k,xt as l,nN as m,Be as n,il as o,Nd as p,Oo as q,p as r,eN as s,cu as t,Er as u,Ca as v,Ue as w,G as x,kr as y,$d as z};
280
+ After configuration, clients access via \`http://127.0.0.1:4100/claude/v1/messages\` (path auto-expansion).`,'Enable "Store request/response bodies" to copy raw payloads from the log drawer when troubleshooting.',"Turn off request or response logs individually to keep the console quiet while preserving metrics and database records.","Use **routing presets** to save common routing configurations and quickly switch between different provider setups.","If you edit ~/.cc-gw/config.json manually, refresh the Settings page or restart cc-gw so the UI reflects the latest configuration."]}},faq:{title:"Frequently asked questions",items:[{q:"How can I change the default model for each endpoint?",a:'Go to "Model Management → Routing" and choose defaults for /anthropic and /openai. Saving applies the change right away.'},{q:"How do I use custom endpoints?",a:'Create a custom endpoint in the "Model Management" page by configuring a base path (e.g., `/my-endpoint`) and protocol type. The system automatically registers full API paths based on the protocol. For example, after configuring `/claude` + `anthropic` protocol, clients access via `http://127.0.0.1:4100/claude/v1/messages`.\n\nIf you encounter 404 errors, check:\n1) Is the endpoint enabled?\n2) Are clients using the complete path (including protocol subpath)?\n3) Check server logs to confirm route registration'},{q:"Why are cached token numbers missing?",a:"Upstream providers must return cached_tokens or input_tokens_details.cached_tokens. Enable cache metrics on the provider if supported."},{q:"How can I use different models for different clients?",a:'Create separate API keys for each client and configure different routing rules in "Model Management → Routing". You can also create dedicated custom endpoints for different clients.'}]}},apiKeys:{title:"API Keys Management",description:"Create and manage API keys for gateway access",createNew:"Create New Key",createAction:"Create",createDescription:"Create a new API key for authentication and optionally add a description.",descriptionLabel:"Key description (optional)",keyDescriptionPlaceholder:"e.g. Internal staging access only",keyNamePlaceholder:"Enter key name",keyCreated:"API Key Created",saveKeyWarning:"Keep this key secure. You can also reveal the full key anytime from the key list.",wildcard:"Any Key",wildcardHint:"When enabled, any custom key — including an empty key — is accepted. Disable this key to enforce strict authentication.",status:{enabled:"Enabled",disabled:"Disabled"},actions:{enable:"Enable",disable:"Disable",delete:"Delete",reveal:"Reveal key",hide:"Hide key"},created:"Created",lastUsed:"Last Used",requestCount:"Requests",totalTokens:"Total Tokens",confirmDelete:"Are you sure you want to delete this API key? This action cannot be undone.",errors:{nameRequired:"Key name is required"},analytics:{title:"Key Usage Analytics",description:"Highlights for the past {{days}} days of API key activity",range:{today:"Today",week:"Last 7 days",month:"Last 30 days"},cards:{total:"Total keys",enabled:"Enabled keys",active:"Active keys ({{days}} days)"},charts:{requests:"Top 10 keys by request count",tokens:"Top 10 keys by token usage"},tokens:{input:"Input tokens",output:"Output tokens"},requestsSeries:"Requests",empty:"No activity for the selected range.",unknownKey:"Unknown key"},list:{title:"Key Inventory",empty:"No API keys found. Use the button above to create one."},toast:{keyCreated:"API key created successfully",keyUpdated:"API key updated successfully",keyDeleted:"API key deleted successfully",keyCopied:"Key copied to clipboard",createFailure:"Failed to create: {{message}}",updateFailure:"Failed to update: {{message}}",deleteFailure:"Failed to delete: {{message}}",revealFailure:"Failed to reveal key",copyFailure:"Failed to copy"},allowedEndpoints:"Allowed Endpoints",allEndpoints:"All endpoints (unrestricted)",editEndpoints:"Edit Endpoint Access",endpointRestricted:"Restricted",selectEndpoints:"Select which endpoints this key can access. Leave empty to allow all."},about:{title:"About",description:"Review cc-gw version details, build metadata, and current runtime status.",app:{title:"Application",subtitle:"Gateway build metadata at a glance.",labels:{name:"Name",version:"Version",buildTime:"Build time",node:"Node version"},hint:{buildTime:"Timestamps are recorded in UTC so you can trace deployments easily."}},status:{title:"Runtime status",subtitle:"Live metrics reported by the running gateway.",loading:"Fetching status...",empty:"Unable to retrieve status information.",labels:{host:"Listen host",port:"Listen port",providers:"Providers configured",active:"Active requests"},hint:{active:"Active request totals refresh roughly every minute."}},support:{title:"Operational notes",subtitle:"Maintenance guidance",description:"Manage providers, routing, and logs in the Web UI; advanced settings live in ~/.cc-gw/config.json.",tip:"Consider keeping ~/.cc-gw/config.json under version control or managing it via automation scripts.",actions:{checkUpdates:"Check for updates"}},toast:{statusError:{title:"Failed to load status"},updatesPlanned:"Update checks will arrive in a future release."}},endpoints:{title:"Custom Endpoints",description:"Manage custom API endpoints with multiple protocol support.",createButton:"Add Endpoint",createTitle:"Create Endpoint",editTitle:"Edit Endpoint",emptyTitle:"No custom endpoints",emptyDescription:'Click "Add Endpoint" to create your first custom endpoint.',loadError:"Failed to load endpoints",id:"ID",path:"Path",disabled:"Disabled",hasRouting:"Routing configured",protocols:{anthropic:"Anthropic Protocol","openai-chat":"OpenAI Chat","openai-responses":"OpenAI Responses"},protocolHints:{anthropic:"Anthropic Messages API protocol (/v1/messages)","openai-chat":"OpenAI Chat Completions API protocol (/v1/chat/completions)","openai-responses":"OpenAI Responses API protocol (/v1/responses)"},form:{id:"Endpoint ID",idPlaceholder:"e.g. custom-api",idHint:"ID cannot be changed after creation, used for internal identification.",label:"Display Name",labelPlaceholder:"e.g. My Custom API",path:"Access Path",pathPlaceholder:"e.g. /custom/api",pathHint:"Path must start with /. Changes take effect immediately.",protocol:"Protocol Type",enabled:"Enable this endpoint"},routing:{title:"Routing Configuration (Optional)",modelRoutes:"Model Routing Rules",addRoute:"Add Rule",noRoutes:"No routing rules",sourceModelPlaceholder:"Source model (e.g. claude-3-5-sonnet-20241022)",targetPlaceholder:"Target (e.g. anthropic:claude-3-5-sonnet-20241022)",modelRoutesHint:"Format: source model → provider:model, wildcards supported (e.g. gpt-* → openai:*)",defaults:"Default Model Configuration",defaultCompletion:"Default for completion tasks",defaultReasoning:"Default for reasoning tasks",defaultBackground:"Default for background tasks",longContextThreshold:"Long context threshold (tokens)",defaultPlaceholder:"e.g. anthropic:claude-3-5-sonnet-20241022"},createSuccess:"Endpoint created successfully",createError:"Failed to create: {{error}}",updateSuccess:"Endpoint updated successfully",updateError:"Failed to update: {{error}}",deleteSuccess:"Endpoint deleted successfully",deleteError:"Failed to delete: {{error}}",deleteConfirm:'Are you sure you want to delete endpoint "{{label}}"? This action cannot be undone.',validationError:"Please fill in all required fields"}}}};ke.isInitialized||ke.use(_C).init({resources:g2,lng:"zh",fallbackLng:"en",interpolation:{escapeValue:!1}});const I0=p.createContext(void 0);function y2(){return`toast_${Math.random().toString(36).slice(2)}`}function v2({children:e}){const[t,n]=p.useState([]),r=p.useCallback(a=>{n(l=>l.filter(u=>u.id!==a))},[]),o=p.useCallback(a=>{n(l=>l.map(u=>u.id===a?{...u,dismissing:!0}:u)),setTimeout(()=>r(a),200)},[r]),s=p.useCallback(a=>{const l=a.id??y2();n(c=>[...c,{...a,id:l}]);const u=a.durationMs??3e3;u>0&&setTimeout(()=>o(l),u)},[o]),i=p.useMemo(()=>({toasts:t,pushToast:s,dismissToast:o}),[t,o,s]);return C.jsxs(I0.Provider,{value:i,children:[e,C.jsx("div",{"aria-live":"polite","aria-atomic":"false",className:"fixed right-6 top-6 z-50 flex w-80 flex-col gap-3",children:t.map(a=>C.jsx("div",{role:"alert",className:`rounded-md border border-slate-200 bg-white p-4 shadow-lg dark:border-slate-700 dark:bg-slate-800 ${a.dismissing?"animate-toast-out":"animate-toast-in"} ${a.variant==="error"?"border-red-200 bg-red-50 text-red-900 dark:border-red-700 dark:bg-red-900/40 dark:text-red-200":a.variant==="success"?"border-emerald-200 bg-emerald-50 text-emerald-900 dark:border-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-200":""}`,children:C.jsxs("div",{className:"flex items-start justify-between gap-4",children:[C.jsxs("div",{children:[C.jsx("p",{className:"text-sm font-semibold",children:a.title}),a.description?C.jsx("p",{className:"mt-1 text-sm opacity-75",children:a.description}):null]}),C.jsx("button",{type:"button","aria-label":"Dismiss",className:"text-sm text-slate-500 hover:text-slate-900 dark:text-slate-400 dark:hover:text-slate-100",onClick:()=>a.id&&o(a.id),children:"×"})]})},a.id))})]})}function oN(){const e=p.useContext(I0);if(!e)throw new Error("useToast must be used within ToastProvider");return e}function w2({children:e}){const[t]=p.useState(()=>new KO);return C.jsx(WO,{client:t,children:C.jsx(UC,{i18n:ke,children:C.jsx(rb,{children:C.jsx(v2,{children:C.jsx(yO,{children:e})})})})})}function M0(){const{t:e}=Er();return C.jsx("div",{className:"flex h-full items-center justify-center p-12",role:"status","aria-live":"polite",children:C.jsxs("div",{className:"flex flex-col items-center gap-4",children:[C.jsx("div",{className:"h-12 w-12 animate-spin rounded-full border-4 border-primary border-t-transparent"}),C.jsx("p",{className:"text-sm text-slate-500 dark:text-slate-400",children:e("common.loading")})]})})}function sN(){const{t:e}=Er();return C.jsxs("div",{className:"flex items-center gap-3 text-sm text-slate-500 dark:text-slate-400",children:[C.jsx("div",{className:"h-4 w-4 animate-spin rounded-full border-2 border-slate-300 border-t-transparent dark:border-slate-600"}),C.jsx("span",{children:e("common.loading")})]})}const x2=p.lazy(()=>fn(()=>import("./Dashboard-B61eM9AQ.js"),__vite__mapDeps([0,1,2,3,4,5,6,7]))),S2=p.lazy(()=>fn(()=>import("./Logs-Cy6rL2PL.js"),__vite__mapDeps([8,6,2,3,9,10,11,5,7,12]))),C2=p.lazy(()=>fn(()=>import("./Events-DXUNZen5.js"),__vite__mapDeps([13,3,10,5,7,12]))),Wh=p.lazy(()=>fn(()=>import("./ModelManagement-D2ZQEDua.js"),__vite__mapDeps([14,6,3,10,11,5,15,7,16,12]))),b2=p.lazy(()=>fn(()=>import("./ApiKeys-jnqKcfat.js"),__vite__mapDeps([17,1,6,3,4,5,9,10,11,16,18]))),E2=p.lazy(()=>fn(()=>import("./Settings-Bz_Hag2N.js"),__vite__mapDeps([19,6,3,9,10,11,5,15,7,18]))),k2=p.lazy(()=>fn(()=>import("./About-CE2fqYju.js"),__vite__mapDeps([20,6,3,4,5,21,12]))),P2=p.lazy(()=>fn(()=>import("./Help-DTQVUeCR.js"),__vite__mapDeps([22,3,4,5,9,21]))),R2=p.lazy(()=>fn(()=>import("./Login-BcTP1zb_.js"),__vite__mapDeps([23,10,11,5])));function T2({children:e}){const{authEnabled:t,isAuthenticated:n,loading:r}=C0(),o=Yn();return r?C.jsx(M0,{}):!t||n?e:C.jsx(Py,{to:"/login",replace:!0,state:{from:o}})}function A2(){return C.jsx(w2,{children:C.jsx(gC,{basename:typeof window<"u"&&window.location.pathname.startsWith("/ui")?"/ui":"/",children:C.jsx(p.Suspense,{fallback:C.jsx(M0,{}),children:C.jsxs(lC,{children:[C.jsxs(tt,{path:"/",element:C.jsx(T2,{children:C.jsx(wO,{})}),children:[C.jsx(tt,{index:!0,element:C.jsx(x2,{})}),C.jsx(tt,{path:"logs",element:C.jsx(S2,{})}),C.jsx(tt,{path:"events",element:C.jsx(C2,{})}),C.jsx(tt,{path:"models",element:C.jsx(Wh,{})}),C.jsx(tt,{path:"providers",element:C.jsx(Wh,{})}),C.jsx(tt,{path:"api-keys",element:C.jsx(b2,{})}),C.jsx(tt,{path:"settings",element:C.jsx(E2,{})}),C.jsx(tt,{path:"about",element:C.jsx(k2,{})}),C.jsx(tt,{path:"help",element:C.jsx(P2,{})})]}),C.jsx(tt,{path:"/login",element:C.jsx(R2,{})}),C.jsx(tt,{path:"*",element:C.jsx(Py,{to:"/",replace:!0})})]})})})})}const _0=document.getElementById("root");if(!_0)throw new Error("Root element #root not found");pu.createRoot(_0).render(C.jsx(Yt.StrictMode,{children:C.jsx(A2,{})}));export{nm as $,Rv as A,HC as B,KC as C,yP as D,Vv as E,GC as F,Sa as G,bE as H,rv as I,Ld as J,Tv as K,sN as L,Av as M,XC as N,J2 as O,Ne as P,$T as Q,Pv as R,vl as S,zT as T,BT as U,Yw as V,M0 as W,Tp as X,QC as Y,VC as Z,L2 as _,et as a,zt as a0,Yt as a1,N2 as a2,tb as a3,Kk as a4,ev as a5,Zy as a6,Vn as a7,yT as a8,ln as a9,JC as aa,IO as ab,PO as ac,Ac as ad,wl as ae,EO as af,kO as ag,Tc as ah,P0 as ai,UO as aj,AO as ak,tN as al,hb as am,Cy as an,Yn as ao,C0 as ap,oN as b,Oe as c,kt as d,eo as e,Ja as f,Z2 as g,Ls as h,BO as i,C as j,rN as k,xt as l,nN as m,Be as n,il as o,Nd as p,Oo as q,p as r,eN as s,cu as t,Er as u,Ca as v,Ue as w,G as x,kr as y,$d as z};