@chenpu17/cc-gw 0.7.2 → 0.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/package.json +19 -6
- package/{server → src/server/dist}/index.js +199 -5
- package/src/web/dist/assets/About-DtotMOVX.js +6 -0
- package/src/web/dist/assets/ApiKeys-JMEe4vio.js +16 -0
- package/src/web/dist/assets/Dashboard-YSr86yyX.js +16 -0
- package/src/web/dist/assets/Events-BllB4NJb.js +16 -0
- package/src/web/dist/assets/Help--0pC64iM.js +23 -0
- package/src/web/dist/assets/Login-C032JoOm.js +1 -0
- package/src/web/dist/assets/Logs-CtQRHEIo.js +6 -0
- package/src/web/dist/assets/ModelManagement-Ct_X5FY3.js +1 -0
- package/src/web/dist/assets/PageHeader-mDU5G7Wl.js +1 -0
- package/src/web/dist/assets/PageSection-tyXkbtRe.js +1 -0
- package/src/web/dist/assets/Settings-B9Xm-ZZ7.js +11 -0
- package/src/web/dist/assets/card-Bo-S3Rlt.js +1 -0
- package/{web/assets/copy-DMW-t8h3.js → src/web/dist/assets/copy-jtNMLGaB.js} +1 -1
- package/src/web/dist/assets/dialog-BaUjtxEu.js +10 -0
- package/{web/assets/index-BM-Zc1f-.js → src/web/dist/assets/index-Bktfd8Ti.js} +23 -36
- package/src/web/dist/assets/index-CHrsfYJ0.js +280 -0
- package/src/web/dist/assets/index-PIl6QtJn.css +1 -0
- package/{web/assets/info-ByJJXVcp.js → src/web/dist/assets/info-iVJjf7Iu.js} +1 -1
- package/src/web/dist/assets/input-Nvkz2m3Y.js +1 -0
- package/src/web/dist/assets/label-D1_YxFJP.js +1 -0
- package/{web/assets/refresh-cw-BF1LiBLP.js → src/web/dist/assets/refresh-cw-BYq1FKR4.js} +1 -1
- package/src/web/dist/assets/select-BzsGk5RC.js +11 -0
- package/src/web/dist/assets/switch-BHcjSBqV.js +1 -0
- package/src/web/dist/assets/useApiQuery-xxHtqlFp.js +1 -0
- package/{web → src/web/dist}/index.html +2 -2
- package/web/assets/About-BY3JDEBL.js +0 -6
- package/web/assets/ApiKeys-qhC2jZqJ.js +0 -16
- package/web/assets/Button-6f5FYqHp.js +0 -1
- package/web/assets/Dashboard-xs4UfKRq.js +0 -16
- package/web/assets/Events-D_RJKNNo.js +0 -21
- package/web/assets/FormField-DKWx0tXD.js +0 -1
- package/web/assets/Help-CXLtGK8v.js +0 -23
- package/web/assets/Input-Iev5RCKK.js +0 -1
- package/web/assets/Login-qc-n0iUi.js +0 -1
- package/web/assets/Logs-DSGqxauM.js +0 -1
- package/web/assets/ModelManagement-D11jx2bC.js +0 -1
- package/web/assets/PageSection-BJJ735Qk.js +0 -1
- package/web/assets/Settings-BT-6W3GT.js +0 -11
- package/web/assets/StatusBadge-9lxhNpvi.js +0 -1
- package/web/assets/index-CJMKkw2H.css +0 -1
- package/web/assets/index-dFe_7qSp.js +0 -212
- package/web/assets/useApiQuery-i7GI_aGQ.js +0 -1
- /package/{cli → src/cli/dist}/index.d.ts +0 -0
- /package/{cli → src/cli/dist}/index.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as M,a as oe,r as i,b as be,t as je,j as e,d as y,k as te,F as ye,p as ke,o as Ne,m as A,q as ve,L as we}from"./index-dFe_7qSp.js";import{u as K}from"./useApiQuery-i7GI_aGQ.js";import{P as _e,a as se}from"./PageSection-BJJ735Qk.js";import{F as T}from"./FormField-DKWx0tXD.js";import{S as I,I as W}from"./Input-Iev5RCKK.js";import{B as $}from"./Button-6f5FYqHp.js";import{S as de}from"./StatusBadge-9lxhNpvi.js";const ae=[20,50,100];function le(t,r=!1){if(!t)return;const n=r?`${t}T23:59:59.999`:`${t}T00:00:00.000`,b=Date.parse(n);return Number.isFinite(b)?b:void 0}function ne(t){const r=new Date(t);return`${r.getFullYear()}-${`${r.getMonth()+1}`.padStart(2,"0")}-${`${r.getDate()}`.padStart(2,"0")} ${`${r.getHours()}`.padStart(2,"0")}:${`${r.getMinutes()}`.padStart(2,"0")}:${`${r.getSeconds()}`.padStart(2,"0")}`}function v(t){return t==null?"-":t.toLocaleString()}function w(t,r){const n=v(t);return n==="-"?"-":`${n} ${r}`}function re(t){return t?"true":"false"}function ie(t,r){if(!t||t.trim().length===0)return r;try{const n=JSON.parse(t);return JSON.stringify(n,null,2)}catch{return t}}function Ke(){var Z,V;const{t}=M(),{pushToast:r}=oe(),[n,b]=i.useState("all"),[j,s]=i.useState("all"),[c,N]=i.useState(""),[u,h]=i.useState("all"),[g,a]=i.useState(""),[d,o]=i.useState(""),[x,_]=i.useState(1),[m,S]=i.useState(ae[0]),[O,L]=i.useState(null),[ce,G]=i.useState(!1),[D,Q]=i.useState([]),[q,H]=i.useState(!1);i.useEffect(()=>{_(1)},[n,j,c,u,g,d,m,D]);const R=i.useMemo(()=>{const l={limit:m,offset:(x-1)*m};n!=="all"&&(l.provider=n),j!=="all"&&(l.endpoint=j),c.trim().length>0&&(l.model=c.trim()),u!=="all"&&(l.status=u);const p=le(g),P=le(d,!0);return p!==void 0&&(l.from=p),P!==void 0&&(l.to=P),D.length>0&&(l.apiKeys=D.join(",")),l},[n,j,c,u,g,d,x,m,D]),f=K(["logs",R],{url:"/api/logs",method:"GET",params:R}),E=K(["providers","all"],{url:"/api/providers",method:"GET"}),J=K(["api-keys"],{url:"/api/keys",method:"GET"});i.useEffect(()=>{f.isError&&f.error&&r({title:t("logs.toast.listError.title"),description:t("logs.toast.listError.desc",{message:f.error.message}),variant:"error"})},[f.isError,f.error,r,t]),i.useEffect(()=>{E.isError&&E.error&&r({title:t("logs.toast.providerError.title"),description:t("logs.toast.providerError.desc",{message:E.error.message}),variant:"error"})},[E.isError,E.error,r,t]);const C=((Z=f.data)==null?void 0:Z.total)??0,k=C>0?Math.ceil(C/m):0,U=((V=f.data)==null?void 0:V.items)??[];i.useEffect(()=>{k>0&&x>k&&_(k)},[k,x]),i.useEffect(()=>{const l=document.querySelector(".table-container");l&&(l.style.overflow="hidden",setTimeout(()=>{l.style.overflow="auto"},10))},[U]);const z=E.data??[],Y=i.useMemo(()=>{const l=new Map;for(const p of z)p.id&&l.set(p.id,p.label??p.id);return l},[z]),B=J.data??[],X=i.useMemo(()=>{const l=new Map;for(const p of B)l.set(p.id,p);return l},[B]),xe=i.useMemo(()=>[{value:"all",label:t("logs.filters.statusAll")},{value:"success",label:t("logs.filters.statusSuccess")},{value:"error",label:t("logs.filters.statusError")}],[t]),me=()=>{b("all"),N(""),s("all"),h("all"),a(""),o(""),Q([])},pe=i.useCallback(async()=>{if(!q){H(!0);try{const l=C>0?Math.min(C,5e3):1e3,p={...R,limit:l,offset:0},P=await be.post("/api/logs/export",p,{responseType:"blob"}),ge=new Blob([P.data],{type:"application/zip"}),fe=new Date().toISOString().replace(/[:.]/g,"-"),ee=URL.createObjectURL(ge),F=document.createElement("a");F.href=ee,F.download=`cc-gw-logs-${fe}.zip`,document.body.appendChild(F),F.click(),F.remove(),URL.revokeObjectURL(ee),r({title:t("logs.toast.exportSuccess.title"),description:t("logs.toast.exportSuccess.desc"),variant:"success"})}catch(l){const p=je(l);r({title:t("logs.toast.exportError.title"),description:t("logs.toast.exportError.desc",{message:p.message}),variant:"error"})}finally{H(!1)}}},[q,r,R,t,C]),ue=i.useCallback(l=>{L(l),G(!0)},[]),he=i.useCallback(()=>{G(!1),L(null)},[]);return e.jsxs("div",{className:"flex flex-col gap-8",style:{width:"100%",maxWidth:"100%",overflow:"hidden"},children:[e.jsx(_e,{icon:e.jsx(ye,{className:"h-6 w-6","aria-hidden":"true"}),title:t("logs.title"),description:t("logs.description"),disableAnimation:!0,variant:"plain",className:"max-w-full",actions:e.jsxs("div",{className:"flex flex-wrap items-center gap-3 text-sm","aria-live":"polite",children:[e.jsx($,{variant:"primary",onClick:pe,loading:q,"aria-label":t("logs.actions.export"),className:"rounded-full",children:t("logs.actions.export")}),e.jsx("span",{className:y(A,"font-medium"),children:t("logs.summary.total",{value:C.toLocaleString()})}),e.jsx("button",{type:"button",onClick:()=>f.refetch(),disabled:f.isFetching,className:y(te,"h-10 rounded-full px-4",f.isFetching?"cursor-wait opacity-70":""),children:f.isFetching?t("common.actions.refreshing"):t("logs.actions.manualRefresh")})]})}),e.jsxs(se,{title:t("logs.filtersTitle"),description:t("logs.filtersDescription"),actions:e.jsx("button",{type:"button",onClick:me,className:y(te,"h-9 rounded-full px-4"),children:t("common.actions.reset")}),disableAnimation:!0,variant:"plain",className:"max-w-full",contentClassName:"grid w-full gap-3 md:grid-cols-2 xl:grid-cols-4",children:[e.jsx(T,{label:t("logs.filters.provider"),children:e.jsx(I,{value:n,onChange:l=>b(l.target.value),options:[{value:"all",label:t("logs.filters.providerAll")},...z.map(l=>({value:l.id,label:l.label??l.id}))]})}),e.jsx(T,{label:t("logs.filters.endpoint"),children:e.jsx(I,{value:j,onChange:l=>s(l.target.value),options:[{value:"all",label:t("logs.filters.endpointAll")},{value:"anthropic",label:t("logs.filters.endpointAnthropic")},{value:"openai",label:t("logs.filters.endpointOpenAI")}]})}),e.jsx(Ce,{className:"md:col-span-2",apiKeys:B,selected:D,disabled:J.isLoading,onChange:Q}),e.jsx(T,{label:t("logs.filters.modelId"),children:e.jsx(W,{value:c,onChange:l=>N(l.target.value),placeholder:t("logs.filters.modelPlaceholder")})}),e.jsx(T,{label:t("logs.filters.status"),children:e.jsx(I,{value:u,onChange:l=>h(l.target.value),options:xe})}),e.jsx(T,{label:t("logs.filters.startDate"),children:e.jsx(W,{type:"date",value:g,onChange:l=>a(l.target.value)})}),e.jsx(T,{label:t("logs.filters.endDate"),children:e.jsx(W,{type:"date",value:d,onChange:l=>o(l.target.value)})})]}),e.jsxs(se,{disableAnimation:!0,variant:"plain",className:"p-0 max-w-full",contentClassName:"gap-0",children:[e.jsx("div",{className:"w-full rounded-lg border border-slate-200 dark:border-slate-700",children:e.jsx("div",{className:"table-container",style:{overflowX:"auto",overflowY:"hidden",width:"100%"},children:e.jsx("div",{style:{width:"1380px",minWidth:"1380px"},children:e.jsxs("table",{className:"divide-y divide-slate-200 dark:divide-slate-700",style:{width:"100%",tableLayout:"fixed"},children:[e.jsxs("colgroup",{children:[e.jsx("col",{style:{width:"140px"}}),e.jsx("col",{style:{width:"80px"}}),e.jsx("col",{style:{width:"120px"}}),e.jsx("col",{style:{width:"130px"}}),e.jsx("col",{style:{width:"130px"}}),e.jsx("col",{style:{width:"100px"}}),e.jsx("col",{style:{width:"70px"}}),e.jsx("col",{style:{width:"80px"}}),e.jsx("col",{style:{width:"80px"}}),e.jsx("col",{style:{width:"70px"}}),e.jsx("col",{style:{width:"70px"}}),e.jsx("col",{style:{width:"70px"}}),e.jsx("col",{style:{width:"80px"}}),e.jsx("col",{style:{width:"90px"}}),e.jsx("col",{style:{width:"120px"}}),e.jsx("col",{style:{width:"120px"}})]}),e.jsx("caption",{className:"sr-only",children:t("logs.title")}),e.jsx("thead",{className:"bg-gradient-to-b from-slate-100 to-slate-50 dark:from-slate-800 dark:to-slate-800/60 text-left font-bold uppercase tracking-wider text-slate-600 dark:text-slate-300 border-b-2 border-slate-200 dark:border-slate-700",style:{fontSize:"10px"},children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-3 py-2 text-left font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.time")}),e.jsx("th",{className:"px-3 py-2 text-left font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.endpoint")}),e.jsx("th",{className:"px-3 py-2 text-left font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.provider")}),e.jsx("th",{className:"px-3 py-2 text-left font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.requestedModel")}),e.jsx("th",{className:"px-3 py-2 text-left font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.routedModel")}),e.jsx("th",{className:"px-3 py-2 text-left font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.apiKey")}),e.jsx("th",{className:"px-3 py-2 text-right font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.inputTokens")}),e.jsx("th",{className:"px-3 py-2 text-right font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.cacheReadTokens")}),e.jsx("th",{className:"px-3 py-2 text-right font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.cacheCreationTokens")}),e.jsx("th",{className:"px-3 py-2 text-right font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.outputTokens")}),e.jsx("th",{className:"px-3 py-2 text-right font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.latency")}),e.jsx("th",{className:"px-3 py-2 text-right font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.ttft")}),e.jsx("th",{className:"px-3 py-2 text-right font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.tpot")}),e.jsx("th",{className:"px-3 py-2 text-center font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.status")}),e.jsx("th",{className:"px-3 py-2 text-left font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.error")}),e.jsx("th",{className:"px-3 py-2 text-center font-semibold text-slate-600 dark:text-slate-200",children:t("logs.table.columns.actions")})]})}),e.jsx("tbody",{className:"divide-y divide-slate-200/80 bg-white dark:divide-slate-700/80 dark:bg-slate-900",children:f.isPending?e.jsx("tr",{children:e.jsx("td",{colSpan:15,className:"px-3 py-8 text-center text-xs text-slate-400 dark:text-slate-500",children:t("logs.table.loading")})}):U.length===0?e.jsx("tr",{children:e.jsx("td",{colSpan:15,className:"px-3 py-8 text-center text-xs text-slate-400 dark:text-slate-500",children:t("logs.table.empty")})}):U.map((l,p)=>e.jsx(Se,{record:l,providerLabelMap:Y,apiKeyMap:X,onSelect:ue,isEven:p%2===0},l.id))})]})})})}),e.jsxs("div",{className:ke,children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:y(A,"whitespace-nowrap"),children:t("logs.table.pagination.perPage")}),e.jsx("select",{value:m,onChange:l=>S(Number(l.target.value)),className:Ne,children:ae.map(l=>e.jsxs("option",{value:l,children:[l," ",t("logs.table.pagination.unit")]},l))})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx($,{onClick:()=>_(l=>Math.max(l-1,1)),disabled:x<=1,size:"sm",className:"rounded-full",children:t("logs.table.pagination.previous")}),e.jsx("span",{className:y(A,"font-medium"),children:t("logs.table.pagination.pageLabel",{page:k===0?0:x,total:k})}),e.jsx($,{onClick:()=>_(l=>k===0?l:Math.min(l+1,k)),disabled:k===0||x>=k,size:"sm",className:"rounded-full",children:t("logs.table.pagination.next")})]})]})]}),e.jsx(Ee,{open:ce,logId:O,onClose:he,providerLabelMap:Y,apiKeyMap:X})]})}function Se({record:t,providerLabelMap:r,apiKeyMap:n,onSelect:b,isEven:j}){const{t:s}=M(),c=r.get(t.provider)??t.provider,N=t.endpoint||"-",u=!!t.error,h=t.status_code,g=t.client_model??s("logs.table.requestedModelFallback"),a=t.api_key_id!=null?n.get(t.api_key_id):void 0,d=t.api_key_id==null?s("logs.table.apiKeyUnknown"):a!=null&&a.isWildcard?s("apiKeys.wildcard"):a!=null&&a.name?a.name:t.api_key_name?t.api_key_name:s("logs.table.apiKeyUnknown");return e.jsxs("tr",{className:y("transition-colors duration-150",j?"bg-slate-50/30 dark:bg-slate-800/20":"bg-white dark:bg-slate-900","hover:bg-blue-50/50 dark:hover:bg-blue-900/20"),children:[e.jsx("td",{className:"px-3 py-2.5 text-xs font-medium text-slate-700 dark:text-slate-100 whitespace-nowrap",children:ne(t.timestamp)}),e.jsx("td",{className:"px-3 py-2.5 text-xs text-slate-700 dark:text-slate-100 whitespace-nowrap",children:N}),e.jsx("td",{className:"px-3 py-2.5 text-xs text-slate-700 dark:text-slate-100",children:e.jsx("div",{className:"truncate",title:c,children:c})}),e.jsx("td",{className:"px-3 py-2.5 text-xs text-slate-600 dark:text-slate-200",children:e.jsx("div",{className:"truncate",title:g,children:g})}),e.jsx("td",{className:"px-3 py-2.5 text-xs text-slate-700 dark:text-slate-100",children:e.jsx("div",{className:"truncate",title:t.model,children:t.model})}),e.jsx("td",{className:"px-3 py-2.5",children:e.jsx("div",{className:y(A,"truncate text-xs"),title:d,children:d})}),e.jsx("td",{className:"px-3 py-2.5 text-right text-xs font-medium text-slate-700 dark:text-slate-100 tabular-nums",children:v(t.input_tokens)}),e.jsx("td",{className:"px-3 py-2.5 text-right text-xs font-medium text-slate-700 dark:text-slate-100 tabular-nums",children:v(t.cache_read_tokens)}),e.jsx("td",{className:"px-3 py-2.5 text-right text-xs font-medium text-slate-700 dark:text-slate-100 tabular-nums",children:v(t.cache_creation_tokens)}),e.jsx("td",{className:"px-3 py-2.5 text-right text-xs font-medium text-slate-700 dark:text-slate-100 tabular-nums",children:v(t.output_tokens)}),e.jsx("td",{className:"px-3 py-2.5 text-right text-xs text-slate-700 dark:text-slate-100 tabular-nums whitespace-nowrap",children:w(t.latency_ms,"ms")}),e.jsx("td",{className:"px-3 py-2.5 text-right text-xs text-slate-700 dark:text-slate-100 tabular-nums whitespace-nowrap",children:w(t.ttft_ms,"ms")}),e.jsx("td",{className:"px-3 py-2.5 text-right text-xs text-slate-700 dark:text-slate-100 tabular-nums whitespace-nowrap",children:w(t.tpot_ms,"ms/tk")}),e.jsx("td",{className:"px-3 py-2.5 text-center",children:e.jsx(de,{variant:u?"error":"success",children:h??(u?500:200)})}),e.jsx("td",{className:"px-3 py-2.5 text-[10px] text-slate-500 dark:text-slate-400",children:e.jsx("div",{className:"truncate",title:t.error??"",children:t.error?t.error:"-"})}),e.jsx("td",{className:"px-3 py-2.5 text-center",children:e.jsx($,{onClick:()=>b(t.id),size:"sm",className:"rounded-full text-xs px-2 py-1",children:s("logs.actions.detail")})})]})}function Ee({open:t,logId:r,onClose:n,providerLabelMap:b,apiKeyMap:j}){var x,_;const{t:s}=M(),{pushToast:c}=oe(),N=i.useRef(null),u=i.useRef(null),h=K(["log-detail",r],{url:`/api/logs/${r}`,method:"GET"},{enabled:t&&r!==null,staleTime:3e4});i.useEffect(()=>{h.isError&&h.error&&c({title:s("logs.detail.loadError"),description:h.error.message,variant:"error"})},[h.isError,h.error,c,s]),i.useEffect(()=>{if(!t)return;const m=S=>{S.key==="Escape"&&n()};return window.addEventListener("keydown",m),()=>window.removeEventListener("keydown",m)},[t,n]),i.useEffect(()=>{t&&u.current&&u.current.focus()},[t,r]);const g=i.useCallback(async(m,S,O)=>{if(!S){c({title:s("logs.detail.copy.empty",{label:m}),variant:"info"});return}try{await navigator.clipboard.writeText(S),c({title:s(O),variant:"success"})}catch(L){c({title:s("logs.detail.copy.failure"),description:L instanceof Error?L.message:s("logs.detail.copy.failureFallback"),variant:"error"})}},[c,s]);if(!t)return null;const a=h.data,d=a?b.get(a.provider)??a.provider:"",o=a&&a.api_key_id!=null?j.get(a.api_key_id):void 0;return typeof document>"u"?null:ve.createPortal(e.jsxs("div",{className:"fixed inset-0 z-50 flex",children:[e.jsx("div",{className:"flex-1 bg-slate-900/60",onClick:n,"aria-hidden":"true"}),e.jsxs("aside",{ref:N,role:"dialog","aria-modal":"true","aria-labelledby":"log-detail-title","aria-describedby":"log-detail-content",className:"flex h-full w-full max-w-xl flex-col border-l border-slate-200 bg-white shadow-xl transition-all dark:border-slate-800 dark:bg-slate-900",children:[e.jsxs("header",{className:"flex items-center justify-between border-b border-slate-200 px-6 py-4 dark:border-slate-800",children:[e.jsxs("div",{children:[e.jsx("h2",{id:"log-detail-title",className:"text-lg font-semibold",children:s("logs.detail.title")}),a?e.jsx("p",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.id",{id:a.id})}):null]}),e.jsx("button",{type:"button",ref:u,onClick:n,className:"rounded-md border border-slate-200 px-3 py-1 text-sm transition hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",children:s("common.actions.close")})]}),e.jsx("div",{id:"log-detail-content",className:"flex-1 overflow-y-auto",children:h.isPending?e.jsx(we,{}):a?e.jsxs("div",{className:"flex flex-col gap-6 px-6 py-5 text-sm",children:[e.jsxs("section",{className:"space-y-2",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:s("logs.detail.infoSection")}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3 rounded-md bg-slate-100 px-3 py-2 text-xs text-slate-600 dark:bg-slate-800/60 dark:text-slate-300",children:[e.jsx("span",{className:"text-sm font-medium text-slate-700 dark:text-slate-100",children:s("logs.detail.summary.route",{from:a.client_model??s("logs.detail.info.noRequestedModel"),to:a.model})}),e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.summary.latency",{value:w(a.latency_ms,s("common.units.ms"))})}),a.ttft_ms!==null?e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.summary.ttft",{value:w(a.ttft_ms,s("common.units.ms"))})}):null,a.tpot_ms!==null?e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.summary.tpot",{value:w(a.tpot_ms,s("common.units.msPerToken"))})}):null,e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.summary.stream",{value:re(a.stream)})}),e.jsxs(de,{variant:a.error?"error":"success",children:[(a.status_code??(a.error?500:200)).toString(),e.jsx("span",{children:a.error?s("common.status.error"):s("common.status.success")})]})]}),e.jsxs("dl",{className:"grid grid-cols-2 gap-x-4 gap-y-3",children:[e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.time")}),e.jsx("dd",{className:"font-medium",children:ne(a.timestamp)})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.sessionId")}),e.jsx("dd",{className:"font-medium",children:a.session_id??"-"})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.endpoint")}),e.jsx("dd",{className:"font-medium",children:a.endpoint||"-"}),e.jsx("dt",{className:"mt-2 text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.provider")}),e.jsx("dd",{className:"font-medium",children:d})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.requestedModel")}),e.jsx("dd",{className:"font-medium",children:a.client_model??s("logs.detail.info.noRequestedModel")})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.model")}),e.jsx("dd",{className:"font-medium",children:a.model})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.stream")}),e.jsx("dd",{className:"font-medium",children:re(a.stream)})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.inputTokens")}),e.jsx("dd",{className:"font-medium",children:v(a.input_tokens)})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.cacheReadTokens")}),e.jsx("dd",{className:"font-medium",children:v(a.cache_read_tokens)})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.cacheCreationTokens")}),e.jsx("dd",{className:"font-medium",children:v(a.cache_creation_tokens)})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.outputTokens")}),e.jsx("dd",{className:"font-medium",children:v(a.output_tokens)})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.ttft")}),e.jsx("dd",{className:"font-medium",children:w(a.ttft_ms,s("common.units.ms"))})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.tpot")}),e.jsx("dd",{className:"font-medium",children:w(a.tpot_ms,s("common.units.msPerToken"))})]})]}),a.error?e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.info.error")}),e.jsx("p",{className:"rounded-md border border-red-200 bg-red-50 p-3 text-xs leading-5 text-red-700 dark:border-red-800/70 dark:bg-red-900/40 dark:text-red-200",children:a.error})]}):null]}),e.jsxs("section",{className:"space-y-2",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:s("logs.detail.apiKey.title")}),e.jsxs("dl",{className:"grid gap-x-4 gap-y-3 text-sm sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.apiKey.name")}),e.jsx("dd",{className:"font-medium",children:a.api_key_id==null&&!a.api_key_name?s("logs.detail.apiKey.missing"):o!=null&&o.isWildcard?s("apiKeys.wildcard"):(o==null?void 0:o.name)??a.api_key_name??s("logs.detail.apiKey.missing")})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.apiKey.identifier")}),e.jsx("dd",{className:"font-medium",children:a.api_key_id??s("common.noData")})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.apiKey.masked")}),e.jsx("dd",{className:"font-medium",children:o!=null&&o.isWildcard?s("apiKeys.wildcard"):(o==null?void 0:o.maskedKey)??a.api_key_name??s("logs.detail.apiKey.maskedUnavailable")})]}),e.jsxs("div",{children:[e.jsx("dt",{className:"text-xs text-slate-500 dark:text-slate-400",children:s("logs.detail.apiKey.lastUsed")}),e.jsx("dd",{className:"font-medium",children:o!=null&&o.lastUsedAt?new Date(o.lastUsedAt).toLocaleString():s("common.noData")})]})]}),e.jsxs("div",{className:"rounded-md border border-slate-200 bg-slate-50 px-3 py-3 text-xs text-slate-600 dark:border-slate-800 dark:bg-slate-800/60 dark:text-slate-300",children:[e.jsx("p",{className:"font-medium text-slate-700 dark:text-slate-200",children:s("logs.detail.apiKey.rawMasked")}),e.jsx("p",{className:"mt-1 break-all text-xs font-mono",children:a.api_key_value_available?a.api_key_value_masked??s("logs.detail.apiKey.rawUnavailable"):s("logs.detail.apiKey.rawUnavailable")}),e.jsx("p",{className:"mt-2 text-[11px] leading-relaxed text-slate-500 dark:text-slate-400",children:s("logs.detail.apiKey.rawMaskedHint")})]})]}),e.jsxs("section",{className:"space-y-2",children:[e.jsxs("header",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:s("logs.detail.payload.request")}),e.jsx("button",{type:"button",onClick:()=>{var m;return g(s("logs.detail.payload.request"),(m=a.payload)==null?void 0:m.prompt,"logs.detail.copy.requestSuccess")},className:"rounded-md border border-slate-200 px-2 py-1 text-xs transition hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",children:s("common.actions.copy")})]}),e.jsx("pre",{className:"max-h-64 overflow-auto whitespace-pre-wrap rounded-md border border-slate-200 bg-slate-50 p-3 text-xs leading-5 text-slate-700 dark:border-slate-800 dark:bg-slate-900/80 dark:text-slate-200",children:ie((x=a.payload)==null?void 0:x.prompt,s("logs.detail.payload.emptyRequest"))})]}),e.jsxs("section",{className:"space-y-2",children:[e.jsxs("header",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:s("logs.detail.payload.response")}),e.jsx("button",{type:"button",onClick:()=>{var m;return g(s("logs.detail.payload.response"),(m=a.payload)==null?void 0:m.response,"logs.detail.copy.responseSuccess")},className:"rounded-md border border-slate-200 px-2 py-1 text-xs transition hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",children:s("common.actions.copy")})]}),e.jsx("pre",{className:"max-h-64 overflow-auto whitespace-pre-wrap rounded-md border border-slate-200 bg-slate-50 p-3 text-xs leading-5 text-slate-700 dark:border-slate-800 dark:bg-slate-900/80 dark:text-slate-200",children:ie((_=a.payload)==null?void 0:_.response,s("logs.detail.payload.emptyResponse"))})]})]}):e.jsx("div",{className:"flex h-full items-center justify.center p-8 text-sm text-slate-500 dark:text-slate-400",children:s("logs.detail.loadError")})})]})]}),document.body)}function Ce({apiKeys:t,selected:r,onChange:n,disabled:b,className:j}){const{t:s}=M(),[c,N]=i.useState(!1),u=i.useRef(null);i.useEffect(()=>{if(!c)return;const d=o=>{var x;(x=u.current)!=null&&x.contains(o.target)||N(!1)};return window.addEventListener("mousedown",d),()=>window.removeEventListener("mousedown",d)},[c]);const h=i.useMemo(()=>{if(r.length===0)return[];const d=new Map;for(const o of t)d.set(o.id,o);return r.map(o=>{const x=d.get(o);return x?x.isWildcard?s("apiKeys.wildcard"):x.name:null}).filter(o=>!!o)},[t,r,s]),g=r.length===0?s("logs.filters.apiKeyAll"):s("logs.filters.apiKeySelected",{count:r.length}),a=d=>{r.includes(d)?n(r.filter(o=>o!==d)):n([...r,d])};return e.jsxs("div",{className:y("relative flex flex-col gap-2",j),ref:u,children:[e.jsx("label",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:s("logs.filters.apiKey")}),e.jsxs("button",{type:"button",onClick:()=>N(d=>!d),disabled:b||t.length===0,title:s("logs.filters.apiKeyHint"),className:y("flex h-10 w-full items-center justify-between rounded-xl border border-slate-200/70 bg-white/90 px-3 text-sm font-medium text-slate-600 shadow-sm shadow-slate-200/60 transition focus:outline-none focus:ring-2 focus:ring-blue-400/30 disabled:cursor-not-allowed disabled:opacity-50 dark:border-slate-700/60 dark:bg-slate-900/80 dark:text-slate-200",r.length>0?"border-blue-400 text-blue-700 dark:border-blue-400 dark:text-blue-200":"",c?"ring-2 ring-blue-400/30":""),"aria-haspopup":"listbox","aria-expanded":c,children:[e.jsxs("span",{className:"truncate",children:[g,h.length>0&&e.jsx("span",{className:"ml-1 text-xs text-slate-500 dark:text-slate-400",children:h.join(", ")})]}),e.jsx("svg",{className:y("h-4 w-4 text-slate-400 transition-all dark:text-slate-300",c?"rotate-180":""),viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",children:e.jsx("path",{fillRule:"evenodd",d:"M5.23 7.21a.75.75 0 011.06.02L10 10.94l3.71-3.71a.75.75 0 111.06 1.06l-4.24 4.25a.75.75 0 01-1.06 0L5.21 8.29a.75.75 0 01.02-1.08z",clipRule:"evenodd"})})]}),c&&e.jsxs("div",{className:"absolute left-0 top-full z-30 mt-2 w-64 rounded-2xl border border-slate-200/70 bg-white p-2 shadow-lg shadow-slate-200/70 dark:border-slate-700/60 dark:bg-slate-900",children:[e.jsxs("div",{className:"flex items-center justify-between rounded-xl border border-slate-200/60 bg-slate-50/70 px-3 py-2 text-xs font-medium text-slate-500 dark:border-slate-700/50 dark:bg-slate-800/60 dark:text-slate-300",children:[e.jsx("span",{children:g}),e.jsx("button",{type:"button",onClick:()=>n([]),disabled:r.length===0,className:"text-blue-600 hover:underline disabled:opacity-40 dark:text-blue-400",children:s("common.actions.reset")})]}),e.jsxs("div",{className:"max-h-56 overflow-y-auto px-1 py-2",children:[t.map(d=>{const o=d.isWildcard?s("apiKeys.wildcard"):d.name,x=r.includes(d.id);return e.jsxs("label",{className:y("flex cursor-pointer items-center gap-2 rounded-xl px-3 py-2 text-sm transition hover:bg-slate-100 dark:hover:bg-slate-800",x?"bg-blue-50/70 text-blue-600 dark:bg-blue-900/30 dark:text-blue-200":"text-slate-600 dark:text-slate-200"),children:[e.jsx("input",{type:"checkbox",className:"h-4 w-4 rounded border-slate-300 text-blue-600 focus:ring-blue-400 dark:border-slate-600",checked:x,onChange:()=>a(d.id)}),e.jsx("span",{className:"truncate",children:o})]},d.id)}),t.length===0&&e.jsx("p",{className:"px-2 py-2 text-xs text-slate-500 dark:text-slate-400",children:s("logs.filters.apiKeyAll")})]})]})]})}export{Ke as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var Ze=s=>{throw TypeError(s)};var Te=(s,a,c)=>a.has(s)||Ze("Cannot "+c);var C=(s,a,c)=>(Te(s,a,"read from private field"),c?c.call(s):a.get(s)),de=(s,a,c)=>a.has(s)?Ze("Cannot add the same private member more than once"):a instanceof WeakSet?a.add(s):a.set(s,c),ne=(s,a,c,m)=>(Te(s,a,"write to private field"),m?m.call(s,c):a.set(s,c),c),ie=(s,a,c)=>(Te(s,a,"access private method"),c);import{S as Ut,x as Lt,y as et,z as Tt,A as dt,C as nt,r as g,D as $t,E as At,u as Pe,j as e,a as it,G as It,H as oe,b as W,I as ge,t as Re,J as tt,i as Kt,k as q,K as st,M as $e,N as ce,O as ct}from"./index-dFe_7qSp.js";import{u as Bt,a as Vt}from"./useApiQuery-i7GI_aGQ.js";var Y,se,A,X,Z,Se,Ke,ot,Ft=(ot=class extends Ut{constructor(a,c){super();de(this,Z);de(this,Y);de(this,se);de(this,A);de(this,X);ne(this,Y,a),this.setOptions(c),this.bindMethods(),ie(this,Z,Se).call(this)}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(a){var m;const c=this.options;this.options=C(this,Y).defaultMutationOptions(a),Lt(this.options,c)||C(this,Y).getMutationCache().notify({type:"observerOptionsUpdated",mutation:C(this,A),observer:this}),c!=null&&c.mutationKey&&this.options.mutationKey&&et(c.mutationKey)!==et(this.options.mutationKey)?this.reset():((m=C(this,A))==null?void 0:m.state.status)==="pending"&&C(this,A).setOptions(this.options)}onUnsubscribe(){var a;this.hasListeners()||(a=C(this,A))==null||a.removeObserver(this)}onMutationUpdate(a){ie(this,Z,Se).call(this),ie(this,Z,Ke).call(this,a)}getCurrentResult(){return C(this,se)}reset(){var a;(a=C(this,A))==null||a.removeObserver(this),ne(this,A,void 0),ie(this,Z,Se).call(this),ie(this,Z,Ke).call(this)}mutate(a,c){var m;return ne(this,X,c),(m=C(this,A))==null||m.removeObserver(this),ne(this,A,C(this,Y).getMutationCache().build(C(this,Y),this.options)),C(this,A).addObserver(this),C(this,A).execute(a)}},Y=new WeakMap,se=new WeakMap,A=new WeakMap,X=new WeakMap,Z=new WeakSet,Se=function(){var c;const a=((c=C(this,A))==null?void 0:c.state)??Tt();ne(this,se,{...a,isPending:a.status==="pending",isSuccess:a.status==="success",isError:a.status==="error",isIdle:a.status==="idle",mutate:this.mutate,reset:this.reset})},Ke=function(a){dt.batch(()=>{var c,m,p,j,d,x,N,b;if(C(this,X)&&this.hasListeners()){const P=C(this,se).variables,I=C(this,se).context,O={client:C(this,Y),meta:this.options.meta,mutationKey:this.options.mutationKey};(a==null?void 0:a.type)==="success"?((m=(c=C(this,X)).onSuccess)==null||m.call(c,a.data,P,I,O),(j=(p=C(this,X)).onSettled)==null||j.call(p,a.data,null,P,I,O)):(a==null?void 0:a.type)==="error"&&((x=(d=C(this,X)).onError)==null||x.call(d,a.error,P,I,O),(b=(N=C(this,X)).onSettled)==null||b.call(N,void 0,a.error,P,I,O))}this.listeners.forEach(P=>{P(C(this,se))})})},ot);function at(s,a){const c=nt(),[m]=g.useState(()=>new Ft(c,s));g.useEffect(()=>{m.setOptions(s)},[m,s]);const p=g.useSyncExternalStore(g.useCallback(d=>m.subscribe(dt.batchCalls(d)),[m]),()=>m.getCurrentResult(),()=>m.getCurrentResult()),j=g.useCallback((d,x)=>{m.mutate(d,x).catch($t)},[m]);if(p.error&&At(m.options.throwOnError,[p.error]))throw p.error;return{...p,mutate:j,mutateAsync:p.mutate}}function Ve(){return typeof globalThis.crypto<"u"&&typeof globalThis.crypto.randomUUID=="function"?globalThis.crypto.randomUUID():Math.random().toString(36).slice(2,10)}function Ht(){return{_key:Ve(),id:"",label:""}}const Ae={openai:{baseUrl:"https://api.openai.com/v1"},deepseek:{baseUrl:"https://api.deepseek.com/v1"},huawei:{baseUrl:"https://api.modelarts-maas.com/v1"},kimi:{baseUrl:"https://api.moonshot.cn/v1"},anthropic:{baseUrl:"https://api.anthropic.com/v1"},custom:{}};function rt(s){return s?{id:s.id,label:s.label??s.id,baseUrl:s.baseUrl,apiKey:s.apiKey??"",type:s.type??"custom",defaultModel:s.defaultModel??"",models:(s.models??[]).map(a=>({...a,_key:Ve()})),authMode:s.authMode==="authToken"?"authToken":"apiKey"}:{id:"",label:"",baseUrl:"",apiKey:"",type:"custom",defaultModel:"",models:[],authMode:"apiKey"}}function _t(s){return{_key:Ve(),id:s.id,label:s.label}}function qt({open:s,mode:a,provider:c,existingProviderIds:m,onClose:p,onSubmit:j}){const{t:d}=Pe(),[x,N]=g.useState(()=>rt(c)),[b,P]=g.useState({}),[I,O]=g.useState(!1),[B,V]=g.useState(null),y=g.useRef(null),E=g.useRef(null),D=g.useRef(null),[L,fe]=g.useState(a==="edit");g.useEffect(()=>{s&&(N(rt(c)),P({}),V(null),O(!1),fe(a==="edit"))},[s,c,a]),g.useEffect(()=>{if(!s)return;const u=f=>{f.key==="Escape"&&p()};return window.addEventListener("keydown",u),()=>window.removeEventListener("keydown",u)},[s,p]),g.useEffect(()=>{if(s){if(a==="create"&&D.current){D.current.focus();return}E.current&&E.current.focus()}},[s,a]);const ve=g.useMemo(()=>x.models.filter(u=>u.id.trim().length>0),[x.models]),ue=u=>f=>{N(w=>({...w,[u]:f}))},ke=u=>{N(f=>{const k=!L||f.label.trim().length===0||f.label===f.id?u:f.label;return{...f,id:u,label:k}})},ae=u=>{N(f=>{var Ne;const k=Ae[u??"custom"]??Ae.custom,S=Object.values(Ae).map(ee=>ee.baseUrl).filter(ee=>!!ee),z=!f.baseUrl||S.includes(f.baseUrl),$=a==="create"&&(f.models.length===0||f.models.every(ee=>ee.id.trim().length===0)),Q={...f,type:u,authMode:u==="anthropic"?f.authMode??"apiKey":"apiKey"};return k!=null&&k.baseUrl&&z&&(Q.baseUrl=k.baseUrl),k!=null&&k.models&&$&&(Q.models=k.models.map(_t),Q.defaultModel=k.defaultModel??((Ne=k.models[0])==null?void 0:Ne.id)??""),Q})},T=(u,f)=>{N(w=>{const k=[...w.models];return k[u]={...k[u],...f},{...w,models:k}})},De=(u,f)=>{N(w=>{const k=[...w.models],S=k[u];if(!S)return w;const z=!L||!S.label||S.label===S.id,$={...S,id:f,label:z?f:S.label};k[u]=$;const Q=w.defaultModel===S.id?f:w.defaultModel;return{...w,models:k,defaultModel:Q}})},F=u=>{N(f=>{if(u<0||u>=f.models.length)return f;const w=f.models.filter((S,z)=>z!==u);let k=f.defaultModel;return w.some(S=>S.id===k)||(k=""),{...f,models:w,defaultModel:k}})},Oe=()=>{N(u=>({...u,models:[...u.models,Ht()]}))},me=u=>{N(f=>({...f,authMode:u}))},je=()=>{const u={},f=x.id.trim(),w=x.baseUrl.trim();if(a==="create"&&(f.length===0?u.id=d("providers.drawer.errors.idRequired"):m.includes(f)&&(u.id=d("providers.drawer.errors.idDuplicate"))),a==="edit"&&f.length===0&&(u.id=d("providers.drawer.errors.idRequired")),w.length===0)u.baseUrl=d("providers.drawer.errors.baseUrlInvalid");else try{new URL(w)}catch{u.baseUrl=d("providers.drawer.errors.baseUrlInvalid")}if(x.models.length>0){const k=new Set;x.models.some(z=>{const $=z.id.trim();return $.length===0||k.has($)?!0:(k.add($),!1)})&&(u.models=d("providers.drawer.errors.modelInvalid"))}return x.defaultModel&&!x.models.some(k=>k.id===x.defaultModel)&&(u.models=d("providers.drawer.errors.defaultInvalid")),P(u),Object.keys(u).length===0},xe=()=>{const u=x.models.map(k=>{var S;return{id:k.id.trim(),label:(S=k.label)!=null&&S.trim()?k.label.trim():void 0}}).filter(k=>k.id.length>0),f=c!=null&&c.extraHeaders&&Object.keys(c.extraHeaders).length>0?c.extraHeaders:void 0,w=x.type==="anthropic"?x.authMode:void 0;return{id:x.id.trim(),label:x.label.trim()||x.id.trim(),baseUrl:x.baseUrl.trim(),apiKey:x.apiKey.trim()||void 0,type:x.type??"custom",defaultModel:x.defaultModel||void 0,models:u.length>0?u:void 0,extraHeaders:f,authMode:w}},ye=async()=>{if(V(null),!!je()){O(!0);try{const u=xe();await j(u)}catch(u){V(d("providers.drawer.toast.saveFailure",{message:u instanceof Error?u.message:"unknown"})),O(!1);return}O(!1),p()}},he=a==="create";return s?e.jsxs("div",{className:"fixed inset-0 z-50 flex",children:[e.jsx("div",{className:"flex-1 bg-slate-900/60",onClick:p,"aria-hidden":"true"}),e.jsxs("aside",{ref:y,role:"dialog","aria-modal":"true","aria-labelledby":"provider-drawer-title","aria-describedby":"provider-drawer-desc",className:"flex h-full w-full max-w-3xl flex-col border-l border-slate-200 bg-white shadow-xl dark:border-slate-800 dark:bg-slate-900",children:[e.jsxs("header",{className:"flex items-center justify-between border-b border-slate-200 px-6 py-4 dark:border-slate-800",children:[e.jsxs("div",{children:[e.jsx("h2",{id:"provider-drawer-title",className:"text-lg font-semibold",children:d(he?"providers.drawer.createTitle":"providers.drawer.editTitle")}),e.jsx("p",{id:"provider-drawer-desc",className:"text-xs text-slate-500 dark:text-slate-400",children:d("providers.drawer.description")})]}),e.jsx("button",{type:"button",ref:E,onClick:p,className:"rounded-md border border-slate-200 px-3 py-1 text-sm transition hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",children:d("common.actions.close")})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto px-6 py-5",children:[e.jsxs("section",{className:"space-y-4","aria-labelledby":"provider-basic-fields",children:[e.jsx("div",{id:"provider-basic-fields",className:"sr-only",children:d("providers.drawer.description")}),e.jsx("div",{className:"flex items-center justify-end",children:e.jsx("button",{type:"button",onClick:()=>fe(u=>!u),className:"rounded-md border border-slate-200 px-3 py-1 text-xs transition hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",children:d(L?"providers.drawer.fields.hideAdvanced":"providers.drawer.fields.showAdvanced")})}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:d("providers.drawer.fields.id")}),e.jsx("input",{value:x.id,ref:D,onChange:u=>ke(u.target.value),disabled:!he,placeholder:d("providers.drawer.fields.idPlaceholder"),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60","aria-invalid":!!b.id}),b.id?e.jsx("span",{className:"text-xs text-red-500",children:b.id}):null]}),L?e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:d("providers.drawer.fields.label")}),e.jsx("input",{value:x.label,onChange:u=>ue("label")(u.target.value),placeholder:d("providers.drawer.fields.labelPlaceholder"),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60"})]}):null]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:d("providers.drawer.fields.baseUrl")}),e.jsx("input",{value:x.baseUrl,onChange:u=>ue("baseUrl")(u.target.value),placeholder:d("providers.drawer.fields.baseUrlPlaceholder"),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60","aria-invalid":!!b.baseUrl}),b.baseUrl?e.jsx("span",{className:"text-xs text-red-500",children:b.baseUrl}):null]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:d("providers.drawer.fields.type")}),e.jsxs("select",{value:x.type??"custom",onChange:u=>ae(u.target.value),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60",children:[e.jsx("option",{value:"openai",children:"OpenAI"}),e.jsx("option",{value:"deepseek",children:"DeepSeek"}),e.jsx("option",{value:"huawei",children:"华为云"}),e.jsx("option",{value:"kimi",children:"Kimi"}),e.jsx("option",{value:"anthropic",children:"Anthropic (Claude)"}),e.jsx("option",{value:"custom",children:"Custom"})]})]})]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:d("providers.drawer.fields.apiKey")}),e.jsx("input",{value:x.apiKey,onChange:u=>ue("apiKey")(u.target.value),placeholder:d("providers.drawer.fields.apiKeyPlaceholder"),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60"})]}),x.type==="anthropic"?e.jsxs("fieldset",{className:"grid gap-2 rounded-lg border border-slate-200 p-3 text-xs dark:border-slate-700",children:[e.jsx("legend",{className:"px-1 text-slate-500 dark:text-slate-400",children:d("providers.drawer.fields.authMode")}),e.jsx("p",{className:"text-[11px] text-slate-500 dark:text-slate-400",children:d("providers.drawer.fields.authModeHint")}),e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 rounded-md px-2 py-1 transition hover:bg-slate-100 dark:hover:bg-slate-800",children:[e.jsx("input",{type:"radio",name:"anthropic-auth-mode",value:"apiKey",checked:x.authMode==="apiKey",onChange:()=>me("apiKey")}),e.jsx("span",{children:d("providers.drawer.fields.authModeApiKey")})]}),e.jsxs("label",{className:"flex cursor-pointer items-center gap-2 rounded-md px-2 py-1 transition hover:bg-slate-100 dark:hover:bg-slate-800",children:[e.jsx("input",{type:"radio",name:"anthropic-auth-mode",value:"authToken",checked:x.authMode==="authToken",onChange:()=>me("authToken")}),e.jsx("span",{children:d("providers.drawer.fields.authModeAuthToken")})]})]}):null]}),e.jsxs("section",{className:"mt-6 space-y-3","aria-labelledby":"provider-model-fields",children:[e.jsxs("header",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h3",{id:"provider-model-fields",className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:d("providers.drawer.fields.models")}),e.jsx("p",{className:"text-xs text-slate-500 dark:text-slate-400",children:d("providers.drawer.modelsDescription")})]}),e.jsx("button",{type:"button",onClick:Oe,className:"rounded-md border border-slate-200 px-3 py-1 text-xs transition hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",children:d("providers.drawer.fields.addModel")})]}),b.models?e.jsx("p",{className:"text-xs text-red-500",children:b.models}):null,e.jsxs("div",{className:"space-y-4",children:[x.models.map((u,f)=>e.jsxs("div",{className:"rounded-lg border border-slate-200 bg-slate-50 p-4 dark:border-slate-700 dark:bg-slate-800/40",children:[e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:d("providers.drawer.fields.modelId")}),e.jsx("input",{value:u.id,onChange:w=>De(f,w.target.value),placeholder:d("providers.drawer.fields.modelIdPlaceholder"),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60"})]}),L?e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:[e.jsx("span",{className:"text-xs text-slate-500 dark:text-slate-400",children:d("providers.drawer.fields.modelLabel")}),e.jsx("input",{value:u.label??"",onChange:w=>T(f,{label:w.target.value}),placeholder:d("providers.drawer.fields.modelLabelPlaceholder"),className:"rounded-md border border-slate-200 bg-white px-3 py-2 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 disabled:bg-slate-100 disabled:text-slate-400 dark:border-slate-700 dark:bg-slate-800 dark:focus:border-blue-400 dark:focus:ring-blue-400/40 dark:disabled:bg-slate-800/60"})]}):null]}),e.jsxs("div",{className:"mt-3 flex flex-wrap items-center justify-between gap-3 text-xs",children:[e.jsxs("label",{className:"flex items-center gap-2 text-slate-600 dark:text-slate-300",children:[e.jsx("input",{type:"radio",name:"defaultModel",value:u.id,checked:x.defaultModel===u.id,onChange:()=>N(w=>({...w,defaultModel:u.id})),disabled:u.id.trim().length===0}),d("providers.drawer.fields.setDefault")]}),e.jsx("button",{type:"button",className:"text-red-500 transition hover:text-red-600 disabled:cursor-not-allowed disabled:opacity-40",onClick:()=>F(f),disabled:x.models.length===0,children:d("providers.drawer.fields.removeModel")})]})]},u._key)),x.models.length===0?e.jsx("div",{className:"rounded-xl border-2 border-amber-300 bg-gradient-to-br from-amber-50 to-yellow-50 p-5 shadow-md dark:border-amber-600/60 dark:from-amber-900/20 dark:to-yellow-900/20",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"flex-shrink-0 text-2xl",children:"💡"}),e.jsxs("div",{className:"flex-1 space-y-2",children:[e.jsx("p",{className:"text-sm font-semibold text-amber-900 dark:text-amber-200",children:d("providers.drawer.noModelsTitle")}),e.jsx("p",{className:"text-xs leading-relaxed text-amber-800 dark:text-amber-300",children:d("providers.drawer.noModelsHint",{providerId:x.id||"provider-id"})}),e.jsxs("div",{className:"rounded-md bg-amber-100/80 p-2.5 dark:bg-amber-800/40",children:[e.jsx("p",{className:"mb-1.5 text-xs font-medium text-amber-900 dark:text-amber-200",children:d("providers.drawer.routeExample")}),e.jsxs("code",{className:"block rounded bg-white px-2.5 py-1.5 font-mono text-xs text-amber-900 shadow-sm dark:bg-slate-900 dark:text-amber-100",children:['"claude-*": "',(x.id||"provider-id").trim()||"provider-id",':*"']})]})]})]})}):null]}),ve.length>1?e.jsx("div",{className:"text-xs text-slate-500 dark:text-slate-400",children:d("providers.drawer.defaultHint",{model:x.defaultModel||d("providers.card.noDefault")})}):null]})]}),e.jsxs("footer",{className:"flex items-center justify-between gap-3 border-t border-slate-200 px-6 py-4 text-sm dark:border-slate-800",children:[e.jsx("div",{className:"flex flex-col text-xs text-red-500","aria-live":"polite",children:B?e.jsx("span",{children:B}):null}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("button",{type:"button",onClick:p,className:"rounded-md border border-slate-200 px-4 py-2 transition hover:bg-slate-100 dark:border-slate-700 dark:hover:bg-slate-800",disabled:I,children:d("common.actions.cancel")}),e.jsx("button",{type:"button",onClick:ye,className:"rounded-md bg-blue-600 px-4 py-2 text-white transition hover:bg-blue-700 disabled:opacity-60",disabled:I,children:d(I?"common.actions.saving":"common.actions.save")})]})]})]})]}):null}const zt=["claude-sonnet-4-5-20250929","claude-sonnet-4-5-20250929-thinking","claude-sonnet-4-20250514","claude-opus-4-1-20250805","claude-opus-4-1-20250805-thinking","claude-haiku-4-5-20251001","claude-haiku-4-5-20251001-thinking","claude-3-5-haiku-20241022"],Qt=["gpt-4o-mini","gpt-4o","o4-mini","o4-large","gpt-5-codex"];function Be(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():Math.random().toString(36).slice(2,10)}function J(s){return s?Object.entries(s).map(([a,c])=>({id:Be(),source:a,target:c})):[]}function Ie(s,a){var p,j,d;if(!s)return{};const c={},m=s.endpointRouting??{};c.anthropic=J(((p=m.anthropic)==null?void 0:p.modelRoutes)??s.modelRoutes??{}),c.openai=J(((j=m.openai)==null?void 0:j.modelRoutes)??{});for(const x of a)(d=x.routing)!=null&&d.modelRoutes?c[x.id]=J(x.routing.modelRoutes):c[x.id]=[];return c}function Gt(s,a){if(s==="anthropic")return!0;const c=a.find(m=>m.id===s);return c?c.paths&&c.paths.length>0?c.paths.some(m=>m.protocol==="anthropic"):c.protocol==="anthropic":!1}function Wt(s,a,c){var p,j,d;if(!a)return;if(s==="anthropic"||s==="openai")return(j=(p=a.endpointRouting)==null?void 0:p[s])==null?void 0:j.validation;const m=c.find(x=>x.id===s);return(d=m==null?void 0:m.routing)==null?void 0:d.validation}function as(){const{t:s}=Pe(),{pushToast:a}=it(),c=nt(),m=Bt(["config","full"],{url:"/api/config",method:"GET"}),{data:p}=Vt({queryKey:["custom-endpoints"],queryFn:ge.list,refetchInterval:1e4}),j=(p==null?void 0:p.endpoints)??[],d=g.useMemo(()=>{const t=[{key:"providers",label:s("modelManagement.tabs.providers"),description:s("modelManagement.tabs.providersDesc"),isSystem:!0,canDelete:!1},{key:"anthropic",label:s("modelManagement.tabs.anthropic"),description:s("modelManagement.tabs.anthropicDesc"),isSystem:!0,canDelete:!1,protocols:["anthropic"]},{key:"openai",label:s("modelManagement.tabs.openai"),description:s("modelManagement.tabs.openaiDesc"),isSystem:!0,canDelete:!1,protocols:["openai-auto","openai-chat","openai-responses"]}],o=j.map(r=>{let l,n=[];if(r.paths&&r.paths.length>0){const i=r.paths.map(h=>`${h.path} (${h.protocol})`).join(", ");l=`${s("modelManagement.tabs.customEndpoint")}: ${i}`,n=[...new Set(r.paths.map(h=>h.protocol))]}else if(r.path){const i=r.protocol||"anthropic";l=`${s("modelManagement.tabs.customEndpoint")}: ${r.path} (${i})`,n=[i]}else l=s("modelManagement.tabs.customEndpoint");return{key:r.id,label:r.label,description:l,isSystem:!1,canDelete:!0,protocols:n}});return[...t,...o]},[s,j]),[x,N]=g.useState("providers"),[b,P]=g.useState(null),[I,O]=g.useState(!1),[B,V]=g.useState("create"),[y,E]=g.useState(void 0),[D,L]=g.useState(null),[fe,ve]=g.useState(!1),[ue,ke]=g.useState(void 0),[ae,T]=g.useState({}),[De,F]=g.useState({}),[Oe,me]=g.useState(null),[je,xe]=g.useState({}),[ye,he]=g.useState({}),[u,f]=g.useState({}),[w,k]=g.useState(null),[S,z]=g.useState(null),[$,Q]=g.useState(null),[Ne,ee]=g.useState(!1),[Ue,Fe]=g.useState(null),[we,Le]=g.useState(!0),[He,_e]=g.useState({}),[qe,ze]=g.useState(!1),H=(b==null?void 0:b.providers)??[],ut=H.length,be=g.useMemo(()=>[{key:"anthropic-beta",value:"claude-code-20250219,interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14",label:s("providers.testDialog.options.beta.label"),description:s("providers.testDialog.options.beta.description")}],[s]);g.useEffect(()=>{var t,o;if(m.data){const r=m.data;P(r),T(Ie(r,j)),F({});const l={anthropic:((t=r.routingPresets)==null?void 0:t.anthropic)??[],openai:((o=r.routingPresets)==null?void 0:o.openai)??[]};for(const n of j)l[n.id]=n.routingPresets??[];xe(l)}},[m.data,j]),g.useEffect(()=>{m.isError&&m.error&&a({title:s("providers.toast.loadFailure",{message:m.error.message}),variant:"error"})},[m.isError,m.error,a,s]);const mt=g.useMemo(()=>{const t=new Map;for(const o of H){if(!o.defaultModel||!o.models)continue;const r=o.models.find(l=>l.id===o.defaultModel);r&&t.set(o.id,lt(r))}return t},[H]),Qe=g.useMemo(()=>{const t=[],o=new Set;for(const l of H){const n=l.label||l.id,i=l.models??[];if(i.length>0)for(const v of i){const R=`${l.id}:${v.id}`;o.has(R)||(o.add(R),t.push({value:R,label:`${n} · ${v.label??v.id}`}))}else if(l.defaultModel){const v=`${l.id}:${l.defaultModel}`;o.has(v)||(o.add(v),t.push({value:v,label:`${n} · ${l.defaultModel}`}))}const h=`${l.id}:*`;o.has(h)||(o.add(h),t.push({value:h,label:s("settings.routing.providerPassthroughOption",{provider:n})}))}const r=[...ae.anthropic||[],...ae.openai||[]];for(const l of r){const n=l.target.trim();n&&!o.has(n)&&(o.add(n),t.push({value:n,label:n}))}return t},[H,ae,s]),Ge=(t,o)=>{xe(r=>({...r,[t]:o})),P(r=>{if(!r)return r;if(t==="anthropic"||t==="openai")return{...r,routingPresets:{...r.routingPresets,[t]:o}};const l=r.customEndpoints??[],n=l.findIndex(h=>h.id===t);if(n===-1)return r;const i=[...l];return i[n]={...i[n],routingPresets:o},{...r,customEndpoints:i}})},te=()=>b?!0:(a({title:s("settings.toast.missingConfig"),variant:"error"}),m.refetch(),!1),xt=(t,o)=>{he(r=>({...r,[t]:o})),o.trim()&&f(r=>({...r,[t]:null}))},ht=async t=>{if(!te())return;const o=ye[t].trim();if(!o){f(r=>({...r,[t]:s("modelManagement.validation.presetName")}));return}if(je[t].some(r=>r.name.toLowerCase()===o.toLowerCase())){f(r=>({...r,[t]:s("modelManagement.validation.presetDuplicate",{name:o})}));return}k(t);try{const l=(await W.post(`/api/routing-presets/${t}`,{name:o})).data.presets??[];Ge(t,l),he(n=>({...n,[t]:""})),f(n=>({...n,[t]:null})),a({title:s("modelManagement.toast.presetSaved",{name:o}),variant:"success"})}catch(r){a({title:s("modelManagement.toast.presetSaveFailure",{message:r instanceof Error?r.message:"unknown"}),variant:"error"})}finally{k(null),m.refetch()}},bt=async(t,o)=>{var r,l,n;if(te()){z({endpoint:t,name:o.name});try{const h=(await W.post(`/api/routing-presets/${t}/apply`,{name:o.name})).data.config;if(h){P(h),T(Ie(h,j));const v={anthropic:((r=h.routingPresets)==null?void 0:r.anthropic)??[],openai:((l=h.routingPresets)==null?void 0:l.openai)??[]};for(const R of j){const U=(n=h.customEndpoints)==null?void 0:n.find(K=>K.id===R.id);v[R.id]=(U==null?void 0:U.routingPresets)??[]}xe(v)}else T(v=>({...v,[t]:J(o.modelRoutes)}));a({title:s("modelManagement.toast.presetApplySuccess",{name:o.name}),variant:"success"})}catch(i){a({title:s("modelManagement.toast.presetApplyFailure",{message:i instanceof Error?i.message:"unknown"}),variant:"error"})}finally{z(null),m.refetch()}}},pt=async(t,o)=>{if(!(!te()||!window.confirm(s("modelManagement.confirm.deletePreset",{name:o.name})))){Q({endpoint:t,name:o.name});try{const n=(await W.delete(`/api/routing-presets/${t}/${encodeURIComponent(o.name)}`)).data.presets??[];Ge(t,n),a({title:s("modelManagement.toast.presetDeleteSuccess",{name:o.name}),variant:"success"})}catch(l){a({title:s("modelManagement.toast.presetDeleteFailure",{message:l instanceof Error?l.message:"unknown"}),variant:"error"})}finally{Q(null),m.refetch()}}},gt=()=>{te()&&(V("create"),E(void 0),O(!0))},ft=t=>{te()&&(V("edit"),E(t),O(!0))},vt=async t=>{if(!b)throw new Error(s("settings.toast.missingConfig"));const o=B==="create"?[...H,t]:H.map(n=>y&&n.id===y.id?{...t,id:y.id}:n),r={...b,providers:o};await W.put("/api/config",r),P(r),T(Ie(r,j)),m.refetch();const l=B==="create"?s("providers.toast.createSuccess",{name:t.label||t.id}):s("providers.toast.updateSuccess",{name:t.label||t.id});a({title:l,variant:"success"})},kt=async t=>{const o=j.find(r=>r.id===t);if(o&&confirm(s("modelManagement.deleteEndpointConfirm",{label:o.label})))try{await ge.delete(t),c.invalidateQueries({queryKey:["custom-endpoints"]}),a({title:s("modelManagement.deleteEndpointSuccess"),variant:"success"}),x===t&&N("providers")}catch(r){const l=Re(r);a({title:s("modelManagement.deleteEndpointError",{error:l.message}),variant:"error"})}},We=async(t,o)=>{L(t.id);try{const r=o&&(o.headers||o.query)?{headers:o.headers&&Object.keys(o.headers).length>0?o.headers:void 0,query:o.query&&o.query.trim().length>0?o.query.trim():void 0}:void 0,l=await W.post(`/api/providers/${t.id}/test`,r);l.data.ok?a({title:s("providers.toast.testSuccess"),description:s("providers.toast.testSuccessDesc",{status:l.data.status,duration:l.data.durationMs?`${l.data.durationMs} ms`:"—"}),variant:"success"}):a({title:s("providers.toast.testFailure",{message:`${l.data.status} ${l.data.statusText}`}),variant:"error"})}catch(r){a({title:s("providers.toast.testFailure",{message:r instanceof Error?r.message:"unknown"}),variant:"error"})}finally{L(null)}},jt=t=>{if(t.type==="anthropic"){const o=t.extraHeaders??{},r=new Map(be.map(i=>[i.key.toLowerCase(),i])),l={};let n=!0;for(const i of be){const h=Object.entries(o).find(([v])=>v.toLowerCase()===i.key.toLowerCase());if(h){const[v,R]=h;String(R??"")===i.value||(n=!1,l[v]=String(R??""))}}for(const[i,h]of Object.entries(o))r.has(i.toLowerCase())||(l[i]=String(h??""));_e(l),Le(n),Fe(t),ee(!0);return}We(t)},Je=()=>{ee(!1),Fe(null),Le(!0),_e({})},yt=async()=>{if(!Ue)return;const t={};if(we)for(const l of be)t[l.key]=l.value;const o=new Map(be.map(l=>[l.key.toLowerCase(),l]));for(const[l,n]of Object.entries(He)){const i=l.toLowerCase();o.get(i)&&we||(t[l]=n)}const r=Ue;Je(),await We(r,{headers:Object.keys(t).length>0?t:void 0,query:we?"beta=true":void 0})},Nt=async t=>{var R,U,K,re;if(!te()||!window.confirm(s("providers.confirm.delete",{name:t.label||t.id})))return;const r=H.filter(_=>_.id!==t.id),l=_=>{const le={};if(!_)return le;for(const[Ee,M]of Object.entries(_)){if(!M)continue;const[Ce]=M.split(":");Ce&&Ce===t.id||M===t.id||(le[Ee]=M)}return le},n=(b==null?void 0:b.endpointRouting)??{},i=l(((R=n.anthropic)==null?void 0:R.modelRoutes)??(b==null?void 0:b.modelRoutes)??{}),h=l(((U=n.openai)==null?void 0:U.modelRoutes)??{}),v={...b,providers:r,modelRoutes:i,endpointRouting:{anthropic:{defaults:((K=n.anthropic)==null?void 0:K.defaults)??b.defaults,modelRoutes:i},openai:{defaults:((re=n.openai)==null?void 0:re.defaults)??b.defaults,modelRoutes:h}}};try{await W.put("/api/config",v),P(v),T({anthropic:J(i),openai:J(h)}),a({title:s("providers.toast.deleteSuccess",{name:t.label||t.id}),variant:"success"}),m.refetch()}catch(_){a({title:s("providers.toast.deleteFailure",{message:_ instanceof Error?_.message:"unknown"}),variant:"error"})}},wt=t=>{T(o=>({...o,[t]:[...o[t]||[],{id:Be(),source:"",target:""}]})),F(o=>({...o,[t]:null}))},Mt=async(t,o)=>{if(te()){ze(!0);try{if(t==="anthropic"||t==="openai"){const r=b.endpointRouting?{...b.endpointRouting}:{},l=r[t]??{defaults:b.defaults,modelRoutes:(t==="anthropic"?b.modelRoutes:{})??{}},n={defaults:l.defaults??b.defaults,modelRoutes:l.modelRoutes??{}};let i=l.validation;o?(i={...i??{},mode:"claude-code"},i.allowExperimentalBlocks===void 0&&(i.allowExperimentalBlocks=!0)):i=void 0;const h=i?{...n,validation:i}:{...n},v={...r,[t]:h},R={...b,endpointRouting:v};await W.put("/api/config",R),P(R)}else{const r=b.customEndpoints??[],l=r.findIndex(re=>re.id===t);if(l===-1)throw new Error(s("modelManagement.toast.endpointNotFound"));const n=r[l],i=n.routing??{defaults:b.defaults,modelRoutes:{}};let h=i.validation;o?(h={...h??{},mode:"claude-code"},h.allowExperimentalBlocks===void 0&&(h.allowExperimentalBlocks=!0)):h=void 0;const v=h?{...i,validation:h}:{...i},R={...n,routing:v},U=[...r];U[l]=R;const K={...b,customEndpoints:U};await W.put("/api/config",K),P(K)}a({title:s(o?"modelManagement.toast.claudeValidationEnabled":"modelManagement.toast.claudeValidationDisabled"),variant:"success"}),m.refetch()}catch(r){const l=Re(r);a({title:s("modelManagement.toast.claudeValidationFailure",{message:l.message}),variant:"error"})}finally{ze(!1)}}},Et=(t,o)=>{T(r=>{const l=r[t]||[];return l.some(n=>n.source.trim()===o.trim())?r:{...r,[t]:[...l,{id:Be(),source:o,target:""}]}}),F(r=>({...r,[t]:null}))},Me=(t,o,r,l)=>{T(n=>({...n,[t]:(n[t]||[]).map(i=>i.id===o?{...i,[r]:l}:i)})),F(n=>({...n,[t]:null}))},Ct=(t,o)=>{T(r=>({...r,[t]:(r[t]||[]).filter(l=>l.id!==o)})),F(r=>({...r,[t]:null}))},St=t=>{var r,l;if(!b)return;const o=j.find(n=>n.id===t);if(o){const n=((r=o.routing)==null?void 0:r.modelRoutes)??{};T(i=>({...i,[t]:J(n)}))}else{const n=b.endpointRouting??{},i=t,h=i==="anthropic"?b.modelRoutes??{}:{},v=((l=n[i])==null?void 0:l.modelRoutes)??h;T(R=>({...R,[t]:J(v)}))}F(n=>({...n,[t]:null}))},Rt=async t=>{var l;if(!te())return;const o=ae[t]||[],r={};for(const n of o){const i=n.source.trim(),h=n.target.trim();if(!(!i&&!h)){if(!i||!h){F(v=>({...v,[t]:s("settings.validation.routePair")}));return}if(r[i]){F(v=>({...v,[t]:s("settings.validation.routeDuplicate",{model:i})}));return}r[i]=h}}F(n=>({...n,[t]:null})),me(t);try{const n=j.find(i=>i.id===t);if(n){const i={...n.routing||{},modelRoutes:r,defaults:((l=n.routing)==null?void 0:l.defaults)||b.defaults};await ge.update(t,{routing:i}),c.invalidateQueries({queryKey:["custom-endpoints"]}),a({title:s("modelManagement.toast.routesSaved"),variant:"success"})}else{const i=b.endpointRouting?{...b.endpointRouting}:{},h=t,v=i[h]??{defaults:b.defaults,modelRoutes:h==="anthropic"?b.modelRoutes??{}:{}},R={...v,defaults:v.defaults??b.defaults,modelRoutes:r},U={...i,[h]:R},K={...b,endpointRouting:U,modelRoutes:h==="anthropic"?r:b.modelRoutes??{}};await W.put("/api/config",K),P(K),a({title:s("modelManagement.toast.routesSaved"),variant:"success"}),m.refetch()}T(i=>({...i,[t]:J(r)}))}catch(n){a({title:s("modelManagement.toast.routesSaveFailure",{message:n instanceof Error?n.message:"unknown"}),variant:"error"})}finally{me(null)}},Pt=()=>e.jsxs("section",{className:tt,children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("h2",{className:"text-xl font-bold text-slate-800 dark:text-slate-100",children:s("providers.title")}),e.jsx("p",{className:"text-sm text-slate-600 dark:text-slate-400",children:s("providers.description")})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("div",{className:Kt.default,children:s("providers.count",{count:ut})}),e.jsx("button",{type:"button",className:q,onClick:()=>m.refetch(),disabled:m.isFetching,children:m.isFetching?s("common.actions.refreshing"):s("providers.actions.refresh")}),e.jsx("button",{type:"button",className:oe,onClick:gt,children:s("providers.actions.add")})]})]}),m.isPending||!b&&m.isFetching?e.jsx("section",{className:"flex min-h-[200px] items-center justify-center rounded-3xl border border-slate-200/50 bg-gradient-to-br from-white/80 to-white/70 text-sm text-slate-600 dark:border-slate-700/50 dark:from-slate-900/80 dark:to-slate-900/70 dark:text-slate-400 backdrop-blur-lg",children:s("common.loading")}):H.length===0?e.jsx("section",{className:"rounded-3xl border border-dashed border-slate-300/60 bg-gradient-to-br from-slate-50/80 to-white/70 p-12 text-center text-sm text-slate-600 dark:border-slate-600/60 dark:from-slate-900/80 dark:to-slate-800/70 dark:text-slate-400 backdrop-blur-lg",children:e.jsxs("div",{className:"flex flex-col items-center gap-4",children:[e.jsx("div",{className:"rounded-2xl bg-slate-200/50 p-4 dark:bg-slate-700/50",children:e.jsx("svg",{className:"h-8 w-8 text-slate-400 dark:text-slate-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4"})})}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-slate-700 dark:text-slate-300",children:s("providers.emptyState")}),e.jsx("p",{className:"mt-2 text-xs text-slate-500 dark:text-slate-400",children:s("providers.emptyStateSub",{default:"点击上方按钮添加您的第一个提供商"})})]})]})}):e.jsx("div",{className:"grid gap-6 md:grid-cols-2 xl:grid-cols-3",children:H.map(t=>e.jsxs("article",{className:"group flex h-full flex-col gap-5 rounded-3xl border border-slate-200/50 bg-gradient-to-br from-white/85 via-white/80 to-white/75 p-6 shadow-lg shadow-slate-200/30 backdrop-blur-md transition-all duration-300 hover:border-slate-200/70 hover:shadow-xl hover:shadow-slate-200/50 hover:-translate-y-1 dark:border-slate-700/50 dark:from-slate-900/85 dark:via-slate-900/80 dark:to-slate-900/75 dark:shadow-2xl dark:shadow-slate-900/40 dark:hover:border-slate-600/70 dark:hover:bg-slate-900/90",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-2xl bg-gradient-to-br from-blue-500 via-blue-600 to-indigo-600 text-white shadow-lg shadow-blue-500/30",children:e.jsx("span",{className:"text-lg font-bold",children:(t.label||t.id).charAt(0).toUpperCase()})}),e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h3",{className:"text-lg font-bold text-slate-800 dark:text-slate-100",children:t.label||t.id}),t.type?e.jsx(Yt,{type:t.type}):null]}),e.jsxs("p",{className:"text-xs text-slate-500 dark:text-slate-400",children:["ID: ",t.id]})]})]}),e.jsxs("div",{className:"mt-3 space-y-1",children:[e.jsx("p",{className:"text-xs text-slate-600 dark:text-slate-400 font-medium",children:"Base URL:"}),e.jsx("p",{className:"text-xs font-mono text-slate-700 dark:text-slate-300 bg-slate-100/50 dark:bg-slate-800/50 rounded-lg px-2 py-1 break-all",children:t.baseUrl})]})]}),e.jsx("div",{className:"flex flex-col gap-2",children:t.defaultModel?e.jsx("div",{className:st.success,children:s("providers.card.defaultModel",{model:mt.get(t.id)??t.defaultModel})}):e.jsx("div",{className:st.info,children:s("providers.card.noDefault")})})]}),e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("h4",{className:"text-xs font-bold uppercase tracking-[0.15em] text-slate-600 dark:text-slate-300",children:s("providers.card.modelsTitle")}),t.models&&t.models.length>0?e.jsx("div",{className:"flex flex-wrap gap-2",children:t.models.map(o=>e.jsxs("div",{className:"flex items-center gap-2 rounded-xl border border-slate-200/60 bg-gradient-to-r from-slate-50/80 to-slate-100/70 px-3 py-1.5 text-xs dark:border-slate-700/60 dark:from-slate-800/60 dark:to-slate-700/50 backdrop-blur-sm transition-all duration-200 hover:border-slate-300/70 hover:bg-slate-100/80 dark:hover:border-slate-600/70 dark:hover:bg-slate-700/60",children:[e.jsx("div",{className:"h-1.5 w-1.5 rounded-full bg-blue-500"}),e.jsx("span",{className:"font-medium text-slate-700 dark:text-slate-200",children:lt(o)})]},o.id))}):e.jsx("div",{className:"rounded-xl border border-dashed border-slate-300/50 bg-slate-50/50 px-4 py-3 text-xs text-slate-500 dark:border-slate-600/50 dark:bg-slate-800/30 dark:text-slate-400",children:s("providers.card.noModels")})]}),e.jsxs("footer",{className:"mt-auto flex flex-wrap gap-3 pt-2 border-t border-slate-200/30 dark:border-slate-700/30",children:[e.jsx("button",{type:"button",className:q,onClick:()=>ft(t),children:s("providers.actions.edit")}),e.jsx("button",{type:"button",onClick:()=>jt(t),disabled:D===t.id,className:D===t.id?`${q} opacity-60 cursor-not-allowed`:q,children:D===t.id?s("common.actions.testingConnection"):s("providers.actions.test")}),e.jsx("button",{type:"button",className:$e,onClick:()=>Nt(t),children:s("providers.actions.delete")})]})]},t.id))})]}),Dt=t=>{const o=je[t],r=ye[t],l=u[t],n=w===t;return e.jsxs("div",{className:"rounded-2xl border border-dashed border-slate-300/60 bg-gradient-to-br from-slate-50/80 to-white/70 p-6 dark:border-slate-600/60 dark:from-slate-800/60 dark:to-slate-900/70 backdrop-blur-sm",children:[e.jsxs("div",{className:"flex flex-col gap-4 md:flex-row md:items-center md:justify-between",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("h3",{className:"text-base font-bold text-slate-800 dark:text-slate-100",children:s("modelManagement.presets.title")}),e.jsx("p",{className:"text-sm text-slate-600 dark:text-slate-400",children:s("modelManagement.presets.description")})]}),e.jsxs("div",{className:"flex flex-col gap-3 md:flex-row md:items-center",children:[e.jsx("input",{type:"text",value:r,onChange:i=>xt(t,i.target.value),placeholder:s("modelManagement.presets.namePlaceholder"),className:ce,disabled:n}),e.jsx("button",{type:"button",onClick:()=>ht(t),className:oe,disabled:n,children:s(n?"modelManagement.presets.saving":"modelManagement.presets.save")})]})]}),l?e.jsx("div",{className:"rounded-xl bg-red-50/80 border border-red-200/50 p-3 text-xs text-red-700 dark:bg-red-900/40 dark:border-red-800/50 dark:text-red-300 backdrop-blur-sm",children:l}):null,o.length===0?e.jsx("div",{className:"rounded-xl border border-slate-200/40 bg-slate-50/60 p-6 text-center text-sm text-slate-600 dark:border-slate-700/40 dark:bg-slate-800/40 dark:text-slate-400 backdrop-blur-sm",children:e.jsxs("div",{className:"flex flex-col items-center gap-3",children:[e.jsx("div",{className:"rounded-xl bg-slate-200/50 p-3 dark:bg-slate-700/50",children:e.jsx("svg",{className:"h-6 w-6 text-slate-400 dark:text-slate-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"})})}),e.jsx("p",{className:"font-medium text-slate-700 dark:text-slate-300",children:s("modelManagement.presets.empty")})]})}):e.jsx("div",{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-3",children:o.map(i=>{const h=(S==null?void 0:S.endpoint)===t&&(S==null?void 0:S.name)===i.name,v=($==null?void 0:$.endpoint)===t&&($==null?void 0:$.name)===i.name;return e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-slate-200/50 bg-gradient-to-r from-white/90 to-white/80 px-4 py-3 text-sm shadow-sm backdrop-blur-sm transition-all duration-200 hover:border-slate-300/70 hover:bg-white/95 hover:shadow-md dark:border-slate-700/50 dark:from-slate-900/90 dark:to-slate-900/80 dark:hover:border-slate-600/70 dark:hover:bg-slate-900/95",children:[e.jsx("span",{className:"truncate font-medium text-slate-700 dark:text-slate-200",children:i.name}),e.jsxs("div",{className:"flex items-center gap-2 flex-shrink-0",children:[e.jsx("button",{type:"button",onClick:()=>bt(t,i),className:h||v?`${q} opacity-60 cursor-not-allowed text-xs px-2 py-1`:`${oe} text-xs px-2 py-1`,disabled:h||v,children:s(h?"modelManagement.presets.applying":"modelManagement.presets.apply")}),e.jsx("button",{type:"button",onClick:()=>pt(t,i),className:v||h?`${q} opacity-60 cursor-not-allowed text-xs px-2 py-1`:`${$e} text-xs px-2 py-1`,disabled:v||h,children:s(v?"modelManagement.presets.deleting":"modelManagement.presets.delete")})]})]},i.name)})})]})},Ot=t=>{var Ee;const o=ae[t]||[],r=De[t],l=d.find(M=>M.key===t),i=((Ee=l==null?void 0:l.protocols)==null?void 0:Ee.includes("anthropic"))??t==="anthropic"?zt:Qt,h=Oe===t,v=(l==null?void 0:l.label)??s(`modelManagement.tabs.${t}`),R=(l==null?void 0:l.isSystem)===!1?l.description:s(`settings.routing.descriptionByEndpoint.${t}`),U=`route-source-${t}`,K=`route-target-${t}`,re=Gt(t,j),_=Wt(t,b,j),le=re&&(_==null?void 0:_.mode)==="claude-code";return e.jsxs("section",{className:tt,children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("h2",{className:"text-xl font-bold text-slate-800 dark:text-slate-100",children:s("settings.routing.titleByEndpoint",{endpoint:v})}),e.jsx("p",{className:"max-w-3xl text-sm text-slate-600 dark:text-slate-400",children:R}),e.jsx("p",{className:"max-w-3xl text-xs text-slate-500 dark:text-slate-400",children:s("settings.routing.wildcardHint")})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx("button",{type:"button",onClick:()=>wt(t),className:q,disabled:h,children:s("settings.routing.add")}),e.jsx("button",{type:"button",onClick:()=>St(t),className:q,disabled:h,children:s("common.actions.reset")}),e.jsx("button",{type:"button",onClick:()=>Rt(t),className:oe,disabled:h,children:s(h?"common.actions.saving":"modelManagement.actions.saveRoutes")})]})]}),re&&e.jsx("div",{className:"mt-6 rounded-xl border border-blue-200/60 bg-blue-50/60 p-4 dark:border-blue-500/40 dark:bg-blue-900/30 backdrop-blur-sm",children:e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("span",{className:"text-sm font-semibold text-blue-700 dark:text-blue-200",children:s("modelManagement.claudeValidation.title")}),e.jsx("p",{className:"text-xs text-blue-600/80 dark:text-blue-200/80",children:s("modelManagement.claudeValidation.description")})]}),e.jsxs("label",{className:"inline-flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",className:"h-4 w-4 rounded border-blue-300 text-blue-600 focus:ring-blue-500",checked:!!le,onChange:M=>Mt(t,M.target.checked),disabled:qe}),e.jsx("span",{className:"text-xs font-medium text-blue-700 dark:text-blue-200",children:s(qe?"common.actions.saving":"modelManagement.claudeValidation.toggleLabel")})]})]}),e.jsx("span",{className:`text-xs font-semibold ${le?"text-emerald-600 dark:text-emerald-300":"text-slate-500 dark:text-slate-400"}`,children:s(le?"modelManagement.claudeValidation.statusEnabled":"modelManagement.claudeValidation.statusDisabled")})]})}),Dt(t),r?e.jsx("div",{className:"rounded-xl bg-red-50/80 border border-red-200/50 p-4 text-sm text-red-700 dark:bg-red-900/40 dark:border-red-800/50 dark:text-red-300 backdrop-blur-sm",children:r}):null,o.length===0?e.jsx("div",{className:"rounded-xl border border-dashed border-slate-300/60 bg-gradient-to-br from-slate-50/80 to-white/70 p-12 text-center text-sm text-slate-600 dark:border-slate-600/60 dark:from-slate-800/60 dark:to-slate-900/70 dark:text-slate-400 backdrop-blur-sm",children:e.jsxs("div",{className:"flex flex-col items-center gap-4",children:[e.jsx("div",{className:"rounded-2xl bg-slate-200/50 p-4 dark:bg-slate-700/50",children:e.jsx("svg",{className:"h-8 w-8 text-slate-400 dark:text-slate-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l4.553 2.276A1 1 0 0021 18.382V7.618a1 1 0 00-.553-.894L15 4m0 13V4m0 0L9 7"})})}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-slate-700 dark:text-slate-300",children:s("settings.routing.empty")}),e.jsx("p",{className:"mt-2 text-xs text-slate-500 dark:text-slate-400",children:s("settings.routing.emptySub",{default:"点击上方按钮添加路由规则"})})]})]})}):e.jsx("div",{className:"space-y-4",children:o.map((M,Ce)=>e.jsxs("div",{className:"rounded-xl border border-slate-200/50 bg-gradient-to-r from-white/90 to-white/85 p-4 shadow-sm backdrop-blur-sm transition-all duration-200 hover:border-slate-300/70 hover:bg-white/95 hover:shadow-md dark:border-slate-700/50 dark:from-slate-900/90 dark:to-slate-900/85 dark:hover:border-slate-600/70 dark:hover:bg-slate-900/95",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-blue-100 text-blue-600 dark:bg-blue-900/40 dark:text-blue-300",children:e.jsx("span",{className:"text-sm font-bold",children:Ce+1})}),e.jsx("span",{className:"text-sm font-medium text-slate-700 dark:text-slate-300",children:"路由规则"})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)_auto]",children:[e.jsx("div",{className:"space-y-2",children:e.jsxs("label",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-bold uppercase tracking-[0.15em] text-slate-600 dark:text-slate-300",children:s("settings.routing.source")}),e.jsx("input",{type:"text",value:M.source,onChange:pe=>Me(t,M.id,"source",pe.target.value),className:ce,placeholder:"claude-3.5-sonnet",list:U,disabled:h})]})}),e.jsx("div",{className:"space-y-2",children:e.jsxs("label",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-bold uppercase tracking-[0.15em] text-slate-600 dark:text-slate-300",children:s("settings.routing.target")}),(()=>{const pe=M.target.trim(),Ye=Qe.some(G=>G.value===pe)?pe:"__custom";return e.jsxs(e.Fragment,{children:[e.jsxs("select",{value:Ye,onChange:G=>{const Xe=G.target.value;Xe==="__custom"?Me(t,M.id,"target",pe):Me(t,M.id,"target",Xe)},className:ct,disabled:h,children:[e.jsx("option",{value:"__custom",children:s("settings.routing.customTargetOption")}),Qe.map(G=>e.jsx("option",{value:G.value,children:G.label},`${K}-${G.value}`))]}),Ye==="__custom"&&e.jsx("input",{type:"text",value:M.target,onChange:G=>Me(t,M.id,"target",G.target.value),className:ce,placeholder:"providerId:modelId",disabled:h})]})})()]})}),e.jsx("div",{className:"flex items-end",children:e.jsx("button",{type:"button",className:$e,onClick:()=>Ct(t,M.id),disabled:h,children:s("settings.routing.remove")})})]})]},M.id))}),e.jsx("div",{className:"rounded-xl border border-slate-200/40 bg-gradient-to-r from-slate-50/80 to-white/70 p-4 dark:border-slate-700/40 dark:from-slate-800/60 dark:to-slate-900/70 backdrop-blur-sm",children:e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("span",{className:"text-xs font-bold uppercase tracking-[0.15em] text-slate-600 dark:text-slate-300",children:s("settings.routing.suggested")}),e.jsx("div",{className:"flex flex-wrap gap-2",children:i.map(M=>e.jsx("button",{type:"button",onClick:()=>Et(t,M),className:q,disabled:h,children:M},`${t}-${M}`))})]})}),e.jsx("datalist",{id:U,children:i.map(M=>e.jsx("option",{value:M},`${U}-${M}`))})]})};return e.jsxs("div",{className:"flex flex-col gap-8",children:[e.jsx("div",{className:It,children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-3",children:[e.jsx("h1",{className:"text-3xl font-bold bg-gradient-to-r from-slate-900 to-slate-700 bg-clip-text text-transparent dark:from-slate-100 dark:to-slate-300",children:s("modelManagement.title")}),e.jsx("p",{className:"text-base text-slate-600 dark:text-slate-400",children:s("modelManagement.description")})]}),e.jsxs("button",{onClick:()=>{ke(void 0),ve(!0)},className:oe,children:["+ ",s("modelManagement.addEndpoint")]})]})}),e.jsx("div",{className:"flex flex-wrap gap-4",children:d.map(t=>{const o=x===t.key;return e.jsxs("div",{className:"relative",children:[e.jsxs("button",{type:"button",onClick:()=>N(t.key),className:`flex min-w-[240px] flex-col gap-2 rounded-2xl border px-6 py-4 text-left transition-all duration-300 hover-lift ${o?"border-blue-500/30 bg-gradient-to-r from-blue-50 to-indigo-50 text-blue-700 shadow-lg shadow-blue-200/40 ring-1 ring-blue-500/20 dark:border-blue-400/30 dark:from-blue-900/40 dark:to-indigo-900/30 dark:text-blue-100 dark:shadow-xl dark:shadow-blue-500/20 dark:ring-blue-400/20":"border-slate-200/50 bg-white/80 hover:bg-white/90 hover:shadow-md hover:shadow-slate-200/30 dark:border-slate-700/50 dark:bg-slate-900/80 dark:hover:bg-slate-900/90 dark:hover:shadow-lg dark:hover:shadow-slate-900/30"}`,children:[e.jsx("span",{className:"text-base font-bold",children:t.label}),e.jsx("span",{className:"text-sm text-slate-600 dark:text-slate-400",children:t.description})]}),t.canDelete&&e.jsx("button",{onClick:r=>{r.stopPropagation(),kt(t.key)},className:"absolute -top-2 -right-2 h-6 w-6 rounded-full bg-red-500 text-white hover:bg-red-600 flex items-center justify-center text-xs shadow-md",title:s("common.delete"),children:"×"})]},t.key)})}),x==="providers"?Pt():Ot(x),e.jsx(qt,{open:I,mode:B,provider:B==="edit"?y:void 0,existingProviderIds:H.map(t=>t.id).filter(t=>B==="edit"&&y?t!==y.id:!0),onClose:()=>{O(!1),E(void 0),V("create")},onSubmit:vt}),e.jsx(Xt,{open:fe,endpoint:ue,onClose:()=>{ve(!1),ke(void 0)},onSuccess:()=>{c.invalidateQueries({queryKey:["custom-endpoints"]})}}),e.jsx(Jt,{open:Ne,provider:Ue,options:be,preservedExtras:He,usePreset:we,onPresetChange:Le,onConfirm:yt,onClose:Je})]})}function Jt({open:s,provider:a,options:c,usePreset:m,preservedExtras:p,onPresetChange:j,onConfirm:d,onClose:x}){const{t:N}=Pe();return!s||!a?null:e.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[e.jsx("div",{className:"absolute inset-0 bg-slate-900/60 backdrop-blur-sm",onClick:x,"aria-hidden":"true"}),e.jsxs("div",{role:"dialog","aria-modal":"true","aria-labelledby":"connection-test-dialog-title",className:"relative z-10 w-full max-w-lg rounded-2xl border border-slate-200/70 bg-white/95 p-6 shadow-2xl backdrop-blur-xl animate-fade-in dark:border-slate-800/60 dark:bg-slate-900/95",children:[e.jsxs("header",{className:"mb-4 space-y-1",children:[e.jsx("h2",{id:"connection-test-dialog-title",className:"text-lg font-semibold text-slate-900 dark:text-slate-100",children:N("providers.testDialog.title")}),e.jsx("p",{className:"text-sm text-slate-500 dark:text-slate-400",children:N("providers.testDialog.subtitle",{name:a.label||a.id})})]}),e.jsx("p",{className:"mb-5 text-sm leading-relaxed text-slate-600 dark:text-slate-300",children:N("providers.testDialog.description")}),e.jsx("div",{className:"space-y-3",children:e.jsxs("label",{className:"flex items-start gap-3 rounded-xl border border-slate-200 bg-white/90 p-4 shadow-sm transition hover:border-blue-200 hover:bg-blue-50/70 dark:border-slate-700 dark:bg-slate-800/70 dark:hover:border-blue-500/60 dark:hover:bg-slate-800",children:[e.jsx("input",{type:"checkbox",className:"mt-1 h-4 w-4 rounded border-slate-300 text-blue-600 focus:ring-blue-500",checked:m,onChange:b=>j(b.target.checked)}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("span",{className:"text-sm font-semibold text-slate-800 dark:text-slate-100",children:N("providers.testDialog.presetLabel")}),e.jsx("p",{className:"text-xs leading-relaxed text-slate-500 dark:text-slate-400",children:N("providers.testDialog.presetDescription")}),e.jsxs("details",{className:"rounded-lg bg-slate-50/60 px-3 py-2 text-xs text-slate-600 transition dark:bg-slate-800/50 dark:text-slate-300",children:[e.jsx("summary",{className:"cursor-pointer text-blue-600 hover:underline dark:text-blue-300",children:N("providers.testDialog.presetPreviewSummary")}),e.jsx("div",{className:"mt-2 grid gap-1",children:c.map(b=>e.jsxs("code",{className:"rounded bg-white/80 px-2 py-1 text-[11px] text-slate-700 shadow-sm dark:bg-slate-900/60 dark:text-slate-200",children:[b.key,": ",b.value]},b.key))})]})]})]})}),Object.keys(p).length>0?e.jsxs("div",{className:"mt-6 rounded-xl border border-slate-200 bg-slate-50/80 p-4 text-xs text-slate-600 dark:border-slate-700 dark:bg-slate-800/60 dark:text-slate-300",children:[e.jsx("p",{className:"mb-2 font-semibold text-slate-700 dark:text-slate-200",children:N("providers.testDialog.preservedInfo")}),e.jsx("div",{className:"grid gap-2",children:Object.entries(p).map(([b,P])=>e.jsxs("code",{className:"rounded bg-white/70 px-2 py-1 text-[11px] text-slate-700 shadow-sm dark:bg-slate-900/70 dark:text-slate-200",children:[b,": ",P]},b))})]}):null,e.jsxs("footer",{className:"mt-6 flex justify-end gap-3",children:[e.jsx("button",{type:"button",onClick:x,className:q,children:N("providers.testDialog.cancel")}),e.jsx("button",{type:"button",onClick:()=>{d()},className:oe,children:N("providers.testDialog.primary")})]})]})]})}function lt(s){return s.label&&s.label.trim().length>0?`${s.label} (${s.id})`:s.id}function Yt({type:s}){const a={openai:{label:"OpenAI",color:"bg-green-100 text-green-700 dark:bg-green-900/40 dark:text-green-300"},deepseek:{label:"DeepSeek",color:"bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-300"},huawei:{label:"华为云",color:"bg-red-100 text-red-700 dark:bg-red-900/40 dark:text-red-300"},kimi:{label:"Kimi",color:"bg-purple-100 text-purple-700 dark:bg-purple-900/40 dark:text-purple-300"},anthropic:{label:"Anthropic",color:"bg-indigo-100 text-indigo-700 dark:bg-indigo-900/40 dark:text-indigo-300"},custom:{label:"Custom",color:"bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300"}},{label:c,color:m}=a[s]||a.custom;return e.jsx("span",{className:`rounded-full ${m} px-2.5 py-1 text-xs font-semibold shadow-sm`,children:c})}function Xt({open:s,endpoint:a,onClose:c,onSuccess:m}){const{t:p}=Pe(),{pushToast:j}=it(),[d,x]=g.useState({id:"",label:"",paths:[{path:"",protocol:"openai-auto"}],enabled:!0});g.useEffect(()=>{if(a){let y;a.paths&&a.paths.length>0?y=a.paths:a.path&&a.protocol?y=[{path:a.path,protocol:a.protocol}]:y=[{path:"",protocol:"openai-auto"}],x({id:a.id,label:a.label,paths:y,enabled:a.enabled!==!1})}else x({id:"",label:"",paths:[{path:"",protocol:"openai-auto"}],enabled:!0})},[a,s]);const N=at({mutationFn:ge.create,onSuccess:()=>{j({title:p("modelManagement.createEndpointSuccess"),variant:"success"}),m(),c()},onError:y=>{const E=Re(y);j({title:p("modelManagement.createEndpointError",{error:E.message}),variant:"error"})}}),b=at({mutationFn:y=>ge.update(y.id,y.updates),onSuccess:()=>{j({title:p("modelManagement.updateEndpointSuccess"),variant:"success"}),m(),c()},onError:y=>{const E=Re(y);j({title:p("modelManagement.updateEndpointError",{error:E.message}),variant:"error"})}}),P=()=>{x({...d,paths:[...d.paths,{path:"",protocol:"anthropic"}]})},I=y=>{if(d.paths.length===1){j({title:p("modelManagement.atLeastOnePath"),variant:"error"});return}const E=d.paths.filter((D,L)=>L!==y);x({...d,paths:E})},O=(y,E,D)=>{const L=[...d.paths];L[y]={...L[y],[E]:D},x({...d,paths:L})},B=y=>{if(y.preventDefault(),!d.id.trim()||!d.label.trim()){j({title:p("modelManagement.endpointValidationError"),variant:"error"});return}for(const D of d.paths)if(!D.path.trim()){j({title:p("modelManagement.pathValidationError"),variant:"error"});return}const E=d.paths.map(D=>({path:D.path.trim(),protocol:D.protocol}));a?b.mutate({id:a.id,updates:{label:d.label.trim(),paths:E,enabled:d.enabled}}):N.mutate({id:d.id.trim(),label:d.label.trim(),paths:E,enabled:d.enabled})},V=N.isPending||b.isPending;return s?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"fixed inset-0 bg-black/50 dark:bg-black/70 z-40 transition-opacity",onClick:c}),e.jsx("div",{className:"fixed inset-y-0 right-0 w-full max-w-md bg-white dark:bg-gray-900 shadow-xl z-50 overflow-y-auto",children:e.jsxs("div",{className:"flex flex-col h-full",children:[e.jsxs("div",{className:"flex items-center justify-between p-6 border-b border-gray-200 dark:border-gray-800",children:[e.jsx("h2",{className:"text-xl font-semibold text-gray-900 dark:text-gray-100",children:p(a?"modelManagement.editEndpoint":"modelManagement.createEndpoint")}),e.jsx("button",{onClick:c,className:"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300",children:e.jsx("svg",{className:"h-6 w-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M6 18L18 6M6 6l12 12"})})})]}),e.jsxs("form",{onSubmit:B,className:"flex-1 p-6 space-y-6",children:[e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[p("modelManagement.endpointId")," ",e.jsx("span",{className:"text-red-500",children:"*"})]}),e.jsx("input",{type:"text",value:d.id,onChange:y=>x({...d,id:y.target.value}),className:ce,placeholder:p("modelManagement.endpointIdPlaceholder"),disabled:!!a,required:!0}),e.jsx("p",{className:"mt-1 text-xs text-gray-500 dark:text-gray-400",children:p("modelManagement.endpointIdHint")})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-2",children:[p("modelManagement.endpointLabel")," ",e.jsx("span",{className:"text-red-500",children:"*"})]}),e.jsx("input",{type:"text",value:d.label,onChange:y=>x({...d,label:y.target.value}),className:ce,placeholder:p("modelManagement.endpointLabelPlaceholder"),required:!0})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsxs("label",{className:"block text-sm font-medium text-gray-700 dark:text-gray-300",children:[p("modelManagement.endpointPaths")," ",e.jsx("span",{className:"text-red-500",children:"*"})]}),e.jsxs("button",{type:"button",onClick:P,className:"text-sm text-blue-600 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300",children:["+ ",p("modelManagement.addPath")]})]}),e.jsx("div",{className:"space-y-3",children:d.paths.map((y,E)=>e.jsxs("div",{className:"p-3 border border-gray-200 dark:border-gray-700 rounded-lg space-y-2",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"flex-1 space-y-2",children:[e.jsx("input",{type:"text",value:y.path,onChange:D=>O(E,"path",D.target.value),className:ce,placeholder:p("modelManagement.endpointPathPlaceholder"),required:!0}),e.jsxs("select",{value:y.protocol,onChange:D=>O(E,"protocol",D.target.value),className:ct,required:!0,children:[e.jsx("option",{value:"anthropic",children:p("modelManagement.protocolAnthropic")}),e.jsx("option",{value:"openai-auto",children:p("modelManagement.protocolOpenAI")})]})]}),d.paths.length>1&&e.jsx("button",{type:"button",onClick:()=>I(E),className:"text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 mt-1",title:p("modelManagement.removePath"),children:e.jsx("svg",{className:"h-5 w-5",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})})})]}),E===0&&e.jsx("p",{className:"text-xs text-gray-500 dark:text-gray-400",children:p("modelManagement.endpointPathHint")})]},E))})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("input",{type:"checkbox",id:"enabled",checked:d.enabled,onChange:y=>x({...d,enabled:y.target.checked}),className:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-blue-500 dark:border-gray-700 dark:bg-gray-800"}),e.jsx("label",{htmlFor:"enabled",className:"text-sm text-gray-700 dark:text-gray-300",children:p("modelManagement.endpointEnabled")})]}),!a&&e.jsx("div",{className:"rounded-lg bg-blue-50 dark:bg-blue-900/20 p-4",children:e.jsx("p",{className:"text-sm text-blue-800 dark:text-blue-300",children:p("modelManagement.endpointRoutingHint")})})]}),e.jsxs("div",{className:"flex gap-3 p-6 border-t border-gray-200 dark:border-gray-800",children:[e.jsx("button",{type:"button",onClick:c,className:`${q} flex-1`,disabled:V,children:p("common.cancel")}),e.jsx("button",{type:"submit",onClick:B,className:`${oe} flex-1`,disabled:V,children:p(V?"common.saving":a?"common.save":"common.create")})]})]})})]}):null}export{as as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e,d as s,a6 as u,m,a7 as h,G as f,a8 as g,a9 as o,J as p}from"./index-dFe_7qSp.js";function j({icon:a,title:r,description:l,badge:d,actions:n,className:i,disableAnimation:t,variant:x="default"}){const c=x==="plain"?h:f;return e.jsxs("div",{className:s(c,!t&&"animate-slide-up",i),children:[e.jsxs("div",{className:"flex flex-1 flex-wrap items-start gap-6",children:[a?e.jsx("div",{className:"grid h-14 w-14 place-items-center rounded-2xl bg-gradient-to-br from-blue-600/15 to-indigo-600/10 text-blue-600 shadow-lg shadow-blue-200/30 ring-1 ring-blue-500/20 backdrop-blur-sm dark:from-blue-500/25 dark:to-indigo-500/15 dark:text-blue-200 dark:shadow-xl dark:shadow-blue-500/20 dark:ring-blue-400/20",children:a}):null,e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-4",children:[e.jsx("h1",{className:"text-3xl font-bold tracking-tight text-slate-900 dark:text-slate-50 gradient-text",children:r}),d?e.jsx("span",{className:s(u,"shadow-md"),children:d}):null]}),l?e.jsx("div",{className:s(m,"max-w-3xl text-base leading-relaxed"),children:l}):null]})]}),n?e.jsx("div",{className:"flex shrink-0 flex-wrap items-center gap-4",children:n}):null]})}function N({title:a,description:r,actions:l,className:d,contentClassName:n,children:i,disableAnimation:t,variant:x="default"}){const c=x==="plain"?o:p;return e.jsxs("section",{className:s(c,!t&&"animate-slide-up",d),children:[(a||r||l)&&e.jsxs("div",{className:"mb-6 flex flex-wrap items-center justify-between gap-6",children:[e.jsxs("div",{className:"space-y-3",children:[typeof a=="string"?e.jsx("h2",{className:s(g,"text-base font-bold"),children:a}):a,r?e.jsx("div",{className:s(m,"max-w-3xl text-sm leading-relaxed"),children:r}):null]}),l?e.jsx("div",{className:"flex shrink-0 items-center gap-3",children:l}):null]}),e.jsx("div",{className:s("flex flex-col gap-6",n),children:i})]})}export{j as P,N as a};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{c as se,u as be,a as fe,r as m,j as e,d as n,V as ke,L as Y,b as T,k as B,H as Z,N as b,m as y,M as ee}from"./index-dFe_7qSp.js";import{u as te}from"./useApiQuery-i7GI_aGQ.js";import{P as ye,a as P}from"./PageSection-BJJ735Qk.js";import{C as Ne}from"./copy-DMW-t8h3.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 O=se("AlertCircle",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/**
|
|
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 je=se("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]),ve=[{value:"fatal",labelKey:"fatal"},{value:"error",labelKey:"error"},{value:"warn",labelKey:"warn"},{value:"info",labelKey:"info"},{value:"debug",labelKey:"debug"},{value:"trace",labelKey:"trace"}];function Ee(){const{t}=be(),{pushToast:x}=fe(),u=te(["config","info"],{url:"/api/config/info",method:"GET"}),k=te(["auth","web"],{url:"/api/auth/web",method:"GET"}),[l,_]=m.useState(null),[D,ae]=m.useState(""),[r,c]=m.useState({port:"",host:"",logRetentionDays:"",storeRequestPayloads:!0,storeResponsePayloads:!0,logLevel:"info",requestLogging:!0,responseLogging:!0,bodyLimitMb:"10",enableRoutingFallback:!1,httpEnabled:!0,httpPort:"4100",httpHost:"127.0.0.1",httpsEnabled:!1,httpsPort:"4443",httpsHost:"127.0.0.1",httpsKeyPath:"",httpsCertPath:"",httpsCaPath:""}),[h,G]=m.useState({}),[K,I]=m.useState(!1),[Q,W]=m.useState(!1),[z,$]=m.useState(!1),[d,J]=m.useState(null),[i,v]=m.useState({enabled:!1,username:"",password:"",confirmPassword:""}),[C,A]=m.useState({}),[V,U]=m.useState(!1),re=m.useMemo(()=>{if(!l)return null;const s=l.defaults;if(!s)return null;const a=[];return s.completion&&a.push(t("settings.defaults.completion",{model:s.completion})),s.reasoning&&a.push(t("settings.defaults.reasoning",{model:s.reasoning})),s.background&&a.push(t("settings.defaults.background",{model:s.background})),a.length>0?a.join(" | "):t("settings.defaults.none")},[l,t]),X=m.useMemo(()=>i.enabled?d!=null&&d.hasPassword?i.username.trim()!==((d==null?void 0:d.username)??""):!0:!1,[i.enabled,i.username,d]);m.useEffect(()=>{var s,a,p,g,f,L,R,E,F,S,q;if(u.data){_(u.data.config),ae(u.data.path);const H=u.data.config.storePayloads,w=N=>typeof N=="boolean"?N:typeof H=="boolean"?H:!0,o=u.data.config;c({port:String(o.port??((s=o.http)==null?void 0:s.port)??""),host:o.host??((a=o.http)==null?void 0:a.host)??"127.0.0.1",logRetentionDays:String(o.logRetentionDays??30),storeRequestPayloads:w(o.storeRequestPayloads),storeResponsePayloads:w(o.storeResponsePayloads),logLevel:o.logLevel??"info",requestLogging:o.requestLogging!==!1,responseLogging:o.responseLogging??o.requestLogging!==!1,bodyLimitMb:(()=>{const N=o.bodyLimit;return typeof N=="number"&&Number.isFinite(N)&&N>0?String(Math.max(1,Math.round(N/(1024*1024)))):"10"})(),enableRoutingFallback:o.enableRoutingFallback===!0,httpEnabled:((p=o.http)==null?void 0:p.enabled)!==!1,httpPort:String(((g=o.http)==null?void 0:g.port)??o.port??4100),httpHost:((f=o.http)==null?void 0:f.host)??o.host??"127.0.0.1",httpsEnabled:((L=o.https)==null?void 0:L.enabled)===!0,httpsPort:String(((R=o.https)==null?void 0:R.port)??4443),httpsHost:((E=o.https)==null?void 0:E.host)??o.host??"127.0.0.1",httpsKeyPath:((F=o.https)==null?void 0:F.keyPath)??"",httpsCertPath:((S=o.https)==null?void 0:S.certPath)??"",httpsCaPath:((q=o.https)==null?void 0:q.caPath)??""})}},[u.data]),m.useEffect(()=>{k.data&&(J(k.data),v({enabled:k.data.enabled,username:k.data.username??"",password:"",confirmPassword:""}),A({}))},[k.data]),m.useEffect(()=>{u.isError&&u.error&&x({title:t("settings.toast.loadFailure",{message:u.error.message}),variant:"error"})},[u.isError,u.error,x,t]),m.useEffect(()=>{k.isError&&k.error&&x({title:t("settings.toast.authLoadFailure",{message:k.error.message}),variant:"error"})},[k.isError,k.error,x,t]);const M=s=>a=>{c(p=>({...p,[s]:a}))},le=()=>{const s={};if(!r.httpEnabled&&!r.httpsEnabled&&(s.protocol="至少需要启用 HTTP 或 HTTPS 协议"),r.httpEnabled){const f=Number(r.httpPort);(!Number.isFinite(f)||f<1||f>65535)&&(s.httpPort="HTTP 端口必须在 1-65535 之间")}if(r.httpsEnabled){const f=Number(r.httpsPort);(!Number.isFinite(f)||f<1||f>65535)&&(s.httpsPort="HTTPS 端口必须在 1-65535 之间"),(!r.httpsKeyPath||!r.httpsCertPath)&&(s.protocol="HTTPS 已启用但缺少证书路径,请手动配置受信任的证书")}const a=Number(r.port);(!Number.isFinite(a)||a<1||a>65535)&&(s.port=t("settings.validation.port"));const p=Number(r.logRetentionDays);(!Number.isFinite(p)||p<1||p>365)&&(s.logRetentionDays=t("settings.validation.retention"));const g=Number(r.bodyLimitMb);return(!Number.isFinite(g)||g<1||g>2048)&&(s.bodyLimitMb=t("settings.validation.bodyLimit")),G(s),Object.keys(s).length===0},ne=()=>{const s={},a=i.username.trim(),p=d?a!==(d.username??""):!0,g=i.enabled&&(!(d!=null&&d.hasPassword)||p);return i.enabled&&!a&&(s.username=t("settings.auth.validation.username")),i.password&&i.password.length<6&&(s.password=t("settings.auth.validation.minLength")),g&&!i.password&&(s.password=t("settings.auth.validation.passwordRequired")),(i.password||i.confirmPassword)&&i.password!==i.confirmPassword&&(s.confirmPassword=t("settings.auth.validation.confirmMismatch")),A(s),Object.keys(s).length===0},oe=async()=>{var s,a,p,g,f,L,R,E,F,S,q,H;if(!l){x({title:t("settings.toast.loadFailure",{message:t("settings.toast.missingConfig")}),variant:"error"});return}if(le()){I(!0);try{const w=Number(r.port),o=Number(r.logRetentionDays),N=Number(r.bodyLimitMb),j={...l,http:{enabled:r.httpEnabled,port:Number(r.httpPort),host:r.httpHost.trim()||"127.0.0.1"},https:{enabled:r.httpsEnabled,port:Number(r.httpsPort),host:r.httpsHost.trim()||"127.0.0.1",keyPath:r.httpsKeyPath.trim(),certPath:r.httpsCertPath.trim(),caPath:r.httpsCaPath.trim()||void 0},port:w,host:r.host.trim()||void 0,logRetentionDays:o,storeRequestPayloads:r.storeRequestPayloads,storeResponsePayloads:r.storeResponsePayloads,logLevel:r.logLevel,requestLogging:r.requestLogging,responseLogging:r.responseLogging,bodyLimit:Math.max(1,Math.floor(N*1024*1024)),enableRoutingFallback:r.enableRoutingFallback},{webAuth:we,...ge}=j;await T.put("/api/config",ge),_({...j,webAuth:l.webAuth});const ue=((s=l.http)==null?void 0:s.enabled)!==((a=j.http)==null?void 0:a.enabled)||((p=l.http)==null?void 0:p.port)!==((g=j.http)==null?void 0:g.port)||((f=l.https)==null?void 0:f.enabled)!==((L=j.https)==null?void 0:L.enabled)||((R=l.https)==null?void 0:R.port)!==((E=j.https)==null?void 0:E.port)||((F=l.https)==null?void 0:F.keyPath)!==((S=j.https)==null?void 0:S.keyPath)||((q=l.https)==null?void 0:q.certPath)!==((H=j.https)==null?void 0:H.certPath);x(ue?{title:"✅ 配置已保存!请执行 cc-gw restart --daemon 重启服务使协议配置生效",variant:"success"}:{title:t("settings.toast.saveSuccess"),variant:"success"}),u.refetch()}catch(w){x({title:t("settings.toast.saveFailure",{message:w instanceof Error?w.message:"unknown"}),variant:"error"})}finally{I(!1)}}},ie=()=>{l&&(c({port:String(l.port??""),host:l.host??"",logRetentionDays:String(l.logRetentionDays??30),storeRequestPayloads:typeof l.storeRequestPayloads=="boolean"?l.storeRequestPayloads:typeof l.storePayloads=="boolean"?l.storePayloads:!0,storeResponsePayloads:typeof l.storeResponsePayloads=="boolean"?l.storeResponsePayloads:typeof l.storePayloads=="boolean"?l.storePayloads:!0,logLevel:l.logLevel??"info",requestLogging:l.requestLogging!==!1,responseLogging:l.responseLogging??l.requestLogging!==!1,bodyLimitMb:(()=>{const s=l.bodyLimit;return typeof s=="number"&&Number.isFinite(s)&&s>0?String(Math.max(1,Math.round(s/(1024*1024)))):"10"})(),enableRoutingFallback:l.enableRoutingFallback===!0}),G({}))},de=async()=>{var s;if(ne()){U(!0);try{const a={enabled:i.enabled,username:i.username.trim()||void 0};i.password&&(a.password=i.password);const g=(s=(await T.post("/api/auth/web",a)).data)==null?void 0:s.auth;g&&(J(g),v({enabled:g.enabled,username:g.username??"",password:"",confirmPassword:""}),A({})),x({title:t("settings.auth.toast.success"),variant:"success"}),k.refetch()}catch(a){const p=a instanceof Error?a.message:"unknown";x({title:t("settings.auth.toast.failure",{message:p}),variant:"error"})}finally{U(!1)}}},ce=()=>{d&&(v({enabled:d.enabled,username:d.username??"",password:"",confirmPassword:""}),A({}))},pe=async()=>{if(!D){x({title:t("settings.toast.copyFailure",{message:t("settings.file.unknown")}),variant:"error"});return}try{await navigator.clipboard.writeText(D),x({title:t("settings.toast.copySuccess"),variant:"success"})}catch(s){x({title:t("settings.toast.copyFailure",{message:s instanceof Error?s.message:"unknown"}),variant:"error"})}},xe=async()=>{W(!0);try{const a=(await T.post("/api/logs/cleanup")).data.deleted??0;x({title:a>0?t("settings.toast.cleanupSuccess",{count:a}):t("settings.toast.cleanupNone"),variant:"success"})}catch(s){x({title:t("settings.toast.cleanupFailure",{message:s instanceof Error?s.message:"unknown"}),variant:"error"})}finally{W(!1)}},he=async()=>{$(!0);try{const s=await T.post("/api/logs/clear"),{deleted:a,metricsCleared:p}=s.data;x({title:t("settings.toast.clearAllSuccess",{logs:a,metrics:p}),variant:"success"})}catch(s){x({title:t("settings.toast.clearAllFailure",{message:s instanceof Error?s.message:"unknown"}),variant:"error"})}finally{$(!1)}},me=u.isPending||!l&&u.isFetching;return e.jsxs("div",{className:"flex flex-col gap-8",children:[e.jsx(ye,{icon:e.jsx(ke,{className:"h-6 w-6","aria-hidden":"true"}),title:t("settings.title"),description:t("settings.description"),actions:l?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("button",{type:"button",onClick:ie,className:n(B,"h-10 rounded-full px-4"),disabled:K,children:t("common.actions.reset")}),e.jsx("button",{type:"button",onClick:oe,className:n(Z,"h-10 rounded-full px-4"),disabled:K,children:t(K?"common.actions.saving":"common.actions.save")})]}):null}),me?e.jsx(P,{className:"flex min-h-[220px] items-center justify-center",children:e.jsx(Y,{})}):l?e.jsxs(e.Fragment,{children:[e.jsxs(P,{title:t("settings.sections.basics"),contentClassName:"grid w-full gap-5 md:grid-cols-2",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.fields.port")}),e.jsx("input",{type:"number",min:1,max:65535,value:r.port,onChange:s=>M("port")(s.target.value),className:n(b,"h-11"),"aria-invalid":!!h.port}),h.port?e.jsx("span",{className:"text-xs font-medium text-red-500 dark:text-red-300",children:h.port}):null]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.fields.host")}),e.jsx("input",{value:r.host,onChange:s=>M("host")(s.target.value),placeholder:t("settings.fields.hostPlaceholder"),className:n(b,"h-11")})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.fields.retention")}),e.jsx("input",{type:"number",min:1,max:365,value:r.logRetentionDays,onChange:s=>M("logRetentionDays")(s.target.value),className:n(b,"h-11"),"aria-invalid":!!h.logRetentionDays}),h.logRetentionDays?e.jsx("span",{className:"text-xs font-medium text-red-500 dark:text-red-300",children:h.logRetentionDays}):null]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.fields.bodyLimit")}),e.jsx("input",{type:"number",min:1,max:2048,value:r.bodyLimitMb,onChange:s=>M("bodyLimitMb")(s.target.value),className:n(b,"h-11"),"aria-invalid":!!h.bodyLimitMb}),e.jsx("p",{className:n(y,"text-[11px] leading-relaxed"),children:t("settings.fields.bodyLimitHint")}),h.bodyLimitMb?e.jsx("span",{className:"text-xs font-medium text-red-500 dark:text-red-300",children:h.bodyLimitMb}):null]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.fields.logLevel")}),e.jsx("select",{value:r.logLevel,onChange:s=>c(a=>({...a,logLevel:s.target.value})),className:"h-10",children:ve.map(s=>e.jsx("option",{value:s.value,children:t(`settings.fields.logLevelOption.${s.labelKey}`)},s.value))})]}),e.jsxs("div",{className:"md:col-span-2 grid gap-4 sm:grid-cols-2",children:[e.jsxs("label",{className:"flex items-start gap-3 rounded-2xl border border-slate-200/70 bg-white/80 px-4 py-3 shadow-sm shadow-slate-200/60 transition hover:border-slate-300 dark:border-slate-700/60 dark:bg-slate-900/70 dark:hover:border-slate-500/60",children:[e.jsx("input",{type:"checkbox",checked:r.storeRequestPayloads,onChange:s=>c(a=>({...a,storeRequestPayloads:s.target.checked})),className:"mt-1 h-4 w-4 rounded border-slate-300 text-blue-600 focus:ring-blue-400 dark:border-slate-600"}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("span",{className:"text-sm font-semibold text-slate-700 dark:text-slate-100",children:t("settings.fields.storeRequestPayloads")}),e.jsx("p",{className:n(y,"text-xs"),children:t("settings.fields.storeRequestPayloadsHint")})]})]}),e.jsxs("label",{className:"flex items-start gap-3 rounded-2xl border border-slate-200/70 bg-white/80 px-4 py-3 shadow-sm shadow-slate-200/60 transition hover:border-slate-300 dark:border-slate-700/60 dark:bg-slate-900/70 dark:hover:border-slate-500/60",children:[e.jsx("input",{type:"checkbox",checked:r.storeResponsePayloads,onChange:s=>c(a=>({...a,storeResponsePayloads:s.target.checked})),className:"mt-1 h-4 w-4 rounded border-slate-300 text-blue-600 focus:ring-blue-400 dark:border-slate-600"}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("span",{className:"text-sm font-semibold text-slate-700 dark:text-slate-100",children:t("settings.fields.storeResponsePayloads")}),e.jsx("p",{className:n(y,"text-xs"),children:t("settings.fields.storeResponsePayloadsHint")})]})]}),e.jsxs("label",{className:"flex items-start gap-3 rounded-2xl border border-slate-200/70 bg-white/80 px-4 py-3 shadow-sm shadow-slate-200/60 transition hover:border-slate-300 dark:border-slate-700/60 dark:bg-slate-900/70 dark:hover:border-slate-500/60",children:[e.jsx("input",{type:"checkbox",checked:r.requestLogging,onChange:s=>c(a=>({...a,requestLogging:s.target.checked})),className:"mt-1 h-4 w-4 rounded border-slate-300 text-blue-600 focus:ring-blue-400 dark:border-slate-600"}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("span",{className:"text-sm font-semibold text-slate-700 dark:text-slate-100",children:t("settings.fields.requestLogging")}),e.jsx("p",{className:n(y,"text-xs"),children:t("settings.fields.requestLoggingHint")})]})]}),e.jsxs("label",{className:"flex items-start gap-3 rounded-2xl border border-slate-200/70 bg-white/80 px-4 py-3 shadow-sm shadow-slate-200/60 transition hover:border-slate-300 dark:border-slate-700/60 dark:bg-slate-900/70 dark:hover:border-slate-500/60",children:[e.jsx("input",{type:"checkbox",checked:r.responseLogging,onChange:s=>c(a=>({...a,responseLogging:s.target.checked})),className:"mt-1 h-4 w-4 rounded border-slate-300 text-blue-600 focus:ring-blue-400 dark:border-slate-600"}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("span",{className:"text-sm font-semibold text-slate-700 dark:text-slate-100",children:t("settings.fields.responseLogging")}),e.jsx("p",{className:n(y,"text-xs"),children:t("settings.fields.responseLoggingHint")})]})]}),e.jsxs("label",{className:"flex items-start gap-3 rounded-2xl border border-amber-200/70 bg-amber-50/80 px-4 py-3 shadow-sm shadow-amber-200/60 transition hover:border-amber-300 dark:border-amber-700/60 dark:bg-amber-900/30 dark:hover:border-amber-500/60",children:[e.jsx("input",{type:"checkbox",checked:r.enableRoutingFallback,onChange:s=>c(a=>({...a,enableRoutingFallback:s.target.checked})),className:"mt-1 h-4 w-4 rounded border-amber-300 text-amber-600 focus:ring-amber-400 dark:border-amber-500"}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("span",{className:"text-sm font-semibold text-amber-700 dark:text-amber-200",children:t("settings.fields.enableRoutingFallback")}),e.jsx("p",{className:n(y,"text-xs text-amber-800/80 dark:text-amber-200/80"),children:t("settings.fields.enableRoutingFallbackHint")})]})]})]}),e.jsxs("div",{className:"md:col-span-2 rounded-2xl border border-slate-200/70 bg-white/80 px-4 py-3 text-sm text-slate-700 shadow-sm shadow-slate-200/60 dark:border-slate-700/60 dark:bg-slate-900/70 dark:text-slate-200",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.fields.defaults")}),e.jsx("p",{className:"mt-2 text-sm",children:re??t("settings.defaults.none")})]})]}),e.jsxs(P,{title:t("settings.sections.protocol"),description:t("settings.protocol.description"),contentClassName:"space-y-6",children:[e.jsx("div",{className:"rounded-2xl border border-amber-200/70 bg-amber-50/80 px-4 py-3 shadow-sm dark:border-amber-700/60 dark:bg-amber-900/30",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(O,{className:"h-5 w-5 text-amber-600 dark:text-amber-400 mt-0.5 flex-shrink-0"}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-sm font-semibold text-amber-800 dark:text-amber-200",children:t("settings.protocol.restartWarning")}),e.jsx("p",{className:"text-xs text-amber-700 dark:text-amber-300",children:t("settings.protocol.restartHint")}),e.jsx("code",{className:"block rounded-lg bg-amber-100/60 px-3 py-2 text-xs font-mono text-amber-900 dark:bg-amber-900/40 dark:text-amber-100",children:"cc-gw restart --daemon"}),e.jsx("p",{className:"text-xs text-amber-600 dark:text-amber-400",children:t("settings.protocol.restartTip")})]})]})}),h.protocol&&e.jsxs("div",{className:"rounded-2xl border border-red-200/70 bg-red-50/80 px-4 py-3 text-sm text-red-700 dark:border-red-700/60 dark:bg-red-900/30 dark:text-red-200",children:[e.jsx(O,{className:"inline h-4 w-4 mr-2"}),h.protocol]}),e.jsxs("div",{className:"rounded-2xl border border-blue-200/70 bg-blue-50/50 p-5 dark:border-blue-700/60 dark:bg-blue-900/20",children:[e.jsxs("label",{className:"flex cursor-pointer items-start gap-3 mb-4",children:[e.jsx("input",{type:"checkbox",checked:r.httpEnabled,onChange:s=>c(a=>({...a,httpEnabled:s.target.checked})),className:"mt-1 h-5 w-5 rounded border-blue-300 text-blue-600 focus:ring-blue-400 dark:border-blue-600"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("span",{className:"text-sm font-semibold text-blue-800 dark:text-blue-100",children:t("settings.protocol.http.enable")}),e.jsx("p",{className:n(y,"text-xs mt-1"),children:t("settings.protocol.http.hint")})]})]}),r.httpEnabled&&e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2 mt-4 pt-4 border-t border-blue-200 dark:border-blue-700",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.protocol.http.port")}),e.jsx("input",{type:"number",min:1,max:65535,value:r.httpPort,onChange:s=>c(a=>({...a,httpPort:s.target.value})),className:n(b,"h-11"),"aria-invalid":!!h.httpPort}),h.httpPort&&e.jsx("span",{className:"text-xs font-medium text-red-500 dark:text-red-300",children:h.httpPort})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.protocol.http.host")}),e.jsx("input",{value:r.httpHost,onChange:s=>c(a=>({...a,httpHost:s.target.value})),placeholder:"127.0.0.1",className:n(b,"h-11")})]})]})]}),e.jsxs("div",{className:"rounded-2xl border border-green-200/70 bg-green-50/50 p-5 dark:border-green-700/60 dark:bg-green-900/20",children:[e.jsxs("label",{className:"flex cursor-pointer items-start gap-3 mb-4",children:[e.jsx("input",{type:"checkbox",checked:r.httpsEnabled,onChange:s=>c(a=>({...a,httpsEnabled:s.target.checked})),className:"mt-1 h-5 w-5 rounded border-green-300 text-green-600 focus:ring-green-400 dark:border-green-600"}),e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm font-semibold text-green-800 dark:text-green-100",children:t("settings.protocol.https.enable")}),e.jsx(je,{className:"h-4 w-4 text-green-600 dark:text-green-300"})]}),e.jsx("p",{className:n(y,"text-xs mt-1"),children:t("settings.protocol.https.hint")})]})]}),r.httpsEnabled&&e.jsxs("div",{className:"space-y-4 mt-4 pt-4 border-t border-green-200 dark:border-green-700",children:[e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.protocol.https.port")}),e.jsx("input",{type:"number",min:1,max:65535,value:r.httpsPort,onChange:s=>c(a=>({...a,httpsPort:s.target.value})),className:n(b,"h-11"),"aria-invalid":!!h.httpsPort}),h.httpsPort&&e.jsx("span",{className:"text-xs font-medium text-red-500 dark:text-red-300",children:h.httpsPort})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.protocol.https.host")}),e.jsx("input",{value:r.httpsHost,onChange:s=>c(a=>({...a,httpsHost:s.target.value})),placeholder:"127.0.0.1",className:n(b,"h-11")})]})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.protocol.https.keyPath")}),e.jsx("input",{value:r.httpsKeyPath,onChange:s=>c(a=>({...a,httpsKeyPath:s.target.value})),placeholder:"~/.cc-gw/certs/key.pem",className:n(b,"h-11 font-mono text-xs")})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.protocol.https.certPath")}),e.jsx("input",{value:r.httpsCertPath,onChange:s=>c(a=>({...a,httpsCertPath:s.target.value})),placeholder:"~/.cc-gw/certs/cert.pem",className:n(b,"h-11 font-mono text-xs")})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.protocol.https.caPath")}),e.jsx("input",{value:r.httpsCaPath,onChange:s=>c(a=>({...a,httpsCaPath:s.target.value})),placeholder:"留空则不使用",className:n(b,"h-11 font-mono text-xs")})]}),e.jsx("div",{className:"rounded-xl border border-amber-200/70 bg-amber-50/60 p-4 dark:border-amber-700/60 dark:bg-amber-900/20",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(O,{className:"h-5 w-5 text-amber-600 dark:text-amber-400 mt-0.5 flex-shrink-0"}),e.jsxs("div",{className:"space-y-2 flex-1",children:[e.jsx("p",{className:"text-sm font-semibold text-amber-800 dark:text-amber-200",children:t("settings.protocol.https.warning")}),e.jsxs("p",{className:"text-xs text-amber-700 dark:text-amber-300 leading-relaxed",children:[e.jsx("strong",{children:t("settings.protocol.https.invalidCert")}),t("settings.protocol.https.invalidCertDetail")]}),e.jsxs("p",{className:"text-xs text-amber-700 dark:text-amber-300 leading-relaxed",children:[e.jsx("strong",{children:t("settings.protocol.https.recommended")}),t("settings.protocol.https.recommendedDetail")]}),e.jsx("p",{className:"text-xs text-amber-600 dark:text-amber-400 leading-relaxed",children:t("settings.protocol.https.tip")})]})]})})]})]})]}),e.jsx(P,{title:t("settings.sections.security"),description:t("settings.auth.description"),contentClassName:"space-y-5",children:k.isPending&&!d?e.jsx("div",{className:"flex min-h-[120px] items-center justify-center",children:e.jsx(Y,{})}):e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"rounded-2xl border border-slate-200/70 bg-white/90 p-5 shadow-sm shadow-slate-200/50 transition dark:border-slate-700/60 dark:bg-slate-900/80 dark:shadow-slate-900/40",children:e.jsxs("label",{className:"flex cursor-pointer select-none items-start gap-3",children:[e.jsx("input",{type:"checkbox",checked:i.enabled,onChange:s=>v(a=>({...a,enabled:s.target.checked})),className:"mt-1 h-5 w-5 rounded border-slate-300 bg-white text-blue-600 shadow-sm transition focus:ring-blue-400/40 dark:border-slate-600 dark:bg-slate-900 dark:text-blue-200"}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("span",{className:"text-sm font-semibold text-slate-800 dark:text-slate-100",children:t("settings.auth.enable")}),e.jsx("p",{className:n(y,"text-xs leading-relaxed"),children:t("settings.auth.enableHint")}),e.jsxs("div",{className:"flex flex-wrap gap-2 text-[11px] font-medium text-slate-500 dark:text-slate-400",children:[e.jsx("span",{className:"rounded-full bg-slate-100/90 px-3 py-1 shadow-sm shadow-slate-200/40 dark:bg-slate-800/70",children:"/ui"}),e.jsx("span",{className:"rounded-full bg-slate-100/90 px-3 py-1 shadow-sm shadow-slate-200/40 dark:bg-slate-800/70",children:"/api/*"}),e.jsx("span",{className:"rounded-full bg-slate-100/90 px-3 py-1 shadow-sm shadow-slate-200/40 dark:bg-slate-800/70",children:"Cookie Session"})]})]})]})}),e.jsxs("div",{className:"grid gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(0,0.85fr)]",children:[e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs("div",{className:"flex flex-col gap-2 sm:col-span-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.auth.username")}),e.jsx("input",{value:i.username,onChange:s=>v(a=>({...a,username:s.target.value})),placeholder:t("settings.auth.usernamePlaceholder"),className:n(b,"h-11 font-medium")}),C.username?e.jsx("span",{className:"text-xs font-medium text-red-500 dark:text-red-300",children:C.username}):null]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.auth.password")}),e.jsx("input",{type:"password",value:i.password,disabled:!i.enabled,onChange:s=>v(a=>({...a,password:s.target.value})),placeholder:t("settings.auth.passwordPlaceholder"),className:n(b,"h-11 disabled:cursor-not-allowed disabled:bg-slate-100 dark:disabled:bg-slate-900/40")}),C.password?e.jsx("span",{className:"text-xs font-medium text-red-500 dark:text-red-300",children:C.password}):e.jsx("span",{className:n(y,"text-xs leading-relaxed"),children:t(X?"settings.auth.passwordHintRequired":"settings.auth.passwordHintOptional")})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("span",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-slate-400",children:t("settings.auth.confirmPassword")}),e.jsx("input",{type:"password",value:i.confirmPassword,disabled:!i.enabled,onChange:s=>v(a=>({...a,confirmPassword:s.target.value})),placeholder:t("settings.auth.confirmPasswordPlaceholder"),className:n(b,"h-11 disabled:cursor-not-allowed disabled:bg-slate-100 dark:disabled:bg-slate-900/40")}),C.confirmPassword?e.jsx("span",{className:"text-xs font-medium text-red-500 dark:text-red-300",children:C.confirmPassword}):null]})]}),e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"rounded-2xl border border-slate-200/70 bg-white/95 px-5 py-4 text-sm shadow-sm shadow-slate-200/40 dark:border-slate-700/60 dark:bg-slate-900/75 dark:text-slate-200 dark:shadow-slate-900/40",children:[e.jsx("div",{className:"text-xs font-semibold uppercase tracking-wide text-slate-500/90 dark:text-slate-400",children:t("settings.auth.status")}),e.jsx("div",{className:"mt-2 text-base font-semibold text-slate-800 dark:text-slate-100",children:d!=null&&d.enabled?t("settings.auth.statusEnabled"):t("settings.auth.statusDisabled")}),d!=null&&d.username?e.jsxs("div",{className:"mt-3 rounded-2xl bg-blue-50/80 px-3 py-2 text-xs font-medium text-blue-700 shadow-sm shadow-blue-200/40 dark:bg-blue-500/20 dark:text-blue-100",children:[t("settings.auth.username"),": ",d.username]}):null]}),e.jsx("div",{className:"rounded-2xl border border-slate-200/60 bg-slate-50/80 px-5 py-4 text-xs leading-relaxed text-slate-600 shadow-sm shadow-slate-200/40 dark:border-slate-700/50 dark:bg-slate-800/60 dark:text-slate-300",children:t(X?"settings.auth.passwordHintRequired":"settings.auth.passwordHintOptional")})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-3",children:[e.jsx("button",{type:"button",onClick:de,className:n(Z,"h-10 rounded-full px-6"),disabled:V,children:t(V?"common.actions.saving":"settings.auth.actions.save")}),e.jsx("button",{type:"button",onClick:ce,className:n(B,"h-10 rounded-full px-4"),disabled:V,children:t("common.actions.reset")})]})]})}),e.jsx(P,{title:t("settings.sections.configFile"),description:t("settings.file.description"),actions:e.jsxs("button",{type:"button",onClick:pe,className:n(B,"h-10 rounded-full px-4"),children:[e.jsx(Ne,{className:"h-4 w-4","aria-hidden":"true"}),t("common.actions.copy")]}),contentClassName:"gap-3",children:e.jsx("code",{className:"block break-all rounded-2xl border border-slate-200/60 bg-slate-100 px-4 py-3 text-xs text-slate-700 dark:border-slate-700/60 dark:bg-slate-900 dark:text-slate-200",children:D||t("settings.file.unknown")})}),e.jsxs(P,{title:t("settings.sections.cleanup"),description:t("settings.cleanup.description"),contentClassName:"flex flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsx("button",{type:"button",onClick:xe,className:n(ee,"px-5"),disabled:Q,children:t(Q?"common.actions.cleaning":"common.actions.cleanup")}),e.jsx("button",{type:"button",onClick:he,className:n(ee,"px-5 border-red-500/70 bg-red-600 text-white hover:bg-red-600/90 dark:border-red-500 dark:bg-red-500 dark:text-white"),disabled:z,children:t(z?"settings.cleanup.clearingAll":"settings.cleanup.clearAll")})]}),e.jsx("p",{className:"text-xs font-medium text-red-500 dark:text-red-300",children:t("settings.cleanup.clearAllWarning")})]})]}):e.jsx(P,{children:e.jsx("p",{className:"text-sm font-medium text-red-500 dark:text-red-300",children:t("settings.toast.missingConfig")})})]})}export{Ee as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as s,d as n,K as u}from"./index-dFe_7qSp.js";function c({variant:a,children:e,icon:r,className:t}){return s.jsxs("span",{className:n(u[a],t),children:[r||s.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-current","aria-hidden":"true"}),e]})}export{c as S};
|
|
@@ -1 +0,0 @@
|
|
|
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}.container{width:100%}@media (min-width: 475px){.container{max-width:475px}}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}@media (min-width: 1600px){.container{max-width:1600px}}@media (min-width: 1920px){.container{max-width:1920px}}.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}.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-2{right:-.5rem}.-top-2{top:-.5rem}.bottom-32{bottom:8rem}.left-0{left:0}.left-10{left:2.5rem}.right-0{right:0}.right-16{right:4rem}.right-6{right:1.5rem}.top-0{top:0}.top-20{top:5rem}.top-6{top:1.5rem}.top-full{top:100%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-12{margin-top:3rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-auto{margin-top:auto}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-36{height:9rem}.h-4{height:1rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-56{height:14rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-full{height:100%}.max-h-56{max-height:14rem}.max-h-64{max-height:16rem}.max-h-80{max-height:20rem}.max-h-\[60vh\]{max-height:60vh}.min-h-\[120px\]{min-height:120px}.min-h-\[200px\]{min-height:200px}.min-h-\[220px\]{min-height:220px}.min-h-\[320px\]{min-height:320px}.min-h-\[44px\]{min-height:44px}.min-h-\[96px\]{min-height:96px}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-4{width:1rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.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-full{width:100%}.min-w-\[240px\]{min-width:240px}.min-w-full{min-width:100%}.max-w-3xl{max-width:48rem}.max-w-\[1600px\]{max-width:1600px}.max-w-\[360px\]{max-width:360px}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.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 fade-in{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:fade-in .2s ease-out}@keyframes slide-down{0%{transform:translateY(-10px);opacity:0}to{transform:translateY(0);opacity:1}}.animate-slide-down{animation:slide-down .3s ease-out}@keyframes slide-up{0%{transform:translateY(10px);opacity:0}to{transform:translateY(0);opacity:1}}.animate-slide-up{animation:slide-up .3s ease-out}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-wait{cursor:wait}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-3{row-gap:.75rem}.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-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-slate-200>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(226 232 240 / var(--tw-divide-opacity, 1))}.divide-slate-200\/50>:not([hidden])~:not([hidden]){border-color:#e2e8f080}.divide-slate-200\/60>:not([hidden])~:not([hidden]){border-color:#e2e8f099}.divide-slate-200\/70>:not([hidden])~:not([hidden]){border-color:#e2e8f0b3}.divide-slate-200\/80>:not([hidden])~:not([hidden]){border-color:#e2e8f0cc}.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-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-\[3px\]{border-width:3px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.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\/70{border-color:#fde68ab3}.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-blue-200\/40{border-color:#bfdbfe66}.border-blue-200\/50{border-color:#bfdbfe80}.border-blue-200\/60{border-color:#bfdbfe99}.border-blue-200\/70{border-color:#bfdbfeb3}.border-blue-300{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.border-blue-400{--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.border-blue-500\/30{border-color:#3b82f64d}.border-blue-600{--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.border-current{border-color:currentColor}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-gray-200{--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity, 1))}.border-green-200{--tw-border-opacity: 1;border-color:rgb(187 247 208 / var(--tw-border-opacity, 1))}.border-green-200\/60{border-color:#bbf7d099}.border-green-200\/70{border-color:#bbf7d0b3}.border-green-300{--tw-border-opacity: 1;border-color:rgb(134 239 172 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-200\/50{border-color:#fecaca80}.border-red-200\/70{border-color:#fecacab3}.border-red-300\/50{border-color:#fca5a580}.border-red-500\/70{border-color:#ef4444b3}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-200\/20{border-color:#e2e8f033}.border-slate-200\/30{border-color:#e2e8f04d}.border-slate-200\/40{border-color:#e2e8f066}.border-slate-200\/50{border-color:#e2e8f080}.border-slate-200\/60{border-color:#e2e8f099}.border-slate-200\/70{border-color:#e2e8f0b3}.border-slate-300{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.border-slate-300\/50{border-color:#cbd5e180}.border-slate-300\/60{border-color:#cbd5e199}.border-t-blue-600{--tw-border-opacity: 1;border-top-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.border-t-transparent{border-top-color:transparent}.bg-amber-100{--tw-bg-opacity: 1;background-color:rgb(254 243 199 / var(--tw-bg-opacity, 1))}.bg-amber-100\/60{background-color:#fef3c799}.bg-amber-100\/80{background-color:#fef3c7cc}.bg-amber-50\/60{background-color:#fffbeb99}.bg-amber-50\/80{background-color:#fffbebcc}.bg-amber-500\/15{background-color:#f59e0b26}.bg-black\/50{background-color:#00000080}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-blue-100\/50{background-color:#dbeafe80}.bg-blue-100\/80{background-color:#dbeafecc}.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-50\/60{background-color:#eff6ff99}.bg-blue-50\/70{background-color:#eff6ffb3}.bg-blue-50\/80{background-color:#eff6ffcc}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/10{background-color:#3b82f61a}.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-current{background-color:currentColor}.bg-emerald-100\/80{background-color:#d1fae5cc}.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\/15{background-color:#10b98126}.bg-emerald-500\/20{background-color:#10b98133}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-100\/50{background-color:#dcfce780}.bg-green-50\/50{background-color:#f0fdf480}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-indigo-100{--tw-bg-opacity: 1;background-color:rgb(224 231 255 / var(--tw-bg-opacity, 1))}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-purple-500\/10{background-color:#a855f71a}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-100\/80{background-color:#fee2e2cc}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-50\/80{background-color:#fef2f2cc}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/15{background-color:#ef444426}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-rose-100{--tw-bg-opacity: 1;background-color:rgb(255 228 230 / var(--tw-bg-opacity, 1))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-100\/50{background-color:#f1f5f980}.bg-slate-100\/70{background-color:#f1f5f9b3}.bg-slate-100\/80{background-color:#f1f5f9cc}.bg-slate-100\/90{background-color:#f1f5f9e6}.bg-slate-200\/40{background-color:#e2e8f066}.bg-slate-200\/50{background-color:#e2e8f080}.bg-slate-200\/80{background-color:#e2e8f0cc}.bg-slate-300\/35{background-color:#cbd5e159}.bg-slate-50{--tw-bg-opacity: 1;background-color:rgb(248 250 252 / var(--tw-bg-opacity, 1))}.bg-slate-50\/30{background-color:#f8fafc4d}.bg-slate-50\/50{background-color:#f8fafc80}.bg-slate-50\/60{background-color:#f8fafc99}.bg-slate-50\/70{background-color:#f8fafcb3}.bg-slate-50\/80{background-color:#f8fafccc}.bg-slate-900\/60{background-color:#0f172a99}.bg-slate-900\/80{background-color:#0f172acc}.bg-slate-900\/90{background-color:#0f172ae6}.bg-slate-900\/95{background-color:#0f172af2}.bg-slate-950\/60{background-color:#02061799}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/50{background-color:#ffffff80}.bg-white\/60{background-color:#fff9}.bg-white\/70{background-color:#ffffffb3}.bg-white\/75{background-color:#ffffffbf}.bg-white\/80{background-color:#fffc}.bg-white\/90{background-color:#ffffffe6}.bg-white\/95{background-color:#fffffff2}.bg-\[radial-gradient\(circle_at_top\,_rgba\(15\,23\,42\,0\.08\)\,_transparent_55\%\)\]{background-image:radial-gradient(circle at top,rgba(15,23,42,.08),transparent 55%)}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.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-blue-50{--tw-gradient-from: #eff6ff var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-50\/80{--tw-gradient-from: rgb(239 246 255 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-50\/90{--tw-gradient-from: rgb(239 246 255 / .9) var(--tw-gradient-from-position);--tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-500{--tw-gradient-from: #3b82f6 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-blue-500\/20{--tw-gradient-from: rgb(59 130 246 / .2) 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-blue-600{--tw-gradient-from: #2563eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-blue-600\/15{--tw-gradient-from: rgb(37 99 235 / .15) var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-green-50\/80{--tw-gradient-from: rgb(240 253 244 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(240 253 244 / 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-slate-100{--tw-gradient-from: #f1f5f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(241 245 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-50\/80{--tw-gradient-from: rgb(248 250 252 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(248 250 252 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-900{--tw-gradient-from: #0f172a var(--tw-gradient-from-position);--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white\/80{--tw-gradient-from: rgb(255 255 255 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white\/85{--tw-gradient-from: rgb(255 255 255 / .85) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white\/90{--tw-gradient-from: rgb(255 255 255 / .9) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-white\/95{--tw-gradient-from: rgb(255 255 255 / .95) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-blue-600{--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #2563eb var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-slate-800{--tw-gradient-to: rgb(30 41 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #1e293b var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-white{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #fff var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-white\/60{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .6) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-white\/80{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .8) var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-white\/90{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .9) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-blue-700{--tw-gradient-to: #1d4ed8 var(--tw-gradient-to-position)}.to-emerald-50\/60{--tw-gradient-to: rgb(236 253 245 / .6) var(--tw-gradient-to-position)}.to-indigo-50{--tw-gradient-to: #eef2ff var(--tw-gradient-to-position)}.to-indigo-50\/60{--tw-gradient-to: rgb(238 242 255 / .6) var(--tw-gradient-to-position)}.to-indigo-500{--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.to-indigo-500\/20{--tw-gradient-to: rgb(99 102 241 / .2) var(--tw-gradient-to-position)}.to-indigo-600{--tw-gradient-to: #4f46e5 var(--tw-gradient-to-position)}.to-indigo-600\/10{--tw-gradient-to: rgb(79 70 229 / .1) var(--tw-gradient-to-position)}.to-purple-50\/80{--tw-gradient-to: rgb(250 245 255 / .8) var(--tw-gradient-to-position)}.to-red-100{--tw-gradient-to: #fee2e2 var(--tw-gradient-to-position)}.to-slate-100\/70{--tw-gradient-to: rgb(241 245 249 / .7) var(--tw-gradient-to-position)}.to-slate-200{--tw-gradient-to: #e2e8f0 var(--tw-gradient-to-position)}.to-slate-50{--tw-gradient-to: #f8fafc var(--tw-gradient-to-position)}.to-slate-700{--tw-gradient-to: #334155 var(--tw-gradient-to-position)}.to-white\/70{--tw-gradient-to: rgb(255 255 255 / .7) var(--tw-gradient-to-position)}.to-white\/75{--tw-gradient-to: rgb(255 255 255 / .75) var(--tw-gradient-to-position)}.to-white\/80{--tw-gradient-to: rgb(255 255 255 / .8) var(--tw-gradient-to-position)}.to-white\/85{--tw-gradient-to: rgb(255 255 255 / .85) var(--tw-gradient-to-position)}.to-white\/90{--tw-gradient-to: rgb(255 255 255 / .9) var(--tw-gradient-to-position)}.to-yellow-50{--tw-gradient-to: #fefce8 var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.p-0{padding:0}.p-1\.5{padding:.375rem}.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}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.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-10{padding-bottom:2.5rem}.pb-8{padding-bottom:2rem}.pr-10{padding-right:2.5rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-6{padding-top:1.5rem}.pt-9{padding-top:2.25rem}.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-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.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-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[0\.12em\]{letter-spacing:.12em}.tracking-\[0\.14em\]{letter-spacing:.14em}.tracking-\[0\.15em\]{letter-spacing:.15em}.tracking-\[0\.18em\]{letter-spacing:.18em}.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-800\/80{color:#92400ecc}.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-600\/80{color:#2563ebcc}.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-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-900{--tw-text-opacity: 1;color:rgb(6 78 59 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity, 1))}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-indigo-700{--tw-text-opacity: 1;color:rgb(67 56 202 / var(--tw-text-opacity, 1))}.text-purple-600{--tw-text-opacity: 1;color:rgb(147 51 234 / var(--tw-text-opacity, 1))}.text-purple-700{--tw-text-opacity: 1;color:rgb(126 34 206 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-red-900{--tw-text-opacity: 1;color:rgb(127 29 29 / var(--tw-text-opacity, 1))}.text-rose-800{--tw-text-opacity: 1;color:rgb(159 18 57 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-500\/90{color:#64748be6}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-800{--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1))}.text-slate-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-transparent{color:transparent}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-inner{--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / .05);--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-amber-200\/60{--tw-shadow-color: rgb(253 230 138 / .6);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-100\/40{--tw-shadow-color: rgb(219 234 254 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-100\/50{--tw-shadow-color: rgb(219 234 254 / .5);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-200\/30{--tw-shadow-color: rgb(191 219 254 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-200\/40{--tw-shadow-color: rgb(191 219 254 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-200\/50{--tw-shadow-color: rgb(191 219 254 / .5);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-500\/20{--tw-shadow-color: rgb(59 130 246 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-500\/30{--tw-shadow-color: rgb(59 130 246 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-blue-600\/30{--tw-shadow-color: rgb(37 99 235 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-emerald-500\/30{--tw-shadow-color: rgb(16 185 129 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-green-100\/50{--tw-shadow-color: rgb(220 252 231 / .5);--tw-shadow: var(--tw-shadow-colored)}.shadow-green-500\/30{--tw-shadow-color: rgb(34 197 94 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-red-200\/30{--tw-shadow-color: rgb(254 202 202 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-red-200\/40{--tw-shadow-color: rgb(254 202 202 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-200\/15{--tw-shadow-color: rgb(226 232 240 / .15);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-200\/20{--tw-shadow-color: rgb(226 232 240 / .2);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-200\/25{--tw-shadow-color: rgb(226 232 240 / .25);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-200\/30{--tw-shadow-color: rgb(226 232 240 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-200\/40{--tw-shadow-color: rgb(226 232 240 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-200\/50{--tw-shadow-color: rgb(226 232 240 / .5);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-200\/60{--tw-shadow-color: rgb(226 232 240 / .6);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-200\/70{--tw-shadow-color: rgb(226 232 240 / .7);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-400\/30{--tw-shadow-color: rgb(148 163 184 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-900\/30{--tw-shadow-color: rgb(15 23 42 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-900\/40{--tw-shadow-color: rgb(15 23 42 / .4);--tw-shadow: var(--tw-shadow-colored)}.ring-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-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-amber-500\/25{--tw-ring-color: rgb(245 158 11 / .25)}.ring-blue-200\/50{--tw-ring-color: rgb(191 219 254 / .5)}.ring-blue-400\/30{--tw-ring-color: rgb(96 165 250 / .3)}.ring-blue-500\/20{--tw-ring-color: rgb(59 130 246 / .2)}.ring-blue-500\/25{--tw-ring-color: rgb(59 130 246 / .25)}.ring-blue-500\/30{--tw-ring-color: rgb(59 130 246 / .3)}.ring-emerald-200\/50{--tw-ring-color: rgb(167 243 208 / .5)}.ring-emerald-500\/25{--tw-ring-color: rgb(16 185 129 / .25)}.ring-red-200\/50{--tw-ring-color: rgb(254 202 202 / .5)}.ring-red-500\/25{--tw-ring-color: rgb(239 68 68 / .25)}.ring-slate-200\/30{--tw-ring-color: rgb(226 232 240 / .3)}.ring-slate-200\/40{--tw-ring-color: rgb(226 232 240 / .4)}.ring-slate-200\/50{--tw-ring-color: rgb(226 232 240 / .5)}.ring-slate-200\/60{--tw-ring-color: rgb(226 232 240 / .6)}.blur-3xl{--tw-blur: blur(64px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-lg{--tw-backdrop-blur: blur(16px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-md{--tw-backdrop-blur: blur(12px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-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-shadow{transition-property:box-shadow;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}:root{color-scheme:light dark;--color-primary-50: 239 246 255;--color-primary-100: 219 234 254;--color-primary-200: 191 219 254;--color-primary-300: 147 197 253;--color-primary-400: 96 165 250;--color-primary-500: 59 130 246;--color-primary-600: 37 99 235;--color-primary-700: 29 78 216;--color-primary-800: 30 64 175;--color-primary-900: 30 58 138;--color-primary-950: 23 37 84;--glass-bg: rgba(255, 255, 255, .8);--glass-border: rgba(255, 255, 255, .2);--glass-shadow: rgba(0, 0, 0, .1)}:root,html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;min-height:100%}[data-theme=dark]{--glass-bg: rgba(15, 23, 42, .8);--glass-border: rgba(255, 255, 255, .1);--glass-shadow: rgba(0, 0, 0, .3)}html,body,#root{height:100%;width:100%;overflow-x:hidden;max-width:100vw;position:relative}body{min-height:100vh;background-image:linear-gradient(to bottom right,var(--tw-gradient-stops));--tw-gradient-from: #f8fafc var(--tw-gradient-from-position);--tw-gradient-to: rgb(248 250 252 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(239 246 255 / .3) var(--tw-gradient-via-position), var(--tw-gradient-to);--tw-gradient-to: rgb(238 242 255 / .2) var(--tw-gradient-to-position);--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1));-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}body:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}body{background-image:radial-gradient(circle at 25% 15%,rgba(59,130,246,.08),transparent 50%),radial-gradient(circle at 75% 10%,rgba(139,92,246,.06),transparent 45%),radial-gradient(circle at 50% 80%,rgba(236,72,153,.04),transparent 35%);background-attachment:fixed;background-size:100% 100%,80% 80%,60% 60%;background-color:#f8fafc;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;image-rendering:-webkit-optimize-contrast;image-rendering:crisp-edges}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;background-image:radial-gradient(rgba(148,163,184,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(148,163,184,.03) 1px,transparent 1px);background-size:32px 32px,32px 32px;opacity:.8;pointer-events:none}@media (prefers-color-scheme: dark){body{background-image:radial-gradient(circle at 25% 15%,rgba(59,130,246,.12),transparent 50%),radial-gradient(circle at 75% 10%,rgba(139,92,246,.1),transparent 45%),radial-gradient(circle at 50% 80%,rgba(236,72,153,.06),transparent 35%);background-color:#020617}body:before{background-image:radial-gradient(rgba(148,163,184,.04) 1px,transparent 1px),linear-gradient(90deg,rgba(148,163,184,.02) 1px,transparent 1px);opacity:.4}}input[type=text],input[type=number],input[type=search],input[type=email],input[type=url],input[type=date],input[type=time],input[type=datetime-local],input[type=password],select,textarea{border-radius:1rem;border-width:1px;border-color:#e2e8f080;background-color:#ffffffe6;padding:.75rem 1rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(30 41 59 / var(--tw-text-opacity, 1));--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);--tw-shadow-color: rgb(226 232 240 / .3);--tw-shadow: var(--tw-shadow-colored);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}input[type=text]:focus,input[type=number]:focus,input[type=search]:focus,input[type=email]:focus,input[type=url]:focus,input[type=date]:focus,input[type=time]:focus,input[type=datetime-local]:focus,input[type=password]:focus,select:focus,textarea:focus{border-color:#60a5fab3;--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1));--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);--tw-shadow-color: rgb(191 219 254 / .4);--tw-shadow: var(--tw-shadow-colored);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: rgb(96 165 250 / .2)}input[type=text]:is([data-theme=dark] *),input[type=number]:is([data-theme=dark] *),input[type=search]:is([data-theme=dark] *),input[type=email]:is([data-theme=dark] *),input[type=url]:is([data-theme=dark] *),input[type=date]:is([data-theme=dark] *),input[type=time]:is([data-theme=dark] *),input[type=datetime-local]:is([data-theme=dark] *),input[type=password]:is([data-theme=dark] *),select:is([data-theme=dark] *),textarea:is([data-theme=dark] *){border-color:#33415580;background-color:#0f172ae6;--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1));--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);--tw-shadow-color: rgb(15 23 42 / .3);--tw-shadow: var(--tw-shadow-colored)}input[type=text]:focus:is([data-theme=dark] *),input[type=number]:focus:is([data-theme=dark] *),input[type=search]:focus:is([data-theme=dark] *),input[type=email]:focus:is([data-theme=dark] *),input[type=url]:focus:is([data-theme=dark] *),input[type=date]:focus:is([data-theme=dark] *),input[type=time]:focus:is([data-theme=dark] *),input[type=datetime-local]:focus:is([data-theme=dark] *),input[type=password]:focus:is([data-theme=dark] *),select:focus:is([data-theme=dark] *),textarea:focus:is([data-theme=dark] *){border-color:#60a5fab3;--tw-ring-color: rgb(96 165 250 / .2)}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background-color:#f1f5f980}:is([data-theme=dark] *)::-webkit-scrollbar-track{background-color:#1e293b80}::-webkit-scrollbar-track{border-radius:10px}::-webkit-scrollbar-thumb{background-color:#cbd5e1b3}:is([data-theme=dark] *)::-webkit-scrollbar-thumb{background-color:#475569b3}::-webkit-scrollbar-thumb{border-radius:10px}::-webkit-scrollbar-thumb:hover{background-color:#94a3b8cc}:is([data-theme=dark] *)::-webkit-scrollbar-thumb:hover{background-color:#64748bcc}*: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: rgb(59 130 246 / .5);--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff}*:focus-visible:is([data-theme=dark] *){--tw-ring-offset-color: #020617}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.gradient-text{background-image:linear-gradient(to right,var(--tw-gradient-stops));--tw-gradient-from: #2563eb var(--tw-gradient-from-position);--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #9333ea var(--tw-gradient-to-position);-webkit-background-clip:text;background-clip:text;color:transparent}.gradient-text:is([data-theme=dark] *){--tw-gradient-from: #60a5fa var(--tw-gradient-from-position);--tw-gradient-to: rgb(96 165 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);--tw-gradient-to: #c084fc var(--tw-gradient-to-position)}.glass{backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);background:var(--glass-bg);border:1px solid var(--glass-border);box-shadow:0 8px 32px var(--glass-shadow)}.hover-lift{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;transition-timing-function:cubic-bezier(0,0,.2,1)}.hover-lift:hover{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}*{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s}::-moz-selection{background-color:#3b82f633;--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}::selection{background-color:#3b82f633;--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}:is([data-theme=dark] *)::-moz-selection{--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}:is([data-theme=dark] *)::selection{--tw-text-opacity: 1;color:rgb(219 234 254 / var(--tw-text-opacity, 1))}@media (min-resolution: 192dpi){.fine-detail{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}}@media (hover: none) and (pointer: coarse){.hover-lift:hover{transform:none}button,a,[role=button]{min-height:44px;min-width:44px}}.table-container{width:100%;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;transform:translateZ(0)}@supports (-webkit-appearance: none){.table-container{-webkit-overflow-scrolling:auto;scrollbar-width:auto}}.table-container::-webkit-scrollbar{height:12px!important;width:12px!important;display:block!important}.table-container::-webkit-scrollbar-track{background:#f1f5f9;border-radius:4px}.table-container::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}.table-container::-webkit-scrollbar-thumb:hover{background:#94a3b8}@media (prefers-color-scheme: dark){.table-container::-webkit-scrollbar-track{background:#1e293b}.table-container::-webkit-scrollbar-thumb{background:#475569}.table-container::-webkit-scrollbar-thumb:hover{background:#64748b}}.gpu-accelerated{will-change:opacity}.responsive-container{width:100%;max-width:1600px;margin:0 auto;padding:0 1rem}@media (min-width: 640px){.responsive-container{padding:0 2rem}}@media (min-width: 1921px){.responsive-container{max-width:1800px;padding:0 3rem}}.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\:-translate-y-1:hover{--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))}.hover\:border-amber-300:hover{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.hover\:border-blue-200:hover{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.hover\:border-blue-200\/60:hover{border-color:#bfdbfe99}.hover\:border-slate-200\/70:hover{border-color:#e2e8f0b3}.hover\:border-slate-300:hover{--tw-border-opacity: 1;border-color:rgb(203 213 225 / var(--tw-border-opacity, 1))}.hover\:border-slate-300\/70:hover{border-color:#cbd5e1b3}.hover\:bg-blue-50\/50:hover{background-color:#eff6ff80}.hover\:bg-blue-50\/70:hover{background-color:#eff6ffb3}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-emerald-500\/90:hover{background-color:#10b981e6}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-red-600:hover{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.hover\:bg-red-600\/90:hover{background-color:#dc2626e6}.hover\:bg-slate-100:hover{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-100\/80:hover{background-color:#f1f5f9cc}.hover\:bg-slate-200:hover{--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-300:hover{--tw-bg-opacity: 1;background-color:rgb(203 213 225 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-50\/70:hover{background-color:#f8fafcb3}.hover\:bg-slate-50\/80:hover{background-color:#f8fafccc}.hover\:bg-white:hover{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.hover\:bg-white\/80:hover{background-color:#fffc}.hover\:bg-white\/90:hover{background-color:#ffffffe6}.hover\:bg-white\/95:hover{background-color:#fffffff2}.hover\:bg-gradient-to-r:hover{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.hover\:from-blue-700:hover{--tw-gradient-from: #1d4ed8 var(--tw-gradient-from-position);--tw-gradient-to: rgb(29 78 216 / 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-white:hover{--tw-gradient-from: #fff var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.hover\:via-white\/95:hover{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(255 255 255 / .95) var(--tw-gradient-via-position), var(--tw-gradient-to)}.hover\:to-blue-800:hover{--tw-gradient-to: #1e40af var(--tw-gradient-to-position)}.hover\:to-red-200:hover{--tw-gradient-to: #fecaca var(--tw-gradient-to-position)}.hover\:to-white\/90:hover{--tw-gradient-to: rgb(255 255 255 / .9) var(--tw-gradient-to-position)}.hover\:text-blue-700:hover{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.hover\:text-gray-600:hover{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-red-700:hover{--tw-text-opacity: 1;color:rgb(185 28 28 / 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\:shadow-2xl:hover{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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)}.hover\:shadow-sm:hover{--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)}.hover\:shadow-xl:hover{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:shadow-blue-200\/40:hover{--tw-shadow-color: rgb(191 219 254 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-blue-600\/40:hover{--tw-shadow-color: rgb(37 99 235 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-red-200\/40:hover{--tw-shadow-color: rgb(254 202 202 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-slate-200\/30:hover{--tw-shadow-color: rgb(226 232 240 / .3);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-slate-200\/40:hover{--tw-shadow-color: rgb(226 232 240 / .4);--tw-shadow: var(--tw-shadow-colored)}.hover\:shadow-slate-200\/50:hover{--tw-shadow-color: rgb(226 232 240 / .5);--tw-shadow: var(--tw-shadow-colored)}.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:.375rem}.focus\:border-blue-300:focus{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.focus\:border-blue-400\/70:focus{border-color:#60a5fab3}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.focus\:bg-blue-600:focus{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.focus\:bg-white:focus{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.focus\:px-4:focus{padding-left:1rem;padding-right:1rem}.focus\:py-2:focus{padding-top:.5rem;padding-bottom:.5rem}.focus\:text-white:focus{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.focus\:shadow-md:focus{--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\:shadow-blue-200\/40:focus{--tw-shadow-color: rgb(191 219 254 / .4);--tw-shadow: var(--tw-shadow-colored)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring: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(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.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-amber-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(251 191 36 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-200:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(191 219 254 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-200\/50:focus{--tw-ring-color: rgb(191 219 254 / .5)}.focus\:ring-blue-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(96 165 250 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-400\/20:focus{--tw-ring-color: rgb(96 165 250 / .2)}.focus\:ring-blue-400\/30:focus{--tw-ring-color: rgb(96 165 250 / .3)}.focus\:ring-blue-400\/40:focus{--tw-ring-color: rgb(96 165 250 / .4)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.focus\:ring-blue-500\/30:focus{--tw-ring-color: rgb(59 130 246 / .3)}.focus\:ring-blue-500\/50:focus{--tw-ring-color: rgb(59 130 246 / .5)}.focus\:ring-green-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(74 222 128 / var(--tw-ring-opacity, 1))}.focus\:ring-red-500\/30:focus{--tw-ring-color: rgb(239 68 68 / .3)}.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}.dark\:divide-slate-700:is([data-theme=dark] *)>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(51 65 85 / var(--tw-divide-opacity, 1))}.dark\:divide-slate-700\/50:is([data-theme=dark] *)>:not([hidden])~:not([hidden]){border-color:#33415580}.dark\:divide-slate-700\/60:is([data-theme=dark] *)>:not([hidden])~:not([hidden]){border-color:#33415599}.dark\:divide-slate-700\/80:is([data-theme=dark] *)>:not([hidden])~:not([hidden]){border-color:#334155cc}.dark\:divide-slate-800\/60:is([data-theme=dark] *)>:not([hidden])~:not([hidden]){border-color:#1e293b99}.dark\:border-amber-500:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(245 158 11 / var(--tw-border-opacity, 1))}.dark\:border-amber-600\/60:is([data-theme=dark] *){border-color:#d9770699}.dark\:border-amber-700\/60:is([data-theme=dark] *){border-color:#b4530999}.dark\:border-blue-400:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(96 165 250 / var(--tw-border-opacity, 1))}.dark\:border-blue-400\/20:is([data-theme=dark] *){border-color:#60a5fa33}.dark\:border-blue-400\/30:is([data-theme=dark] *){border-color:#60a5fa4d}.dark\:border-blue-500\/30:is([data-theme=dark] *){border-color:#3b82f64d}.dark\:border-blue-500\/40:is([data-theme=dark] *){border-color:#3b82f666}.dark\:border-blue-600:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(37 99 235 / var(--tw-border-opacity, 1))}.dark\:border-blue-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity, 1))}.dark\:border-blue-700\/60:is([data-theme=dark] *){border-color:#1d4ed899}.dark\:border-blue-900\/30:is([data-theme=dark] *){border-color:#1e3a8a4d}.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-gray-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:border-gray-800:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(31 41 55 / var(--tw-border-opacity, 1))}.dark\:border-green-600:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity, 1))}.dark\:border-green-700:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(21 128 61 / var(--tw-border-opacity, 1))}.dark\:border-green-700\/60:is([data-theme=dark] *){border-color:#15803d99}.dark\:border-red-500:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.dark\:border-red-500\/30:is([data-theme=dark] *){border-color:#ef44444d}.dark\:border-red-500\/40:is([data-theme=dark] *){border-color:#ef444466}.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-700\/60:is([data-theme=dark] *){border-color:#b91c1c99}.dark\:border-red-800\/50:is([data-theme=dark] *){border-color:#991b1b80}.dark\:border-red-800\/70:is([data-theme=dark] *){border-color:#991b1bb3}.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-600\/50:is([data-theme=dark] *){border-color:#47556980}.dark\:border-slate-600\/60:is([data-theme=dark] *){border-color:#47556999}.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-700\/30:is([data-theme=dark] *){border-color:#3341554d}.dark\:border-slate-700\/40:is([data-theme=dark] *){border-color:#33415566}.dark\:border-slate-700\/50:is([data-theme=dark] *){border-color:#33415580}.dark\:border-slate-700\/60:is([data-theme=dark] *){border-color:#33415599}.dark\:border-slate-700\/70:is([data-theme=dark] *){border-color:#334155b3}.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-slate-800\/20:is([data-theme=dark] *){border-color:#1e293b33}.dark\:border-slate-800\/30:is([data-theme=dark] *){border-color:#1e293b4d}.dark\:border-slate-800\/40:is([data-theme=dark] *){border-color:#1e293b66}.dark\:border-slate-800\/50:is([data-theme=dark] *){border-color:#1e293b80}.dark\:border-slate-800\/60:is([data-theme=dark] *){border-color:#1e293b99}.dark\:border-t-blue-300:is([data-theme=dark] *){--tw-border-opacity: 1;border-top-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.dark\:bg-amber-500\/20:is([data-theme=dark] *){background-color:#f59e0b33}.dark\:bg-amber-800\/40:is([data-theme=dark] *){background-color:#92400e66}.dark\:bg-amber-900\/20:is([data-theme=dark] *){background-color:#78350f33}.dark\:bg-amber-900\/30:is([data-theme=dark] *){background-color:#78350f4d}.dark\:bg-amber-900\/40:is([data-theme=dark] *){background-color:#78350f66}.dark\:bg-black\/70:is([data-theme=dark] *){background-color:#000000b3}.dark\:bg-blue-500\/20:is([data-theme=dark] *){background-color:#3b82f633}.dark\:bg-blue-900\/20:is([data-theme=dark] *){background-color:#1e3a8a33}.dark\:bg-blue-900\/30:is([data-theme=dark] *){background-color:#1e3a8a4d}.dark\:bg-blue-900\/40:is([data-theme=dark] *){background-color:#1e3a8a66}.dark\:bg-emerald-500\/20:is([data-theme=dark] *){background-color:#10b98133}.dark\:bg-emerald-500\/30:is([data-theme=dark] *){background-color:#10b9814d}.dark\:bg-emerald-900\/40:is([data-theme=dark] *){background-color:#064e3b66}.dark\:bg-gray-800:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-900:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity, 1))}.dark\:bg-green-900\/20:is([data-theme=dark] *){background-color:#14532d33}.dark\:bg-green-900\/40:is([data-theme=dark] *){background-color:#14532d66}.dark\:bg-indigo-900\/40:is([data-theme=dark] *){background-color:#312e8166}.dark\:bg-purple-500\/20:is([data-theme=dark] *){background-color:#a855f733}.dark\:bg-purple-900\/40:is([data-theme=dark] *){background-color:#581c8766}.dark\:bg-red-500:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.dark\:bg-red-500\/15:is([data-theme=dark] *){background-color:#ef444426}.dark\:bg-red-500\/20:is([data-theme=dark] *){background-color:#ef444433}.dark\:bg-red-900\/30:is([data-theme=dark] *){background-color:#7f1d1d4d}.dark\:bg-red-900\/40:is([data-theme=dark] *){background-color:#7f1d1d66}.dark\:bg-rose-900\/40:is([data-theme=dark] *){background-color:#88133766}.dark\:bg-slate-700\/30:is([data-theme=dark] *){background-color:#3341554d}.dark\:bg-slate-700\/50:is([data-theme=dark] *){background-color:#33415580}.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\/20:is([data-theme=dark] *){background-color:#1e293b33}.dark\:bg-slate-800\/30:is([data-theme=dark] *){background-color:#1e293b4d}.dark\:bg-slate-800\/40:is([data-theme=dark] *){background-color:#1e293b66}.dark\:bg-slate-800\/50:is([data-theme=dark] *){background-color:#1e293b80}.dark\:bg-slate-800\/60:is([data-theme=dark] *){background-color:#1e293b99}.dark\:bg-slate-800\/70:is([data-theme=dark] *){background-color:#1e293bb3}.dark\:bg-slate-800\/80:is([data-theme=dark] *){background-color:#1e293bcc}.dark\:bg-slate-800\/90:is([data-theme=dark] *){background-color:#1e293be6}.dark\:bg-slate-900:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-900\/50:is([data-theme=dark] *){background-color:#0f172a80}.dark\:bg-slate-900\/60:is([data-theme=dark] *){background-color:#0f172a99}.dark\:bg-slate-900\/70:is([data-theme=dark] *){background-color:#0f172ab3}.dark\:bg-slate-900\/75:is([data-theme=dark] *){background-color:#0f172abf}.dark\:bg-slate-900\/80:is([data-theme=dark] *){background-color:#0f172acc}.dark\:bg-slate-900\/85:is([data-theme=dark] *){background-color:#0f172ad9}.dark\:bg-slate-900\/90:is([data-theme=dark] *){background-color:#0f172ae6}.dark\:bg-slate-900\/95:is([data-theme=dark] *){background-color:#0f172af2}.dark\:bg-slate-950\/60:is([data-theme=dark] *){background-color:#02061799}.dark\:bg-slate-950\/80:is([data-theme=dark] *){background-color:#020617cc}.dark\:bg-slate-950\/90:is([data-theme=dark] *){background-color:#020617e6}.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-blue-400:is([data-theme=dark] *){--tw-gradient-from: #60a5fa var(--tw-gradient-from-position);--tw-gradient-to: rgb(96 165 250 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-500:is([data-theme=dark] *){--tw-gradient-from: #3b82f6 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)}.dark\:from-blue-500\/25:is([data-theme=dark] *){--tw-gradient-from: rgb(59 130 246 / .25) 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)}.dark\:from-blue-900\/30:is([data-theme=dark] *){--tw-gradient-from: rgb(30 58 138 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-blue-900\/40:is([data-theme=dark] *){--tw-gradient-from: rgb(30 58 138 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 58 138 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-green-900\/30:is([data-theme=dark] *){--tw-gradient-from: rgb(20 83 45 / .3) var(--tw-gradient-from-position);--tw-gradient-to: rgb(20 83 45 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-red-900\/40:is([data-theme=dark] *){--tw-gradient-from: rgb(127 29 29 / .4) var(--tw-gradient-from-position);--tw-gradient-to: rgb(127 29 29 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-slate-100:is([data-theme=dark] *){--tw-gradient-from: #f1f5f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(241 245 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-slate-800:is([data-theme=dark] *){--tw-gradient-from: #1e293b var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 41 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-slate-800\/60:is([data-theme=dark] *){--tw-gradient-from: rgb(30 41 59 / .6) var(--tw-gradient-from-position);--tw-gradient-to: rgb(30 41 59 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-slate-900\/80:is([data-theme=dark] *){--tw-gradient-from: rgb(15 23 42 / .8) var(--tw-gradient-from-position);--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-slate-900\/85:is([data-theme=dark] *){--tw-gradient-from: rgb(15 23 42 / .85) var(--tw-gradient-from-position);--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-slate-900\/90:is([data-theme=dark] *){--tw-gradient-from: rgb(15 23 42 / .9) var(--tw-gradient-from-position);--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-slate-950\/95:is([data-theme=dark] *){--tw-gradient-from: rgb(2 6 23 / .95) var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:via-blue-600:is([data-theme=dark] *){--tw-gradient-to: rgb(37 99 235 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #2563eb var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-slate-900\/50:is([data-theme=dark] *){--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .5) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-slate-900\/70:is([data-theme=dark] *){--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .7) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-slate-900\/80:is([data-theme=dark] *){--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .8) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-slate-950:is([data-theme=dark] *){--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #020617 var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:to-blue-600:is([data-theme=dark] *){--tw-gradient-to: #2563eb var(--tw-gradient-to-position)}.dark\:to-emerald-900\/30:is([data-theme=dark] *){--tw-gradient-to: rgb(6 78 59 / .3) var(--tw-gradient-to-position)}.dark\:to-indigo-400:is([data-theme=dark] *){--tw-gradient-to: #818cf8 var(--tw-gradient-to-position)}.dark\:to-indigo-500:is([data-theme=dark] *){--tw-gradient-to: #6366f1 var(--tw-gradient-to-position)}.dark\:to-indigo-500\/15:is([data-theme=dark] *){--tw-gradient-to: rgb(99 102 241 / .15) var(--tw-gradient-to-position)}.dark\:to-indigo-600:is([data-theme=dark] *){--tw-gradient-to: #4f46e5 var(--tw-gradient-to-position)}.dark\:to-indigo-900\/30:is([data-theme=dark] *){--tw-gradient-to: rgb(49 46 129 / .3) var(--tw-gradient-to-position)}.dark\:to-red-800\/40:is([data-theme=dark] *){--tw-gradient-to: rgb(153 27 27 / .4) var(--tw-gradient-to-position)}.dark\:to-slate-300:is([data-theme=dark] *){--tw-gradient-to: #cbd5e1 var(--tw-gradient-to-position)}.dark\:to-slate-700\/50:is([data-theme=dark] *){--tw-gradient-to: rgb(51 65 85 / .5) var(--tw-gradient-to-position)}.dark\:to-slate-800\/60:is([data-theme=dark] *){--tw-gradient-to: rgb(30 41 59 / .6) var(--tw-gradient-to-position)}.dark\:to-slate-800\/70:is([data-theme=dark] *){--tw-gradient-to: rgb(30 41 59 / .7) var(--tw-gradient-to-position)}.dark\:to-slate-900:is([data-theme=dark] *){--tw-gradient-to: #0f172a var(--tw-gradient-to-position)}.dark\:to-slate-900\/70:is([data-theme=dark] *){--tw-gradient-to: rgb(15 23 42 / .7) var(--tw-gradient-to-position)}.dark\:to-slate-900\/75:is([data-theme=dark] *){--tw-gradient-to: rgb(15 23 42 / .75) var(--tw-gradient-to-position)}.dark\:to-slate-900\/80:is([data-theme=dark] *){--tw-gradient-to: rgb(15 23 42 / .8) var(--tw-gradient-to-position)}.dark\:to-slate-900\/85:is([data-theme=dark] *){--tw-gradient-to: rgb(15 23 42 / .85) var(--tw-gradient-to-position)}.dark\:to-slate-950\/90:is([data-theme=dark] *){--tw-gradient-to: rgb(2 6 23 / .9) 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-200\/80:is([data-theme=dark] *){color:#fde68acc}.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-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(219 234 254 / 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-200\/80:is([data-theme=dark] *){color:#bfdbfecc}.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-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-gray-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-green-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(220 252 231 / var(--tw-text-opacity, 1))}.dark\:text-green-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(134 239 172 / 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-indigo-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.dark\:text-purple-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity, 1))}.dark\:text-purple-300:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity, 1))}.dark\:text-red-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(254 226 226 / var(--tw-text-opacity, 1))}.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-red-400:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-rose-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(254 205 211 / var(--tw-text-opacity, 1))}.dark\:text-slate-100:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.dark\:text-slate-200:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(226 232 240 / 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-slate-500:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.dark\:text-slate-600:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.dark\:text-white:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:shadow-2xl:is([data-theme=dark] *){--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-lg:is([data-theme=dark] *){--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)}.dark\:shadow-md:is([data-theme=dark] *){--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)}.dark\:shadow-xl:is([data-theme=dark] *){--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)}.dark\:shadow-black\/40:is([data-theme=dark] *){--tw-shadow-color: rgb(0 0 0 / .4);--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-blue-500\/20:is([data-theme=dark] *){--tw-shadow-color: rgb(59 130 246 / .2);--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-blue-500\/30:is([data-theme=dark] *){--tw-shadow-color: rgb(59 130 246 / .3);--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-blue-900\/30:is([data-theme=dark] *){--tw-shadow-color: rgb(30 58 138 / .3);--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-blue-900\/40:is([data-theme=dark] *){--tw-shadow-color: rgb(30 58 138 / .4);--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-green-900\/30:is([data-theme=dark] *){--tw-shadow-color: rgb(20 83 45 / .3);--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-indigo-900\/40:is([data-theme=dark] *){--tw-shadow-color: rgb(49 46 129 / .4);--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-red-900\/30:is([data-theme=dark] *){--tw-shadow-color: rgb(127 29 29 / .3);--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-slate-900\/20:is([data-theme=dark] *){--tw-shadow-color: rgb(15 23 42 / .2);--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-slate-900\/30:is([data-theme=dark] *){--tw-shadow-color: rgb(15 23 42 / .3);--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-slate-900\/40:is([data-theme=dark] *){--tw-shadow-color: rgb(15 23 42 / .4);--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-slate-900\/50:is([data-theme=dark] *){--tw-shadow-color: rgb(15 23 42 / .5);--tw-shadow: var(--tw-shadow-colored)}.dark\:shadow-slate-900\/60:is([data-theme=dark] *){--tw-shadow-color: rgb(15 23 42 / .6);--tw-shadow: var(--tw-shadow-colored)}.dark\:ring-amber-400\/30:is([data-theme=dark] *){--tw-ring-color: rgb(251 191 36 / .3)}.dark\:ring-blue-400\/20:is([data-theme=dark] *){--tw-ring-color: rgb(96 165 250 / .2)}.dark\:ring-blue-400\/30:is([data-theme=dark] *){--tw-ring-color: rgb(96 165 250 / .3)}.dark\:ring-blue-700\/50:is([data-theme=dark] *){--tw-ring-color: rgb(29 78 216 / .5)}.dark\:ring-emerald-400\/30:is([data-theme=dark] *){--tw-ring-color: rgb(52 211 153 / .3)}.dark\:ring-emerald-700\/50:is([data-theme=dark] *){--tw-ring-color: rgb(4 120 87 / .5)}.dark\:ring-red-400\/30:is([data-theme=dark] *){--tw-ring-color: rgb(248 113 113 / .3)}.dark\:ring-red-700\/50:is([data-theme=dark] *){--tw-ring-color: rgb(185 28 28 / .5)}.dark\:ring-slate-700\/40:is([data-theme=dark] *){--tw-ring-color: rgb(51 65 85 / .4)}.dark\:ring-slate-700\/50:is([data-theme=dark] *){--tw-ring-color: rgb(51 65 85 / .5)}.dark\:ring-slate-700\/60:is([data-theme=dark] *){--tw-ring-color: rgb(51 65 85 / .6)}.dark\:hover\:border-amber-500\/60:hover:is([data-theme=dark] *){border-color:#f59e0b99}.dark\:hover\:border-blue-500\/40:hover:is([data-theme=dark] *){border-color:#3b82f666}.dark\:hover\:border-blue-500\/60:hover:is([data-theme=dark] *){border-color:#3b82f699}.dark\:hover\:border-slate-500\/60:hover:is([data-theme=dark] *){border-color:#64748b99}.dark\:hover\:border-slate-500\/70:hover:is([data-theme=dark] *){border-color:#64748bb3}.dark\:hover\:border-slate-600\/70:hover:is([data-theme=dark] *){border-color:#475569b3}.dark\:hover\:bg-blue-900\/20:hover:is([data-theme=dark] *){background-color:#1e3a8a33}.dark\:hover\:bg-slate-700:hover:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-slate-700\/60:hover:is([data-theme=dark] *){background-color:#33415599}.dark\:hover\:bg-slate-700\/70:hover:is([data-theme=dark] *){background-color:#334155b3}.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\:bg-slate-800\/40:hover:is([data-theme=dark] *){background-color:#1e293b66}.dark\:hover\:bg-slate-800\/60:hover:is([data-theme=dark] *){background-color:#1e293b99}.dark\:hover\:bg-slate-800\/80:hover:is([data-theme=dark] *){background-color:#1e293bcc}.dark\:hover\:bg-slate-900:hover:is([data-theme=dark] *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-slate-900\/80:hover:is([data-theme=dark] *){background-color:#0f172acc}.dark\:hover\:bg-slate-900\/90:hover:is([data-theme=dark] *){background-color:#0f172ae6}.dark\:hover\:bg-slate-900\/95:hover:is([data-theme=dark] *){background-color:#0f172af2}.dark\:hover\:from-slate-900:hover:is([data-theme=dark] *){--tw-gradient-from: #0f172a var(--tw-gradient-from-position);--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:hover\:via-slate-900\/95:hover:is([data-theme=dark] *){--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .95) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:hover\:to-slate-900\/90:hover:is([data-theme=dark] *){--tw-gradient-to: rgb(15 23 42 / .9) var(--tw-gradient-to-position)}.dark\:hover\:text-blue-300:hover:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:hover\:text-gray-300:hover:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:hover\:text-red-300:hover:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-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\:hover\:text-slate-200:hover:is([data-theme=dark] *){--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.dark\:hover\:shadow-lg:hover:is([data-theme=dark] *){--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)}.dark\:hover\:shadow-slate-900\/30:hover:is([data-theme=dark] *){--tw-shadow-color: rgb(15 23 42 / .3);--tw-shadow: var(--tw-shadow-colored)}.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\:border-blue-400\/70:focus:is([data-theme=dark] *){border-color:#60a5fab3}.dark\:focus\:border-blue-500:focus:is([data-theme=dark] *){--tw-border-opacity: 1;border-color:rgb(59 130 246 / var(--tw-border-opacity, 1))}.dark\:focus\:ring-blue-400\/20:focus:is([data-theme=dark] *){--tw-ring-color: rgb(96 165 250 / .2)}.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}.dark\:disabled\:bg-slate-900\/40:disabled:is([data-theme=dark] *){background-color:#0f172a66}@media (min-width: 640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mt-4{margin-top:1rem}.sm\:inline{display:inline}.sm\:h-10{height:2.5rem}.sm\:max-h-\[70vh\]{max-height:70vh}.sm\:min-h-0{min-height:0px}.sm\:min-h-\[300px\]{min-height:300px}.sm\:w-10{width:2.5rem}.sm\:w-80{width:20rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:1rem}.sm\:gap-6{gap:1.5rem}.sm\:gap-8{gap:2rem}.sm\: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))}.sm\:rounded-3xl{border-radius:1.5rem}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-6{padding:1.5rem}.sm\:p-8{padding:2rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.sm\:py-3{padding-top:.75rem;padding-bottom:.75rem}.sm\:py-8{padding-top:2rem;padding-bottom:2rem}.sm\:pb-12{padding-bottom:3rem}.sm\:pt-8{padding-top:2rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.sm\:text-xs{font-size:.75rem;line-height:1rem}}@media (min-width: 768px){.md\:col-span-2{grid-column:span 2 / span 2}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}}@media (min-width: 1024px){.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-36{width:9rem}.lg\:min-w-\[9rem\]{min-width:9rem}.lg\:max-w-\[9rem\]{max-width:9rem}.lg\:flex-shrink-0{flex-shrink:0}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,0\.85fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,.85fr)}.lg\:space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.lg\:p-10{padding:2.5rem}.lg\:p-4{padding:1rem}.lg\:p-6{padding:1.5rem}.lg\:p-8{padding:2rem}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:pb-16{padding-bottom:4rem}.lg\:text-2xl{font-size:1.5rem;line-height:2rem}.lg\:text-3xl{font-size:1.875rem;line-height:2.25rem}.lg\:text-4xl{font-size:2.25rem;line-height:2.5rem}.lg\:text-5xl{font-size:3rem;line-height:1}.lg\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 1280px){.xl\:block{display:block}.xl\:w-40{width:10rem}.xl\:min-w-\[10rem\]{min-width:10rem}.xl\:max-w-\[10rem\]{max-width:10rem}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 1536px){.\32xl\:w-44{width:11rem}.\32xl\:min-w-\[11rem\]{min-width:11rem}.\32xl\:max-w-\[11rem\]{max-width:11rem}.\32xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}
|