@deepseekcode/cli 1.0.25 → 1.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +1170 -1124
- package/package.json +4 -1
- package/web/dist/assets/AutomationView-CPCd-Qhd.js +1 -0
- package/web/dist/assets/ChannelConfigView-D6JtjZyf.js +8 -0
- package/web/dist/assets/ConnectorsView-BPPr7T9p.js +1 -0
- package/web/dist/assets/FileTreeView-CO8knuwu.js +11 -0
- package/web/dist/assets/HookConfigView-CYuzwf8u.js +1 -0
- package/web/dist/assets/ModelsView-Cji4mbXE.js +1 -0
- package/web/dist/assets/PluginsView-CKKnYKMP.js +1 -0
- package/web/dist/assets/SessionGrid-BOpVWUEK.js +37 -0
- package/web/dist/assets/SettingsPanel-R1fOoB25.js +4 -0
- package/web/dist/assets/{SkillsView-BrQY_vgT.js → SkillsView-DmQGY9v0.js} +1 -1
- package/web/dist/assets/TemplatesTab-_vSIuTZP.js +1 -0
- package/web/dist/assets/TerminalView-CTU0aA8o.js +3 -0
- package/web/dist/assets/ToolsView-DUEqePPo.js +1 -0
- package/web/dist/assets/{icons-B9mi2ie6.js → icons-qcawb7PZ.js} +1 -1
- package/web/dist/assets/index-DL2ULWxM.css +1 -0
- package/web/dist/assets/index-DUpwXfa-.js +70 -0
- package/web/dist/assets/{markdown-BrFQfawv.js → markdown-yjmXQjrx.js} +1 -1
- package/web/dist/assets/{panels-BX-TtLOU.js → panels-CX_dYEv0.js} +1 -1
- package/web/dist/assets/{react-vendor-CiRFOYk_.js → react-vendor-CSlQceOk.js} +1 -1
- package/web/dist/assets/{state-BcoCffxz.js → state-DOzZasIm.js} +1 -1
- package/web/dist/favicon.svg +32 -12
- package/web/dist/index.html +7 -7
- package/web/dist/logo.svg +32 -12
- package/web/dist/assets/AutomationView-MOGwMs0s.js +0 -1
- package/web/dist/assets/ChannelConfigView-CHWC4ETy.js +0 -8
- package/web/dist/assets/ConnectorsView-DaP_wB0W.js +0 -1
- package/web/dist/assets/FileTreeView-N64-Dser.js +0 -11
- package/web/dist/assets/HookConfigView-DsZDeVFi.js +0 -2
- package/web/dist/assets/ModelsView-C1cE2wMN.js +0 -2
- package/web/dist/assets/PluginsView-CsSjjfrn.js +0 -1
- package/web/dist/assets/SessionGrid-Bg-UTI2P.js +0 -37
- package/web/dist/assets/SettingsPanel-pZbjabYJ.js +0 -4
- package/web/dist/assets/TemplatesTab-DSfCryw2.js +0 -1
- package/web/dist/assets/TerminalView-Drr72DaP.js +0 -3
- package/web/dist/assets/ToolsView-ByqbKwqW.js +0 -1
- package/web/dist/assets/index-DCj9TkXV.css +0 -1
- package/web/dist/assets/index-PcXINYWS.js +0 -68
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./markdown-BrFQfawv.js";import{a as n,h as H,F as se,_ as B,a7 as ae,aO as ne,l as U,L as V,b as Y,b5 as q,o as re,aZ as te,D as le,k as ce,al as ie,aa as Q,b6 as oe,b7 as Z,Z as de,E as xe,b8 as ue,b0 as me,t as pe,b9 as he,ba as ge,a8 as be}from"./icons-B9mi2ie6.js";import{a as w,t as u,c as G,d as J,f as fe,T as je,Q as ke,z as X}from"./index-PcXINYWS.js";import"./react-vendor-CiRFOYk_.js";import"./state-BcoCffxz.js";import"./panels-BX-TtLOU.js";function ve(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}function ye(t){return new Date(t).toLocaleString()}function we(){const[t,x]=n.useState([]),[l,s]=n.useState(null),[d,i]=n.useState(""),[f,N]=n.useState(""),[g,o]=n.useState(!1),[p,E]=n.useState(!1),z=n.useCallback(async()=>{o(!0);try{const c=await w.config.files.list();c.success&&Array.isArray(c.data)&&x(c.data)}catch{u.error("Failed to load config files")}finally{o(!1)}},[]),M=n.useCallback(async c=>{try{const T=await w.config.files.read(c);if(T.success&&T.data){const j=T.data;s(j.name),i(j.content),N(j.content)}}catch{u.error(`Failed to read ${c}`)}},[]);n.useEffect(()=>{z()},[z]);const D=n.useCallback(async()=>{if(l){E(!0);try{const c=await w.config.files.write(l,d);c.success?(N(d),u.success(`${l} saved`),z()):u.error(c.error||"Failed to save")}catch{u.error("Failed to save file")}finally{E(!1)}}},[l,d,z]),h=d!==f,$=(l==null?void 0:l.endsWith(".yaml"))||(l==null?void 0:l.endsWith(".yml")),P=l==null?void 0:l.endsWith(".json"),K=c=>$?c.replace(/(#.*)$/,'<span class="text-dark-muted">$1</span>').replace(/^(\s*)([\w-]+)(:)/,'$1<span class="text-accent-blue">$2</span>$3').replace(/:\s+(true|false|null|~)(\s*)$/,': <span class="text-accent-purple">$1</span>$2').replace(/:\s+(\d+\.?\d*)(\s*)$/,': <span class="text-accent-green">$1</span>$2').replace(/:\s+"([^"]*)"(\s*)$/,': <span class="text-accent-yellow">"$1"</span>$2'):P?c.replace(/(\s*"[^"]*")(\s*:)/g,'<span class="text-accent-blue">$1</span>$2').replace(/:\s+(true|false|null)/g,': <span class="text-accent-purple">$1</span>').replace(/:\s+(\d+\.?\d*)/g,': <span class="text-accent-green">$1</span>').replace(/:\s+"([^"]*)"/g,': <span class="text-accent-yellow">"$1"</span>'):c;return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h4",{className:"text-sm font-medium text-dark-text",children:"Config Files"}),e.jsx("button",{onClick:z,disabled:g,className:"p-1.5 rounded hover:bg-dark-hover transition-colors text-dark-muted",title:"Refresh file list",children:e.jsx(H,{size:14,className:g?"animate-spin":""})})]}),t.length===0&&!g&&e.jsx("p",{className:"text-xs text-dark-muted",children:"No config files found in ~/.agent/"}),t.length>0&&e.jsxs("div",{className:"flex gap-3",children:[e.jsx("div",{className:"w-48 shrink-0 space-y-0.5 max-h-[300px] overflow-y-auto custom-scrollbar",children:t.map(c=>e.jsxs("button",{onClick:()=>M(c.name),className:`w-full text-left px-2.5 py-1.5 rounded text-xs flex items-center gap-2 transition-colors ${l===c.name?"bg-accent-blue/10 text-accent-blue":"text-dark-text hover:bg-dark-hover"}`,children:[e.jsx(se,{size:12,className:"shrink-0"}),e.jsx("span",{className:"truncate flex-1",children:c.name}),!c.editable&&e.jsx("span",{className:"text-[10px] text-dark-muted shrink-0",title:"Read-only",children:"read"})]},c.name))}),l?e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center justify-between mb-1.5",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs text-dark-muted",children:[e.jsx("span",{className:"text-dark-text font-medium",children:l}),t.find(c=>c.name===l)&&e.jsxs("span",{children:[ve(t.find(c=>c.name===l).size)," · ",ye(t.find(c=>c.name===l).modified)]}),h&&e.jsxs("span",{className:"text-accent-yellow flex items-center gap-1",children:[e.jsx(B,{size:10}),"unsaved changes"]})]}),e.jsxs("button",{onClick:D,disabled:!h||p,className:`flex items-center gap-1 px-2.5 py-1 rounded text-xs transition-all ${h?"bg-accent-blue text-white hover:opacity-90":"bg-dark-hover text-dark-muted cursor-not-allowed"}`,children:[e.jsx(ae,{size:12}),p?"Saving...":"Save"]})]}),e.jsxs("div",{className:"relative",children:[e.jsx("pre",{className:"w-full h-[260px] p-3 rounded-lg bg-dark-bg border border-dark-border font-mono text-xs leading-relaxed overflow-auto custom-scrollbar pointer-events-none",dangerouslySetInnerHTML:{__html:d.split(`
|
|
2
|
-
`).map(K).join(`
|
|
3
|
-
`)||" "}}),e.jsx("textarea",{value:d,onChange:c=>i(c.target.value),className:"absolute inset-0 w-full h-full p-3 rounded-lg bg-transparent border border-dark-border font-mono text-xs leading-relaxed resize-none overflow-auto custom-scrollbar text-transparent caret-dark-text focus:outline-none focus:border-accent-blue/50",style:{color:"transparent"},spellCheck:!1})]})]}):e.jsx("div",{className:"flex-1 flex items-center justify-center text-xs text-dark-muted",children:"Select a file to edit"})]})]})}function Ne(){const{t}=G(),[x,l]=n.useState(null),[s,d]=n.useState(null),[i,f]=n.useState({running:!1,logs:[]}),[N,g]=n.useState(!1),o=n.useRef(null),p=n.useRef(i),E=n.useRef(null),[z,M]=n.useState(()=>{try{return localStorage.getItem("dsc.stt.lang")==="zh"?"zh":"en"}catch{return"en"}}),D=n.useCallback(r=>{M(r);try{localStorage.setItem("dsc.stt.lang",r)}catch{}window.dispatchEvent(new CustomEvent("stt-lang-changed",{detail:{lang:r}}))},[]);n.useEffect(()=>{p.current=i},[i]);const h=n.useCallback(async()=>{g(!0);const r=await w.stt.status();r.success&&r.data?(l(r.data),r.data.env&&d(r.data.env)):r.error&&u.error(r.error),g(!1)},[]);n.useEffect(()=>{h()},[h]);const $=n.useCallback(async()=>{const r=await w.stt.installStatus();if(r.success&&r.data){const b=p.current.running;f(r.data),r.data.running?o.current=window.setTimeout(()=>void $(),1e3):(h(),b&&r.data.status==="done"&&window.dispatchEvent(new CustomEvent("stt-backends-changed")))}},[h]);n.useEffect(()=>()=>{o.current&&window.clearTimeout(o.current)},[]),n.useEffect(()=>{E.current&&(E.current.scrollTop=E.current.scrollHeight)},[i.logs]);const P=n.useCallback(async r=>{var v,R,m,I;const b=await w.stt.install(r);b.success&&((v=b.data)!=null&&v.started)?(f({running:!0,backend:r,logs:[],status:"running"}),$()):(R=b.data)!=null&&R.alreadyRunning?(u.info(t("stt.setup.jobInProgress")),$()):f({running:!1,backend:r,logs:[],status:"error",error:b.error||((m=b.data)==null?void 0:m.error)||"install failed",manualCommand:(I=b.data)==null?void 0:I.manualCommand})},[$,t]),K=n.useCallback(async()=>{await w.stt.cancelInstall(),$()},[$]),c=n.useCallback(r=>{navigator.clipboard.writeText(r).then(()=>u.success(t("stt.setup.copySuccess")),()=>u.error(t("stt.setup.copyFailed")))},[t]),T=i.running?i.backend:void 0,j=i.running,W=r=>r?e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-accent-green/15 text-accent-green",children:[e.jsx(U,{size:12}),t("stt.setup.installed")]}):e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-dark-hover text-dark-muted",children:[e.jsx(ce,{size:12}),t("stt.setup.notInstalled")]}),C=(r,b,v)=>{var O;const R=((O=x==null?void 0:x.backends)==null?void 0:O[r])??{installed:!1},m=T===r,I=j&&!m,L=z===r;return e.jsxs("div",{className:J("rounded-lg border p-3 flex items-start justify-between gap-3 transition-colors cursor-pointer",L?"border-accent-blue/50 bg-accent-blue/5":"border-dark-border bg-dark-bg hover:border-dark-hover"),onClick:()=>D(r),children:[e.jsxs("div",{className:"flex items-start gap-3 min-w-0",children:[e.jsx("div",{className:J("w-9 h-9 shrink-0 rounded-lg flex items-center justify-center text-sm font-semibold",L?"bg-accent-blue/15 text-accent-blue":"bg-accent-blue/10 text-accent-blue"),children:r==="en"?"W":"F"}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-sm font-medium text-dark-text",children:b}),W(R.installed),L&&e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium bg-accent-blue/15 text-accent-blue",children:[e.jsx(q,{size:12}),t("stt.setup.inUse")]})]}),e.jsxs("div",{className:"flex items-center gap-2 mt-1 text-[11px] text-dark-muted",children:[e.jsx("code",{className:"text-[10px] bg-dark-hover px-1.5 py-0.5 rounded",children:v}),e.jsx("span",{children:t(r==="en"?"stt.setup.whisperDesc":"stt.setup.funasrDesc")})]}),r==="zh"&&e.jsxs("p",{className:"mt-1 text-[11px] text-dark-muted flex items-center gap-1",children:[e.jsx(te,{size:11}),t("stt.setup.torchHint")]}),L&&!R.installed&&e.jsxs("p",{className:"mt-1 text-[11px] text-accent-orange flex items-center gap-1",children:[e.jsx(B,{size:11}),t("stt.setup.engineNotInstalledHint")]})]})]}),e.jsx("div",{className:"shrink-0",onClick:_=>_.stopPropagation(),children:m?e.jsxs("button",{className:"btn btn-secondary cursor-not-allowed opacity-70",disabled:!0,children:[e.jsx(V,{size:14,className:"animate-spin"}),t("stt.setup.installing")]}):I?e.jsx("button",{className:"btn btn-secondary cursor-not-allowed opacity-50",disabled:!0,children:t("stt.setup.installing")}):R.installed?e.jsxs("button",{className:"btn btn-ghost",onClick:()=>void h(),title:t("stt.setup.recheck"),children:[e.jsx(H,{size:14}),t("stt.setup.recheck")]}):e.jsxs("button",{className:"btn btn-accent",onClick:()=>void P(r),children:[e.jsx(le,{size:14}),t("stt.setup.install")]})})]})},F=(s==null?void 0:s.pythonAvailable)&&(s==null?void 0:s.pipAvailable);return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"rounded-lg border border-dark-border bg-dark-bg p-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-dark-text",children:[e.jsx(ne,{size:14,className:"text-accent-blue"}),t("stt.setup.envCard")]}),e.jsxs("button",{className:"btn btn-ghost",onClick:()=>void h(),disabled:N,children:[e.jsx(H,{size:13,className:N?"animate-spin":""}),t("stt.setup.recheck")]})]}),e.jsxs("div",{className:"mt-2.5 space-y-2",children:[s?s.pythonAvailable?e.jsxs("div",{className:"flex items-center gap-2 text-xs text-dark-text",children:[e.jsx(U,{size:13,className:"text-accent-green"}),t("stt.setup.pythonOk",{version:(s.pythonVersion||"").replace(/^Python\s*/i,"")||s.pythonPath||"Python"}),s.pythonPath?e.jsx("code",{className:"text-[10px] text-dark-muted",children:s.pythonPath}):null]}):e.jsxs("div",{className:"flex items-center justify-between gap-2 rounded-md border border-accent-red/30 bg-accent-red/5 px-2.5 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs text-accent-red",children:[e.jsx(B,{size:13}),t("stt.setup.pythonMissing")]}),e.jsx("a",{className:"btn btn-secondary !py-1 !px-2 text-xs",href:"https://www.python.org/downloads/",target:"_blank",rel:"noreferrer",children:t("stt.setup.pythonGuide")})]}):e.jsxs("div",{className:"flex items-center gap-2 text-xs text-dark-muted",children:[e.jsx(V,{size:13,className:"animate-spin"}),t("stt.setup.envChecking")]}),s&&!s.pipAvailable&&e.jsxs("div",{className:"rounded-md border border-accent-red/30 bg-accent-red/5 px-2.5 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs text-accent-red",children:[e.jsx(B,{size:13}),t("stt.setup.pipMissing")]}),e.jsxs("div",{className:"mt-1.5",children:[e.jsx("div",{className:"text-[10px] text-dark-muted mb-1",children:t("stt.setup.pipGuide")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("code",{className:"flex-1 rounded bg-dark-bg border border-dark-border px-2 py-1 font-mono text-[10px] text-dark-text break-all select-all",children:[s.pythonPath||"python"," -m ensurepip --upgrade"]}),e.jsx("button",{className:"btn btn-ghost !py-1 !px-2 text-xs",onClick:()=>c(`${s.pythonPath||"python"} -m ensurepip --upgrade`),children:e.jsx(Y,{size:12})})]})]})]})]})]}),e.jsxs("div",{className:"rounded-lg border border-dark-border bg-dark-surface p-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-medium text-dark-text",children:[e.jsx(q,{size:14,className:"text-accent-blue"}),t("stt.setup.defaultEngine")]}),e.jsx("p",{className:"mt-1 text-[11px] text-dark-muted",children:t("stt.setup.defaultEngineHint")})]}),C("en",t("stt.setup.whisperTitle"),"base.en"),C("zh",t("stt.setup.funasrTitle"),"paraformer-zh"),j&&e.jsxs("div",{className:"rounded-lg border border-dark-border bg-dark-bg p-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 mb-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs text-accent-blue font-medium",children:[e.jsx(V,{size:13,className:"animate-spin"}),t("stt.setup.installing"),e.jsxs("span",{className:"text-dark-muted font-normal",children:["(",T==="en"?"whisper":"funasr",")"]})]}),e.jsx("button",{className:"btn btn-danger !py-1 !px-2 text-xs",onClick:()=>void K(),children:t("stt.setup.cancel")})]}),e.jsx("div",{ref:E,className:"rounded-md border border-dark-border bg-dark-bg p-2.5 font-mono text-[11px] text-dark-muted overflow-auto max-h-48 whitespace-pre-wrap custom-scrollbar",children:i.logs.length===0?e.jsx("span",{className:"text-dark-muted/70",children:t("stt.setup.logWaiting")}):i.logs.join(`
|
|
4
|
-
`)})]}),!j&&i.status&&i.status!=="done"&&e.jsxs("div",{className:"rounded-lg border border-accent-red/30 bg-accent-red/5 p-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs text-accent-red font-medium",children:[e.jsx(B,{size:13}),i.status==="timeout"?t("stt.setup.installTimeout"):i.status==="cancelled"?t("stt.setup.installCancelled"):t("stt.setup.installFailed")]}),i.error?e.jsx("p",{className:"mt-1 text-xs text-accent-red/90 break-all",children:i.error}):null,(i.manualCommand||i.status==="error"&&T)&&e.jsxs("div",{className:"mt-2",children:[e.jsxs("div",{className:"text-[10px] text-dark-muted mb-1 flex items-center gap-1",children:[e.jsx(re,{size:11}),t("stt.setup.manualCommand")]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("code",{className:"flex-1 rounded bg-dark-bg border border-dark-border px-2 py-1.5 font-mono text-[10px] text-dark-text break-all whitespace-pre-wrap select-all",children:i.manualCommand??(T==="zh"?`${(s==null?void 0:s.pythonPath)||"python"} -m pip install -U "funasr>=1.1.0" "modelscope>=1.15.0" "torch>=2.0.0"`:`${(s==null?void 0:s.pythonPath)||"python"} -m pip install "faster-whisper>=1.0.0"`)}),i.manualCommand&&e.jsxs("button",{className:"btn btn-ghost !py-1 !px-2 text-xs shrink-0",onClick:()=>c(i.manualCommand),children:[e.jsx(Y,{size:12}),t("stt.setup.copyCommand")]})]})]})]}),!j&&i.status==="done"&&e.jsxs("div",{className:"rounded-lg border border-accent-green/30 bg-accent-green/5 px-3 py-2.5 flex items-center gap-2 text-xs text-accent-green",children:[e.jsx(U,{size:14}),t("stt.setup.installDone")]}),!j&&F&&x&&!x.backends.en.installed&&!x.backends.zh.installed&&e.jsx("p",{className:"text-[11px] text-dark-muted px-1",children:t("stt.setup.chooseHint")})]})}const Ce=n.memo(function({nameKey:x,descriptionKey:l,colors:s,isSelected:d,onClick:i}){const{t:f}=G(),N=["bg","surface","border","text","muted","accentBlue","accentGreen","accentRed","accentYellow","accentPurple"];return e.jsxs("button",{onClick:i,className:`relative flex flex-col items-center rounded-xl p-2 transition-all focus:outline-none focus:ring-2 focus:ring-accent-blue/50 ${d?"ring-2 ring-accent-blue/60 bg-dark-bg border border-accent-blue/40 shadow-sm":"border border-dark-border hover:border-accent-blue/30 bg-dark-bg hover:shadow-sm"}`,title:f(l),"aria-pressed":d,"aria-label":f(x),children:[e.jsx("div",{className:"flex gap-[2px] rounded-md overflow-hidden w-full h-8 mb-1.5 border border-dark-border/40",children:N.map(g=>e.jsx("div",{className:"flex-1",style:{backgroundColor:s[g]},title:g},g))}),e.jsx("span",{className:`text-[11px] font-medium truncate w-full text-center ${d?"text-accent-blue":"text-dark-text"}`,children:f(x)}),d&&e.jsx("span",{className:"absolute top-1 right-1 w-4 h-4 bg-accent-blue rounded-full flex items-center justify-center shadow-sm",children:e.jsx("svg",{width:"8",height:"8",viewBox:"0 0 8 8",fill:"none",children:e.jsx("path",{d:"M1.5 4L3.5 6L6.5 2",stroke:"white",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})]})}),ee=[{key:"bg",labelKey:"settings.colorBg"},{key:"surface",labelKey:"settings.colorSurface"},{key:"border",labelKey:"settings.colorBorder"},{key:"text",labelKey:"settings.colorText"},{key:"muted",labelKey:"settings.colorMuted"},{key:"accentBlue",labelKey:"settings.colorAccentBlue"},{key:"accentGreen",labelKey:"settings.colorAccentGreen"},{key:"accentRed",labelKey:"settings.colorAccentRed"},{key:"accentYellow",labelKey:"settings.colorAccentYellow"},{key:"accentPurple",labelKey:"settings.colorAccentPurple"}],Se={language:["language","lang","Chinese","中文","English","en","zh"],theme:["theme","dark","light","color","palette","custom"],display:["display","view","developer","activity","界面","视图","开发者","活动"],provider:["provider","model","api","key","openai","anthropic","deepseek"],context:["context","max","window","token","上下文"],configFiles:["config","file","yaml","json","editor"],system:["system","server","uptime","restart","reboot"],about:["about","version","info"],stt:["voice","语音","stt","whisper","funasr","安装","install","python","pip","speech"]},Ie=n.memo(function({onNavigate:x,focusSection:l}){const{t:s}=G(),{theme:d,setTheme:i,themePresetId:f,setThemePreset:N,language:g,setLanguage:o,customTheme:p,customThemeEnabled:E,setCustomTheme:z,setCustomThemeEnabled:M,resetCustomTheme:D,developerView:h,setDeveloperView:$}=fe(),[P,K]=n.useState(E),c=n.useMemo(()=>d==="dark"?"dark":d==="light"?"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light",[d]),T=n.useMemo(()=>Object.values(je),[]),[j,W]=n.useState(0),[C,F]=n.useState(!1),[r,b]=n.useState(!1),[v,R]=n.useState(""),m=n.useCallback(a=>{if(!v.trim())return!0;const y=v.toLowerCase().trim();return(Se[a]??[]).some(S=>S.toLowerCase().includes(y))},[v]),I=n.useRef(null);n.useEffect(()=>{var a;(l==null?void 0:l.section)==="stt"&&((a=I.current)==null||a.scrollIntoView({behavior:"smooth",block:"start"}))},[l==null?void 0:l.nonce]),n.useEffect(()=>{let a=!0;const y=async()=>{try{const S=await w.system.status();a&&S.success&&S.data&&W(S.data.uptime)}catch{}};y();const k=setInterval(y,C?2e3:1e4);return()=>{a=!1,clearInterval(k)}},[C]);const L=n.useCallback(async()=>{if(window.confirm("Restart the server? All active sessions will be disconnected.")){F(!0);try{const a=await w.system.restart();a.success?u.info("Server restarting..."):(u.error(a.error||"Restart failed"),F(!1))}catch{u.error("Failed to send restart request"),F(!1)}}},[]),O=n.useCallback(async()=>{if(window.confirm("Shut down the server? This will stop the entire backend process.")&&window.confirm("Are you sure? All active sessions and unsaved work will be lost.")){b(!0);try{const a=await w.system.shutdown();a.success?u.info("Server shutting down..."):(u.error(a.error||"Shutdown failed"),b(!1))}catch{u.error("Failed to send shutdown request"),b(!1)}}},[]);n.useEffect(()=>{C&&j<1e4&&(F(!1),u.success("Server restarted"))},[j,C]);const _=a=>{const y=Math.floor(a/1e3),k=Math.floor(y/60),S=Math.floor(k/60);return S>0?`${S}h ${k%60}m`:k>0?`${k}m ${y%60}s`:`${y}s`};return e.jsxs("div",{className:"flex-1 min-h-0 overflow-y-auto custom-scrollbar p-4 bg-transparent",children:[e.jsxs("div",{className:"flex items-center justify-between mb-4 gap-4 rounded-xl border border-dark-border bg-dark-surface p-3",children:[e.jsxs("h2",{className:"text-lg font-semibold flex items-center gap-2 shrink-0",children:[e.jsx(ie,{size:18,className:"text-accent-blue"}),s("settings.title")]}),e.jsxs("div",{className:"relative flex-1 max-w-xs",children:[e.jsx(Q,{size:14,className:"absolute left-3 top-1/2 -translate-y-1/2 text-dark-muted pointer-events-none"}),e.jsx("input",{type:"text",value:v,onChange:a=>R(a.target.value),placeholder:"Search settings...",className:"w-full bg-dark-bg border border-dark-border rounded-lg pl-9 pr-3 py-1.5 text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all"}),v&&e.jsx("button",{onClick:()=>R(""),className:"absolute right-2 top-1/2 -translate-y-1/2 text-dark-muted hover:text-dark-text text-xs p-1 rounded",children:"×"})]})]}),e.jsxs("div",{className:"space-y-5 max-w-3xl",children:[m("language")&&e.jsx(A,{icon:oe,iconColor:"text-accent-blue",title:s("settings.language"),children:e.jsx("div",{className:"flex gap-2",children:["zh-CN","en"].map(a=>e.jsx("button",{onClick:()=>o(a),className:`px-4 py-2 rounded-lg transition-all ${g===a?"bg-accent-blue text-white":"bg-dark-hover text-dark-text hover:bg-dark-border"}`,children:s(a==="zh-CN"?"settings.languageZh":"settings.languageEn")},a))})}),m("theme")&&e.jsxs(A,{icon:Z,iconColor:"text-accent-purple",title:s("settings.theme"),children:[e.jsx("div",{className:"flex gap-2 mb-4",children:["dark","light","auto"].map(a=>e.jsx("button",{onClick:()=>i(a),className:`px-4 py-2 rounded-lg transition-all ${d===a?"bg-accent-blue text-white":"bg-dark-hover text-dark-text hover:bg-dark-border"}`,children:s(a==="dark"?"settings.themeDark":a==="light"?"settings.themeLight":"settings.themeAuto")},a))}),e.jsxs("div",{className:"mb-4",children:[e.jsx("h4",{className:"text-xs font-semibold text-dark-text mb-2",children:s("settings.themePresets")}),e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-2",children:T.map(a=>{if(!a)return null;const y=(f||ke)===a.id,k=c==="dark"?a.dark:a.light;return e.jsx(Ce,{id:a.id,nameKey:a.nameKey,descriptionKey:a.descriptionKey,colors:k,isSelected:y,onClick:()=>N(a.id)},a.id)})})]}),e.jsxs("div",{className:"pt-4 border-t border-dark-border",children:[e.jsxs("button",{onClick:()=>{const a=!P;K(a),M(a)},className:"flex items-center gap-2 text-sm text-dark-muted hover:text-dark-text transition-colors",children:[e.jsx(Z,{size:14}),e.jsx("span",{children:s("settings.customOverrides")}),e.jsx("span",{className:`w-8 h-4 rounded-full transition-colors ${P?"bg-accent-blue":"bg-dark-border"}`,children:e.jsx("span",{className:`block w-3 h-3 rounded-full bg-white transition-transform mt-0.5 ${P?"ml-4":"ml-0.5"}`})})]}),P&&e.jsx("p",{className:"text-[10px] text-dark-muted mt-1 mb-2",children:s("settings.customOverridesHint")}),P&&e.jsxs("div",{className:"mt-3",children:[e.jsx("div",{className:"flex gap-1 mb-3 rounded-lg overflow-hidden h-6",children:ee.map(({key:a})=>e.jsx("div",{className:"flex-1",style:{backgroundColor:p[a]},title:a},a))}),e.jsx("div",{className:"grid grid-cols-2 gap-x-4 gap-y-2",children:ee.map(({key:a,labelKey:y})=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"color",value:p[a],onChange:k=>z({[a]:k.target.value}),className:"w-8 h-8 rounded border border-dark-border cursor-pointer bg-transparent p-0.5 shrink-0"}),e.jsx("span",{className:"text-xs text-dark-muted flex-1 truncate",children:s(y)}),e.jsx("input",{type:"text",value:p[a],onChange:k=>{const S=k.target.value;/^#[0-9a-fA-F]{0,6}$/.test(S)&&z({[a]:S})},className:"w-16 bg-dark-bg border border-dark-border rounded px-1 py-0.5 text-xs text-dark-text font-mono text-center",maxLength:7})]},a))}),e.jsx("button",{onClick:D,className:"mt-2 text-xs text-dark-muted hover:text-accent-red transition-colors",children:s("settings.resetColors")})]})]})]}),m("display")&&e.jsx(A,{icon:de,iconColor:"text-accent-blue",title:s("settings.display"),children:e.jsxs("label",{className:"flex items-center justify-between gap-3 py-1 cursor-pointer",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-sm text-dark-text",children:s("settings.developerView")}),e.jsx("div",{className:"text-xs text-dark-muted mt-0.5",children:s("settings.developerViewHint")})]}),e.jsx("button",{type:"button",role:"switch","aria-checked":h,onClick:()=>$(!h),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 ${h?"bg-accent-blue":"bg-dark-border"}`,children:e.jsx("span",{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${h?"translate-x-[18px]":"translate-x-0.5"}`})})]})}),m("provider")&&e.jsxs(A,{icon:te,iconColor:"text-accent-yellow",title:"Provider & Models",children:[e.jsx("p",{className:"text-sm text-dark-muted mb-3",children:"Configure AI providers, API keys, and model settings. Add or remove providers like OpenAI, Anthropic, DeepSeek, and more."}),e.jsxs("button",{onClick:()=>x==null?void 0:x("models"),className:"flex items-center gap-2 px-4 py-2 bg-accent-blue text-white rounded-lg hover:opacity-90 transition-opacity text-sm w-fit",children:[e.jsx(xe,{size:14}),"Manage Providers & Models"]})]}),m("context")&&e.jsx(A,{icon:ue,iconColor:"text-accent-blue",title:"Max Context",children:e.jsx(ze,{})}),m("stt")&&e.jsx(A,{icon:me,iconColor:"text-accent-blue",title:s("stt.setup.title"),children:e.jsx("div",{ref:I,id:"settings-section-stt",className:"scroll-mt-4",children:e.jsx(Ne,{})})}),m("configFiles")&&e.jsx(A,{icon:pe,iconColor:"text-accent-green",title:"Config Files (~/.agent/)",children:e.jsx(we,{})}),m("system")&&e.jsx(A,{icon:he,iconColor:"text-dark-muted",title:"System",children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{className:"text-dark-muted",children:"Server Uptime"}),e.jsx("span",{className:"text-dark-text font-mono",children:_(j)})]}),e.jsxs("button",{onClick:L,disabled:C,className:`flex items-center gap-2 px-4 py-2 rounded-lg text-sm transition-all ${C?"bg-dark-hover text-dark-muted cursor-wait":"bg-accent-red/10 text-accent-red hover:bg-accent-red/20 border border-accent-red/30"}`,children:[e.jsx(H,{size:14,className:C?"animate-spin":""}),C?"Restarting...":"Restart Server"]}),e.jsxs("button",{onClick:O,disabled:r,className:`flex items-center gap-2 px-4 py-2 rounded-lg text-sm transition-all ${r?"bg-dark-hover text-dark-muted cursor-wait":"bg-accent-red/10 text-accent-red hover:bg-accent-red/20 border border-accent-red/30"}`,children:[e.jsx(ge,{size:14,className:r?"animate-pulse":""}),r?"Shutting Down...":"Shutdown Server"]})]})}),m("about")&&e.jsx(A,{icon:be,iconColor:"text-accent-blue",title:s("settings.about"),children:e.jsxs("div",{className:"text-sm text-dark-muted space-y-2",children:[e.jsxs("p",{children:[e.jsx("span",{className:"text-dark-text",children:"DeepSeekCode Web"})," v1.0.0"]}),e.jsx("p",{children:s("settings.aboutDesc")}),e.jsx("p",{className:"text-xs",children:"Powered by React + TypeScript + TailwindCSS"})]})}),v.trim()&&!["language","theme","provider","context","stt","configFiles","system","about"].some(m)&&e.jsxs("div",{className:"text-center py-12 text-dark-muted",children:[e.jsx(Q,{size:32,className:"mx-auto mb-2 opacity-40"}),e.jsxs("p",{className:"text-sm",children:["No settings match “",v,"”"]})]})]})]})});function ze(){const t=X(o=>o.maxContextTokens),x=X(o=>o.setMaxContextTokens),[l,s]=n.useState(String(t)),[d,i]=n.useState(!1),f=[32e3,64e3,128e3,256e3,512e3,1e6,2e6],N=async()=>{const o=parseInt(l,10);if(!(isNaN(o)||o<1e3)){i(!0),x(o);try{await w.config.provider.save({contextWindow:o}),u.success("Context window saved")}catch(p){u.error("Failed to save context window: "+(p instanceof Error?p.message:"Unknown error"))}i(!1)}},g=o=>o>=1e6?(o/1e6).toFixed(0)+"M":(o/1e3).toFixed(0)+"K";return e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-dark-muted mb-3",children:"Set the maximum context window (in tokens) for your AI model. This controls how the progress bar and usage percentage are calculated."}),e.jsxs("div",{className:"flex items-center gap-3 mb-3",children:[e.jsx("input",{type:"number",value:l,onChange:o=>s(o.target.value),min:1e3,max:1e7,step:1e3,className:"w-32 bg-dark-bg border border-dark-border rounded-lg px-3 py-1.5 text-sm text-dark-text font-mono focus:border-accent-blue/60 focus:ring-2 focus:ring-accent-blue/15 outline-none transition-all"}),e.jsx("span",{className:"text-sm text-dark-muted",children:"tokens"}),e.jsx("button",{onClick:N,disabled:d,className:"px-3 py-1.5 rounded-lg text-sm bg-accent-blue text-white hover:opacity-90 transition-opacity disabled:opacity-50",children:d?"Saving...":"Apply"})]}),e.jsx("div",{className:"flex flex-wrap gap-2",children:f.map(o=>e.jsx("button",{onClick:async()=>{s(String(o)),x(o);try{await w.config.provider.save({contextWindow:o}),u.success("Context window saved")}catch(p){u.error("Failed to save context window: "+(p instanceof Error?p.message:"Unknown error"))}},className:"px-3 py-1 rounded-lg text-xs transition-all",children:g(o)},o))}),e.jsxs("p",{className:"text-xs text-dark-muted mt-2",children:["Current: ",e.jsx("span",{className:"font-mono text-dark-text",children:parseInt(l,10).toLocaleString()})," tokens"]})]})}function A({icon:t,iconColor:x,title:l,children:s}){return e.jsxs("div",{className:"rounded-xl border border-dark-border bg-dark-surface p-4",children:[e.jsxs("h3",{className:"font-medium mb-3 flex items-center gap-2",children:[e.jsx(t,{size:16,className:x}),l]}),s]})}export{Ie as SettingsPanel};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as e}from"./markdown-BrFQfawv.js";import{a,z as Ue,h as ve,aa as Ze,aG as L,ak as ye,aH as we,ag as Se,L as Ce,I as Ke,aq as Xe,G as De,ac as Ye,f as et,Z as tt,O as st,a7 as at,aI as rt}from"./icons-B9mi2ie6.js";import{a as b,d as A,B as M,M as Ae,I as nt,C as lt}from"./index-PcXINYWS.js";import"./react-vendor-CiRFOYk_.js";import"./state-BcoCffxz.js";import"./panels-BX-TtLOU.js";function Oe(){const c=new Date().toISOString();return{id:`wf_${Date.now()}`,title:"新模板",description:"",nodes:[{id:"task-1",title:"任务",description:"描述任务",type:"task",status:"pending",dependencies:[],priority:5,createdAt:c,updatedAt:c}],createdAt:c,updatedAt:c}}function H(c){const d=(c.nodes??[]).map(x=>({...x,dependencies:Array.isArray(x.dependencies)?x.dependencies:[]}));return{...c,nodes:d}}const it={saved:"沉淀",script:"脚本",handwritten:"手写"},ct={explore:"info",plan:"default",execute:"success",verify:"warning",summarize:"info",generic:"default"},ot={explore:"探索",plan:"规划",execute:"执行",verify:"校验",summarize:"总结",generic:"通用"};function dt(c){var x;const d=(x=c.metadata)==null?void 0:x.role;return typeof d=="string"?d:c.type}function xt(c){const d=new Map(c.map(n=>[n.id,n])),x=new Set,r=[];let u=[...c];for(;u.length>0;){const n=u.filter(m=>(m.dependencies??[]).every(h=>x.has(h)||!d.has(h)));if(n.length===0){r.push(...u);break}for(const m of n)r.push(m),x.add(m.id);u=u.filter(m=>!x.has(m.id))}return r}function ut({definition:c}){const d=a.useMemo(()=>xt(c.nodes||[]),[c.nodes]);if(d.length===0)return e.jsx("p",{className:"text-xs text-dark-muted",children:"此模板暂无节点。"});const x=new Map(d.map(r=>[r.id,r]));return e.jsx("div",{className:"space-y-0",children:d.map((r,u)=>{const n=dt(r),m=ct[n]||"default",h=(r.dependencies??[]).map(p=>{var f;return((f=x.get(p))==null?void 0:f.title)||p}).filter((p,f,y)=>y.indexOf(p)===f);return e.jsxs("div",{className:"flex gap-2.5",children:[e.jsxs("div",{className:"flex flex-col items-center shrink-0",children:[e.jsx("span",{className:"w-6 h-6 rounded-full grid place-items-center bg-dark-border/60 text-dark-muted text-[10px] font-semibold shrink-0",children:u+1}),u<d.length-1&&e.jsx("span",{className:"w-px flex-1 bg-dark-border/70 my-0.5"})]}),e.jsxs("div",{className:"flex-1 min-w-0 mb-1.5 rounded-lg border border-dark-border bg-dark-bg/60 overflow-hidden",children:[e.jsxs("div",{className:"flex items-center gap-2 px-2.5 py-1.5",children:[e.jsx(rt,{size:12,className:A("shrink-0",n==="verify"?"text-accent-yellow":n==="explore"?"text-accent-blue":"text-dark-muted")}),e.jsx("span",{className:"text-xs font-medium text-dark-text truncate flex-1",children:r.title}),e.jsx(M,{size:"sm",variant:m,children:ot[n]||n})]}),r.description&&e.jsx("p",{className:"px-2.5 pb-1.5 text-[11px] text-dark-muted leading-relaxed",children:r.description}),h.length>0&&e.jsxs("div",{className:"px-2.5 pb-2 flex items-center flex-wrap gap-1",children:[e.jsx(De,{size:11,className:"text-dark-muted/60 shrink-0"}),h.map(p=>e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-dark-hover text-dark-muted truncate max-w-[16rem]",children:p},p))]})]})]},r.id)})})}function kt({onLaunch:c}){const[d,x]=a.useState([]),[r,u]=a.useState(null),[n,m]=a.useState(null),[h,p]=a.useState(!1),[f,y]=a.useState(""),[O,ze]=a.useState(""),[w,Ie]=a.useState("全部"),[W,Q]=a.useState(""),[U,Z]=a.useState(""),[K,X]=a.useState(""),[Y,ee]=a.useState(""),[te,se]=a.useState(""),[Je,T]=a.useState(!1),[ae,k]=a.useState(""),[Ee,Le]=a.useState(!1),[re,ne]=a.useState([]),[Me,le]=a.useState(!1),[N,ie]=a.useState(null),[S,D]=a.useState(null),[z,ce]=a.useState(null),[Te,oe]=a.useState(!1),[Re,R]=a.useState(!1),[$e,I]=a.useState(!1),[$,V]=a.useState(""),[de,B]=a.useState(""),[xe,ue]=a.useState("general"),[me,q]=a.useState("[]"),[pe,F]=a.useState(()=>JSON.stringify(Oe(),null,2)),[be,g]=a.useState(""),[P,J]=a.useState(!1),[_,fe]=a.useState(""),[E,G]=a.useState(!1),[he,j]=a.useState(""),Ve=()=>{V(""),B(""),ue("general"),q("[]"),F(JSON.stringify(Oe(),null,2)),g(""),J(!1),fe(""),G(!1),j(""),I(!0)},Be=async()=>{if(!_.trim()){j("描述不能为空");return}G(!0),j("");try{const t=await b.workflows.synthesize(_.trim());t.success&&t.data?(V(t.data.title||""),B(t.data.description||""),q("[]"),F(JSON.stringify(H(t.data),null,2)),J(!1),g("")):j(t.error||"AI 起草失败,请重试或改用手写")}catch(t){j(t instanceof Error?t.message:String(t))}finally{G(!1)}},qe=async()=>{if(!$.trim()){g("模板名称不能为空");return}let t,s;try{t=JSON.parse(me),s=JSON.parse(pe)}catch(i){g(`JSON 解析失败:${i instanceof Error?i.message:String(i)}`);return}if(!s||typeof s!="object"||!Array.isArray(s.nodes)){g("definition 必须是含 nodes 数组的 WorkflowDefinition");return}g("");const l=await b.templates.create({name:$.trim(),description:de.trim(),category:xe.trim()||"general",inputs:Array.isArray(t)?t:[],definition:H(s),source:{type:"handwritten"}});l.success&&l.data?(I(!1),u(l.data.id),v()):g(l.error||"创建失败")},v=a.useCallback(async()=>{const t=await b.templates.list();t.success&&t.data&&(x(t.data),r&&!t.data.some(s=>s.id===r)&&(u(null),m(null)))},[r]);a.useEffect(()=>{v()},[]),a.useEffect(()=>{if(!r){m(null);return}let t=!1;return p(!0),b.templates.get(r).then(s=>{t||(s.success&&s.data?(m(s.data),Q(s.data.name),Z(s.data.description),X(s.data.category),ee(JSON.stringify(s.data.inputs,null,2)),se(JSON.stringify(s.data.definition,null,2)),T(!1),k(""),le(!1),ie(null),b.templates.versions(r).then(l=>{l.success&&l.data&&ne(l.data)})):y(s.error||"加载模板失败"))}).catch(()=>y("加载模板失败")).finally(()=>p(!1)),()=>{t=!0}},[r]);const Fe=a.useMemo(()=>{const t=new Set;for(const s of d)t.add(s.category||"其他");return["全部",...[...t].sort()]},[d]),ge=a.useMemo(()=>{const t=O.trim().toLowerCase();return d.filter(s=>w!=="全部"&&(s.category||"其他")!==w?!1:t?`${s.name} ${s.description} ${s.category}`.toLowerCase().includes(t):!0)},[d,O,w]),ke=a.useMemo(()=>{const t=new Map;for(const s of ge){const l=s.category||"其他",i=t.get(l)||[];i.push(s),t.set(l,i)}return[...t.entries()]},[ge]),C=t=>s=>{t(s),T(!0),k("")},Pe=async()=>{if(!r||!n)return;let t,s;try{t=JSON.parse(Y),s=JSON.parse(te)}catch(i){k(`JSON 解析失败:${i instanceof Error?i.message:String(i)}`);return}k("");const l=await b.templates.update(r,{name:W,description:U,category:K,inputs:Array.isArray(t)?t:[],definition:H(s)});l.success&&l.data?(m(l.data),T(!1),k(`已保存(v${l.data.version})`),v(),b.templates.versions(r).then(i=>{i.success&&i.data&&ne(i.data)})):k(l.error||"保存失败")},_e=async t=>{if(!r)return;oe(!0);const s=await b.templates.render(r,t);oe(!1),ce({ok:s.success,json:s.success?JSON.stringify(s.data,null,2):void 0,error:s.success?void 0:s.error||"渲染失败"})},Ge=t=>{n&&(c(n,t),D(null))},Ne=t=>{n&&(ce(null),D({mode:t}))},He=async t=>{if(!r)return;const s=await b.templates.getVersion(r,t);s.success&&s.data&&ie(s.data)},We=async()=>{if(!r)return;(await b.templates.remove(r)).success&&(u(null),R(!1),v())},Qe=()=>{var l,i,je;if(!r)return e.jsx("div",{className:"flex-1 flex items-center justify-center text-sm text-dark-muted",children:e.jsxs("div",{className:"text-center px-8",children:[e.jsx(Ke,{size:36,className:"mx-auto mb-2 opacity-30 text-dark-muted"}),e.jsx("p",{children:"从左侧选择一个模板查看 / 编辑"}),e.jsx("p",{className:"text-xs text-dark-muted/60 mt-1",children:"内置预设开箱即用;也可以把一次工作流运行「保存为模板」沉淀复用。"})]})});if(h||!n)return e.jsxs("div",{className:"flex-1 flex items-center justify-center text-dark-muted",children:[e.jsx(Ce,{className:"w-4 h-4 animate-spin mr-2"})," 加载…"]});const t=((i=(l=n.definition)==null?void 0:l.nodes)==null?void 0:i.length)??0,s=((je=n.inputs)==null?void 0:je.length)??0;return e.jsx("div",{className:"flex-1 min-w-0 flex flex-col overflow-y-auto custom-scrollbar",children:e.jsxs("div",{className:"p-5 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("input",{value:W,onChange:o=>C(Q)(o.target.value),className:"flex-1 min-w-[200px] px-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-sm text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue"}),e.jsxs(M,{variant:"info",children:["v",n.version]}),e.jsx(M,{variant:n.source.type==="saved"?"success":"default",children:it[n.source.type]||n.source.type}),e.jsx("button",{onClick:()=>R(!0),className:"p-2 rounded-lg text-dark-muted hover:text-accent-red hover:bg-dark-hover transition-colors",title:"删除模板",children:e.jsx(Xe,{className:"w-4 h-4"})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-xs text-dark-muted mb-1 block",children:"分类(category)"}),e.jsx("input",{value:K,onChange:o=>C(X)(o.target.value),className:"w-full px-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-sm text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue"})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-xs text-dark-muted mb-1 block",children:"描述(description)"}),e.jsx("input",{value:U,onChange:o=>C(Z)(o.target.value),className:"w-full px-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-sm text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue"})]})]}),e.jsxs("div",{className:"flex items-center gap-4 flex-wrap text-xs text-dark-muted",children:[e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(De,{size:13,className:"text-accent-blue"}),t," 个节点"]}),e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(we,{size:13,className:"text-accent-green"}),"拓扑:串行 / 并行依赖"]}),s>0&&e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(L,{size:13,className:"text-accent-yellow"}),s," 个输入参数"]}),e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx(ye,{size:13,className:"text-dark-muted/60"}),new Date(n.updatedAt).toLocaleString()]})]}),e.jsxs("div",{className:"border border-dark-border rounded-lg overflow-hidden",children:[e.jsxs("div",{className:"px-3 py-2 bg-dark-surface border-b border-dark-border flex items-center gap-2",children:[e.jsx(Ye,{size:13,className:"text-accent-blue shrink-0"}),e.jsx("span",{className:"text-xs font-semibold text-dark-text",children:"工作流节点"}),e.jsx("span",{className:"ml-auto text-[10px] text-dark-muted",children:"按依赖拓扑排序"})]}),e.jsx("div",{className:"p-3",children:e.jsx(ut,{definition:n.definition})})]}),e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsxs("button",{onClick:()=>Ne("launch"),className:"px-4 py-2 rounded-lg bg-accent-blue text-white hover:bg-accent-blue/90 transition-colors inline-flex items-center gap-1.5",children:[e.jsx(et,{className:"w-4 h-4"})," 用模板新建会话"]}),e.jsxs("button",{onClick:()=>Ne("preview"),className:"px-4 py-2 rounded-lg border border-dark-border text-dark-text hover:bg-dark-hover transition-colors inline-flex items-center gap-1.5",children:[e.jsx(tt,{className:"w-4 h-4"})," 试跑"]}),e.jsxs("button",{onClick:()=>le(o=>!o),className:"px-4 py-2 rounded-lg border border-dark-border text-dark-text hover:bg-dark-hover transition-colors inline-flex items-center gap-1.5",children:[e.jsx(st,{className:"w-4 h-4"})," 版本历史"]}),e.jsxs("button",{onClick:()=>Le(o=>!o),className:"px-4 py-2 rounded-lg border border-dark-border text-dark-text hover:bg-dark-hover transition-colors inline-flex items-center gap-1.5",children:[e.jsx(L,{className:"w-4 h-4"})," 高级(JSON)"]}),e.jsx("button",{onClick:v,className:"p-2 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors",title:"刷新",children:e.jsx(ve,{className:"w-4 h-4"})}),ae&&e.jsx("span",{className:"text-xs text-dark-muted",children:ae})]}),Ee&&e.jsxs("div",{className:"border border-dark-border rounded-lg p-3 space-y-3",children:[e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-xs text-dark-muted mb-1 block",children:"inputs(参数 schema,JSON)— 修改后保存会升版本"}),e.jsx("textarea",{value:Y,onChange:o=>C(ee)(o.target.value),rows:5,spellCheck:!1,className:"w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-xs font-mono text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue"})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-xs text-dark-muted mb-1 block",children:"definition(WorkflowDefinition,JSON)"}),e.jsx("textarea",{value:te,onChange:o=>C(se)(o.target.value),rows:10,spellCheck:!1,className:"w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-xs font-mono text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue"})]}),e.jsxs("button",{onClick:Pe,disabled:!Je,className:"px-4 py-2 rounded-lg bg-accent-blue text-white hover:bg-accent-blue/90 disabled:opacity-40 transition-colors inline-flex items-center gap-1.5",children:[e.jsx(at,{className:"w-4 h-4"})," 保存修改"]})]}),Me&&e.jsxs("div",{className:"border border-dark-border rounded-lg p-3 space-y-1.5",children:[e.jsxs("div",{className:"text-xs text-dark-muted mb-1",children:["不可变版本快照(versions/","{v}",".json)"]}),re.length===0&&e.jsx("div",{className:"text-xs text-dark-muted/60",children:"暂无版本记录"}),re.map(o=>e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{onClick:()=>He(o),className:"text-xs px-2 py-1 rounded border border-dark-border hover:border-accent-blue/50 transition-colors",children:["v",o]}),N&&N.version===o&&e.jsx("span",{className:"text-xs text-dark-muted/60",children:"当前查看中"})]},o)),N&&e.jsx("pre",{className:"mt-2 p-3 rounded-lg bg-dark-bg text-[10px] font-mono text-dark-muted max-h-60 overflow-y-auto custom-scrollbar",children:JSON.stringify({version:N.version,inputs:N.inputs,definition:N.definition},null,2)})]})]})})};return e.jsxs("div",{className:"flex flex-1 min-h-0 bg-dark-bg",children:[e.jsxs("div",{className:"w-80 shrink-0 border-r border-dark-border overflow-y-auto custom-scrollbar p-3",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2 px-1",children:[e.jsx("span",{className:"text-xs uppercase tracking-wider text-dark-muted font-medium",children:"模板库"}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsxs("button",{onClick:Ve,className:"p-1.5 rounded-lg text-accent-blue hover:bg-accent-blue/10 transition-colors inline-flex items-center gap-1 text-xs",title:"新建模板",children:[e.jsx(Ue,{className:"w-4 h-4"}),e.jsx("span",{className:"hidden xl:inline",children:"新建"})]}),e.jsx("button",{onClick:()=>{y(""),v()},className:"p-1.5 rounded-lg text-dark-muted hover:text-dark-text hover:bg-dark-hover transition-colors",title:"刷新",children:e.jsx(ve,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"relative mb-2",children:[e.jsx(Ze,{size:13,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-dark-muted/60"}),e.jsx("input",{value:O,onChange:t=>ze(t.target.value),placeholder:"搜索模板…",className:"w-full pl-8 pr-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-xs text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue placeholder:text-dark-muted/50"})]}),e.jsx("div",{className:"flex items-center gap-1.5 mb-3 flex-wrap",children:Fe.map(t=>e.jsx("button",{onClick:()=>Ie(t),className:A("text-[11px] px-2 py-0.5 rounded-full border transition-colors",w===t?"border-accent-blue text-accent-blue bg-accent-blue/10":"border-dark-border text-dark-muted hover:border-dark-muted/50 hover:text-dark-text"),children:t},t))}),f&&e.jsx("div",{className:"text-xs text-accent-red mb-2",children:f}),ke.length===0&&!f&&e.jsx("div",{className:"text-xs text-dark-muted px-1 py-4 text-center",children:O||w!=="全部"?"没有匹配的模板":"暂无模板。完成动态工作流后保存为模板,或由 AI 起草。"}),ke.map(([t,s])=>e.jsxs("div",{className:"mb-4",children:[e.jsx("div",{className:"px-1 mb-1.5 text-[10px] uppercase tracking-wider text-dark-muted/70",children:t}),e.jsx("div",{className:"space-y-1.5",children:s.map(l=>{const i=r===l.id;return e.jsxs("button",{onClick:()=>u(l.id),className:A("w-full text-left px-3 py-2.5 rounded-lg border transition-colors",i?"bg-accent-blue/10 border-accent-blue/30 text-dark-text":"border-transparent hover:bg-dark-hover text-dark-muted"),children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("span",{className:"text-sm font-medium truncate",children:l.name}),e.jsxs(M,{size:"sm",variant:"info",children:["v",l.version]})]}),l.description&&e.jsx("div",{className:"text-[11px] text-dark-muted/70 truncate mt-0.5",children:l.description}),e.jsxs("div",{className:"flex items-center gap-2 mt-1.5 text-[10px] text-dark-muted/60",children:[l.inputs.length>0&&e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(L,{size:10}),l.inputs.length," 参数"]}),e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(ye,{size:10}),new Date(l.updatedAt).toLocaleDateString()]}),e.jsxs("span",{className:"ml-auto inline-flex items-center gap-0.5 text-accent-blue",children:[i?"查看中":"查看",!i&&e.jsx(we,{size:10})]})]})]},l.id)})})]},t))]}),Qe(),S&&n&&e.jsxs(Ae,{isOpen:!0,onClose:()=>D(null),title:S.mode==="launch"?`用「${n.name}」新建会话`:`试跑「${n.name}」`,size:"md",children:[e.jsx(nt,{template:n,onCancel:()=>D(null),onSubmit:S.mode==="launch"?Ge:_e,submitLabel:S.mode==="launch"?"启动":"渲染预览",busy:Te}),S.mode==="preview"&&z&&e.jsx("div",{className:"mt-4",children:z.ok?e.jsxs("div",{children:[e.jsx("div",{className:"text-xs text-accent-green mb-1.5",children:"渲染成功 — 产物 definition 可直接启动"}),e.jsx("pre",{className:"p-3 rounded-lg bg-dark-bg text-[10px] font-mono text-dark-muted max-h-72 overflow-y-auto custom-scrollbar",children:z.json})]}):e.jsx("div",{className:"text-xs text-accent-red",children:z.error})})]}),e.jsx(Ae,{isOpen:$e,onClose:()=>I(!1),title:"新建模板",size:"lg",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-xs text-dark-muted mb-1 block",children:"名称 *"}),e.jsx("input",{value:$,onChange:t=>V(t.target.value),placeholder:"如:Triage Inbox",className:"w-full px-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-sm text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue"})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-xs text-dark-muted mb-1 block",children:"分类"}),e.jsx("input",{value:xe,onChange:t=>ue(t.target.value),className:"w-full px-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-sm text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue"})]})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-xs text-dark-muted mb-1 block",children:"描述"}),e.jsx("input",{value:de,onChange:t=>B(t.target.value),className:"w-full px-3 py-1.5 rounded-lg bg-dark-bg border border-dark-border text-sm text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue"})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsxs("button",{type:"button",onClick:()=>{J(!0),j("")},className:A("px-3 py-1.5 rounded-lg border text-xs transition-colors inline-flex items-center gap-1.5",P?"border-accent-blue text-accent-blue bg-accent-blue/10":"border-dark-border text-dark-muted hover:border-dark-muted/50 hover:text-dark-text"),children:[e.jsx(Se,{size:12})," 让 AI 起草"]}),e.jsxs("button",{type:"button",onClick:()=>J(!1),className:A("px-3 py-1.5 rounded-lg border text-xs transition-colors inline-flex items-center gap-1.5",P?"border-dark-border text-dark-muted hover:border-dark-muted/50 hover:text-dark-text":"border-accent-blue text-accent-blue bg-accent-blue/10"),children:[e.jsx(L,{size:12})," 手写 JSON"]})]}),P?e.jsxs("div",{className:"space-y-2",children:[e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-xs text-dark-muted mb-1 block",children:"用一句话描述要做什么(AI 会拆成带角色的工作流节点)"}),e.jsx("textarea",{value:_,onChange:t=>fe(t.target.value),rows:4,spellCheck:!1,placeholder:"如:审查当前仓库代码的安全/性能/正确性,输出分级报告,全程只读",className:"w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-xs text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue"})]}),e.jsxs("button",{type:"button",onClick:()=>void Be(),disabled:E,className:"px-4 py-2 rounded-lg bg-accent-blue text-white hover:bg-accent-blue/90 disabled:opacity-40 transition-colors inline-flex items-center gap-1.5",children:[E?e.jsx(Ce,{className:"w-4 h-4 animate-spin"}):e.jsx(Se,{className:"w-4 h-4"}),E?"AI 拆解中…":"生成工作流"]}),E&&e.jsx("div",{className:"text-xs text-dark-muted",children:"约 30-60s(推理模型可能更久),生成后可手动微调"}),he&&e.jsx("div",{className:"text-xs text-accent-red",children:he})]}):e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-xs text-dark-muted mb-1 block",children:"inputs(参数 schema,JSON,用 <<input:name>> 引用)"}),e.jsx("textarea",{value:me,onChange:t=>q(t.target.value),rows:4,spellCheck:!1,placeholder:'[{ "name": "folder", "label": "目录", "type": "folder", "required": true }]',className:"w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-xs font-mono text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue"})]}),e.jsxs("label",{className:"block",children:[e.jsx("span",{className:"text-xs text-dark-muted mb-1 block",children:"definition(WorkflowDefinition,JSON)"}),e.jsx("textarea",{value:pe,onChange:t=>F(t.target.value),rows:12,spellCheck:!1,className:"w-full px-3 py-2 rounded-lg bg-dark-bg border border-dark-border text-xs font-mono text-dark-text focus:outline-none focus:ring-1 focus:ring-accent-blue"})]})]}),be&&e.jsx("div",{className:"text-xs text-accent-red",children:be}),e.jsxs("div",{className:"flex justify-end gap-3",children:[e.jsx("button",{onClick:()=>I(!1),className:"px-4 py-2 rounded-lg border border-dark-border text-dark-text hover:bg-dark-hover transition-colors",children:"取消"}),e.jsx("button",{onClick:()=>void qe(),className:"px-4 py-2 rounded-lg bg-accent-blue text-white hover:bg-accent-blue/90 transition-colors",children:"创建"})]})]})}),e.jsx(lt,{isOpen:Re,onClose:()=>R(!1),onConfirm:We,title:"删除模板",message:`确定删除模板「${(n==null?void 0:n.name)||r}」?该操作不可恢复。`,confirmText:"删除",variant:"danger"})]})}export{kt as TemplatesTab,xt as topoSortNodes};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{j as r}from"./markdown-BrFQfawv.js";import{a as s,aO as U,aP as J,h as X,b as G,D as V,aq as K,w as Q,x as Z}from"./icons-B9mi2ie6.js";import{r as ee,a as te}from"./terminal-DgJRGhIz.js";import{e as $,f as re,g as C,t as se}from"./index-PcXINYWS.js";import"./react-vendor-CiRFOYk_.js";import"./state-BcoCffxz.js";import"./panels-BX-TtLOU.js";var ne=ee(),oe=te();const ae={background:"#1e1e1e",foreground:"#d4d4d4",cursor:"#d4d4d4",cursorAccent:"#1e1e1e",black:"#1e1e1e",red:"#f44747",green:"#608b4e",yellow:"#dcdcaa",blue:"#569cd6",magenta:"#c586c0",cyan:"#4ec9b0",white:"#d4d4d4",brightBlack:"#808080",brightRed:"#f44747",brightGreen:"#608b4e",brightYellow:"#dcdcaa",brightBlue:"#569cd6",brightMagenta:"#c586c0",brightCyan:"#4ec9b0",brightWhite:"#ffffff"};function fe(){const p=s.useRef(null),c=s.useRef(null),k=s.useRef(null),o=s.useRef(null),[j,I]=s.useState(!1),[w,S]=s.useState(null),[B,y]=s.useState(!0),d=s.useRef(!1),R=s.useRef({isAtBottom:!0}),M=s.useCallback(t=>{const e=c.current;if(!e)return;const n=e.buffer.active;R.current.isAtBottom=n.baseY+e.rows>=n.length,e.write(t,()=>{R.current.isAtBottom&&!d.current&&e.scrollToBottom();const l=e.buffer.active;l.baseY+e.rows>=l.length&&(d.current=!1)})},[]),[v,T]=s.useState(""),b=s.useCallback(()=>{const t=c.current,e=o.current;!t||!e||e.readyState!==WebSocket.OPEN||e.send(JSON.stringify({type:"resize",cols:t.cols,rows:t.rows}))},[]),{status:N,errorMessage:z,port:E}=$(),{setStarting:A,setRunning:D,setStopping:L,setIdle:F,setError:m}=$(),{workspaceDir:x}=re(),h=s.useCallback(()=>{o.current&&(o.current.onclose=null,o.current.onmessage=null,o.current.onerror=null,o.current.onopen=null,o.current.close(),o.current=null)},[]),g=s.useCallback(async t=>{A(),t.writeln("\x1B[90mStarting local terminal...\x1B[0m");try{const e=await C.post("/api/terminal/start",{workspaceDir:x});if(!e.success||!e.data){const a=e.error||"Failed to start terminal";m(a),t.writeln(`\x1B[31m${a}\x1B[0m`);return}const n=e.data.port??e.data.ttydPort,l=e.data.wsUrl;if(!n||!l){const a="Invalid terminal start response";m(a),t.writeln(`\x1B[31m${a}\x1B[0m`);return}D(n,l),T(e.data.workspaceDir||x);const i=new WebSocket(l);o.current=i,i.onopen=()=>{const a=sessionStorage.getItem("auth_token")??localStorage.getItem("auth_token");a&&i.send(JSON.stringify({type:"auth",token:a})),t.clear(),t.focus(),t.writeln("\x1B[32mConnected to local shell\x1B[0m"),setTimeout(()=>{var u,f;(u=k.current)==null||u.fit(),b(),d.current||(f=c.current)==null||f.scrollToBottom()},50)},i.onmessage=a=>{typeof a.data=="string"&&M(a.data)},i.onerror=()=>{m("Terminal connection error")},i.onclose=()=>{o.current===i&&(o.current=null,m("Terminal disconnected"),t.writeln("\x1B[33mTerminal disconnected\x1B[0m"))}}catch(e){const n=e instanceof Error?e.message:"Unknown error";m(n),t.writeln(`\x1B[31m${n}\x1B[0m`)}},[x,A,D,m,b]),W=s.useCallback(async()=>{h(),L();try{await C.post("/api/terminal/stop")}catch{}F()},[h,L,F]);s.useEffect(()=>{p.current&&C.get("/api/terminal/status").then(t=>{const e=t.success&&t.data?t.data:null;S((e==null?void 0:e.terminalAvailable)!==!1),e!=null&&e.workspaceDir&&T(e.workspaceDir)}).catch(()=>S(!1))},[]),s.useEffect(()=>{if(w!==!0||!p.current)return;const t=new ne.Terminal({theme:ae,fontFamily:'"Cascadia Code", "Fira Code", Consolas, "Courier New", monospace',fontSize:14,lineHeight:1.2,cursorBlink:!0,cursorStyle:"block",scrollback:1e4,convertEol:!0}),e=new oe.FitAddon;t.loadAddon(e),t.open(p.current),t.focus(),e.fit(),c.current=t,k.current=e,t.writeln("\x1B[36mDeepSeekCode Local Terminal\x1B[0m"),t.writeln("\x1B[90mRun commands directly on this machine.\x1B[0m");const n=t.onData(u=>{var f;((f=o.current)==null?void 0:f.readyState)===WebSocket.OPEN&&o.current.send(u)}),l=t.onScroll(()=>{const u=t.buffer.active;u.baseY+t.rows<u.length&&(d.current=!0,y(!1))}),i=()=>{var u;(u=k.current)==null||u.fit(),b(),d.current||t.scrollToBottom()};window.addEventListener("resize",i);const a=window.setTimeout(()=>g(t),50);return()=>{clearTimeout(a),window.removeEventListener("resize",i),n.dispose(),l.dispose(),W(),t.dispose(),c.current=null}},[w,g,W,b]);const O=s.useCallback(()=>{var e;const t=(e=c.current)==null?void 0:e.getSelection();t&&(navigator.clipboard.writeText(t),se.success("Copied selection"))},[]),P=s.useCallback(()=>{var t,e;(t=c.current)==null||t.clear(),d.current||(e=c.current)==null||e.scrollToBottom()},[]),Y=s.useCallback(()=>{h(),c.current&&(c.current.clear(),g(c.current))},[h,g]),q=s.useCallback(()=>{y(t=>{var n;const e=!t;return d.current=!e,e&&((n=c.current)==null||n.scrollToBottom()),e})},[]),_=s.useCallback(()=>{const t=`Workspace: ${v||x}
|
|
2
|
-
Terminal session: ${E??""}
|
|
3
|
-
`,e=new Blob([t],{type:"text/plain"}),n=URL.createObjectURL(e),l=document.createElement("a");l.href=n,l.download=`terminal-${Date.now()}.log`,l.click(),URL.revokeObjectURL(n)},[x,v,E]),H=s.useMemo(()=>({idle:"Idle",starting:"Connecting",running:"Connected",stopping:"Stopping",error:"Error"})[N],[N]);return w===!1?r.jsxs("div",{className:"flex-1 flex flex-col items-center justify-center bg-[#1e1e1e] gap-3 p-8",children:[r.jsx(U,{size:44,className:"text-dark-muted opacity-40"}),r.jsx("div",{className:"text-sm text-dark-muted",children:"Local terminal unavailable"})]}):r.jsxs("div",{className:`flex flex-col bg-[#1e1e1e] border-t border-dark-border ${j?"fixed inset-0 z-50":"flex-1 min-h-0"}`,children:[r.jsxs("div",{className:"flex items-center justify-between gap-3 px-3 py-2 bg-[#252526] border-b border-[#3c3c3c]",children:[r.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[r.jsx(U,{size:14,className:"text-dark-muted shrink-0"}),r.jsx("span",{className:"text-xs text-dark-muted shrink-0",children:"Terminal"}),r.jsx("span",{className:"text-xs text-dark-muted truncate",children:v||x}),r.jsxs("span",{className:"text-xs text-dark-muted",children:["[",H,"]"]}),z&&r.jsx("span",{className:"text-xs text-accent-red truncate max-w-[240px]",children:z})]}),r.jsxs("div",{className:"flex items-center gap-1 flex-wrap justify-end",children:[r.jsx("button",{onClick:q,className:`p-1 rounded hover:bg-[#3c3c3c] ${B?"text-accent-blue":"text-dark-muted"} hover:text-dark-text`,title:B?"璺熼殢杈撳嚭锛氬紑":"璺熼殢杈撳嚭锛氬叧",children:r.jsx(J,{size:12})}),r.jsx("button",{onClick:Y,className:"p-1 rounded hover:bg-[#3c3c3c] text-dark-muted hover:text-dark-text",title:"Restart",children:r.jsx(X,{size:12})}),r.jsx("button",{onClick:O,className:"p-1 rounded hover:bg-[#3c3c3c] text-dark-muted hover:text-dark-text",title:"Copy",children:r.jsx(G,{size:12})}),r.jsx("button",{onClick:_,className:"p-1 rounded hover:bg-[#3c3c3c] text-dark-muted hover:text-dark-text",title:"Download log",children:r.jsx(V,{size:12})}),r.jsx("button",{onClick:P,className:"p-1 rounded hover:bg-[#3c3c3c] text-dark-muted hover:text-dark-text",title:"Clear",children:r.jsx(K,{size:12})}),r.jsx("button",{onClick:()=>I(t=>!t),className:"p-1 rounded hover:bg-[#3c3c3c] text-dark-muted hover:text-dark-text",title:"Fullscreen",children:j?r.jsx(Q,{size:12}):r.jsx(Z,{size:12})})]})]}),r.jsx("div",{ref:p,className:"flex-1 overflow-hidden"})]})}export{fe as TerminalView,fe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{j as s}from"./markdown-BrFQfawv.js";import{a as t,h as y,_ as A,af as k,aa as $,d as R,K as F,ax as v,ay as M,az as D}from"./icons-B9mi2ie6.js";import{u as O,a as w,b as P}from"./index-PcXINYWS.js";import"./react-vendor-CiRFOYk_.js";import"./state-BcoCffxz.js";import"./panels-BX-TtLOU.js";function B(){const m=O(e=>e.mode),u=m==="normal"?"act":P(m),[d,p]=t.useState([]),[l,b]=t.useState([]),[C,h]=t.useState(!0),[g,i]=t.useState(null),[r,z]=t.useState(""),[c,f]=t.useState(null),[n,j]=t.useState(null),o=async()=>{h(!0),i(null);const e=await w.tools.list();e.success&&Array.isArray(e.data)?(p(e.data),b(e.data)):e.success&&e.data&&!Array.isArray(e.data)?i("服务端返回的工具数据格式异常"):i(e.error||"加载工具失败"),h(!1)};t.useEffect(()=>{o()},[]),t.useEffect(()=>{let e=d;r&&(e=e.filter(a=>a.name.toLowerCase().includes(r.toLowerCase())||a.description.toLowerCase().includes(r.toLowerCase()))),c&&(e=e.filter(a=>a.category===c)),b(e)},[r,c,d]);const S=async(e,a)=>{(await w.tools.toggle(e,!a)).success&&p(L=>L.map(x=>x.id===e?{...x,enabled:!a}:x))},T=[...new Set(d.map(e=>e.category))],E=e=>({file:"bg-accent-blue/20 text-accent-blue",search:"bg-accent-green/20 text-accent-green",git:"bg-accent-yellow/20 text-accent-yellow",web:"bg-accent-purple/20 text-accent-purple",system:"bg-accent-red/20 text-accent-red"})[e]||"bg-dark-hover text-dark-muted";return C?s.jsx("div",{className:"flex-1 flex items-center justify-center",children:s.jsxs("div",{className:"text-center",children:[s.jsx(y,{size:32,className:"animate-spin mx-auto mb-2 text-accent-blue"}),s.jsx("p",{className:"text-dark-muted",children:"加载中..."})]})}):g?s.jsx("div",{className:"flex-1 flex items-center justify-center",children:s.jsxs("div",{className:"text-center",children:[s.jsx(A,{size:32,className:"mx-auto mb-2 text-accent-red"}),s.jsx("p",{className:"text-accent-red mb-4",children:g}),s.jsx("button",{onClick:o,className:"px-4 py-2 bg-accent-blue text-white rounded-lg",children:"重试"})]})}):s.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden p-4",children:[s.jsxs("div",{className:"flex items-center justify-between mb-4",children:[s.jsxs("h2",{className:"text-lg font-semibold flex items-center gap-2",children:[s.jsx(k,{size:20}),"工具列表",s.jsxs("span",{className:"text-sm font-normal text-dark-muted",children:["(",l.length,")"]})]}),s.jsxs("button",{onClick:o,className:"flex items-center gap-2 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors",children:[s.jsx(y,{size:14}),"刷新"]})]}),s.jsxs("div",{className:"flex gap-3 mb-4",children:[s.jsxs("div",{className:"flex-1 relative",children:[s.jsx($,{size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-dark-muted"}),s.jsx("input",{type:"text",value:r,onChange:e=>z(e.target.value),placeholder:"搜索工具...",className:"w-full pl-10 pr-4 py-2 bg-dark-surface border border-dark-border rounded-lg text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none"})]}),s.jsxs("div",{className:"flex gap-1",children:[s.jsx("button",{onClick:()=>f(null),className:`px-3 py-2 rounded-lg text-sm transition-colors ${c?"bg-dark-surface border border-dark-border hover:bg-dark-hover":"bg-accent-blue text-white"}`,children:"全部"}),T.slice(0,4).map(e=>s.jsx("button",{onClick:()=>f(e),className:`px-3 py-2 rounded-lg text-sm transition-colors ${c===e?"bg-accent-blue text-white":"bg-dark-surface border border-dark-border hover:bg-dark-hover"}`,children:e},e))]})]}),s.jsx("div",{className:"flex-1 min-h-0 overflow-y-auto custom-scrollbar",children:s.jsxs("div",{className:"space-y-2",children:[l.map(e=>s.jsxs("div",{className:`bg-dark-surface border rounded-lg transition-colors ${e.enabled?"border-dark-border":"border-dark-border opacity-60"}`,children:[s.jsxs("div",{className:"flex items-center justify-between p-4 cursor-pointer",onClick:()=>j(n===e.id?null:e.id),children:[s.jsxs("div",{className:"flex items-center gap-3 flex-1",children:[s.jsx("button",{onClick:a=>{a.stopPropagation(),j(n===e.id?null:e.id)},className:"text-dark-muted",children:n===e.id?s.jsx(R,{size:16}):s.jsx(F,{size:16})}),s.jsx("span",{className:`px-2 py-0.5 rounded text-xs ${E(e.category)}`,children:e.category}),s.jsx("span",{className:"font-medium",children:e.name}),u==="plan"&&(e.category==="File Operation"||e.category==="Execution")&&s.jsx(v,{size:14,className:"text-accent-red ml-1.5"}),u==="plan"&&(e.category==="File Operation"||e.category==="Execution")&&s.jsx(v,{size:14,className:"text-accent-red ml-1.5"})]}),s.jsx("div",{className:"flex items-center gap-3",children:s.jsx("button",{onClick:a=>{a.stopPropagation(),S(e.id,e.enabled)},className:`p-1.5 rounded transition-colors ${e.enabled?"text-accent-green hover:bg-accent-green/10":"text-dark-muted hover:bg-dark-hover"}`,title:e.enabled?"禁用":"启用",children:e.enabled?s.jsx(M,{size:24}):s.jsx(D,{size:24})})})]}),n===e.id&&s.jsxs("div",{className:"px-4 pb-4 border-t border-dark-border",children:[s.jsx("p",{className:"text-sm text-dark-muted mt-3 mb-3",children:e.description}),e.params&&e.params.length>0&&s.jsxs("div",{children:[s.jsx("div",{className:"text-xs text-dark-muted mb-2",children:"参数"}),s.jsx("div",{className:"space-y-1",children:e.params.map((a,N)=>s.jsxs("div",{className:"flex items-center gap-2 text-sm",children:[s.jsxs("code",{className:"px-1.5 py-0.5 bg-dark-bg rounded text-accent-blue",children:[a.name,a.required&&s.jsx("span",{className:"text-accent-red",children:"*"})]}),s.jsxs("span",{className:"text-dark-muted text-xs",children:["(",a.type,")"]}),s.jsx("span",{className:"text-dark-muted text-xs",children:a.description})]},N))})]})]})]},e.id)),l.length===0&&s.jsxs("div",{className:"text-center text-dark-muted py-8",children:[s.jsx(k,{size:48,className:"mx-auto mb-2 opacity-50"}),s.jsx("p",{children:"暂无工具"})]})]})})]})}export{B as ToolsView,B as default};
|
|
@@ -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:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";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:SF Mono,Monaco,Menlo,Consolas,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: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}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.visible{visibility:visible}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.bottom-0{bottom:0}.bottom-20{bottom:5rem}.bottom-4{bottom:1rem}.bottom-5{bottom:1.25rem}.bottom-9{bottom:2.25rem}.bottom-full{bottom:100%}.left-0{left:0}.left-0\.5{left:.125rem}.left-1{left:.25rem}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-3{left:.75rem}.left-7{left:1.75rem}.left-\[18px\]{left:18px}.left-\[2px\]{left:2px}.right-0{right:0}.right-1{right:.25rem}.right-1\.5{right:.375rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-full{right:100%}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-full{top:100%}.isolate{isolation:isolate}.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}.z-\[100\]{z-index:100}.z-\[110\]{z-index:110}.col-span-2{grid-column:span 2 / span 2}.col-span-full{grid-column:1 / -1}.m-2{margin:.5rem}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.-ml-2{margin-left:-.5rem}.-ml-3{margin-left:-.75rem}.-ml-4{margin-left:-1rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.mt-px{margin-top:1px}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.\!hidden{display:none!important}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-40{height:10rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-80{height:20rem}.h-9{height:2.25rem}.h-\[260px\]{height:260px}.h-\[520px\]{height:520px}.h-\[52vh\]{height:52vh}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-24{max-height:6rem}.max-h-32{max-height:8rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.max-h-56{max-height:14rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-96{max-height:24rem}.max-h-\[200px\]{max-height:200px}.max-h-\[240px\]{max-height:240px}.max-h-\[280px\]{max-height:280px}.max-h-\[300px\]{max-height:300px}.max-h-\[320px\]{max-height:320px}.max-h-\[32vh\]{max-height:32vh}.max-h-\[400px\]{max-height:400px}.max-h-\[40vh\]{max-height:40vh}.max-h-\[420px\]{max-height:420px}.max-h-\[480px\]{max-height:480px}.max-h-\[50vh\]{max-height:50vh}.max-h-\[55vh\]{max-height:55vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[calc\(100vh-2rem\)\]{max-height:calc(100vh - 2rem)}.max-h-full{max-height:100%}.min-h-0{min-height:0px}.min-h-\[200px\]{min-height:200px}.min-h-\[300px\]{min-height:300px}.min-h-\[400px\]{min-height:400px}.min-h-\[44px\]{min-height:44px}.min-h-\[520px\]{min-height:520px}.min-h-\[55vh\]{min-height:55vh}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-4{width:1rem}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-60{width:15rem}.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-\[260px\]{width:260px}.w-\[380px\]{width:380px}.w-\[440px\]{width:440px}.w-\[560px\]{width:560px}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-\[200px\]{min-width:200px}.min-w-\[20px\]{min-width:20px}.min-w-\[260px\]{min-width:260px}.min-w-\[48px\]{min-width:48px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-5xl{max-width:64rem}.max-w-\[120px\]{max-width:120px}.max-w-\[140px\]{max-width:140px}.max-w-\[14rem\]{max-width:14rem}.max-w-\[160px\]{max-width:160px}.max-w-\[16rem\]{max-width:16rem}.max-w-\[180px\]{max-width:180px}.max-w-\[18rem\]{max-width:18rem}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[240px\]{max-width:240px}.max-w-\[45\%\]{max-width:45%}.max-w-\[60\%\]{max-width:60%}.max-w-\[78\%\]{max-width:78%}.max-w-\[8rem\]{max-width:8rem}.max-w-\[90\%\]{max-width:90%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[9rem\]{max-width:9rem}.max-w-\[calc\(100vw-1\.5rem\)\]{max-width:calc(100vw - 1.5rem)}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.origin-right{transform-origin:right}.-translate-x-1{--tw-translate-x: -.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x: .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))}.translate-x-2{--tw-translate-x: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-4{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-5{--tw-translate-x: 1.25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[18px\]{--tw-translate-x: 18px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-90{--tw-rotate: -90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;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))}.scale-95{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes blink{0%,to{opacity:1}50%{opacity:.2}}.animate-blink{animation:blink 1.2s ease-in-out infinite}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in-up{animation:fadeInUp .4s ease-out}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes slideIn{0%{opacity:0;transform:translate(-10px)}to{opacity:1;transform:translate(0)}}@keyframes spin{to{transform:rotate(360deg)}}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.cursor-wait{cursor:wait}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.scroll-mt-4{scroll-margin-top:1rem}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.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}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-\[2px\]{gap:2px}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-dark-border>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-divide-opacity, 1))}.divide-dark-border\/60>:not([hidden])~:not([hidden]){border-color:rgb(var(--color-border) / .6)}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:var(--radius-md)}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[1px\]{border-radius:1px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-b-md{border-bottom-right-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-l-lg{border-top-left-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.rounded-r{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.rounded-r-lg{border-top-right-radius:var(--radius-lg);border-bottom-right-radius:var(--radius-lg)}.rounded-t{border-top-left-radius:var(--radius-md);border-top-right-radius:var(--radius-md)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-l-4{border-left-width:4px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-\[\#3c3c3c\]{--tw-border-opacity: 1;border-color:rgb(60 60 60 / var(--tw-border-opacity, 1))}.border-accent-blue{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-blue) / var(--tw-border-opacity, 1))}.border-accent-blue\/30{border-color:rgb(var(--color-accent-blue) / .3)}.border-accent-blue\/40{border-color:rgb(var(--color-accent-blue) / .4)}.border-accent-blue\/50{border-color:rgb(var(--color-accent-blue) / .5)}.border-accent-blue\/60{border-color:rgb(var(--color-accent-blue) / .6)}.border-accent-cyan\/30{border-color:#39c5cf4d}.border-accent-green{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-green) / var(--tw-border-opacity, 1))}.border-accent-green\/30{border-color:rgb(var(--color-accent-green) / .3)}.border-accent-green\/40{border-color:rgb(var(--color-accent-green) / .4)}.border-accent-green\/50{border-color:rgb(var(--color-accent-green) / .5)}.border-accent-purple\/30{border-color:rgb(var(--color-accent-purple) / .3)}.border-accent-red{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-red) / var(--tw-border-opacity, 1))}.border-accent-red\/30{border-color:rgb(var(--color-accent-red) / .3)}.border-accent-red\/40{border-color:rgb(var(--color-accent-red) / .4)}.border-accent-red\/60{border-color:rgb(var(--color-accent-red) / .6)}.border-accent-yellow\/20{border-color:rgb(var(--color-accent-yellow) / .2)}.border-accent-yellow\/30{border-color:rgb(var(--color-accent-yellow) / .3)}.border-accent-yellow\/40{border-color:rgb(var(--color-accent-yellow) / .4)}.border-accent-yellow\/50{border-color:rgb(var(--color-accent-yellow) / .5)}.border-accent-yellow\/60{border-color:rgb(var(--color-accent-yellow) / .6)}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-500\/30{border-color:#f59e0b4d}.border-amber-500\/40{border-color:#f59e0b66}.border-blue-300{--tw-border-opacity: 1;border-color:rgb(147 197 253 / var(--tw-border-opacity, 1))}.border-blue-400\/30{border-color:#60a5fa4d}.border-blue-500\/25{border-color:#3b82f640}.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-cyan-500\/30{border-color:#06b6d44d}.border-dark-border{--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1))}.border-dark-border\/30{border-color:rgb(var(--color-border) / .3)}.border-dark-border\/40{border-color:rgb(var(--color-border) / .4)}.border-dark-border\/50{border-color:rgb(var(--color-border) / .5)}.border-dark-border\/60{border-color:rgb(var(--color-border) / .6)}.border-dark-border\/70{border-color:rgb(var(--color-border) / .7)}.border-emerald-500\/30{border-color:#10b9814d}.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-gray-400{--tw-border-opacity: 1;border-color:rgb(156 163 175 / var(--tw-border-opacity, 1))}.border-gray-600{--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.border-green-400\/30{border-color:#4ade804d}.border-green-500\/30{border-color:#22c55e4d}.border-green-600\/40{border-color:#16a34a66}.border-indigo-500\/30{border-color:#6366f14d}.border-lime-500\/30{border-color:#84cc164d}.border-orange-500\/30{border-color:#f973164d}.border-purple-500\/30{border-color:#a855f74d}.border-red-500\/30{border-color:#ef44444d}.border-red-500\/40{border-color:#ef444466}.border-transparent{border-color:transparent}.border-white\/25{border-color:#ffffff40}.border-yellow-500\/25{border-color:#eab30840}.border-l-accent-blue{--tw-border-opacity: 1;border-left-color:rgb(var(--color-accent-blue) / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-r-transparent{border-right-color:transparent}.border-t-accent-blue{--tw-border-opacity: 1;border-top-color:rgb(var(--color-accent-blue) / var(--tw-border-opacity, 1))}.border-t-transparent{border-top-color:transparent}.bg-\[\#1e1e1e\]{--tw-bg-opacity: 1;background-color:rgb(30 30 30 / var(--tw-bg-opacity, 1))}.bg-\[\#252526\]{--tw-bg-opacity: 1;background-color:rgb(37 37 38 / var(--tw-bg-opacity, 1))}.bg-accent-blue{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-blue) / var(--tw-bg-opacity, 1))}.bg-accent-blue\/10{background-color:rgb(var(--color-accent-blue) / .1)}.bg-accent-blue\/15{background-color:rgb(var(--color-accent-blue) / .15)}.bg-accent-blue\/20{background-color:rgb(var(--color-accent-blue) / .2)}.bg-accent-blue\/5{background-color:rgb(var(--color-accent-blue) / .05)}.bg-accent-blue\/90{background-color:rgb(var(--color-accent-blue) / .9)}.bg-accent-cyan{--tw-bg-opacity: 1;background-color:rgb(57 197 207 / var(--tw-bg-opacity, 1))}.bg-accent-cyan\/10{background-color:#39c5cf1a}.bg-accent-cyan\/15{background-color:#39c5cf26}.bg-accent-green{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-green) / var(--tw-bg-opacity, 1))}.bg-accent-green\/10{background-color:rgb(var(--color-accent-green) / .1)}.bg-accent-green\/15{background-color:rgb(var(--color-accent-green) / .15)}.bg-accent-green\/20{background-color:rgb(var(--color-accent-green) / .2)}.bg-accent-green\/5{background-color:rgb(var(--color-accent-green) / .05)}.bg-accent-orange\/15{background-color:#d7775326}.bg-accent-purple{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-purple) / var(--tw-bg-opacity, 1))}.bg-accent-purple\/10{background-color:rgb(var(--color-accent-purple) / .1)}.bg-accent-purple\/15{background-color:rgb(var(--color-accent-purple) / .15)}.bg-accent-purple\/20{background-color:rgb(var(--color-accent-purple) / .2)}.bg-accent-red{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-red) / var(--tw-bg-opacity, 1))}.bg-accent-red\/10{background-color:rgb(var(--color-accent-red) / .1)}.bg-accent-red\/15{background-color:rgb(var(--color-accent-red) / .15)}.bg-accent-red\/20{background-color:rgb(var(--color-accent-red) / .2)}.bg-accent-red\/5{background-color:rgb(var(--color-accent-red) / .05)}.bg-accent-yellow{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-yellow) / var(--tw-bg-opacity, 1))}.bg-accent-yellow\/10{background-color:rgb(var(--color-accent-yellow) / .1)}.bg-accent-yellow\/15{background-color:rgb(var(--color-accent-yellow) / .15)}.bg-accent-yellow\/20{background-color:rgb(var(--color-accent-yellow) / .2)}.bg-accent-yellow\/5{background-color:rgb(var(--color-accent-yellow) / .05)}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-black\/40{background-color:#0006}.bg-black\/50{background-color:#00000080}.bg-black\/60{background-color:#0009}.bg-black\/70{background-color:#000000b3}.bg-black\/80{background-color:#000c}.bg-blue-400\/15{background-color:#60a5fa26}.bg-blue-50{--tw-bg-opacity: 1;background-color:rgb(239 246 255 / var(--tw-bg-opacity, 1))}.bg-blue-500{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.bg-blue-500\/10{background-color:#3b82f61a}.bg-blue-500\/15{background-color:#3b82f626}.bg-blue-500\/20{background-color:#3b82f633}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgb(37 99 235 / var(--tw-bg-opacity, 1))}.bg-blue-900\/10{background-color:#1e3a8a1a}.bg-blue-900\/30{background-color:#1e3a8a4d}.bg-cyan-500\/15{background-color:#06b6d426}.bg-cyan-500\/20{background-color:#06b6d433}.bg-dark-bg{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg) / var(--tw-bg-opacity, 1))}.bg-dark-bg\/50{background-color:rgb(var(--color-bg) / .5)}.bg-dark-bg\/60{background-color:rgb(var(--color-bg) / .6)}.bg-dark-bg\/70{background-color:rgb(var(--color-bg) / .7)}.bg-dark-bg\/80{background-color:rgb(var(--color-bg) / .8)}.bg-dark-bg\/90{background-color:rgb(var(--color-bg) / .9)}.bg-dark-border{--tw-bg-opacity: 1;background-color:rgb(var(--color-border) / var(--tw-bg-opacity, 1))}.bg-dark-border\/50{background-color:rgb(var(--color-border) / .5)}.bg-dark-border\/60{background-color:rgb(var(--color-border) / .6)}.bg-dark-border\/70{background-color:rgb(var(--color-border) / .7)}.bg-dark-hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-hover) / var(--tw-bg-opacity, 1))}.bg-dark-hover\/40{background-color:rgb(var(--color-hover) / .4)}.bg-dark-muted\/35{background-color:rgb(var(--color-muted) / .35)}.bg-dark-muted\/40{background-color:rgb(var(--color-muted) / .4)}.bg-dark-muted\/60{background-color:rgb(var(--color-muted) / .6)}.bg-dark-surface{--tw-bg-opacity: 1;background-color:rgb(var(--color-surface) / var(--tw-bg-opacity, 1))}.bg-dark-surface\/30{background-color:rgb(var(--color-surface) / .3)}.bg-dark-surface\/40{background-color:rgb(var(--color-surface) / .4)}.bg-dark-surface\/50{background-color:rgb(var(--color-surface) / .5)}.bg-dark-surface\/60{background-color:rgb(var(--color-surface) / .6)}.bg-dark-surface\/80{background-color:rgb(var(--color-surface) / .8)}.bg-dark-surface\/90{background-color:rgb(var(--color-surface) / .9)}.bg-dark-surface\/95{background-color:rgb(var(--color-surface) / .95)}.bg-dark-text{--tw-bg-opacity: 1;background-color:rgb(var(--color-text) / var(--tw-bg-opacity, 1))}.bg-dark-text\/70{background-color:rgb(var(--color-text) / .7)}.bg-emerald-50{--tw-bg-opacity: 1;background-color:rgb(236 253 245 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/15{background-color:#10b98126}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.bg-gray-400{--tw-bg-opacity: 1;background-color:rgb(156 163 175 / var(--tw-bg-opacity, 1))}.bg-gray-50{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity, 1))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity, 1))}.bg-gray-500\/10{background-color:#6b72801a}.bg-gray-500\/20{background-color:#6b728033}.bg-gray-500\/5{background-color:#6b72800d}.bg-gray-600{--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.bg-gray-700{--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.bg-green-400\/15{background-color:#4ade8026}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-green-500\/10{background-color:#22c55e1a}.bg-green-500\/15{background-color:#22c55e26}.bg-green-500\/20{background-color:#22c55e33}.bg-green-600{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.bg-green-600\/15{background-color:#16a34a26}.bg-green-600\/90{background-color:#16a34ae6}.bg-green-700\/60{background-color:#15803d99}.bg-green-900\/30{background-color:#14532d4d}.bg-indigo-500{--tw-bg-opacity: 1;background-color:rgb(99 102 241 / var(--tw-bg-opacity, 1))}.bg-indigo-500\/15{background-color:#6366f126}.bg-indigo-500\/20{background-color:#6366f133}.bg-lime-500\/15{background-color:#84cc1626}.bg-orange-500{--tw-bg-opacity: 1;background-color:rgb(249 115 22 / var(--tw-bg-opacity, 1))}.bg-orange-500\/15{background-color:#f9731626}.bg-orange-500\/20{background-color:#f9731633}.bg-orange-900\/15{background-color:#7c2d1226}.bg-orange-900\/30{background-color:#7c2d124d}.bg-pink-500{--tw-bg-opacity: 1;background-color:rgb(236 72 153 / var(--tw-bg-opacity, 1))}.bg-pink-500\/20{background-color:#ec489933}.bg-purple-500{--tw-bg-opacity: 1;background-color:rgb(168 85 247 / var(--tw-bg-opacity, 1))}.bg-purple-500\/10{background-color:#a855f71a}.bg-purple-500\/15{background-color:#a855f726}.bg-purple-500\/20{background-color:#a855f733}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-500\/15{background-color:#ef444426}.bg-red-500\/20{background-color:#ef444433}.bg-red-700\/60{background-color:#b91c1c99}.bg-red-900\/20{background-color:#7f1d1d33}.bg-red-900\/30{background-color:#7f1d1d4d}.bg-red-950\/30{background-color:#450a0a4d}.bg-teal-500\/20{background-color:#14b8a633}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/20{background-color:#fff3}.bg-yellow-500{--tw-bg-opacity: 1;background-color:rgb(234 179 8 / var(--tw-bg-opacity, 1))}.bg-yellow-500\/10{background-color:#eab3081a}.bg-yellow-500\/15{background-color:#eab30826}.bg-yellow-500\/20{background-color:#eab30833}.bg-yellow-900\/10{background-color:#713f121a}.bg-yellow-900\/30{background-color:#713f124d}.fill-current{fill:currentColor}.fill-gray-500{fill:#6b7280}.fill-green-500{fill:#22c55e}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-3\.5{padding:.875rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.\!px-0{padding-left:0!important;padding-right:0!important}.\!px-2{padding-left:.5rem!important;padding-right:.5rem!important}.\!px-3{padding-left:.75rem!important;padding-right:.75rem!important}.\!py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[6px\]{padding-top:6px;padding-bottom:6px}.py-\[7px\]{padding-top:7px;padding-bottom:7px}.py-px{padding-top:1px;padding-bottom:1px}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pb-2\.5{padding-bottom:.625rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pl-1{padding-left:.25rem}.pl-10{padding-left:2.5rem}.pl-3{padding-left:.75rem}.pl-6{padding-left:1.5rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pl-9{padding-left:2.25rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-8{padding-right:2rem}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-3{padding-top:.75rem}.pt-3\.5{padding-top:.875rem}.pt-4{padding-top:1rem}.pt-\[12vh\]{padding-top:12vh}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-baseline{vertical-align:baseline}.align-middle{vertical-align:middle}.font-mono{font-family:SF Mono,Monaco,Menlo,Consolas,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-\[0\.9em\]{font-size:.9em}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14\.5px\]{font-size:14.5px}.text-\[15px\]{font-size:15px}.text-\[8px\]{font-size:8px}.text-\[9\.5px\]{font-size:9.5px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.06em\]{letter-spacing:.06em}.tracking-\[0\.08em\]{letter-spacing:.08em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-accent-blue{--tw-text-opacity: 1;color:rgb(var(--color-accent-blue) / var(--tw-text-opacity, 1))}.text-accent-blue\/70{color:rgb(var(--color-accent-blue) / .7)}.text-accent-blue\/80{color:rgb(var(--color-accent-blue) / .8)}.text-accent-blue\/90{color:rgb(var(--color-accent-blue) / .9)}.text-accent-cyan{--tw-text-opacity: 1;color:rgb(57 197 207 / var(--tw-text-opacity, 1))}.text-accent-green{--tw-text-opacity: 1;color:rgb(var(--color-accent-green) / var(--tw-text-opacity, 1))}.text-accent-green\/80{color:rgb(var(--color-accent-green) / .8)}.text-accent-orange{--tw-text-opacity: 1;color:rgb(215 119 83 / var(--tw-text-opacity, 1))}.text-accent-purple{--tw-text-opacity: 1;color:rgb(var(--color-accent-purple) / var(--tw-text-opacity, 1))}.text-accent-red{--tw-text-opacity: 1;color:rgb(var(--color-accent-red) / var(--tw-text-opacity, 1))}.text-accent-red\/70{color:rgb(var(--color-accent-red) / .7)}.text-accent-red\/90{color:rgb(var(--color-accent-red) / .9)}.text-accent-yellow{--tw-text-opacity: 1;color:rgb(var(--color-accent-yellow) / var(--tw-text-opacity, 1))}.text-accent-yellow\/70{color:rgb(var(--color-accent-yellow) / .7)}.text-accent-yellow\/80{color:rgb(var(--color-accent-yellow) / .8)}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-500\/80{color:#f59e0bcc}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-blue-300{--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-700{--tw-text-opacity: 1;color:rgb(29 78 216 / var(--tw-text-opacity, 1))}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-dark-bg{--tw-text-opacity: 1;color:rgb(var(--color-bg) / var(--tw-text-opacity, 1))}.text-dark-border{--tw-text-opacity: 1;color:rgb(var(--color-border) / var(--tw-text-opacity, 1))}.text-dark-muted{--tw-text-opacity: 1;color:rgb(var(--color-muted) / var(--tw-text-opacity, 1))}.text-dark-muted\/40{color:rgb(var(--color-muted) / .4)}.text-dark-muted\/50{color:rgb(var(--color-muted) / .5)}.text-dark-muted\/60{color:rgb(var(--color-muted) / .6)}.text-dark-muted\/70{color:rgb(var(--color-muted) / .7)}.text-dark-muted\/80{color:rgb(var(--color-muted) / .8)}.text-dark-text{--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.text-dark-text\/70{color:rgb(var(--color-text) / .7)}.text-dark-text\/80{color:rgb(var(--color-text) / .8)}.text-dark-text\/90{color:rgb(var(--color-text) / .9)}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / 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-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity, 1))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity, 1))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity, 1))}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity, 1))}.text-green-300{--tw-text-opacity: 1;color:rgb(134 239 172 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-indigo-300{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-lime-400{--tw-text-opacity: 1;color:rgb(163 230 53 / var(--tw-text-opacity, 1))}.text-orange-300{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.text-pink-300{--tw-text-opacity: 1;color:rgb(249 168 212 / var(--tw-text-opacity, 1))}.text-purple-300{--tw-text-opacity: 1;color:rgb(216 180 254 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-teal-300{--tw-text-opacity: 1;color:rgb(94 234 212 / 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))}.text-white\/70{color:#ffffffb3}.text-yellow-300{--tw-text-opacity: 1;color:rgb(253 224 71 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.text-yellow-600\/70{color:#ca8a04b3}.underline{text-decoration-line:underline}.line-through{text-decoration-line:line-through}.decoration-accent-blue\/40{text-decoration-color:rgb(var(--color-accent-blue) / .4)}.decoration-dark-muted\/40{text-decoration-color:rgb(var(--color-muted) / .4)}.underline-offset-2{text-underline-offset:2px}.placeholder-dark-muted::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-muted) / var(--tw-placeholder-opacity, 1))}.placeholder-dark-muted::placeholder{--tw-placeholder-opacity: 1;color:rgb(var(--color-muted) / var(--tw-placeholder-opacity, 1))}.placeholder-dark-muted\/50::-moz-placeholder{color:rgb(var(--color-muted) / .5)}.placeholder-dark-muted\/50::placeholder{color:rgb(var(--color-muted) / .5)}.placeholder-dark-muted\/60::-moz-placeholder{color:rgb(var(--color-muted) / .6)}.placeholder-dark-muted\/60::placeholder{color:rgb(var(--color-muted) / .6)}.caret-dark-text{caret-color:rgb(var(--color-text) / 1)}.accent-accent-blue{accent-color:rgb(var(--color-accent-blue) / 1)}.accent-accent-green{accent-color:rgb(var(--color-accent-green) / 1)}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow{--tw-shadow: var(--shadow-md);--tw-shadow-colored: var(--shadow-md);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_-10px_30px_-15px_rgba\(0\,0\,0\,0\.5\)\]{--tw-shadow: 0 -10px 30px -15px rgba(0,0,0,.5);--tw-shadow-colored: 0 -10px 30px -15px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_-12px_40px_-10px_rgba\(0\,0\,0\,0\.6\)\]{--tw-shadow: 0 -12px 40px -10px rgba(0,0,0,.6);--tw-shadow-colored: 0 -12px 40px -10px 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: var(--shadow-lg);--tw-shadow-colored: var(--shadow-lg);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow: var(--shadow-md);--tw-shadow-colored: var(--shadow-md);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: var(--shadow-xl);--tw-shadow-colored: var(--shadow-xl);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-black\/10{--tw-shadow-color: rgb(0 0 0 / .1);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.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-accent-blue{--tw-ring-opacity: 1;--tw-ring-color: rgb(var(--color-accent-blue) / var(--tw-ring-opacity, 1))}.ring-accent-blue\/25{--tw-ring-color: rgb(var(--color-accent-blue) / .25)}.ring-accent-blue\/30{--tw-ring-color: rgb(var(--color-accent-blue) / .3)}.ring-accent-blue\/60{--tw-ring-color: rgb(var(--color-accent-blue) / .6)}.\!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)!important}.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-\[1px\]{--tw-backdrop-blur: blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-\[2px\]{--tw-backdrop-blur: blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-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-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-700{transition-duration:.7s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{--color-bg: 255 255 255;--color-surface: 246 246 247;--color-border: 228 228 232;--color-hover: 240 240 243;--color-text: 24 24 27;--color-muted: 113 113 122;--color-accent-blue: 94 106 210;--color-accent-green: 22 163 74;--color-accent-red: 220 38 38;--color-accent-yellow: 180 83 9;--color-accent-purple: 124 58 237;--radius-xs: .125rem;--radius-sm: .25rem;--radius-md: .375rem;--radius-lg: .5rem;--radius-xl: .75rem;--radius-2xl: 1rem;--radius-3xl: 1.5rem;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .05);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1)}.light{--color-bg: 255 255 255;--color-surface: 246 246 247;--color-border: 228 228 232;--color-hover: 240 240 243;--color-text: 24 24 27;--color-muted: 113 113 122;--color-accent-blue: 94 106 210;--color-accent-green: 22 163 74;--color-accent-red: 220 38 38;--color-accent-yellow: 180 83 9;--color-accent-purple: 124 58 237}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{height:100%;width:100%;overflow:hidden;overscroll-behavior:none}body{font-family:Inter,ui-sans-serif,system-ui,PingFang SC,-apple-system,BlinkMacSystemFont,Segoe UI,Microsoft YaHei,sans-serif;background-color:rgb(var(--color-bg));color:rgb(var(--color-text));line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:"cv02","cv03","cv04","cv11"}button,input,textarea,select{font:inherit}*{scrollbar-width:thin;scrollbar-color:rgb(var(--color-border)) transparent}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background-color:rgb(var(--color-border));border:3px solid transparent;border-radius:999px;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--color-muted))}::-webkit-scrollbar-corner{background:transparent}.custom-scrollbar{scrollbar-width:thin;scrollbar-color:rgb(var(--color-border)) transparent}.custom-scrollbar::-webkit-scrollbar{width:10px;height:10px}.custom-scrollbar::-webkit-scrollbar-track{background:transparent}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:rgb(var(--color-border));border:3px solid transparent;border-radius:999px;background-clip:padding-box}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:rgb(var(--color-muted))}.scrollbar-none{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-none::-webkit-scrollbar{display:none}::-moz-selection{background-color:rgb(var(--color-accent-blue) / .18)}::selection{background-color:rgb(var(--color-accent-blue) / .18)}:focus-visible{outline:2px solid rgb(var(--color-accent-blue) / .7);outline-offset:1px}.btn{display:inline-flex;-webkit-user-select:none;-moz-user-select:none;user-select:none;align-items:center;justify-content:center;gap:.5rem;border-radius:var(--radius-lg);padding:.5rem .875rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn:active{--tw-scale-x: .98;--tw-scale-y: .98;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))}.btn:disabled{cursor:not-allowed;opacity:.4}.btn-primary{--tw-bg-opacity: 1;background-color:rgb(var(--color-text) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--color-bg) / var(--tw-text-opacity, 1));--tw-shadow: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-primary:hover{opacity:.85}.btn-accent{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-blue) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-accent:hover{opacity:.9}.btn-secondary{border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--color-bg) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1));--tw-shadow: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-hover) / var(--tw-bg-opacity, 1))}.btn-ghost{--tw-text-opacity: 1;color:rgb(var(--color-muted) / var(--tw-text-opacity, 1))}.btn-ghost:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-hover) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.btn-danger{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-red) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));--tw-shadow: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.btn-danger:hover{opacity:.9}.input{width:100%;border-radius:var(--radius-lg);border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--color-bg) / var(--tw-bg-opacity, 1));padding:.625rem .875rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.input::-moz-placeholder{color:rgb(var(--color-muted) / .7)}.input::placeholder{color:rgb(var(--color-muted) / .7)}.input{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.input:focus{border-color:rgb(var(--color-accent-blue) / .6);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(var(--color-accent-blue) / .15)}.card,.panel-surface{border-radius:var(--radius-xl);border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--color-bg) / var(--tw-bg-opacity, 1));--tw-shadow: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.paper-surface{background:rgb(var(--color-bg) / .85);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.app-shell{background-color:rgb(var(--color-bg))}.workbench-frame{border:1px solid rgb(var(--color-border));background:rgb(var(--color-bg) / .85);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.mimo-tab{display:inline-flex;align-items:center;gap:.5rem;border-radius:var(--radius-lg);border-width:1px;border-color:transparent;padding:.375rem .75rem;font-size:.875rem;line-height:1.25rem;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.mimo-tab[data-active=true]{--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--color-bg) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1));--tw-shadow: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.mimo-tab[data-active=false]{--tw-text-opacity: 1;color:rgb(var(--color-muted) / var(--tw-text-opacity, 1))}.mimo-tab[data-active=false]:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-hover) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.side-nav-item{position:relative;display:flex;width:100%;-webkit-user-select:none;-moz-user-select:none;user-select:none;align-items:center;gap:.625rem;border-radius:var(--radius-lg);padding-left:.625rem;padding-right:.625rem;padding-top:7px;padding-bottom:7px;font-size:13px;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.1s}.side-nav-item[data-active=true]{background-color:rgb(var(--color-accent-blue) / .1);--tw-text-opacity: 1;color:rgb(var(--color-accent-blue) / var(--tw-text-opacity, 1))}.side-nav-item[data-active=false]{--tw-text-opacity: 1;color:rgb(var(--color-muted) / var(--tw-text-opacity, 1))}.side-nav-item[data-active=false]:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-hover) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.side-nav-item[data-active=true]:before{content:"";position:absolute;left:-10px;top:50%;transform:translateY(-50%);width:3px;height:16px;border-radius:999px;background:rgb(var(--color-accent-blue))}.side-group-label{-webkit-user-select:none;-moz-user-select:none;user-select:none;padding:1rem .625rem .25rem;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:rgb(var(--color-muted) / .7)}.section-title{font-size:.875rem;line-height:1.25rem;font-weight:600;letter-spacing:.025em;--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.subtle-label{font-size:11px;text-transform:uppercase;letter-spacing:.18em;--tw-text-opacity: 1;color:rgb(var(--color-muted) / var(--tw-text-opacity, 1))}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}@keyframes slideInRight{0%{opacity:0;transform:translate(16px)}to{opacity:1;transform:translate(0)}}@keyframes pulse-soft{0%,to{opacity:1}50%{opacity:.72}}@keyframes blink{0%,to{opacity:1}50%{opacity:.35}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pixel-run{0%,49.9%{opacity:1}50%,to{opacity:.18}}.pixel-spinner{display:inline-grid;grid-template-columns:repeat(2,3px);grid-template-rows:repeat(2,3px);gap:2px;vertical-align:middle}.pixel-spinner>span{width:3px;height:3px;background:currentColor;animation:pixel-run .8s linear infinite}.pixel-spinner>span:nth-child(1){animation-delay:0s}.pixel-spinner>span:nth-child(2){animation-delay:.2s}.pixel-spinner>span:nth-child(4){animation-delay:.4s}.pixel-spinner>span:nth-child(3){animation-delay:.6s}.pixel-grid{display:inline-grid;grid-template-columns:repeat(2,3px);grid-template-rows:repeat(2,3px);gap:2px;vertical-align:middle}.pixel-grid>span{width:3px;height:3px;background:currentColor}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes slideUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:fadeIn .3s ease-out}.animate-slide-up{animation:slideUp .28s cubic-bezier(.22,1,.36,1)}.animate-slide-in{animation:slideIn .3s ease-out}.animate-slide-in-right{animation:slideInRight .3s ease-out}.animate-pulse-soft{animation:pulse-soft 2s ease-in-out infinite}.animate-blink{animation:blink 1s infinite}@keyframes railFlash{0%{background-color:rgb(var(--color-accent-blue) / .16);box-shadow:inset 2px 0 rgb(var(--color-accent-blue) / .6);opacity:1}55%{background-color:rgb(var(--color-accent-blue) / .1)}to{background-color:transparent;box-shadow:inset 2px 0 0 0 transparent;opacity:0}}.animate-rail-flash{border-radius:.5rem;animation:railFlash 1.6s cubic-bezier(.22,1,.36,1) forwards}.animate-spin{animation:spin 1s linear infinite}.skeleton-shimmer{background-image:linear-gradient(90deg,rgb(var(--color-border) / .34) 25%,rgb(var(--color-muted) / .18) 37%,rgb(var(--color-border) / .34) 63%);background-size:200% 100%;animation:shimmer 1.4s ease-in-out infinite}.markdown-content{white-space:normal;word-break:break-word}.markdown-content h1{margin-top:1rem;margin-bottom:.5rem;font-size:1.5rem;line-height:2rem;font-weight:700;--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.markdown-content h2{margin-top:1rem;margin-bottom:.5rem;font-size:1.25rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.markdown-content h3{margin-top:.75rem;margin-bottom:.5rem;font-size:1.125rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.markdown-content p{margin-top:.5rem;margin-bottom:.5rem}.markdown-content ul,.markdown-content ol{margin-top:.5rem;margin-bottom:.5rem;padding-left:1.5rem}.markdown-content li{margin-top:.25rem;margin-bottom:.25rem}.markdown-content code{border-radius:var(--radius-md);--tw-bg-opacity: 1;background-color:rgb(var(--color-hover) / var(--tw-bg-opacity, 1));padding:.125rem .375rem;font-family:SF Mono,Monaco,Menlo,Consolas,monospace;font-size:.85em}.markdown-content pre{margin-top:.75rem;margin-bottom:.75rem;overflow-x:auto;border-radius:var(--radius-xl);border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--color-surface) / var(--tw-bg-opacity, 1));padding:.875rem}.markdown-content pre code{background-color:transparent;padding:0}.markdown-content blockquote{margin-top:.75rem;margin-bottom:.75rem;border-left-width:3px;border-color:rgb(var(--color-accent-blue) / .4);padding-left:1rem;--tw-text-opacity: 1;color:rgb(var(--color-muted) / var(--tw-text-opacity, 1))}.markdown-content a{--tw-text-opacity: 1;color:rgb(var(--color-accent-blue) / var(--tw-text-opacity, 1));text-decoration-line:underline;text-decoration-color:rgb(var(--color-accent-blue) / .3);text-underline-offset:2px}.markdown-content a:hover{text-decoration-color:rgb(var(--color-accent-blue) / .6)}.markdown-content table{margin-top:.75rem;margin-bottom:.75rem;width:100%;border-collapse:collapse;overflow:hidden;border-radius:var(--radius-lg)}.markdown-content th,.markdown-content td{border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));padding:.5rem .75rem;text-align:left}.markdown-content th{--tw-bg-opacity: 1;background-color:rgb(var(--color-surface) / var(--tw-bg-opacity, 1));font-weight:600}code[class*=language-],pre[class*=language-]{font-family:SF Mono,Monaco,Menlo,Consolas,monospace;font-size:.875rem;line-height:1.25rem}.token.comment,.token.prolog,.token.doctype,.token.cdata{--tw-text-opacity: 1;color:rgb(var(--color-muted) / var(--tw-text-opacity, 1))}.token.punctuation{--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted{--tw-text-opacity: 1;color:rgb(var(--color-accent-red) / var(--tw-text-opacity, 1))}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{--tw-text-opacity: 1;color:rgb(var(--color-accent-green) / var(--tw-text-opacity, 1))}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string{--tw-text-opacity: 1;color:rgb(var(--color-accent-yellow) / var(--tw-text-opacity, 1))}.token.atrule,.token.attr-value,.token.keyword{--tw-text-opacity: 1;color:rgb(var(--color-accent-blue) / var(--tw-text-opacity, 1))}.token.function,.token.class-name{color:rgb(var(--color-accent-purple))}.token.regex,.token.important,.token.variable{--tw-text-opacity: 1;color:rgb(var(--color-accent-yellow) / var(--tw-text-opacity, 1))}.chat-stack{margin-left:auto;margin-right:auto;width:100%;max-width:46rem;padding-left:1rem;padding-right:1rem}@media(min-width:640px){.chat-stack{padding-left:1.5rem;padding-right:1.5rem}}.chat-msg{display:flex;width:100%}@keyframes fadeInUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.chat-msg{animation:fadeInUp .4s ease-out;align-items:flex-start;gap:.75rem}.chat-msg+.chat-msg{margin-top:.75rem}.chat-msg[data-role=user]{flex-direction:row-reverse}.chat-msg[data-role=system]{justify-content:center}.chat-card{min-width:0px;flex:1 1 0%;border-radius:var(--radius-2xl);border-width:1px;border-color:rgb(var(--color-border) / .5);background-color:rgb(var(--color-surface) / .6);padding:1rem 1.25rem;--tw-shadow: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.chat-msg[data-role=user]>.chat-card{border-color:rgb(var(--color-border) / .4);--tw-bg-opacity: 1;background-color:rgb(var(--color-surface) / var(--tw-bg-opacity, 1))}.chat-card-tail{border-bottom-right-radius:.375rem}.chat-avatar{margin-top:.125rem;display:flex;height:2rem;width:2rem;flex-shrink:0;align-items:center;justify-content:center;border-radius:9999px;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--color-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--color-bg) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--color-accent-blue) / var(--tw-text-opacity, 1))}.chat-avatar[data-status=running]:after{content:"";position:absolute}.chat-msg[data-role=user]>.chat-avatar{border-color:rgb(var(--color-border) / .5);background-color:rgb(var(--color-accent-blue) / .1);--tw-text-opacity: 1;color:rgb(var(--color-accent-blue) / var(--tw-text-opacity, 1))}.chat-card .markdown-content{font-size:14.5px;line-height:1.625}.chat-card .markdown-content>:first-child{margin-top:0}.chat-card .markdown-content>:last-child{margin-bottom:0}@keyframes typing-dots{0%,60%,to{opacity:.3;transform:translateY(0)}30%{opacity:1;transform:translateY(-2px)}}.chat-typing-dots{display:inline-flex;align-items:center;gap:.25rem}.chat-typing-dots>span{height:.375rem;width:.375rem;border-radius:9999px;--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-blue) / var(--tw-bg-opacity, 1));animation:typing-dots 1.2s ease-in-out infinite}.chat-typing-dots>span:nth-child(2){animation-delay:.15s}.chat-typing-dots>span:nth-child(3){animation-delay:.3s}.placeholder\:text-dark-muted\/50::-moz-placeholder{color:rgb(var(--color-muted) / .5)}.placeholder\:text-dark-muted\/50::placeholder{color:rgb(var(--color-muted) / .5)}.last\:mb-0:last-child{margin-bottom:0}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.focus-within\:border-accent-blue:focus-within{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-blue) / var(--tw-border-opacity, 1))}.focus-within\:border-accent-blue\/50:focus-within{border-color:rgb(var(--color-accent-blue) / .5)}.focus-within\:ring-4:focus-within{--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(4px + 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-within\:ring-accent-blue\/10:focus-within{--tw-ring-color: rgb(var(--color-accent-blue) / .1)}.hover\:-translate-y-px:hover{--tw-translate-y: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;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-accent-blue:hover{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-blue) / var(--tw-border-opacity, 1))}.hover\:border-accent-blue\/30:hover{border-color:rgb(var(--color-accent-blue) / .3)}.hover\:border-accent-blue\/40:hover{border-color:rgb(var(--color-accent-blue) / .4)}.hover\:border-accent-blue\/50:hover{border-color:rgb(var(--color-accent-blue) / .5)}.hover\:border-accent-green\/40:hover{border-color:rgb(var(--color-accent-green) / .4)}.hover\:border-accent-green\/50:hover{border-color:rgb(var(--color-accent-green) / .5)}.hover\:border-dark-hover:hover{--tw-border-opacity: 1;border-color:rgb(var(--color-hover) / var(--tw-border-opacity, 1))}.hover\:border-dark-muted\/40:hover{border-color:rgb(var(--color-muted) / .4)}.hover\:border-dark-muted\/50:hover{border-color:rgb(var(--color-muted) / .5)}.hover\:border-red-500\/40:hover{border-color:#ef444466}.hover\:bg-\[\#3c3c3c\]:hover{--tw-bg-opacity: 1;background-color:rgb(60 60 60 / var(--tw-bg-opacity, 1))}.hover\:bg-accent-blue:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-blue) / var(--tw-bg-opacity, 1))}.hover\:bg-accent-blue\/10:hover{background-color:rgb(var(--color-accent-blue) / .1)}.hover\:bg-accent-blue\/20:hover{background-color:rgb(var(--color-accent-blue) / .2)}.hover\:bg-accent-blue\/25:hover{background-color:rgb(var(--color-accent-blue) / .25)}.hover\:bg-accent-blue\/30:hover{background-color:rgb(var(--color-accent-blue) / .3)}.hover\:bg-accent-blue\/80:hover{background-color:rgb(var(--color-accent-blue) / .8)}.hover\:bg-accent-blue\/90:hover{background-color:rgb(var(--color-accent-blue) / .9)}.hover\:bg-accent-green\/10:hover{background-color:rgb(var(--color-accent-green) / .1)}.hover\:bg-accent-green\/20:hover{background-color:rgb(var(--color-accent-green) / .2)}.hover\:bg-accent-green\/25:hover{background-color:rgb(var(--color-accent-green) / .25)}.hover\:bg-accent-green\/30:hover{background-color:rgb(var(--color-accent-green) / .3)}.hover\:bg-accent-purple\/10:hover{background-color:rgb(var(--color-accent-purple) / .1)}.hover\:bg-accent-red\/10:hover{background-color:rgb(var(--color-accent-red) / .1)}.hover\:bg-accent-red\/20:hover{background-color:rgb(var(--color-accent-red) / .2)}.hover\:bg-accent-red\/25:hover{background-color:rgb(var(--color-accent-red) / .25)}.hover\:bg-accent-red\/30:hover{background-color:rgb(var(--color-accent-red) / .3)}.hover\:bg-accent-red\/90:hover{background-color:rgb(var(--color-accent-red) / .9)}.hover\:bg-accent-yellow\/10:hover{background-color:rgb(var(--color-accent-yellow) / .1)}.hover\:bg-amber-500\/25:hover{background-color:#f59e0b40}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-500:hover{--tw-bg-opacity: 1;background-color:rgb(59 130 246 / var(--tw-bg-opacity, 1))}.hover\:bg-blue-500\/10:hover{background-color:#3b82f61a}.hover\:bg-blue-700:hover{--tw-bg-opacity: 1;background-color:rgb(29 78 216 / var(--tw-bg-opacity, 1))}.hover\:bg-dark-bg:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-bg) / var(--tw-bg-opacity, 1))}.hover\:bg-dark-border:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-border) / var(--tw-bg-opacity, 1))}.hover\:bg-dark-hover:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-hover) / var(--tw-bg-opacity, 1))}.hover\:bg-dark-hover\/30:hover{background-color:rgb(var(--color-hover) / .3)}.hover\:bg-dark-hover\/50:hover{background-color:rgb(var(--color-hover) / .5)}.hover\:bg-dark-hover\/60:hover{background-color:rgb(var(--color-hover) / .6)}.hover\:bg-dark-surface:hover{--tw-bg-opacity: 1;background-color:rgb(var(--color-surface) / var(--tw-bg-opacity, 1))}.hover\:bg-dark-surface\/40:hover{background-color:rgb(var(--color-surface) / .4)}.hover\:bg-dark-surface\/50:hover{background-color:rgb(var(--color-surface) / .5)}.hover\:bg-dark-surface\/80:hover{background-color:rgb(var(--color-surface) / .8)}.hover\:bg-emerald-500\/25:hover{background-color:#10b98140}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity, 1))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity, 1))}.hover\:bg-green-500:hover{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.hover\:bg-green-500\/10:hover{background-color:#22c55e1a}.hover\:bg-green-600:hover{--tw-bg-opacity: 1;background-color:rgb(22 163 74 / var(--tw-bg-opacity, 1))}.hover\:bg-green-600\/25:hover{background-color:#16a34a40}.hover\:bg-purple-600:hover{--tw-bg-opacity: 1;background-color:rgb(147 51 234 / var(--tw-bg-opacity, 1))}.hover\:bg-red-500\/10:hover{background-color:#ef44441a}.hover\:bg-white\/30:hover{background-color:#ffffff4d}.hover\:text-accent-blue:hover{--tw-text-opacity: 1;color:rgb(var(--color-accent-blue) / var(--tw-text-opacity, 1))}.hover\:text-accent-green:hover{--tw-text-opacity: 1;color:rgb(var(--color-accent-green) / var(--tw-text-opacity, 1))}.hover\:text-accent-red:hover{--tw-text-opacity: 1;color:rgb(var(--color-accent-red) / var(--tw-text-opacity, 1))}.hover\:text-accent-yellow:hover{--tw-text-opacity: 1;color:rgb(var(--color-accent-yellow) / var(--tw-text-opacity, 1))}.hover\:text-dark-muted:hover{--tw-text-opacity: 1;color:rgb(var(--color-muted) / var(--tw-text-opacity, 1))}.hover\:text-dark-text:hover{--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.hover\:text-red-400:hover{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-accent-blue:hover{text-decoration-color:rgb(var(--color-accent-blue) / 1)}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-85:hover{opacity:.85}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-95:hover{opacity:.95}.hover\:shadow-md:hover{--tw-shadow: var(--shadow-md);--tw-shadow-colored: var(--shadow-md);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: var(--shadow-sm);--tw-shadow-colored: var(--shadow-sm);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: var(--shadow-xl);--tw-shadow-colored: var(--shadow-xl);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:border-accent-blue:focus{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-blue) / var(--tw-border-opacity, 1))}.focus\:border-accent-blue\/50:focus{border-color:rgb(var(--color-accent-blue) / .5)}.focus\:border-accent-blue\/60:focus{border-color:rgb(var(--color-accent-blue) / .6)}.focus\:border-accent-green:focus{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-green) / var(--tw-border-opacity, 1))}.focus\:border-accent-red:focus{--tw-border-opacity: 1;border-color:rgb(var(--color-accent-red) / var(--tw-border-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1: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(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)}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-accent-blue:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(var(--color-accent-blue) / var(--tw-ring-opacity, 1))}.focus\:ring-accent-blue\/10:focus{--tw-ring-color: rgb(var(--color-accent-blue) / .1)}.focus\:ring-accent-blue\/15:focus{--tw-ring-color: rgb(var(--color-accent-blue) / .15)}.focus\:ring-accent-blue\/20:focus{--tw-ring-color: rgb(var(--color-accent-blue) / .2)}.focus\:ring-accent-blue\/50:focus{--tw-ring-color: rgb(var(--color-accent-blue) / .5)}.focus\:ring-accent-red\/20:focus{--tw-ring-color: rgb(var(--color-accent-red) / .2)}.focus\:ring-blue-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(59 130 246 / var(--tw-ring-opacity, 1))}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;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))}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-25:disabled{opacity:.25}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group:focus-within .group-focus-within\:opacity-100{opacity:1}.group\/item:hover .group-hover\/item\:line-clamp-none{overflow:visible;display:block;-webkit-box-orient:horizontal;-webkit-line-clamp:none}.group\/item:hover .group-hover\/item\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/dot:hover .group-hover\/dot\:scale-125{--tw-scale-x: 1.25;--tw-scale-y: 1.25;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/dot:hover .group-hover\/dot\:scale-150{--tw-scale-x: 1.5;--tw-scale-y: 1.5;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.group\/dot:hover .group-hover\/dot\:bg-dark-muted{--tw-bg-opacity: 1;background-color:rgb(var(--color-muted) / var(--tw-bg-opacity, 1))}.group\/item:hover .group-hover\/item\:bg-dark-border\/80{background-color:rgb(var(--color-border) / .8)}.group\/item:hover .group-hover\/item\:text-dark-text{--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-accent-yellow{--tw-text-opacity: 1;color:rgb(var(--color-accent-yellow) / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-dark-text{--tw-text-opacity: 1;color:rgb(var(--color-text) / var(--tw-text-opacity, 1))}.group\/item:hover .group-hover\/item\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}.data-\[resize-handle-state\=drag\]\:bg-accent-blue[data-resize-handle-state=drag],.data-\[resize-handle-state\=hover\]\:bg-accent-blue[data-resize-handle-state=hover]{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-blue) / var(--tw-bg-opacity, 1))}.dark\:border-amber-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.dark\:border-blue-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(29 78 216 / var(--tw-border-opacity, 1))}.dark\:border-gray-500:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 114 128 / var(--tw-border-opacity, 1))}.dark\:border-gray-600:is(.dark *){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity, 1))}.dark\:border-gray-700:is(.dark *){--tw-border-opacity: 1;border-color:rgb(55 65 81 / var(--tw-border-opacity, 1))}.dark\:bg-amber-900\/20:is(.dark *){background-color:#78350f33}.dark\:bg-blue-900\/20:is(.dark *){background-color:#1e3a8a33}.dark\:bg-emerald-900\/20:is(.dark *){background-color:#064e3b33}.dark\:bg-gray-700:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}.dark\:bg-gray-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity, 1))}.dark\:text-amber-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.dark\:text-blue-300:is(.dark *){--tw-text-opacity: 1;color:rgb(147 197 253 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-gray-100:is(.dark *){--tw-text-opacity: 1;color:rgb(243 244 246 / var(--tw-text-opacity, 1))}.dark\:text-gray-200:is(.dark *){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity, 1))}.dark\:text-gray-300:is(.dark *){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}.dark\:text-gray-400:is(.dark *){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity, 1))}.dark\:text-gray-500:is(.dark *){--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity, 1))}.dark\:hover\:bg-blue-900\/30:hover:is(.dark *){background-color:#1e3a8a4d}.dark\:hover\:bg-gray-600:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(75 85 99 / var(--tw-bg-opacity, 1))}.dark\:hover\:bg-gray-700:hover:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}@media(min-width:640px){.sm\:block{display:block}.sm\:inline{display:inline}.sm\:flex{display:flex}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:px-4{padding-left:1rem;padding-right:1rem}}@media(min-width:768px){.md\:block{display:block}.md\:inline-flex{display:inline-flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:1024px){.lg\:inline{display:inline}.lg\:flex{display:flex}.lg\:w-20{width:5rem}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:1280px){.xl\:inline{display:inline}.xl\:flex{display:flex}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:1536px){.\32xl\:inline{display:inline}.\32xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&\:\:-webkit-slider-thumb\]\:h-3::-webkit-slider-thumb{height:.75rem}.\[\&\:\:-webkit-slider-thumb\]\:w-3::-webkit-slider-thumb{width:.75rem}.\[\&\:\:-webkit-slider-thumb\]\:appearance-none::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\[\&\:\:-webkit-slider-thumb\]\:rounded-full::-webkit-slider-thumb{border-radius:9999px}.\[\&\:\:-webkit-slider-thumb\]\:bg-accent-blue::-webkit-slider-thumb{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent-blue) / var(--tw-bg-opacity, 1))}
|